hwp-convert 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +185 -0
- package/LICENSE +25 -0
- package/NOTICE +23 -0
- package/README.md +338 -0
- package/dist/browser/hwp-convert.browser.mjs +20677 -0
- package/dist/browser/hwp-convert.browser.mjs.map +7 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +267 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/lib/errors.d.ts +9 -0
- package/dist/lib/errors.js +18 -0
- package/dist/lib/hwp/binData.d.ts +15 -0
- package/dist/lib/hwp/binData.js +64 -0
- package/dist/lib/hwp/bodyText.d.ts +31 -0
- package/dist/lib/hwp/bodyText.js +208 -0
- package/dist/lib/hwp/byteReader.d.ts +40 -0
- package/dist/lib/hwp/byteReader.js +116 -0
- package/dist/lib/hwp/cfbReader.d.ts +44 -0
- package/dist/lib/hwp/cfbReader.js +134 -0
- package/dist/lib/hwp/control.d.ts +17 -0
- package/dist/lib/hwp/control.js +290 -0
- package/dist/lib/hwp/converter.d.ts +22 -0
- package/dist/lib/hwp/converter.js +41 -0
- package/dist/lib/hwp/docInfo.d.ts +26 -0
- package/dist/lib/hwp/docInfo.js +396 -0
- package/dist/lib/hwp/fileHeader.d.ts +42 -0
- package/dist/lib/hwp/fileHeader.js +66 -0
- package/dist/lib/hwp/htmlReader.d.ts +17 -0
- package/dist/lib/hwp/htmlReader.js +602 -0
- package/dist/lib/hwp/hwpxBuilder.d.ts +19 -0
- package/dist/lib/hwp/hwpxBuilder.js +633 -0
- package/dist/lib/hwp/index.d.ts +68 -0
- package/dist/lib/hwp/index.js +149 -0
- package/dist/lib/hwp/mdReader.d.ts +16 -0
- package/dist/lib/hwp/mdReader.js +485 -0
- package/dist/lib/hwp/mdWriter.d.ts +23 -0
- package/dist/lib/hwp/mdWriter.js +182 -0
- package/dist/lib/hwp/owpml.d.ts +33 -0
- package/dist/lib/hwp/owpml.js +86 -0
- package/dist/lib/hwp/record.d.ts +24 -0
- package/dist/lib/hwp/record.js +59 -0
- package/dist/lib/hwp/tags.d.ts +115 -0
- package/dist/lib/hwp/tags.js +217 -0
- package/dist/lib/hwp/types.d.ts +214 -0
- package/dist/lib/hwp/types.js +5 -0
- package/dist/lib/hwpxReader.d.ts +60 -0
- package/dist/lib/hwpxReader.js +1104 -0
- package/dist/lib/types.d.ts +47 -0
- package/dist/lib/types.js +1 -0
- package/dist/lib/writer.d.ts +19 -0
- package/dist/lib/writer.js +149 -0
- package/package.json +94 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/jszip/dist/jszip.min.js", "../../scripts/empty.mjs", "../../node_modules/cfb/cfb.js", "../../node_modules/fast-xml-parser/src/util.js", "../../node_modules/fast-xml-parser/src/validator.js", "../../node_modules/@nodable/entities/src/entities.js", "../../node_modules/@nodable/entities/src/EntityDecoder.js", "../../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js", "../../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js", "../../node_modules/xml-naming/src/index.js", "../../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js", "../../node_modules/anynum/digitTable.js", "../../node_modules/anynum/anynum.js", "../../node_modules/strnum/strnum.js", "../../node_modules/fast-xml-parser/src/ignoreAttributes.js", "../../node_modules/path-expression-matcher/src/Expression.js", "../../node_modules/path-expression-matcher/src/ExpressionSet.js", "../../node_modules/path-expression-matcher/src/Matcher.js", "../../node_modules/is-unsafe/src/contexts/html.js", "../../node_modules/is-unsafe/src/contexts/xml.js", "../../node_modules/is-unsafe/src/contexts/svg.js", "../../node_modules/is-unsafe/src/contexts/sql.js", "../../node_modules/is-unsafe/src/contexts/sql-strict.js", "../../node_modules/is-unsafe/src/contexts/shell.js", "../../node_modules/is-unsafe/src/contexts/redos.js", "../../node_modules/is-unsafe/src/contexts/nosql.js", "../../node_modules/is-unsafe/src/contexts/log.js", "../../node_modules/is-unsafe/src/registry.js", "../../node_modules/is-unsafe/src/index.js", "../../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js", "../../node_modules/fast-xml-parser/src/xmlparser/node2json.js", "../../node_modules/fast-xml-parser/src/xmlparser/XMLParser.js", "../../src/lib/hwpxReader.ts", "../../src/lib/errors.ts", "../../src/lib/writer.ts", "../../src/lib/hwp/owpml.ts", "../../src/lib/hwp/fileHeader.ts", "../../src/lib/hwp/cfbReader.ts", "../../node_modules/pako/dist/pako.esm.mjs", "../../src/lib/hwp/byteReader.ts", "../../src/lib/hwp/tags.ts", "../../src/lib/hwp/record.ts", "../../src/lib/hwp/docInfo.ts", "../../src/lib/hwp/control.ts", "../../src/lib/hwp/bodyText.ts", "../../src/lib/hwp/binData.ts", "../../src/lib/hwp/hwpxBuilder.ts", "../../src/lib/hwp/mdWriter.ts", "../../node_modules/marked/src/defaults.ts", "../../node_modules/marked/src/rules.ts", "../../node_modules/marked/src/helpers.ts", "../../node_modules/marked/src/Tokenizer.ts", "../../node_modules/marked/src/Lexer.ts", "../../node_modules/marked/src/Renderer.ts", "../../node_modules/marked/src/TextRenderer.ts", "../../node_modules/marked/src/Parser.ts", "../../node_modules/marked/src/Hooks.ts", "../../node_modules/marked/src/Instance.ts", "../../node_modules/marked/src/marked.ts", "../../src/lib/hwp/mdReader.ts", "../../node_modules/entities/src/decode-codepoint.ts", "../../node_modules/entities/src/internal/decode-shared.ts", "../../node_modules/entities/src/generated/decode-data-html.ts", "../../node_modules/entities/src/generated/decode-data-xml.ts", "../../node_modules/entities/src/internal/bin-trie-flags.ts", "../../node_modules/entities/src/decode.ts", "../../node_modules/htmlparser2/src/Tokenizer.ts", "../../node_modules/htmlparser2/src/Parser.ts", "../../src/lib/hwp/htmlReader.ts", "../../src/lib/hwp/converter.ts", "../../src/lib/hwp/index.ts"],
|
|
4
|
+
"sourcesContent": ["/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});", "// Browser-safe stub for Node-only modules (fs, path).\r\n// cfb \uD328\uD0A4\uC9C0\uAC00 require('fs') \uB4F1\uC744 \uC2DC\uB3C4\uD574\uB3C4 \uBE48 \uAC1D\uCCB4\uB97C \uBC1B\uC544 fallback \uACBD\uB85C\uB85C \uB3D9\uC791.\r\nexport default {};\r\nexport const readFileSync = () => { throw new Error(\"fs not available in browser\"); };\r\nexport const writeFileSync = () => { throw new Error(\"fs not available in browser\"); };\r\n", "/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global module, require:false, process:false, Buffer:false, Uint8Array:false, Uint16Array:false */\n\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n\tvar o = \"\";\n\tvar c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n\tfor (var i = 0; i < input.length; ) {\n\t\tc1 = input.charCodeAt(i++);\n\t\te1 = (c1 >> 2);\n\t\tc2 = input.charCodeAt(i++);\n\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\t\tc3 = input.charCodeAt(i++);\n\t\te3 = ((c2 & 15) << 2) | (c3 >> 6);\n\t\te4 = (c3 & 63);\n\t\tif (isNaN(c2)) e3 = e4 = 64;\n\t\telse if (isNaN(c3)) e4 = 64;\n\t\to += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n\t}\n\treturn o;\n}\nfunction Base64_decode(input) {\n\tvar o = \"\";\n\tvar c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n\tinput = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\tfor (var i = 0; i < input.length;) {\n\t\te1 = Base64_map.indexOf(input.charAt(i++));\n\t\te2 = Base64_map.indexOf(input.charAt(i++));\n\t\tc1 = (e1 << 2) | (e2 >> 4);\n\t\to += String.fromCharCode(c1);\n\t\te3 = Base64_map.indexOf(input.charAt(i++));\n\t\tc2 = ((e2 & 15) << 4) | (e3 >> 2);\n\t\tif (e3 !== 64) o += String.fromCharCode(c2);\n\t\te4 = Base64_map.indexOf(input.charAt(i++));\n\t\tc3 = ((e3 & 3) << 6) | e4;\n\t\tif (e4 !== 64) o += String.fromCharCode(c3);\n\t}\n\treturn o;\n}\nvar has_buf = (function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = (function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\n\n\nfunction new_raw_buf(len) {\n\t/* jshint -W056 */\n\tif(has_buf) {\n\t\tif(Buffer.alloc) return Buffer.alloc(len);\n\t\tvar b = new Buffer(len); b.fill(0); return b;\n\t}\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s) {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x){ return x.charCodeAt(0) & 0xff; });\n};\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\nvar __toBuffer = function(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };\nvar ___toBuffer = __toBuffer;\nvar __utf16le = function(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(\"\").replace(chr0,''); };\nvar ___utf16le = __utf16le;\nvar __hexlify = function(b,s,l) { var ss=[]; for(var i=s; i<s+l; ++i) ss.push((\"0\" + b[i].toString(16)).slice(-2)); return ss.join(\"\"); };\nvar ___hexlify = __hexlify;\nvar __bconcat = function(bufs) {\n\tif(Array.isArray(bufs[0])) return [].concat.apply([], bufs);\n\tvar maxlen = 0, i = 0;\n\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\tvar o = new Uint8Array(maxlen);\n\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += bufs[i].length, ++i) o.set(bufs[i], maxlen);\n\treturn o;\n};\nvar bconcat = __bconcat;\n\n\nif(has_buf) {\n\t__utf16le = function(b,s,e) {\n\t\tif(!Buffer.isBuffer(b)) return ___utf16le(b,s,e);\n\t\treturn b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/;\n\t};\n\t__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\n\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat((bufs[0])) : ___toBuffer(bufs);};\n\ts2a = function(s) { return Buffer_from(s, \"binary\"); };\n\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : __bconcat(bufs); };\n}\n\n\nvar __readUInt8 = function(b, idx) { return b[idx]; };\nvar __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };\nvar __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };\nvar __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b, idx) { return (b[idx+3]<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\n\nfunction ReadShift(size, t) {\n\tvar oI, oS, type = 0;\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); break;\n\t\tcase 2: oI = (t !== 'i' ? __readUInt16LE : __readInt16LE)(this, this.l); break;\n\t\tcase 4: oI = __readInt32LE(this, this.l); break;\n\t\tcase 16: type = 2; oS = __hexlify(this, this.l, size);\n\t}\n\tthis.l += size; if(type === 0) return oI; return oS;\n}\n\nvar __writeUInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\n\nfunction WriteShift(t, val, f) {\n\tvar size = 0, i = 0;\n\tswitch(f) {\n\t\tcase \"hex\": for(; i < t; ++i) {\nthis[this.l++] = parseInt(val.slice(2*i, 2*i+2), 16)||0;\n\t\t} return this;\n\t\tcase \"utf16le\":\nvar end = this.l + t;\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = cc & 0xff;\n\t\t\t\tthis[this.l++] = cc >> 8;\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t}\nswitch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr, fld) {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos) {\n\tblob.l = pos;\n\tblob.read_shift = ReadShift;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction new_buf(sz) {\n\tvar o = (new_raw_buf(sz));\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = (function() {\nvar CRC32 = {};\nCRC32.version = '1.2.1';\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B, seed) {\n\tvar C = seed ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = (function _CFB(){\nvar exports = {};\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l, r) {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf, date) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf) {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob) {\n\tprep_blob(blob, 0);\n\tvar o = {};\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs;\nfunction get_fs() { return fs || (fs = require('fs')); }\nfunction parse(file, options) {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob = file.slice(0,512);\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files = {}, Paths = [], FileIndex = [], FullPaths = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob) {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob, mver) {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file, ssz) {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI, FP, Paths) {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad = [], q = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry, payload, mini) {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size));\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0));\n\treturn (bconcat(o).slice(0, entry.size));\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n\tvar q = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n\tvar buf = [], buf_chain = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n\tvar sl = sectors.length, sector_list = ([]);\n\tvar chkd = [], buf = [], buf_chain = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])});\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob = sector.slice(i, i+128);\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size));\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob, offset) {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename, options) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob, options) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": return read_file(blob, options);\n\t\tcase \"base64\": return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": return parse(s2a(blob), options);\n\t}\n\treturn parse(blob, options);\n}\n\nfunction init_cfb(cfb, opts) {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 });\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb) {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb, f) {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t})]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb, options) {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb){\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w) {\n\t\tfor(T += w; i<T-1; ++i) o.write_shift(-4, i+1);\n\t\tif(w) { ++i; o.write_shift(-4, ENDOFCHAIN); }\n\t};\n\tT = i = 0;\n\tfor(T+=L[1]; i<T; ++i) o.write_shift(-4, consts.DIFSECT);\n\tfor(T+=L[2]; i<T; ++i) o.write_shift(-4, consts.FATSECT);\n\tchainit(L[3]);\n\tchainit(L[4]);\n\tvar j = 0, flen = 0;\n\tvar file = cfb.FileIndex[0];\n\tfor(; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(flen < 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x01FF) >> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 32) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,32));\n\t\t\t_nm = _nm.slice(0, 32);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb, path) {\n\tvar UCFullPaths = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath = path.toUpperCase();\n\tvar w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb, filename, options) {\n\tget_fs();\n\tvar o = _write(cfb, options);\nfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o) {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb, options) {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<<n)-1);\n\tvar v = buf[h] >>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX) {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<<cleni)] = (cleni&15) | (i<<4);\n\t\t}\n\t}\n\treturn maxlen;\n}\n\n/* Fixed Huffman */\nvar fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\nvar fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\nif(!use_typed_arrays) {\n\tfor(var i = 0; i < 512; ++i) fix_lmap[i] = 0;\n\tfor(i = 0; i < 32; ++i) fix_dmap[i] = 0;\n}\n(function() {\n\tvar dlens = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = (function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<<cleni)] = (cleni&7) | (i<<3);\n\t\t}\n\t}\n\n\t/* read literal and dist codes at once */\n\tvar hcodes = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file, options) {\n\tvar blob = file;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(blob.slice(blob.l+namelen, blob.l+namelen+efsz));\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob, csz, usz, o, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\tvar _crc32 = CRC32.buf(data, 0);\n\tif((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb, options) {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(fi.content, 0);\n\n\t\tvar outbuf = fi.content;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, fi.content.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out)), bconcat(cdirs), o]));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n});\n\nfunction get_content_type(fi, fp) {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr) {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n<table class=3DMsoTableGrid border=3D1 cellspacing=3D0 cellpadding=3D0 width=\n=\"70%\"\n```\n*/\nfunction write_quoted_printable(text) {\n\tvar encoded = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF=]/g, function(c) {\n\t\tvar w = c.charCodeAt(0).toString(16).toUpperCase();\n\t\treturn \"=\" + (w.length == 1 ? \"0\" + w : w);\n\t});\n\n\tencoded = encoded.replace(/ $/mg, \"=20\").replace(/\\t$/mg, \"=09\");\n\n\tif(encoded.charAt(0) == \"\\n\") encoded = \"=0D\" + encoded.slice(1);\n\tencoded = encoded.replace(/\\r(?!\\n)/mg, \"=0D\").replace(/\\n\\n/mg, \"\\n=0A\").replace(/([^\\r\\n])\\n/mg, \"$1=0A\");\n\n\tvar o = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data) {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb, data, root) {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file, options) {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb, options) {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts) {\n\tvar o = ({});\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb, name, content, opts) {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2});\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\nfile.content = (content);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb, name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb, old_name, new_name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb) { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\n", "'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nexport const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nexport function getAllMatches(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n}\n\nexport const isName = function (string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n}\n\nexport function isExist(v) {\n return typeof v !== 'undefined';\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nexport function getValue(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n}\n\n/**\n * Dangerous property names that could lead to prototype pollution or security issues\n */\nexport const DANGEROUS_PROPERTY_NAMES = [\n // '__proto__',\n // 'constructor',\n // 'prototype',\n 'hasOwnProperty',\n 'toString',\n 'valueOf',\n '__defineGetter__',\n '__defineSetter__',\n '__lookupGetter__',\n '__lookupSetter__'\n];\n\nexport const criticalProperties = [\"__proto__\", \"constructor\", \"prototype\"];", "'use strict';\n\nimport { getAllMatches, isName } from './util.js';\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexport function validate(xmlData, options) {\n options = Object.assign({}, defaultOptions, options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n\n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === '<' && xmlData[i + 1] === '?') {\n i += 2;\n i = readPI(xmlData, i);\n if (i.err) return i;\n } else if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n let tagStartPos = i;\n i++;\n\n if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\" + tagName + \"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + tagName + \"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\" + tagName + \"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject('InvalidTag',\n \"Expected closing tag '\" + otg.tagName + \"' (opened in line \" + openPos.line + \", col \" + openPos.col + \") instead of closing tag '\" + tagName + \"'.\",\n getLineNumberForPosition(xmlData, tagStartPos));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) {\n //don't push into stack\n } else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i + 1] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length == 1) {\n return getErrorObject('InvalidTag', \"Unclosed tag '\" + tags[0].tagName + \"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\" +\n JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '') +\n \"' found.\", { line: 1, col: 1 });\n }\n\n return true;\n};\n\nfunction isWhiteSpace(char) {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i]))\n } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n return getErrorObject('InvalidAttr', \"Attribute '\" + matches[i][2] + \"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!Object.prototype.hasOwnProperty.call(attrNames, attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\n", "// ---------------------------------------------------------------------------\n// Complete HTML5 named entity reference\n// Organized by logical categories for easy maintenance and selective importing\n// ---------------------------------------------------------------------------\n\n/**\n * Basic Latin & Special Characters\n * @type {Record<string, string>}\n */\nexport const BASIC_LATIN = {\n amp: '&',\n AMP: '&',\n lt: '<',\n LT: '<',\n gt: '>',\n GT: '>',\n quot: '\"',\n QUOT: '\"',\n apos: \"'\",\n lsquo: '\u2018',\n rsquo: '\u2019',\n ldquo: '\u201C',\n rdquo: '\u201D',\n lsquor: '\u201A',\n rsquor: '\u2019',\n ldquor: '\u201E',\n bdquo: '\u201E',\n comma: ',',\n period: '.',\n colon: ':',\n semi: ';',\n excl: '!',\n quest: '?',\n num: '#',\n dollar: '$',\n percent: '%',\n ast: '*',\n commat: '@',\n lowbar: '_',\n verbar: '|',\n vert: '|',\n sol: '/',\n bsol: '\\\\',\n lbrace: '{',\n rbrace: '}',\n lbrack: '[',\n rbrack: ']',\n lpar: '(',\n rpar: ')',\n nbsp: '\\u00a0',\n iexcl: '\u00A1',\n cent: '\u00A2',\n pound: '\u00A3',\n curren: '\u00A4',\n yen: '\u00A5',\n brvbar: '\u00A6',\n sect: '\u00A7',\n uml: '\u00A8',\n copy: '\u00A9',\n COPY: '\u00A9',\n ordf: '\u00AA',\n laquo: '\u00AB',\n not: '\u00AC',\n shy: '\\u00ad',\n reg: '\u00AE',\n REG: '\u00AE',\n macr: '\u00AF',\n deg: '\u00B0',\n plusmn: '\u00B1',\n sup2: '\u00B2',\n sup3: '\u00B3',\n acute: '\u00B4',\n micro: '\u00B5',\n para: '\u00B6',\n middot: '\u00B7',\n cedil: '\u00B8',\n sup1: '\u00B9',\n ordm: '\u00BA',\n raquo: '\u00BB',\n frac14: '\u00BC',\n frac12: '\u00BD',\n half: '\u00BD',\n frac34: '\u00BE',\n iquest: '\u00BF',\n times: '\u00D7',\n div: '\u00F7',\n divide: '\u00F7',\n};\n\n/**\n * Latin Extended & Accented Letters (A-Z)\n * @type {Record<string, string>}\n */\nexport const LATIN_ACCENTS = {\n Agrave: '\u00C0',\n agrave: '\u00E0',\n Aacute: '\u00C1',\n aacute: '\u00E1',\n Acirc: '\u00C2',\n acirc: '\u00E2',\n Atilde: '\u00C3',\n atilde: '\u00E3',\n Auml: '\u00C4',\n auml: '\u00E4',\n Aring: '\u00C5',\n aring: '\u00E5',\n AElig: '\u00C6',\n aelig: '\u00E6',\n Ccedil: '\u00C7',\n ccedil: '\u00E7',\n Egrave: '\u00C8',\n egrave: '\u00E8',\n Eacute: '\u00C9',\n eacute: '\u00E9',\n Ecirc: '\u00CA',\n ecirc: '\u00EA',\n Euml: '\u00CB',\n euml: '\u00EB',\n Igrave: '\u00CC',\n igrave: '\u00EC',\n Iacute: '\u00CD',\n iacute: '\u00ED',\n Icirc: '\u00CE',\n icirc: '\u00EE',\n Iuml: '\u00CF',\n iuml: '\u00EF',\n ETH: '\u00D0',\n eth: '\u00F0',\n Ntilde: '\u00D1',\n ntilde: '\u00F1',\n Ograve: '\u00D2',\n ograve: '\u00F2',\n Oacute: '\u00D3',\n oacute: '\u00F3',\n Ocirc: '\u00D4',\n ocirc: '\u00F4',\n Otilde: '\u00D5',\n otilde: '\u00F5',\n Ouml: '\u00D6',\n ouml: '\u00F6',\n Oslash: '\u00D8',\n oslash: '\u00F8',\n Ugrave: '\u00D9',\n ugrave: '\u00F9',\n Uacute: '\u00DA',\n uacute: '\u00FA',\n Ucirc: '\u00DB',\n ucirc: '\u00FB',\n Uuml: '\u00DC',\n uuml: '\u00FC',\n Yacute: '\u00DD',\n yacute: '\u00FD',\n THORN: '\u00DE',\n thorn: '\u00FE',\n szlig: '\u00DF',\n yuml: '\u00FF',\n Yuml: '\u0178',\n};\n\n/**\n * Latin Extended (Letters with diacritics)\n * @type {Record<string, string>}\n */\nexport const LATIN_EXTENDED = {\n Amacr: '\u0100',\n amacr: '\u0101',\n Abreve: '\u0102',\n abreve: '\u0103',\n Aogon: '\u0104',\n aogon: '\u0105',\n Cacute: '\u0106',\n cacute: '\u0107',\n Ccirc: '\u0108',\n ccirc: '\u0109',\n Cdot: '\u010A',\n cdot: '\u010B',\n Ccaron: '\u010C',\n ccaron: '\u010D',\n Dcaron: '\u010E',\n dcaron: '\u010F',\n Dstrok: '\u0110',\n dstrok: '\u0111',\n Emacr: '\u0112',\n emacr: '\u0113',\n Ecaron: '\u011A',\n ecaron: '\u011B',\n Edot: '\u0116',\n edot: '\u0117',\n Eogon: '\u0118',\n eogon: '\u0119',\n Gcirc: '\u011C',\n gcirc: '\u011D',\n Gbreve: '\u011E',\n gbreve: '\u011F',\n Gdot: '\u0120',\n gdot: '\u0121',\n Gcedil: '\u0122',\n Hcirc: '\u0124',\n hcirc: '\u0125',\n Hstrok: '\u0126',\n hstrok: '\u0127',\n Itilde: '\u0128',\n itilde: '\u0129',\n Imacr: '\u012A',\n imacr: '\u012B',\n Iogon: '\u012E',\n iogon: '\u012F',\n Idot: '\u0130',\n IJlig: '\u0132',\n ijlig: '\u0133',\n Jcirc: '\u0134',\n jcirc: '\u0135',\n Kcedil: '\u0136',\n kcedil: '\u0137',\n kgreen: '\u0138',\n Lacute: '\u0139',\n lacute: '\u013A',\n Lcedil: '\u013B',\n lcedil: '\u013C',\n Lcaron: '\u013D',\n lcaron: '\u013E',\n Lmidot: '\u013F',\n lmidot: '\u0140',\n Lstrok: '\u0141',\n lstrok: '\u0142',\n Nacute: '\u0143',\n nacute: '\u0144',\n Ncaron: '\u0147',\n ncaron: '\u0148',\n Ncedil: '\u0145',\n ncedil: '\u0146',\n ENG: '\u014A',\n eng: '\u014B',\n Omacr: '\u014C',\n omacr: '\u014D',\n Odblac: '\u0150',\n odblac: '\u0151',\n OElig: '\u0152',\n oelig: '\u0153',\n Racute: '\u0154',\n racute: '\u0155',\n Rcaron: '\u0158',\n rcaron: '\u0159',\n Rcedil: '\u0156',\n rcedil: '\u0157',\n Sacute: '\u015A',\n sacute: '\u015B',\n Scirc: '\u015C',\n scirc: '\u015D',\n Scedil: '\u015E',\n scedil: '\u015F',\n Scaron: '\u0160',\n scaron: '\u0161',\n Tcedil: '\u0162',\n tcedil: '\u0163',\n Tcaron: '\u0164',\n tcaron: '\u0165',\n Tstrok: '\u0166',\n tstrok: '\u0167',\n Utilde: '\u0168',\n utilde: '\u0169',\n Umacr: '\u016A',\n umacr: '\u016B',\n Ubreve: '\u016C',\n ubreve: '\u016D',\n Uring: '\u016E',\n uring: '\u016F',\n Udblac: '\u0170',\n udblac: '\u0171',\n Uogon: '\u0172',\n uogon: '\u0173',\n Wcirc: '\u0174',\n wcirc: '\u0175',\n Ycirc: '\u0176',\n ycirc: '\u0177',\n Zacute: '\u0179',\n zacute: '\u017A',\n Zdot: '\u017B',\n zdot: '\u017C',\n Zcaron: '\u017D',\n zcaron: '\u017E',\n};\n\n/**\n * Greek Letters\n * @type {Record<string, string>}\n */\nexport const GREEK = {\n Alpha: '\u0391',\n alpha: '\u03B1',\n Beta: '\u0392',\n beta: '\u03B2',\n Gamma: '\u0393',\n gamma: '\u03B3',\n Delta: '\u0394',\n delta: '\u03B4',\n Epsilon: '\u0395',\n epsilon: '\u03B5',\n epsiv: '\u03F5',\n varepsilon: '\u03F5',\n Zeta: '\u0396',\n zeta: '\u03B6',\n Eta: '\u0397',\n eta: '\u03B7',\n Theta: '\u0398',\n theta: '\u03B8',\n thetasym: '\u03D1',\n vartheta: '\u03D1',\n Iota: '\u0399',\n iota: '\u03B9',\n Kappa: '\u039A',\n kappa: '\u03BA',\n kappav: '\u03F0',\n varkappa: '\u03F0',\n Lambda: '\u039B',\n lambda: '\u03BB',\n Mu: '\u039C',\n mu: '\u03BC',\n Nu: '\u039D',\n nu: '\u03BD',\n Xi: '\u039E',\n xi: '\u03BE',\n Omicron: '\u039F',\n omicron: '\u03BF',\n Pi: '\u03A0',\n pi: '\u03C0',\n piv: '\u03D6',\n varpi: '\u03D6',\n Rho: '\u03A1',\n rho: '\u03C1',\n rhov: '\u03F1',\n varrho: '\u03F1',\n Sigma: '\u03A3',\n sigma: '\u03C3',\n sigmaf: '\u03C2',\n sigmav: '\u03C2',\n varsigma: '\u03C2',\n Tau: '\u03A4',\n tau: '\u03C4',\n Upsilon: '\u03A5',\n upsilon: '\u03C5',\n upsi: '\u03C5',\n Upsi: '\u03D2',\n upsih: '\u03D2',\n Phi: '\u03A6',\n phi: '\u03C6',\n phiv: '\u03D5',\n varphi: '\u03D5',\n Chi: '\u03A7',\n chi: '\u03C7',\n Psi: '\u03A8',\n psi: '\u03C8',\n Omega: '\u03A9',\n omega: '\u03C9',\n ohm: '\u03A9',\n Gammad: '\u03DC',\n gammad: '\u03DD',\n digamma: '\u03DD',\n};\n\n/**\n * Cyrillic Letters\n * @type {Record<string, string>}\n */\nexport const CYRILLIC = {\n Afr: '\uD835\uDD04',\n afr: '\uD835\uDD1E',\n Acy: '\u0410',\n acy: '\u0430',\n Bcy: '\u0411',\n bcy: '\u0431',\n Vcy: '\u0412',\n vcy: '\u0432',\n Gcy: '\u0413',\n gcy: '\u0433',\n Dcy: '\u0414',\n dcy: '\u0434',\n IEcy: '\u0415',\n iecy: '\u0435',\n IOcy: '\u0401',\n iocy: '\u0451',\n ZHcy: '\u0416',\n zhcy: '\u0436',\n Zcy: '\u0417',\n zcy: '\u0437',\n Icy: '\u0418',\n icy: '\u0438',\n Jcy: '\u0419',\n jcy: '\u0439',\n Kcy: '\u041A',\n kcy: '\u043A',\n Lcy: '\u041B',\n lcy: '\u043B',\n Mcy: '\u041C',\n mcy: '\u043C',\n Ncy: '\u041D',\n ncy: '\u043D',\n Ocy: '\u041E',\n ocy: '\u043E',\n Pcy: '\u041F',\n pcy: '\u043F',\n Rcy: '\u0420',\n rcy: '\u0440',\n Scy: '\u0421',\n scy: '\u0441',\n Tcy: '\u0422',\n tcy: '\u0442',\n Ucy: '\u0423',\n ucy: '\u0443',\n Fcy: '\u0424',\n fcy: '\u0444',\n KHcy: '\u0425',\n khcy: '\u0445',\n TScy: '\u0426',\n tscy: '\u0446',\n CHcy: '\u0427',\n chcy: '\u0447',\n SHcy: '\u0428',\n shcy: '\u0448',\n SHCHcy: '\u0429',\n shchcy: '\u0449',\n HARDcy: '\u042A',\n hardcy: '\u044A',\n Ycy: '\u042B',\n ycy: '\u044B',\n SOFTcy: '\u042C',\n softcy: '\u044C',\n Ecy: '\u042D',\n ecy: '\u044D',\n YUcy: '\u042E',\n yucy: '\u044E',\n YAcy: '\u042F',\n yacy: '\u044F',\n DJcy: '\u0402',\n djcy: '\u0452',\n GJcy: '\u0403',\n gjcy: '\u0453',\n Jukcy: '\u0404',\n jukcy: '\u0454',\n DScy: '\u0405',\n dscy: '\u0455',\n Iukcy: '\u0406',\n iukcy: '\u0456',\n YIcy: '\u0407',\n yicy: '\u0457',\n Jsercy: '\u0408',\n jsercy: '\u0458',\n LJcy: '\u0409',\n ljcy: '\u0459',\n NJcy: '\u040A',\n njcy: '\u045A',\n TSHcy: '\u040B',\n tshcy: '\u045B',\n KJcy: '\u040C',\n kjcy: '\u045C',\n Ubrcy: '\u040E',\n ubrcy: '\u045E',\n DZcy: '\u040F',\n dzcy: '\u045F',\n};\n\n/**\n * Mathematical Operators & Relations\n * @type {Record<string, string>}\n */\nexport const MATH = {\n plus: '+',\n pm: '\u00B1',\n times: '\u00D7',\n div: '\u00F7',\n divide: '\u00F7',\n sdot: '\u22C5',\n star: '\u2606',\n starf: '\u2605',\n bigstar: '\u2605',\n lowast: '\u2217',\n ast: '*',\n midast: '*',\n compfn: '\u2218',\n smallcircle: '\u2218',\n bullet: '\u2022',\n bull: '\u2022',\n nbsp: '\\u00a0',\n hellip: '\u2026',\n mldr: '\u2026',\n prime: '\u2032',\n Prime: '\u2033',\n tprime: '\u2034',\n bprime: '\u2035',\n backprime: '\u2035',\n minus: '\u2212',\n minusd: '\u2238',\n dotminus: '\u2238',\n plusdo: '\u2214',\n dotplus: '\u2214',\n plusmn: '\u00B1',\n minusplus: '\u2213',\n mnplus: '\u2213',\n mp: '\u2213',\n setminus: '\u2216',\n smallsetminus: '\u2216',\n Backslash: '\u2216',\n setmn: '\u2216',\n ssetmn: '\u2216',\n lowbar: '_',\n verbar: '|',\n vert: '|',\n VerticalLine: '|',\n colon: ':',\n Colon: '\u2237',\n Proportion: '\u2237',\n ratio: '\u2236',\n equals: '=',\n ne: '\u2260',\n nequiv: '\u2262',\n equiv: '\u2261',\n Congruent: '\u2261',\n sim: '\u223C',\n thicksim: '\u223C',\n thksim: '\u223C',\n sime: '\u2243',\n simeq: '\u2243',\n TildeEqual: '\u2243',\n asymp: '\u2248',\n approx: '\u2248',\n thickapprox: '\u2248',\n thkap: '\u2248',\n TildeTilde: '\u2248',\n ncong: '\u2247',\n cong: '\u2245',\n TildeFullEqual: '\u2245',\n asympeq: '\u224D',\n CupCap: '\u224D',\n bump: '\u224E',\n Bumpeq: '\u224E',\n HumpDownHump: '\u224E',\n bumpe: '\u224F',\n bumpeq: '\u224F',\n HumpEqual: '\u224F',\n le: '\u2264',\n LessEqual: '\u2264',\n ge: '\u2265',\n GreaterEqual: '\u2265',\n lesseqgtr: '\u22DA',\n lesseqqgtr: '\u2A8B',\n greater: '>',\n less: '<',\n};\n\n/**\n * Mathematical Operators (Advanced)\n * @type {Record<string, string>}\n */\nexport const MATH_ADVANCED = {\n alefsym: '\u2135',\n aleph: '\u2135',\n beth: '\u2136',\n gimel: '\u2137',\n daleth: '\u2138',\n forall: '\u2200',\n ForAll: '\u2200',\n part: '\u2202',\n PartialD: '\u2202',\n exist: '\u2203',\n Exists: '\u2203',\n nexist: '\u2204',\n nexists: '\u2204',\n empty: '\u2205',\n emptyset: '\u2205',\n emptyv: '\u2205',\n varnothing: '\u2205',\n nabla: '\u2207',\n Del: '\u2207',\n isin: '\u2208',\n isinv: '\u2208',\n in: '\u2208',\n Element: '\u2208',\n notin: '\u2209',\n notinva: '\u2209',\n ni: '\u220B',\n niv: '\u220B',\n SuchThat: '\u220B',\n ReverseElement: '\u220B',\n notni: '\u220C',\n notniva: '\u220C',\n prod: '\u220F',\n Product: '\u220F',\n coprod: '\u2210',\n Coproduct: '\u2210',\n sum: '\u2211',\n Sum: '\u2211',\n minus: '\u2212',\n mp: '\u2213',\n plusdo: '\u2214',\n dotplus: '\u2214',\n setminus: '\u2216',\n lowast: '\u2217',\n radic: '\u221A',\n Sqrt: '\u221A',\n prop: '\u221D',\n propto: '\u221D',\n Proportional: '\u221D',\n varpropto: '\u221D',\n infin: '\u221E',\n infintie: '\u29DD',\n ang: '\u2220',\n angle: '\u2220',\n angmsd: '\u2221',\n measuredangle: '\u2221',\n angsph: '\u2222',\n mid: '\u2223',\n VerticalBar: '\u2223',\n nmid: '\u2224',\n nsmid: '\u2224',\n npar: '\u2226',\n parallel: '\u2225',\n spar: '\u2225',\n nparallel: '\u2226',\n nspar: '\u2226',\n and: '\u2227',\n wedge: '\u2227',\n or: '\u2228',\n vee: '\u2228',\n cap: '\u2229',\n cup: '\u222A',\n int: '\u222B',\n Integral: '\u222B',\n conint: '\u222E',\n ContourIntegral: '\u222E',\n Conint: '\u222F',\n DoubleContourIntegral: '\u222F',\n Cconint: '\u2230',\n there4: '\u2234',\n therefore: '\u2234',\n Therefore: '\u2234',\n becaus: '\u2235',\n because: '\u2235',\n Because: '\u2235',\n ratio: '\u2236',\n Proportion: '\u2237',\n minusd: '\u2238',\n dotminus: '\u2238',\n mDDot: '\u223A',\n homtht: '\u223B',\n sim: '\u223C',\n bsimg: '\u223D',\n backsim: '\u223D',\n ac: '\u223E',\n mstpos: '\u223E',\n acd: '\u223F',\n VerticalTilde: '\u2240',\n wr: '\u2240',\n wreath: '\u2240',\n nsime: '\u2244',\n nsimeq: '\u2244',\n ncong: '\u2247',\n simne: '\u2246',\n ncongdot: '\u2A6D\u0338',\n ngsim: '\u2275',\n nsim: '\u2241',\n napprox: '\u2249',\n nap: '\u2249',\n ngeq: '\u2271',\n nge: '\u2271',\n nleq: '\u2270',\n nle: '\u2270',\n ngtr: '\u226F',\n ngt: '\u226F',\n nless: '\u226E',\n nlt: '\u226E',\n nprec: '\u2280',\n npr: '\u2280',\n nsucc: '\u2281',\n nsc: '\u2281',\n};\n\n/**\n * Arrows\n * @type {Record<string, string>}\n */\nexport const ARROWS = {\n larr: '\u2190',\n leftarrow: '\u2190',\n LeftArrow: '\u2190',\n uarr: '\u2191',\n uparrow: '\u2191',\n UpArrow: '\u2191',\n rarr: '\u2192',\n rightarrow: '\u2192',\n RightArrow: '\u2192',\n darr: '\u2193',\n downarrow: '\u2193',\n DownArrow: '\u2193',\n harr: '\u2194',\n leftrightarrow: '\u2194',\n LeftRightArrow: '\u2194',\n varr: '\u2195',\n updownarrow: '\u2195',\n UpDownArrow: '\u2195',\n nwarr: '\u2196',\n nwarrow: '\u2196',\n UpperLeftArrow: '\u2196',\n nearr: '\u2197',\n nearrow: '\u2197',\n UpperRightArrow: '\u2197',\n searr: '\u2198',\n searrow: '\u2198',\n LowerRightArrow: '\u2198',\n swarr: '\u2199',\n swarrow: '\u2199',\n LowerLeftArrow: '\u2199',\n lArr: '\u21D0',\n Leftarrow: '\u21D0',\n uArr: '\u21D1',\n Uparrow: '\u21D1',\n rArr: '\u21D2',\n Rightarrow: '\u21D2',\n dArr: '\u21D3',\n Downarrow: '\u21D3',\n hArr: '\u21D4',\n Leftrightarrow: '\u21D4',\n iff: '\u21D4',\n vArr: '\u21D5',\n Updownarrow: '\u21D5',\n lAarr: '\u21DA',\n Lleftarrow: '\u21DA',\n rAarr: '\u21DB',\n Rrightarrow: '\u21DB',\n lrarr: '\u21C6',\n leftrightarrows: '\u21C6',\n rlarr: '\u21C4',\n rightleftarrows: '\u21C4',\n lrhar: '\u21CB',\n leftrightharpoons: '\u21CB',\n ReverseEquilibrium: '\u21CB',\n rlhar: '\u21CC',\n rightleftharpoons: '\u21CC',\n Equilibrium: '\u21CC',\n udarr: '\u21C5',\n UpArrowDownArrow: '\u21C5',\n duarr: '\u21F5',\n DownArrowUpArrow: '\u21F5',\n llarr: '\u21C7',\n leftleftarrows: '\u21C7',\n rrarr: '\u21C9',\n rightrightarrows: '\u21C9',\n ddarr: '\u21CA',\n downdownarrows: '\u21CA',\n har: '\u21BD',\n lhard: '\u21BD',\n leftharpoondown: '\u21BD',\n lharu: '\u21BC',\n leftharpoonup: '\u21BC',\n rhard: '\u21C1',\n rightharpoondown: '\u21C1',\n rharu: '\u21C0',\n rightharpoonup: '\u21C0',\n lsh: '\u21B0',\n Lsh: '\u21B0',\n rsh: '\u21B1',\n Rsh: '\u21B1',\n ldsh: '\u21B2',\n rdsh: '\u21B3',\n hookleftarrow: '\u21A9',\n hookrightarrow: '\u21AA',\n mapstoleft: '\u21A4',\n mapstoup: '\u21A5',\n map: '\u21A6',\n mapsto: '\u21A6',\n mapstodown: '\u21A7',\n crarr: '\u21B5',\n nleftarrow: '\u219A',\n nleftrightarrow: '\u21AE',\n nrightarrow: '\u219B',\n nrarr: '\u219B',\n larrtl: '\u21A2',\n rarrtl: '\u21A3',\n leftarrowtail: '\u21A2',\n rightarrowtail: '\u21A3',\n twoheadleftarrow: '\u219E',\n twoheadrightarrow: '\u21A0',\n Larr: '\u219E',\n Rarr: '\u21A0',\n larrhk: '\u21A9',\n rarrhk: '\u21AA',\n larrlp: '\u21AB',\n looparrowleft: '\u21AB',\n rarrlp: '\u21AC',\n looparrowright: '\u21AC',\n harrw: '\u21AD',\n leftrightsquigarrow: '\u21AD',\n nrarrw: '\u219D\u0338',\n rarrw: '\u219D',\n rightsquigarrow: '\u219D',\n larrbfs: '\u291F',\n rarrbfs: '\u2920',\n nvHarr: '\u2904',\n nvlArr: '\u2902',\n nvrArr: '\u2903',\n larrfs: '\u291D',\n rarrfs: '\u291E',\n Map: '\u2905',\n larrsim: '\u2973',\n rarrsim: '\u2974',\n harrcir: '\u2948',\n Uarrocir: '\u2949',\n lurdshar: '\u294A',\n ldrdhar: '\u2967',\n ldrushar: '\u294B',\n rdldhar: '\u2969',\n lrhard: '\u296D',\n uharr: '\u21BE',\n uharl: '\u21BF',\n dharr: '\u21C2',\n dharl: '\u21C3',\n Uarr: '\u219F',\n Darr: '\u21A1',\n zigrarr: '\u21DD',\n nwArr: '\u21D6',\n neArr: '\u21D7',\n seArr: '\u21D8',\n swArr: '\u21D9',\n nharr: '\u21AE',\n nhArr: '\u21CE',\n nlarr: '\u219A',\n nlArr: '\u21CD',\n nrArr: '\u21CF',\n larrb: '\u21E4',\n LeftArrowBar: '\u21E4',\n rarrb: '\u21E5',\n RightArrowBar: '\u21E5',\n};\n\n/**\n * Geometric Shapes\n * @type {Record<string, string>}\n */\nexport const SHAPES = {\n square: '\u25A1',\n Square: '\u25A1',\n squ: '\u25A1',\n squf: '\u25AA',\n squarf: '\u25AA',\n blacksquar: '\u25AA',\n blacksquare: '\u25AA',\n FilledVerySmallSquare: '\u25AA',\n blk34: '\u2593',\n blk12: '\u2592',\n blk14: '\u2591',\n block: '\u2588',\n srect: '\u25AD',\n rect: '\u25AD',\n sdot: '\u22C5',\n sdotb: '\u22A1',\n dotsquare: '\u22A1',\n triangle: '\u25B5',\n tri: '\u25B5',\n trine: '\u25B5',\n utri: '\u25B5',\n triangledown: '\u25BF',\n dtri: '\u25BF',\n tridown: '\u25BF',\n triangleleft: '\u25C3',\n ltri: '\u25C3',\n triangleright: '\u25B9',\n rtri: '\u25B9',\n blacktriangle: '\u25B4',\n utrif: '\u25B4',\n blacktriangledown: '\u25BE',\n dtrif: '\u25BE',\n blacktriangleleft: '\u25C2',\n ltrif: '\u25C2',\n blacktriangleright: '\u25B8',\n rtrif: '\u25B8',\n loz: '\u25CA',\n lozenge: '\u25CA',\n blacklozenge: '\u29EB',\n lozf: '\u29EB',\n bigcirc: '\u25EF',\n xcirc: '\u25EF',\n circ: '\u02C6',\n Circle: '\u25CB',\n cir: '\u25CB',\n o: '\u25CB',\n bullet: '\u2022',\n bull: '\u2022',\n hellip: '\u2026',\n mldr: '\u2026',\n nldr: '\u2025',\n boxh: '\u2500',\n HorizontalLine: '\u2500',\n boxv: '\u2502',\n boxdr: '\u250C',\n boxdl: '\u2510',\n boxur: '\u2514',\n boxul: '\u2518',\n boxvr: '\u251C',\n boxvl: '\u2524',\n boxhd: '\u252C',\n boxhu: '\u2534',\n boxvh: '\u253C',\n boxH: '\u2550',\n boxV: '\u2551',\n boxdR: '\u2552',\n boxDr: '\u2553',\n boxDR: '\u2554',\n boxDl: '\u2555',\n boxdL: '\u2556',\n boxDL: '\u2557',\n boxuR: '\u2558',\n boxUr: '\u2559',\n boxUR: '\u255A',\n boxUl: '\u255C',\n boxuL: '\u255B',\n boxUL: '\u255D',\n boxvR: '\u255E',\n boxVr: '\u255F',\n boxVR: '\u2560',\n boxVl: '\u2562',\n boxvL: '\u2561',\n boxVL: '\u2563',\n boxHd: '\u2564',\n boxhD: '\u2565',\n boxHD: '\u2566',\n boxHu: '\u2567',\n boxhU: '\u2568',\n boxHU: '\u2569',\n boxvH: '\u256A',\n boxVh: '\u256B',\n boxVH: '\u256C',\n};\n\n/**\n * Punctuation & Diacritics\n * @type {Record<string, string>}\n */\nexport const PUNCTUATION = {\n excl: '!',\n iexcl: '\u00A1',\n brvbar: '\u00A6',\n sect: '\u00A7',\n uml: '\u00A8',\n copy: '\u00A9',\n ordf: '\u00AA',\n laquo: '\u00AB',\n not: '\u00AC',\n shy: '\\u00ad',\n reg: '\u00AE',\n macr: '\u00AF',\n deg: '\u00B0',\n plusmn: '\u00B1',\n sup2: '\u00B2',\n sup3: '\u00B3',\n acute: '\u00B4',\n micro: '\u00B5',\n para: '\u00B6',\n middot: '\u00B7',\n cedil: '\u00B8',\n sup1: '\u00B9',\n ordm: '\u00BA',\n raquo: '\u00BB',\n frac14: '\u00BC',\n frac12: '\u00BD',\n frac34: '\u00BE',\n iquest: '\u00BF',\n nbsp: '\\u00a0',\n comma: ',',\n period: '.',\n colon: ':',\n semi: ';',\n vert: '|',\n Verbar: '\u2016',\n verbar: '|',\n dblac: '\u02DD',\n circ: '\u02C6',\n caron: '\u02C7',\n breve: '\u02D8',\n dot: '\u02D9',\n ring: '\u02DA',\n ogon: '\u02DB',\n tilde: '\u02DC',\n DiacriticalGrave: '`',\n DiacriticalAcute: '\u00B4',\n DiacriticalTilde: '\u02DC',\n DiacriticalDot: '\u02D9',\n DiacriticalDoubleAcute: '\u02DD',\n grave: '`',\n};\n\n/**\n * Currency Symbols\n * @type {Record<string, string>}\n */\nexport const CURRENCY = {\n cent: '\u00A2',\n pound: '\u00A3',\n curren: '\u00A4',\n yen: '\u00A5',\n euro: '\u20AC',\n dollar: '$',\n fnof: '\u0192',\n inr: '\u20B9',\n af: '\u060B',\n birr: '\u1265\u122D',\n peso: '\u20B1',\n rub: '\u20BD',\n won: '\u20A9',\n yuan: '\u00A5',\n cedil: '\u00B8',\n};\n\n/**\n * Fractions\n * @type {Record<string, string>}\n */\nexport const FRACTIONS = {\n frac12: '\u00BD',\n half: '\u00BD',\n frac13: '\u2153',\n frac14: '\u00BC',\n frac15: '\u2155',\n frac16: '\u2159',\n frac18: '\u215B',\n frac23: '\u2154',\n frac25: '\u2156',\n frac34: '\u00BE',\n frac35: '\u2157',\n frac38: '\u215C',\n frac45: '\u2158',\n frac56: '\u215A',\n frac58: '\u215D',\n frac78: '\u215E',\n frasl: '\u2044',\n};\n\n/**\n * Miscellaneous Symbols\n * @type {Record<string, string>}\n */\nexport const MISC_SYMBOLS = {\n trade: '\u2122',\n TRADE: '\u2122',\n telrec: '\u2315',\n target: '\u2316',\n ulcorn: '\u231C',\n ulcorner: '\u231C',\n urcorn: '\u231D',\n urcorner: '\u231D',\n dlcorn: '\u231E',\n llcorner: '\u231E',\n drcorn: '\u231F',\n lrcorner: '\u231F',\n intercal: '\u22BA',\n intcal: '\u22BA',\n oplus: '\u2295',\n CirclePlus: '\u2295',\n ominus: '\u2296',\n CircleMinus: '\u2296',\n otimes: '\u2297',\n CircleTimes: '\u2297',\n osol: '\u2298',\n odot: '\u2299',\n CircleDot: '\u2299',\n oast: '\u229B',\n circledast: '\u229B',\n odash: '\u229D',\n circleddash: '\u229D',\n ocirc: '\u229A',\n circledcirc: '\u229A',\n boxplus: '\u229E',\n plusb: '\u229E',\n boxminus: '\u229F',\n minusb: '\u229F',\n boxtimes: '\u22A0',\n timesb: '\u22A0',\n boxdot: '\u22A1',\n sdotb: '\u22A1',\n veebar: '\u22BB',\n vee: '\u2228',\n barvee: '\u22BD',\n and: '\u2227',\n wedge: '\u2227',\n Cap: '\u22D2',\n Cup: '\u22D3',\n Fork: '\u22D4',\n pitchfork: '\u22D4',\n epar: '\u22D5',\n ltlarr: '\u2976',\n nvap: '\u224D\u20D2',\n nvsim: '\u223C\u20D2',\n nvge: '\u2265\u20D2',\n nvle: '\u2264\u20D2',\n nvlt: '<\u20D2',\n nvgt: '>\u20D2',\n nvltrie: '\u22B4\u20D2',\n nvrtrie: '\u22B5\u20D2',\n Vdash: '\u22A9',\n dashv: '\u22A3',\n vDash: '\u22A8',\n Vvdash: '\u22AA',\n nvdash: '\u22AC',\n nvDash: '\u22AD',\n nVdash: '\u22AE',\n nVDash: '\u22AF',\n};\n\n/**\n * All entities combined (if you need everything)\n * @type {Record<string, string>}\n */\nexport const ALL_ENTITIES = {\n ...BASIC_LATIN,\n ...LATIN_ACCENTS,\n ...LATIN_EXTENDED,\n ...GREEK,\n ...CYRILLIC,\n ...MATH,\n ...MATH_ADVANCED,\n ...ARROWS,\n ...SHAPES,\n ...PUNCTUATION,\n ...CURRENCY,\n ...FRACTIONS,\n ...MISC_SYMBOLS,\n};\n\nexport const XML = {\n amp: \"&\",\n apos: \"'\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\"\n}\nexport const COMMON_HTML = {\n nbsp: '\\u00a0',\n copy: '\\u00a9',\n reg: '\\u00ae',\n trade: '\\u2122',\n mdash: '\\u2014',\n ndash: '\\u2013',\n hellip: '\\u2026',\n laquo: '\\u00ab',\n raquo: '\\u00bb',\n lsquo: '\\u2018',\n rsquo: '\\u2019',\n ldquo: '\\u201c',\n rdquo: '\\u201d',\n bull: '\\u2022',\n para: '\\u00b6',\n sect: '\\u00a7',\n deg: '\\u00b0',\n frac12: '\\u00bd',\n frac14: '\\u00bc',\n frac34: '\\u00be',\n}\n// ---------------------------------------------------------------------------\n// Note: NUMERIC_ENTITIES (&#NNN; / &#xHH;) are handled by the scanner directly\n// via String.fromCodePoint() without any map lookup.\n// ---------------------------------------------------------------------------", "// ---------------------------------------------------------------------------\n// Built-in named entity map (name \u2192 replacement string)\n// No regex, no {regex,val} objects \u2014 just flat key/value pairs.\n// ---------------------------------------------------------------------------\n\nimport { XML as DEFAULT_XML_ENTITIES } from \"./entities.js\"\n\n// ---------------------------------------------------------------------------\n// Entity hook action constants\n// ---------------------------------------------------------------------------\n\n/**\n * Action constants for `onExternalEntity` and `onInputEntity` hooks.\n *\n * Use these instead of raw strings to avoid typos:\n *\n * @example\n * import EntityDecoder, { ENTITY_ACTION } from './EntityDecoder.js';\n * const dec = new EntityDecoder({\n * onInputEntity: (name, value) => ENTITY_ACTION.BLOCK,\n * });\n */\nexport const ENTITY_ACTION = Object.freeze({\n /** Resolve and expand the entity normally. */\n ALLOW: 'allow',\n /** Silently skip this entity \u2014 it will not be registered. */\n BLOCK: 'block',\n /** Throw an error, aborting entity registration entirely. */\n THROW: 'throw',\n});\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst SPECIAL_CHARS = new Set('!?\\\\\\\\/[]$%{}^&*()<>|+');\n\n/**\n * Validate that an entity name contains no dangerous characters.\n * @param {string} name\n * @returns {string} the name, unchanged\n * @throws {Error} on invalid characters\n */\nfunction validateEntityName(name) {\n if (name[0] === '#') {\n throw new Error(`[EntityReplacer] Invalid character '#' in entity name: \"${name}\"`);\n }\n for (const ch of name) {\n if (SPECIAL_CHARS.has(ch)) {\n throw new Error(`[EntityReplacer] Invalid character '${ch}' in entity name: \"${name}\"`);\n }\n }\n return name;\n}\n\n/**\n * Merge one or more entity maps into a flat name\u2192string map.\n * Accepts either:\n * - plain string values: { amp: '&' }\n * - legacy {regex,val} / {regx,val}: { lt: { regex: /.../, val: '<' } }\n *\n * Values containing '&' are skipped (recursive expansion risk).\n *\n * @param {...object} maps\n * @returns {Record<string, string>}\n */\nfunction mergeEntityMaps(...maps) {\n const out = Object.create(null);\n for (const map of maps) {\n if (!map) continue;\n for (const key of Object.keys(map)) {\n const raw = map[key];\n if (typeof raw === 'string') {\n out[key] = raw;\n } else if (raw && typeof raw === 'object' && raw.val !== undefined) {\n // Legacy {regex,val} or {regx,val} \u2014 extract the string val only\n const val = raw.val;\n if (typeof val === 'string') {\n out[key] = val;\n }\n // function vals are not supported in the scanner \u2014 skip\n }\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// applyLimitsTo helpers\n// ---------------------------------------------------------------------------\n\nconst LIMIT_TIER_EXTERNAL = 'external'; // input/runtime + persistent external maps\nconst LIMIT_TIER_BASE = 'base'; // DEFAULT_XML_ENTITIES + namedEntities (system) maps\nconst LIMIT_TIER_ALL = 'all'; // every entity regardless of tier\n\n/**\n * Resolve `applyLimitsTo` option into a normalised Set of tier strings.\n * Accepted values: 'external' | 'base' | 'all' | string[]\n * Default: 'external' (only untrusted injected entities are counted).\n * @param {string|string[]|undefined} raw\n * @returns {Set<string>}\n */\nfunction parseLimitTiers(raw) {\n if (!raw || raw === LIMIT_TIER_EXTERNAL) return new Set([LIMIT_TIER_EXTERNAL]);\n if (raw === LIMIT_TIER_ALL) return new Set([LIMIT_TIER_ALL]);\n if (raw === LIMIT_TIER_BASE) return new Set([LIMIT_TIER_BASE]);\n if (Array.isArray(raw)) return new Set(raw);\n return new Set([LIMIT_TIER_EXTERNAL]); // safe default for unrecognised values\n}\n\n// ---------------------------------------------------------------------------\n// NCR (Numeric Character Reference) classification\n// ---------------------------------------------------------------------------\n\n// Severity order \u2014 higher number = stricter action.\n// Used to enforce minimum action levels for specific codepoint ranges.\nconst NCR_LEVEL = Object.freeze({ allow: 0, leave: 1, remove: 2, throw: 3 });\n\n// XML 1.0 \u00A72.2: allowed chars are #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n// Restricted C0: U+0001\u2013U+001F excluding U+0009, U+000A, U+000D\nconst XML10_ALLOWED_C0 = new Set([0x09, 0x0A, 0x0D]);\n\n/**\n * Parse the `ncr` constructor option into flat, hot-path-friendly fields.\n * @param {object|undefined} ncr\n * @returns {{ xmlVersion: number, onLevel: number, nullLevel: number }}\n */\nfunction parseNCRConfig(ncr) {\n if (!ncr) {\n return { xmlVersion: 1.0, onLevel: NCR_LEVEL.allow, nullLevel: NCR_LEVEL.remove };\n }\n const xmlVersion = ncr.xmlVersion === 1.1 ? 1.1 : 1.0;\n const onLevel = NCR_LEVEL[ncr.onNCR] ?? NCR_LEVEL.allow;\n const nullLevel = NCR_LEVEL[ncr.nullNCR] ?? NCR_LEVEL.remove;\n // 'allow' is not meaningful for null \u2014 clamp to at least 'remove'\n const clampedNull = Math.max(nullLevel, NCR_LEVEL.remove);\n return { xmlVersion, onLevel, nullLevel: clampedNull };\n}\n\n// ---------------------------------------------------------------------------\n// EntityReplacer\n// ---------------------------------------------------------------------------\n\n/**\n * Single-pass, zero-regex entity replacer for XML/HTML content.\n *\n * Algorithm: scan the string once for '&', read to ';', resolve via map\n * or direct codepoint conversion, build output chunks, join once at the end.\n *\n * Entity lookup priority (highest \u2192 lowest):\n * 1. input / runtime (DOCTYPE entities for current document)\n * 2. persistent external (survive across documents)\n * 3. base named map (DEFAULT_XML_ENTITIES + user-supplied namedEntities)\n *\n * Both input and external resolve as the 'external' tier for limit purposes.\n * Base map entities resolve as the 'base' tier.\n *\n * Numeric / hex references (&#NNN; / &#xHH;) are resolved directly via\n * String.fromCodePoint() \u2014 no map needed. They count as 'base' tier.\n *\n * @example\n * const replacer = new EntityReplacer({ namedEntities: COMMON_HTML });\n * replacer.setExternalEntities({ brand: 'Acme' });\n *\n * const instance = replacer.reset();\n * instance.addInputEntities({ version: '1.0' });\n * instance.encode('&brand; v&version; <'); // 'Acme v1.0 <'\n */\nexport default class EntityDecoder {\n /**\n * @param {object} [options]\n * @param {object|null} [options.namedEntities] \u2014 extra named entities merged into base map\n * @param {object} [options.limit] \u2014 security limits\n * @param {number} [options.limit.maxTotalExpansions=0] \u2014 0 = unlimited\n * @param {number} [options.limit.maxExpandedLength=0] \u2014 0 = unlimited\n * @param {'external'|'base'|'all'|string[]} [options.limit.applyLimitsTo='external']\n * Which entity tiers count against the security limits:\n * - 'external' (default) \u2014 only input/runtime + persistent external entities\n * - 'base' \u2014 only DEFAULT_XML_ENTITIES + namedEntities\n * - 'all' \u2014 every entity regardless of tier\n * - string[] \u2014 explicit combination, e.g. ['external', 'base']\n * @param {((resolved: string, original: string) => string)|null} [options.postCheck=null]\n * @param {string[]} [options.remove=[]] \u2014 entity names (e.g. ['nbsp', '#13']) to delete (replace with empty string)\n * @param {string[]} [options.leave=[]] \u2014 entity names to keep as literal (unchanged in output)\n * @param {object} [options.ncr] \u2014 Numeric Character Reference controls\n * @param {1.0|1.1} [options.ncr.xmlVersion=1.0]\n * XML version governing which codepoint ranges are restricted:\n * - 1.0 \u2014 C0 controls U+0001\u2013U+001F (except U+0009/000A/000D) are prohibited\n * - 1.1 \u2014 C0 controls are allowed when written as NCRs; C1 (U+007F\u2013U+009F) decoded as-is\n * @param {'allow'|'leave'|'remove'|'throw'} [options.ncr.onNCR='allow']\n * Base action for numeric references. Severity order: allow < leave < remove < throw.\n * For codepoint ranges that carry a minimum level (surrogates \u2192 remove, XML 1.0 C0 \u2192 remove),\n * the effective action is max(onNCR, rangeMinimum).\n * @param {'remove'|'throw'} [options.ncr.nullNCR='remove']\n * Action for U+0000 (null). 'allow' and 'leave' are clamped to 'remove' since null is never safe.\n * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} [options.onExternalEntity=null]\n * Hook called when an external entity is registered via `setExternalEntities()` or\n * `addExternalEntity()`. Return `ENTITY_ACTION.ALLOW` to accept the entity,\n * `ENTITY_ACTION.BLOCK` to silently skip it, or `ENTITY_ACTION.THROW` to abort with an error.\n * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} [options.onInputEntity=null]\n * Hook called when an input entity is registered via `addInputEntities()`. Return\n * `ENTITY_ACTION.ALLOW` to accept, `ENTITY_ACTION.BLOCK` to silently skip, or\n * `ENTITY_ACTION.THROW` to abort with an error.\n */\n constructor(options = {}) {\n this._limit = options.limit || {};\n this._maxTotalExpansions = this._limit.maxTotalExpansions || 0;\n this._maxExpandedLength = this._limit.maxExpandedLength || 0;\n this._postCheck = typeof options.postCheck === 'function' ? options.postCheck : r => r;\n this._limitTiers = parseLimitTiers(this._limit.applyLimitsTo ?? LIMIT_TIER_EXTERNAL);\n this._numericAllowed = options.numericAllowed ?? true;\n // Base map: DEFAULT_XML_ENTITIES + user-supplied extras. Immutable after construction.\n this._baseMap = mergeEntityMaps(DEFAULT_XML_ENTITIES, options.namedEntities || null);\n\n // Persistent external entities \u2014 survive across documents.\n // Stored as a separate map so reset() never touches them.\n /** @type {Record<string, string>} */\n this._externalMap = Object.create(null);\n\n // Input / runtime entities \u2014 current document only, wiped on reset().\n /** @type {Record<string, string>} */\n this._inputMap = Object.create(null);\n\n // Per-document counters\n this._totalExpansions = 0;\n this._expandedLength = 0;\n\n // --- New: remove / leave sets ---\n /** @type {Set<string>} */\n this._removeSet = new Set(options.remove && Array.isArray(options.remove) ? options.remove : []);\n /** @type {Set<string>} */\n this._leaveSet = new Set(options.leave && Array.isArray(options.leave) ? options.leave : []);\n\n // --- NCR config (parsed into flat fields for hot-path speed) ---\n const ncrCfg = parseNCRConfig(options.ncr);\n this._ncrXmlVersion = ncrCfg.xmlVersion;\n this._ncrOnLevel = ncrCfg.onLevel;\n this._ncrNullLevel = ncrCfg.nullLevel;\n\n // --- Registration hooks ---\n /** @type {((name: string, value: string) => 'allow'|'block'|'throw')|null} */\n this._onExternalEntity = typeof options.onExternalEntity === 'function'\n ? options.onExternalEntity\n : null;\n /** @type {((name: string, value: string) => 'allow'|'block'|'throw')|null} */\n this._onInputEntity = typeof options.onInputEntity === 'function'\n ? options.onInputEntity\n : null;\n }\n\n // -------------------------------------------------------------------------\n // Private: registration hook dispatch\n // -------------------------------------------------------------------------\n\n /**\n * Invoke a registration hook for a single entity name/value pair.\n * Returns true when the entity should be accepted, false when it should be\n * silently skipped (BLOCK), and throws when the hook returns THROW.\n *\n * @param {((name: string, value: string) => 'allow'|'block'|'throw')|null} hook\n * @param {string} name\n * @param {string} value\n * @param {string} context \u2014 used in error messages ('external' | 'input')\n * @returns {boolean} true = accept, false = skip\n */\n _applyRegistrationHook(hook, name, value, context) {\n if (!hook) return true; // no hook \u2192 always accept\n const action = hook(name, value);\n if (action === ENTITY_ACTION.BLOCK) return false;\n if (action === ENTITY_ACTION.THROW) {\n throw new Error(\n `[EntityDecoder] Registration of ${context} entity \"&${name};\" was rejected by hook`\n );\n }\n return true; // ALLOW or any unknown return value \u2192 accept\n }\n\n // -------------------------------------------------------------------------\n // Persistent external entity registration\n // -------------------------------------------------------------------------\n\n /**\n * Replace the full set of persistent external entities.\n * All keys are validated \u2014 throws on invalid characters.\n * If `onExternalEntity` is set, it is called once per entry; entries that\n * return `ENTITY_ACTION.BLOCK` are silently omitted, `ENTITY_ACTION.THROW`\n * aborts the whole call.\n * @param {Record<string, string | { regex?: RegExp, val: string }>} map\n */\n setExternalEntities(map) {\n if (map) {\n for (const key of Object.keys(map)) {\n validateEntityName(key);\n }\n }\n if (!this._onExternalEntity) {\n this._externalMap = mergeEntityMaps(map);\n return;\n }\n // Hook present \u2014 resolve values first, then filter\n const flat = mergeEntityMaps(map);\n const filtered = Object.create(null);\n for (const [name, value] of Object.entries(flat)) {\n if (this._applyRegistrationHook(this._onExternalEntity, name, value, 'external')) {\n filtered[name] = value;\n }\n }\n this._externalMap = filtered;\n }\n\n /**\n * Add a single persistent external entity.\n * If `onExternalEntity` is set it is called before the entity is stored;\n * `ENTITY_ACTION.BLOCK` silently skips storage, `ENTITY_ACTION.THROW` raises.\n * @param {string} key\n * @param {string} value\n */\n addExternalEntity(key, value) {\n validateEntityName(key);\n if (typeof value === 'string' && value.indexOf('&') === -1) {\n if (this._applyRegistrationHook(this._onExternalEntity, key, value, 'external')) {\n this._externalMap[key] = value;\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Input / runtime entity registration (per document)\n // -------------------------------------------------------------------------\n\n /**\n * Inject DOCTYPE entities for the current document.\n * Also resets per-document expansion counters.\n * If `onInputEntity` is set it is called once per entry; entries returning\n * `ENTITY_ACTION.BLOCK` are silently omitted, `ENTITY_ACTION.THROW` aborts.\n * @param {Record<string, string | { regx?: RegExp, regex?: RegExp, val: string }>} map\n */\n addInputEntities(map) {\n this._totalExpansions = 0;\n this._expandedLength = 0;\n if (!this._onInputEntity) {\n this._inputMap = mergeEntityMaps(map);\n return;\n }\n const flat = mergeEntityMaps(map);\n const filtered = Object.create(null);\n for (const [name, value] of Object.entries(flat)) {\n if (this._applyRegistrationHook(this._onInputEntity, name, value, 'input')) {\n filtered[name] = value;\n }\n }\n this._inputMap = filtered;\n }\n\n // -------------------------------------------------------------------------\n // Per-document reset\n // -------------------------------------------------------------------------\n\n /**\n * Wipe input/runtime entities and reset counters.\n * Call this before processing each new document.\n * @returns {this}\n */\n reset() {\n this._inputMap = Object.create(null);\n this._totalExpansions = 0;\n this._expandedLength = 0;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // XML version (can be set after construction, e.g. once parser reads <?xml?>)\n // -------------------------------------------------------------------------\n\n /**\n * Update the XML version used for NCR classification.\n * Call this as soon as the document's `<?xml version=\"...\">` declaration is parsed.\n * @param {1.0|1.1|number} version\n */\n setXmlVersion(version) {\n this._ncrXmlVersion = version === 1.1 ? 1.1 : 1.0;\n }\n\n // -------------------------------------------------------------------------\n // Primary API\n // -------------------------------------------------------------------------\n\n /**\n * Replace all entity references in `str` in a single pass.\n *\n * @param {string} str\n * @returns {string}\n */\n decode(str) {\n if (typeof str !== 'string' || str.length === 0) return str;\n //TODO: check if needed\n if (str.indexOf('&') === -1) return str; // fast path \u2014 no entities at all\n\n const original = str;\n const chunks = [];\n const len = str.length;\n let last = 0; // start of next unprocessed literal chunk\n let i = 0;\n\n const limitExpansions = this._maxTotalExpansions > 0;\n const limitLength = this._maxExpandedLength > 0;\n const checkLimits = limitExpansions || limitLength;\n\n while (i < len) {\n // Scan forward to next '&'\n if (str.charCodeAt(i) !== 38 /* '&' */) { i++; continue; }\n\n // --- Found '&' at position i ---\n\n // Scan forward to ';'\n let j = i + 1;\n while (j < len && str.charCodeAt(j) !== 59 /* ';' */ && (j - i) <= 32) j++;\n\n if (j >= len || str.charCodeAt(j) !== 59) {\n // No closing ';' within window \u2014 treat '&' as literal\n i++;\n continue;\n }\n\n // Raw token between '&' and ';' (exclusive)\n const token = str.slice(i + 1, j);\n if (token.length === 0) { i++; continue; }\n\n let replacement;\n let tier; // which limit tier this entity belongs to\n\n if (this._removeSet.has(token)) {\n // Remove entity: replace with empty string\n replacement = '';\n // If entity was unknown (replacement undefined), we still need a tier for limits.\n // Treat as external tier because it's user-directed removal of an unknown reference.\n if (tier === undefined) {\n tier = LIMIT_TIER_EXTERNAL;\n }\n } else if (this._leaveSet.has(token)) {\n // Do not replace \u2014 keep original &token; as literal\n i++;\n continue;\n } else if (token.charCodeAt(0) === 35 /* '#' */) {\n // ---- Numeric / NCR reference ----\n // NCR classification always runs first \u2014 prohibited codepoints must be\n // caught regardless of numericAllowed.\n const ncrResult = this._resolveNCR(token);\n if (ncrResult === undefined) {\n // 'leave' action \u2014 keep original &token; as-is\n i++;\n continue;\n }\n replacement = ncrResult; // '' for remove, char string for allow\n tier = LIMIT_TIER_BASE;\n } else {\n // ---- Named reference ----\n const resolved = this._resolveName(token);\n replacement = resolved?.value;\n tier = resolved?.tier;\n }\n\n if (replacement === undefined) {\n // Unknown entity \u2014 leave as-is, advance past '&' only\n i++;\n continue;\n }\n\n // Flush literal chunk before this entity\n if (i > last) chunks.push(str.slice(last, i));\n chunks.push(replacement);\n last = j + 1; // skip past ';'\n i = last;\n\n // Apply expansion limits only if this tier is being tracked\n if (checkLimits && this._tierCounts(tier)) {\n if (limitExpansions) {\n this._totalExpansions++;\n if (this._totalExpansions > this._maxTotalExpansions) {\n throw new Error(\n `[EntityReplacer] Entity expansion count limit exceeded: ` +\n `${this._totalExpansions} > ${this._maxTotalExpansions}`\n );\n }\n }\n if (limitLength) {\n // delta: replacement.length minus the raw &token; length (token.length + 2 for '&' and ';')\n const delta = replacement.length - (token.length + 2);\n if (delta > 0) {\n this._expandedLength += delta;\n if (this._expandedLength > this._maxExpandedLength) {\n throw new Error(\n `[EntityReplacer] Expanded content length limit exceeded: ` +\n `${this._expandedLength} > ${this._maxExpandedLength}`\n );\n }\n }\n }\n }\n }\n\n // Flush trailing literal\n if (last < len) chunks.push(str.slice(last));\n\n // If nothing was replaced, chunks is empty \u2014 return original\n const result = chunks.length === 0 ? str : chunks.join('');\n\n return this._postCheck(result, original);\n }\n\n // -------------------------------------------------------------------------\n // Private: limit tier check\n // -------------------------------------------------------------------------\n\n /**\n * Returns true if a resolved entity of the given tier should count\n * against the expansion/length limits.\n * @param {string} tier \u2014 LIMIT_TIER_EXTERNAL | LIMIT_TIER_BASE\n * @returns {boolean}\n */\n _tierCounts(tier) {\n if (this._limitTiers.has(LIMIT_TIER_ALL)) return true;\n return this._limitTiers.has(tier);\n }\n\n // -------------------------------------------------------------------------\n // Private: entity resolution\n // -------------------------------------------------------------------------\n\n /**\n * Resolve a named entity token (without & and ;).\n * Priority: inputMap > externalMap > baseMap\n * Returns the resolved value tagged with its limit tier.\n *\n * @param {string} name\n * @returns {{ value: string, tier: string }|undefined}\n */\n _resolveName(name) {\n // input and external both count as 'external' tier for limit purposes \u2014\n // they are injected at runtime and are the untrusted surface.\n if (name in this._inputMap) return { value: this._inputMap[name], tier: LIMIT_TIER_EXTERNAL };\n if (name in this._externalMap) return { value: this._externalMap[name], tier: LIMIT_TIER_EXTERNAL };\n if (name in this._baseMap) return { value: this._baseMap[name], tier: LIMIT_TIER_BASE };\n return undefined;\n }\n\n /**\n * Classify a codepoint and return the minimum action level that must be applied.\n * Returns -1 when no minimum is imposed (normal allow path).\n *\n * Ranges checked (in priority order):\n * 1. U+0000 \u2014 null, governed by nullNCR (always \u2265 remove)\n * 2. U+D800\u2013U+DFFF \u2014 surrogates, always prohibited (min: remove)\n * 3. U+0001\u2013U+001F \\ {0x09,0x0A,0x0D} \u2014 XML 1.0 restricted C0 (min: remove)\n * (skipped in XML 1.1 \u2014 C0 controls are allowed when written as NCRs)\n *\n * @param {number} cp \u2014 codepoint\n * @returns {number} \u2014 minimum NCR_LEVEL value, or -1 for no restriction\n */\n _classifyNCR(cp) {\n // 1. Null\n if (cp === 0) return this._ncrNullLevel;\n\n // 2. Surrogates \u2014 always prohibited, minimum 'remove'\n if (cp >= 0xD800 && cp <= 0xDFFF) return NCR_LEVEL.remove;\n\n // 3. XML 1.0 restricted C0 controls\n if (this._ncrXmlVersion === 1.0) {\n if (cp >= 0x01 && cp <= 0x1F && !XML10_ALLOWED_C0.has(cp)) return NCR_LEVEL.remove;\n }\n\n return -1; // no restriction\n }\n\n /**\n * Execute a resolved NCR action.\n *\n * @param {number} action \u2014 NCR_LEVEL value\n * @param {string} token \u2014 raw token (e.g. '#38') for error messages\n * @param {number} cp \u2014 codepoint, used only for error messages\n * @returns {string|undefined}\n * - decoded character string \u2192 'allow'\n * - '' \u2192 'remove'\n * - undefined \u2192 'leave' (caller must skip past '&' only)\n * - throws Error \u2192 'throw'\n */\n _applyNCRAction(action, token, cp) {\n switch (action) {\n case NCR_LEVEL.allow: return String.fromCodePoint(cp);\n case NCR_LEVEL.remove: return '';\n case NCR_LEVEL.leave: return undefined; // signal: keep literal\n case NCR_LEVEL.throw:\n throw new Error(\n `[EntityDecoder] Prohibited numeric character reference ` +\n `&${token}; (U+${cp.toString(16).toUpperCase().padStart(4, '0')})`\n );\n default: return String.fromCodePoint(cp);\n }\n }\n\n /**\n * Full NCR resolution pipeline for a numeric token.\n *\n * Steps:\n * 1. Parse the codepoint (decimal or hex).\n * 2. Validate the raw codepoint range (NaN, <0, >0x10FFFF).\n * 3. If numericAllowed is false and no minimum restriction applies \u2192 leave as-is.\n * 4. Classify the codepoint to find the minimum required action level.\n * 5. Resolve effective action = max(onNCR, minimum).\n * 6. Apply and return.\n *\n * @param {string} token \u2014 e.g. '#38', '#x26', '#X26'\n * @returns {string|undefined}\n * - string (incl. '') \u2014 replacement ('' = remove)\n * - undefined \u2014 leave original &token; as-is\n */\n _resolveNCR(token) {\n // Step 1: parse codepoint\n const second = token.charCodeAt(1);\n let cp;\n if (second === 120 /* x */ || second === 88 /* X */) {\n cp = parseInt(token.slice(2), 16);\n } else {\n cp = parseInt(token.slice(1), 10);\n }\n\n // Step 2: out-of-range \u2192 leave as-is unconditionally\n if (Number.isNaN(cp) || cp < 0 || cp > 0x10FFFF) return undefined;\n\n // Step 3: classify to get minimum action level\n const minimum = this._classifyNCR(cp);\n\n // Step 4: if numericAllowed is false and no hard minimum \u2192 leave\n if (!this._numericAllowed && minimum < NCR_LEVEL.remove) return undefined;\n\n // Step 5: effective action = max(configured onNCR, range minimum)\n const effective = minimum === -1\n ? this._ncrOnLevel\n : Math.max(this._ncrOnLevel, minimum);\n\n // Step 6: apply\n return this._applyNCRAction(effective, token, cp);\n }\n}", "import { DANGEROUS_PROPERTY_NAMES, criticalProperties } from \"../util.js\";\nimport { COMMON_HTML, CURRENCY } from '@nodable/entities';\n\nconst defaultOnDangerousProperty = (name) => {\n if (DANGEROUS_PROPERTY_NAMES.includes(name)) {\n return \"__\" + name;\n }\n return name;\n};\n\n\nexport const defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true,\n unicode: false\n },\n tagValueProcessor: function (tagName, val) {\n return val;\n },\n attributeValueProcessor: function (attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n entityDecoder: null,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function (tagName, jPath, attrs) {\n return tagName\n },\n // skipEmptyListItem: false\n captureMetaData: false,\n maxNestedTags: 100,\n strictReservedNames: true,\n jPath: true, // if true, pass jPath string to callbacks; if false, pass matcher instance\n onDangerousProperty: defaultOnDangerousProperty\n};\n\n\n/**\n * Validates that a property name is safe to use\n * @param {string} propertyName - The property name to validate\n * @param {string} optionName - The option field name (for error message)\n * @throws {Error} If property name is dangerous\n */\nfunction validatePropertyName(propertyName, optionName) {\n if (typeof propertyName !== 'string') {\n return; // Only validate string property names\n }\n\n const normalized = propertyName.toLowerCase();\n if (DANGEROUS_PROPERTY_NAMES.some(dangerous => normalized === dangerous.toLowerCase())) {\n throw new Error(\n `[SECURITY] Invalid ${optionName}: \"${propertyName}\" is a reserved JavaScript keyword that could cause prototype pollution`\n );\n }\n\n if (criticalProperties.some(dangerous => normalized === dangerous.toLowerCase())) {\n throw new Error(\n `[SECURITY] Invalid ${optionName}: \"${propertyName}\" is a reserved JavaScript keyword that could cause prototype pollution`\n );\n }\n}\n\n/**\n * Normalizes processEntities option for backward compatibility\n * @param {boolean|object} value \n * @returns {object} Always returns normalized object\n */\nfunction normalizeProcessEntities(value, htmlEntities) {\n // Boolean backward compatibility\n if (typeof value === 'boolean') {\n return {\n enabled: value, // true or false\n maxEntitySize: 10000,\n maxExpansionDepth: 10000,\n maxTotalExpansions: Infinity,\n maxExpandedLength: 100000,\n maxEntityCount: 1000,\n allowedTags: null,\n tagFilter: null,\n appliesTo: \"all\",\n };\n }\n\n // Object config - merge with defaults\n if (typeof value === 'object' && value !== null) {\n return {\n enabled: value.enabled !== false,\n maxEntitySize: Math.max(1, value.maxEntitySize ?? 10000),\n maxExpansionDepth: Math.max(1, value.maxExpansionDepth ?? 10000),\n maxTotalExpansions: Math.max(1, value.maxTotalExpansions ?? Infinity),\n maxExpandedLength: Math.max(1, value.maxExpandedLength ?? 100000),\n maxEntityCount: Math.max(1, value.maxEntityCount ?? 1000),\n allowedTags: value.allowedTags ?? null,\n tagFilter: value.tagFilter ?? null,\n appliesTo: value.appliesTo ?? \"all\",\n };\n }\n\n // Default to enabled with limits\n return normalizeProcessEntities(true);\n}\n\nexport const buildOptions = function (options) {\n const built = Object.assign({}, defaultOptions, options);\n\n // Validate property names to prevent prototype pollution\n const propertyNameOptions = [\n { value: built.attributeNamePrefix, name: 'attributeNamePrefix' },\n { value: built.attributesGroupName, name: 'attributesGroupName' },\n { value: built.textNodeName, name: 'textNodeName' },\n { value: built.cdataPropName, name: 'cdataPropName' },\n { value: built.commentPropName, name: 'commentPropName' }\n ];\n\n for (const { value, name } of propertyNameOptions) {\n if (value) {\n validatePropertyName(value, name);\n }\n }\n\n if (built.onDangerousProperty === null) {\n built.onDangerousProperty = defaultOnDangerousProperty;\n }\n\n // Always normalize processEntities for backward compatibility and validation\n built.processEntities = normalizeProcessEntities(built.processEntities, built.htmlEntities);\n built.unpairedTagsSet = new Set(built.unpairedTags);\n // Convert old-style stopNodes for backward compatibility\n if (built.stopNodes && Array.isArray(built.stopNodes)) {\n built.stopNodes = built.stopNodes.map(node => {\n if (typeof node === 'string' && node.startsWith('*.')) {\n // Old syntax: *.tagname meant \"tagname anywhere\"\n // Convert to new syntax: ..tagname\n return '..' + node.substring(2);\n }\n return node;\n });\n }\n //console.debug(built.processEntities)\n return built;\n};", "'use strict';\n\nlet METADATA_SYMBOL;\n\nif (typeof Symbol !== \"function\") {\n METADATA_SYMBOL = \"@@xmlMetadata\";\n} else {\n METADATA_SYMBOL = Symbol(\"XML Node Metadata\");\n}\n\nexport default class XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = []; //nested tags, text, cdata, comments in order\n this[\":@\"] = Object.create(null); //attributes map\n }\n add(key, val) {\n // this.child.push( {name : key, val: val, isCdata: isCdata });\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val });\n }\n addChild(node, startIndex) {\n if (node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if (node[\":@\"] && Object.keys(node[\":@\"]).length > 0) {\n this.child.push({ [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n // if requested, add the startIndex\n if (startIndex !== undefined) {\n // Note: for now we just overwrite the metadata. If we had more complex metadata,\n // we might need to do an object append here: metadata = { ...metadata, startIndex }\n this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex };\n }\n }\n /** symbol used for metadata */\n static getMetaDataSymbol() {\n return METADATA_SYMBOL;\n }\n}\n", "/**\n * xml-naming\n * Validates XML Name productions as defined in the XML 1.0 and 1.1 specifications.\n * Covers: Name, NCName, QName, NMToken, NMTokens\n *\n * XML 1.0 spec: https://www.w3.org/TR/xml/#NT-Name\n * XML 1.1 spec: https://www.w3.org/TR/xml11/#NT-NameStartChar\n * XML NS spec: https://www.w3.org/TR/xml-names/#NT-NCName\n */\n\n// ---------------------------------------------------------------------------\n// Character class strings \u2014 XML 1.0\n//\n// NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z]\n// | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF]\n// | [#x370-#x37D] | [#x37F-#x1FFF] <- split to exclude #x0487\n// | [#x200C-#x200D]\n// | [#x2070-#x218F] | [#x2C00-#x2FEF]\n// | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD]\n//\n// NameChar ::= NameStartChar | \"-\" | \".\" | [0-9]\n// | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//\n// Note: \\u0487 (Combining Cyrillic Millions Sign) was added in Unicode 4.0,\n// after XML 1.0 was defined against Unicode 2.0. It falls inside the range\n// \\u037F-\\u1FFF but must be excluded. We split that range into\n// \\u037F-\\u0486 and \\u0488-\\u1FFF to exclude it explicitly.\n// ---------------------------------------------------------------------------\n\nconst nameStartChar10 =\n ':A-Za-z_' +\n '\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF' +\n '\\u0370-\\u037D' +\n '\\u037F-\\u0486\\u0488-\\u1FFF' + // split to exclude \\u0487\n '\\u200C-\\u200D' +\n '\\u2070-\\u218F' +\n '\\u2C00-\\u2FEF' +\n '\\u3001-\\uD7FF' +\n '\\uF900-\\uFDCF' +\n '\\uFDF0-\\uFFFD';\n\nconst nameChar10 =\n nameStartChar10 +\n '\\\\-\\\\.\\\\d' +\n '\\u00B7' +\n '\\u0300-\\u036F' +\n '\\u203F-\\u2040';\n\n// ---------------------------------------------------------------------------\n// Character class strings \u2014 XML 1.1\n//\n// Differences from XML 1.0:\n//\n// NameStartChar:\n// 1.0 has split ranges: \\u00C0-\\u00D6, \\u00D8-\\u00F6, \\u00F8-\\u02FF\n// 1.1 merges them into: \\u00C0-\\u02FF\n// (\\u00D7 x and \\u00F7 / are division symbols, excluded in both versions)\n//\n// 1.0 tops out at \\uFFFD (BMP only)\n// 1.1 adds \\u{10000}-\\u{EFFFF} (supplementary planes)\n// These require the /u flag on the RegExp \u2014 see buildRegexes below.\n//\n// NameChar:\n// 1.1 adds \\u0487 (Combining Cyrillic Millions Sign, added in Unicode 4.0)\n// ---------------------------------------------------------------------------\n\nconst nameStartChar11 =\n ':A-Za-z_' +\n '\\u00C0-\\u02FF' + // merged \u2014 1.0 had three split ranges here\n '\\u0370-\\u037D' +\n '\\u037F-\\u0486\\u0488-\\u1FFF' + // split to exclude \\u0487 (combining mark, never a NameStartChar)\n '\\u200C-\\u200D' +\n '\\u2070-\\u218F' +\n '\\u2C00-\\u2FEF' +\n '\\u3001-\\uD7FF' +\n '\\uF900-\\uFDCF' +\n '\\uFDF0-\\uFFFD' +\n '\\u{10000}-\\u{EFFFF}'; // supplementary planes \u2014 REQUIRES /u flag on RegExp\n\nconst nameChar11 =\n nameStartChar11 +\n '\\\\-\\\\.\\\\d' +\n '\\u00B7' +\n '\\u0300-\\u036F' +\n '\\u0487' + // Combining Cyrillic Millions Sign \u2014 valid in 1.1, not 1.0\n '\\u203F-\\u2040';\n\n// ---------------------------------------------------------------------------\n// Regex builders\n//\n// XML 1.0 regexes: no flags \u2014 BMP only, standard JS regex behaviour.\n// XML 1.1 regexes: /u flag \u2014 required for \\u{10000}-\\u{EFFFF} to match actual\n// supplementary code points rather than lone surrogates (which are illegal XML).\n// ---------------------------------------------------------------------------\n\nconst buildRegexes = (startChar, char, flags = '') => {\n const ncStart = startChar.replace(':', '');\n const ncChar = char.replace(':', '');\n const ncNamePat = `[${ncStart}][${ncChar}]*`;\n\n return {\n name: new RegExp(`^[${startChar}][${char}]*$`, flags),\n ncName: new RegExp(`^${ncNamePat}$`, flags),\n qName: new RegExp(`^${ncNamePat}(?::${ncNamePat})?$`, flags),\n nmToken: new RegExp(`^[${char}]+$`, flags),\n nmTokens: new RegExp(`^[${char}]+(?:\\\\s+[${char}]+)*$`, flags),\n };\n};\n\nconst regexes10 = buildRegexes(nameStartChar10, nameChar10); // no /u \u2014 BMP only\nconst regexes11 = buildRegexes(nameStartChar11, nameChar11, 'u'); // /u \u2014 enables \\u{10000}-\\u{EFFFF}\n\nconst getRegexes = (xmlVersion = '1.0') =>\n xmlVersion === '1.1' ? regexes11 : regexes10;\n\n// ---------------------------------------------------------------------------\n// Boolean validators\n// ---------------------------------------------------------------------------\n\n/**\n * Returns true if the string is a valid XML Name.\n * Colons are allowed anywhere (Name production).\n * Used for: DOCTYPE entity names, notation names, DTD element declarations.\n */\nexport const name = (str, { xmlVersion = '1.0' } = {}) =>\n getRegexes(xmlVersion).name.test(str);\n\n/**\n * Returns true if the string is a valid NCName (Non-Colonized Name).\n * Colons are not permitted.\n * Used for: namespace prefixes, local names, SVG id attributes.\n */\nexport const ncName = (str, { xmlVersion = '1.0' } = {}) =>\n getRegexes(xmlVersion).ncName.test(str);\n\n/**\n * Returns true if the string is a valid QName (Qualified Name).\n * Allows exactly one colon as a prefix separator: prefix:localName.\n * Used for: element and attribute names in namespace-aware XML/SVG.\n */\nexport const qName = (str, { xmlVersion = '1.0' } = {}) =>\n getRegexes(xmlVersion).qName.test(str);\n\n/**\n * Returns true if the string is a valid NMToken.\n * Like Name but no restriction on the first character.\n * Used for: DTD NMTOKEN attribute values.\n */\nexport const nmToken = (str, { xmlVersion = '1.0' } = {}) =>\n getRegexes(xmlVersion).nmToken.test(str);\n\n/**\n * Returns true if the string is a valid NMTokens value.\n * A whitespace-separated list of NMToken values.\n * Used for: DTD NMTOKENS attribute values.\n */\nexport const nmTokens = (str, { xmlVersion = '1.0' } = {}) =>\n getRegexes(xmlVersion).nmTokens.test(str);\n\n// ---------------------------------------------------------------------------\n// Diagnostic validator\n// ---------------------------------------------------------------------------\n\nconst PRODUCTIONS = ['name', 'ncName', 'qName', 'nmToken', 'nmTokens'];\n\n/**\n * Validates a string against a named production and returns a detailed result.\n *\n * @param {string} str\n * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production\n * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts]\n * @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }}\n */\nexport const validate = (str, production, { xmlVersion = '1.0' } = {}) => {\n if (!PRODUCTIONS.includes(production)) {\n throw new TypeError(\n `Unknown production \"${production}\". Must be one of: ${PRODUCTIONS.join(', ')}`\n );\n }\n\n const validators = { name, ncName, qName, nmToken, nmTokens };\n const isValid = validators[production](str, { xmlVersion });\n\n if (isValid) return { valid: true, production, input: str };\n\n let reason = 'Does not match the production rules';\n let position;\n\n if (str.length === 0) {\n reason = 'Input is empty';\n } else if (production === 'ncName' && str.includes(':')) {\n position = str.indexOf(':');\n reason = 'Colon is not allowed in NCName';\n } else if (production === 'qName' && str.startsWith(':')) {\n reason = 'QName cannot start with a colon';\n position = 0;\n } else if (production === 'qName' && str.endsWith(':')) {\n reason = 'QName cannot end with a colon';\n position = str.length - 1;\n } else if (production === 'qName' && (str.match(/:/g) || []).length > 1) {\n reason = 'QName can have at most one colon';\n position = str.lastIndexOf(':');\n } else if (\n ['name', 'ncName', 'qName'].includes(production) &&\n !/^[:A-Za-z_\\u00C0-\\uFFFD]/.test(str[0])\n ) {\n reason = `First character \"${str[0]}\" is not a valid NameStartChar`;\n position = 0;\n } else {\n for (let i = 0; i < str.length; i++) {\n if (!/[\\w\\-\\\\.:\\u00B7\\u00C0-\\uFFFD]/.test(str[i])) {\n reason = `Character \"${str[i]}\" at position ${i} is not a valid NameChar`;\n position = i;\n break;\n }\n }\n }\n\n return { valid: false, production, input: str, reason, position };\n};\n\n// ---------------------------------------------------------------------------\n// Batch validator\n// ---------------------------------------------------------------------------\n\n/**\n * Validates an array of strings against a named production.\n *\n * @param {string[]} strings\n * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production\n * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts]\n * @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>}\n */\nexport const validateAll = (strings, production, opts = {}) =>\n strings.map(str => validate(str, production, opts));\n\n// ---------------------------------------------------------------------------\n// Sanitizer\n// ---------------------------------------------------------------------------\n\n/**\n * Transforms an invalid string into the nearest valid XML name for the given production.\n *\n * @param {string} str\n * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production\n * @param {{ replacement?: string }} [opts]\n * @returns {string}\n */\nexport const sanitize = (str, production = 'name', { replacement = '_' } = {}) => {\n if (!str) return replacement;\n\n let result = str;\n\n // Strip colons for NCName\n if (production === 'ncName') {\n result = result.replace(/:/g, '');\n }\n\n // Replace illegal characters\n result = result.replace(/[^\\w\\-\\.:\\u00B7\\u00C0-\\uFFFD]/g, replacement);\n\n // Fix invalid start character for Name / NCName / QName\n if (production !== 'nmToken' && production !== 'nmTokens') {\n if (/^[\\-\\.\\d]/.test(result)) {\n result = replacement + result;\n }\n }\n\n return result || replacement;\n};", "import { qName as isName } from 'xml-naming';\n\nexport default class DocTypeReader {\n constructor(options, xmlVersion) {\n this.suppressValidationErr = !options;\n this.options = options;\n this.xmlVersion = xmlVersion || 1.0;\n }\n\n setXmlVersion(xmlVersion = 1.0) {\n this.xmlVersion = xmlVersion;\n }\n readDocType(xmlData, i) {\n const entities = Object.create(null);\n let entityCount = 0;\n\n if (xmlData[i + 3] === 'O' &&\n xmlData[i + 4] === 'C' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'Y' &&\n xmlData[i + 7] === 'P' &&\n xmlData[i + 8] === 'E') {\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === '<' && !comment) { //Determine the tag type\n if (hasBody && hasSeq(xmlData, \"!ENTITY\", i)) {\n i += 7;\n let entityName, val;\n [entityName, val, i] = this.readEntityExp(xmlData, i + 1, this.suppressValidationErr);\n if (val.indexOf(\"&\") === -1) { //Parameter entities are not supported\n if (this.options.enabled !== false &&\n this.options.maxEntityCount != null &&\n entityCount >= this.options.maxEntityCount) {\n throw new Error(\n `Entity count (${entityCount + 1}) exceeds maximum allowed (${this.options.maxEntityCount})`\n );\n }\n //const escaped = entityName.replace(/[.\\-+*:]/g, '\\\\.');\n //const escaped = entityName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n entities[entityName] = val;\n entityCount++;\n }\n }\n else if (hasBody && hasSeq(xmlData, \"!ELEMENT\", i)) {\n i += 8;//Not supported\n const { index } = this.readElementExp(xmlData, i + 1);\n i = index;\n } else if (hasBody && hasSeq(xmlData, \"!ATTLIST\", i)) {\n i += 8;//Not supported\n // const {index} = this.readAttlistExp(xmlData,i+1);\n // i = index;\n } else if (hasBody && hasSeq(xmlData, \"!NOTATION\", i)) {\n i += 9;//Not supported\n const { index } = this.readNotationExp(xmlData, i + 1, this.suppressValidationErr);\n i = index;\n } else if (hasSeq(xmlData, \"!--\", i)) comment = true;\n else throw new Error(`Invalid DOCTYPE`);\n\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === '>') { //Read tag content\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === '[') {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return { entities, i };\n }\n readEntityExp(xmlData, i) {\n //External entities are not supported\n // <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n //Parameter entities are not supported\n // <!ENTITY entityname \"&anotherElement;\">\n\n //Internal entities are supported\n // <!ENTITY entityname \"replacement text\">\n\n // Skip leading whitespace after <!ENTITY\n i = skipWhitespace(xmlData, i);\n\n // Read entity name\n const startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n i++;\n }\n let entityName = xmlData.substring(startIndex, i);\n\n validateEntityName(entityName, { xmlVersion: this.xmlVersion });\n\n // Skip whitespace after entity name\n i = skipWhitespace(xmlData, i);\n\n // Check for unsupported constructs (external entities or parameter entities)\n if (!this.suppressValidationErr) {\n if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n throw new Error(\"External entities are not supported\");\n } else if (xmlData[i] === \"%\") {\n throw new Error(\"Parameter entities are not supported\");\n }\n }\n\n // Read entity value (internal entity)\n let entityValue = \"\";\n [i, entityValue] = this.readIdentifierVal(xmlData, i, \"entity\");\n\n // Validate entity size\n if (this.options.enabled !== false &&\n this.options.maxEntitySize != null &&\n entityValue.length > this.options.maxEntitySize) {\n throw new Error(\n `Entity \"${entityName}\" size (${entityValue.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`\n );\n }\n\n i--;\n return [entityName, entityValue, i];\n }\n\n readNotationExp(xmlData, i) {\n // Skip leading whitespace after <!NOTATION\n i = skipWhitespace(xmlData, i);\n\n // Read notation name\n\n const startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n i++;\n }\n let notationName = xmlData.substring(startIndex, i);\n\n !this.suppressValidationErr && validateEntityName(notationName, { xmlVersion: this.xmlVersion });\n\n // Skip whitespace after notation name\n i = skipWhitespace(xmlData, i);\n\n // Check identifier type (SYSTEM or PUBLIC)\n const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n if (!this.suppressValidationErr && identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n }\n i += identifierType.length;\n\n // Skip whitespace after identifier type\n i = skipWhitespace(xmlData, i);\n\n // Read public identifier (if PUBLIC)\n let publicIdentifier = null;\n let systemIdentifier = null;\n\n if (identifierType === \"PUBLIC\") {\n [i, publicIdentifier] = this.readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n // Skip whitespace after public identifier\n i = skipWhitespace(xmlData, i);\n\n // Optionally read system identifier\n if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n }\n } else if (identifierType === \"SYSTEM\") {\n // Read system identifier (mandatory for SYSTEM)\n [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n if (!this.suppressValidationErr && !systemIdentifier) {\n throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n }\n }\n\n return { notationName, publicIdentifier, systemIdentifier, index: --i };\n }\n\n readIdentifierVal(xmlData, i, type) {\n let identifierVal = \"\";\n const startChar = xmlData[i];\n if (startChar !== '\"' && startChar !== \"'\") {\n throw new Error(`Expected quoted string, found \"${startChar}\"`);\n }\n i++;\n\n const startIndex = i;\n while (i < xmlData.length && xmlData[i] !== startChar) {\n i++;\n }\n identifierVal = xmlData.substring(startIndex, i);\n\n if (xmlData[i] !== startChar) {\n throw new Error(`Unterminated ${type} value`);\n }\n i++;\n return [i, identifierVal];\n }\n\n readElementExp(xmlData, i) {\n // <!ELEMENT br EMPTY>\n // <!ELEMENT div ANY>\n // <!ELEMENT title (#PCDATA)>\n // <!ELEMENT book (title, author+)>\n // <!ELEMENT name (content-model)>\n\n // Skip leading whitespace after <!ELEMENT\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n const startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n i++;\n }\n let elementName = xmlData.substring(startIndex, i);\n\n // Validate element name\n if (!this.suppressValidationErr && !isName(elementName, { xmlVersion: this.xmlVersion })) {\n throw new Error(`Invalid element name: \"${elementName}\"`);\n }\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n let contentModel = \"\";\n // Expect '(' to start content model\n if (xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\", i)) i += 4;\n else if (xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\", i)) i += 2;\n else if (xmlData[i] === \"(\") {\n i++; // Move past '('\n\n // Read content model\n const startIndex = i;\n while (i < xmlData.length && xmlData[i] !== \")\") {\n i++;\n }\n contentModel = xmlData.substring(startIndex, i);\n\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated content model\");\n }\n\n } else if (!this.suppressValidationErr) {\n throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n }\n\n return {\n elementName,\n contentModel: contentModel.trim(),\n index: i\n };\n }\n\n readAttlistExp(xmlData, i) {\n // Skip leading whitespace after <!ATTLIST\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n i++;\n }\n let elementName = xmlData.substring(startIndex, i);\n\n // Validate element name\n validateEntityName(elementName, { xmlVersion: this.xmlVersion })\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute name\n startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n i++;\n }\n let attributeName = xmlData.substring(startIndex, i);\n\n // Validate attribute name\n if (!validateEntityName(attributeName, { xmlVersion: this.xmlVersion })) {\n throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n }\n\n // Skip whitespace after attribute name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute type\n let attributeType = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n attributeType = \"NOTATION\";\n i += 8; // Move past \"NOTATION\"\n\n // Skip whitespace after \"NOTATION\"\n i = skipWhitespace(xmlData, i);\n\n // Expect '(' to start the list of notations\n if (xmlData[i] !== \"(\") {\n throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n }\n i++; // Move past '('\n\n // Read the list of allowed notations\n let allowedNotations = [];\n while (i < xmlData.length && xmlData[i] !== \")\") {\n\n\n const startIndex = i;\n while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n i++;\n }\n let notation = xmlData.substring(startIndex, i);\n\n // Validate notation name\n notation = notation.trim();\n if (!validateEntityName(notation, { xmlVersion: this.xmlVersion })) {\n throw new Error(`Invalid notation name: \"${notation}\"`);\n }\n\n allowedNotations.push(notation);\n\n // Skip '|' separator or exit loop\n if (xmlData[i] === \"|\") {\n i++; // Move past '|'\n i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n }\n }\n\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated list of notations\");\n }\n i++; // Move past ')'\n\n // Store the allowed notations as part of the attribute type\n attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n } else {\n // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n const startIndex = i;\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n i++;\n }\n attributeType += xmlData.substring(startIndex, i);\n\n // Validate simple attribute type\n const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n if (!this.suppressValidationErr && !validTypes.includes(attributeType.toUpperCase())) {\n throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n }\n }\n\n // Skip whitespace after attribute type\n i = skipWhitespace(xmlData, i);\n\n // Read default value\n let defaultValue = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n defaultValue = \"#REQUIRED\";\n i += 8;\n } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n defaultValue = \"#IMPLIED\";\n i += 7;\n } else {\n [i, defaultValue] = this.readIdentifierVal(xmlData, i, \"ATTLIST\");\n }\n\n return {\n elementName,\n attributeName,\n attributeType,\n defaultValue,\n index: i\n }\n }\n}\n\n\n\nconst skipWhitespace = (data, index) => {\n while (index < data.length && /\\s/.test(data[index])) {\n index++;\n }\n return index;\n};\n\n\n\nfunction hasSeq(data, seq, i) {\n for (let j = 0; j < seq.length; j++) {\n if (seq[j] !== data[i + j + 1]) return false;\n }\n return true;\n}\n\nfunction validateEntityName(name, xmlVersion) {\n if (isName(name, { xmlVersion: xmlVersion }))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}", "/**\n * Flat lookup table: maps Unicode code point \u2192 ASCII digit (0-9).\n * Only decimal digit characters (Unicode category Nd) are included.\n *\n * Strategy: Int32Array of size (maxCodePoint - minCodePoint + 1).\n * Value 0xFF means \"not a digit\". Value 0-9 is the ASCII digit value.\n * This gives O(1) lookup with no branching, no bisect, no loop.\n *\n * Memory: range is 0x0660 to 0x1FBF0 \u2192 ~129,936 entries \u00D7 1 byte = ~127 KB.\n * Acceptable for a one-time init; lookup is a single array index.\n */\n\n// All known Unicode Nd (decimal digit) script zero code points.\n// Each script has exactly 10 consecutive digits: zero+0 .. zero+9.\nconst SCRIPT_ZEROS = [\n // Basic Latin (ASCII) \u2014 included for completeness / pass-through\n 0x0030, // 0-9\n\n // Arabic scripts\n 0x0660, // Arabic-Indic \u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\n 0x06F0, // Extended Arabic-Indic (Urdu/Persian/Sindhi) \u06F0\u06F1\u06F2\u06F3\n\n // Indic scripts\n 0x0966, // Devanagari \u0966\u0967\u0968\u0969\u096A\u096B\u096C\u096D\u096E\u096F\n 0x09E6, // Bengali \u09E6\u09E7\u09E8\u09E9\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\n 0x0A66, // Gurmukhi \u0A66\u0A67\u0A68\u0A69\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\n 0x0AE6, // Gujarati \u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\n 0x0B66, // Odia \u0B66\u0B67\u0B68\u0B69\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\n 0x0BE6, // Tamil \u0BE6\u0BE7\u0BE8\u0BE9\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\n 0x0C66, // Telugu \u0C66\u0C67\u0C68\u0C69\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\n 0x0CE6, // Kannada \u0CE6\u0CE7\u0CE8\u0CE9\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\n 0x0D66, // Malayalam \u0D66\u0D67\u0D68\u0D69\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\n 0x0DE6, // Sinhala Archaic \u0DE6\u0DE7\u0DE8\u0DE9\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\n\n // Southeast Asian scripts\n 0x0E50, // Thai \u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\n 0x0ED0, // Lao \u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\n 0x0F20, // Tibetan \u0F20\u0F21\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29\n 0x1040, // Myanmar \u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\n 0x1090, // Myanmar Shan \u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\n 0x17E0, // Khmer \u17E0\u17E1\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9\n 0x1810, // Mongolian \u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\n 0x1946, // Limbu \u1946\u1947\u1948\u1949\u194A\u194B\u194C\u194D\u194E\u194F\n 0x19D0, // New Tai Lue \u19D0\u19D1\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9\n 0x1A80, // Tai Tham Hora \u1A80\u1A81\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89\n 0x1A90, // Tai Tham Tham \u1A90\u1A91\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99\n 0x1B50, // Balinese \u1B50\u1B51\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59\n 0x1BB0, // Sundanese \u1BB0\u1BB1\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9\n 0x1C40, // Lepcha \u1C40\u1C41\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49\n 0x1C50, // Ol Chiki \u1C50\u1C51\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59\n\n // Fullwidth (CJK context)\n 0xFF10, // Fullwidth \uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\n\n // Mathematical digit variants (Unicode math block)\n 0x1D7CE, // Mathematical Bold\n 0x1D7D8, // Mathematical Double-Struck\n 0x1D7E2, // Mathematical Sans-Serif\n 0x1D7EC, // Mathematical Sans-Serif Bold\n 0x1D7F6, // Mathematical Monospace\n\n // Other scripts\n 0x104A0, // Osmanya \uD801\uDCA0\uD801\uDCA1\uD801\uDCA2\uD801\uDCA3\uD801\uDCA4\uD801\uDCA5\uD801\uDCA6\uD801\uDCA7\uD801\uDCA8\uD801\uDCA9\n 0x10D30, // Hanifi Rohingya \uD803\uDD30\uD803\uDD31\uD803\uDD32\uD803\uDD33\uD803\uDD34\uD803\uDD35\uD803\uDD36\uD803\uDD37\uD803\uDD38\uD803\uDD39\n 0x11066, // Brahmi \uD804\uDC66\uD804\uDC67\uD804\uDC68\uD804\uDC69\uD804\uDC6A\uD804\uDC6B\uD804\uDC6C\uD804\uDC6D\uD804\uDC6E\uD804\uDC6F\n 0x110F0, // Sora Sompeng \uD804\uDCF0\uD804\uDCF1\uD804\uDCF2\uD804\uDCF3\uD804\uDCF4\uD804\uDCF5\uD804\uDCF6\uD804\uDCF7\uD804\uDCF8\uD804\uDCF9\n 0x11136, // Chakma \uD804\uDD36\uD804\uDD37\uD804\uDD38\uD804\uDD39\uD804\uDD3A\uD804\uDD3B\uD804\uDD3C\uD804\uDD3D\uD804\uDD3E\uD804\uDD3F\n 0x111D0, // Sharada \uD804\uDDD0\uD804\uDDD1\uD804\uDDD2\uD804\uDDD3\uD804\uDDD4\uD804\uDDD5\uD804\uDDD6\uD804\uDDD7\uD804\uDDD8\uD804\uDDD9\n 0x112F0, // Khudawadi \uD804\uDEF0\uD804\uDEF1\uD804\uDEF2\uD804\uDEF3\uD804\uDEF4\uD804\uDEF5\uD804\uDEF6\uD804\uDEF7\uD804\uDEF8\uD804\uDEF9\n 0x11450, // Newa \uD805\uDC50\uD805\uDC51\uD805\uDC52\uD805\uDC53\uD805\uDC54\uD805\uDC55\uD805\uDC56\uD805\uDC57\uD805\uDC58\uD805\uDC59\n 0x114D0, // Tirhuta \uD805\uDCD0\uD805\uDCD1\uD805\uDCD2\uD805\uDCD3\uD805\uDCD4\uD805\uDCD5\uD805\uDCD6\uD805\uDCD7\uD805\uDCD8\uD805\uDCD9\n 0x11650, // Modi \uD805\uDE50\uD805\uDE51\uD805\uDE52\uD805\uDE53\uD805\uDE54\uD805\uDE55\uD805\uDE56\uD805\uDE57\uD805\uDE58\uD805\uDE59\n 0x116C0, // Takri \uD805\uDEC0\uD805\uDEC1\uD805\uDEC2\uD805\uDEC3\uD805\uDEC4\uD805\uDEC5\uD805\uDEC6\uD805\uDEC7\uD805\uDEC8\uD805\uDEC9\n 0x11730, // Ahom \uD805\uDF30\uD805\uDF31\uD805\uDF32\uD805\uDF33\uD805\uDF34\uD805\uDF35\uD805\uDF36\uD805\uDF37\uD805\uDF38\uD805\uDF39\n 0x118E0, // Warang Citi \uD806\uDCE0\uD806\uDCE1\uD806\uDCE2\uD806\uDCE3\uD806\uDCE4\uD806\uDCE5\uD806\uDCE6\uD806\uDCE7\uD806\uDCE8\uD806\uDCE9\n 0x11950, // Dives Akuru \uD806\uDD50\uD806\uDD51\uD806\uDD52\uD806\uDD53\uD806\uDD54\uD806\uDD55\uD806\uDD56\uD806\uDD57\uD806\uDD58\uD806\uDD59\n 0x11BF0, // Khitan Small Script \uD806\uDFF0\uD806\uDFF1\uD806\uDFF2\uD806\uDFF3\uD806\uDFF4\uD806\uDFF5\uD806\uDFF6\uD806\uDFF7\uD806\uDFF8\uD806\uDFF9\n 0x11C50, // Bhaiksuki \uD807\uDC50\uD807\uDC51\uD807\uDC52\uD807\uDC53\uD807\uDC54\uD807\uDC55\uD807\uDC56\uD807\uDC57\uD807\uDC58\uD807\uDC59\n 0x11D50, // Masaram Gondi \uD807\uDD50\uD807\uDD51\uD807\uDD52\uD807\uDD53\uD807\uDD54\uD807\uDD55\uD807\uDD56\uD807\uDD57\uD807\uDD58\uD807\uDD59\n 0x11DA0, // Gunjala Gondi \uD807\uDDA0\uD807\uDDA1\uD807\uDDA2\uD807\uDDA3\uD807\uDDA4\uD807\uDDA5\uD807\uDDA6\uD807\uDDA7\uD807\uDDA8\uD807\uDDA9\n 0x11F50, // Kawi \uD807\uDF50\uD807\uDF51\uD807\uDF52\uD807\uDF53\uD807\uDF54\uD807\uDF55\uD807\uDF56\uD807\uDF57\uD807\uDF58\uD807\uDF59\n 0x16A60, // Mro \uD81A\uDE60\uD81A\uDE61\uD81A\uDE62\uD81A\uDE63\uD81A\uDE64\uD81A\uDE65\uD81A\uDE66\uD81A\uDE67\uD81A\uDE68\uD81A\uDE69\n 0x16AC0, // Tangsa \uD81A\uDEC0\uD81A\uDEC1\uD81A\uDEC2\uD81A\uDEC3\uD81A\uDEC4\uD81A\uDEC5\uD81A\uDEC6\uD81A\uDEC7\uD81A\uDEC8\uD81A\uDEC9\n 0x16B50, // Pahawh Hmong \uD81A\uDF50\uD81A\uDF51\uD81A\uDF52\uD81A\uDF53\uD81A\uDF54\uD81A\uDF55\uD81A\uDF56\uD81A\uDF57\uD81A\uDF58\uD81A\uDF59\n 0x1E140, // Nyiakeng Puachue Hmong \uD838\uDD40\uD838\uDD41\uD838\uDD42\uD838\uDD43\uD838\uDD44\uD838\uDD45\uD838\uDD46\uD838\uDD47\uD838\uDD48\uD838\uDD49\n 0x1E2F0, // Wancho \uD838\uDEF0\uD838\uDEF1\uD838\uDEF2\uD838\uDEF3\uD838\uDEF4\uD838\uDEF5\uD838\uDEF6\uD838\uDEF7\uD838\uDEF8\uD838\uDEF9\n 0x1E4F0, // Nag Mundari \uD839\uDCF0\uD839\uDCF1\uD839\uDCF2\uD839\uDCF3\uD839\uDCF4\uD839\uDCF5\uD839\uDCF6\uD839\uDCF7\uD839\uDCF8\uD839\uDCF9\n 0x1E950, // Adlam \uD83A\uDD50\uD83A\uDD51\uD83A\uDD52\uD83A\uDD53\uD83A\uDD54\uD83A\uDD55\uD83A\uDD56\uD83A\uDD57\uD83A\uDD58\uD83A\uDD59\n 0x1FBF0, // Segmented digit symbols \uD83E\uDFF0\uD83E\uDFF1\uD83E\uDFF2\uD83E\uDFF3\uD83E\uDFF4\uD83E\uDFF5\uD83E\uDFF6\uD83E\uDFF7\uD83E\uDFF8\uD83E\uDFF9\n];\n\n// Build a sparse Map for scripts above 0xFFFF (surrogate-pair range).\n// These can't go into a flat Uint8Array indexed by code point efficiently.\nconst NOT_DIGIT = 0xFF;\nconst HIGH_MAP = new Map(); // codePoint \u2192 digit value (0-9)\n\nconst LOW_MAX = 0xFFFF;\nconst LOW_MIN = 0x0660; // first non-ASCII digit script\n\n// Flat Uint8Array covering 0x0660 .. 0xFFFF\nconst TABLE_OFFSET = LOW_MIN;\nconst TABLE_SIZE = LOW_MAX - LOW_MIN + 1;\nconst TABLE = new Uint8Array(TABLE_SIZE).fill(NOT_DIGIT);\n\nfor (const zero of SCRIPT_ZEROS) {\n for (let d = 0; d < 10; d++) {\n const cp = zero + d;\n if (cp <= LOW_MAX) {\n TABLE[cp - TABLE_OFFSET] = d;\n } else {\n HIGH_MAP.set(cp, d);\n }\n }\n}\n\nexport { TABLE, TABLE_OFFSET, HIGH_MAP, NOT_DIGIT };\n", "'use strict';\n\nimport { TABLE, TABLE_OFFSET, HIGH_MAP, NOT_DIGIT } from './digitTable.js';\n\nconst CHAR_0 = 48; // '0'.charCodeAt(0)\nconst CHAR_9 = 57; // '9'.charCodeAt(0)\nconst CHAR_MINUS = 45; // '-'.charCodeAt(0)\n\n// Unicode minus/hyphen variants worth normalizing to ASCII '-' in numeric context:\n// U+2212 MINUS SIGN \u2212 (mathematically correct minus)\n// U+FF0D FULLWIDTH HYPHEN-MINUS \uFF0D (Japanese fullwidth context)\n// U+FE63 SMALL HYPHEN-MINUS \uFE63 (small form variant)\n//\n// NOT normalized (deliberate):\n// U+2013 EN DASH \u2013 (punctuation, not a numeric sign)\n// U+2014 EM DASH \u2014 (punctuation)\n// U+2010 HYPHEN \u2010 (typographic hyphen)\n//\n// Rationale: only characters a human or locale formatter would plausibly use\n// as a numeric minus sign are normalized. Dashes used for punctuation are left\n// alone to avoid mangling non-numeric strings.\nconst MINUS_SET = new Set([0x2212, 0xFF0D, 0xFE63]);\n\n/**\n * Normalize all Unicode decimal digit characters in a string to ASCII (0-9),\n * and normalize Unicode minus variants to ASCII '-' (U+002D).\n *\n * Non-digit, non-minus characters are passed through unchanged.\n *\n * Performance design:\n * - Fast path: if the string has no convertible characters, return it unchanged\n * (zero allocation).\n * - BMP digits (0x0660..0xFFFF excl. surrogates): flat Uint8Array lookup (O(1)).\n * - Supplementary plane digits (> 0xFFFF, encoded as surrogate pairs): Map lookup.\n * - Minus variants: checked inline with a small fixed Set.\n *\n * @param {string} str\n * @returns {string}\n */\nfunction anynum(str) {\n if (typeof str !== 'string') return str;\n\n const len = str.length;\n if (len === 0) return str;\n\n // Scan for first character needing conversion.\n // If none found, return original string (zero allocation).\n let firstHit = -1;\n\n for (let i = 0; i < len; i++) {\n const cc = str.charCodeAt(i);\n\n // ASCII digit or ASCII minus \u2014 already normalized, skip fast\n if ((cc >= CHAR_0 && cc <= CHAR_9) || cc === CHAR_MINUS) continue;\n\n // Below first unicode digit script \u2014 check minus variants only\n if (cc < TABLE_OFFSET) {\n if (MINUS_SET.has(cc)) { firstHit = i; break; }\n continue;\n }\n\n // Surrogate pairs live in BMP range 0xD800-0xDFFF \u2014 check before TABLE\n if (cc >= 0xD800 && cc <= 0xDBFF) {\n if (i + 1 < len) {\n const low = str.charCodeAt(i + 1);\n if (low >= 0xDC00 && low <= 0xDFFF) {\n const cp = 0x10000 + ((cc - 0xD800) << 10) + (low - 0xDC00);\n if (HIGH_MAP.has(cp)) { firstHit = i; break; }\n }\n }\n continue;\n }\n\n // BMP non-surrogate: flat table lookup; also check minus variants in this range\n if (TABLE[cc - TABLE_OFFSET] !== NOT_DIGIT || MINUS_SET.has(cc)) {\n firstHit = i;\n break;\n }\n }\n\n // Nothing to replace \u2014 return original, zero allocation\n if (firstHit === -1) return str;\n\n // Build result: copy unchanged prefix, then convert from firstHit onward\n const chars = [];\n\n if (firstHit > 0) chars.push(str.slice(0, firstHit));\n\n for (let i = firstHit; i < len; i++) {\n const cc = str.charCodeAt(i);\n\n // ASCII digit or ASCII minus \u2014 pass through\n if ((cc >= CHAR_0 && cc <= CHAR_9) || cc === CHAR_MINUS) {\n chars.push(str[i]);\n continue;\n }\n\n // Below TABLE_OFFSET \u2014 check minus variants, else pass through\n if (cc < TABLE_OFFSET) {\n chars.push(MINUS_SET.has(cc) ? '-' : str[i]);\n continue;\n }\n\n // Surrogate pairs\n if (cc >= 0xD800 && cc <= 0xDBFF) {\n if (i + 1 < len) {\n const low = str.charCodeAt(i + 1);\n if (low >= 0xDC00 && low <= 0xDFFF) {\n const cp = 0x10000 + ((cc - 0xD800) << 10) + (low - 0xDC00);\n const d = HIGH_MAP.get(cp);\n if (d !== undefined) {\n chars.push(String.fromCharCode(d + 48));\n i++; // consume low surrogate\n continue;\n }\n }\n }\n chars.push(str[i]);\n continue;\n }\n\n // BMP non-surrogate: flat table lookup + minus variants\n if (MINUS_SET.has(cc)) {\n chars.push('-');\n continue;\n }\n const d = TABLE[cc - TABLE_OFFSET];\n chars.push(d !== NOT_DIGIT ? String.fromCharCode(d + 48) : str[i]);\n }\n\n return chars.join('');\n}\n\nexport { anynum };\nexport default anynum;", "const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst binRegex = /^0b[01]+$/;\nconst octRegex = /^0o[0-7]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n\nimport anynum from \"anynum\";\n\nconst consider = {\n hex: true,\n binary: false,\n octal: false,\n leadingZeros: true,\n decimalPoint: \"\\.\",\n eNotation: true,\n //skipLike: /regex/,\n infinity: \"original\", // \"null\", \"infinity\" (Infinity type), \"string\" (\"Infinity\" (the string literal))\n unicode: false,\n};\n\nexport default function toNumber(str, options = {}) {\n options = Object.assign({}, consider, options);\n if (!str || typeof str !== \"string\") return str;\n\n let trimmedStr = str.trim();\n\n if (trimmedStr.length === 0) return str;\n else if (options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n else if (trimmedStr === \"0\") return 0;\n\n if (options.unicode) {\n trimmedStr = anynum(trimmedStr);\n if (trimmedStr === \"0\") return 0; // re-check after normalization\n }\n if (options.hex && hexRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 16);\n } else if (options.binary && binRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 2);\n } else if (options.octal && octRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 8);\n } else if (!isFinite(trimmedStr)) { //Infinity\n return handleInfinity(str, Number(trimmedStr), options);\n } else if (trimmedStr.includes('e') || trimmedStr.includes('E')) { //eNotation\n return resolveEnotation(str, trimmedStr, options);\n } else {\n //separate negative sign, leading zeros, and rest number\n const match = numRegex.exec(trimmedStr);\n // +00.123 => [ , '+', '00', '.123', ..\n if (match) {\n const sign = match[1] || \"\";\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.\n str[leadingZeros.length + 1] === \".\"\n : str[leadingZeros.length] === \".\";\n\n //trim ending zeros for floating number\n if (!options.leadingZeros //leading zeros are not allowed\n && (leadingZeros.length > 1\n || (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))) {\n // 00, 00.3, +03.24, 03, 03.24\n return str;\n }\n else {//no leading zeros or leading zeros are allowed\n const num = Number(trimmedStr);\n const parsedStr = String(num);\n\n if (num === 0) return num;\n if (parsedStr.search(/[eE]/) !== -1) { //given number is long and parsed to eNotation\n if (options.eNotation) return num;\n else return str;\n } else if (trimmedStr.indexOf(\".\") !== -1) { //floating number\n if (parsedStr === \"0\") return num; //0.0\n else if (parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000\n else if (parsedStr === `${sign}${numTrimmedByZeros}`) return num;\n else return str;\n }\n\n let n = leadingZeros ? numTrimmedByZeros : trimmedStr;\n if (leadingZeros) {\n // -009 => -9\n return (n === parsedStr) || (sign + n === parsedStr) ? num : str\n } else {\n // +9\n return (n === parsedStr) || (n === sign + parsedStr) ? num : str\n }\n }\n } else { //non-numeric string\n return str;\n }\n }\n}\n\nconst eNotationRegx = /^([-+])?(0*)(\\d*(\\.\\d*)?[eE][-\\+]?\\d+)$/;\nfunction resolveEnotation(str, trimmedStr, options) {\n if (!options.eNotation) return str;\n const notation = trimmedStr.match(eNotationRegx);\n if (notation) {\n let sign = notation[1] || \"\";\n const eChar = notation[3].indexOf(\"e\") === -1 ? \"E\" : \"e\";\n const leadingZeros = notation[2];\n const eAdjacentToLeadingZeros = sign ? // 0E.\n str[leadingZeros.length + 1] === eChar\n : str[leadingZeros.length] === eChar;\n\n if (leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;\n else if (leadingZeros.length === 1\n && (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)) {\n return Number(trimmedStr);\n } else if (leadingZeros.length > 0) {\n // Has leading zeros \u2014 only accept if leadingZeros option allows it\n if (options.leadingZeros && !eAdjacentToLeadingZeros) {\n trimmedStr = (notation[1] || \"\") + notation[3];\n return Number(trimmedStr);\n } else return str;\n } else {\n // No leading zeros \u2014 always valid e-notation, parse it\n return Number(trimmedStr);\n }\n } else {\n return str;\n }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr) {\n if (numStr && numStr.indexOf(\".\") !== -1) {//float\n numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n if (numStr === \".\") numStr = \"0\";\n else if (numStr[0] === \".\") numStr = \"0\" + numStr;\n else if (numStr[numStr.length - 1] === \".\") numStr = numStr.substring(0, numStr.length - 1);\n return numStr;\n }\n return numStr;\n}\n\nfunction parse_int(numStr, base) {\n const str = numStr.trim();\n if (base === 2 || base === 8) numStr = str.substring(2);\n\n if (parseInt) return parseInt(numStr, base);\n else if (Number.parseInt) return Number.parseInt(numStr, base);\n else if (window && window.parseInt) return window.parseInt(numStr, base);\n else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\");\n}\n\n/**\n * Handle infinite values based on user option\n * @param {string} str - original input string\n * @param {number} num - parsed number (Infinity or -Infinity)\n * @param {object} options - user options\n * @returns {string|number|null} based on infinity option\n */\nfunction handleInfinity(str, num, options) {\n const isPositive = num === Infinity;\n\n switch (options.infinity.toLowerCase()) {\n case \"null\":\n return null;\n case \"infinity\":\n return num; // Return Infinity or -Infinity\n case \"string\":\n return isPositive ? \"Infinity\" : \"-Infinity\";\n case \"original\":\n default:\n return str; // Return original string like \"1e1000\"\n }\n}", "export default function getIgnoreAttributesFn(ignoreAttributes) {\n if (typeof ignoreAttributes === 'function') {\n return ignoreAttributes\n }\n if (Array.isArray(ignoreAttributes)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes) {\n if (typeof pattern === 'string' && attrName === pattern) {\n return true\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true\n }\n }\n }\n }\n return () => false\n}", "/**\n * Expression - Parses and stores a tag pattern expression\n * \n * Patterns are parsed once and stored in an optimized structure for fast matching.\n * \n * @example\n * const expr = new Expression(\"root.users.user\");\n * const expr2 = new Expression(\"..user[id]:first\");\n * const expr3 = new Expression(\"root/users/user\", { separator: '/' });\n */\nexport default class Expression {\n /**\n * Create a new Expression\n * @param {string} pattern - Pattern string (e.g., \"root.users.user\", \"..user[id]\")\n * @param {Object} options - Configuration options\n * @param {string} options.separator - Path separator (default: '.')\n */\n constructor(pattern, options = {}, data) {\n this.pattern = pattern;\n this.separator = options.separator || '.';\n this.segments = this._parse(pattern);\n this.data = data;\n // Cache expensive checks for performance (O(1) instead of O(n))\n this._hasDeepWildcard = this.segments.some(seg => seg.type === 'deep-wildcard');\n this._hasAttributeCondition = this.segments.some(seg => seg.attrName !== undefined);\n this._hasPositionSelector = this.segments.some(seg => seg.position !== undefined);\n }\n\n /**\n * Parse pattern string into segments\n * @private\n * @param {string} pattern - Pattern to parse\n * @returns {Array} Array of segment objects\n */\n _parse(pattern) {\n const segments = [];\n\n // Split by separator but handle \"..\" specially\n let i = 0;\n let currentPart = '';\n\n while (i < pattern.length) {\n if (pattern[i] === this.separator) {\n // Check if next char is also separator (deep wildcard)\n if (i + 1 < pattern.length && pattern[i + 1] === this.separator) {\n // Flush current part if any\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n currentPart = '';\n }\n // Add deep wildcard\n segments.push({ type: 'deep-wildcard' });\n i += 2; // Skip both separators\n } else {\n // Regular separator\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n currentPart = '';\n i++;\n }\n } else {\n currentPart += pattern[i];\n i++;\n }\n }\n\n // Flush remaining part\n if (currentPart.trim()) {\n segments.push(this._parseSegment(currentPart.trim()));\n }\n\n return segments;\n }\n\n /**\n * Parse a single segment\n * @private\n * @param {string} part - Segment string (e.g., \"user\", \"ns::user\", \"user[id]\", \"ns::user:first\")\n * @returns {Object} Segment object\n */\n _parseSegment(part) {\n const segment = { type: 'tag' };\n\n // NEW NAMESPACE SYNTAX (v2.0):\n // ============================\n // Namespace uses DOUBLE colon (::)\n // Position uses SINGLE colon (:)\n // \n // Examples:\n // \"user\" \u2192 tag\n // \"user:first\" \u2192 tag + position\n // \"user[id]\" \u2192 tag + attribute\n // \"user[id]:first\" \u2192 tag + attribute + position\n // \"ns::user\" \u2192 namespace + tag\n // \"ns::user:first\" \u2192 namespace + tag + position\n // \"ns::user[id]\" \u2192 namespace + tag + attribute\n // \"ns::user[id]:first\" \u2192 namespace + tag + attribute + position\n // \"ns::first\" \u2192 namespace + tag named \"first\" (NO ambiguity!)\n //\n // This eliminates all ambiguity:\n // :: = namespace separator\n // : = position selector\n // [] = attributes\n\n // Step 1: Extract brackets [attr] or [attr=value]\n let bracketContent = null;\n let withoutBrackets = part;\n\n const bracketMatch = part.match(/^([^\\[]+)(\\[[^\\]]*\\])(.*)$/);\n if (bracketMatch) {\n withoutBrackets = bracketMatch[1] + bracketMatch[3];\n if (bracketMatch[2]) {\n const content = bracketMatch[2].slice(1, -1);\n if (content) {\n bracketContent = content;\n }\n }\n }\n\n // Step 2: Check for namespace (double colon ::)\n let namespace = undefined;\n let tagAndPosition = withoutBrackets;\n\n if (withoutBrackets.includes('::')) {\n const nsIndex = withoutBrackets.indexOf('::');\n namespace = withoutBrackets.substring(0, nsIndex).trim();\n tagAndPosition = withoutBrackets.substring(nsIndex + 2).trim(); // Skip ::\n\n if (!namespace) {\n throw new Error(`Invalid namespace in pattern: ${part}`);\n }\n }\n\n // Step 3: Parse tag and position (single colon :)\n let tag = undefined;\n let positionMatch = null;\n\n if (tagAndPosition.includes(':')) {\n const colonIndex = tagAndPosition.lastIndexOf(':'); // Use last colon for position\n const tagPart = tagAndPosition.substring(0, colonIndex).trim();\n const posPart = tagAndPosition.substring(colonIndex + 1).trim();\n\n // Verify position is a valid keyword\n const isPositionKeyword = ['first', 'last', 'odd', 'even'].includes(posPart) ||\n /^nth\\(\\d+\\)$/.test(posPart);\n\n if (isPositionKeyword) {\n tag = tagPart;\n positionMatch = posPart;\n } else {\n // Not a valid position keyword, treat whole thing as tag\n tag = tagAndPosition;\n }\n } else {\n tag = tagAndPosition;\n }\n\n if (!tag) {\n throw new Error(`Invalid segment pattern: ${part}`);\n }\n\n segment.tag = tag;\n if (namespace) {\n segment.namespace = namespace;\n }\n\n // Step 4: Parse attributes\n if (bracketContent) {\n if (bracketContent.includes('=')) {\n const eqIndex = bracketContent.indexOf('=');\n segment.attrName = bracketContent.substring(0, eqIndex).trim();\n segment.attrValue = bracketContent.substring(eqIndex + 1).trim();\n } else {\n segment.attrName = bracketContent.trim();\n }\n }\n\n // Step 5: Parse position selector\n if (positionMatch) {\n const nthMatch = positionMatch.match(/^nth\\((\\d+)\\)$/);\n if (nthMatch) {\n segment.position = 'nth';\n segment.positionValue = parseInt(nthMatch[1], 10);\n } else {\n segment.position = positionMatch;\n }\n }\n\n return segment;\n }\n\n /**\n * Get the number of segments\n * @returns {number}\n */\n get length() {\n return this.segments.length;\n }\n\n /**\n * Check if expression contains deep wildcard\n * @returns {boolean}\n */\n hasDeepWildcard() {\n return this._hasDeepWildcard;\n }\n\n /**\n * Check if expression has attribute conditions\n * @returns {boolean}\n */\n hasAttributeCondition() {\n return this._hasAttributeCondition;\n }\n\n /**\n * Check if expression has position selectors\n * @returns {boolean}\n */\n hasPositionSelector() {\n return this._hasPositionSelector;\n }\n\n /**\n * Get string representation\n * @returns {string}\n */\n toString() {\n return this.pattern;\n }\n}", "/**\n * ExpressionSet - An indexed collection of Expressions for efficient bulk matching\n *\n * Instead of iterating all expressions on every tag, ExpressionSet pre-indexes\n * them at insertion time by depth and terminal tag name. At match time, only\n * the relevant bucket is evaluated \u2014 typically reducing checks from O(E) to O(1)\n * lookup plus O(small bucket) matches.\n *\n * Three buckets are maintained:\n * - `_byDepthAndTag` \u2014 exact depth + exact tag name (tightest, used first)\n * - `_wildcardByDepth` \u2014 exact depth + wildcard tag `*` (depth-matched only)\n * - `_deepWildcards` \u2014 expressions containing `..` (cannot be depth-indexed)\n *\n * @example\n * import { Expression, ExpressionSet } from 'fast-xml-tagger';\n *\n * // Build once at config time\n * const stopNodes = new ExpressionSet();\n * stopNodes.add(new Expression('root.users.user'));\n * stopNodes.add(new Expression('root.config.setting'));\n * stopNodes.add(new Expression('..script'));\n *\n * // Query on every tag \u2014 hot path\n * if (stopNodes.matchesAny(matcher)) { ... }\n */\nexport default class ExpressionSet {\n constructor() {\n /** @type {Map<string, import('./Expression.js').default[]>} depth:tag \u2192 expressions */\n this._byDepthAndTag = new Map();\n\n /** @type {Map<number, import('./Expression.js').default[]>} depth \u2192 wildcard-tag expressions */\n this._wildcardByDepth = new Map();\n\n /** @type {import('./Expression.js').default[]} expressions containing deep wildcard (..) */\n this._deepWildcards = [];\n\n /** @type {Map<string, import('./Expression.js').default[]>} terminalTag \u2192 deep wildcard expressions */\n this._deepByTerminalTag = new Map();\n\n /** @type {Set<string>} pattern strings already added \u2014 used for deduplication */\n this._patterns = new Set();\n\n /** @type {boolean} whether the set is sealed against further additions */\n this._sealed = false;\n }\n\n /**\n * Add an Expression to the set.\n * Duplicate patterns (same pattern string) are silently ignored.\n *\n * @param {import('./Expression.js').default} expression - A pre-constructed Expression instance\n * @returns {this} for chaining\n * @throws {TypeError} if called after seal()\n *\n * @example\n * set.add(new Expression('root.users.user'));\n * set.add(new Expression('..script'));\n */\n add(expression) {\n if (this._sealed) {\n throw new TypeError(\n 'ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.'\n );\n }\n\n // Deduplicate by pattern string\n if (this._patterns.has(expression.pattern)) return this;\n this._patterns.add(expression.pattern);\n\n if (expression.hasDeepWildcard()) {\n const lastSeg = expression.segments[expression.segments.length - 1];\n if (lastSeg && lastSeg.type !== 'deep-wildcard' && lastSeg.tag !== '*') {\n const tag = lastSeg.tag;\n if (!this._deepByTerminalTag.has(tag)) this._deepByTerminalTag.set(tag, []);\n this._deepByTerminalTag.get(tag).push(expression);\n } else {\n this._deepWildcards.push(expression);\n }\n return this;\n }\n\n const depth = expression.length;\n const lastSeg = expression.segments[expression.segments.length - 1];\n const tag = lastSeg?.tag;\n\n if (!tag || tag === '*') {\n // Can index by depth but not by tag\n if (!this._wildcardByDepth.has(depth)) this._wildcardByDepth.set(depth, []);\n this._wildcardByDepth.get(depth).push(expression);\n } else {\n // Tightest bucket: depth + tag\n const key = `${depth}:${tag}`;\n if (!this._byDepthAndTag.has(key)) this._byDepthAndTag.set(key, []);\n this._byDepthAndTag.get(key).push(expression);\n }\n\n return this;\n }\n\n /**\n * Add multiple expressions at once.\n *\n * @param {import('./Expression.js').default[]} expressions - Array of Expression instances\n * @returns {this} for chaining\n *\n * @example\n * set.addAll([\n * new Expression('root.users.user'),\n * new Expression('root.config.setting'),\n * ]);\n */\n addAll(expressions) {\n for (const expr of expressions) this.add(expr);\n return this;\n }\n\n /**\n * Check whether a pattern string is already present in the set.\n *\n * @param {import('./Expression.js').default} expression\n * @returns {boolean}\n */\n has(expression) {\n return this._patterns.has(expression.pattern);\n }\n\n /**\n * Number of expressions in the set.\n * @type {number}\n */\n get size() {\n return this._patterns.size;\n }\n\n /**\n * Seal the set against further modifications.\n * Useful to prevent accidental mutations after config is built.\n * Calling add() or addAll() on a sealed set throws a TypeError.\n *\n * @returns {this}\n */\n seal() {\n this._sealed = true;\n return this;\n }\n\n /**\n * Whether the set has been sealed.\n * @type {boolean}\n */\n get isSealed() {\n return this._sealed;\n }\n\n /**\n * Test whether the matcher's current path matches any expression in the set.\n *\n * Evaluation order (cheapest \u2192 most expensive):\n * 1. Exact depth + tag bucket \u2014 O(1) lookup, typically 0\u20132 expressions\n * 2. Depth-only wildcard bucket \u2014 O(1) lookup, rare\n * 3. Deep-wildcard list \u2014 always checked, but usually small\n *\n * @param {import('./Matcher.js').default} matcher - Matcher instance (or readOnly view)\n * @returns {boolean} true if any expression matches the current path\n *\n * @example\n * if (stopNodes.matchesAny(matcher)) {\n * // handle stop node\n * }\n */\n matchesAny(matcher) {\n return this.findMatch(matcher) !== null;\n }\n /**\n * Find and return the first Expression that matches the matcher's current path.\n *\n * Uses the same evaluation order as matchesAny (cheapest \u2192 most expensive):\n * 1. Exact depth + tag bucket\n * 2. Depth-only wildcard bucket\n * 3. Deep-wildcard list\n *\n * @param {import('./Matcher.js').default} matcher - Matcher instance (or readOnly view)\n * @returns {import('./Expression.js').default | null} the first matching Expression, or null\n *\n * @example\n * const expr = stopNodes.findMatch(matcher);\n * if (expr) {\n * // access expr.config, expr.pattern, etc.\n * }\n */\n findMatch(matcher) {\n const depth = matcher.getDepth();\n const tag = matcher.getCurrentTag();\n\n // 1. Tightest bucket \u2014 most expressions live here\n const exactKey = `${depth}:${tag}`;\n const exactBucket = this._byDepthAndTag.get(exactKey);\n if (exactBucket) {\n for (let i = 0; i < exactBucket.length; i++) {\n if (matcher.matches(exactBucket[i])) return exactBucket[i];\n }\n }\n\n // 2. Depth-matched wildcard-tag expressions\n const wildcardBucket = this._wildcardByDepth.get(depth);\n if (wildcardBucket) {\n for (let i = 0; i < wildcardBucket.length; i++) {\n if (matcher.matches(wildcardBucket[i])) return wildcardBucket[i];\n }\n }\n\n // 3. Deep wildcards \u2014 indexed by terminal tag, then unindexed fallback\n const deepBucket = this._deepByTerminalTag.get(tag);\n if (deepBucket) {\n for (let i = 0; i < deepBucket.length; i++) {\n if (matcher.matches(deepBucket[i])) return deepBucket[i];\n }\n }\n for (let i = 0; i < this._deepWildcards.length; i++) {\n if (matcher.matches(this._deepWildcards[i])) return this._deepWildcards[i];\n }\n\n return null;\n }\n}\n", "import ExpressionSet from \"./ExpressionSet.js\";\n\n/**\n * MatcherView - A lightweight read-only view over a Matcher's internal state.\n *\n * Created once by Matcher and reused across all callbacks. Holds a direct\n * reference to the parent Matcher so it always reflects current parser state\n * with zero copying or freezing overhead.\n *\n * Users receive this via {@link Matcher#readOnly} or directly from parser\n * callbacks. It exposes all query and matching methods but has no mutation\n * methods \u2014 misuse is caught at the TypeScript level rather than at runtime.\n *\n * @example\n * const matcher = new Matcher();\n * const view = matcher.readOnly();\n *\n * matcher.push(\"root\", {});\n * view.getCurrentTag(); // \"root\"\n * view.getDepth(); // 1\n */\nexport class MatcherView {\n /**\n * @param {Matcher} matcher - The parent Matcher instance to read from.\n */\n constructor(matcher) {\n this._matcher = matcher;\n }\n\n /**\n * Get the path separator used by the parent matcher.\n * @returns {string}\n */\n get separator() {\n return this._matcher.separator;\n }\n\n /**\n * Get current tag name.\n * @returns {string|undefined}\n */\n getCurrentTag() {\n const path = this._matcher.path;\n return path.length > 0 ? path[path.length - 1].tag : undefined;\n }\n\n /**\n * Get current namespace.\n * @returns {string|undefined}\n */\n getCurrentNamespace() {\n const path = this._matcher.path;\n return path.length > 0 ? path[path.length - 1].namespace : undefined;\n }\n\n /**\n * Get current node's attribute value.\n * @param {string} attrName\n * @returns {*}\n */\n getAttrValue(attrName) {\n const path = this._matcher.path;\n if (path.length === 0) return undefined;\n return path[path.length - 1].values?.[attrName];\n }\n\n /**\n * Check if current node has an attribute.\n * @param {string} attrName\n * @returns {boolean}\n */\n hasAttr(attrName) {\n const path = this._matcher.path;\n if (path.length === 0) return false;\n const current = path[path.length - 1];\n return current.values !== undefined && attrName in current.values;\n }\n\n /**\n * Get the value of a \"kept\" attribute from the nearest ancestor (or\n * current node) that declared it via `push(tag, attrs, ns, { keep: [...] })`.\n * @param {string} attrName\n * @returns {*}\n */\n getAnyParentAttr(attrName) {\n return this._matcher.getAnyParentAttr(attrName);\n }\n\n /**\n * Check whether any ancestor (or the current node) kept the given\n * attribute via `push(tag, attrs, ns, { keep: [...] })`.\n * @param {string} attrName\n * @returns {boolean}\n */\n hasAnyParentAttr(attrName) {\n return this._matcher.hasAnyParentAttr(attrName);\n }\n\n /**\n * Get current node's sibling position (child index in parent).\n * @returns {number}\n */\n getPosition() {\n const path = this._matcher.path;\n if (path.length === 0) return -1;\n return path[path.length - 1].position ?? 0;\n }\n\n /**\n * Get current node's repeat counter (occurrence count of this tag name).\n * @returns {number}\n */\n getCounter() {\n const path = this._matcher.path;\n if (path.length === 0) return -1;\n return path[path.length - 1].counter ?? 0;\n }\n\n /**\n * Get current node's sibling index (alias for getPosition).\n * @returns {number}\n * @deprecated Use getPosition() or getCounter() instead\n */\n getIndex() {\n return this.getPosition();\n }\n\n /**\n * Get current path depth.\n * @returns {number}\n */\n getDepth() {\n return this._matcher.path.length;\n }\n\n /**\n * Get path as string.\n * @param {string} [separator] - Optional separator (uses default if not provided)\n * @param {boolean} [includeNamespace=true]\n * @returns {string}\n */\n toString(separator, includeNamespace = true) {\n return this._matcher.toString(separator, includeNamespace);\n }\n\n /**\n * Get path as array of tag names.\n * @returns {string[]}\n */\n toArray() {\n return this._matcher.path.map(n => n.tag);\n }\n\n /**\n * Match current path against an Expression.\n * @param {Expression} expression\n * @returns {boolean}\n */\n matches(expression) {\n return this._matcher.matches(expression);\n }\n\n /**\n * Match any expression in the given set against the current path.\n * @param {ExpressionSet} exprSet\n * @returns {boolean}\n */\n matchesAny(exprSet) {\n return exprSet.matchesAny(this._matcher);\n }\n}\n\n/**\n * Matcher - Tracks current path in XML/JSON tree and matches against Expressions.\n *\n * The matcher maintains a stack of nodes representing the current path from root to\n * current tag. It only stores attribute values for the current (top) node to minimize\n * memory usage. Sibling tracking is used to auto-calculate position and counter.\n *\n * Use {@link Matcher#readOnly} to obtain a {@link MatcherView} safe to pass to\n * user callbacks \u2014 it always reflects current state with no Proxy overhead.\n *\n * @example\n * const matcher = new Matcher();\n * matcher.push(\"root\", {});\n * matcher.push(\"users\", {});\n * matcher.push(\"user\", { id: \"123\", type: \"admin\" });\n *\n * const expr = new Expression(\"root.users.user\");\n * matcher.matches(expr); // true\n */\nexport default class Matcher {\n /**\n * Create a new Matcher.\n * @param {Object} [options={}]\n * @param {string} [options.separator='.'] - Default path separator\n */\n constructor(options = {}) {\n this.separator = options.separator || '.';\n this.path = [];\n this.siblingStacks = [];\n // Each path node: { tag, values, position, counter, namespace? }\n // values only present for current (last) node\n // Each siblingStacks entry: Map<tagName, count> tracking occurrences at each level\n this._pathStringCache = null;\n this._view = new MatcherView(this);\n\n // Kept-attribute stack: only populated when push() is called with options.keep.\n this._keptAttrs = [];\n }\n\n /**\n * Push a new tag onto the path.\n * @param {string} tagName\n * @param {Object|null} [attrValues=null]\n * @param {string|null} [namespace=null]\n * @param {Object|null} [options=null]\n * @param {string[]} [options.keep] - Names of attributes (from attrValues)\n */\n push(tagName, attrValues = null, namespace = null, options = null) {\n this._pathStringCache = null;\n\n // Remove values from previous current node (now becoming ancestor)\n if (this.path.length > 0) {\n this.path[this.path.length - 1].values = undefined;\n }\n\n // Get or create sibling tracking for current level\n const currentLevel = this.path.length;\n if (!this.siblingStacks[currentLevel]) {\n this.siblingStacks[currentLevel] = new Map();\n }\n\n const siblings = this.siblingStacks[currentLevel];\n\n // Create a unique key for sibling tracking that includes namespace\n const siblingKey = namespace ? `${namespace}:${tagName}` : tagName;\n\n // Calculate counter (how many times this tag appeared at this level)\n const counter = siblings.get(siblingKey) || 0;\n\n // Calculate position (total children at this level so far)\n let position = 0;\n for (const count of siblings.values()) {\n position += count;\n }\n\n // Update sibling count for this tag\n siblings.set(siblingKey, counter + 1);\n\n // Create new node\n const node = {\n tag: tagName,\n position: position,\n counter: counter\n };\n\n if (namespace !== null && namespace !== undefined) {\n node.namespace = namespace;\n }\n\n if (attrValues !== null && attrValues !== undefined) {\n node.values = attrValues;\n }\n\n this.path.push(node);\n\n // Depth of the node we just pushed (1-based, matches this.path.length)\n const depth = this.path.length;\n\n // Copy only the requested attributes into the kept-attrs stack. This is\n // the one part of push() whose cost scales with input (O(keep.length))\n // rather than being O(1) \u2014 by design, since the caller is explicitly\n // opting in for specific attribute names. No options/keep => zero added\n // cost beyond the two property reads below.\n const keep = options !== null ? options.keep : null;\n if (keep !== null && keep !== undefined && keep.length > 0 && attrValues) {\n for (let i = 0; i < keep.length; i++) {\n const name = keep[i];\n if (attrValues[name] !== undefined) {\n this._keptAttrs.push({ depth, name, value: attrValues[name] });\n }\n }\n }\n }\n\n /**\n * Pop the last tag from the path.\n * @returns {Object|undefined} The popped node\n */\n pop() {\n if (this.path.length === 0) return undefined;\n this._pathStringCache = null;\n\n const node = this.path.pop();\n\n if (this.siblingStacks.length > this.path.length + 1) {\n this.siblingStacks.length = this.path.length + 1;\n }\n\n // Drop any kept attributes that belonged to the popped node (or deeper).\n // _keptAttrs is depth-ordered (push only ever appends increasing depths),\n // so this is a backward scan that stops at the first surviving entry \u2014\n // typically O(1) since kept attrs are rare by design.\n const poppedDepth = this.path.length + 1;\n while (\n this._keptAttrs.length > 0 &&\n this._keptAttrs[this._keptAttrs.length - 1].depth >= poppedDepth\n ) {\n this._keptAttrs.pop();\n }\n\n return node;\n }\n\n /**\n * Update current node's attribute values.\n * Useful when attributes are parsed after push.\n * @param {Object} attrValues\n */\n updateCurrent(attrValues) {\n if (this.path.length > 0) {\n const current = this.path[this.path.length - 1];\n if (attrValues !== null && attrValues !== undefined) {\n current.values = attrValues;\n }\n }\n }\n\n /**\n * Get current tag name.\n * @returns {string|undefined}\n */\n getCurrentTag() {\n return this.path.length > 0 ? this.path[this.path.length - 1].tag : undefined;\n }\n\n /**\n * Get current namespace.\n * @returns {string|undefined}\n */\n getCurrentNamespace() {\n return this.path.length > 0 ? this.path[this.path.length - 1].namespace : undefined;\n }\n\n /**\n * Get current node's attribute value.\n * @param {string} attrName\n * @returns {*}\n */\n getAttrValue(attrName) {\n if (this.path.length === 0) return undefined;\n return this.path[this.path.length - 1].values?.[attrName];\n }\n\n /**\n * Check if current node has an attribute.\n * @param {string} attrName\n * @returns {boolean}\n */\n hasAttr(attrName) {\n if (this.path.length === 0) return false;\n const current = this.path[this.path.length - 1];\n return current.values !== undefined && attrName in current.values;\n }\n\n /**\n * Get the value of a \"kept\" attribute from the nearest ancestor (or\n * current node) that declared it via `push(tag, attrs, ns, { keep: [...] })`.\n * Unlike getAttrValue(), this works regardless of how deep the path has\n * gone since the attribute was pushed \u2014 but only for attribute names that\n * were explicitly marked with `keep` at push time. Cost is proportional to\n * the number of currently-kept attributes (typically 0-3), not path depth.\n * @param {string} attrName\n * @returns {*} the value, or undefined if no ancestor kept this attribute\n */\n getAnyParentAttr(attrName) {\n const kept = this._keptAttrs;\n for (let i = kept.length - 1; i >= 0; i--) {\n if (kept[i].name === attrName) return kept[i].value;\n }\n return undefined;\n }\n\n /**\n * Check whether any ancestor (or the current node) kept the given\n * attribute via `push(tag, attrs, ns, { keep: [...] })`.\n * @param {string} attrName\n * @returns {boolean}\n */\n hasAnyParentAttr(attrName) {\n const kept = this._keptAttrs;\n for (let i = kept.length - 1; i >= 0; i--) {\n if (kept[i].name === attrName) return true;\n }\n return false;\n }\n\n /**\n * Get current node's sibling position (child index in parent).\n * @returns {number}\n */\n getPosition() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].position ?? 0;\n }\n\n /**\n * Get current node's repeat counter (occurrence count of this tag name).\n * @returns {number}\n */\n getCounter() {\n if (this.path.length === 0) return -1;\n return this.path[this.path.length - 1].counter ?? 0;\n }\n\n /**\n * Get current node's sibling index (alias for getPosition).\n * @returns {number}\n * @deprecated Use getPosition() or getCounter() instead\n */\n getIndex() {\n return this.getPosition();\n }\n\n /**\n * Get current path depth.\n * @returns {number}\n */\n getDepth() {\n return this.path.length;\n }\n\n /**\n * Get path as string.\n * @param {string} [separator] - Optional separator (uses default if not provided)\n * @param {boolean} [includeNamespace=true]\n * @returns {string}\n */\n toString(separator, includeNamespace = true) {\n const sep = separator || this.separator;\n const isDefault = (sep === this.separator && includeNamespace === true);\n\n if (isDefault) {\n if (this._pathStringCache !== null) {\n return this._pathStringCache;\n }\n const result = this.path.map(n =>\n (n.namespace) ? `${n.namespace}:${n.tag}` : n.tag\n ).join(sep);\n this._pathStringCache = result;\n return result;\n }\n\n return this.path.map(n =>\n (includeNamespace && n.namespace) ? `${n.namespace}:${n.tag}` : n.tag\n ).join(sep);\n }\n\n /**\n * Get path as array of tag names.\n * @returns {string[]}\n */\n toArray() {\n return this.path.map(n => n.tag);\n }\n\n /**\n * Reset the path to empty.\n */\n reset() {\n this._pathStringCache = null;\n this.path = [];\n this.siblingStacks = [];\n this._keptAttrs = [];\n }\n\n /**\n * Match current path against an Expression.\n * @param {Expression} expression\n * @returns {boolean}\n */\n matches(expression) {\n const segments = expression.segments;\n\n if (segments.length === 0) {\n return false;\n }\n\n if (expression.hasDeepWildcard()) {\n return this._matchWithDeepWildcard(segments);\n }\n\n return this._matchSimple(segments);\n }\n\n /**\n * @private\n */\n _matchSimple(segments) {\n if (this.path.length !== segments.length) {\n return false;\n }\n\n for (let i = 0; i < segments.length; i++) {\n if (!this._matchSegment(segments[i], this.path[i], i === this.path.length - 1)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * @private\n */\n _matchWithDeepWildcard(segments) {\n let pathIdx = this.path.length - 1;\n let segIdx = segments.length - 1;\n\n while (segIdx >= 0 && pathIdx >= 0) {\n const segment = segments[segIdx];\n\n if (segment.type === 'deep-wildcard') {\n segIdx--;\n\n if (segIdx < 0) {\n return true;\n }\n\n const nextSeg = segments[segIdx];\n let found = false;\n\n for (let i = pathIdx; i >= 0; i--) {\n if (this._matchSegment(nextSeg, this.path[i], i === this.path.length - 1)) {\n pathIdx = i - 1;\n segIdx--;\n found = true;\n break;\n }\n }\n\n if (!found) {\n return false;\n }\n } else {\n if (!this._matchSegment(segment, this.path[pathIdx], pathIdx === this.path.length - 1)) {\n return false;\n }\n pathIdx--;\n segIdx--;\n }\n }\n\n return segIdx < 0;\n }\n\n /**\n * @private\n */\n _matchSegment(segment, node, isCurrentNode) {\n if (segment.tag !== '*' && segment.tag !== node.tag) {\n return false;\n }\n\n if (segment.namespace !== undefined) {\n if (segment.namespace !== '*' && segment.namespace !== node.namespace) {\n return false;\n }\n }\n\n if (segment.attrName !== undefined) {\n if (!isCurrentNode) {\n return false;\n }\n\n if (!node.values || !(segment.attrName in node.values)) {\n return false;\n }\n\n if (segment.attrValue !== undefined) {\n if (String(node.values[segment.attrName]) !== String(segment.attrValue)) {\n return false;\n }\n }\n }\n\n if (segment.position !== undefined) {\n if (!isCurrentNode) {\n return false;\n }\n\n const counter = node.counter ?? 0;\n\n if (segment.position === 'first' && counter !== 0) {\n return false;\n } else if (segment.position === 'odd' && counter % 2 !== 1) {\n return false;\n } else if (segment.position === 'even' && counter % 2 !== 0) {\n return false;\n } else if (segment.position === 'nth' && counter !== segment.positionValue) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Match any expression in the given set against the current path.\n * @param {ExpressionSet} exprSet\n * @returns {boolean}\n */\n matchesAny(exprSet) {\n return exprSet.matchesAny(this);\n }\n\n /**\n * Create a snapshot of current state.\n * @returns {Object}\n */\n snapshot() {\n return {\n path: this.path.map(node => ({ ...node })),\n siblingStacks: this.siblingStacks.map(map => new Map(map)),\n keptAttrs: this._keptAttrs.map(entry => ({ ...entry }))\n };\n }\n\n /**\n * Restore state from snapshot.\n * @param {Object} snapshot\n */\n restore(snapshot) {\n this._pathStringCache = null;\n this.path = snapshot.path.map(node => ({ ...node }));\n this.siblingStacks = snapshot.siblingStacks.map(map => new Map(map));\n this._keptAttrs = (snapshot.keptAttrs || []).map(entry => ({ ...entry }));\n }\n\n /**\n * Return the read-only {@link MatcherView} for this matcher.\n *\n * The same instance is returned on every call \u2014 no allocation occurs.\n * It always reflects the current parser state and is safe to pass to\n * user callbacks without risk of accidental mutation.\n *\n * @returns {MatcherView}\n *\n * @example\n * const view = matcher.readOnly();\n * // pass view to callbacks \u2014 it stays in sync automatically\n * view.matches(expr); // \u2713\n * view.getCurrentTag(); // \u2713\n * // view.push(...) // \u2717 method does not exist \u2014 caught by TypeScript\n */\n readOnly() {\n return this._view;\n }\n}\n", "/**\n * HTML context patterns.\n *\n * Detects XSS vectors that are dangerous when a string ends up rendered as HTML.\n * All patterns use bounded quantifiers to ensure linear-time matching (ReDoS-safe).\n *\n * Each entry is { pattern: RegExp, id: string, description: string }\n * so callers can inspect which rule fired if they need to.\n */\n\nconst HTML_PATTERNS = [\n {\n id: 'html-script-open',\n description: '<script opening tag',\n pattern: /<script[\\s>/]/i,\n },\n {\n id: 'html-script-close',\n description: '</script closing tag',\n pattern: /<\\/script[\\s>]/i,\n },\n {\n id: 'html-javascript-protocol',\n description: 'javascript: URI scheme (with optional whitespace/encoding)',\n // Handles javascript:, j\\u0061vascript:, and whitespace variants\n pattern: /j[\\t\\n\\r ]*a[\\t\\n\\r ]*v[\\t\\n\\r ]*a[\\t\\n\\r ]*s[\\t\\n\\r ]*c[\\t\\n\\r ]*r[\\t\\n\\r ]*i[\\t\\n\\r ]*p[\\t\\n\\r ]*t[\\t\\n\\r ]*:/i,\n },\n {\n id: 'html-vbscript-protocol',\n description: 'vbscript: URI scheme',\n pattern: /vbscript[\\t\\n\\r ]*:/i,\n },\n {\n id: 'html-data-html',\n description: 'data:text/html URI \u2014 can execute scripts in browsers',\n pattern: /data[\\t\\n\\r ]*:[\\t\\n\\r ]*text\\/html/i,\n },\n {\n id: 'html-data-xhtml',\n description: 'data:application/xhtml+xml URI',\n pattern: /data[\\t\\n\\r ]*:[\\t\\n\\r ]*application\\/xhtml/i,\n },\n {\n id: 'html-data-svg',\n description: 'data:image/svg+xml URI \u2014 can execute scripts',\n pattern: /data[\\t\\n\\r ]*:[\\t\\n\\r ]*image\\/svg\\+xml/i,\n },\n {\n id: 'html-inline-event-handler',\n description: 'Inline event handler attributes: onclick=, onerror=, onload=, etc.',\n // \\bon ensures we match a word boundary so \"phonetic=\" is not caught\n pattern: /\\bon\\w{1,30}\\s*=/i,\n },\n {\n id: 'html-entity-obfuscated-script',\n description: 'HTML-entity-encoded <script (e.g. <script or <script)',\n // Entities include optional trailing semicolon: < or < (both valid in HTML5)\n pattern: /(?:�*3[Cc];?|�*60;?|<)\\s*script/i,\n },\n {\n id: 'html-entity-obfuscated-javascript',\n description: 'HTML-entity-encoded javascript: (partial \u2014 catches common j or j for \"j\")',\n pattern: /(?:�*6[Aa];?|�*106;?)\\s*(?:�*61;?|a)[\\s\\S]{0,80}script\\s*:/i,\n },\n {\n id: 'html-style-expression',\n description: 'CSS expression() \u2014 IE-era code execution in style attributes',\n pattern: /style[\\s\\S]{0,20}expression\\s*\\(/i,\n },\n {\n id: 'html-object-embed',\n description: '<object or <embed tags that can load active content',\n pattern: /<(?:object|embed)[\\s>/]/i,\n },\n {\n id: 'html-base-tag',\n description: '<base href= \u2014 can hijack all relative URLs on a page',\n pattern: /<base[\\s>]/i,\n },\n {\n id: 'html-meta-refresh',\n description: '<meta http-equiv=\"refresh\" \u2014 can redirect users',\n pattern: /<meta[\\s\\S]{0,40}http-equiv[\\s\\S]{0,20}refresh/i,\n },\n {\n id: 'html-srcdoc',\n description: 'srcdoc= attribute on iframes \u2014 embeds HTML that can run scripts',\n pattern: /srcdoc\\s*=/i,\n },\n {\n id: 'html-iframe',\n description: '<iframe tag',\n pattern: /<iframe[\\s>/]/i,\n },\n {\n id: 'html-form',\n description: '<form tag \u2014 can be used for phishing / credential harvesting injection',\n pattern: /<form[\\s>/]/i,\n },\n];\n\nexport default HTML_PATTERNS;\n", "/**\n * XML context patterns.\n *\n * Detects injection vectors that are specifically dangerous when a string\n * is inserted into an XML document (not HTML rendering context).\n *\n * Key distinction from HTML: these patterns target parser-level attacks \u2014\n * things that can confuse or subvert an XML parser, trigger external entity\n * resolution, or inject DTD content. HTML rendering concerns (XSS) belong\n * in the HTML context.\n */\n\nconst XML_PATTERNS = [\n {\n id: 'xml-cdata-injection',\n description: 'CDATA section injection: <![CDATA[ breaks out of text node context',\n pattern: /<!\\[CDATA\\[/i,\n },\n {\n id: 'xml-cdata-close',\n description: 'CDATA close sequence: ]]> can terminate an enclosing CDATA section',\n pattern: /\\]\\]>/,\n },\n {\n id: 'xml-processing-instruction',\n description: 'XML processing instruction: <?xml-stylesheet or <?php etc.',\n pattern: /<\\?(?:xml[\\- ]|php|asp)/i,\n },\n {\n id: 'xml-doctype-injection',\n description: 'DOCTYPE declaration embedded in content \u2014 can define entities',\n // Match <!DOCTYPE followed by end-of-string, whitespace, or [ (internal subset)\n pattern: /<!DOCTYPE(?:[\\s[]|$)/i,\n },\n {\n id: 'xml-entity-system',\n description: 'SYSTEM keyword \u2014 used in external entity declarations (XXE)',\n pattern: /\\bSYSTEM\\s+[\"']/i,\n },\n {\n id: 'xml-entity-public',\n description: 'PUBLIC keyword \u2014 used in external entity declarations (XXE)',\n pattern: /\\bPUBLIC\\s+[\"']/i,\n },\n {\n id: 'xml-entity-declaration',\n description: '<!ENTITY declaration \u2014 defines entities, potential XXE or entity expansion',\n pattern: /<!ENTITY[\\s%]/i,\n },\n {\n id: 'xml-billion-laughs',\n description: 'Entity reference chaining / billion laughs: repeated &eX; style references',\n // Heuristic: 3+ consecutive entity refs suggests expansion attack\n pattern: /(?:&\\w{1,20};){3,}/,\n },\n {\n id: 'xml-namespace-confusion',\n description: 'xmlns: attribute injection \u2014 can redefine namespaces to confuse parsers',\n pattern: /\\bxmlns\\s*(?::\\w{1,40})?\\s*=/i,\n },\n {\n id: 'xml-comment-injection',\n description: '<!-- comment injection \u2014 can hide content from some parsers',\n pattern: /<!--/,\n },\n {\n id: 'xml-comment-close',\n description: '--> closes an enclosing XML comment',\n pattern: /-->/,\n },\n {\n id: 'xml-pi-close',\n description: '?> closes an enclosing processing instruction',\n pattern: /\\?>/,\n },\n];\n\nexport default XML_PATTERNS;\n", "/**\n * SVG context patterns.\n *\n * SVG is XML-based but renders in browsers, giving it a unique attack surface\n * that combines XML parser behaviour with browser rendering and JavaScript execution.\n *\n * Many of these vectors bypass HTML sanitizers that don't understand SVG semantics\n * (DOMPurify has documented bypass vulnerabilities specifically in SVG/XML context).\n */\n\nconst SVG_PATTERNS = [\n {\n id: 'svg-script-element',\n description: '<script element inside SVG executes JavaScript',\n pattern: /<script[\\s>/]/i,\n },\n {\n id: 'svg-xlink-href-javascript',\n description: 'xlink:href with javascript: \u2014 classic SVG XSS via <a> or <use>',\n pattern: /xlink\\s*:\\s*href\\s*=\\s*[\"']?\\s*javascript\\s*:/i,\n },\n {\n id: 'svg-href-javascript',\n description: 'href= with javascript: in SVG context (<a>, <animate>, etc.)',\n pattern: /href\\s*=\\s*[\"']?\\s*javascript\\s*:/i,\n },\n {\n id: 'svg-foreignobject',\n description: '<foreignObject embeds HTML inside SVG \u2014 can execute scripts',\n pattern: /<foreignObject[\\s>/]/i,\n },\n {\n id: 'svg-use-external',\n description: '<use xlink:href or href pointing to external resource (non-fragment URL)',\n // Match <use with href= where the value starts with a non-# character (external URL)\n // [\\\"'][^#] catches quoted values not starting with #; [^\\\"'#\\s>] catches unquoted\n pattern: /<use[\\s\\S]{0,60}(?:xlink\\s*:\\s*)?href\\s*=\\s*(?:[\"'][^#]|[^\"'#\\s>])/i,\n },\n {\n id: 'svg-animate-href',\n description: '<animate attributeName=\"href\" \u2014 can dynamically change href to javascript:',\n pattern: /<animate[\\s\\S]{0,80}attributeName\\s*=\\s*[\"'][\\s]*href[\"']/i,\n },\n {\n id: 'svg-animate-xlinkhref',\n description: '<animate attributeName=\"xlink:href\"',\n pattern: /<animate[\\s\\S]{0,80}attributeName\\s*=\\s*[\"'][\\s]*xlink\\s*:\\s*href[\"']/i,\n },\n {\n id: 'svg-set-javascript',\n description: '<set to=\"javascript:...\" \u2014 sets an attribute to a javascript: URI',\n pattern: /<set[\\s\\S]{0,80}to\\s*=\\s*[\"']?\\s*javascript\\s*:/i,\n },\n {\n id: 'svg-event-handler',\n description: 'SVG-specific event handler attributes: onload=, onerror=, onactivate=, etc.',\n pattern: /\\bon(?:load|error|activate|begin|end|repeat|focus|blur|click|mouse\\w{1,20}|key\\w{1,20})\\s*=/i,\n },\n {\n id: 'svg-handler-generic',\n description: 'Generic on* handler catch-all for SVG attributes',\n pattern: /\\bon\\w{1,30}\\s*=/i,\n },\n {\n id: 'svg-filter-feimage',\n description: '<feImage href= \u2014 filter primitive that can load external resources',\n pattern: /<feImage[\\s\\S]{0,80}(?:xlink\\s*:\\s*)?href\\s*=/i,\n },\n {\n id: 'svg-image-external',\n description: '<image xlink:href with http/https or javascript protocol',\n pattern: /<image[\\s\\S]{0,80}(?:xlink\\s*:\\s*)?href\\s*=\\s*[\"']?\\s*(?:https?|javascript)\\s*:/i,\n },\n {\n id: 'svg-style-javascript',\n description: 'style= attribute containing javascript: (e.g. background:url(javascript:...))',\n pattern: /style\\s*=[\\s\\S]{0,60}javascript\\s*:/i,\n },\n];\n\nexport default SVG_PATTERNS;\n", "/**\n * SQL context patterns \u2014 high-precision rules only.\n *\n * These rules have very low false-positive risk and are safe to apply to\n * general user text (names, descriptions, search queries, etc.).\n * All patterns are ReDoS-safe \u2014 unlike the `sql-injection` npm package\n * which has an active CVE on its own detection regexes.\n *\n * For exhaustive coverage including noisier heuristics (comment sequences,\n * hex literals, stacked queries with semicolons), use 'SQL-STRICT' instead.\n * Apply 'SQL-STRICT' only to strings that are specifically SQL fragments,\n * not to general free-text fields.\n */\n\nconst SQL_PATTERNS = [\n {\n id: 'sql-block-comment-open',\n description: 'SQL block comment open: /* ... */ \u2014 unusual in legitimate user text',\n pattern: /\\/\\*/,\n },\n {\n id: 'sql-union-select',\n description: 'UNION SELECT \u2014 most common SQL injection aggregation attack',\n pattern: /\\bUNION\\s{1,20}(?:ALL\\s{1,20})?SELECT\\b/i,\n },\n {\n id: 'sql-drop-table',\n description: 'DROP TABLE \u2014 destructive DDL injection',\n pattern: /\\bDROP\\s{1,20}TABLE\\b/i,\n },\n {\n id: 'sql-drop-database',\n description: 'DROP DATABASE \u2014 destructive DDL injection',\n pattern: /\\bDROP\\s{1,20}DATABASE\\b/i,\n },\n {\n id: 'sql-insert-into',\n description: 'INSERT INTO \u2014 data injection',\n pattern: /\\bINSERT\\s{1,20}INTO\\b/i,\n },\n {\n id: 'sql-delete-from',\n description: 'DELETE FROM \u2014 data deletion injection',\n pattern: /\\bDELETE\\s{1,20}FROM\\b/i,\n },\n {\n id: 'sql-update-set',\n description: 'UPDATE ... SET \u2014 data modification injection',\n // Allows arbitrary content between UPDATE and SET (table name, alias, etc.)\n pattern: /\\bUPDATE\\b[\\s\\S]{1,60}\\bSET\\b/i,\n },\n {\n id: 'sql-exec-xp',\n description: 'EXEC xp_ \u2014 MSSQL extended stored procedure execution',\n pattern: /\\bEXEC(?:UTE)?\\s{1,20}xp_/i,\n },\n {\n id: 'sql-tautology-string',\n description: \"Classic string tautology: ' OR '1'='1 or \\\" OR \\\"1\\\"=\\\"1\\\"\",\n // Last quote is optional \u2014 injection may truncate it: ' OR '1'='1--\n pattern: /'\\s{0,10}OR\\s{0,10}'[^']{0,20}'\\s*=\\s*'[^']{0,20}/i,\n },\n {\n id: 'sql-tautology-numeric',\n description: 'Numeric tautology: OR 1=1',\n pattern: /\\bOR\\s{1,10}1\\s*=\\s*1\\b/i,\n },\n {\n id: 'sql-always-true-zero',\n description: 'Numeric tautology: OR 0=0',\n pattern: /\\bOR\\s{1,10}0\\s*=\\s*0\\b/i,\n },\n {\n id: 'sql-sleep-benchmark',\n description: 'Time-based blind injection: SLEEP() or BENCHMARK()',\n pattern: /\\b(?:SLEEP|BENCHMARK)\\s*\\(/i,\n },\n {\n id: 'sql-waitfor-delay',\n description: 'MSSQL time-based blind injection: WAITFOR DELAY',\n pattern: /\\bWAITFOR\\s{1,20}DELAY\\b/i,\n },\n {\n id: 'sql-char-function',\n description: 'CHAR() function \u2014 used to obfuscate injected strings',\n pattern: /\\bCHAR\\s*\\(\\s*\\d{1,3}/i,\n },\n {\n id: 'sql-information-schema',\n description: 'INFORMATION_SCHEMA \u2014 reconnaissance query for table/column enumeration',\n pattern: /\\bINFORMATION_SCHEMA\\b/i,\n },\n];\n\nexport default SQL_PATTERNS;\n", "/**\n * SQL-STRICT context patterns.\n *\n * Extends the base 'SQL' context with three additional rules that are\n * effective at detecting real injections but carry a higher false-positive\n * risk on general free-text input.\n *\n * Use 'SQL-STRICT' when:\n * - The string is specifically a SQL fragment or database identifier\n * - You control the input domain (e.g. a dedicated SQL search field)\n * - You can tolerate occasional false positives in exchange for broader coverage\n *\n * Use 'SQL' (not STRICT) when:\n * - The field is general user text (names, descriptions, comments)\n * - False positives would block legitimate content (e.g. \"see note -- above\")\n *\n * Rules moved here from 'SQL' due to false-positive risk:\n *\n * sql-line-comment \u2014 \"--\" fires on \"see note -- above\", \"value--\", CSS var(--primary)\n * sql-stacked-query \u2014 \"; SELECT\" fires on legitimate prose with semicolons + SQL words\n * sql-hex-encoding \u2014 \"0xDEAD\" fires on hex values in technical docs and log output\n */\n\nimport SQL_PATTERNS from './sql.js';\n\nconst SQL_STRICT_EXTRA = [\n {\n id: 'sql-line-comment',\n description: 'SQL line comment: -- followed by whitespace or end of string',\n pattern: /--(?:\\s|$)/,\n },\n {\n id: 'sql-stacked-query',\n description: 'Stacked queries: semicolon immediately followed by a SQL keyword',\n pattern: /;\\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\\b/i,\n },\n {\n id: 'sql-hex-encoding',\n description: 'Hex-encoded string injection: 0x41414141 style (MySQL)',\n pattern: /\\b0x[0-9a-f]{4,}/i,\n },\n];\n\n// SQL-STRICT = all base SQL rules + the three noisy extras\nconst SQL_STRICT_PATTERNS = [...SQL_PATTERNS, ...SQL_STRICT_EXTRA];\n\nexport default SQL_STRICT_PATTERNS;\n", "/**\n * SHELL context patterns.\n *\n * Detects shell injection vectors and path traversal patterns.\n * Designed for use when a string will be passed to a shell command,\n * used as a file path, or interpolated into OS-level operations.\n */\n\nconst SHELL_PATTERNS = [\n {\n id: 'shell-path-traversal-unix',\n description: 'Unix path traversal: ../ \u2014 climbing the directory tree',\n pattern: /\\.\\.\\//,\n },\n {\n id: 'shell-path-traversal-windows',\n description: 'Windows path traversal: ..\\\\ \u2014 climbing the directory tree',\n pattern: /\\.\\.\\\\/,\n },\n {\n id: 'shell-path-traversal-encoded',\n description: 'URL-encoded path traversal: %2e%2e or %2f variants',\n pattern: /%2e%2e|%2f\\.\\.|\\.\\.%2f/i,\n },\n {\n id: 'shell-null-byte',\n description: 'Null byte injection: \\\\x00 or %00 \u2014 truncates strings in C-backed functions',\n pattern: /\\x00|%00/,\n },\n {\n id: 'shell-semicolon',\n description: 'Semicolon command separator: cmd1; cmd2',\n pattern: /;/,\n },\n {\n id: 'shell-pipe',\n description: 'Pipe operator: cmd1 | cmd2',\n pattern: /\\|/,\n },\n {\n id: 'shell-and-operator',\n description: 'AND operator: cmd1 && cmd2',\n pattern: /&&/,\n },\n {\n id: 'shell-or-operator',\n description: 'OR operator: cmd1 || cmd2',\n pattern: /\\|\\|/,\n },\n {\n id: 'shell-backtick',\n description: 'Backtick command substitution: `cmd`',\n pattern: /`/,\n },\n {\n id: 'shell-dollar-paren',\n description: 'Dollar-paren command substitution: $(cmd)',\n pattern: /\\$\\(/,\n },\n {\n id: 'shell-dollar-brace',\n description: 'Dollar-brace variable expansion: ${var} \u2014 can be abused for injection',\n pattern: /\\$\\{/,\n },\n {\n id: 'shell-redirect-out',\n description: 'Output redirection: cmd > file or cmd >> file',\n pattern: />{1,2}/,\n },\n {\n id: 'shell-redirect-in',\n description: 'Input redirection: cmd < file',\n pattern: /</,\n },\n {\n id: 'shell-newline-injection',\n description: 'Newline injection: \\\\n or \\\\r \u2014 can inject new shell commands',\n pattern: /[\\n\\r]/,\n },\n {\n id: 'shell-glob-star',\n description: 'Glob expansion: * or ? \u2014 can expand to unintended files',\n // Only flag when combined with path separators to reduce false positives\n pattern: /[/\\\\][*?]/,\n },\n {\n id: 'shell-absolute-root',\n description: 'Absolute root path injection: string starting with / or \\\\ (Windows UNC)',\n pattern: /^(?:\\/|\\\\\\\\)/,\n },\n {\n id: 'shell-windows-drive',\n description: 'Windows drive letter path injection: C:\\\\ or D:/',\n pattern: /^[a-zA-Z]:[/\\\\]/,\n },\n {\n id: 'shell-curl-wget',\n description: 'curl/wget with URL or flags \u2014 can exfiltrate data or download payloads',\n // Require a URL scheme (http/https/ftp) or a flag (-) to reduce false positives\n // \"curl is a tool\" won't match; \"curl http://...\" or \"curl -s ...\" will\n pattern: /\\b(?:curl|wget)\\s+(?:https?:\\/\\/|ftp:\\/\\/|-)/i,\n },\n];\n\nexport default SHELL_PATTERNS;\n", "/**\n * REDOS context patterns.\n *\n * Detects strings that, if used as regular expressions, could cause\n * catastrophic backtracking (ReDoS \u2014 Regular Expression Denial of Service).\n *\n * These patterns detect the structural forms that lead to exponential or\n * polynomial backtracking in NFA-based regex engines (V8, PCRE, Java, etc.).\n *\n * Use this context when user-supplied strings will be compiled into RegExp objects.\n */\n\nconst REDOS_PATTERNS = [\n {\n id: 'redos-nested-quantifier-plus',\n description: 'Nested + quantifier inside a group with outer quantifier: (a+)+, (.+b)*, etc.',\n // Matches any group containing a + quantifier, with an outer * or + \u2014 catches (a+)+, (.+b)*, etc.\n pattern: /\\([^)]*\\+[^)]*\\)[+*]/,\n },\n {\n id: 'redos-nested-quantifier-star',\n description: 'Nested * quantifier: (a*)* or (a*)+ \u2014 catastrophic backtracking',\n pattern: /\\([^)]*\\*[^)]*\\)[*+]/,\n },\n {\n id: 'redos-nested-groups',\n description: 'Doubly nested quantified groups: ((a+)+) \u2014 guaranteed catastrophic',\n pattern: /\\(\\([^)]{0,40}\\)[+*]\\)[+*]/,\n },\n {\n id: 'redos-alternation-overlap',\n description: 'Overlapping alternation under quantifier: (a|a)+ \u2014 ambiguous NFA paths',\n // Detect repeated identical alternatives under a quantifier\n pattern: /\\(([^|()]{1,20})\\|(?:\\1)(?:\\|[^|()]{1,20}){0,5}\\)[+*?]{1,2}/,\n },\n {\n id: 'redos-star-plus-concat',\n description: '(x*x)+ pattern \u2014 triggers super-linear backtracking',\n pattern: /\\([^)]{0,10}\\*[^)]{0,10}\\)[+*]/,\n },\n {\n id: 'redos-dot-star-greedy',\n description: '(.*){n,} or (.+){n,} \u2014 repeated greedy dot quantifiers',\n pattern: /\\(\\.[*+]\\)\\{?\\d/,\n },\n {\n id: 'redos-large-repetition',\n description: 'Very large fixed or range repetition count {1000,} or {1000,n} \u2014 denial of service via backtracking',\n // Matches { followed by 4+ digits (\u22651000), then optional ,digits }\n pattern: /\\{\\d{4,}(?:,\\d*)?\\}/,\n },\n {\n id: 'redos-catastrophic-alternation',\n description: 'Long alternation with many similar branches \u2014 polynomial backtracking risk',\n // Heuristic: 10+ pipe-separated alternatives in a single group\n pattern: /\\([^)]{0,200}(?:\\|[^|)]{0,50}){9,}\\)/,\n },\n];\n\nexport default REDOS_PATTERNS;\n", "/**\n * NOSQL context patterns.\n *\n * Detects injection vectors specific to NoSQL databases (primarily MongoDB)\n * and JavaScript-evaluated queries.\n *\n * Attack categories:\n * 1. MongoDB query operator injection: $where, $ne, $gt, $regex, $or, $and, etc.\n * These operators, when injected into a JSON query object, can bypass\n * authentication or exfiltrate data without knowing passwords.\n *\n * 2. JavaScript execution: $where clauses execute arbitrary JS server-side.\n *\n * 3. Prototype pollution: __proto__, constructor.prototype \u2014 can corrupt\n * the prototype chain of all objects in the Node.js process.\n *\n * Pattern note: MongoDB operators appear as JSON keys. In JSON, keys are\n * quoted: {\"$where\": ...} so the pattern must allow an optional closing\n * quote between the operator name and the colon: /\\$where[\"'\\s]*:/\n */\n\n// Shared suffix: optional closing quote/whitespace before the colon\n// Handles: $op: (bare), \"$op\": (JSON), '$op': (single-quoted)\nconst SEP = /[\"'\\s]*:/;\nconst sep = '[\"\\'\\\\s]*:';\n\nconst NOSQL_PATTERNS = [\n // \u2500\u2500\u2500 MongoDB $ operator injection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'nosql-where-operator',\n description: '$where \u2014 executes arbitrary JavaScript server-side in MongoDB',\n pattern: new RegExp(`\\\\$where${sep}`, 'i'),\n },\n {\n id: 'nosql-ne-operator',\n description: '$ne \u2014 \"not equal\" operator used to bypass equality checks',\n pattern: new RegExp(`\\\\$ne${sep}`, 'i'),\n },\n {\n id: 'nosql-gt-operator',\n description: '$gt \u2014 \"greater than\" used to bypass password/value checks',\n pattern: new RegExp(`\\\\$gte?${sep}`, 'i'),\n },\n {\n id: 'nosql-lt-operator',\n description: '$lt / $lte \u2014 \"less than\" bypass variants',\n pattern: new RegExp(`\\\\$lte?${sep}`, 'i'),\n },\n {\n id: 'nosql-regex-operator',\n description: '$regex \u2014 can be used to extract data character by character (blind injection)',\n pattern: new RegExp(`\\\\$regex${sep}`, 'i'),\n },\n {\n id: 'nosql-or-operator',\n description: '$or \u2014 logical OR; used to create always-true conditions',\n pattern: new RegExp(`\\\\$or${sep}\\\\s*\\\\[`, 'i'),\n },\n {\n id: 'nosql-and-operator',\n description: '$and \u2014 logical AND operator injection',\n pattern: new RegExp(`\\\\$and${sep}\\\\s*\\\\[`, 'i'),\n },\n {\n id: 'nosql-nor-operator',\n description: '$nor \u2014 logical NOR operator injection',\n pattern: new RegExp(`\\\\$nor${sep}\\\\s*\\\\[`, 'i'),\n },\n {\n id: 'nosql-exists-operator',\n description: '$exists \u2014 can enumerate fields to determine schema',\n pattern: new RegExp(`\\\\$exists${sep}`, 'i'),\n },\n {\n id: 'nosql-in-operator',\n description: '$in \u2014 matches any value in a list; can enumerate values',\n pattern: new RegExp(`\\\\$in${sep}\\\\s*\\\\[`, 'i'),\n },\n {\n id: 'nosql-expr-operator',\n description: '$expr \u2014 allows aggregation expressions in queries (MongoDB 3.6+)',\n pattern: new RegExp(`\\\\$expr${sep}`, 'i'),\n },\n {\n id: 'nosql-function-operator',\n description: '$function \u2014 executes arbitrary JavaScript in MongoDB 4.4+',\n pattern: new RegExp(`\\\\$function${sep}`, 'i'),\n },\n {\n id: 'nosql-accumulator-operator',\n description: '$accumulator \u2014 custom aggregation with arbitrary JS execution',\n pattern: new RegExp(`\\\\$accumulator${sep}`, 'i'),\n },\n // \u2500\u2500\u2500 Prototype pollution \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'nosql-proto-pollution',\n description: '__proto__ \u2014 prototype pollution via object key injection',\n pattern: /__proto__/,\n },\n {\n id: 'nosql-constructor-prototype',\n description: 'constructor.prototype \u2014 alternative prototype pollution vector (dot notation or JSON key)',\n // Matches dot-notation (obj.constructor.prototype) and JSON key adjacency\n // (\"constructor\": {\"prototype\": ...})\n pattern: /constructor[\\s\"':.,{\\[]*prototype/i,\n },\n {\n id: 'nosql-proto-bracket',\n description: '[\"__proto__\"] \u2014 bracket-notation prototype pollution',\n pattern: /\\[[\"']__proto__[\"']\\]/,\n },\n];\n\nexport default NOSQL_PATTERNS;\n", "/**\n * LOG context patterns.\n *\n * Detects injection vectors that are dangerous when a string is written\n * to a log file, passed to a logging framework, or interpolated into\n * a log message that will be parsed or displayed.\n *\n * Attack categories:\n * 1. CRLF injection \u2014 injects fake log lines by embedding newlines\n * 2. Log4Shell (CVE-2021-44228) \u2014 ${jndi:...} triggers JNDI lookup in Log4j\n * 3. SSTI in log templates \u2014 {{...}}, #{...} trigger template evaluation\n * if the log message is passed through a template engine\n * 4. Null byte injection \u2014 truncates log entries in some implementations\n * 5. ANSI escape injection \u2014 manipulates terminal output when logs are\n * tailed in a terminal (colour codes, cursor movement, etc.)\n *\n * Note: Newline characters (\\n, \\r) will produce false positives for\n * multi-line legitimate values. Use this context only for single-line\n * log field values (usernames, IDs, request parameters, etc.).\n */\n\nconst LOG_PATTERNS = [\n // \u2500\u2500\u2500 CRLF / newline injection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'log-crlf-injection',\n description: 'CRLF injection: literal \\\\r or \\\\n embeds fake log lines',\n pattern: /[\\r\\n]/,\n },\n {\n id: 'log-url-encoded-crlf',\n description: 'URL-encoded CRLF: %0d, %0a, %0D, %0A \u2014 decoded by some log parsers',\n pattern: /%0[dDaA]/,\n },\n {\n id: 'log-unicode-newline',\n description: 'Unicode newline variants: U+2028 (line separator), U+2029 (paragraph separator)',\n pattern: /[\\u2028\\u2029]/,\n },\n\n // \u2500\u2500\u2500 Log4Shell / JNDI injection (CVE-2021-44228) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'log-log4shell-jndi',\n description: 'Log4Shell: ${jndi:...} triggers remote code execution in Apache Log4j',\n pattern: /\\$\\{jndi\\s*:/i,\n },\n {\n id: 'log-log4shell-obfuscated',\n description: 'Obfuscated Log4Shell: ${::-j}... lookup-bypass prefix used to evade WAF detection',\n // ${::- is the Log4j lookup-bypass escape sequence; presence alone is suspicious\n pattern: /\\$\\{::-/,\n },\n {\n id: 'log-log4j-lookup',\n description: 'Log4j lookup syntax: ${env:...}, ${sys:...}, ${ctx:...} \u2014 data exfiltration',\n pattern: /\\$\\{(?:env|sys|ctx|main|map|sd|web|docker|k8s|spring)\\s*:/i,\n },\n\n // \u2500\u2500\u2500 Server-Side Template Injection (SSTI) in log messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'log-ssti-double-brace',\n description: 'SSTI double-brace: {{expression}} \u2014 Jinja2, Twig, Handlebars, etc.',\n pattern: /\\{\\{[\\s\\S]{0,80}\\}\\}/,\n },\n {\n id: 'log-ssti-hash-brace',\n description: 'SSTI hash-brace: #{expression} \u2014 Thymeleaf, Velocity, Ruby ERB',\n pattern: /#\\{[\\s\\S]{0,80}\\}/,\n },\n {\n id: 'log-ssti-dollar-brace',\n description: 'SSTI/EL injection: ${expression with operators or method calls} \u2014 JSP EL, Freemarker, SpEL',\n // Require that the ${...} content looks like an expression, not a plain variable name.\n // Flags if the content contains: . ( * + operators, or known SSTI keywords.\n // This avoids flagging ${PATH}, ${HOME} etc. (plain shell variables).\n pattern: /\\$\\{[^}]*(?:\\.|\\(|\\*|\\+|\\bclass\\b|\\bruntime\\b|\\bprocess\\b|\\bexec\\b)[^}]{0,80}\\}/i,\n },\n {\n id: 'log-ssti-percent-tag',\n description: 'SSTI ERB/ASP tag: <%= expression %> \u2014 Ruby ERB, ASP',\n pattern: /<%=[\\s\\S]{0,80}%>/,\n },\n\n // \u2500\u2500\u2500 Null byte \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'log-null-byte',\n description: 'Null byte: \\\\x00 or %00 \u2014 can truncate log entries in C-backed loggers',\n pattern: /\\x00|%00/,\n },\n\n // \u2500\u2500\u2500 ANSI escape injection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n {\n id: 'log-ansi-escape',\n description: 'ANSI escape sequence: ESC[ \u2014 can manipulate terminal output when logs are tailed',\n pattern: /\\x1b\\[/,\n },\n];\n\nexport default LOG_PATTERNS;\n", "/**\n * Context registry \u2014 maps context name strings to their pattern arrays.\n *\n * Adding a new context: create a file in ./contexts/, export a default array\n * of pattern objects, and register it here.\n *\n * Context name guide:\n * SQL \u2014 high-precision rules; safe for general text fields\n * SQL-STRICT \u2014 SQL + three noisier rules (line comments, stacked queries, hex);\n * use only for SQL-specific inputs\n * REDOS \u2014 detects ReDoS-prone patterns when string will be compiled as RegExp\n */\n\nimport HTML_PATTERNS from './contexts/html.js';\nimport XML_PATTERNS from './contexts/xml.js';\nimport SVG_PATTERNS from './contexts/svg.js';\nimport SQL_PATTERNS from './contexts/sql.js';\nimport SQL_STRICT_PATTERNS from './contexts/sql-strict.js';\nimport SHELL_PATTERNS from './contexts/shell.js';\nimport REDOS_PATTERNS from './contexts/redos.js';\nimport NOSQL_PATTERNS from './contexts/nosql.js';\nimport LOG_PATTERNS from './contexts/log.js';\n\n/** @type {Record<string, Array<{id: string, description: string, pattern: RegExp}>>} */\nconst CONTEXT_REGISTRY = {\n HTML: HTML_PATTERNS,\n XML: XML_PATTERNS,\n SVG: SVG_PATTERNS,\n SQL: SQL_PATTERNS,\n 'SQL-STRICT': SQL_STRICT_PATTERNS,\n SHELL: SHELL_PATTERNS,\n REDOS: REDOS_PATTERNS,\n NOSQL: NOSQL_PATTERNS,\n LOG: LOG_PATTERNS,\n};\n\nexport default CONTEXT_REGISTRY;\n\n/**\n * Enum of valid context names \u2014 e.g. `VALID_CONTEXTS.HTML === 'HTML'`.\n * @type {Record<string, string>}\n */\nexport const VALID_CONTEXTS = Object.freeze(\n Object.fromEntries(Object.keys(CONTEXT_REGISTRY).map((k) => [k, k]))\n);", "/**\n * is-unsafe\n *\n * Zero-dependency, DOM-free, pure predicate for detecting unsafe strings\n * across HTML, XML, SVG, SQL, SQL-STRICT, SHELL, REDOS, NOSQL, and LOG contexts.\n *\n * @module is-unsafe\n */\n\nimport CONTEXT_REGISTRY, { VALID_CONTEXTS } from './registry.js';\n\n/**\n * @typedef {'HTML'|'XML'|'SVG'|'SQL'|'SQL-STRICT'|'SHELL'|'REDOS'|'NOSQL'|'LOG'} ContextName\n */\n\n/**\n * @typedef {Object} MatchResult\n * @property {string} context - The context in which the match was found\n * @property {string} id - Rule identifier\n * @property {string} description - Human-readable description of what was matched\n * @property {RegExp} pattern - The pattern that matched\n */\n\n// \u2500\u2500\u2500 Validation helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Validate that `value` is a string. Throws TypeError if not.\n * @param {unknown} value\n */\nfunction assertString(value) {\n if (typeof value !== 'string') {\n throw new TypeError(\n `is-unsafe: first argument must be a string, got ${typeof value}`\n );\n }\n}\n\n/**\n * Validate that `context` is a recognised context name, an array of them,\n * or a RegExp instance. Throws TypeError if not.\n * @param {ContextName|ContextName[]|RegExp} context\n */\nfunction assertContext(context) {\n if (context instanceof RegExp) return;\n\n if (typeof context === 'string') {\n if (!CONTEXT_REGISTRY[context]) {\n throw new TypeError(\n `is-unsafe: unknown context \"${context}\". Valid contexts: ${Object.keys(VALID_CONTEXTS).join(', ')}`\n );\n }\n return;\n }\n\n if (Array.isArray(context)) {\n if (context.length === 0) {\n throw new TypeError('is-unsafe: context array must not be empty');\n }\n for (const c of context) {\n if (typeof c !== 'string' || !CONTEXT_REGISTRY[c]) {\n throw new TypeError(\n `is-unsafe: unknown context \"${c}\" in array. Valid contexts: ${Object.keys(VALID_CONTEXTS).join(', ')}`\n );\n }\n }\n return;\n }\n\n throw new TypeError(\n `is-unsafe: second argument must be a context string, array of context strings, or RegExp. Got: ${typeof context}`\n );\n}\n\n// \u2500\u2500\u2500 Core matching logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Test a single value against one named context's patterns.\n * Returns the first matching MatchResult, or null if nothing matched.\n *\n * @param {string} value\n * @param {string} contextName\n * @returns {MatchResult|null}\n */\nfunction matchContext(value, contextName) {\n const patterns = CONTEXT_REGISTRY[contextName];\n for (const rule of patterns) {\n if (rule.pattern.test(value)) {\n return { context: contextName, id: rule.id, description: rule.description, pattern: rule.pattern };\n }\n }\n return null;\n}\n\n// \u2500\u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Returns `true` if `value` is unsafe in the given context(s), `false` otherwise.\n *\n * @param {string} value - The string to test\n * @param {ContextName|ContextName[]|RegExp} context\n * - A named context ('HTML', 'XML', 'SVG', 'SQL', 'SQL-STRICT', 'SHELL', 'REDOS', 'NOSQL', 'LOG')\n * - An array of named contexts \u2014 returns true if unsafe in **any** of them\n * - A custom RegExp \u2014 returns true if the pattern matches\n * @returns {boolean}\n *\n * @example\n * isUnsafe('<script>alert(1)</script>', 'HTML') // true\n * isUnsafe('hello world', 'HTML') // false\n * isUnsafe('value', ['HTML', 'SQL']) // false\n * isUnsafe('value', /my-pattern/i) // false\n */\nfunction isUnsafe(value, context) {\n assertString(value);\n assertContext(context);\n\n // Custom RegExp \u2014 caller-supplied pattern\n if (context instanceof RegExp) {\n return context.test(value);\n }\n\n // Single named context\n if (typeof context === 'string') {\n return matchContext(value, context) !== null;\n }\n\n // Array of named contexts \u2014 unsafe if ANY context matches\n for (const c of context) {\n if (matchContext(value, c) !== null) return true;\n }\n return false;\n}\n\n/**\n * Like `isUnsafe`, but instead of a boolean returns the first `MatchResult`\n * describing **why** the value was flagged, or `null` if it is safe.\n *\n * Useful for logging, error messages, or policy reporting.\n *\n * @param {string} value\n * @param {ContextName|ContextName[]|RegExp} context\n * @returns {MatchResult|null}\n *\n * @example\n * whyUnsafe('<script>alert(1)</script>', 'HTML')\n * // { context: 'HTML', id: 'html-script-open', description: '...', pattern: /.../ }\n */\nfunction whyUnsafe(value, context) {\n assertString(value);\n assertContext(context);\n\n if (context instanceof RegExp) {\n return context.test(value)\n ? { context: 'CUSTOM', id: 'custom-regex', description: 'Matched caller-supplied pattern', pattern: context }\n : null;\n }\n\n if (typeof context === 'string') {\n return matchContext(value, context);\n }\n\n for (const c of context) {\n const result = matchContext(value, c);\n if (result !== null) return result;\n }\n return null;\n}\n\n/**\n * Returns all matching rules across the given context(s), or an empty array\n * if the value is safe. Useful for comprehensive auditing.\n *\n * @param {string} value\n * @param {ContextName|ContextName[]|RegExp} context\n * @returns {MatchResult[]}\n */\nfunction allUnsafe(value, context) {\n assertString(value);\n assertContext(context);\n\n const results = [];\n\n if (context instanceof RegExp) {\n if (context.test(value)) {\n results.push({ context: 'CUSTOM', id: 'custom-regex', description: 'Matched caller-supplied pattern', pattern: context });\n }\n return results;\n }\n\n const contexts = typeof context === 'string' ? [context] : context;\n\n for (const c of contexts) {\n const patterns = CONTEXT_REGISTRY[c];\n for (const rule of patterns) {\n if (rule.pattern.test(value)) {\n results.push({ context: c, id: rule.id, description: rule.description, pattern: rule.pattern });\n }\n }\n }\n\n return results;\n}\n\nexport { isUnsafe, whyUnsafe, allUnsafe, VALID_CONTEXTS };\nexport default isUnsafe;", "'use strict';\n///@ts-check\n\nimport { getAllMatches, isExist, DANGEROUS_PROPERTY_NAMES, criticalProperties } from '../util.js';\nimport xmlNode from './xmlNode.js';\nimport DocTypeReader from './DocTypeReader.js';\nimport toNumber from \"strnum\";\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\nimport { Expression, Matcher } from 'path-expression-matcher';\nimport { ExpressionSet } from 'path-expression-matcher';\nimport { EntityDecoder, XML, CURRENCY, COMMON_HTML, ENTITY_ACTION } from '@nodable/entities';\nimport { isUnsafe, VALID_CONTEXTS } from \"is-unsafe\"\n\n\n// const regx =\n// '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n// .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n// Helper functions for attribute and namespace handling\n\n/**\n * Extract raw attributes (without prefix) from prefixed attribute map\n * @param {object} prefixedAttrs - Attributes with prefix from buildAttributesMap\n * @param {object} options - Parser options containing attributeNamePrefix\n * @returns {object} Raw attributes for matcher\n */\nfunction extractRawAttributes(prefixedAttrs, options) {\n if (!prefixedAttrs) return {};\n\n // Handle attributesGroupName option\n const attrs = options.attributesGroupName\n ? prefixedAttrs[options.attributesGroupName]\n : prefixedAttrs;\n\n if (!attrs) return {};\n\n const rawAttrs = {};\n for (const key in attrs) {\n // Remove the attribute prefix to get raw name\n if (key.startsWith(options.attributeNamePrefix)) {\n const rawName = key.substring(options.attributeNamePrefix.length);\n rawAttrs[rawName] = attrs[key];\n } else {\n // Attribute without prefix (shouldn't normally happen, but be safe)\n rawAttrs[key] = attrs[key];\n }\n }\n return rawAttrs;\n}\n\n/**\n * Extract namespace from raw tag name\n * @param {string} rawTagName - Tag name possibly with namespace (e.g., \"soap:Envelope\")\n * @returns {string|undefined} Namespace or undefined\n */\nfunction extractNamespace(rawTagName) {\n if (!rawTagName || typeof rawTagName !== 'string') return undefined;\n\n const colonIndex = rawTagName.indexOf(':');\n if (colonIndex !== -1 && colonIndex > 0) {\n const ns = rawTagName.substring(0, colonIndex);\n // Don't treat xmlns as a namespace\n if (ns !== 'xmlns') {\n return ns;\n }\n }\n return undefined;\n}\n\nexport default class OrderedObjParser {\n constructor(options, externalEntities) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n this.entityExpansionCount = 0;\n this.currentExpandedLength = 0;\n let namedEntities = { ...XML };\n if (this.options.entityDecoder) {\n this.entityDecoder = this.options.entityDecoder\n } else {\n if (typeof this.options.htmlEntities === \"object\") namedEntities = this.options.htmlEntities;\n else if (this.options.htmlEntities === true) namedEntities = { ...COMMON_HTML, ...CURRENCY };\n this.entityDecoder = new EntityDecoder({\n namedEntities: { ...namedEntities, ...externalEntities },\n numericAllowed: this.options.htmlEntities,\n limit: {\n maxTotalExpansions: this.options.processEntities.maxTotalExpansions,\n maxExpandedLength: this.options.processEntities.maxExpandedLength,\n applyLimitsTo: this.options.processEntities.appliesTo,\n },\n // onExternalEntity: (name, value) => isUnsafe(value) ? 'block' : 'allow',\n onInputEntity: (name, value) =>\n //TODO: VALID_CONTEXTS.HTML should be set only if this.options.htmlEntities\n isUnsafe(value, [VALID_CONTEXTS.HTML, VALID_CONTEXTS.XML])\n ? ENTITY_ACTION.BLOCK : ENTITY_ACTION.ALLOW,\n\n //postCheck: resolved => resolved\n });\n }\n\n // Initialize path matcher for path-expression-matcher\n this.matcher = new Matcher();\n this.readonlyMatcher = this.matcher.readOnly();\n\n // Flag to track if current node is a stop node (optimization)\n this.isCurrentNodeStopNode = false;\n\n // Pre-compile stopNodes expressions\n this.stopNodeExpressionsSet = new ExpressionSet();\n const stopNodesOpts = this.options.stopNodes;\n if (stopNodesOpts && stopNodesOpts.length > 0) {\n for (let i = 0; i < stopNodesOpts.length; i++) {\n const stopNodeExp = stopNodesOpts[i];\n if (typeof stopNodeExp === 'string') {\n // Convert string to Expression object\n this.stopNodeExpressionsSet.add(new Expression(stopNodeExp));\n } else if (stopNodeExp instanceof Expression) {\n // Already an Expression object\n this.stopNodeExpressionsSet.add(stopNodeExp);\n }\n }\n this.stopNodeExpressionsSet.seal();\n }\n }\n\n}\n\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string|Matcher} jPath - jPath string or Matcher instance based on options.jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n const options = this.options;\n if (val !== undefined) {\n if (options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if (val.length > 0) {\n if (!escapeEntities) val = this.replaceEntitiesValue(val, tagName, jPath);\n\n // Pass jPath string or matcher based on options.jPath setting\n const jPathOrMatcher = options.jPath ? jPath.toString() : jPath;\n const newval = options.tagValueProcessor(tagName, val, jPathOrMatcher, hasAttributes, isLeafNode);\n if (newval === null || newval === undefined) {\n //don't parse\n return val;\n } else if (typeof newval !== typeof val || newval !== val) {\n //overwrite\n return newval;\n } else if (options.trimValues) {\n return parseValue(val, options.parseTagValue, options.numberParseOptions);\n } else {\n const trimmedVal = val.trim();\n if (trimmedVal === val) {\n return parseValue(val, options.parseTagValue, options.numberParseOptions);\n } else {\n return val;\n }\n }\n }\n }\n}\n\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath, tagName, force = false) {\n const options = this.options;\n if (force === true || (options.ignoreAttributes !== true && typeof attrStr === 'string')) {\n // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n\n // Pre-process values once: trim + entity replacement\n // Reused in both matcher update and second pass\n const processedVals = new Array(len);\n let hasRawAttrs = false;\n const rawAttrsForMatcher = {};\n\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n const oldVal = matches[i][4];\n\n if (attrName.length && oldVal !== undefined) {\n let val = oldVal;\n if (options.trimValues) val = val.trim();\n val = this.replaceEntitiesValue(val, tagName, this.readonlyMatcher);\n processedVals[i] = val;\n\n rawAttrsForMatcher[attrName] = val;\n hasRawAttrs = true;\n }\n }\n\n // Update matcher ONCE before second pass, if applicable\n if (hasRawAttrs && typeof jPath === 'object' && jPath.updateCurrent) {\n jPath.updateCurrent(rawAttrsForMatcher);\n }\n\n // Hoist toString() once \u2014 path doesn't change during attribute processing\n const jPathStr = options.jPath ? jPath.toString() : this.readonlyMatcher;\n\n // Second pass: apply processors, build final attrs\n let hasAttrs = false;\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n\n if (this.ignoreAttributesFn(attrName, jPathStr)) continue;\n\n let aName = options.attributeNamePrefix + attrName;\n\n if (attrName.length) {\n if (options.transformAttributeName) {\n aName = options.transformAttributeName(aName);\n }\n aName = sanitizeName(aName, options);\n\n if (matches[i][4] !== undefined) {\n // Reuse already-processed value \u2014 no double entity replacement\n const oldVal = processedVals[i];\n\n const newVal = options.attributeValueProcessor(attrName, oldVal, jPathStr);\n if (newVal === null || newVal === undefined) {\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n attrs[aName] = newVal;\n } else {\n attrs[aName] = parseValue(oldVal, options.parseAttributeValue, options.numberParseOptions);\n }\n hasAttrs = true;\n } else if (options.allowBooleanAttributes) {\n attrs[aName] = true;\n hasAttrs = true;\n }\n }\n }\n\n if (!hasAttrs) return;\n\n if (options.attributesGroupName && !options.preserveOrder) {\n const attrCollection = {};\n attrCollection[options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nconst parseXml = function (xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n\n // Reset matcher for new document\n this.matcher.reset();\n this.entityDecoder.reset();\n\n // Reset entity expansion counters for this document\n this.entityExpansionCount = 0;\n this.currentExpandedLength = 0;\n const options = this.options;\n const docTypeReader = new DocTypeReader(options.processEntities);\n const xmlLen = xmlData.length;\n for (let i = 0; i < xmlLen; i++) {//for each char in XML data\n const ch = xmlData[i];\n if (ch === '<') {\n // const nextIndex = i+1;\n // const _2ndChar = xmlData[nextIndex];\n const c1 = xmlData.charCodeAt(i + 1);\n if (c1 === 47) {//Closing Tag '/'\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n\n if (options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n\n tagName = transformTagName(options.transformTagName, tagName, \"\", options).tagName;\n\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);\n }\n\n //check if last tag of nested tag was unpaired tag\n const lastTagName = this.matcher.getCurrentTag();\n if (tagName && options.unpairedTagsSet.has(tagName)) {\n throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n }\n if (lastTagName && options.unpairedTagsSet.has(lastTagName)) {\n // Pop the unpaired tag\n this.matcher.pop();\n this.tagsNodeStack.pop();\n }\n // Pop the closing tag\n this.matcher.pop();\n this.isCurrentNodeStopNode = false; // Reset flag when closing tag\n\n currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n textData = \"\";\n i = closeIndex;\n } else if (c1 === 63) { //'?'\n\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);\n const attsMap = this.buildAttributesMap(tagData.tagExp, this.matcher, tagData.tagName, true);\n if (attsMap) {\n const ver = attsMap[this.options.attributeNamePrefix + \"version\"];\n this.entityDecoder.setXmlVersion(Number(ver) || 1.0);\n docTypeReader.setXmlVersion(Number(ver) || 1.0);\n }\n if ((options.ignoreDeclaration && tagData.tagName === \"?xml\") || options.ignorePiTags) {\n //do nothing\n } else {\n\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(options.textNodeName, \"\");\n\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent && options.ignoreAttributes !== true) {\n childNode[\":@\"] = attsMap\n }\n this.addChild(currentNode, childNode, this.readonlyMatcher, i);\n }\n\n\n i = tagData.closeIndex + 1;\n } else if (c1 === 33\n && xmlData.charCodeAt(i + 2) === 45\n && xmlData.charCodeAt(i + 3) === 45) { //'!--'\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\")\n if (options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n\n textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);\n\n currentNode.add(options.commentPropName, [{ [options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (c1 === 33\n && xmlData.charCodeAt(i + 2) === 68) { //'!D'\n const result = docTypeReader.readDocType(xmlData, i);\n this.entityDecoder.addInputEntities(result.entities);\n i = result.i;\n } else if (c1 === 33\n && xmlData.charCodeAt(i + 2) === 91) { // '!['\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n\n textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher);\n\n let val = this.parseTextData(tagExp, currentNode.tagname, this.readonlyMatcher, true, false, true, true);\n if (val == undefined) val = \"\";\n\n //cdata should be set even if it is 0 length string\n if (options.cdataPropName) {\n currentNode.add(options.cdataPropName, [{ [options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(options.textNodeName, val);\n }\n\n i = closeIndex + 2;\n } else {//Opening tag\n let result = readTagExp(xmlData, i, options.removeNSPrefix);\n\n // Safety check: readTagExp can return undefined\n if (!result) {\n // Log context for debugging\n const context = xmlData.substring(Math.max(0, i - 50), Math.min(xmlLen, i + 50));\n throw new Error(`readTagExp returned undefined at position ${i}. Context: \"${context}\"`);\n }\n\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n ({ tagName, tagExp } = transformTagName(options.transformTagName, tagName, tagExp, options));\n\n if (options.strictReservedNames &&\n (tagName === options.commentPropName\n || tagName === options.cdataPropName\n || tagName === options.textNodeName\n || tagName === options.attributesGroupName\n )) {\n throw new Error(`Invalid tag name: ${tagName}`);\n }\n\n //save text as child node\n if (currentNode && textData) {\n if (currentNode.tagname !== '!xml') {\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, this.readonlyMatcher, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if (lastTag && options.unpairedTagsSet.has(lastTag.tagname)) {\n currentNode = this.tagsNodeStack.pop();\n this.matcher.pop();\n }\n\n // Clean up self-closing syntax BEFORE processing attributes\n // This is where tagExp gets the trailing / removed\n let isSelfClosing = false;\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n isSelfClosing = true;\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n\n // Re-check attrExpPresent after cleaning\n attrExpPresent = (tagName !== tagExp);\n }\n\n // Now process attributes with CLEAN tagExp (no trailing /)\n let prefixedAttrs = null;\n let rawAttrs = {};\n let namespace = undefined;\n\n // Extract namespace from rawTagName\n namespace = extractNamespace(rawTagName);\n\n // Push tag to matcher FIRST (with empty attrs for now) so callbacks see correct path\n if (tagName !== xmlObj.tagname) {\n this.matcher.push(tagName, {}, namespace);\n }\n\n // Now build attributes - callbacks will see correct matcher state\n if (tagName !== tagExp && attrExpPresent) {\n // Build attributes (returns prefixed attributes for the tree)\n // Note: buildAttributesMap now internally updates the matcher with raw attributes\n prefixedAttrs = this.buildAttributesMap(tagExp, this.matcher, tagName);\n\n if (prefixedAttrs) {\n // Extract raw attributes (without prefix) for our use\n //TODO: seems a performance overhead\n rawAttrs = extractRawAttributes(prefixedAttrs, options);\n }\n }\n\n // Now check if this is a stop node (after attributes are set)\n if (tagName !== xmlObj.tagname) {\n this.isCurrentNodeStopNode = this.isItStopNode();\n }\n\n const startIndex = i;\n if (this.isCurrentNodeStopNode) {\n let tagContent = \"\";\n\n // For self-closing tags, content is empty\n if (isSelfClosing) {\n i = result.closeIndex;\n }\n //unpaired tag\n else if (options.unpairedTagsSet.has(tagName)) {\n i = result.closeIndex;\n }\n //normal tag\n else {\n //read until closing tag is found\n const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n\n if (prefixedAttrs) {\n childNode[\":@\"] = prefixedAttrs;\n }\n\n // For stop nodes, store raw content as-is without any processing\n childNode.add(options.textNodeName, tagContent);\n\n this.matcher.pop(); // Pop the stop node tag\n this.isCurrentNodeStopNode = false; // Reset flag\n\n this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex);\n } else {\n //selfClosing tag\n if (isSelfClosing) {\n ({ tagName, tagExp } = transformTagName(options.transformTagName, tagName, tagExp, options));\n\n const childNode = new xmlNode(tagName);\n if (prefixedAttrs) {\n childNode[\":@\"] = prefixedAttrs;\n }\n this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex);\n this.matcher.pop(); // Pop self-closing tag\n this.isCurrentNodeStopNode = false; // Reset flag\n }\n else if (options.unpairedTagsSet.has(tagName)) {//unpaired tag\n const childNode = new xmlNode(tagName);\n if (prefixedAttrs) {\n childNode[\":@\"] = prefixedAttrs;\n }\n this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex);\n this.matcher.pop(); // Pop unpaired tag\n this.isCurrentNodeStopNode = false; // Reset flag\n i = result.closeIndex;\n // Continue to next iteration without changing currentNode\n continue;\n }\n //opening tag\n else {\n const childNode = new xmlNode(tagName);\n if (this.tagsNodeStack.length > options.maxNestedTags) {\n throw new Error(\"Maximum nested tags exceeded\");\n }\n this.tagsNodeStack.push(currentNode);\n\n if (prefixedAttrs) {\n childNode[\":@\"] = prefixedAttrs;\n }\n this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n}\n\nfunction addChild(currentNode, childNode, matcher, startIndex) {\n // unset startIndex if not requested\n if (!this.options.captureMetaData) startIndex = undefined;\n\n // Pass jPath string or matcher based on options.jPath setting\n const jPathOrMatcher = this.options.jPath ? matcher.toString() : matcher;\n const result = this.options.updateTag(childNode.tagname, jPathOrMatcher, childNode[\":@\"])\n if (result === false) {\n //do nothing\n } else if (typeof result === \"string\") {\n childNode.tagname = result\n currentNode.addChild(childNode, startIndex);\n } else {\n currentNode.addChild(childNode, startIndex);\n }\n}\n\n/**\n * @param {object} val - Entity object with regex and val properties\n * @param {string} tagName - Tag name\n * @param {string|Matcher} jPath - jPath string or Matcher instance based on options.jPath\n */\nfunction replaceEntitiesValue(val, tagName, jPath) {\n const entityConfig = this.options.processEntities;\n\n if (!entityConfig || !entityConfig.enabled) {\n return val;\n }\n\n // Check if tag is allowed to contain entities\n if (entityConfig.allowedTags) {\n const jPathOrMatcher = this.options.jPath ? jPath.toString() : jPath;\n const allowed = Array.isArray(entityConfig.allowedTags)\n ? entityConfig.allowedTags.includes(tagName)\n : entityConfig.allowedTags(tagName, jPathOrMatcher);\n\n if (!allowed) {\n return val;\n }\n }\n\n // Apply custom tag filter if provided\n if (entityConfig.tagFilter) {\n const jPathOrMatcher = this.options.jPath ? jPath.toString() : jPath;\n if (!entityConfig.tagFilter(tagName, jPathOrMatcher)) {\n return val; // Skip based on custom filter\n }\n }\n\n return this.entityDecoder.decode(val);\n}\n\n\nfunction saveTextToParentTag(textData, parentNode, matcher, isLeafNode) {\n if (textData) { //store previously collected data as textNode\n if (isLeafNode === undefined) isLeafNode = parentNode.child.length === 0\n\n textData = this.parseTextData(textData,\n parentNode.tagname,\n matcher,\n false,\n parentNode[\":@\"] ? Object.keys(parentNode[\":@\"]).length !== 0 : false,\n isLeafNode);\n\n if (textData !== undefined && textData !== \"\")\n parentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\n\n/**\n * @param {Array<Expression>} stopNodeExpressions - Array of compiled Expression objects\n * @param {Matcher} matcher - Current path matcher\n */\nfunction isItStopNode() {\n if (this.stopNodeExpressionsSet.size === 0) return false;\n\n return this.matcher.matchesAny(this.stopNodeExpressionsSet);\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n //TODO: ignore boolean attributes in tag expression\n //TODO: if ignore attributes, dont read full attribute expression but the end. But read for xml declaration\n let attrBoundary = 0;\n const len = xmlData.length;\n const closeCode0 = closingChar.charCodeAt(0);\n const closeCode1 = closingChar.length > 1 ? closingChar.charCodeAt(1) : -1;\n\n let result = '';\n let segmentStart = i;\n\n for (let index = i; index < len; index++) {\n const code = xmlData.charCodeAt(index);\n\n if (attrBoundary) {\n if (code === attrBoundary) attrBoundary = 0;\n } else if (code === 34 || code === 39) { // \" or '\n attrBoundary = code;\n } else if (code === closeCode0) {\n if (closeCode1 !== -1) {\n if (xmlData.charCodeAt(index + 1) === closeCode1) {\n result += xmlData.substring(segmentStart, index);\n return { data: result, index };\n }\n } else {\n result += xmlData.substring(segmentStart, index);\n return { data: result, index };\n }\n } else if (code === 9 && !attrBoundary) { // \\t - only replace with space outside attribute values\n // Flush accumulated segment, add space, start new segment\n result += xmlData.substring(segmentStart, index) + ' ';\n segmentStart = index + 1;\n }\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg)\n } else {\n return closingIndex + str.length - 1;\n }\n}\n\nfunction findClosingChar(xmlData, char, i, errMsg) {\n const closingIndex = xmlData.indexOf(char, i);\n if (closingIndex === -1) throw new Error(errMsg);\n return closingIndex; // no offset needed\n}\n\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {//separate tag name and attributes expression\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n const xmllen = xmlData.length;\n for (; i < xmllen; i++) {\n if (xmlData[i] === \"<\") {\n const c1 = xmlData.charCodeAt(i + 1);\n if (c1 === 47) {//close tag '/'\n const closeIndex = findClosingChar(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n }\n }\n }\n i = closeIndex;\n } else if (c1 === 63) { //?\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\")\n i = closeIndex;\n } else if (c1 === 33\n && xmlData.charCodeAt(i + 2) === 45\n && xmlData.charCodeAt(i + 3) === 45) { // '!--'\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\")\n i = closeIndex;\n } else if (c1 === 33\n && xmlData.charCodeAt(i + 2) === 91) { // '!['\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, false)\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if (newval === 'true') return true;\n else if (newval === 'false') return false;\n else return toNumber(val, options);\n } else {\n if (isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\nfunction fromCodePoint(str, base, prefix) {\n const codePoint = Number.parseInt(str, base);\n\n if (codePoint >= 0 && codePoint <= 0x10FFFF) {\n return String.fromCodePoint(codePoint);\n } else {\n return prefix + str + \";\";\n }\n}\n\nfunction transformTagName(fn, tagName, tagExp, options) {\n if (fn) {\n const newTagName = fn(tagName);\n if (tagExp === tagName) {\n tagExp = newTagName\n }\n tagName = newTagName;\n }\n tagName = sanitizeName(tagName, options);\n return { tagName, tagExp };\n}\n\n\n\nfunction sanitizeName(name, options) {\n if (criticalProperties.includes(name)) {\n throw new Error(`[SECURITY] Invalid name: \"${name}\" is a reserved JavaScript keyword that could cause prototype pollution`);\n } else if (DANGEROUS_PROPERTY_NAMES.includes(name)) {\n return options.onDangerousProperty(name);\n }\n return name;\n}", "'use strict';\n\nimport XmlNode from './xmlNode.js';\nimport { Matcher } from 'path-expression-matcher';\n\nconst METADATA_SYMBOL = XmlNode.getMetaDataSymbol();\n\n/**\n * Helper function to strip attribute prefix from attribute map\n * @param {object} attrs - Attributes with prefix (e.g., {\"@_class\": \"code\"})\n * @param {string} prefix - Attribute prefix to remove (e.g., \"@_\")\n * @returns {object} Attributes without prefix (e.g., {\"class\": \"code\"})\n */\nfunction stripAttributePrefix(attrs, prefix) {\n if (!attrs || typeof attrs !== 'object') return {};\n if (!prefix) return attrs;\n\n const rawAttrs = {};\n for (const key in attrs) {\n if (key.startsWith(prefix)) {\n const rawName = key.substring(prefix.length);\n rawAttrs[rawName] = attrs[key];\n } else {\n // Attribute without prefix (shouldn't normally happen, but be safe)\n rawAttrs[key] = attrs[key];\n }\n }\n return rawAttrs;\n}\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @param {Matcher} matcher - Path matcher instance\n * @returns \n */\nexport default function prettify(node, options, matcher, readonlyMatcher) {\n return compress(node, options, matcher, readonlyMatcher);\n}\n\n/**\n * @param {array} arr \n * @param {object} options \n * @param {Matcher} matcher - Path matcher instance\n * @returns object\n */\nfunction compress(arr, options, matcher, readonlyMatcher) {\n let text;\n const compressedObj = {}; //This is intended to be a plain object\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n\n // Push current property to matcher WITH RAW ATTRIBUTES (no prefix)\n if (property !== undefined && property !== options.textNodeName) {\n const rawAttrs = stripAttributePrefix(\n tagObj[\":@\"] || {},\n options.attributeNamePrefix\n );\n matcher.push(property, rawAttrs);\n }\n\n if (property === options.textNodeName) {\n if (text === undefined) text = tagObj[property];\n else text += \"\" + tagObj[property];\n } else if (property === undefined) {\n continue;\n } else if (tagObj[property]) {\n\n let val = compress(tagObj[property], options, matcher, readonlyMatcher);\n const isLeaf = isLeafTag(val, options);\n\n if (Object.keys(val).length === 0 && options.alwaysCreateTextNode) {\n val[options.textNodeName] = \"\";\n }\n\n if (tagObj[\":@\"]) {\n assignAttributes(val, tagObj[\":@\"], readonlyMatcher, options);\n } else if (Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode) {\n val = val[options.textNodeName];\n } else if (Object.keys(val).length === 0) {\n if (options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\n }\n\n if (tagObj[METADATA_SYMBOL] !== undefined && typeof val === \"object\" && val !== null) {\n val[METADATA_SYMBOL] = tagObj[METADATA_SYMBOL]; // copy over metadata\n }\n\n\n if (compressedObj[property] !== undefined && Object.prototype.hasOwnProperty.call(compressedObj, property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val);\n } else {\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n\n // Pass jPath string or readonlyMatcher based on options.jPath setting\n const jPathOrMatcher = options.jPath ? readonlyMatcher.toString() : readonlyMatcher;\n if (options.isArray(property, jPathOrMatcher, isLeaf)) {\n compressedObj[property] = [val];\n } else {\n compressedObj[property] = val;\n }\n }\n\n // Pop property from matcher after processing\n if (property !== undefined && property !== options.textNodeName) {\n matcher.pop();\n }\n }\n\n }\n // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n if (typeof text === \"string\") {\n if (text.length > 0) compressedObj[options.textNodeName] = text;\n } else if (text !== undefined) compressedObj[options.textNodeName] = text;\n\n\n return compressedObj;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \":@\") return key;\n }\n}\n\nfunction assignAttributes(obj, attrMap, readonlyMatcher, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i]; // This is the PREFIXED name (e.g., \"@_class\")\n\n // Strip prefix for matcher path (for isArray callback)\n const rawAttrName = atrrName.startsWith(options.attributeNamePrefix)\n ? atrrName.substring(options.attributeNamePrefix.length)\n : atrrName;\n\n // For attributes, we need to create a temporary path\n // Pass jPath string or matcher based on options.jPath setting\n const jPathOrMatcher = options.jPath\n ? readonlyMatcher.toString() + \".\" + rawAttrName\n : readonlyMatcher;\n\n if (options.isArray(atrrName, jPathOrMatcher, true, true)) {\n obj[atrrName] = [attrMap[atrrName]];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\n\nfunction isLeafTag(obj, options) {\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n\n if (propCount === 0) {\n return true;\n }\n\n if (\n propCount === 1 &&\n (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n ) {\n return true;\n }\n\n return false;\n}", "import { buildOptions } from './OptionsBuilder.js';\nimport OrderedObjParser from './OrderedObjParser.js';\nimport prettify from './node2json.js';\nimport { validate } from \"../validator.js\";\nimport XmlNode from './xmlNode.js';\n\nexport default class XMLParser {\n\n constructor(options) {\n this.externalEntities = {};\n this.options = buildOptions(options);\n\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Uint8Array} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData, validationOption) {\n if (typeof xmlData !== \"string\" && xmlData.toString) {\n xmlData = xmlData.toString();\n } else if (typeof xmlData !== \"string\") {\n throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n }\n\n if (validationOption) {\n if (validationOption === true) validationOption = {}; //validate with default options\n\n const result = validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`)\n }\n }\n const orderedObjParser = new OrderedObjParser(this.options, this.externalEntities);\n // orderedObjParser.entityDecoder.setExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if (this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n else return prettify(orderedResult, this.options, orderedObjParser.matcher, orderedObjParser.readonlyMatcher);\n }\n\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value) {\n if (value.indexOf(\"&\") !== -1) {\n throw new Error(\"Entity value can't have '&'\")\n } else if (key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1) {\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\")\n } else if (value === \"&\") {\n throw new Error(\"An entity with value '&' is not permitted\");\n } else {\n this.externalEntities[key] = value;\n }\n }\n\n /**\n * Returns a Symbol that can be used to access the metadata\n * property on a node.\n * \n * If Symbol is not available in the environment, an ordinary property is used\n * and the name of the property is here returned.\n * \n * The XMLMetaData property is only present when `captureMetaData`\n * is true in the options.\n */\n static getMetaDataSymbol() {\n return XmlNode.getMetaDataSymbol();\n }\n}", "import { XMLParser } from \"fast-xml-parser\";\r\nimport JSZip from \"jszip\";\r\nimport type {\r\n HwpxDocumentInfo,\r\n HwpxFileMap,\r\n HwpxMetadata,\r\n HwpxPackageSummary,\r\n HwpxReaderApi as HwpxReaderInterface,\r\n HwpxTextExtractOptions,\r\n HwpxHtmlOptions,\r\n} from \"./types.js\";\r\nimport { HwpxEncryptedDocumentError, HwpxNotLoadedError, InvalidHwpxFormatError } from \"./errors.js\";\r\n\r\nconst DECODER_UTF8 = new TextDecoder(\"utf-8\");\r\nconst DECODER_UTF16LE = new TextDecoder(\"utf-16le\");\r\nconst DECODER_UTF16BE = new TextDecoder(\"utf-16be\");\r\n\r\nfunction detectTextEncoding(bytes: Uint8Array): \"utf-8\" | \"utf-16le\" | \"utf-16be\" {\r\n if (bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) return \"utf-8\";\r\n if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xfe) return \"utf-16le\";\r\n if (bytes.length >= 2 && bytes[0] === 0xfe && bytes[1] === 0xff) return \"utf-16be\";\r\n // Heuristic: many zeros on odd/even positions \u2192 UTF-16\r\n let zeroEven = 0, zeroOdd = 0, sample = Math.min(bytes.length, 1024);\r\n for (let i = 0; i < sample; i++) {\r\n if (bytes[i] === 0) (i % 2 === 0 ? zeroEven++ : zeroOdd++);\r\n }\r\n if (zeroOdd > zeroEven * 2) return \"utf-16le\"; // LE: xx 00 xx 00\r\n if (zeroEven > zeroOdd * 2) return \"utf-16be\"; // BE: 00 xx 00 xx\r\n return \"utf-8\";\r\n}\r\n\r\nfunction decodeBytesSmart(bytes: Uint8Array): string {\r\n const enc = detectTextEncoding(bytes);\r\n // Strip BOM\r\n if (enc === \"utf-8\" && bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {\r\n return DECODER_UTF8.decode(bytes.subarray(3));\r\n }\r\n if (enc === \"utf-16le\" && bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xfe) {\r\n return DECODER_UTF16LE.decode(bytes.subarray(2));\r\n }\r\n if (enc === \"utf-16be\" && bytes.length >= 2 && bytes[0] === 0xfe && bytes[1] === 0xff) {\r\n return DECODER_UTF16BE.decode(bytes.subarray(2));\r\n }\r\n if (enc === \"utf-8\") return DECODER_UTF8.decode(bytes);\r\n if (enc === \"utf-16le\") return DECODER_UTF16LE.decode(bytes);\r\n return DECODER_UTF16BE.decode(bytes);\r\n}\r\n\r\nfunction getOrEmpty<T>(value: T | undefined): T | undefined {\r\n return value ?? undefined;\r\n}\r\n\r\n/**\r\n * fast-xml-parser \uC758 \uD14D\uC2A4\uD2B8 \uB178\uB4DC\uB294 string \uC678\uC5D0\uB3C4 number/boolean \uB610\uB294 \uAC1D\uCCB4({#text})/\uBC30\uC5F4 \uD615\uD0DC\uB85C\r\n * \uB4F1\uC7A5\uD560 \uC218 \uC788\uB2E4. \uBAA8\uB4E0 \uCF00\uC774\uC2A4\uB97C \uBB38\uC790\uC5F4\uB85C \uC815\uADDC\uD654\uD558\uC5EC pieces \uC5D0 \uCD94\uAC00\uD55C\uB2E4.\r\n */\r\nfunction escapeMd(text: string): string {\r\n return text\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/([*_`~])/g, \"\\\\$1\")\r\n .replace(/^([#>])/gm, \"\\\\$1\");\r\n}\r\n\r\nfunction pushTextNode(t: any, pieces: string[]): void {\r\n if (t === undefined || t === null) return;\r\n if (typeof t === \"string\") {\r\n pieces.push(t);\r\n return;\r\n }\r\n if (typeof t === \"number\" || typeof t === \"boolean\") {\r\n pieces.push(String(t));\r\n return;\r\n }\r\n if (Array.isArray(t)) {\r\n for (const item of t) pushTextNode(item, pieces);\r\n return;\r\n }\r\n if (typeof t === \"object\") {\r\n const inner = t[\"#text\"];\r\n if (inner !== undefined) pushTextNode(inner, pieces);\r\n }\r\n}\r\n\r\nexport class HwpxReader implements HwpxReaderInterface {\r\n private zip: JSZip | null = null;\r\n private files: HwpxFileMap = {};\r\n private encryptedCache: boolean | null = null;\r\n private characterProperties: Map<string, any> = new Map();\r\n private fontFaces: Map<string, any> = new Map();\r\n\r\n async loadFromArrayBuffer(buffer: ArrayBuffer): Promise<void> {\r\n const zip = await JSZip.loadAsync(buffer);\r\n this.zip = zip;\r\n this.files = {};\r\n\r\n const entries = Object.keys(zip.files);\r\n await Promise.all(\r\n entries.map(async (name) => {\r\n const file = zip.file(name);\r\n if (!file) return;\r\n // store raw bytes for flexible processing (images, xml, etc.)\r\n this.files[name] = new Uint8Array(await file.async(\"uint8array\"));\r\n })\r\n );\r\n\r\n // Validate mimetype (per spec: application/owpml). \uB2E4\uC591\uD55C \uBCC0\uD615\uC744 \uC218\uC6A9\uD558\uACE0, \uBD88\uC77C\uCE58 \uC2DC\uC5D0\uB3C4 \uC9C4\uD589.\r\n const mime = this.getTextFile(\"mimetype\")?.trim();\r\n if (mime && !this.isLikelyHwpxMime(mime)) {\r\n // \uC5C4\uACA9 \uCC28\uB2E8 \uB300\uC2E0 \uACBD\uACE0\uC131 \uC5D0\uB7EC\uB85C \uC720\uC9C0\uD558\uB824\uBA74 throw\uB97C \uD53C\uD55C\uB2E4.\r\n // throw new InvalidHwpxFormatError();\r\n }\r\n\r\n // Try to locate content via META-INF/container.xml if present (not mandatory but helpful)\r\n const containerXml = this.getTextFile(\"META-INF/container.xml\");\r\n if (containerXml) {\r\n const cx = this.parseXml<any>(containerXml);\r\n // not strictly necessary now; reserved for future rootfile discovery\r\n void cx;\r\n }\r\n\r\n // Parse styles from header.xml\r\n this.parseStyleDefinitions();\r\n }\r\n\r\n private isLikelyHwpxMime(m: string): boolean {\r\n const s = m.toLowerCase();\r\n // \uD5C8\uC6A9: application/hwp+zip(\uD55C\uCEF4 \uD45C\uC900), application/owpml, hwpx/owpml/hwp+zip \uD3EC\uD568 \uCF00\uC774\uC2A4\r\n return (\r\n s === \"application/hwp+zip\" ||\r\n s === \"application/owpml\" ||\r\n s.includes(\"hwp+zip\") ||\r\n s.includes(\"owpml\") ||\r\n s.includes(\"hwpx\")\r\n );\r\n }\r\n\r\n private getTextFile(path: string): string | null {\r\n const bytes = this.files[path];\r\n if (!bytes) return null;\r\n return decodeBytesSmart(bytes);\r\n }\r\n\r\n private findFilePathIgnoreCase(targetPath: string): string | null {\r\n const lower = targetPath.toLowerCase();\r\n for (const key of Object.keys(this.files)) {\r\n if (key.toLowerCase() === lower) return key;\r\n }\r\n return null;\r\n }\r\n\r\n private parseXml<T = any>(xml: string): T | null {\r\n try {\r\n const parser = new XMLParser({\r\n ignoreAttributes: false,\r\n attributeNamePrefix: \"@\",\r\n // \uD14D\uC2A4\uD2B8 \uB0B4\uBD80 \uACF5\uBC31 \uBCF4\uC874 \u2014 `<hp:t>\uC774\uAC83\uC740 </hp:t>` \uAC19\uC740 run \uC0AC\uC774 \uACF5\uBC31\uC774 \uC0AC\uB77C\uC9C0\uC9C0 \uC54A\uB3C4\uB85D\r\n trimValues: false,\r\n removeNSPrefix: true,\r\n // \uD14D\uC2A4\uD2B8 \uB178\uB4DC \uC790\uB3D9 \uD0C0\uC785 \uBCC0\uD658 \uB044\uAE30 \u2014 \"1\", \"true\" \uB4F1\uC774 number/boolean \uC73C\uB85C \uBCC0\uD658\uB418\uB294 \uAC83\uC744 \uBC29\uC9C0\r\n parseTagValue: false,\r\n parseAttributeValue: false,\r\n });\r\n const obj = parser.parse(xml);\r\n return obj as T;\r\n } catch (_err) {\r\n return null;\r\n }\r\n }\r\n\r\n private summarizePackage(): HwpxPackageSummary {\r\n const hasEncryptionInfo = this.detectEncryption();\r\n const contentsFiles = Object.keys(this.files).filter((p) => p.startsWith(\"Contents/\")).sort();\r\n const contentHpf = this.getTextFile(\"Contents/content.hpf\");\r\n let manifest; \r\n let spine;\r\n if (contentHpf) {\r\n const xml = this.parseXml<any>(contentHpf);\r\n const pkg = xml?.package ?? xml?.opf?.package;\r\n const man = pkg?.manifest?.item;\r\n if (man) {\r\n const items = Array.isArray(man) ? man : [man];\r\n manifest = items.map((it: any) => ({\r\n id: it?.[\"@id\"],\r\n href: it?.[\"@href\"],\r\n mediaType: it?.[\"@media-type\"] ?? it?.[\"@mediaType\"],\r\n }));\r\n }\r\n const sp = pkg?.spine?.itemref ?? pkg?.spine?.itemRef;\r\n if (sp) {\r\n const refs = Array.isArray(sp) ? sp : [sp];\r\n spine = refs.map((r: any) => r?.[\"@idref\"] ?? r?.[\"@idRef\"]).filter(Boolean);\r\n }\r\n }\r\n return { hasEncryptionInfo, contentsFiles, manifest, spine };\r\n }\r\n\r\n private getSectionPathsBySpine(): string[] | null {\r\n const contentHpf = this.getTextFile(\"Contents/content.hpf\");\r\n if (!contentHpf) return null;\r\n const xml = this.parseXml<any>(contentHpf);\r\n const pkg = xml?.package ?? xml?.opf?.package;\r\n const man = pkg?.manifest?.item;\r\n const map = new Map<string, string>(); // id -> href\r\n if (man) {\r\n const items = Array.isArray(man) ? man : [man];\r\n for (const it of items) {\r\n const id = it?.[\"@id\"]; const href = it?.[\"@href\"];\r\n if (id && href && /Contents\\/section\\d+\\.xml$/i.test(href)) map.set(id, href);\r\n }\r\n }\r\n const sp = pkg?.spine?.itemref ?? pkg?.spine?.itemRef;\r\n const refs = sp ? (Array.isArray(sp) ? sp : [sp]) : [];\r\n const paths: string[] = [];\r\n for (const r of refs) {\r\n const id = r?.[\"@idref\"] ?? r?.[\"@idRef\"];\r\n const href = id ? map.get(id) : undefined;\r\n if (href && this.files[href]) paths.push(href);\r\n }\r\n return paths.length ? paths : null;\r\n }\r\n\r\n private detectEncryption(): boolean {\r\n if (this.encryptedCache !== null) return this.encryptedCache;\r\n const manifestXml = this.getTextFile(\"META-INF/manifest.xml\");\r\n if (!manifestXml) {\r\n this.encryptedCache = false;\r\n return false;\r\n }\r\n const obj = this.parseXml<any>(manifestXml);\r\n const has = this.containsEncryptionMarker(obj);\r\n this.encryptedCache = !!has;\r\n return this.encryptedCache;\r\n }\r\n\r\n private containsEncryptionMarker(node: any): boolean {\r\n if (!node) return false;\r\n if (typeof node === \"string\") {\r\n return /encrypt|cipher/i.test(node);\r\n }\r\n if (Array.isArray(node)) {\r\n for (const item of node) {\r\n if (this.containsEncryptionMarker(item)) return true;\r\n }\r\n return false;\r\n }\r\n if (typeof node === \"object\") {\r\n for (const [k, v] of Object.entries(node)) {\r\n if (/encrypt|cipher/i.test(k)) return true;\r\n if (typeof v === \"string\" && /encrypt|cipher/i.test(v)) return true;\r\n if (this.containsEncryptionMarker(v)) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private readMetadata(): HwpxMetadata {\r\n const contentHpf = this.getTextFile(\"Contents/content.hpf\");\r\n const metadata: HwpxMetadata = {};\r\n if (contentHpf) {\r\n const xml = this.parseXml<any>(contentHpf);\r\n // OPF-like: package > metadata\r\n const md = xml?.package?.metadata;\r\n if (md) {\r\n metadata.title = getOrEmpty<string>(md[\"dc:title\"] ?? md.title);\r\n metadata.creator = getOrEmpty<string>(md[\"dc:creator\"] ?? md.creator);\r\n metadata.created = getOrEmpty<string>(md[\"dcterms:created\"] ?? md.created);\r\n metadata.modified = getOrEmpty<string>(md[\"dcterms:modified\"] ?? md.modified);\r\n }\r\n }\r\n\r\n const versionXml = this.getTextFile(\"version.xml\");\r\n if (versionXml) {\r\n const v = this.parseXml<any>(versionXml);\r\n const ver = v?.Version?.OWPMLVersion ?? v?.version?.owpmlVersion;\r\n if (typeof ver === \"string\") {\r\n metadata.version = ver;\r\n }\r\n }\r\n const settingsXml = this.getTextFile(\"settings.xml\");\r\n if (settingsXml) {\r\n const s = this.parseXml<any>(settingsXml);\r\n // \uD45C\uC900 \uC608\uC2DC: ha:HWPApplicationSetting > ha:CaretPosition(listIDRef, paraIDRef, pos)\r\n const app = s?.HWPApplicationSetting ?? s?.Settings ?? s?.settings;\r\n const caret = app?.CaretPosition ?? app?.caretPosition;\r\n if (caret && (caret[\"@listIDRef\"] || caret[\"@paraIDRef\"] || caret[\"@pos\"])) {\r\n const listId = caret[\"@listIDRef\"] ?? \"0\";\r\n const paraId = caret[\"@paraIDRef\"] ?? \"0\";\r\n const pos = caret[\"@pos\"] ?? \"0\";\r\n metadata.caretPosition = `${listId}:${paraId}:${pos}`;\r\n }\r\n }\r\n return metadata;\r\n }\r\n\r\n async getDocumentInfo(): Promise<HwpxDocumentInfo> {\r\n if (!this.zip) throw new HwpxNotLoadedError();\r\n const summary = this.summarizePackage();\r\n const metadata = this.readMetadata();\r\n return { metadata, summary };\r\n }\r\n\r\n async extractText(options?: HwpxTextExtractOptions): Promise<string> {\r\n if (!this.zip) throw new HwpxNotLoadedError();\r\n const summary = this.summarizePackage();\r\n if (summary.hasEncryptionInfo) {\r\n throw new HwpxEncryptedDocumentError();\r\n }\r\n // HWPX \uBCF8\uBB38: Contents/section*.xml \uC5D0\uC11C hp:t \uD14D\uC2A4\uD2B8\uB97C \uCD94\uCD9C\r\n const joiner = options?.joinParagraphs ?? \"\\n\";\r\n let sectionPaths = this.getSectionPathsBySpine() ?? Object.keys(this.files)\r\n .filter((p) => /^contents\\/section\\d+\\.xml$/.test(p.toLowerCase()))\r\n .sort((a, b) => {\r\n const na = Number(a.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n const nb = Number(b.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n return na - nb;\r\n });\r\n\r\n // Fallback: \uD0D0\uC0C9\uC5D0 \uC2E4\uD328\uD558\uBA74 Contents/*.xml \uC911 \uB8E8\uD2B8\uAC00 section \uC778 \uD30C\uC77C\uC744 \uC218\uC0C9\r\n if (sectionPaths.length === 0) {\r\n const candidates = Object.keys(this.files).filter((p) => p.startsWith(\"Contents/\") && p.toLowerCase().endsWith(\".xml\"));\r\n for (const p of candidates) {\r\n const xmlText = this.getTextFile(p);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n if (xml && (xml.sec || xml.section || xml[\"hp:section\"])) {\r\n sectionPaths.push(p);\r\n }\r\n }\r\n sectionPaths.sort((a, b) => {\r\n const na = Number(a.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n const nb = Number(b.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n return na - nb;\r\n });\r\n }\r\n\r\n const paragraphs: string[] = [];\r\n\r\n for (const path of sectionPaths) {\r\n const xmlText = this.getTextFile(path);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n // \uAD6C\uC870 \uCC38\uACE0: sec > p* > run* > t, \uB124\uC784\uC2A4\uD398\uC774\uC2A4 \uC81C\uAC70\uB428\r\n const section = xml?.sec ?? xml?.section ?? xml?.[\"hp:section\"];\r\n if (!section) {\r\n const segs: string[] = [];\r\n this.collectAllText(xml, segs);\r\n if (segs.length) paragraphs.push(segs.join(\"\"));\r\n continue;\r\n }\r\n const ps = section?.p ?? section?.[\"hp:p\"];\r\n if (!ps) {\r\n const segs: string[] = [];\r\n this.collectAllText(section, segs);\r\n if (segs.length) paragraphs.push(segs.join(\"\"));\r\n continue;\r\n }\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n for (const p of paras) {\r\n paragraphs.push(this.extractParagraphText(p));\r\n }\r\n }\r\n\r\n const combined = paragraphs.join(joiner);\r\n if (combined.trim().length > 0) return combined;\r\n // Fallback: Preview text\r\n const prvPath =\r\n this.findFilePathIgnoreCase(\"Preview/PrvText.txt\") ||\r\n this.findFilePathIgnoreCase(\"preview/prvtext.txt\");\r\n if (prvPath) {\r\n const prv = this.getTextFile(prvPath);\r\n if (prv && prv.trim().length > 0) return prv;\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * \uD55C \uBB38\uB2E8(<hp:p>)\uC5D0\uC11C \uD14D\uC2A4\uD2B8\uB97C \uCD94\uCD9C. \uD45C/\uC774\uBBF8\uC9C0 \uB4F1 \uC778\uB77C\uC778 \uCEE8\uD2B8\uB864\uC774 \uC788\uC73C\uBA74 \uC140/\uB0B4\uBD80 \uBB38\uB2E8\uC744 \uC7AC\uADC0 \uD0D0\uC0C9.\r\n *\r\n * \uD45C\uB294 \uC140 \uB2E8\uC704\uB85C \uD14D\uC2A4\uD2B8\uB97C \uBAA8\uC740 \uD6C4 \uAC19\uC740 \uD589 \uB0B4 \uC140\uC740 \uACF5\uBC31\uC73C\uB85C, \uD589 \uC0AC\uC774\uB294 \uC904\uBC14\uAFC8\uC73C\uB85C \uACB0\uD569\uD55C\uB2E4.\r\n */\r\n private extractParagraphText(p: any): string {\r\n const runs = p?.run ?? p?.[\"hp:run\"];\r\n if (!runs) return \"\";\r\n const runArr = Array.isArray(runs) ? runs : [runs];\r\n const pieces: string[] = [];\r\n for (const run of runArr) {\r\n // \uC139\uC158/\uCEEC\uB7FC \uC124\uC815 \uAC19\uC740 \uBA54\uD0C0 \uCEE8\uD2B8\uB864\uC740 \uD14D\uC2A4\uD2B8 \uC5C6\uC74C \u2014 secPr/ctrl \uC548\uC5D0 \uB4E0 \uC790\uC2DD\uAE4C\uC9C0 \uBB34\uC2DC\r\n if (run?.secPr || run?.ctrl) continue;\r\n\r\n // \uC9C1\uC811 \uD14D\uC2A4\uD2B8\r\n const t = run?.t ?? run?.[\"hp:t\"];\r\n pushTextNode(t, pieces);\r\n\r\n // \uD45C\r\n const tbl = run?.tbl ?? run?.[\"hp:tbl\"];\r\n if (tbl) {\r\n const tbls = Array.isArray(tbl) ? tbl : [tbl];\r\n for (const tb of tbls) {\r\n pieces.push(this.extractTableText(tb));\r\n }\r\n }\r\n }\r\n return pieces.join(\"\");\r\n }\r\n\r\n private extractTableText(tbl: any): string {\r\n const trs = tbl?.tr ?? tbl?.[\"hp:tr\"];\r\n if (!trs) return \"\";\r\n const trArr = Array.isArray(trs) ? trs : [trs];\r\n const rowTexts: string[] = [];\r\n for (const tr of trArr) {\r\n const tcs = tr?.tc ?? tr?.[\"hp:tc\"];\r\n if (!tcs) continue;\r\n const tcArr = Array.isArray(tcs) ? tcs : [tcs];\r\n const cellTexts: string[] = [];\r\n for (const tc of tcArr) {\r\n cellTexts.push(this.extractCellText(tc));\r\n }\r\n rowTexts.push(cellTexts.join(\" \"));\r\n }\r\n return rowTexts.join(\"\\n\");\r\n }\r\n\r\n private extractCellText(tc: any): string {\r\n const sub = tc?.subList ?? tc?.[\"hp:subList\"];\r\n if (!sub) return \"\";\r\n const ps = sub?.p ?? sub?.[\"hp:p\"];\r\n if (!ps) return \"\";\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n return paras.map((q: any) => this.extractParagraphText(q)).join(\"\\n\");\r\n }\r\n\r\n /**\r\n * \uBB38\uC11C \uC804\uCCB4\uB97C Markdown \uC73C\uB85C \uBCC0\uD658.\r\n * \uD45C\uB294 \uB9C8\uD06C\uB2E4\uC6B4 \uD45C (\uC140 \uBCD1\uD569\uC740 \uD3C9\uD0C4\uD654), \uC774\uBBF8\uC9C0\uB294 ``.\r\n */\r\n async extractMarkdown(options?: { embedImages?: boolean; imageSrcResolver?: (binPath: string) => string }): Promise<string> {\r\n if (!this.zip) throw new HwpxNotLoadedError();\r\n const summary = this.summarizePackage();\r\n if (summary.hasEncryptionInfo) {\r\n throw new HwpxEncryptedDocumentError();\r\n }\r\n let sectionPaths = this.getSectionPathsBySpine() ?? Object.keys(this.files)\r\n .filter((p) => /^contents\\/section\\d+\\.xml$/.test(p.toLowerCase()))\r\n .sort();\r\n if (sectionPaths.length === 0) {\r\n const candidates = Object.keys(this.files).filter((p) => p.startsWith(\"Contents/\") && p.toLowerCase().endsWith(\".xml\"));\r\n for (const p of candidates) {\r\n const xmlText = this.getTextFile(p);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n if (xml && (xml.sec || xml.section || xml[\"hp:section\"])) sectionPaths.push(p);\r\n }\r\n }\r\n\r\n const blocks: string[] = [];\r\n for (const path of sectionPaths) {\r\n const xmlText = this.getTextFile(path);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n const section = xml?.sec ?? xml?.section ?? xml?.[\"hp:section\"];\r\n if (!section) continue;\r\n const ps = section?.p ?? section?.[\"hp:p\"];\r\n if (!ps) continue;\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n for (const p of paras) {\r\n const md = this.extractParagraphMarkdown(p, options);\r\n if (md.trim().length > 0) blocks.push(md);\r\n }\r\n }\r\n return blocks.join(\"\\n\\n\").trim() + \"\\n\";\r\n }\r\n\r\n private extractParagraphMarkdown(\r\n p: any,\r\n options?: { embedImages?: boolean; imageSrcResolver?: (binPath: string) => string }\r\n ): string {\r\n const runs = p?.run ?? p?.[\"hp:run\"];\r\n if (!runs) return \"\";\r\n const runArr = Array.isArray(runs) ? runs : [runs];\r\n const parts: string[] = [];\r\n\r\n let textBuf = \"\";\r\n for (const run of runArr) {\r\n if (run?.secPr || run?.ctrl) continue;\r\n\r\n // \uD14D\uC2A4\uD2B8 + charPrIDRef \u2192 \uAD75\uAC8C/\uAE30\uC6B8\uC784 \uC801\uC6A9\r\n const t = run?.t ?? run?.[\"hp:t\"];\r\n const pieces: string[] = [];\r\n pushTextNode(t, pieces);\r\n let raw = pieces.join(\"\");\r\n if (raw.length > 0) {\r\n const charPrId = run?.[\"@charPrIDRef\"];\r\n if (charPrId !== undefined && this.characterProperties.has(String(charPrId))) {\r\n const cs = this.characterProperties.get(String(charPrId));\r\n let s = escapeMd(raw);\r\n if (cs?.bold) s = `**${s}**`;\r\n if (cs?.italic) s = `*${s}*`;\r\n textBuf += s;\r\n } else {\r\n textBuf += escapeMd(raw);\r\n }\r\n }\r\n\r\n // \uD45C\r\n const tbl = run?.tbl ?? run?.[\"hp:tbl\"];\r\n if (tbl) {\r\n if (textBuf) {\r\n parts.push(textBuf);\r\n textBuf = \"\";\r\n }\r\n const tbls = Array.isArray(tbl) ? tbl : [tbl];\r\n for (const tb of tbls) parts.push(this.extractTableMarkdown(tb, options));\r\n }\r\n\r\n // \uADF8\uB9BC\r\n const pic = run?.pic ?? run?.[\"hp:pic\"];\r\n if (pic) {\r\n if (textBuf) {\r\n parts.push(textBuf);\r\n textBuf = \"\";\r\n }\r\n const href = pic?.[\"@href\"];\r\n const img = pic?.img ?? pic?.[\"hc:img\"];\r\n const ref = img?.[\"@binaryItemIDRef\"];\r\n const path = typeof href === \"string\" ? href : ref ? `BinData/${ref}` : \"\";\r\n if (path) {\r\n if (options?.embedImages) {\r\n const data = this.files[path];\r\n if (data) {\r\n const ext = path.split(\".\").pop()?.toLowerCase() ?? \"\";\r\n const mime = ext === \"png\" ? \"image/png\" : ext === \"jpg\" || ext === \"jpeg\" ? \"image/jpeg\" : ext === \"gif\" ? \"image/gif\" : \"application/octet-stream\";\r\n parts.push(`})`);\r\n } else {\r\n parts.push(``);\r\n }\r\n } else if (options?.imageSrcResolver) {\r\n parts.push(`})`);\r\n } else {\r\n parts.push(``);\r\n }\r\n }\r\n }\r\n }\r\n if (textBuf) parts.push(textBuf);\r\n return parts.join(\"\\n\\n\");\r\n }\r\n\r\n private extractTableMarkdown(\r\n tbl: any,\r\n options?: { embedImages?: boolean; imageSrcResolver?: (binPath: string) => string }\r\n ): string {\r\n const trs = tbl?.tr ?? tbl?.[\"hp:tr\"];\r\n if (!trs) return \"\";\r\n const trArr = Array.isArray(trs) ? trs : [trs];\r\n\r\n // \uD589/\uC140 \uD14D\uC2A4\uD2B8 \uBAA8\uC74C (\uBCD1\uD569\uC740 \uBB34\uC2DC \u2014 \uB9C8\uD06C\uB2E4\uC6B4 \uD45C \uD55C\uACC4)\r\n const rows: string[][] = [];\r\n let maxCols = 0;\r\n for (const tr of trArr) {\r\n const tcs = tr?.tc ?? tr?.[\"hp:tc\"];\r\n if (!tcs) continue;\r\n const tcArr = Array.isArray(tcs) ? tcs : [tcs];\r\n const cellTexts: string[] = [];\r\n for (const tc of tcArr) {\r\n const sub = tc?.subList ?? tc?.[\"hp:subList\"];\r\n if (!sub) {\r\n cellTexts.push(\"\");\r\n continue;\r\n }\r\n const cps = sub?.p ?? sub?.[\"hp:p\"];\r\n if (!cps) {\r\n cellTexts.push(\"\");\r\n continue;\r\n }\r\n const cellParas = Array.isArray(cps) ? cps : [cps];\r\n const inner = cellParas\r\n .map((q: any) => this.extractParagraphMarkdown(q, options))\r\n .join(\" \")\r\n .replace(/\\n+/g, \" \")\r\n .replace(/\\|/g, \"\\\\|\");\r\n cellTexts.push(inner);\r\n }\r\n if (cellTexts.length > maxCols) maxCols = cellTexts.length;\r\n rows.push(cellTexts);\r\n }\r\n if (rows.length === 0) return \"\";\r\n // \uBAA8\uB4E0 \uD589\uC758 \uC140 \uC218\uB97C maxCols \uB85C \uD328\uB529\r\n for (const r of rows) {\r\n while (r.length < maxCols) r.push(\"\");\r\n }\r\n const fmt = (cells: string[]) => `| ${cells.map((c) => c || \" \").join(\" | \")} |`;\r\n const lines: string[] = [];\r\n lines.push(fmt(rows[0]));\r\n lines.push(fmt(new Array(maxCols).fill(\"---\")));\r\n for (let i = 1; i < rows.length; i++) lines.push(fmt(rows[i]));\r\n return lines.join(\"\\n\");\r\n }\r\n\r\n // \uC544\uC8FC \uB2E8\uC21C\uD55C \uD14D\uC2A4\uD2B8 \uD15C\uD50C\uB9BF \uCE58\uD658: {{key}} \u2192 value (\uBB38\uB2E8 \uD14D\uC2A4\uD2B8\uC5D0\uB9CC \uC801\uC6A9)\r\n applyTemplateToText(raw: string, data: Record<string, unknown>): string {\r\n return raw.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (_m, key: string) => {\r\n const value = key.split('.').reduce<any>((acc, k) => (acc && acc[k] !== undefined ? acc[k] : undefined), data);\r\n return value === undefined || value === null ? '' : String(value);\r\n });\r\n }\r\n\r\n async extractHtml(options?: HwpxHtmlOptions): Promise<string> {\r\n if (!this.zip) throw new HwpxNotLoadedError();\r\n const summary = this.summarizePackage();\r\n if (summary.hasEncryptionInfo) {\r\n throw new HwpxEncryptedDocumentError();\r\n }\r\n const paragraphTag = options?.paragraphTag ?? \"p\";\r\n const enableImages = options?.renderImages ?? true;\r\n const enableTables = options?.renderTables ?? true;\r\n const enableStyles = options?.renderStyles ?? true;\r\n let sectionPaths = this.getSectionPathsBySpine() ?? Object.keys(this.files)\r\n .filter((p) => /^contents\\/section\\d+\\.xml$/.test(p.toLowerCase()))\r\n .sort((a, b) => {\r\n const na = Number(a.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n const nb = Number(b.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n return na - nb;\r\n });\r\n\r\n if (sectionPaths.length === 0) {\r\n const candidates = Object.keys(this.files).filter((p) => p.startsWith(\"Contents/\") && p.toLowerCase().endsWith(\".xml\"));\r\n for (const p of candidates) {\r\n const xmlText = this.getTextFile(p);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n if (xml && (xml.sec || xml.section || xml[\"hp:section\"])) {\r\n sectionPaths.push(p);\r\n }\r\n }\r\n sectionPaths.sort((a, b) => {\r\n const na = Number(a.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n const nb = Number(b.match(/section(\\d+)\\.xml/)?.[1] ?? 0);\r\n return na - nb;\r\n });\r\n }\r\n\r\n const tableClass = options?.tableClassName ?? \"hwpx-table\";\r\n const pieces: string[] = [];\r\n for (const path of sectionPaths) {\r\n const xmlText = this.getTextFile(path);\r\n if (!xmlText) continue;\r\n const xml = this.parseXml<any>(xmlText);\r\n const section = xml?.sec ?? xml?.section ?? xml?.[\"hp:section\"];\r\n if (!section) continue;\r\n\r\n // paragraphs (\uD45C\uAC00 paragraph \uC548\uC758 run \uC5D0 \uD3EC\uD568\uB418\uC5B4 \uC788\uC744 \uC218 \uC788\uC73C\uBBC0\uB85C \uBD84\uB9AC \uCD94\uCD9C)\r\n const ps = section?.p ?? section?.[\"hp:p\"];\r\n if (ps) {\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n for (const p of paras) {\r\n // \uD14D\uC2A4\uD2B8\uC640 \uC774\uBBF8\uC9C0 \uB4F1 \uC778\uB77C\uC778 \uCEE8\uD150\uCE20\r\n const inner = this.renderNodeToHtml(p, { enableImages, enableStyles }, options);\r\n const alignStyle = this.getAlignStyle(p);\r\n const styleAttr = alignStyle ? ` style=\"${alignStyle}\"` : \"\";\r\n pieces.push(`<${paragraphTag}${styleAttr}>${inner}</${paragraphTag}>`);\r\n\r\n // paragraph \uB0B4 \uD45C\uB294 <p> \uD615\uC81C \uC694\uC18C\uB85C \uCD9C\uB825 (HTML \uC5D0\uC11C <p> \uC548\uC5D0 <table> \uBD88\uAC00)\r\n if (enableTables) {\r\n for (const tbl of this.collectTablesInParagraph(p)) {\r\n pieces.push(this.renderTableHtml(tbl, tableClass, options));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // section \uC9C1\uC18D tables (\uAD6C\uC2DD HWPX)\r\n const tbls = section?.tbl ?? section?.[\"hp:tbl\"];\r\n if (tbls && enableTables) {\r\n const tables = Array.isArray(tbls) ? tbls : [tbls];\r\n for (const tbl of tables) {\r\n pieces.push(this.renderTableHtml(tbl, tableClass, options));\r\n }\r\n }\r\n }\r\n\r\n let html = pieces.join(\"\");\r\n if (html.trim().length > 0) return html;\r\n // Fallback: Preview text\r\n const prvPath =\r\n this.findFilePathIgnoreCase(\"Preview/PrvText.txt\") ||\r\n this.findFilePathIgnoreCase(\"preview/prvtext.txt\");\r\n if (prvPath) {\r\n const prv = this.getTextFile(prvPath);\r\n if (prv && prv.trim().length > 0) {\r\n const escaped = this.escapeHtml(prv);\r\n html = `<p>${escaped.replace(/\\n+/g, '</p><p>')}</p>`;\r\n }\r\n }\r\n return html;\r\n }\r\n\r\n private collectTablesInParagraph(p: any): any[] {\r\n const out: any[] = [];\r\n const runs = p?.run ?? p?.[\"hp:run\"];\r\n if (!runs) return out;\r\n const runArr = Array.isArray(runs) ? runs : [runs];\r\n for (const run of runArr) {\r\n if (run?.secPr || run?.ctrl) continue;\r\n const tbl = run?.tbl ?? run?.[\"hp:tbl\"];\r\n if (!tbl) continue;\r\n if (Array.isArray(tbl)) out.push(...tbl);\r\n else out.push(tbl);\r\n }\r\n return out;\r\n }\r\n\r\n private renderTableHtml(tbl: any, tableClass: string, options?: HwpxHtmlOptions): string {\r\n const trs = tbl?.tr ?? tbl?.[\"hp:tr\"];\r\n const rows = trs ? (Array.isArray(trs) ? trs : [trs]) : [];\r\n const enableImages = options?.renderImages ?? true;\r\n const enableStyles = options?.renderStyles ?? true;\r\n const rowHtml: string[] = [];\r\n rows.forEach((tr: any, rowIndex: number) => {\r\n const tcs = tr?.tc ?? tr?.[\"hp:tc\"];\r\n const cells = tcs ? (Array.isArray(tcs) ? tcs : [tcs]) : [];\r\n const cellHtml: string[] = [];\r\n for (const tc of cells) {\r\n // \uC140 \uC548 paragraph: <hp:tc><hp:subList><hp:p>...</hp:p></hp:subList></hp:tc>\r\n // \uB610\uB294 \uC9C1\uC811 <hp:tc><hp:p>... \uB458 \uB2E4 \uC9C0\uC6D0\r\n const inner = this.renderCellContentHtml(tc, { enableImages, enableStyles }, options);\r\n // \uAD6C\uD615(\uC18D\uC131 @colSpan) + \uC2E0\uD615(\uC790\uC2DD <hp:cellSpan colSpan rowSpan>) \uB458 \uB2E4 \uC9C0\uC6D0\r\n const cellSpan = tc?.cellSpan ?? tc?.[\"hp:cellSpan\"];\r\n const colSpan =\r\n tc?.[\"@colSpan\"] ?? tc?.[\"@colspan\"] ?? tc?.[\"@gridSpan\"] ?? cellSpan?.[\"@colSpan\"];\r\n const rowSpan = tc?.[\"@rowSpan\"] ?? tc?.[\"@rowspan\"] ?? cellSpan?.[\"@rowSpan\"];\r\n const alignStyle = this.getAlignStyle(tc);\r\n const attrs: string[] = [];\r\n if (colSpan && String(colSpan) !== \"1\") attrs.push(` colspan=\"${String(colSpan)}\"`);\r\n if (rowSpan && String(rowSpan) !== \"1\") attrs.push(` rowspan=\"${String(rowSpan)}\"`);\r\n if (alignStyle) attrs.push(` style=\"${alignStyle}\"`);\r\n const isHeader = options?.tableHeaderFirstRow && rowIndex === 0;\r\n const tag = isHeader ? \"th\" : \"td\";\r\n cellHtml.push(`<${tag}${attrs.join(\"\")}>${inner}</${tag}>`);\r\n }\r\n rowHtml.push(`<tr>${cellHtml.join(\"\")}</tr>`);\r\n });\r\n return `<table class=\"${tableClass}\">${rowHtml.join(\"\")}</table>`;\r\n }\r\n\r\n private renderCellContentHtml(\r\n tc: any,\r\n flags: { enableImages: boolean; enableStyles: boolean },\r\n options?: HwpxHtmlOptions\r\n ): string {\r\n // subList \uC6B0\uC120 (\uD604\uB300 HWPX), \uC5C6\uC73C\uBA74 tc \uC790\uCCB4\uB97C \uB178\uB4DC\uB85C \uCC98\uB9AC\r\n const sub = tc?.subList ?? tc?.[\"hp:subList\"];\r\n if (sub) return this.renderNodeToHtml(sub, flags, options);\r\n return this.renderNodeToHtml(tc, flags, options);\r\n }\r\n\r\n private getAlignStyle(node: any): string | \"\" {\r\n const a = node?.[\"@align\"] ?? node?.[\"@textAlign\"] ?? node?.paraPr?.[\"@align\"] ?? node?.cellPr?.[\"@align\"];\r\n if (typeof a !== \"string\") return \"\";\r\n const v = a.toLowerCase();\r\n if (v === \"center\" || v === \"right\" || v === \"left\" || v === \"justify\") {\r\n return `text-align:${v}`;\r\n }\r\n return \"\";\r\n }\r\n\r\n private renderNodeToHtml(node: any, flags: { enableImages: boolean; enableStyles: boolean }, options?: HwpxHtmlOptions): string {\r\n if (!node) return \"\";\r\n // paragraph aggregation\r\n const ps = node?.[\"hp:p\"] ?? node?.p;\r\n if (ps) {\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n return paras.map((p: any) => this.renderNodeToHtml(p, flags, options)).join(\"\\n\");\r\n }\r\n // runs\r\n const runs = node?.[\"hp:run\"] ?? node?.run;\r\n const runArr = runs ? (Array.isArray(runs) ? runs : [runs]) : [];\r\n if (runArr.length > 0) {\r\n return runArr.map((run: any) => this.renderRunToHtml(run, flags, options)).join(\"\");\r\n }\r\n // direct text\r\n if (typeof node === \"string\") return this.escapeHtml(node);\r\n if (typeof node?.[\"#text\"] === \"string\") return this.escapeHtml(node[\"#text\"]);\r\n return \"\";\r\n }\r\n\r\n private collectAllText(node: any, out: string[]): void {\r\n if (node == null) return;\r\n\r\n // \uC124\uC815 \uAD00\uB828 \uB178\uB4DC\uB4E4\uC740 \uAC74\uB108\uB6F0\uAE30\r\n if (typeof node === \"object\" && (node.secPr || node.ctrl || node.linesegarray)) {\r\n return;\r\n }\r\n\r\n if (typeof node === \"string\") {\r\n out.push(node);\r\n return;\r\n }\r\n\r\n if (typeof node === \"object\") {\r\n const text = (node as any)[\"#text\"];\r\n if (typeof text === \"string\") out.push(text);\r\n\r\n // 't' \uC18D\uC131\uC774 \uC788\uC73C\uBA74 \uC9C1\uC811 \uCD94\uCD9C\r\n const t = node.t;\r\n if (typeof t === \"string\") {\r\n out.push(t);\r\n return; // t\uAC00 \uC788\uC73C\uBA74 \uB354 \uC774\uC0C1 \uD0D0\uC0C9\uD558\uC9C0 \uC54A\uC74C\r\n }\r\n\r\n for (const [k, v] of Object.entries(node)) {\r\n if (k === \"#text\" || k === \"t\") continue;\r\n // \uC124\uC815 \uAD00\uB828 \uD0A4\uB4E4\uC740 \uAC74\uB108\uB6F0\uAE30\r\n if (k === \"secPr\" || k === \"ctrl\" || k === \"linesegarray\") continue;\r\n this.collectAllText(v, out);\r\n }\r\n }\r\n }\r\n\r\n private renderRunToHtml(run: any, flags: { enableImages: boolean; enableStyles: boolean }, options?: HwpxHtmlOptions): string {\r\n // \uC139\uC158 \uC124\uC815\uC774\uB098 \uCEE8\uD2B8\uB864 \uC815\uBCF4\uAC00 \uC788\uB294 run\uC740 \uAC74\uB108\uB6F0\uAE30\r\n if (run?.secPr || run?.ctrl) return \"\";\r\n\r\n // Text\r\n const t = run?.[\"hp:t\"] ?? run?.t;\r\n const text = typeof t === \"string\" ? t : typeof t?.[\"#text\"] === \"string\" ? t[\"#text\"] : \"\";\r\n let html = this.escapeHtml(text);\r\n\r\n // Image (simplified): hp:picture or hp:img-like reference to BinData\r\n if (flags.enableImages) {\r\n const binRef = this.findBinRefInRun(run);\r\n if (typeof binRef === \"string\") {\r\n // Resolve binaryItemIDRef through manifest if needed\r\n const binPath = this.resolveBinaryPath(binRef);\r\n if (binPath) {\r\n let src: string;\r\n if (options?.embedImages) {\r\n const data = this.files[binPath];\r\n if (data) {\r\n const mime = this.detectMimeType(binPath);\r\n const b64 = this.toBase64(data);\r\n src = `data:${mime};base64,${b64}`;\r\n } else {\r\n src = binPath;\r\n }\r\n } else if (options?.imageSrcResolver) {\r\n src = options.imageSrcResolver(binPath);\r\n } else {\r\n src = binPath;\r\n }\r\n html += `<img src=\"${this.escapeHtml(src)}\" alt=\"\" />`;\r\n }\r\n }\r\n }\r\n\r\n // Styles: Resolve charPrIDRef to actual character properties\r\n if (flags.enableStyles) {\r\n const charPrId = run?.[\"@charPrIDRef\"];\r\n if (charPrId && this.characterProperties.has(charPrId)) {\r\n const charProps = this.characterProperties.get(charPrId);\r\n let open = \"\";\r\n let close = \"\";\r\n const styleParts: string[] = [];\r\n\r\n // Apply formatting\r\n if (charProps?.bold) {\r\n open += \"<strong>\";\r\n close = \"</strong>\" + close;\r\n }\r\n if (charProps?.italic) {\r\n open += \"<em>\";\r\n close = \"</em>\" + close;\r\n }\r\n\r\n // Handle underline\r\n if (charProps?.underline && charProps.underline?.[\"@type\"] !== \"NONE\") {\r\n styleParts.push(\"text-decoration:underline\");\r\n }\r\n\r\n // Handle color\r\n if (charProps?.textColor && charProps.textColor !== \"#000000\") {\r\n styleParts.push(`color:${this.normalizeColor(charProps.textColor)}`);\r\n }\r\n\r\n // Handle font size (convert HWPUNIT to points)\r\n if (charProps?.height) {\r\n const sizeInPt = this.convertHwpUnitToPoints(charProps.height);\r\n styleParts.push(`font-size:${sizeInPt}pt`);\r\n }\r\n\r\n // Handle background color\r\n if (charProps?.shadeColor && charProps.shadeColor !== \"none\" && charProps.shadeColor !== \"#FFFFFF\") {\r\n styleParts.push(`background-color:${this.normalizeColor(charProps.shadeColor)}`);\r\n }\r\n\r\n const styleAttr = styleParts.length ? ` style=\"${styleParts.join(\";\")}\"` : \"\";\r\n if (open || styleAttr) {\r\n html = `${open}<span${styleAttr}>${html}</span>${close}`;\r\n }\r\n }\r\n }\r\n\r\n return html;\r\n }\r\n\r\n private findBinRefInRun(run: any): string | undefined {\r\n // common patterns - note: XML parser removes namespaces, so hp:pic becomes 'pic', hc:img becomes 'img'\r\n const pic = run?.[\"hp:picture\"] ?? run?.picture ?? run?.pic;\r\n const draw = run?.[\"hp:draw\"] ?? run?.draw;\r\n const img = run?.[\"hp:img\"] ?? run?.img;\r\n const hcImg = run?.[\"hc:img\"] ?? run?.[\"hp:hc:img\"];\r\n\r\n const tryExtract = (node: any): string | undefined => {\r\n if (!node) return undefined;\r\n\r\n // Check for binaryItemIDRef attribute (used by hc:img)\r\n const binaryRef = node?.[\"@binaryItemIDRef\"];\r\n if (typeof binaryRef === \"string\") return binaryRef;\r\n\r\n // For picture elements, the img may be nested inside (hc:img becomes nested img)\r\n const nestedImg = node?.img;\r\n if (nestedImg && typeof nestedImg?.[\"@binaryItemIDRef\"] === \"string\") {\r\n return nestedImg[\"@binaryItemIDRef\"];\r\n }\r\n\r\n // Check for traditional hp:binItem reference\r\n const ref = node?.[\"hp:binItem\"]?.[\"@ref\"] ?? node?.binItem?.[\"@ref\"] ?? node?.[\"@ref\"];\r\n if (typeof ref === \"string\") return ref;\r\n return undefined;\r\n };\r\n\r\n return tryExtract(pic) || tryExtract(draw) || tryExtract(img) || tryExtract(hcImg);\r\n }\r\n\r\n private resolveBinaryPath(binRef: string): string | undefined {\r\n // First, try direct path (legacy format)\r\n const directPath = `BinData/${binRef}`;\r\n if (this.files[directPath]) {\r\n return directPath;\r\n }\r\n\r\n // Try to resolve through manifest\r\n try {\r\n const summary = this.summarizePackage();\r\n if (summary.manifest) {\r\n const manifestItem = summary.manifest.find(item => item.id === binRef);\r\n if (manifestItem?.href) {\r\n // The href might include the full path or relative path\r\n const resolvedPath = manifestItem.href.startsWith('BinData/')\r\n ? manifestItem.href\r\n : `BinData/${manifestItem.href}`;\r\n if (this.files[resolvedPath]) {\r\n return resolvedPath;\r\n }\r\n // Try the href as-is\r\n if (this.files[manifestItem.href]) {\r\n return manifestItem.href;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // Fall back if manifest parsing fails\r\n }\r\n\r\n // Fallback: return the direct path even if file doesn't exist\r\n return directPath;\r\n }\r\n\r\n private normalizeColor(c: string): string {\r\n const s = c.trim();\r\n if (/^#?[0-9a-fA-F]{6}$/.test(s)) return s.startsWith('#') ? s : `#${s}`;\r\n return s; // fallback as-is\r\n }\r\n\r\n private normalizeSize(sz: string | number): string {\r\n const n = typeof sz === 'number' ? sz : Number(sz);\r\n if (!isNaN(n)) return `${n}pt`;\r\n return String(sz);\r\n }\r\n\r\n private convertHwpUnitToPoints(hwpUnit: string | number): number {\r\n // HWPUNIT is approximately 1/100th of a point\r\n // 1000 HWPUNIT = 10 points\r\n const units = typeof hwpUnit === 'number' ? hwpUnit : parseInt(String(hwpUnit), 10);\r\n return Math.round((units / 100) * 10) / 10; // Round to 1 decimal place\r\n }\r\n\r\n private parseStyleDefinitions(): void {\r\n // Clear existing definitions\r\n this.characterProperties.clear();\r\n this.fontFaces.clear();\r\n\r\n // Find and parse header.xml\r\n const headerXml = this.getTextFile(\"Contents/header.xml\");\r\n if (!headerXml) return;\r\n\r\n try {\r\n const header = this.parseXml<any>(headerXml);\r\n const root = header?.head ?? header;\r\n if (!root) return;\r\n\r\n // Character properties are in head/refList/charProperties\r\n const refList = root?.refList;\r\n if (!refList) return;\r\n\r\n // Parse font faces\r\n const fontfaces = refList?.fontfaces;\r\n if (fontfaces?.fontface) {\r\n const fonts = Array.isArray(fontfaces.fontface) ? fontfaces.fontface : [fontfaces.fontface];\r\n for (const font of fonts) {\r\n const id = font?.[\"@id\"];\r\n if (id) {\r\n this.fontFaces.set(id, font);\r\n }\r\n }\r\n }\r\n\r\n // Parse character properties from refList\r\n const charProperties = refList?.charProperties;\r\n if (charProperties?.charPr) {\r\n const charPrs = Array.isArray(charProperties.charPr) ? charProperties.charPr : [charProperties.charPr];\r\n for (const charPr of charPrs) {\r\n const id = charPr?.[\"@id\"];\r\n if (id) {\r\n this.characterProperties.set(id, this.processCharacterProperties(charPr));\r\n }\r\n }\r\n }\r\n } catch {\r\n // Silent fail - styles are optional\r\n }\r\n }\r\n\r\n private processCharacterProperties(charPr: any): any {\r\n // Bold is indicated by presence of <hh:bold/> element (after namespace removal, becomes 'bold')\r\n const hasBold = charPr?.bold !== undefined;\r\n const hasItalic = charPr?.italic !== undefined;\r\n\r\n return {\r\n height: charPr?.[\"@height\"], // Font size in HWPUNIT\r\n textColor: charPr?.[\"@textColor\"], // Text color\r\n shadeColor: charPr?.[\"@shadeColor\"], // Background color\r\n bold: hasBold, // Bold formatting (element presence)\r\n italic: hasItalic, // Italic formatting (element presence)\r\n underline: charPr?.underline, // Underline info\r\n strikeout: charPr?.strikeout, // Strikeout info\r\n fontRef: charPr?.fontRef, // Font reference\r\n raw: charPr // Keep original for debugging\r\n };\r\n }\r\n\r\n private detectMimeType(path: string): string {\r\n const lower = path.toLowerCase();\r\n if (lower.endsWith(\".png\")) return \"image/png\";\r\n if (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) return \"image/jpeg\";\r\n if (lower.endsWith(\".gif\")) return \"image/gif\";\r\n if (lower.endsWith(\".bmp\")) return \"image/bmp\";\r\n if (lower.endsWith(\".webp\")) return \"image/webp\";\r\n return \"application/octet-stream\";\r\n }\r\n\r\n private toBase64(bytes: Uint8Array): string {\r\n if (typeof Buffer !== \"undefined\") {\r\n return Buffer.from(bytes).toString(\"base64\");\r\n }\r\n let binary = \"\";\r\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);\r\n // btoa may not exist in Node, handled by Buffer path above\r\n // @ts-ignore\r\n return btoa(binary);\r\n }\r\n\r\n private extractTextFromNode(node: any): string {\r\n if (!node) return \"\";\r\n // hp:p \u2192 hp:run \u2192 hp:t\r\n const ps = node?.[\"hp:p\"] ?? node?.p;\r\n if (ps) {\r\n const paras = Array.isArray(ps) ? ps : [ps];\r\n return paras.map((p: any) => this.extractTextFromNode(p)).join(\"\\n\");\r\n }\r\n const runs = node?.[\"hp:run\"] ?? node?.run;\r\n const runArr = runs ? (Array.isArray(runs) ? runs : [runs]) : [];\r\n const textPieces: string[] = [];\r\n for (const run of runArr) {\r\n // \uC139\uC158 \uC124\uC815\uC774\uB098 \uCEE8\uD2B8\uB864 \uC815\uBCF4\uAC00 \uC788\uB294 run\uC740 \uAC74\uB108\uB6F0\uAE30\r\n if (run?.secPr || run?.ctrl) continue;\r\n\r\n const t = run?.[\"hp:t\"] ?? run?.t;\r\n if (t === undefined || t === null) continue;\r\n if (typeof t === \"string\") textPieces.push(t);\r\n else if (typeof t?.[\"#text\"] === \"string\") textPieces.push(t[\"#text\"]);\r\n }\r\n if (textPieces.length > 0) return textPieces.join(\"\");\r\n // direct text\r\n if (typeof node === \"string\") return node;\r\n if (typeof node?.[\"#text\"] === \"string\") return node[\"#text\"];\r\n return \"\";\r\n }\r\n\r\n private escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\");\r\n }\r\n\r\n async listImages(): Promise<string[]> {\r\n if (!this.zip) throw new HwpxNotLoadedError();\r\n // \uC774\uBBF8\uC9C0: BinData/ \uB0B4 \uD30C\uC77C\uB4E4 (\uC6D0 \uADDC\uACA9\uC0C1 \uB2E4\uC591\uD55C \uBC14\uC774\uB108\uB9AC \uD3EC\uD568)\r\n return Object.keys(this.files)\r\n .filter((p) => p.startsWith(\"BinData/\") && !p.endsWith(\"/\"))\r\n .sort();\r\n }\r\n}\r\n\r\nexport default HwpxReader;\r\n\r\n", "export class HwpxNotLoadedError extends Error {\r\n constructor() {\r\n super(\"HWPX\uAC00 \uB85C\uB4DC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. loadFromArrayBuffer\uB97C \uBA3C\uC800 \uD638\uCD9C\uD558\uC138\uC694.\");\r\n this.name = \"HwpxNotLoadedError\";\r\n }\r\n}\r\n\r\nexport class HwpxEncryptedDocumentError extends Error {\r\n constructor(message = \"\uC554\uD638\uD654\uB41C HWPX \uBB38\uC11C\uB294 \uD604\uC7AC \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\") {\r\n super(message);\r\n this.name = \"HwpxEncryptedDocumentError\";\r\n }\r\n}\r\n\r\nexport class InvalidHwpxFormatError extends Error {\r\n constructor(message = \"\uC720\uD6A8\uD55C HWPX(mimetype: application/hwp+zip) \uBB38\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4.\") {\r\n super(message);\r\n this.name = \"InvalidHwpxFormatError\";\r\n }\r\n}\r\n\r\n", "import JSZip from \"jszip\";\nimport {\n MIMETYPE,\n OWPML_NS,\n DEFAULT_LINESEG,\n SEC_PR_XML,\n makeParaId,\n escapeXml,\n} from \"./hwp/owpml.js\";\n\nexport interface HwpxWriteOptions {\n title?: string;\n creator?: string;\n}\n\nconst NS_HA = \"http://www.hancom.co.kr/hwpml/2011/app\";\nconst NS_OASIS_CONTAINER = \"urn:oasis:names:tc:opendocument:xmlns:container\";\nconst NS_OASIS_MANIFEST = \"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\";\n\n/**\n * HWPX(OWPML) \uD328\uD0A4\uC9C0 \uBE4C\uB354 (\uD3C9\uBB38 \u2192 HWPX).\n *\n * OWPML \uD328\uD0A4\uC9C0 \uADDC\uCE59(\uD55C\uCEF4 \uD638\uD658):\n * - mimetype \uC5D4\uD2B8\uB9AC\uB294 ZIP \uB0B4 \uCCAB \uBC88\uC9F8\uC774\uBA70 STORE(\uBB34\uC555\uCD95), \uB0B4\uC6A9\uC740 \"application/hwp+zip\".\n * - \uC694\uC18C\uB9CC \uB124\uC784\uC2A4\uD398\uC774\uC2A4 prefix(hp:/hh:), \uC18D\uC131\uC740 prefix \uC5C6\uC74C.\n * - head/sec/package \uB8E8\uD2B8\uC5D0 \uD480 \uB124\uC784\uC2A4\uD398\uC774\uC2A4 \uC120\uC5B8, \uCCAB \uBB38\uB2E8\uC5D0 <hp:secPr>.\n * - META-INF/container.xml \uAC00 rootfile \uC704\uCE58\uB97C \uAC00\uB9AC\uD0B4.\n * - \uACF5\uD1B5 \uCEE8\uBCA4\uC158 \uC0C1\uC218\uB294 ./hwp/owpml.ts \uC640 \uACF5\uC720.\n * [shyang 2026-06-21]\n */\nexport class HwpxWriter {\n async createFromPlainText(text: string, options?: HwpxWriteOptions): Promise<Uint8Array> {\n const zip = new JSZip();\n\n // mimetype: \uBC18\uB4DC\uC2DC \uCCAB \uC5D4\uD2B8\uB9AC, STORED.\n zip.file(\"mimetype\", MIMETYPE, { compression: \"STORE\" });\n\n // META-INF/container.xml \u2014 rootfile \uC704\uCE58\n const containerXml =\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\n `<container xmlns=\"${NS_OASIS_CONTAINER}\">` +\n `<rootfiles>` +\n `<rootfile full-path=\"Contents/content.hpf\" media-type=\"application/hwpml-package+xml\"/>` +\n `</rootfiles>` +\n `</container>`;\n zip.file(\"META-INF/container.xml\", containerXml);\n\n // META-INF/manifest.xml \u2014 \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uD398\uC2A4\uD2B8\n const manifestXml =\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\n `<manifest:manifest xmlns:manifest=\"${NS_OASIS_MANIFEST}\">` +\n `<manifest:file-entry manifest:full-path=\"/\" manifest:media-type=\"application/hwpml-package+xml\"/>` +\n `<manifest:file-entry manifest:full-path=\"version.xml\" manifest:media-type=\"application/xml\"/>` +\n `<manifest:file-entry manifest:full-path=\"settings.xml\" manifest:media-type=\"application/xml\"/>` +\n `<manifest:file-entry manifest:full-path=\"Contents/content.hpf\" manifest:media-type=\"application/hwpml-package+xml\"/>` +\n `<manifest:file-entry manifest:full-path=\"Contents/header.xml\" manifest:media-type=\"application/xml\"/>` +\n `<manifest:file-entry manifest:full-path=\"Contents/section0.xml\" manifest:media-type=\"application/xml\"/>` +\n `</manifest:manifest>`;\n zip.file(\"META-INF/manifest.xml\", manifestXml);\n\n // version.xml\n const version =\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\n `<ha:HCFVersion xmlns:ha=\"${NS_HA}\" ha:targetApplication=\"WORDPROCESSOR\" ha:major=\"5\" ha:minor=\"0\" ha:micro=\"6\" ha:buildNumber=\"0\"/>`;\n zip.file(\"version.xml\", version);\n\n // settings.xml\n const settings =\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\n `<ha:HWPApplicationSetting xmlns:ha=\"${NS_HA}\">` +\n `<ha:CaretPosition ha:listIDRef=\"0\" ha:paraIDRef=\"0\" ha:pos=\"0\"/>` +\n `</ha:HWPApplicationSetting>`;\n zip.file(\"settings.xml\", settings);\n\n // Contents/content.hpf (OPF-like) \u2014 spine \uC5D0 header \uD3EC\uD568\n const contentHpf =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\n `<opf:package ${OWPML_NS} version=\"\" unique-identifier=\"\" id=\"\">` +\n `<opf:metadata>` +\n `<dc:title>${escapeXml(options?.title ?? \"\")}</dc:title>` +\n `<dc:creator>${escapeXml(options?.creator ?? \"\")}</dc:creator>` +\n `<dc:format>application/hwpml-package+xml</dc:format>` +\n `</opf:metadata>` +\n `<opf:manifest>` +\n `<opf:item id=\"header\" href=\"Contents/header.xml\" media-type=\"application/xml\"/>` +\n `<opf:item id=\"section0\" href=\"Contents/section0.xml\" media-type=\"application/xml\"/>` +\n `<opf:item id=\"settings\" href=\"settings.xml\" media-type=\"application/xml\"/>` +\n `</opf:manifest>` +\n `<opf:spine>` +\n `<opf:itemref idref=\"header\" linear=\"yes\"/>` +\n `<opf:itemref idref=\"section0\" linear=\"yes\"/>` +\n `</opf:spine>` +\n `</opf:package>`;\n zip.file(\"Contents/content.hpf\", contentHpf);\n\n // Contents/header.xml \u2014 \uCD5C\uC18C fontface/borderFill/charPr/tabProperties/numbering/paraPr/style\n const header =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\n `<hh:head ${OWPML_NS} version=\"1.5\" secCnt=\"1\">` +\n `<hh:beginNum page=\"1\" footnote=\"1\" endnote=\"1\" pic=\"1\" tbl=\"1\" equation=\"1\"/>` +\n `<hh:refList>` +\n `<hh:fontfaces itemCnt=\"1\">` +\n `<hh:fontface lang=\"HANGUL\" fontCnt=\"1\">` +\n `<hh:font id=\"0\" face=\"\uD568\uCD08\uB86C\uBC14\uD0D5\" type=\"TTF\" isEmbedded=\"0\"/>` +\n `</hh:fontface>` +\n `</hh:fontfaces>` +\n `<hh:borderFills itemCnt=\"1\">` +\n `<hh:borderFill id=\"0\" threeD=\"0\" shadow=\"0\" centerLine=\"NONE\" breakCellSeparateLine=\"0\">` +\n `<hh:slash type=\"NONE\" Crooked=\"0\" isCounter=\"0\"/>` +\n `<hh:backSlash type=\"NONE\" Crooked=\"0\" isCounter=\"0\"/>` +\n `<hh:leftBorder type=\"SOLID\" width=\"0.1 mm\" color=\"#000000\"/>` +\n `<hh:rightBorder type=\"SOLID\" width=\"0.1 mm\" color=\"#000000\"/>` +\n `<hh:topBorder type=\"SOLID\" width=\"0.1 mm\" color=\"#000000\"/>` +\n `<hh:bottomBorder type=\"SOLID\" width=\"0.1 mm\" color=\"#000000\"/>` +\n `<hh:diagonal type=\"NONE\" width=\"0.1 mm\" color=\"#000000\"/>` +\n `</hh:borderFill>` +\n `</hh:borderFills>` +\n `<hh:charProperties itemCnt=\"1\">` +\n `<hh:charPr id=\"0\" height=\"1000\" textColor=\"#000000\" shadeColor=\"none\" useFontSpace=\"0\" useKerning=\"0\" symMark=\"NONE\" borderFillIDRef=\"0\">` +\n `<hh:fontRef hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>` +\n `<hh:ratio hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>` +\n `<hh:spacing hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>` +\n `<hh:relSz hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>` +\n `<hh:offset hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>` +\n `</hh:charPr>` +\n `</hh:charProperties>` +\n `<hh:tabProperties itemCnt=\"1\">` +\n `<hh:tabPr id=\"0\" autoTabLeft=\"1\" autoTabRight=\"1\"><hh:items itemCnt=\"0\"/></hh:tabPr>` +\n `</hh:tabProperties>` +\n `<hh:numberings itemCnt=\"1\">` +\n `<hh:numbering id=\"0\" start=\"1\">` +\n `<hh:paraHead level=\"1\" start=\"1\" numFormat=\"^1.\" textOffsetType=\"PERCENT\" textOffset=\"50\" numberingChar=\"false\" charPrIDRef=\"0\">` +\n `<hh:autoNumberFormat type=\"DIGIT\" userChar=\"\" prefixChar=\"\" suffixChar=\".\"/>` +\n `</hh:paraHead>` +\n `</hh:numbering>` +\n `</hh:numberings>` +\n `<hh:paraProperties itemCnt=\"1\">` +\n `<hh:paraPr id=\"0\" tabPrIDRef=\"0\" condense=\"0\" fontLineHeight=\"0\" snapToGrid=\"0\" suppressLineNumbers=\"0\" checked=\"0\">` +\n `<hh:align horizontal=\"JUSTIFY\" vertical=\"BASELINE\"/>` +\n `<hh:heading type=\"NONE\" idRef=\"0\" level=\"0\"/>` +\n `<hh:breakSetting breakLatinWord=\"KEEP_WORD\" breakNonLatinWord=\"KEEP_WORD\" widowOrphan=\"0\" keepWithNext=\"0\" keepLines=\"0\" pageBreakBefore=\"0\" lineWrap=\"BREAK\"/>` +\n `<hh:margin><hh:intent value=\"0\"/><hh:left value=\"0\"/><hh:right value=\"0\"/><hh:prev value=\"0\"/><hh:next value=\"0\"/></hh:margin>` +\n `<hh:lineSpacing type=\"PERCENT\" value=\"160\"/>` +\n `</hh:paraPr>` +\n `</hh:paraProperties>` +\n `<hh:styles itemCnt=\"1\">` +\n `<hh:style id=\"0\" type=\"PARA\" name=\"\uBC14\uD0D5\uAE00\" engName=\"Normal\" paraPrIDRef=\"0\" charPrIDRef=\"0\" nextStyleIDRef=\"0\" langID=\"1042\" lockForm=\"0\"/>` +\n `</hh:styles>` +\n `</hh:refList>` +\n `</hh:head>`;\n zip.file(\"Contents/header.xml\", header);\n\n // Contents/section0.xml \u2014 \uCCAB \uBB38\uB2E8\uC5D0 secPr, \uC774\uD6C4 \uD3C9\uBB38 \uC904 \uB2E8\uC704 \uBB38\uB2E8\n const bodyParas = text\n .split(/\\r?\\n/)\n .map(\n (line) =>\n `<hp:p id=\"${makeParaId()}\" paraPrIDRef=\"0\" styleIDRef=\"0\" pageBreak=\"0\" columnBreak=\"0\" merged=\"0\">` +\n `<hp:run charPrIDRef=\"0\">` +\n `<hp:t>${escapeXml(line)}</hp:t>` +\n `</hp:run>` +\n DEFAULT_LINESEG +\n `</hp:p>`\n )\n .join(\"\");\n\n const secPrPara =\n `<hp:p id=\"${makeParaId()}\" paraPrIDRef=\"0\" styleIDRef=\"0\" pageBreak=\"0\" columnBreak=\"0\" merged=\"0\">` +\n `<hp:run charPrIDRef=\"0\">${SEC_PR_XML}</hp:run>` +\n `<hp:run charPrIDRef=\"0\"><hp:t/></hp:run>` +\n DEFAULT_LINESEG +\n `</hp:p>`;\n\n const section0 =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\n `<hs:sec ${OWPML_NS}>` +\n secPrPara +\n bodyParas +\n `</hs:sec>`;\n zip.file(\"Contents/section0.xml\", section0);\n\n return await zip.generateAsync({ type: \"uint8array\" });\n }\n}\n\nexport default HwpxWriter;\n", "/**\n * OWPML(HWPX) \uD328\uD0A4\uC9C0 \uC0DD\uC131 \uACF5\uD1B5 \uD5EC\uD37C.\n *\n * writer.ts(\uD3C9\uBB38) \uC640 hwpxBuilder.ts(IR) \uAC00 \uACF5\uC720\uD558\uB294 OWPML \uCEE8\uBCA4\uC158 \uC0C1\uC218\u00B7\uC720\uD2F8.\n * \uAE30\uC900: \uD55C\uCEF4 \uC815\uC0C1 \uCD9C\uB825 \uC0D8\uD50C etc/hwpxcore_test/ (header.xml / section0.xml).\n *\n * OWPML \uD575\uC2EC \uADDC\uCE59:\n * - mimetype = \"application/hwp+zip\" (\uD55C\uAE00\uC758 HWPX \uB9E4\uC9C1 \uBB38\uC790\uC5F4)\n * - \uC694\uC18C\uB9CC \uB124\uC784\uC2A4\uD398\uC774\uC2A4 prefix(hp:/hh:/hc:), \uC18D\uC131\uC740 prefix \uC5C6\uC74C\n * - head/sec/package \uB8E8\uD2B8\uC5D0 \uD480 \uB124\uC784\uC2A4\uD398\uC774\uC2A4 \uC120\uC5B8\n * - \uCCAB \uBB38\uB2E8\uC5D0 <hp:secPr> (\uD398\uC774\uC9C0 \uC124\uC815) \uD544\uC218\n *\n * \uC21C\uC218 \uBB38\uC790\uC5F4\u00B7\uB85C\uC9C1\uB9CC \u2014 Node \uC804\uC6A9 API(Buffer/fs/path/crypto) \uAE08\uC9C0 (\uBE0C\uB77C\uC6B0\uC800 ESM \uBC88\uB4E4 \uC720\uC9C0).\n * [shyang 2026-06-21]\n */\n\n/** mimetype \uD30C\uC77C \uB0B4\uC6A9 \u2014 \uD55C\uAE00\uC774 HWPX \uB97C \uAC10\uC9C0\uD558\uB294 \uB9E4\uC9C1 \uBB38\uC790\uC5F4. */\nexport const MIMETYPE = \"application/hwp+zip\";\n\n/** head/sec/package \uB8E8\uD2B8\uAC00 \uACF5\uC720\uD558\uB294 OWPML \uD480 \uB124\uC784\uC2A4\uD398\uC774\uC2A4 \uC120\uC5B8. */\nexport const OWPML_NS =\n `xmlns:ha=\"http://www.hancom.co.kr/hwpml/2011/app\" ` +\n `xmlns:hp=\"http://www.hancom.co.kr/hwpml/2011/paragraph\" ` +\n `xmlns:hp10=\"http://www.hancom.co.kr/hwpml/2016/paragraph\" ` +\n `xmlns:hs=\"http://www.hancom.co.kr/hwpml/2011/section\" ` +\n `xmlns:hc=\"http://www.hancom.co.kr/hwpml/2011/core\" ` +\n `xmlns:hh=\"http://www.hancom.co.kr/hwpml/2011/head\" ` +\n `xmlns:hhs=\"http://www.hancom.co.kr/hwpml/2011/history\" ` +\n `xmlns:hm=\"http://www.hancom.co.kr/hwpml/2011/master-page\" ` +\n `xmlns:hpf=\"http://www.hancom.co.kr/schema/2011/hpf\" ` +\n `xmlns:dc=\"http://purl.org/dc/elements/1.1/\" ` +\n `xmlns:opf=\"http://www.idpf.org/2007/opf/\" ` +\n `xmlns:ooxmlchart=\"http://www.hancom.co.kr/hwpml/2016/ooxmlchart\" ` +\n `xmlns:hwpunitchar=\"http://www.hancom.co.kr/hwpml/2016/HwpUnitChar\" ` +\n `xmlns:epub=\"http://www.idpf.org/2007/ops\" ` +\n `xmlns:config=\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\"`;\n\n/** \uD55C \uBB38\uB2E8 \uB77C\uC778\uC138\uADF8 \uAE30\uBCF8\uAC12(\uD55C\uCEF4 \uD638\uD658). \uC18D\uC131 prefix \uC5C6\uC74C. */\nexport const DEFAULT_LINESEG =\n `<hp:linesegarray>` +\n `<hp:lineseg textpos=\"0\" vertpos=\"0\" vertsize=\"1000\" textheight=\"1000\" baseline=\"850\" spacing=\"600\" horzpos=\"0\" horzsize=\"42520\" flags=\"393216\"/>` +\n `</hp:linesegarray>`;\n\n/**\n * \uC139\uC158 \uCCAB \uBB38\uB2E8\uC5D0 \uB4E4\uC5B4\uAC00\uB294 <hp:secPr>(\uD398\uC774\uC9C0 \uC124\uC815) + <hp:ctrl><hp:colPr> \uBE14\uB85D.\n * \uD55C\uCEF4 \uC815\uC0C1 \uC0D8\uD50C(etc/hwpxcore_test/Contents/section0.xml) \uAE30\uC900 A4 \uC138\uB85C.\n * \uD55C\uAE00\uC774 \uC5F4 \uB54C \uC2E4\uC81C \uB808\uC774\uC544\uC6C3\uC744 \uC7AC\uACC4\uC0B0\uD558\uBBC0\uB85C \uC774 \uAE30\uBCF8\uAC12\uC73C\uB85C \uCDA9\uBD84.\n */\nexport const SEC_PR_XML =\n `<hp:secPr id=\"\" textDirection=\"HORIZONTAL\" spaceColumns=\"1134\" tabStop=\"8000\" tabStopVal=\"4000\" tabStopUnit=\"HWPUNIT\" outlineShapeIDRef=\"1\" memoShapeIDRef=\"0\" textVerticalWidthHead=\"0\" masterPageCnt=\"0\">` +\n `<hp:grid lineGrid=\"0\" charGrid=\"0\" wonggojiFormat=\"0\"/>` +\n `<hp:startNum pageStartsOn=\"BOTH\" page=\"0\" pic=\"0\" tbl=\"0\" equation=\"0\"/>` +\n `<hp:visibility hideFirstHeader=\"0\" hideFirstFooter=\"0\" hideFirstMasterPage=\"0\" border=\"SHOW_ALL\" fill=\"SHOW_ALL\" hideFirstPageNum=\"0\" hideFirstEmptyLine=\"0\" showLineNumber=\"0\"/>` +\n `<hp:lineNumberShape restartType=\"0\" countBy=\"0\" distance=\"0\" startNumber=\"0\"/>` +\n `<hp:pagePr landscape=\"WIDELY\" width=\"59528\" height=\"84186\" gutterType=\"LEFT_ONLY\">` +\n `<hp:margin header=\"4252\" footer=\"4252\" gutter=\"0\" left=\"8504\" right=\"8504\" top=\"5668\" bottom=\"4252\"/>` +\n `</hp:pagePr>` +\n `<hp:footNotePr>` +\n `<hp:autoNumFormat type=\"DIGIT\" userChar=\"\" prefixChar=\"\" suffixChar=\")\" supscript=\"0\"/>` +\n `<hp:noteLine length=\"-1\" type=\"SOLID\" width=\"0.12 mm\" color=\"#000000\"/>` +\n `<hp:noteSpacing betweenNotes=\"283\" belowLine=\"567\" aboveLine=\"850\"/>` +\n `<hp:numbering type=\"CONTINUOUS\" newNum=\"1\"/>` +\n `<hp:placement place=\"EACH_COLUMN\" beneathText=\"0\"/>` +\n `</hp:footNotePr>` +\n `<hp:endNotePr>` +\n `<hp:autoNumFormat type=\"DIGIT\" userChar=\"\" prefixChar=\"\" suffixChar=\")\" supscript=\"0\"/>` +\n `<hp:noteLine length=\"14692344\" type=\"SOLID\" width=\"0.12 mm\" color=\"#000000\"/>` +\n `<hp:noteSpacing betweenNotes=\"0\" belowLine=\"567\" aboveLine=\"850\"/>` +\n `<hp:numbering type=\"CONTINUOUS\" newNum=\"1\"/>` +\n `<hp:placement place=\"END_OF_DOCUMENT\" beneathText=\"0\"/>` +\n `</hp:endNotePr>` +\n `<hp:pageBorderFill type=\"BOTH\" borderFillIDRef=\"1\" textBorder=\"PAPER\" headerInside=\"0\" footerInside=\"0\" fillArea=\"PAPER\"><hp:offset left=\"1417\" right=\"1417\" top=\"1417\" bottom=\"1417\"/></hp:pageBorderFill>` +\n `<hp:pageBorderFill type=\"EVEN\" borderFillIDRef=\"1\" textBorder=\"PAPER\" headerInside=\"0\" footerInside=\"0\" fillArea=\"PAPER\"><hp:offset left=\"1417\" right=\"1417\" top=\"1417\" bottom=\"1417\"/></hp:pageBorderFill>` +\n `<hp:pageBorderFill type=\"ODD\" borderFillIDRef=\"1\" textBorder=\"PAPER\" headerInside=\"0\" footerInside=\"0\" fillArea=\"PAPER\"><hp:offset left=\"1417\" right=\"1417\" top=\"1417\" bottom=\"1417\"/></hp:pageBorderFill>` +\n `</hp:secPr>` +\n `<hp:ctrl><hp:colPr id=\"\" type=\"NEWSPAPER\" layout=\"LEFT\" colCount=\"1\" sameSz=\"1\" sameGap=\"0\"/></hp:ctrl>`;\n\nlet paraIdCounter = 0;\n\n/**\n * \uBB38\uB2E8 \uACE0\uC720 id \uC0DD\uC131. \uD55C\uCEF4\uC740 <hp:p> \uC5D0 \uACE0\uC720 \uC815\uC218 id \uB97C \uC694\uAD6C\uD55C\uB2E4.\n * \uACB0\uC815\uC801(\uCE74\uC6B4\uD130 \uAE30\uBC18) \u2014 \uAC19\uC740 \uBB38\uC11C/\uC138\uC158 \uB0B4 \uACE0\uC720\uD558\uBA74 \uCDA9\uBD84.\n */\nexport function makeParaId(): number {\n paraIdCounter = (paraIdCounter + 1) >>> 0;\n return paraIdCounter;\n}\n\nexport function escapeXml(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n", "/**\r\n * HWP FileHeader \uC2A4\uD2B8\uB9BC (256\uBC14\uC774\uD2B8, \uBE44\uC555\uCD95).\r\n * 0..31 : \uC2DC\uADF8\uB2C8\uCC98 \"HWP Document File\" + NULL \uD328\uB529\r\n * 32..35 : \uBC84\uC804 (revision, build, minor, major) \u2014 LE\r\n * 36..39 : \uC18D\uC131 \uD50C\uB798\uADF8 (u32 LE)\r\n * 40.. : \uC608\uC57D\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/header.rs (MIT, Copyright (c) 2025-2026 Edward Kim)\r\n */\r\n\r\nexport const HWP_SIGNATURE = \"HWP Document File\";\r\nexport const FILE_HEADER_SIZE = 256;\r\n\r\nexport interface HwpVersion {\r\n major: number;\r\n minor: number;\r\n build: number;\r\n revision: number;\r\n}\r\n\r\nexport function versionToString(v: HwpVersion): string {\r\n return `${v.major}.${v.minor}.${v.build}.${v.revision}`;\r\n}\r\n\r\nexport function isVersionSupported(v: HwpVersion): boolean {\r\n return v.major === 5 && (v.minor === 0 || v.minor === 1);\r\n}\r\n\r\nexport interface FileHeaderFlags {\r\n raw: number;\r\n compressed: boolean;\r\n encrypted: boolean;\r\n distribution: boolean;\r\n script: boolean;\r\n drm: boolean;\r\n xmlTemplate: boolean;\r\n documentHistory: boolean;\r\n digitalSignature: boolean;\r\n publicKeyEncrypted: boolean;\r\n modifiedCertificate: boolean;\r\n prepareDistribution: boolean;\r\n}\r\n\r\nexport function parseFlags(raw: number): FileHeaderFlags {\r\n return {\r\n raw,\r\n compressed: (raw & 0x001) !== 0,\r\n encrypted: (raw & 0x002) !== 0,\r\n distribution: (raw & 0x004) !== 0,\r\n script: (raw & 0x008) !== 0,\r\n drm: (raw & 0x010) !== 0,\r\n xmlTemplate: (raw & 0x020) !== 0,\r\n documentHistory: (raw & 0x040) !== 0,\r\n digitalSignature: (raw & 0x080) !== 0,\r\n publicKeyEncrypted: (raw & 0x100) !== 0,\r\n modifiedCertificate: (raw & 0x200) !== 0,\r\n prepareDistribution: (raw & 0x400) !== 0,\r\n };\r\n}\r\n\r\nexport interface FileHeader {\r\n version: HwpVersion;\r\n flags: FileHeaderFlags;\r\n}\r\n\r\nexport class HwpHeaderError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"HwpHeaderError\";\r\n }\r\n}\r\n\r\nconst ASCII = new TextDecoder(\"ascii\");\r\n\r\nexport function parseFileHeader(data: Uint8Array): FileHeader {\r\n if (data.byteLength < FILE_HEADER_SIZE) {\r\n throw new HwpHeaderError(`FileHeader \uD06C\uAE30 \uBD80\uC871: ${data.byteLength} (\uCD5C\uC18C ${FILE_HEADER_SIZE})`);\r\n }\r\n\r\n // \uC2DC\uADF8\uB2C8\uCC98 (0..31, NULL \uC885\uB8CC)\r\n const sigArea = data.subarray(0, 32);\r\n let sigEnd = sigArea.indexOf(0);\r\n if (sigEnd === -1) sigEnd = 32;\r\n const sig = ASCII.decode(sigArea.subarray(0, sigEnd));\r\n if (!sig.startsWith(HWP_SIGNATURE)) {\r\n throw new HwpHeaderError(`HWP \uC2DC\uADF8\uB2C8\uCC98\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4: \"${sig}\"`);\r\n }\r\n\r\n // \uBC84\uC804 (revision, build, minor, major)\r\n const version: HwpVersion = {\r\n revision: data[32],\r\n build: data[33],\r\n minor: data[34],\r\n major: data[35],\r\n };\r\n\r\n // \uD50C\uB798\uADF8\r\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const flagsRaw = view.getUint32(36, true);\r\n const flags = parseFlags(flagsRaw);\r\n\r\n return { version, flags };\r\n}\r\n", "/**\r\n * HWP 5.0 CFB(OLE2) \uCEE8\uD14C\uC774\uB108 \uB9AC\uB354.\r\n * SheetJS 'cfb' \uD328\uD0A4\uC9C0\uB97C \uAC10\uC2F8 HWP \uCE5C\uD654\uC801 API \uC81C\uACF5.\r\n *\r\n * HWP CFB \uAD6C\uC870:\r\n * /FileHeader (256B, \uBE44\uC555\uCD95)\r\n * /DocInfo (\uC555\uCD95 \uAC00\uB2A5 \u2014 \uBE44\uBC00 stream\uC5D0\uC11C raw deflate)\r\n * /BodyText/Section{N} (\uC555\uCD95 \uAC00\uB2A5)\r\n * /ViewText/Section{N} (\uBC30\uD3EC\uC6A9 \uBB38\uC11C; \uC554\uD638\uD654)\r\n * /BinData/BIN{XXXX}.{ext} (\uC774\uBBF8\uC9C0/\uC784\uBCA0\uB514\uB4DC)\r\n * /PrvImage, /PrvText (\uBBF8\uB9AC\uBCF4\uAE30)\r\n * /Scripts/..., /DocOptions/...\r\n *\r\n * \uC6D0\uC791 \uCC38\uACE0: rhwp/src/parser/cfb_reader.rs (MIT, Edward Kim)\r\n */\r\n\r\nimport * as CFB from \"cfb\";\r\nimport { inflateRaw } from \"pako\";\r\n\r\nexport class CfbError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"CfbError\";\r\n }\r\n}\r\n\r\nexport class HwpCfbReader {\r\n private container: CFB.CFB$Container;\r\n\r\n constructor(data: Uint8Array) {\r\n try {\r\n this.container = CFB.read(data, { type: \"buffer\" });\r\n } catch (e) {\r\n throw new CfbError(`CFB \uD30C\uC2F1 \uC2E4\uD328: ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n }\r\n\r\n /** path \uC815\uD655\uD788 \uC77C\uCE58\uD558\uB294 stream \uC758 raw bytes (\uC555\uCD95/\uC554\uD638\uD654 \uADF8\uB300\uB85C) */\r\n readStreamRaw(path: string): Uint8Array | null {\r\n const norm = path.startsWith(\"/\") ? path : `/${path}`;\r\n const entry = CFB.find(this.container, norm);\r\n if (!entry || entry.type !== 2 /* stream */) return null;\r\n return toUint8Array(entry.content);\r\n }\r\n\r\n /** \uB514\uD50C\uB808\uC774\uD2B8 \uC555\uCD95 \uD574\uC81C. raw deflate (zlib \uD5E4\uB354 \uC5C6\uC74C). */\r\n static decompress(data: Uint8Array): Uint8Array {\r\n if (data.byteLength === 0) return data;\r\n try {\r\n return inflateRaw(data);\r\n } catch (e) {\r\n throw new CfbError(`deflate \uD574\uC81C \uC2E4\uD328: ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n }\r\n\r\n /** FileHeader (256\uBC14\uC774\uD2B8, \uBE44\uC555\uCD95) */\r\n readFileHeader(): Uint8Array {\r\n const data = this.readStreamRaw(\"/FileHeader\");\r\n if (!data) throw new CfbError(\"/FileHeader \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4\");\r\n return data;\r\n }\r\n\r\n /** DocInfo (compressed \uD50C\uB798\uADF8\uC5D0 \uB530\uB77C \uC790\uB3D9 \uD574\uC81C) */\r\n readDocInfo(compressed: boolean): Uint8Array {\r\n const raw = this.readStreamRaw(\"/DocInfo\");\r\n if (!raw) throw new CfbError(\"/DocInfo \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4\");\r\n return compressed ? HwpCfbReader.decompress(raw) : raw;\r\n }\r\n\r\n /** /BodyText/SectionN \uB610\uB294 /ViewText/SectionN (\uBC30\uD3EC\uC6A9) */\r\n readBodySection(index: number, compressed: boolean, distribution: boolean): Uint8Array | null {\r\n const folder = distribution ? \"ViewText\" : \"BodyText\";\r\n const raw = this.readStreamRaw(`/${folder}/Section${index}`);\r\n if (!raw) return null;\r\n if (distribution) {\r\n // ViewText \uB294 \uC554\uD638\uD654\uB418\uC5B4 \uC788\uC5B4 v1 \uBBF8\uC9C0\uC6D0: \uD638\uCD9C\uC790\uAC00 raw \uCC98\uB9AC\r\n return raw;\r\n }\r\n return compressed ? HwpCfbReader.decompress(raw) : raw;\r\n }\r\n\r\n /** BodyText \uC139\uC158 \uAC1C\uC218 (Section0 ~ SectionN-1) */\r\n sectionCount(distribution = false): number {\r\n const folder = distribution ? \"ViewText\" : \"BodyText\";\r\n const re = new RegExp(`(?:^|/)${folder}/Section\\\\d+$`);\r\n let n = 0;\r\n for (const path of this.container.FullPaths) {\r\n if (re.test(path)) n++;\r\n }\r\n return n;\r\n }\r\n\r\n /** /BinData/BIN{XXXX}.{ext} \uBAA8\uB450 \uB098\uC5F4 */\r\n listBinData(): { name: string; storageId: number; extension: string }[] {\r\n const result: { name: string; storageId: number; extension: string }[] = [];\r\n const re = /(?:^|\\/)BinData\\/BIN([0-9A-Fa-f]{4})\\.([^/]+)$/;\r\n for (const path of this.container.FullPaths) {\r\n const m = re.exec(path);\r\n if (!m) continue;\r\n result.push({\r\n name: path,\r\n storageId: parseInt(m[1], 16),\r\n extension: m[2].toLowerCase(),\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /** /BinData/BIN{XXXX}.{ext} \uC758 \uB370\uC774\uD130 (\uC555\uCD95\uB418\uC5B4 \uC788\uC73C\uBA74 \uD574\uC81C \uC2DC\uB3C4) */\r\n readBinData(path: string): Uint8Array | null {\r\n const raw = this.readStreamRaw(path);\r\n if (!raw) return null;\r\n // BinData \uB3C4 \uC77C\uBC18\uC801\uC73C\uB85C \uC555\uCD95\uB428\r\n try {\r\n return HwpCfbReader.decompress(raw);\r\n } catch {\r\n return raw;\r\n }\r\n }\r\n\r\n /** \uB514\uBC84\uADF8 \u2014 \uBAA8\uB4E0 stream \uACBD\uB85C */\r\n listStreams(): string[] {\r\n const out: string[] = [];\r\n for (let i = 0; i < this.container.FileIndex.length; i++) {\r\n if (this.container.FileIndex[i].type === 2) out.push(this.container.FullPaths[i]);\r\n }\r\n return out;\r\n }\r\n}\r\n\r\nfunction toUint8Array(content: CFB.CFB$Blob): Uint8Array {\r\n if (content instanceof Uint8Array) return content;\r\n // number[]\r\n return Uint8Array.from(content);\r\n}\r\n", "\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n let len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH$3) ||\n flush === Z_NO_FLUSH$2 ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR$2;\n }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\n/* ========================================================================= */\nconst deflate$2 = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 16209; /* got a data error -- remain here until reset */\nconst TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS$1) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n", "/**\r\n * \uBC14\uC774\uB108\uB9AC \uB370\uC774\uD130 \uC77D\uAE30 \uC720\uD2F8\uB9AC\uD2F0 (\uCEE4\uC11C \uAE30\uBC18).\r\n * HWP 5.0 \uC2A4\uD2B8\uB9BC\uC740 \uBAA8\uB450 little-endian, \uBB38\uC790\uC5F4\uC740 UTF-16LE.\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/byte_reader.rs (MIT, Copyright (c) 2025-2026 Edward Kim)\r\n */\r\n\r\nconst UTF16_LE = new TextDecoder(\"utf-16le\");\r\n\r\nexport class ByteReader {\r\n private view: DataView;\r\n private offset: number;\r\n private readonly end: number;\r\n\r\n constructor(data: Uint8Array, offset = 0, length?: number) {\r\n this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n this.offset = offset;\r\n this.end = length === undefined ? data.byteLength : offset + length;\r\n }\r\n\r\n /** \uD604\uC7AC \uC704\uCE58 (\uBC14\uC774\uD2B8 \uC624\uD504\uC14B, \uC2DC\uC791\uC810 \uAE30\uC900) */\r\n position(): number {\r\n return this.offset;\r\n }\r\n\r\n /** \uB0A8\uC740 \uBC14\uC774\uD2B8 */\r\n remaining(): number {\r\n return Math.max(0, this.end - this.offset);\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.remaining() === 0;\r\n }\r\n\r\n setPosition(pos: number): void {\r\n if (pos < 0 || pos > this.end) {\r\n throw new RangeError(`setPosition out of range: ${pos} (end=${this.end})`);\r\n }\r\n this.offset = pos;\r\n }\r\n\r\n skip(n: number): void {\r\n if (this.offset + n > this.end) {\r\n throw new RangeError(`skip exceeds end: pos=${this.offset}+${n} > ${this.end}`);\r\n }\r\n this.offset += n;\r\n }\r\n\r\n readU8(): number {\r\n this.ensure(1);\r\n return this.view.getUint8(this.offset++);\r\n }\r\n\r\n readU16(): number {\r\n this.ensure(2);\r\n const v = this.view.getUint16(this.offset, true);\r\n this.offset += 2;\r\n return v;\r\n }\r\n\r\n readU32(): number {\r\n this.ensure(4);\r\n const v = this.view.getUint32(this.offset, true);\r\n this.offset += 4;\r\n return v;\r\n }\r\n\r\n readI8(): number {\r\n this.ensure(1);\r\n return this.view.getInt8(this.offset++);\r\n }\r\n\r\n readI16(): number {\r\n this.ensure(2);\r\n const v = this.view.getInt16(this.offset, true);\r\n this.offset += 2;\r\n return v;\r\n }\r\n\r\n readI32(): number {\r\n this.ensure(4);\r\n const v = this.view.getInt32(this.offset, true);\r\n this.offset += 4;\r\n return v;\r\n }\r\n\r\n /** i64 (BigInt). HWP\uC5D0\uC11C\uB294 \uAC70\uC758 \uB4F1\uC7A5\uD558\uC9C0 \uC54A\uC9C0\uB9CC \uD638\uD658\uC744 \uC704\uD574. */\r\n readI64(): bigint {\r\n this.ensure(8);\r\n const v = this.view.getBigInt64(this.offset, true);\r\n this.offset += 8;\r\n return v;\r\n }\r\n\r\n /** \uC9C0\uC815 \uAE38\uC774 \uBC14\uC774\uD2B8\uB97C \uBCF5\uC0AC\uD558\uC9C0 \uC54A\uACE0 sub-view \uBC18\uD658 (Uint8Array) */\r\n readBytes(len: number): Uint8Array {\r\n this.ensure(len);\r\n const out = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, len);\r\n this.offset += len;\r\n return new Uint8Array(out); // \uBCF5\uC0AC\uBCF8 \u2014 \uD638\uCD9C\uC790\uAC00 \uC678\uBD80 \uB77C\uC774\uD504\uC0AC\uC774\uD074\uC744 \uC2E0\uACBD \uC4F8 \uD544\uC694 \uC5C6\uAC8C\r\n }\r\n\r\n /** \uB0A8\uC740 \uC804\uBD80 */\r\n readRemaining(): Uint8Array {\r\n return this.readBytes(this.remaining());\r\n }\r\n\r\n /**\r\n * HWP \uBB38\uC790\uC5F4: [u16 charCount] + [UTF-16LE bytes * charCount].\r\n */\r\n readHwpString(): string {\r\n const charCount = this.readU16();\r\n if (charCount === 0) return \"\";\r\n return this.readUtf16(charCount);\r\n }\r\n\r\n /** \uC9C0\uC815 \uAE00\uC790 \uC218\uC758 UTF-16LE \uBB38\uC790\uC5F4 */\r\n readUtf16(charCount: number): string {\r\n const byteLen = charCount * 2;\r\n this.ensure(byteLen);\r\n const slice = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, byteLen);\r\n this.offset += byteLen;\r\n return UTF16_LE.decode(slice);\r\n }\r\n\r\n /** ColorRef (0x00BBGGRR) \u2014 u32 \uADF8\uB300\uB85C */\r\n readColorRef(): number {\r\n return this.readU32();\r\n }\r\n\r\n private ensure(n: number): void {\r\n if (this.offset + n > this.end) {\r\n throw new RangeError(\r\n `ByteReader: not enough bytes. need=${n}, have=${this.end - this.offset}, pos=${this.offset}`\r\n );\r\n }\r\n }\r\n}\r\n", "/**\r\n * HWP 5.0 \uB808\uCF54\uB4DC TagID \uBC0F \uCEE8\uD2B8\uB864 ID \uC0C1\uC218.\r\n * HWPTAG_BEGIN(0x010) \uAE30\uC900 \uC624\uD504\uC14B\uC73C\uB85C \uC815\uC758.\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/tags.rs (MIT, Copyright (c) 2025-2026 Edward Kim)\r\n */\r\n\r\nexport const HWPTAG_BEGIN = 0x010;\r\n\r\n// ============================================================\r\n// DocInfo \uD0DC\uADF8 (HWPTAG_BEGIN + 0 ~ 49)\r\n// ============================================================\r\nexport const HWPTAG_DOCUMENT_PROPERTIES = HWPTAG_BEGIN + 0;\r\nexport const HWPTAG_ID_MAPPINGS = HWPTAG_BEGIN + 1;\r\nexport const HWPTAG_BIN_DATA = HWPTAG_BEGIN + 2;\r\nexport const HWPTAG_FACE_NAME = HWPTAG_BEGIN + 3;\r\nexport const HWPTAG_BORDER_FILL = HWPTAG_BEGIN + 4;\r\nexport const HWPTAG_CHAR_SHAPE = HWPTAG_BEGIN + 5;\r\nexport const HWPTAG_TAB_DEF = HWPTAG_BEGIN + 6;\r\nexport const HWPTAG_NUMBERING = HWPTAG_BEGIN + 7;\r\nexport const HWPTAG_BULLET = HWPTAG_BEGIN + 8;\r\nexport const HWPTAG_PARA_SHAPE = HWPTAG_BEGIN + 9;\r\nexport const HWPTAG_STYLE = HWPTAG_BEGIN + 10;\r\nexport const HWPTAG_DOC_DATA = HWPTAG_BEGIN + 11;\r\nexport const HWPTAG_DISTRIBUTE_DOC_DATA = HWPTAG_BEGIN + 12;\r\n// (HWPTAG_BEGIN + 13 \uC608\uC57D)\r\nexport const HWPTAG_COMPATIBLE_DOCUMENT = HWPTAG_BEGIN + 14;\r\nexport const HWPTAG_LAYOUT_COMPATIBILITY = HWPTAG_BEGIN + 15;\r\nexport const HWPTAG_TRACKCHANGE = HWPTAG_BEGIN + 16;\r\n\r\n// ============================================================\r\n// BodyText \uD0DC\uADF8 (HWPTAG_BEGIN + 50 ~)\r\n// ============================================================\r\nexport const HWPTAG_PARA_HEADER = HWPTAG_BEGIN + 50;\r\nexport const HWPTAG_PARA_TEXT = HWPTAG_BEGIN + 51;\r\nexport const HWPTAG_PARA_CHAR_SHAPE = HWPTAG_BEGIN + 52;\r\nexport const HWPTAG_PARA_LINE_SEG = HWPTAG_BEGIN + 53;\r\nexport const HWPTAG_PARA_RANGE_TAG = HWPTAG_BEGIN + 54;\r\nexport const HWPTAG_CTRL_HEADER = HWPTAG_BEGIN + 55;\r\nexport const HWPTAG_LIST_HEADER = HWPTAG_BEGIN + 56;\r\nexport const HWPTAG_PAGE_DEF = HWPTAG_BEGIN + 57;\r\nexport const HWPTAG_FOOTNOTE_SHAPE = HWPTAG_BEGIN + 58;\r\nexport const HWPTAG_PAGE_BORDER_FILL = HWPTAG_BEGIN + 59;\r\nexport const HWPTAG_SHAPE_COMPONENT = HWPTAG_BEGIN + 60;\r\nexport const HWPTAG_TABLE = HWPTAG_BEGIN + 61;\r\nexport const HWPTAG_SHAPE_COMPONENT_LINE = HWPTAG_BEGIN + 62;\r\nexport const HWPTAG_SHAPE_COMPONENT_RECTANGLE = HWPTAG_BEGIN + 63;\r\nexport const HWPTAG_SHAPE_COMPONENT_ELLIPSE = HWPTAG_BEGIN + 64;\r\nexport const HWPTAG_SHAPE_COMPONENT_ARC = HWPTAG_BEGIN + 65;\r\nexport const HWPTAG_SHAPE_COMPONENT_POLYGON = HWPTAG_BEGIN + 66;\r\nexport const HWPTAG_SHAPE_COMPONENT_CURVE = HWPTAG_BEGIN + 67;\r\nexport const HWPTAG_SHAPE_COMPONENT_OLE = HWPTAG_BEGIN + 68;\r\nexport const HWPTAG_SHAPE_COMPONENT_PICTURE = HWPTAG_BEGIN + 69;\r\nexport const HWPTAG_SHAPE_COMPONENT_CONTAINER = HWPTAG_BEGIN + 70;\r\nexport const HWPTAG_CTRL_DATA = HWPTAG_BEGIN + 71;\r\nexport const HWPTAG_EQEDIT = HWPTAG_BEGIN + 72;\r\n// (HWPTAG_BEGIN + 73 \uC608\uC57D)\r\nexport const HWPTAG_SHAPE_COMPONENT_TEXTART = HWPTAG_BEGIN + 74;\r\nexport const HWPTAG_FORM_OBJECT = HWPTAG_BEGIN + 75;\r\nexport const HWPTAG_MEMO_SHAPE = HWPTAG_BEGIN + 76;\r\nexport const HWPTAG_MEMO_LIST = HWPTAG_BEGIN + 77;\r\nexport const HWPTAG_FORBIDDEN_CHAR = HWPTAG_BEGIN + 78;\r\nexport const HWPTAG_CHART_DATA = HWPTAG_BEGIN + 79;\r\n\r\n// ============================================================\r\n// \uC778\uB77C\uC778 \uCEE8\uD2B8\uB864 \uCF54\uB4DC (\uD14D\uC2A4\uD2B8 \uB0B4 \uD2B9\uC218 \uBB38\uC790 \u2014 UTF-16 \uCF54\uB4DC \uD3EC\uC778\uD2B8)\r\n// ============================================================\r\nexport const CHAR_SECTION_COLUMN_DEF = 0x0002;\r\nexport const CHAR_FIELD_BEGIN = 0x0003;\r\nexport const CHAR_FIELD_END = 0x0004;\r\nexport const CHAR_INLINE_NON_TEXT = 0x0008;\r\nexport const CHAR_TAB = 0x0009;\r\nexport const CHAR_LINE_BREAK = 0x000a;\r\nexport const CHAR_EXTENDED_CTRL = 0x000b;\r\nexport const CHAR_PARA_BREAK = 0x000d;\r\nexport const CHAR_NBSPACE = 0x0018;\r\nexport const CHAR_FIXED_WIDTH_SPACE = 0x0019;\r\nexport const CHAR_HYPHEN = 0x001e;\r\nexport const CHAR_FIXED_WIDTH_SPACE_31 = 0x001f;\r\n\r\n/**\r\n * \uC778\uB77C\uC778 \uCEE8\uD2B8\uB864 \uCF54\uB4DC\uB294 16\uBE44\uD2B8 \uC790\uB9AC\uC5D0 1~2\uAC1C \uB4F1\uC7A5\uD55C\uB2E4.\r\n * \uAE38\uC774 1: \uC77C\uBC18 \uBB38\uC790 / Tab / Line break / Para break\r\n * \uAE38\uC774 8: ExtendedCtrl \uB4F1 (ctrl_id + 4\uBC14\uC774\uD2B8 + \uB3D9\uC77C \uCF54\uB4DC \uBC18\uBCF5)\r\n *\r\n * rhwp \uAE30\uC900 8\uC790\uB9AC(=16\uBC14\uC774\uD2B8)\uB97C \uCC28\uC9C0\uD558\uB294 \uCEE8\uD2B8\uB864 \uCF54\uB4DC \uC9D1\uD569.\r\n */\r\nexport function isExtendedCtrlChar(code: number): boolean {\r\n return (\r\n code === CHAR_SECTION_COLUMN_DEF ||\r\n code === CHAR_FIELD_BEGIN ||\r\n code === CHAR_FIELD_END ||\r\n code === CHAR_INLINE_NON_TEXT ||\r\n code === CHAR_EXTENDED_CTRL\r\n );\r\n}\r\n\r\n// ============================================================\r\n// \uCEE8\uD2B8\uB864 ID (4\uBC14\uC774\uD2B8 ASCII \u2192 u32, big-endian \uC778\uCF54\uB529)\r\n// ============================================================\r\nfunction ctrlId(s: string): number {\r\n if (s.length !== 4) throw new Error(`ctrlId requires 4 chars, got \"${s}\"`);\r\n return ((s.charCodeAt(0) << 24) | (s.charCodeAt(1) << 16) | (s.charCodeAt(2) << 8) | s.charCodeAt(3)) >>> 0;\r\n}\r\n\r\nexport const CTRL_SECTION_DEF = ctrlId(\"secd\");\r\nexport const CTRL_COLUMN_DEF = ctrlId(\"cold\");\r\nexport const CTRL_TABLE = ctrlId(\"tbl \");\r\nexport const CTRL_EQUATION = ctrlId(\"eqed\");\r\nexport const CTRL_GEN_SHAPE = ctrlId(\"gso \");\r\nexport const SHAPE_PICTURE_ID = ctrlId(\"$pic\");\r\nexport const SHAPE_RECT_ID = ctrlId(\"$rec\");\r\nexport const SHAPE_LINE_ID = ctrlId(\"$lin\");\r\nexport const SHAPE_ELLIPSE_ID = ctrlId(\"$ell\");\r\nexport const SHAPE_POLYGON_ID = ctrlId(\"$pol\");\r\nexport const SHAPE_ARC_ID = ctrlId(\"$arc\");\r\nexport const SHAPE_CURVE_ID = ctrlId(\"$cur\");\r\nexport const SHAPE_CONNECTOR_ID = ctrlId(\"$col\");\r\nexport const CTRL_HEADER = ctrlId(\"head\");\r\nexport const CTRL_FOOTER = ctrlId(\"foot\");\r\nexport const CTRL_FOOTNOTE = ctrlId(\"fn \");\r\nexport const CTRL_ENDNOTE = ctrlId(\"en \");\r\nexport const CTRL_AUTO_NUMBER = ctrlId(\"atno\");\r\nexport const CTRL_NEW_NUMBER = ctrlId(\"nwno\");\r\nexport const CTRL_PAGE_NUM_POS = ctrlId(\"pgnp\");\r\nexport const CTRL_PAGE_HIDE = ctrlId(\"pghd\");\r\nexport const CTRL_INDEX_MARK = ctrlId(\"idxm\");\r\nexport const CTRL_BOOKMARK = ctrlId(\"bokm\");\r\nexport const CTRL_TCPS = ctrlId(\"tcps\");\r\nexport const CTRL_FORM = ctrlId(\"form\");\r\nexport const CTRL_CHAR_OVERLAP = ctrlId(\"tdut\");\r\nexport const CTRL_HIDDEN_COMMENT = ctrlId(\"tcmt\");\r\n\r\n// \uD544\uB4DC \uCEE8\uD2B8\uB864 (% \uC811\uB450\uC5B4)\r\nexport const FIELD_CLICKHERE = ctrlId(\"%clk\");\r\nexport const FIELD_HYPERLINK = ctrlId(\"%hlk\");\r\nexport const FIELD_BOOKMARK = ctrlId(\"%bmk\");\r\nexport const FIELD_DATE = ctrlId(\"%dte\");\r\nexport const FIELD_DOCDATE = ctrlId(\"%ddt\");\r\nexport const FIELD_PATH = ctrlId(\"%pat\");\r\nexport const FIELD_MAILMERGE = ctrlId(\"%mmg\");\r\nexport const FIELD_CROSSREF = ctrlId(\"%xrf\");\r\nexport const FIELD_FORMULA = ctrlId(\"%fmu\");\r\nexport const FIELD_SUMMARY = ctrlId(\"%smr\");\r\nexport const FIELD_USERINFO = ctrlId(\"%usr\");\r\n\r\nexport function isFieldCtrlId(id: number): boolean {\r\n return ((id >>> 24) & 0xff) === 0x25; // '%'\r\n}\r\n\r\nconst TAG_NAMES: Record<number, string> = {\r\n [HWPTAG_DOCUMENT_PROPERTIES]: \"DOCUMENT_PROPERTIES\",\r\n [HWPTAG_ID_MAPPINGS]: \"ID_MAPPINGS\",\r\n [HWPTAG_BIN_DATA]: \"BIN_DATA\",\r\n [HWPTAG_FACE_NAME]: \"FACE_NAME\",\r\n [HWPTAG_BORDER_FILL]: \"BORDER_FILL\",\r\n [HWPTAG_CHAR_SHAPE]: \"CHAR_SHAPE\",\r\n [HWPTAG_TAB_DEF]: \"TAB_DEF\",\r\n [HWPTAG_NUMBERING]: \"NUMBERING\",\r\n [HWPTAG_BULLET]: \"BULLET\",\r\n [HWPTAG_PARA_SHAPE]: \"PARA_SHAPE\",\r\n [HWPTAG_STYLE]: \"STYLE\",\r\n [HWPTAG_DOC_DATA]: \"DOC_DATA\",\r\n [HWPTAG_DISTRIBUTE_DOC_DATA]: \"DISTRIBUTE_DOC_DATA\",\r\n [HWPTAG_COMPATIBLE_DOCUMENT]: \"COMPATIBLE_DOCUMENT\",\r\n [HWPTAG_LAYOUT_COMPATIBILITY]: \"LAYOUT_COMPATIBILITY\",\r\n [HWPTAG_TRACKCHANGE]: \"TRACKCHANGE\",\r\n [HWPTAG_PARA_HEADER]: \"PARA_HEADER\",\r\n [HWPTAG_PARA_TEXT]: \"PARA_TEXT\",\r\n [HWPTAG_PARA_CHAR_SHAPE]: \"PARA_CHAR_SHAPE\",\r\n [HWPTAG_PARA_LINE_SEG]: \"PARA_LINE_SEG\",\r\n [HWPTAG_PARA_RANGE_TAG]: \"PARA_RANGE_TAG\",\r\n [HWPTAG_CTRL_HEADER]: \"CTRL_HEADER\",\r\n [HWPTAG_LIST_HEADER]: \"LIST_HEADER\",\r\n [HWPTAG_PAGE_DEF]: \"PAGE_DEF\",\r\n [HWPTAG_FOOTNOTE_SHAPE]: \"FOOTNOTE_SHAPE\",\r\n [HWPTAG_PAGE_BORDER_FILL]: \"PAGE_BORDER_FILL\",\r\n [HWPTAG_SHAPE_COMPONENT]: \"SHAPE_COMPONENT\",\r\n [HWPTAG_TABLE]: \"TABLE\",\r\n [HWPTAG_SHAPE_COMPONENT_LINE]: \"SHAPE_LINE\",\r\n [HWPTAG_SHAPE_COMPONENT_RECTANGLE]: \"SHAPE_RECTANGLE\",\r\n [HWPTAG_SHAPE_COMPONENT_ELLIPSE]: \"SHAPE_ELLIPSE\",\r\n [HWPTAG_SHAPE_COMPONENT_ARC]: \"SHAPE_ARC\",\r\n [HWPTAG_SHAPE_COMPONENT_POLYGON]: \"SHAPE_POLYGON\",\r\n [HWPTAG_SHAPE_COMPONENT_CURVE]: \"SHAPE_CURVE\",\r\n [HWPTAG_SHAPE_COMPONENT_OLE]: \"SHAPE_OLE\",\r\n [HWPTAG_SHAPE_COMPONENT_PICTURE]: \"SHAPE_PICTURE\",\r\n [HWPTAG_SHAPE_COMPONENT_CONTAINER]: \"SHAPE_CONTAINER\",\r\n [HWPTAG_CTRL_DATA]: \"CTRL_DATA\",\r\n [HWPTAG_EQEDIT]: \"EQEDIT\",\r\n [HWPTAG_SHAPE_COMPONENT_TEXTART]: \"SHAPE_TEXTART\",\r\n [HWPTAG_FORM_OBJECT]: \"FORM_OBJECT\",\r\n [HWPTAG_MEMO_SHAPE]: \"MEMO_SHAPE\",\r\n [HWPTAG_MEMO_LIST]: \"MEMO_LIST\",\r\n [HWPTAG_FORBIDDEN_CHAR]: \"FORBIDDEN_CHAR\",\r\n [HWPTAG_CHART_DATA]: \"CHART_DATA\",\r\n};\r\n\r\nexport function tagName(tagId: number): string {\r\n return TAG_NAMES[tagId] ?? \"UNKNOWN\";\r\n}\r\n\r\nconst CTRL_NAMES: Record<number, string> = {\r\n [CTRL_SECTION_DEF]: \"SectionDef\",\r\n [CTRL_COLUMN_DEF]: \"ColumnDef\",\r\n [CTRL_TABLE]: \"Table\",\r\n [CTRL_EQUATION]: \"Equation\",\r\n [CTRL_GEN_SHAPE]: \"GenShape\",\r\n [CTRL_HEADER]: \"Header\",\r\n [CTRL_FOOTER]: \"Footer\",\r\n [CTRL_FOOTNOTE]: \"Footnote\",\r\n [CTRL_ENDNOTE]: \"Endnote\",\r\n [CTRL_AUTO_NUMBER]: \"AutoNumber\",\r\n [CTRL_NEW_NUMBER]: \"NewNumber\",\r\n [CTRL_PAGE_NUM_POS]: \"PageNumPos\",\r\n [CTRL_PAGE_HIDE]: \"PageHide\",\r\n [CTRL_INDEX_MARK]: \"IndexMark\",\r\n [CTRL_BOOKMARK]: \"Bookmark\",\r\n [CTRL_TCPS]: \"Tcps\",\r\n [CTRL_FORM]: \"Form\",\r\n [CTRL_CHAR_OVERLAP]: \"CharOverlap\",\r\n [CTRL_HIDDEN_COMMENT]: \"HiddenComment\",\r\n};\r\n\r\nexport function ctrlName(id: number): string {\r\n return CTRL_NAMES[id] ?? \"Unknown\";\r\n}\r\n\r\n/** ctrl_id\uB97C 4\uAE00\uC790 \uBB38\uC790\uC5F4\uB85C (\uB514\uBC84\uADF8 \uC6A9) */\r\nexport function ctrlIdToString(id: number): string {\r\n return String.fromCharCode((id >>> 24) & 0xff, (id >>> 16) & 0xff, (id >>> 8) & 0xff, id & 0xff);\r\n}\r\n", "/**\r\n * HWP \uB808\uCF54\uB4DC \uD5E4\uB354 (4\uBC14\uC774\uD2B8):\r\n * - bits 0..9 : tag_id (0..1023)\r\n * - bits 10..19 : level (0..1023)\r\n * - bits 20..31 : size (0..4095)\r\n * - size == 0xFFF \uC774\uBA74 \uB2E4\uC74C 4\uBC14\uC774\uD2B8\uAC00 \uC2E4\uC81C size (\uD655\uC7A5 \uD06C\uAE30)\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/record.rs (MIT, Copyright (c) 2025-2026 Edward Kim)\r\n */\r\n\r\nimport { tagName } from \"./tags.js\";\r\n\r\nexport interface Record {\r\n tagId: number;\r\n level: number;\r\n size: number;\r\n data: Uint8Array;\r\n}\r\n\r\nexport class RecordError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"RecordError\";\r\n }\r\n}\r\n\r\n/**\r\n * \uBC14\uC774\uD2B8 \uC2A4\uD2B8\uB9BC\uC5D0\uC11C \uBAA8\uB4E0 \uB808\uCF54\uB4DC\uB97C \uD3C9\uD0C4\uD558\uAC8C \uD30C\uC2F1.\r\n * \uD2B8\uB9AC \uC7AC\uAD6C\uC131\uC740 \uD638\uCD9C\uC790\uAC00 level \uD544\uB4DC\uB97C \uBCF4\uACE0 \uC9C1\uC811 \uC218\uD589.\r\n */\r\nexport function readAllRecords(data: Uint8Array): Record[] {\r\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const records: Record[] = [];\r\n let offset = 0;\r\n const end = data.byteLength;\r\n\r\n while (offset < end) {\r\n if (end - offset < 4) {\r\n // \uD2B8\uB808\uC77C\uB9C1 \uD328\uB529\uC73C\uB85C \uAC04\uC8FC\uD558\uACE0 \uC815\uC0C1 \uC885\uB8CC\r\n break;\r\n }\r\n const header = view.getUint32(offset, true);\r\n offset += 4;\r\n\r\n const tagId = header & 0x3ff;\r\n const level = (header >>> 10) & 0x3ff;\r\n let size = header >>> 20;\r\n\r\n if (size === 0xfff) {\r\n if (end - offset < 4) {\r\n throw new RecordError(`extended size \uD5E4\uB354 \uC911\uAC04 EOF (tag=${tagId})`);\r\n }\r\n size = view.getUint32(offset, true);\r\n offset += 4;\r\n }\r\n\r\n if (offset + size > end) {\r\n throw new RecordError(\r\n `\uB808\uCF54\uB4DC \uB370\uC774\uD130 \uBD80\uC871: tag=${tagId}/${tagName(tagId)}, \uD544\uC694=${size}, \uAC00\uC6A9=${end - offset}`\r\n );\r\n }\r\n\r\n const recordData = new Uint8Array(data.buffer, data.byteOffset + offset, size);\r\n offset += size;\r\n\r\n records.push({\r\n tagId,\r\n level,\r\n size,\r\n data: new Uint8Array(recordData), // \uBCF5\uC0AC\r\n });\r\n }\r\n\r\n return records;\r\n}\r\n\r\nexport function recordTagName(rec: Record): string {\r\n return tagName(rec.tagId);\r\n}\r\n", "/**\r\n * DocInfo \uC2A4\uD2B8\uB9BC \uD30C\uC2F1 \u2014 1\uCC28 \uD3EC\uD305.\r\n *\r\n * 1\uCC28 \uBC94\uC704: BIN_DATA, FACE_NAME, CHAR_SHAPE, PARA_SHAPE, STYLE.\r\n * BORDER_FILL/NUMBERING/BULLET/TAB_DEF \uB4F1\uC740 2\uCC28 \uB2E8\uACC4.\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/doc_info.rs (MIT, Edward Kim)\r\n */\r\n\r\nimport { ByteReader } from \"./byteReader.js\";\r\nimport { readAllRecords } from \"./record.js\";\r\nimport {\r\n HWPTAG_DOCUMENT_PROPERTIES,\r\n HWPTAG_ID_MAPPINGS,\r\n HWPTAG_BIN_DATA,\r\n HWPTAG_FACE_NAME,\r\n HWPTAG_BORDER_FILL,\r\n HWPTAG_CHAR_SHAPE,\r\n HWPTAG_TAB_DEF,\r\n HWPTAG_NUMBERING,\r\n HWPTAG_BULLET,\r\n HWPTAG_PARA_SHAPE,\r\n HWPTAG_STYLE,\r\n} from \"./tags.js\";\r\nimport type {\r\n HwpBinDataRef,\r\n HwpBorderFill,\r\n HwpBorderLine,\r\n HwpBullet,\r\n HwpCharShape,\r\n HwpDiagonalLine,\r\n HwpDocInfo,\r\n HwpFaceName,\r\n HwpNumbering,\r\n HwpParaShape,\r\n HwpSolidFill,\r\n HwpStyle,\r\n HwpTabDef,\r\n} from \"./types.js\";\r\n\r\nexport class DocInfoError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"DocInfoError\";\r\n }\r\n}\r\n\r\nexport interface DocProperties {\r\n sectionCount: number;\r\n pageStartNum: number;\r\n footnoteStartNum: number;\r\n endnoteStartNum: number;\r\n pictureStartNum: number;\r\n tableStartNum: number;\r\n equationStartNum: number;\r\n}\r\n\r\nexport interface DocInfoParseResult {\r\n docInfo: HwpDocInfo;\r\n docProperties: DocProperties;\r\n}\r\n\r\ninterface IdMappings {\r\n binDataCount: number;\r\n fontCounts: number[]; // length 7\r\n borderFillCount: number;\r\n charShapeCount: number;\r\n tabDefCount: number;\r\n numberingCount: number;\r\n bulletCount: number;\r\n paraShapeCount: number;\r\n styleCount: number;\r\n}\r\n\r\nconst DEFAULT_DOC_PROPS: DocProperties = {\r\n sectionCount: 1,\r\n pageStartNum: 1,\r\n footnoteStartNum: 1,\r\n endnoteStartNum: 1,\r\n pictureStartNum: 1,\r\n tableStartNum: 1,\r\n equationStartNum: 1,\r\n};\r\n\r\nexport function parseDocInfo(data: Uint8Array): DocInfoParseResult {\r\n const records = readAllRecords(data);\r\n\r\n const binData: HwpBinDataRef[] = [];\r\n const fontFaces: HwpFaceName[][] = Array.from({ length: 7 }, () => []);\r\n const charShapes: HwpCharShape[] = [];\r\n const paraShapes: HwpParaShape[] = [];\r\n const styles: HwpStyle[] = [];\r\n const borderFills: HwpBorderFill[] = [];\r\n const numberings: HwpNumbering[] = [];\r\n const bullets: HwpBullet[] = [];\r\n const tabDefs: HwpTabDef[] = [];\r\n let docProps = { ...DEFAULT_DOC_PROPS };\r\n let idMappings: IdMappings | null = null;\r\n let currentLang = 0;\r\n const langConsumed = [0, 0, 0, 0, 0, 0, 0];\r\n\r\n for (const rec of records) {\r\n switch (rec.tagId) {\r\n case HWPTAG_DOCUMENT_PROPERTIES:\r\n docProps = parseDocumentProperties(rec.data);\r\n break;\r\n case HWPTAG_ID_MAPPINGS:\r\n idMappings = parseIdMappings(rec.data);\r\n break;\r\n case HWPTAG_BIN_DATA:\r\n binData.push(parseBinData(rec.data));\r\n break;\r\n case HWPTAG_FACE_NAME: {\r\n const font = parseFaceName(rec.data);\r\n if (idMappings) {\r\n while (\r\n currentLang < 7 &&\r\n langConsumed[currentLang] >= idMappings.fontCounts[currentLang]\r\n ) {\r\n currentLang++;\r\n }\r\n if (currentLang < 7) {\r\n fontFaces[currentLang].push(font);\r\n langConsumed[currentLang]++;\r\n } else {\r\n fontFaces[6].push(font);\r\n }\r\n } else {\r\n fontFaces[0].push(font);\r\n }\r\n break;\r\n }\r\n case HWPTAG_BORDER_FILL:\r\n borderFills.push(parseBorderFill(rec.data));\r\n break;\r\n case HWPTAG_CHAR_SHAPE:\r\n charShapes.push(parseCharShape(rec.data));\r\n break;\r\n case HWPTAG_TAB_DEF:\r\n tabDefs.push(parseTabDef(rec.data));\r\n break;\r\n case HWPTAG_NUMBERING:\r\n numberings.push(parseNumbering(rec.data));\r\n break;\r\n case HWPTAG_BULLET:\r\n bullets.push(parseBullet(rec.data));\r\n break;\r\n case HWPTAG_PARA_SHAPE:\r\n paraShapes.push(parseParaShape(rec.data));\r\n break;\r\n case HWPTAG_STYLE:\r\n styles.push(parseStyle(rec.data));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n docInfo: {\r\n fontFaces,\r\n charShapes,\r\n paraShapes,\r\n styles,\r\n binData,\r\n borderFills,\r\n numberings,\r\n bullets,\r\n tabDefs,\r\n },\r\n docProperties: docProps,\r\n };\r\n}\r\n\r\nfunction parseBorderFill(data: Uint8Array): HwpBorderFill {\r\n const r = new ByteReader(data);\r\n const attr = r.remaining() >= 2 ? r.readU16() : 0;\r\n\r\n // 4\uBA74 \uD14C\uB450\uB9AC: \uC88C/\uC6B0/\uC0C1/\uD558 \uC778\uD130\uB9AC\uBE0C \u2014 { type u8, width u8, color u32 }\r\n const readBorder = () => {\r\n if (r.remaining() < 6) {\r\n return { lineType: 1, widthIndex: 0, color: 0 };\r\n }\r\n const lineType = r.readU8();\r\n const widthIndex = r.readU8();\r\n const color = r.readColorRef();\r\n return { lineType, widthIndex, color };\r\n };\r\n const borders: [HwpBorderLine, HwpBorderLine, HwpBorderLine, HwpBorderLine] = [\r\n readBorder(),\r\n readBorder(),\r\n readBorder(),\r\n readBorder(),\r\n ];\r\n\r\n // \uB300\uAC01\uC120\r\n let diagonal: HwpDiagonalLine = { diagonalType: 0, widthIndex: 0, color: 0 };\r\n if (r.remaining() >= 6) {\r\n diagonal = {\r\n diagonalType: r.readU8(),\r\n widthIndex: r.readU8(),\r\n color: r.readColorRef(),\r\n };\r\n }\r\n\r\n // \uCC44\uC6B0\uAE30: u32 fillType \uBE44\uD2B8\uB9C8\uC2A4\uD06C + \uC885\uB958\uBCC4 \uB370\uC774\uD130\r\n let fill: HwpSolidFill | undefined;\r\n if (r.remaining() >= 4) {\r\n const fillType = r.readU32();\r\n if (fillType === 0) {\r\n // \uCC44\uC6B0\uAE30 \uC5C6\uC74C: hwplib \uAE30\uC900 4\uBC14\uC774\uD2B8 \uCD94\uAC00 skip\r\n if (r.remaining() >= 4) r.skip(4);\r\n } else if ((fillType & 0x01) !== 0) {\r\n // solid\r\n if (r.remaining() >= 12) {\r\n fill = {\r\n backgroundColor: r.readColorRef(),\r\n patternColor: r.readColorRef(),\r\n patternType: r.readI32(),\r\n };\r\n }\r\n // gradient/image \uB294 1\uCC28 \uD3EC\uD305\uC5D0\uC11C \uBB34\uC2DC (\uC774\uD6C4 \uBC14\uC774\uD2B8 \uBB34\uC2DC)\r\n }\r\n }\r\n\r\n return { attr, borders, diagonal, fill };\r\n}\r\n\r\nfunction parseTabDef(data: Uint8Array): HwpTabDef {\r\n const r = new ByteReader(data);\r\n const attr = r.remaining() >= 4 ? r.readU32() : 0;\r\n return {\r\n attr,\r\n autoTabLeft: (attr & 0x01) !== 0,\r\n autoTabRight: (attr & 0x02) !== 0,\r\n };\r\n}\r\n\r\nfunction parseNumbering(data: Uint8Array): HwpNumbering {\r\n const r = new ByteReader(data);\r\n const levelFormats: string[] = [\"\", \"\", \"\", \"\", \"\", \"\", \"\"];\r\n\r\n // 7 \uB808\uBCA8 \u00D7 { attr(u32) + widthAdjust(i16) + textDistance(i16) + charShapeId(u32) + formatLen(u16) + WCHAR[formatLen] }\r\n for (let level = 0; level < 7; level++) {\r\n if (r.remaining() < 12) break;\r\n r.readU32(); // attr\r\n r.readI16(); // widthAdjust\r\n r.readI16(); // textDistance\r\n r.readU32(); // charShapeId\r\n\r\n if (r.remaining() < 2) break;\r\n const formatLen = r.readU16();\r\n if (formatLen > 0 && r.remaining() >= formatLen * 2) {\r\n try {\r\n levelFormats[level] = r.readUtf16(formatLen);\r\n } catch {\r\n // skip\r\n }\r\n }\r\n }\r\n\r\n const startNumber = r.remaining() >= 2 ? r.readU16() : 1;\r\n return { startNumber, levelFormats };\r\n}\r\n\r\nfunction parseBullet(data: Uint8Array): HwpBullet {\r\n const r = new ByteReader(data);\r\n // attr(u32) + widthAdjust(i16) + textDistance(i16) + charShapeId(u32)\r\n if (r.remaining() < 12) return { bulletChar: \"\u25CF\" };\r\n r.readU32();\r\n r.readI16();\r\n r.readI16();\r\n r.readU32();\r\n if (r.remaining() < 2) return { bulletChar: \"\u25CF\" };\r\n const bulletCharCode = r.readU16();\r\n const bulletChar = bulletCharCode > 0 ? String.fromCharCode(bulletCharCode) : \"\u25CF\";\r\n return { bulletChar };\r\n}\r\n\r\nfunction parseIdMappings(data: Uint8Array): IdMappings {\r\n const r = new ByteReader(data);\r\n const safe = (n: number) => (r.remaining() >= 4 ? r.readU32() : n);\r\n return {\r\n binDataCount: safe(0),\r\n fontCounts: [safe(0), safe(0), safe(0), safe(0), safe(0), safe(0), safe(0)],\r\n borderFillCount: safe(0),\r\n charShapeCount: safe(0),\r\n tabDefCount: safe(0),\r\n numberingCount: safe(0),\r\n bulletCount: safe(0),\r\n paraShapeCount: safe(0),\r\n styleCount: safe(0),\r\n };\r\n}\r\n\r\nfunction parseDocumentProperties(data: Uint8Array): DocProperties {\r\n const r = new ByteReader(data);\r\n const safe = (n: number) => (r.remaining() >= 2 ? r.readU16() : n);\r\n return {\r\n sectionCount: safe(1),\r\n pageStartNum: safe(1),\r\n footnoteStartNum: safe(1),\r\n endnoteStartNum: safe(1),\r\n pictureStartNum: safe(1),\r\n tableStartNum: safe(1),\r\n equationStartNum: safe(1),\r\n };\r\n}\r\n\r\nfunction parseBinData(data: Uint8Array): HwpBinDataRef {\r\n const r = new ByteReader(data);\r\n const attr = r.readU16();\r\n const typeBits = attr & 0x000f;\r\n let type: HwpBinDataRef[\"type\"];\r\n switch (typeBits) {\r\n case 0:\r\n type = \"link\";\r\n break;\r\n case 1:\r\n type = \"embedding\";\r\n break;\r\n case 2:\r\n type = \"storage\";\r\n break;\r\n default:\r\n type = \"link\";\r\n break;\r\n }\r\n\r\n if (type === \"link\") {\r\n // absPath, relPath \u2014 1\uCC28 \uD3EC\uD305\uC5D0\uC11C\uB294 \uBB34\uC2DC\r\n safeReadHwpString(r);\r\n safeReadHwpString(r);\r\n return { storageId: 0, type };\r\n }\r\n const storageId = r.remaining() >= 2 ? r.readU16() : 0;\r\n const extension = safeReadHwpString(r);\r\n return { storageId, extension, type };\r\n}\r\n\r\nfunction parseFaceName(data: Uint8Array): HwpFaceName {\r\n const r = new ByteReader(data);\r\n const attr = r.readU8();\r\n const name = safeReadHwpString(r) ?? \"\";\r\n let substituteName: string | undefined;\r\n if ((attr & 0x80) !== 0) {\r\n substituteName = safeReadHwpString(r);\r\n }\r\n return { name, substituteName };\r\n}\r\n\r\nfunction parseCharShape(data: Uint8Array): HwpCharShape {\r\n const r = new ByteReader(data);\r\n\r\n const fontIds: number[] = [];\r\n for (let i = 0; i < 7; i++) fontIds.push(r.readU16());\r\n // ratios u8x7\r\n for (let i = 0; i < 7; i++) r.readU8();\r\n // spacings i8x7\r\n for (let i = 0; i < 7; i++) r.readI8();\r\n // relativeSizes u8x7\r\n for (let i = 0; i < 7; i++) r.readU8();\r\n // charOffsets i8x7\r\n for (let i = 0; i < 7; i++) r.readI8();\r\n\r\n const baseSize = r.readI32();\r\n const attr = r.readU32();\r\n\r\n // shadow_offset_x, shadow_offset_y (i8 x 2)\r\n r.readI8();\r\n r.readI8();\r\n\r\n const textColor = r.readColorRef();\r\n const underlineColor = r.readColorRef();\r\n const shadeColor = r.readColorRef();\r\n const shadowColor = r.readColorRef();\r\n\r\n return {\r\n faceNameIds: {\r\n hangul: fontIds[0],\r\n latin: fontIds[1],\r\n hanja: fontIds[2],\r\n japanese: fontIds[3],\r\n other: fontIds[4],\r\n symbol: fontIds[5],\r\n user: fontIds[6],\r\n },\r\n baseSize,\r\n property: attr,\r\n textColor,\r\n shadeColor,\r\n underlineColor,\r\n shadowColor,\r\n bold: (attr & 0x02) !== 0,\r\n italic: (attr & 0x01) !== 0,\r\n underline: ((attr >>> 2) & 0x03) !== 0,\r\n strikeout: ((attr >>> 18) & 0x07) > 1,\r\n };\r\n}\r\n\r\nfunction parseParaShape(data: Uint8Array): HwpParaShape {\r\n const r = new ByteReader(data);\r\n const attr1 = r.readU32();\r\n const leftMargin = r.readI32();\r\n const rightMargin = r.readI32();\r\n const indent = r.readI32();\r\n const prevSpacing = r.readI32();\r\n const nextSpacing = r.readI32();\r\n const lineSpacing = r.readI32();\r\n\r\n const alignBits = (attr1 >>> 2) & 0x07;\r\n let alignment: HwpParaShape[\"alignment\"];\r\n switch (alignBits) {\r\n case 0:\r\n alignment = \"justify\";\r\n break;\r\n case 1:\r\n alignment = \"left\";\r\n break;\r\n case 2:\r\n alignment = \"right\";\r\n break;\r\n case 3:\r\n alignment = \"center\";\r\n break;\r\n case 4:\r\n alignment = \"distribute\";\r\n break;\r\n case 5:\r\n alignment = \"distributeSpace\";\r\n break;\r\n default:\r\n alignment = \"unknown\";\r\n }\r\n\r\n return {\r\n alignment,\r\n property: attr1,\r\n leftMargin,\r\n rightMargin,\r\n indent,\r\n prevSpacing,\r\n nextSpacing,\r\n lineSpacing,\r\n };\r\n}\r\n\r\nfunction parseStyle(data: Uint8Array): HwpStyle {\r\n const r = new ByteReader(data);\r\n const name = safeReadHwpString(r) ?? \"\";\r\n const engName = safeReadHwpString(r);\r\n // properties u8, next u8, lang u8 \u2014 \uC77C\uB2E8 skip\r\n if (r.remaining() >= 3) {\r\n r.readU8();\r\n r.readU8();\r\n r.readU8();\r\n }\r\n const paraShapeId = r.remaining() >= 2 ? r.readU16() : 0;\r\n const charShapeId = r.remaining() >= 2 ? r.readU16() : 0;\r\n return { name, engName, paraShapeId, charShapeId };\r\n}\r\n\r\nfunction safeReadHwpString(r: ByteReader): string | undefined {\r\n if (r.remaining() < 2) return undefined;\r\n try {\r\n return r.readHwpString();\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n", "/**\r\n * \uCEE8\uD2B8\uB864 \uD30C\uC2F1 (CTRL_HEADER \uC758 ctrl_id \uBCC4 \uBD84\uAE30).\r\n *\r\n * 1\uCC28 \uD3EC\uD305 \uBC94\uC704: \uD45C(tbl) / \uADF8\uB9BC(gso+pic) / \uBA38\uB9AC\uB9D0(head) / \uAF2C\uB9AC\uB9D0(foot) / \uAC01\uC8FC(fn)\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/control.rs (MIT, Edward Kim)\r\n */\r\n\r\nimport { ByteReader } from \"./byteReader.js\";\r\nimport type { Record } from \"./record.js\";\r\nimport {\r\n CTRL_TABLE,\r\n CTRL_GEN_SHAPE,\r\n CTRL_HEADER,\r\n CTRL_FOOTER,\r\n CTRL_FOOTNOTE,\r\n CTRL_EQUATION,\r\n HWPTAG_TABLE,\r\n HWPTAG_LIST_HEADER,\r\n HWPTAG_SHAPE_COMPONENT,\r\n HWPTAG_SHAPE_COMPONENT_PICTURE,\r\n HWPTAG_SHAPE_COMPONENT_LINE,\r\n HWPTAG_SHAPE_COMPONENT_RECTANGLE,\r\n HWPTAG_SHAPE_COMPONENT_ELLIPSE,\r\n HWPTAG_SHAPE_COMPONENT_ARC,\r\n HWPTAG_SHAPE_COMPONENT_POLYGON,\r\n HWPTAG_SHAPE_COMPONENT_CURVE,\r\n HWPTAG_EQEDIT,\r\n ctrlIdToString,\r\n isFieldCtrlId,\r\n} from \"./tags.js\";\r\nimport type {\r\n HwpControl,\r\n HwpParagraph,\r\n HwpTableCell,\r\n} from \"./types.js\";\r\n\r\n/**\r\n * CTRL_HEADER \uB808\uCF54\uB4DC\uC640 \uADF8 \uC790\uC2DD \uB808\uCF54\uB4DC\uB4E4\uC744 \uBC1B\uC544 HwpControl \uB85C \uBCC0\uD658.\r\n *\r\n * @param ctrlHeader CTRL_HEADER \uB808\uCF54\uB4DC \uC790\uCCB4\r\n * @param children CTRL_HEADER \uC758 \uC790\uC2DD \uB808\uCF54\uB4DC\uB4E4 (level > ctrlHeader.level). subtree \uC758 \uD6C4\uC190\uAE4C\uC9C0 \uD3EC\uD568.\r\n * @param parseParagraphList \uC7AC\uADC0 \uD30C\uC2F1\uC6A9 \uCF5C\uBC31 \u2014 \uC140/\uBA38\uB9AC\uB9D0 \uB4F1 \uB0B4\uBD80 \uBB38\uB2E8 \uCD94\uCD9C\r\n */\r\nexport function parseCtrlHeader(\r\n ctrlHeader: Record,\r\n children: Record[],\r\n parseParagraphList: (records: Record[], baseLevel: number) => HwpParagraph[]\r\n): HwpControl {\r\n if (ctrlHeader.data.byteLength < 4) {\r\n return { kind: \"unknown\", ctrlId: \"\" };\r\n }\r\n // ctrl_id \uB294 \uCCAB 4\uBC14\uC774\uD2B8\uC758 u32(LE) \uAC12. tags.ts \uC758 ctrlId() \uC640 \uB3D9\uC77C\uD55C big-endian \uD45C\uAE30 \uC815\uC218\uB97C \uBC18\uD658\uD558\uB3C4\uB85D \uBCC0\uD658.\r\n // \uD30C\uC77C\uC5D0\uB294 \"secd\" \uAC00 [0x64, 0x63, 0x65, 0x73] \uC21C\uC11C(LE u32)\uB85C \uC800\uC7A5\uB418\uBA70, \uAC19\uC740 4\uAE00\uC790\uB97C BE u32 \uB85C \uC778\uCF54\uB529\uD55C \uAC12\uACFC \uB3D9\uC77C.\r\n const r = new ByteReader(ctrlHeader.data);\r\n const ctrlIdRaw = r.readU32(); // LE u32 \u2192 \uADF8\uB300\uB85C BE \uC778\uCF54\uB529\uD55C ctrl_id \uC640 \uC77C\uCE58\r\n const ctrlData = ctrlHeader.data.subarray(4);\r\n\r\n switch (ctrlIdRaw) {\r\n case CTRL_TABLE:\r\n return parseTableControl(ctrlHeader, children, parseParagraphList);\r\n case CTRL_GEN_SHAPE:\r\n return parseGsoControl(ctrlHeader, children);\r\n case CTRL_HEADER:\r\n return {\r\n kind: \"header\",\r\n paragraphs: collectListHeaderParagraphs(ctrlHeader, children, parseParagraphList),\r\n };\r\n case CTRL_FOOTER:\r\n return {\r\n kind: \"footer\",\r\n paragraphs: collectListHeaderParagraphs(ctrlHeader, children, parseParagraphList),\r\n };\r\n case CTRL_FOOTNOTE:\r\n return {\r\n kind: \"footnote\",\r\n paragraphs: collectListHeaderParagraphs(ctrlHeader, children, parseParagraphList),\r\n };\r\n case CTRL_EQUATION:\r\n return parseEquationControl(ctrlHeader, children);\r\n default:\r\n if (isFieldCtrlId(ctrlIdRaw)) {\r\n return parseFieldControl(ctrlIdRaw, ctrlData);\r\n }\r\n return { kind: \"unknown\", ctrlId: ctrlIdToString(ctrlIdRaw) };\r\n }\r\n}\r\n\r\n// ============================================================\r\n// \uD45C\r\n// ============================================================\r\n\r\nfunction parseTableControl(\r\n ctrlHeader: Record,\r\n children: Record[],\r\n parseParagraphList: (records: Record[], baseLevel: number) => HwpParagraph[]\r\n): HwpControl {\r\n const baseLevel = ctrlHeader.level;\r\n let rowCount = 0;\r\n let colCount = 0;\r\n const cells: HwpTableCell[] = [];\r\n\r\n // \uC790\uC2DD \uC911 \uC9C1\uC811 \uC790\uC2DD(level == baseLevel + 1) \uB9CC \uCC98\uB9AC.\r\n // - HWPTAG_TABLE: \uD45C \uBA54\uD0C0\uB370\uC774\uD130 (\uD589/\uC5F4)\r\n // - HWPTAG_LIST_HEADER: \uC140 (\uADF8 \uC790\uCCB4\uB294 \uB808\uBCA8 baseLevel+1)\r\n // \uAC01 \uC140\uC758 \uB0B4\uBD80 \uBB38\uB2E8 PARA_HEADER \uB294 level baseLevel+2\r\n\r\n let tableSeen = false;\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n const r = children[i];\r\n if (r.level !== baseLevel + 1) continue;\r\n\r\n if (r.tagId === HWPTAG_TABLE) {\r\n tableSeen = true;\r\n const meta = parseTableMeta(r.data);\r\n rowCount = meta.rowCount;\r\n colCount = meta.colCount;\r\n } else if (r.tagId === HWPTAG_LIST_HEADER) {\r\n // TABLE \uB808\uCF54\uB4DC \uC774\uC804\uC758 LIST_HEADER \uB294 \uCEA1\uC158 \u2014 1\uCC28 \uD3EC\uD305\uC5D0\uC11C\uB294 \uBB34\uC2DC\r\n if (!tableSeen) continue;\r\n\r\n // \uC140 \uBA54\uD0C0\uB370\uC774\uD130 \uD30C\uC2F1 (LIST_HEADER \uC758 \uB370\uC774\uD130)\r\n const cellMeta = parseCellMeta(r.data);\r\n\r\n // HWP \uC140 \uAD6C\uC870 \uD2B9\uC774\uC810: LIST_HEADER \uC640 \uADF8 \uC140\uC758 PARA_HEADER \uAC00 \uAC19\uC740 level \uC774\uB2E4.\r\n // \uB530\uB77C\uC11C \uC140 \uBC94\uC704\uB294 \uB2E4\uC74C LIST_HEADER \uB610\uB294 TABLE (\uAC19\uC740 level) \uAE4C\uC9C0.\r\n // PARA_HEADER \uB294 \uAC19\uC740 level \uC774\uB77C\uB3C4 \uC140 \uB0B4\uC6A9\uC774\uBBC0\uB85C \uD3EC\uD568\uC2DC\uD0A8\uB2E4.\r\n const cellChildren: Record[] = [];\r\n for (let j = i + 1; j < children.length; j++) {\r\n const cr = children[j];\r\n if (cr.level < baseLevel + 1) break; // \uC11C\uBE0C\uD2B8\uB9AC \uD0C8\uCD9C\r\n if (cr.level === baseLevel + 1) {\r\n if (cr.tagId === HWPTAG_LIST_HEADER || cr.tagId === HWPTAG_TABLE) break;\r\n }\r\n cellChildren.push(cr);\r\n }\r\n // \uC140 \uBB38\uB2E8\uC740 LIST_HEADER \uC640 \uAC19\uC740 level (baseLevel + 1)\r\n const cellParagraphs = parseParagraphList(cellChildren, baseLevel + 1);\r\n cells.push({\r\n col: cellMeta.col,\r\n row: cellMeta.row,\r\n colSpan: cellMeta.colSpan,\r\n rowSpan: cellMeta.rowSpan,\r\n paragraphs: cellParagraphs,\r\n });\r\n }\r\n }\r\n\r\n return { kind: \"table\", rowCount, colCount, cells };\r\n}\r\n\r\ninterface TableMeta {\r\n rowCount: number;\r\n colCount: number;\r\n}\r\n\r\nfunction parseTableMeta(data: Uint8Array): TableMeta {\r\n const r = new ByteReader(data);\r\n if (r.remaining() < 8) return { rowCount: 0, colCount: 0 };\r\n r.readU32(); // attr\r\n const rowCount = r.readU16();\r\n const colCount = r.readU16();\r\n return { rowCount, colCount };\r\n}\r\n\r\ninterface CellMeta {\r\n col: number;\r\n row: number;\r\n colSpan: number;\r\n rowSpan: number;\r\n}\r\n\r\nfunction parseCellMeta(data: Uint8Array): CellMeta {\r\n const r = new ByteReader(data);\r\n // LIST_HEADER \uACF5\uD1B5: nParagraphs(u16) + listAttr(u32) + listHeaderWidthRef(u16)\r\n if (r.remaining() < 8) return { col: 0, row: 0, colSpan: 1, rowSpan: 1 };\r\n r.readU16();\r\n r.readU32();\r\n r.readU16();\r\n // \uC140 \uBA54\uD0C0: col(u16) row(u16) colSpan(u16) rowSpan(u16)\r\n if (r.remaining() < 8) return { col: 0, row: 0, colSpan: 1, rowSpan: 1 };\r\n const col = r.readU16();\r\n const row = r.readU16();\r\n const colSpan = r.readU16();\r\n const rowSpan = r.readU16();\r\n return {\r\n col,\r\n row,\r\n colSpan: colSpan === 0 ? 1 : colSpan,\r\n rowSpan: rowSpan === 0 ? 1 : rowSpan,\r\n };\r\n}\r\n\r\n// ============================================================\r\n// \uADF8\uB9AC\uAE30 \uAC1C\uCCB4 (gso) \u2014 1\uCC28 \uD3EC\uD305: PICTURE \uB9CC \uCD94\uCD9C\r\n// ============================================================\r\n\r\nfunction parseGsoControl(ctrlHeader: Record, children: Record[]): HwpControl {\r\n const baseLevel = ctrlHeader.level;\r\n\r\n // \uADF8\uB9BC\uC774 \uC6B0\uC120 \u2014 SHAPE_COMPONENT_PICTURE \uB808\uCF54\uB4DC \uAC80\uC0C9\r\n for (const r of children) {\r\n if (r.tagId === HWPTAG_SHAPE_COMPONENT_PICTURE && r.level <= baseLevel + 3) {\r\n const binDataId = parsePictureBinDataId(r.data);\r\n if (binDataId !== undefined) {\r\n return { kind: \"picture\", binDataId };\r\n }\r\n }\r\n }\r\n\r\n // \uB3C4\uD615 (line/rect/ellipse/arc/polygon/curve)\r\n for (const r of children) {\r\n if (r.level > baseLevel + 3) continue;\r\n switch (r.tagId) {\r\n case HWPTAG_SHAPE_COMPONENT_LINE:\r\n return parseLineShape(r.data);\r\n case HWPTAG_SHAPE_COMPONENT_RECTANGLE:\r\n return { kind: \"shape\", shapeType: \"rectangle\" };\r\n case HWPTAG_SHAPE_COMPONENT_ELLIPSE:\r\n return { kind: \"shape\", shapeType: \"ellipse\" };\r\n case HWPTAG_SHAPE_COMPONENT_ARC:\r\n return { kind: \"shape\", shapeType: \"arc\" };\r\n case HWPTAG_SHAPE_COMPONENT_POLYGON:\r\n return { kind: \"shape\", shapeType: \"polygon\" };\r\n case HWPTAG_SHAPE_COMPONENT_CURVE:\r\n return { kind: \"shape\", shapeType: \"curve\" };\r\n }\r\n }\r\n\r\n return { kind: \"unknown\", ctrlId: \"gso \" };\r\n}\r\n\r\nfunction parseLineShape(data: Uint8Array): HwpControl {\r\n // SHAPE_LINE: x1(i32), y1(i32), x2(i32), y2(i32) + \uCD94\uAC00 \uC18D\uC131\r\n if (data.byteLength < 16) return { kind: \"shape\", shapeType: \"line\" };\r\n const r = new ByteReader(data);\r\n const x1 = r.readI32();\r\n const y1 = r.readI32();\r\n const x2 = r.readI32();\r\n const y2 = r.readI32();\r\n return { kind: \"shape\", shapeType: \"line\", x1, y1, x2, y2 };\r\n}\r\n\r\n// ============================================================\r\n// \uC218\uC2DD\r\n// ============================================================\r\n\r\nfunction parseEquationControl(ctrlHeader: Record, children: Record[]): HwpControl {\r\n // EQEDIT \uB808\uCF54\uB4DC\uB97C \uC790\uC2DD\uC5D0\uC11C \uCC3E\uB294\uB2E4.\r\n // EQEDIT \uB808\uC774\uC544\uC6C3: u32 attr + u16 width + u16 height + u32 charCount(?) + WCHAR script + ...\r\n // \uC5EC\uAE30\uC11C\uB294 \uB2E8\uC21C\uD788 UTF-16 \uBB38\uC790\uC5F4\uC744 \uCD94\uCD9C\uD574\uC11C \uBC18\uD658.\r\n for (const r of children) {\r\n if (r.tagId === HWPTAG_EQEDIT) {\r\n return { kind: \"equation\", script: extractEquationScript(r.data) };\r\n }\r\n }\r\n return { kind: \"equation\", script: \"\" };\r\n}\r\n\r\nfunction extractEquationScript(data: Uint8Array): string {\r\n // \uBCF4\uC218\uC801\uC73C\uB85C \uD30C\uC2F1: u32 attr \uB2E4\uC74C \uAC00\uBCC0. HWP \uC2A4\uD399\uC0C1:\r\n // u32 attr | i16 nLine | i16 lineHeight | u8 charScale | u32 baseUnit |\r\n // u16 strLen | WCHAR script[strLen] | u16 charSet | i32 fontSize ...\r\n // strLen \uC774 \uC5B4\uB514\uC778\uC9C0 \uCC3E\uAE30 \uC704\uD574 \uCC98\uC74C \uBA87 u16 \uC758 \uD328\uD134\uC744 \uAC80\uC0AC.\r\n const r = new ByteReader(data);\r\n if (r.remaining() < 4) return \"\";\r\n r.readU32(); // attr\r\n // nLine, lineHeight (i16 x 2), charScale (u8), baseUnit (u32) \u2014 11\uBC14\uC774\uD2B8\r\n if (r.remaining() < 11) return \"\";\r\n r.skip(11);\r\n if (r.remaining() < 2) return \"\";\r\n const strLen = r.readU16();\r\n if (strLen === 0 || strLen > 10000) return \"\";\r\n const need = strLen * 2;\r\n if (r.remaining() < need) return \"\";\r\n try {\r\n return r.readUtf16(strLen);\r\n } catch {\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * SHAPE_COMPONENT_PICTURE \uB808\uCF54\uB4DC\uC5D0\uC11C bin_data_id \uCD94\uCD9C.\r\n * \uB808\uC774\uC544\uC6C3 (rhwp \uAE30\uC900):\r\n * border_color u32 (4)\r\n * border_width i32 (4)\r\n * border_attr u32 (4)\r\n * border_x[4] i32 each (16)\r\n * border_y[4] i32 each (16)\r\n * crop 4x i32 (16)\r\n * padding 4x i16 (8)\r\n * brightness i8 (1)\r\n * contrast i8 (1)\r\n * effect u8 (1)\r\n * bin_data_id u16 (2) \u2190 offset 71\r\n */\r\nfunction parsePictureBinDataId(data: Uint8Array): number | undefined {\r\n const OFFSET = 4 + 4 + 4 + 16 + 16 + 16 + 8 + 1 + 1 + 1; // 71\r\n if (data.byteLength < OFFSET + 2) return undefined;\r\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n return view.getUint16(OFFSET, true);\r\n}\r\n\r\n// ============================================================\r\n// LIST_HEADER \uAE30\uBC18 \uCEE8\uD2B8\uB864 (head/foot/fn)\r\n// ============================================================\r\n\r\nfunction collectListHeaderParagraphs(\r\n ctrlHeader: Record,\r\n children: Record[],\r\n parseParagraphList: (records: Record[], baseLevel: number) => HwpParagraph[]\r\n): HwpParagraph[] {\r\n const baseLevel = ctrlHeader.level;\r\n // \uCCAB LIST_HEADER (level baseLevel+1) \uC758 \uC790\uC2DD PARA_HEADER (level baseLevel+2) \uC218\uC9D1\r\n const lhIdx = children.findIndex(\r\n (r) => r.tagId === HWPTAG_LIST_HEADER && r.level === baseLevel + 1\r\n );\r\n if (lhIdx < 0) return [];\r\n\r\n const subtree: Record[] = [];\r\n for (let j = lhIdx + 1; j < children.length; j++) {\r\n if (children[j].level <= baseLevel + 1) break;\r\n subtree.push(children[j]);\r\n }\r\n return parseParagraphList(subtree, baseLevel + 2);\r\n}\r\n\r\n// ============================================================\r\n// \uD544\uB4DC \uCEE8\uD2B8\uB864\r\n// ============================================================\r\n\r\nfunction parseFieldControl(ctrlIdRaw: number, ctrlData: Uint8Array): HwpControl {\r\n const id = ctrlIdToString(ctrlIdRaw);\r\n if (ctrlData.byteLength < 7) return { kind: \"field\", ctrlId: id };\r\n\r\n const r = new ByteReader(ctrlData);\r\n r.readU32(); // properties\r\n r.readU8(); // extra\r\n const commandLen = r.readU16();\r\n let command: string | undefined;\r\n if (commandLen > 0 && r.remaining() >= commandLen * 2) {\r\n try {\r\n command = r.readUtf16(commandLen);\r\n } catch {\r\n command = undefined;\r\n }\r\n }\r\n return { kind: \"field\", ctrlId: id, command };\r\n}\r\n", "/**\r\n * BodyText \uC139\uC158 \uD30C\uC2F1 \u2014 \uACC4\uCE35 \uD30C\uC2F1.\r\n *\r\n * \uB808\uCF54\uB4DC \uD2B8\uB9AC:\r\n * PARA_HEADER (level=0)\r\n * PARA_TEXT (level=1)\r\n * PARA_CHAR_SHAPE (level=1)\r\n * PARA_LINE_SEG (level=1)\r\n * CTRL_HEADER (level=1) \u2190 \uD45C/\uADF8\uB9BC/\uBA38\uB9AC\uB9D0 \uB4F1\r\n * TABLE (level=2)\r\n * LIST_HEADER (level=2) \u2190 \uC140\r\n * PARA_HEADER (level=3)\r\n * PARA_TEXT (level=4)\r\n *\r\n * \uC678\uACFD \uD30C\uB77C\uADF8\uB798\uD504\uC640 \uC140 \uC548 \uD30C\uB77C\uADF8\uB798\uD504\uB294 \uBD84\uB9AC\uB418\uC5B4 \uBCF4\uC874\uB41C\uB2E4.\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/body_text.rs (MIT, Edward Kim)\r\n */\r\n\r\nimport { ByteReader } from \"./byteReader.js\";\r\nimport { readAllRecords, type Record } from \"./record.js\";\r\nimport {\r\n HWPTAG_PARA_HEADER,\r\n HWPTAG_PARA_TEXT,\r\n HWPTAG_PARA_CHAR_SHAPE,\r\n HWPTAG_CTRL_HEADER,\r\n} from \"./tags.js\";\r\nimport { parseCtrlHeader } from \"./control.js\";\r\nimport type { HwpControl, HwpParagraph, HwpRun, HwpSection } from \"./types.js\";\r\n\r\nexport class BodyTextError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"BodyTextError\";\r\n }\r\n}\r\n\r\nexport function parseBodyTextSection(data: Uint8Array): HwpSection {\r\n const records = readAllRecords(data);\r\n // \uC139\uC158\uC758 \uCD5C\uC0C1\uC704 PARA_HEADER \uB4E4 (\uBCF4\uD1B5 level=0)\r\n const topLevel = records.length > 0 ? records[0].level : 0;\r\n return { paragraphs: parseParagraphList(records, topLevel) };\r\n}\r\n\r\n/**\r\n * \uC8FC\uC5B4\uC9C4 \uB808\uCF54\uB4DC \uC2DC\uD000\uC2A4\uC5D0\uC11C baseLevel \uC778 PARA_HEADER \uB4E4\uC744 \uCC3E\uC544 \uBB38\uB2E8 \uBAA9\uB85D\uC73C\uB85C \uBCC0\uD658.\r\n *\r\n * @param records \uC815\uB82C\uB41C \uB808\uCF54\uB4DC \uC2DC\uD000\uC2A4 (\uC11C\uBE0C\uD2B8\uB9AC \uB610\uB294 \uC804\uCCB4)\r\n * @param baseLevel \uCD94\uCD9C \uB300\uC0C1 PARA_HEADER \uC758 \uB808\uBCA8 (\uBCF4\uD1B5 \uC678\uBD80 \uCEE8\uD14C\uC774\uB108 \uB808\uBCA8 + 1, \uC139\uC158 \uCD5C\uC0C1\uC704\uBA74 0)\r\n */\r\nexport function parseParagraphList(records: Record[], baseLevel: number): HwpParagraph[] {\r\n const paragraphs: HwpParagraph[] = [];\r\n\r\n for (let i = 0; i < records.length; i++) {\r\n const rec = records[i];\r\n if (rec.tagId !== HWPTAG_PARA_HEADER) continue;\r\n if (rec.level !== baseLevel) continue;\r\n\r\n // \uC790\uAE30 \uC11C\uBE0C\uD2B8\uB9AC \uC885\uB8CC\uC810: level <= baseLevel \uC774 \uB2E4\uC2DC \uB4F1\uC7A5\uD558\uB294 \uC704\uCE58\r\n let end = i + 1;\r\n while (end < records.length && records[end].level > baseLevel) end++;\r\n\r\n const paraRecords = records.slice(i, end);\r\n paragraphs.push(buildParagraph(paraRecords));\r\n i = end - 1;\r\n }\r\n\r\n return paragraphs;\r\n}\r\n\r\nfunction buildParagraph(records: Record[]): HwpParagraph {\r\n const header = records[0];\r\n const headerInfo = parseParaHeader(header.data);\r\n const baseLevel = header.level;\r\n\r\n let text = \"\";\r\n let charShapeChanges: { charPos: number; charShapeId: number }[] = [];\r\n const controls: HwpControl[] = [];\r\n\r\n for (let j = 1; j < records.length; j++) {\r\n const r = records[j];\r\n if (r.level !== baseLevel + 1) continue; // \uC9C1\uC811 \uC790\uC2DD\uB9CC\r\n\r\n switch (r.tagId) {\r\n case HWPTAG_PARA_TEXT: {\r\n text = parseParaText(r.data);\r\n break;\r\n }\r\n case HWPTAG_PARA_CHAR_SHAPE: {\r\n charShapeChanges = parseParaCharShape(r.data);\r\n break;\r\n }\r\n case HWPTAG_CTRL_HEADER: {\r\n // CTRL_HEADER \uC758 \uC790\uC2DD (level > baseLevel+1) \uC218\uC9D1\r\n const ctrlChildren: Record[] = [];\r\n for (let k = j + 1; k < records.length; k++) {\r\n if (records[k].level <= baseLevel + 1) break;\r\n ctrlChildren.push(records[k]);\r\n }\r\n const ctrl = parseCtrlHeader(r, ctrlChildren, parseParagraphList);\r\n controls.push(ctrl);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n paraShapeId: headerInfo.paraShapeId,\r\n styleId: headerInfo.styleId,\r\n text,\r\n runs: buildRuns(text, charShapeChanges),\r\n controls,\r\n };\r\n}\r\n\r\ninterface ParaHeaderInfo {\r\n charCount: number;\r\n controlMask: number;\r\n paraShapeId: number;\r\n styleId: number;\r\n}\r\n\r\nfunction parseParaHeader(data: Uint8Array): ParaHeaderInfo {\r\n const r = new ByteReader(data);\r\n const nCharsRaw = r.remaining() >= 4 ? r.readU32() : 0;\r\n const charCount = nCharsRaw & 0x7fffffff;\r\n const controlMask = r.remaining() >= 4 ? r.readU32() : 0;\r\n const paraShapeId = r.remaining() >= 2 ? r.readU16() : 0;\r\n const styleId = r.remaining() >= 1 ? r.readU8() : 0;\r\n return { charCount, controlMask, paraShapeId, styleId };\r\n}\r\n\r\n/**\r\n * PARA_TEXT \uB514\uCF54\uB529 (\uD14D\uC2A4\uD2B8\uB9CC; \uCEE8\uD2B8\uB864 \uC704\uCE58\uB294 buildParagraph \uC758 CTRL_HEADER \uCC98\uB9AC\uC5D0\uC11C \uBCC4\uB3C4 \uCD94\uC801).\r\n *\r\n * \uCEE8\uD2B8\uB864 \uBB38\uC790 \uBD84\uB958 (HWP 5.0 \uD45C 6):\r\n * - 1 word (2\uBC14\uC774\uD2B8): 0, 10 (LF), 13 (para break \u2014 \uC885\uB8CC), 24~31\r\n * - 8 word (16\uBC14\uC774\uD2B8): 1~8, 11~12, 14~23\r\n * - 9 (\uD0ED): 8 word\r\n */\r\nfunction parseParaText(data: Uint8Array): string {\r\n let text = \"\";\r\n let pos = 0;\r\n const end = data.byteLength;\r\n\r\n while (pos + 1 < end) {\r\n const ch = data[pos] | (data[pos + 1] << 8);\r\n\r\n if (ch === 0) {\r\n pos += 2;\r\n } else if (ch === 0x09) {\r\n text += \"\\t\";\r\n pos += 16;\r\n } else if (ch === 0x0a) {\r\n text += \"\\n\";\r\n pos += 2;\r\n } else if (ch === 0x0d) {\r\n break;\r\n } else if (isExtendedCtrl(ch)) {\r\n pos += 16;\r\n } else if (ch < 0x20) {\r\n switch (ch) {\r\n case 0x18:\r\n text += \" \";\r\n break;\r\n case 0x19:\r\n text += \" \";\r\n break;\r\n case 0x1e:\r\n text += \"-\";\r\n break;\r\n case 0x1f:\r\n text += \" \";\r\n break;\r\n default:\r\n break;\r\n }\r\n pos += 2;\r\n } else {\r\n if (ch >= 0xd800 && ch <= 0xdbff && pos + 3 < end) {\r\n const low = data[pos + 2] | (data[pos + 3] << 8);\r\n if (low >= 0xdc00 && low <= 0xdfff) {\r\n text += String.fromCharCode(ch, low);\r\n pos += 4;\r\n continue;\r\n }\r\n }\r\n text += String.fromCharCode(ch);\r\n pos += 2;\r\n }\r\n }\r\n return text;\r\n}\r\n\r\nfunction isExtendedCtrl(ch: number): boolean {\r\n return (\r\n (ch >= 1 && ch <= 8) ||\r\n ch === 11 ||\r\n ch === 12 ||\r\n (ch >= 14 && ch <= 23)\r\n );\r\n}\r\n\r\nfunction parseParaCharShape(data: Uint8Array): { charPos: number; charShapeId: number }[] {\r\n const r = new ByteReader(data);\r\n const out: { charPos: number; charShapeId: number }[] = [];\r\n while (r.remaining() >= 8) {\r\n const charPos = r.readU32();\r\n const charShapeId = r.readU32();\r\n out.push({ charPos, charShapeId });\r\n }\r\n return out;\r\n}\r\n\r\nfunction buildRuns(\r\n text: string,\r\n changes: { charPos: number; charShapeId: number }[]\r\n): HwpRun[] {\r\n if (text.length === 0) return [];\r\n if (changes.length === 0) return [{ charShapeId: 0, text }];\r\n\r\n const sorted = [...changes].sort((a, b) => a.charPos - b.charPos);\r\n const runs: HwpRun[] = [];\r\n for (let i = 0; i < sorted.length; i++) {\r\n const start = sorted[i].charPos;\r\n const stop = i + 1 < sorted.length ? sorted[i + 1].charPos : text.length;\r\n if (stop > start) {\r\n runs.push({ charShapeId: sorted[i].charShapeId, text: text.slice(start, stop) });\r\n }\r\n }\r\n return runs;\r\n}\r\n", "/**\r\n * BinData (CFB Storage) \uC5D0\uC11C \uC784\uBCA0\uB514\uB4DC \uC774\uBBF8\uC9C0/OLE \uB370\uC774\uD130 \uCD94\uCD9C.\r\n *\r\n * /BinData/BIN0001.png, BIN0002.jpg, ... \uD328\uD134.\r\n * DocInfo\uC758 BIN_DATA \uB808\uCF54\uB4DC\uC640 storageId \uB85C \uC5F0\uACB0\uB428.\r\n *\r\n * \uC6D0\uC791: rhwp/src/parser/bin_data.rs (MIT, Edward Kim)\r\n */\r\n\r\nimport type { HwpCfbReader } from \"./cfbReader.js\";\r\nimport type { HwpBinDataRef } from \"./types.js\";\r\n\r\nconst CFB_MAGIC = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\r\n\r\nexport function loadBinDataContent(\r\n cfb: HwpCfbReader,\r\n refs: HwpBinDataRef[]\r\n): Map<number, { data: Uint8Array; extension: string }> {\r\n const out = new Map<number, { data: Uint8Array; extension: string }>();\r\n\r\n for (const ref of refs) {\r\n if (ref.type === \"link\") continue;\r\n const isStorage = ref.type === \"storage\";\r\n const ext = ref.extension ?? (isStorage ? \"OLE\" : \"dat\");\r\n\r\n // \uD30C\uC77C\uBA85: BIN{XXXX}.{ext} (4\uC790\uB9AC hex, \uB300\uBB38\uC790/\uC18C\uBB38\uC790 \uB458 \uB2E4 \uC2DC\uB3C4)\r\n const idHex = ref.storageId.toString(16).padStart(4, \"0\");\r\n const candidates = [\r\n `/BinData/BIN${idHex.toUpperCase()}.${ext}`,\r\n `/BinData/BIN${idHex.toLowerCase()}.${ext}`,\r\n ];\r\n\r\n let bytes: Uint8Array | null = null;\r\n for (const path of candidates) {\r\n bytes = cfb.readBinData(path);\r\n if (bytes) break;\r\n }\r\n if (!bytes) continue;\r\n\r\n // OLE Storage \uC758 \uACBD\uC6B0 \uC120\uB450 4\uBC14\uC774\uD2B8 size prefix \uAC00 \uBD99\uB294 \uACBD\uC6B0\uAC00 \uC788\uC5B4 \uC815\uB9AC\r\n if (isStorage && bytes.byteLength > 12) {\r\n const headIsCfb =\r\n bytes[0] === CFB_MAGIC[0] &&\r\n bytes[1] === CFB_MAGIC[1] &&\r\n bytes[2] === CFB_MAGIC[2] &&\r\n bytes[3] === CFB_MAGIC[3];\r\n const cfbAt4 =\r\n bytes[4] === CFB_MAGIC[0] &&\r\n bytes[5] === CFB_MAGIC[1] &&\r\n bytes[6] === CFB_MAGIC[2] &&\r\n bytes[7] === CFB_MAGIC[3];\r\n if (!headIsCfb && cfbAt4) {\r\n bytes = bytes.subarray(4);\r\n }\r\n }\r\n\r\n out.set(ref.storageId, { data: new Uint8Array(bytes), extension: ext });\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function detectImageMime(extension: string): string {\r\n const ext = extension.toLowerCase();\r\n if (ext === \"png\") return \"image/png\";\r\n if (ext === \"jpg\" || ext === \"jpeg\") return \"image/jpeg\";\r\n if (ext === \"gif\") return \"image/gif\";\r\n if (ext === \"bmp\") return \"image/bmp\";\r\n if (ext === \"webp\") return \"image/webp\";\r\n if (ext === \"svg\") return \"image/svg+xml\";\r\n return \"application/octet-stream\";\r\n}\r\n", "/**\r\n * HwpDocument IR \u2192 HWPX(OWPML) \uD328\uD0A4\uC9C0 \uBE4C\uB354 (\uC2A4\uD0C0\uC77C \uBCF4\uC874 \uD3EC\uD568).\r\n *\r\n * - DocInfo \uC758 fontFaces / charShapes / paraShapes / styles \uB97C header.xml refList \uB85C \uB9E4\uD551\r\n * - paragraph: paraPrIDRef = paraShapeId, styleIDRef = styleId\r\n * - run: charPrIDRef = charShapeId\r\n * - \uD45C/\uC774\uBBF8\uC9C0 + BinData \uD328\uD0A4\uC9D5 + manifest \uB4F1\uB85D\r\n *\r\n * 1\uCC28 \uD3EC\uD305 \uD55C\uACC4: BorderFill/Numbering/TabDef \uB294 paraShape \uC758 \uCC38\uC870 ID \uB9CC \uBCF4\uC874\uD558\uACE0\r\n * \uC2E4\uC81C \uC815\uC758\uB294 default(0) \uB85C \uB460. \uCD94\uD6C4 \uB2E8\uACC4\uC5D0\uC11C \uC815\uC758 \uC790\uCCB4\uB3C4 \uC62E\uAE38 \uC608\uC815.\r\n */\r\n\r\nimport JSZip from \"jszip\";\r\nimport type {\r\n HwpDocument,\r\n HwpDocInfo,\r\n HwpCharShape,\r\n HwpParaShape,\r\n HwpStyle,\r\n HwpFaceName,\r\n HwpBorderFill,\r\n HwpBorderLine,\r\n HwpNumbering,\r\n HwpBullet,\r\n HwpTabDef,\r\n HwpParagraph,\r\n HwpRun,\r\n HwpControl,\r\n HwpTableControl,\r\n HwpTableCell,\r\n} from \"./types.js\";\r\nimport { detectImageMime } from \"./binData.js\";\r\nimport {\r\n MIMETYPE,\r\n OWPML_NS,\r\n DEFAULT_LINESEG,\r\n SEC_PR_XML,\r\n makeParaId,\r\n escapeXml,\r\n} from \"./owpml.js\";\r\n\r\nconst NS_OPF = \"http://www.idpf.org/2007/opf/\";\r\nconst NS_DC = \"http://purl.org/dc/elements/1.1/\";\r\nconst NS_OASIS_CONTAINER = \"urn:oasis:names:tc:opendocument:xmlns:container\";\r\nconst NS_OASIS_MANIFEST = \"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\";\r\n\r\nconst LANG_NAMES = [\"HANGUL\", \"LATIN\", \"HANJA\", \"JAPANESE\", \"OTHER\", \"SYMBOL\", \"USER\"] as const;\r\n\r\nexport interface BuildOptions {\r\n title?: string;\r\n creator?: string;\r\n}\r\n\r\ninterface BinEntry {\r\n id: string;\r\n href: string;\r\n mediaType: string;\r\n data: Uint8Array;\r\n}\r\n\r\nexport async function buildHwpxFromDocument(\r\n doc: HwpDocument,\r\n options?: BuildOptions\r\n): Promise<Uint8Array> {\r\n const zip = new JSZip();\r\n zip.file(\"mimetype\", MIMETYPE, { compression: \"STORE\" });\r\n\r\n // BinData \uB9E4\uB2C8\uD398\uC2A4\uD2B8 \uD56D\uBAA9 \uC0AC\uC804 \uAD6C\uC131\r\n const binEntries: BinEntry[] = [];\r\n for (const [storageId, { data, extension }] of doc.binData) {\r\n const ext = extension.toLowerCase();\r\n binEntries.push({\r\n id: `image${storageId}`,\r\n href: `BinData/image${storageId}.${ext}`,\r\n mediaType: detectImageMime(ext),\r\n data,\r\n });\r\n }\r\n\r\n // META-INF/container.xml\r\n zip.file(\r\n \"META-INF/container.xml\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\r\n `<container xmlns=\"${NS_OASIS_CONTAINER}\">` +\r\n `<rootfiles>` +\r\n `<rootfile full-path=\"Contents/content.hpf\" media-type=\"application/hwpml-package+xml\"/>` +\r\n `</rootfiles>` +\r\n `</container>`\r\n );\r\n\r\n // META-INF/manifest.xml\r\n const manifestEntries: string[] = [\r\n `<manifest:file-entry manifest:full-path=\"/\" manifest:media-type=\"application/hwpml-package+xml\"/>`,\r\n `<manifest:file-entry manifest:full-path=\"version.xml\" manifest:media-type=\"application/xml\"/>`,\r\n `<manifest:file-entry manifest:full-path=\"settings.xml\" manifest:media-type=\"application/xml\"/>`,\r\n `<manifest:file-entry manifest:full-path=\"Contents/content.hpf\" manifest:media-type=\"application/hwpml-package+xml\"/>`,\r\n `<manifest:file-entry manifest:full-path=\"Contents/header.xml\" manifest:media-type=\"application/xml\"/>`,\r\n ];\r\n for (let i = 0; i < doc.sections.length; i++) {\r\n manifestEntries.push(\r\n `<manifest:file-entry manifest:full-path=\"Contents/section${i}.xml\" manifest:media-type=\"application/xml\"/>`\r\n );\r\n }\r\n for (const e of binEntries) {\r\n manifestEntries.push(\r\n `<manifest:file-entry manifest:full-path=\"${e.href}\" manifest:media-type=\"${e.mediaType}\"/>`\r\n );\r\n }\r\n zip.file(\r\n \"META-INF/manifest.xml\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\r\n `<manifest:manifest xmlns:manifest=\"${NS_OASIS_MANIFEST}\">` +\r\n manifestEntries.join(\"\") +\r\n `</manifest:manifest>`\r\n );\r\n\r\n // version.xml\r\n zip.file(\r\n \"version.xml\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\r\n `<ha:HCFVersion xmlns:ha=\"http://www.hancom.co.kr/hwpml/2011/app\" ha:targetApplication=\"WORDPROCESSOR\" ha:major=\"${doc.header.version.major}\" ha:minor=\"${doc.header.version.minor}\" ha:micro=\"${doc.header.version.build}\" ha:buildNumber=\"${doc.header.version.revision}\"/>`\r\n );\r\n\r\n // settings.xml\r\n zip.file(\r\n \"settings.xml\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n` +\r\n `<ha:HWPApplicationSetting xmlns:ha=\"http://www.hancom.co.kr/hwpml/2011/app\">` +\r\n `<ha:CaretPosition ha:listIDRef=\"0\" ha:paraIDRef=\"0\" ha:pos=\"0\"/>` +\r\n `</ha:HWPApplicationSetting>`\r\n );\r\n\r\n // OPF \uB9E4\uB2C8\uD398\uC2A4\uD2B8 + spine\r\n const opfManifest: string[] = [\r\n `<opf:item id=\"header\" href=\"Contents/header.xml\" media-type=\"application/xml\"/>`,\r\n ];\r\n for (let i = 0; i < doc.sections.length; i++) {\r\n opfManifest.push(\r\n `<opf:item id=\"section${i}\" href=\"Contents/section${i}.xml\" media-type=\"application/xml\"/>`\r\n );\r\n }\r\n for (const e of binEntries) {\r\n opfManifest.push(\r\n `<opf:item id=\"${e.id}\" href=\"${e.href}\" media-type=\"${e.mediaType}\" isEmbeded=\"1\"/>`\r\n );\r\n }\r\n const spineRefs =\r\n `<opf:itemref idref=\"header\" linear=\"yes\"/>` +\r\n doc.sections.map((_, i) => `<opf:itemref idref=\"section${i}\" linear=\"yes\"/>`).join(\"\");\r\n zip.file(\r\n \"Contents/content.hpf\",\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\r\n `<opf:package ${OWPML_NS} version=\"\" unique-identifier=\"\" id=\"\">` +\r\n `<opf:metadata>` +\r\n `<dc:title>${escapeXml(options?.title ?? \"\")}</dc:title>` +\r\n `<dc:creator>${escapeXml(options?.creator ?? \"\")}</dc:creator>` +\r\n `<dc:format>application/hwpml-package+xml</dc:format>` +\r\n `</opf:metadata>` +\r\n `<opf:manifest>` +\r\n opfManifest.join(\"\") +\r\n `</opf:manifest>` +\r\n `<opf:spine>` +\r\n spineRefs +\r\n `</opf:spine>` +\r\n `</opf:package>`\r\n );\r\n\r\n // header.xml \u2014 DocInfo \uAE30\uBC18 \uD480 \uBE4C\uB4DC\r\n zip.file(\"Contents/header.xml\", buildHeaderXmlFromDocInfo(doc.docInfo, doc.sections.length));\r\n\r\n // \uC139\uC158\r\n for (let i = 0; i < doc.sections.length; i++) {\r\n zip.file(`Contents/section${i}.xml`, buildSectionXml(doc.sections[i].paragraphs, binEntries));\r\n }\r\n\r\n // BinData\r\n for (const e of binEntries) {\r\n zip.file(e.href, e.data);\r\n }\r\n\r\n // Preview/PrvText.txt \u2014 \uB2E4\uB978 HWP \uBDF0\uC5B4 \uD638\uD658\uC744 \uC704\uD55C \uD3C9\uBB38 \uBBF8\uB9AC\uBCF4\uAE30\r\n zip.file(\"Preview/PrvText.txt\", buildPrvText(doc));\r\n\r\n return await zip.generateAsync({ type: \"uint8array\" });\r\n}\r\n\r\n/**\r\n * \uD55C\uCEF4 HWP/HWPX \uC758 Preview/PrvText.txt \uD615\uC2DD\uC744 \uB530\uB978 \uBBF8\uB9AC\uBCF4\uAE30 \uD3C9\uBB38 \uC0DD\uC131.\r\n * - \uC140\uC740 \"<\uC140\uD14D\uC2A4\uD2B8 >\" \uB85C \uAC10\uC2F8 \uD589 \uB2E8\uC704\uB85C \uB098\uC5F4\r\n * - \uD589 \uC0AC\uC774\uB294 \\r\\n\r\n * - \uC77C\uBC18 \uBB38\uB2E8\uC740 \uADF8\uB300\uB85C\r\n */\r\nfunction buildPrvText(doc: HwpDocument): string {\r\n const lines: string[] = [];\r\n for (const section of doc.sections) {\r\n for (const para of section.paragraphs) {\r\n collectPrvLines(para, lines);\r\n }\r\n }\r\n // \uC57D 2KB \uAE4C\uC9C0\uB9CC \uBCF4\uC874 (Hancom \uC81C\uD55C)\r\n return lines.join(\"\\r\\n\").slice(0, 2000);\r\n}\r\n\r\nfunction collectPrvLines(para: HwpParagraph, lines: string[]): void {\r\n if (para.text.length > 0) {\r\n lines.push(para.text);\r\n }\r\n for (const ctrl of para.controls) {\r\n if (ctrl.kind === \"table\") {\r\n // \uD589\uBCC4\uB85C \uC140\uC744 < ... > \uB85C \uAC10\uC2F8 join\r\n const rows: HwpTableCell[][] = Array.from({ length: ctrl.rowCount }, () => []);\r\n for (const cell of ctrl.cells) {\r\n if (cell.row >= 0 && cell.row < ctrl.rowCount) rows[cell.row].push(cell);\r\n }\r\n for (const row of rows) {\r\n row.sort((a, b) => a.col - b.col);\r\n const cellTexts = row.map((cell) => {\r\n const inner = cell.paragraphs\r\n .map((q) => {\r\n const buf: string[] = [];\r\n collectPrvLines(q, buf);\r\n return buf.join(\" \");\r\n })\r\n .join(\" \");\r\n return `<${inner} >`;\r\n });\r\n if (cellTexts.length > 0) lines.push(cellTexts.join(\"\"));\r\n }\r\n } else if (\r\n ctrl.kind === \"header\" ||\r\n ctrl.kind === \"footer\" ||\r\n ctrl.kind === \"footnote\"\r\n ) {\r\n for (const q of ctrl.paragraphs) collectPrvLines(q, lines);\r\n } else if (ctrl.kind === \"equation\" && ctrl.script.length > 0) {\r\n lines.push(ctrl.script);\r\n }\r\n }\r\n}\r\n\r\n// ============================================================\r\n// header.xml \uBE4C\uB4DC (DocInfo \u2192 refList)\r\n// ============================================================\r\n\r\nfunction buildHeaderXmlFromDocInfo(docInfo: HwpDocInfo, secCnt: number): string {\r\n const fontfacesXml = buildFontfacesXml(docInfo.fontFaces);\r\n const borderFillsXml = buildBorderFillsXml(docInfo.borderFills);\r\n const charPropsXml = buildCharPropertiesXml(docInfo.charShapes);\r\n const tabDefsXml = buildTabDefsXml(docInfo.tabDefs);\r\n const numberingsXml = buildNumberingsXml(docInfo.numberings);\r\n const bulletsXml = buildBulletsXml(docInfo.bullets);\r\n const paraPropsXml = buildParaPropertiesXml(docInfo.paraShapes);\r\n const stylesXml = buildStylesXml(docInfo.styles);\r\n\r\n return (\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\r\n `<hh:head ${OWPML_NS} version=\"1.5\" secCnt=\"${Math.max(1, secCnt)}\">` +\r\n `<hh:beginNum page=\"1\" footnote=\"1\" endnote=\"1\" pic=\"1\" tbl=\"1\" equation=\"1\"/>` +\r\n `<hh:refList>` +\r\n fontfacesXml +\r\n borderFillsXml +\r\n charPropsXml +\r\n tabDefsXml +\r\n numberingsXml +\r\n bulletsXml +\r\n paraPropsXml +\r\n stylesXml +\r\n `</hh:refList>` +\r\n `</hh:head>`\r\n );\r\n}\r\n\r\nfunction buildBorderFillsXml(borderFills: HwpBorderFill[]): string {\r\n const cnt = Math.max(1, borderFills.length);\r\n const items: string[] = [];\r\n for (let i = 0; i < cnt; i++) {\r\n items.push(buildSingleBorderFillXml(i, borderFills[i]));\r\n }\r\n return `<hh:borderFills itemCnt=\"${cnt}\">${items.join(\"\")}</hh:borderFills>`;\r\n}\r\n\r\n/** HWP \uB108\uBE44 \uC778\uB371\uC2A4 \u2192 mm \uB9E4\uD551 (HWP 5.0 \uC2A4\uD399) */\r\nconst BORDER_WIDTH_MM = [\r\n \"0.1\", \"0.12\", \"0.15\", \"0.2\", \"0.25\", \"0.3\", \"0.4\", \"0.5\",\r\n \"0.6\", \"0.7\", \"1.0\", \"1.5\", \"2.0\", \"3.0\", \"4.0\", \"5.0\",\r\n];\r\n\r\nconst BORDER_LINE_TYPE_NAMES = [\r\n \"NONE\", \"SOLID\", \"DASH\", \"DOT\", \"DASH_DOT\", \"DASH_DOT_DOT\", \"LONG_DASH\", \"CIRCLE\",\r\n \"DOUBLE\", \"THIN_THICK_DOUBLE\", \"THICK_THIN_DOUBLE\", \"THIN_THICK_THIN_TRIPLE\",\r\n \"WAVE\", \"DOUBLE_WAVE\", \"THICK_3D\", \"THICK_3D_REVERSE\", \"THIN_3D\", \"THIN_3D_REVERSE\",\r\n];\r\n\r\nfunction lineTypeName(idx: number): string {\r\n return BORDER_LINE_TYPE_NAMES[idx] ?? \"SOLID\";\r\n}\r\n\r\nfunction widthMm(idx: number): string {\r\n return (BORDER_WIDTH_MM[idx] ?? \"0.1\") + \" mm\";\r\n}\r\n\r\nfunction buildBorderXml(tagName: string, line: HwpBorderLine | undefined): string {\r\n if (!line) {\r\n return `<hh:${tagName} type=\"SOLID\" width=\"0.1 mm\" color=\"#000000\"/>`;\r\n }\r\n return `<hh:${tagName} type=\"${lineTypeName(line.lineType)}\" width=\"${widthMm(line.widthIndex)}\" color=\"${colorBgrToHex(line.color)}\"/>`;\r\n}\r\n\r\nfunction buildSingleBorderFillXml(id: number, bf?: HwpBorderFill): string {\r\n const left = buildBorderXml(\"leftBorder\", bf?.borders?.[0]);\r\n const right = buildBorderXml(\"rightBorder\", bf?.borders?.[1]);\r\n const top = buildBorderXml(\"topBorder\", bf?.borders?.[2]);\r\n const bottom = buildBorderXml(\"bottomBorder\", bf?.borders?.[3]);\r\n\r\n // BorderFill attr u16 \uBE44\uD2B8\uD544\uB4DC:\r\n // bit 0: 3D, bit 1: \uADF8\uB9BC\uC790\r\n // bit 2..4 (0x1C): slash \uB300\uAC01\uC120 \uBAA8\uC591 \u2014 0=NONE, \uADF8 \uC678=present\r\n // bit 5..7 (0xE0): backSlash \uB300\uAC01\uC120 \uBAA8\uC591\r\n const attr = bf?.attr ?? 0;\r\n const slashKind = (attr >>> 2) & 0x07;\r\n const backSlashKind = (attr >>> 5) & 0x07;\r\n const diagWidth = widthMm(bf?.diagonal?.widthIndex ?? 0);\r\n const diagColor = colorBgrToHex(bf?.diagonal?.color ?? 0);\r\n const slashType = slashKind !== 0 ? \"SOLID\" : \"NONE\";\r\n const backSlashType = backSlashKind !== 0 ? \"SOLID\" : \"NONE\";\r\n\r\n // <hh:diagonal> \uC758 type \uC740 \uB458 \uC911 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 SOLID\r\n const hasDiag = slashKind !== 0 || backSlashKind !== 0;\r\n const diagonalEl = `<hh:diagonal type=\"${hasDiag ? \"SOLID\" : \"NONE\"}\" width=\"${diagWidth}\" color=\"${diagColor}\"/>`;\r\n\r\n const fillEl = bf?.fill\r\n ? `<hh:fillBrush>` +\r\n `<hh:winBrush faceColor=\"${colorBgrToHex(bf.fill.backgroundColor)}\" hatchColor=\"${colorBgrToHex(bf.fill.patternColor)}\" hatchStyle=\"${bf.fill.patternType < 0 ? \"NONE\" : \"HORIZONTAL\"}\" alpha=\"0\"/>` +\r\n `</hh:fillBrush>`\r\n : \"\";\r\n\r\n return (\r\n `<hh:borderFill id=\"${id}\" threeD=\"${(attr & 0x01) !== 0 ? 1 : 0}\" shadow=\"${(attr & 0x02) !== 0 ? 1 : 0}\" centerLine=\"NONE\" breakCellSeparateLine=\"0\">` +\r\n `<hh:slash type=\"${slashType}\" Crooked=\"0\" isCounter=\"0\"/>` +\r\n `<hh:backSlash type=\"${backSlashType}\" Crooked=\"0\" isCounter=\"0\"/>` +\r\n left +\r\n right +\r\n top +\r\n bottom +\r\n diagonalEl +\r\n fillEl +\r\n `</hh:borderFill>`\r\n );\r\n}\r\n\r\nfunction buildTabDefsXml(tabDefs: HwpTabDef[]): string {\r\n const cnt = Math.max(1, tabDefs.length);\r\n const items: string[] = [];\r\n for (let i = 0; i < cnt; i++) {\r\n const td = tabDefs[i];\r\n const al = td?.autoTabLeft ?? true ? 1 : 0;\r\n const ar = td?.autoTabRight ?? true ? 1 : 0;\r\n items.push(\r\n `<hh:tabPr id=\"${i}\" autoTabLeft=\"${al}\" autoTabRight=\"${ar}\">` +\r\n `<hh:items itemCnt=\"0\"/>` +\r\n `</hh:tabPr>`\r\n );\r\n }\r\n return `<hh:tabProperties itemCnt=\"${cnt}\">${items.join(\"\")}</hh:tabProperties>`;\r\n}\r\n\r\nfunction buildNumberingsXml(numberings: HwpNumbering[]): string {\r\n if (numberings.length === 0) {\r\n return (\r\n `<hh:numberings itemCnt=\"1\">` +\r\n `<hh:numbering id=\"0\" start=\"1\">` +\r\n Array.from({ length: 7 })\r\n .map(\r\n (_, level) =>\r\n `<hh:paraHead level=\"${level + 1}\" start=\"1\" numFormat=\"^${level + 1}.\" textOffsetType=\"PERCENT\" textOffset=\"50\" numberingChar=\"false\" charPrIDRef=\"0\">` +\r\n `<hh:autoNumberFormat type=\"DIGIT\" userChar=\"\" prefixChar=\"\" suffixChar=\".\"/>` +\r\n `</hh:paraHead>`\r\n )\r\n .join(\"\") +\r\n `</hh:numbering>` +\r\n `</hh:numberings>`\r\n );\r\n }\r\n const items = numberings\r\n .map(\r\n (n, idx) =>\r\n `<hh:numbering id=\"${idx}\" start=\"${n.startNumber}\">` +\r\n n.levelFormats\r\n .map(\r\n (fmt, level) =>\r\n `<hh:paraHead level=\"${level + 1}\" start=\"1\" numFormat=\"${escapeXml(fmt || \"^\" + (level + 1) + \".\")}\" textOffsetType=\"PERCENT\" textOffset=\"50\" numberingChar=\"false\" charPrIDRef=\"0\">` +\r\n `<hh:autoNumberFormat type=\"DIGIT\" userChar=\"\" prefixChar=\"\" suffixChar=\".\"/>` +\r\n `</hh:paraHead>`\r\n )\r\n .join(\"\") +\r\n `</hh:numbering>`\r\n )\r\n .join(\"\");\r\n return `<hh:numberings itemCnt=\"${numberings.length}\">${items}</hh:numberings>`;\r\n}\r\n\r\nfunction buildBulletsXml(bullets: HwpBullet[]): string {\r\n if (bullets.length === 0) {\r\n return (\r\n `<hh:bullets itemCnt=\"1\">` +\r\n `<hh:bullet id=\"0\" char=\"\u25CF\" imageBullet=\"0\" checkedChar=\"0\">` +\r\n `<hh:img bright=\"0\" contrast=\"0\" effect=\"REAL_PIC\" binaryItemIDRef=\"0\"/>` +\r\n `</hh:bullet>` +\r\n `</hh:bullets>`\r\n );\r\n }\r\n const items = bullets\r\n .map(\r\n (b, idx) =>\r\n `<hh:bullet id=\"${idx}\" char=\"${escapeXml(b.bulletChar)}\" imageBullet=\"0\" checkedChar=\"0\">` +\r\n `<hh:img bright=\"0\" contrast=\"0\" effect=\"REAL_PIC\" binaryItemIDRef=\"0\"/>` +\r\n `</hh:bullet>`\r\n )\r\n .join(\"\");\r\n return `<hh:bullets itemCnt=\"${bullets.length}\">${items}</hh:bullets>`;\r\n}\r\n\r\nfunction buildFontfacesXml(fontFaces: HwpFaceName[][]): string {\r\n // 7\uAC1C \uC5B8\uC5B4 \uADF8\uB8F9 \u2014 \uBE44\uC5B4\uC788\uC5B4\uB3C4 lang \uC18D\uC131\uC740 \uB123\uC5B4\uB454\uB2E4.\r\n // \uADF8\uB8F9 \uC548 \uD3F0\uD2B8\uAC00 0\uAC1C\uBA74 \uB2E8\uC77C fallback \"\uBC14\uD0D5\"\r\n const groups: string[] = [];\r\n for (let li = 0; li < 7; li++) {\r\n const fonts = fontFaces[li] ?? [];\r\n const lang = LANG_NAMES[li];\r\n const list = fonts.length > 0\r\n ? fonts.map((f, idx) => buildFontXml(idx, f)).join(\"\")\r\n : `<hh:font id=\"0\" face=\"\uBC14\uD0D5\" type=\"TTF\" isEmbedded=\"0\"/>`;\r\n const cnt = fonts.length > 0 ? fonts.length : 1;\r\n groups.push(\r\n `<hh:fontface lang=\"${lang}\" fontCnt=\"${cnt}\">${list}</hh:fontface>`\r\n );\r\n }\r\n return `<hh:fontfaces itemCnt=\"${groups.length}\">${groups.join(\"\")}</hh:fontfaces>`;\r\n}\r\n\r\nfunction buildFontXml(id: number, f: HwpFaceName): string {\r\n const subAttrs = f.substituteName ? ` type=\"UNKNOWN\" face=\"${escapeXml(f.substituteName)}\"` : \"\";\r\n const sub = f.substituteName ? `<hh:substFont${subAttrs}/>` : \"\";\r\n return `<hh:font id=\"${id}\" face=\"${escapeXml(f.name)}\" type=\"TTF\" isEmbedded=\"0\">${sub}</hh:font>`;\r\n}\r\n\r\nfunction buildCharPropertiesXml(charShapes: HwpCharShape[]): string {\r\n if (charShapes.length === 0) {\r\n // \uCD5C\uC18C 1\uAC1C fallback\r\n return (\r\n `<hh:charProperties itemCnt=\"1\">` +\r\n `<hh:charPr id=\"0\" height=\"1000\" textColor=\"#000000\" shadeColor=\"none\" useFontSpace=\"0\" useKerning=\"0\" symMark=\"NONE\" borderFillIDRef=\"0\">` +\r\n defaultFontGroupXml() +\r\n `</hh:charPr>` +\r\n `</hh:charProperties>`\r\n );\r\n }\r\n const items = charShapes.map((cs, idx) => buildCharPrXml(idx, cs)).join(\"\");\r\n return `<hh:charProperties itemCnt=\"${charShapes.length}\">${items}</hh:charProperties>`;\r\n}\r\n\r\nfunction buildCharPrXml(id: number, cs: HwpCharShape): string {\r\n const ids = cs.faceNameIds;\r\n const fontRef =\r\n `<hh:fontRef hangul=\"${ids.hangul}\" latin=\"${ids.latin}\" hanja=\"${ids.hanja}\" japanese=\"${ids.japanese}\" other=\"${ids.other}\" symbol=\"${ids.symbol}\" user=\"${ids.user}\"/>`;\r\n const ratio = `<hh:ratio hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>`;\r\n const spacing = `<hh:spacing hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>`;\r\n const relSz = `<hh:relSz hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>`;\r\n const offset = `<hh:offset hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>`;\r\n const italic = cs.italic ? `<hh:italic/>` : \"\";\r\n const bold = cs.bold ? `<hh:bold/>` : \"\";\r\n const underline = cs.underline\r\n ? `<hh:underline type=\"BOTTOM\" shape=\"SOLID\" color=\"${colorBgrToHex(cs.underlineColor)}\"/>`\r\n : \"\";\r\n const strikeout = cs.strikeout\r\n ? `<hh:strikeout shape=\"SOLID\" color=\"${colorBgrToHex(cs.textColor)}\"/>`\r\n : \"\";\r\n\r\n const textColor = colorBgrToHex(cs.textColor);\r\n const shadeColor = cs.shadeColor === 0xffffff || cs.shadeColor === 0 ? \"none\" : colorBgrToHex(cs.shadeColor);\r\n\r\n return (\r\n `<hh:charPr id=\"${id}\" height=\"${cs.baseSize}\" textColor=\"${textColor}\" shadeColor=\"${shadeColor}\" useFontSpace=\"0\" useKerning=\"0\" symMark=\"NONE\" borderFillIDRef=\"0\">` +\r\n fontRef +\r\n ratio +\r\n spacing +\r\n relSz +\r\n offset +\r\n italic +\r\n bold +\r\n underline +\r\n strikeout +\r\n `</hh:charPr>`\r\n );\r\n}\r\n\r\nfunction defaultFontGroupXml(): string {\r\n return (\r\n `<hh:fontRef hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>` +\r\n `<hh:ratio hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>` +\r\n `<hh:spacing hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>` +\r\n `<hh:relSz hangul=\"100\" latin=\"100\" hanja=\"100\" japanese=\"100\" other=\"100\" symbol=\"100\" user=\"100\"/>` +\r\n `<hh:offset hangul=\"0\" latin=\"0\" hanja=\"0\" japanese=\"0\" other=\"0\" symbol=\"0\" user=\"0\"/>`\r\n );\r\n}\r\n\r\nfunction buildParaPropertiesXml(paraShapes: HwpParaShape[]): string {\r\n if (paraShapes.length === 0) {\r\n return (\r\n `<hh:paraProperties itemCnt=\"1\">` +\r\n `<hh:paraPr id=\"0\" tabPrIDRef=\"0\" condense=\"0\" fontLineHeight=\"0\" snapToGrid=\"0\" suppressLineNumbers=\"0\" checked=\"0\">` +\r\n `<hh:align horizontal=\"JUSTIFY\" vertical=\"BASELINE\"/>` +\r\n `<hh:heading type=\"NONE\" idRef=\"0\" level=\"0\"/>` +\r\n `<hh:breakSetting breakLatinWord=\"KEEP_WORD\" breakNonLatinWord=\"KEEP_WORD\" widowOrphan=\"0\" keepWithNext=\"0\" keepLines=\"0\" pageBreakBefore=\"0\" lineWrap=\"BREAK\"/>` +\r\n `<hh:margin><hh:intent value=\"0\"/><hh:left value=\"0\"/><hh:right value=\"0\"/><hh:prev value=\"0\"/><hh:next value=\"0\"/></hh:margin>` +\r\n `<hh:lineSpacing type=\"PERCENT\" value=\"160\"/>` +\r\n `</hh:paraPr>` +\r\n `</hh:paraProperties>`\r\n );\r\n }\r\n const items = paraShapes.map((ps, idx) => buildParaPrXml(idx, ps)).join(\"\");\r\n return `<hh:paraProperties itemCnt=\"${paraShapes.length}\">${items}</hh:paraProperties>`;\r\n}\r\n\r\nfunction buildParaPrXml(id: number, ps: HwpParaShape): string {\r\n const align = alignToOwpml(ps.alignment);\r\n return (\r\n `<hh:paraPr id=\"${id}\" tabPrIDRef=\"0\" condense=\"0\" fontLineHeight=\"0\" snapToGrid=\"0\" suppressLineNumbers=\"0\" checked=\"0\">` +\r\n `<hh:align horizontal=\"${align}\" vertical=\"BASELINE\"/>` +\r\n `<hh:heading type=\"NONE\" idRef=\"0\" level=\"0\"/>` +\r\n `<hh:breakSetting breakLatinWord=\"KEEP_WORD\" breakNonLatinWord=\"KEEP_WORD\" widowOrphan=\"0\" keepWithNext=\"0\" keepLines=\"0\" pageBreakBefore=\"0\" lineWrap=\"BREAK\"/>` +\r\n `<hh:margin>` +\r\n `<hh:intent value=\"${ps.indent}\"/>` +\r\n `<hh:left value=\"${ps.leftMargin}\"/>` +\r\n `<hh:right value=\"${ps.rightMargin}\"/>` +\r\n `<hh:prev value=\"${ps.prevSpacing}\"/>` +\r\n `<hh:next value=\"${ps.nextSpacing}\"/>` +\r\n `</hh:margin>` +\r\n `<hh:lineSpacing type=\"PERCENT\" value=\"${Math.max(0, ps.lineSpacing)}\"/>` +\r\n `</hh:paraPr>`\r\n );\r\n}\r\n\r\nfunction buildStylesXml(styles: HwpStyle[]): string {\r\n if (styles.length === 0) {\r\n return (\r\n `<hh:styles itemCnt=\"1\">` +\r\n `<hh:style id=\"0\" type=\"PARA\" name=\"\uBC14\uD0D5\uAE00\" engName=\"Normal\" paraPrIDRef=\"0\" charPrIDRef=\"0\" nextStyleIDRef=\"0\" langID=\"1042\" lockForm=\"0\"/>` +\r\n `</hh:styles>`\r\n );\r\n }\r\n const items = styles\r\n .map(\r\n (s, idx) =>\r\n `<hh:style id=\"${idx}\" type=\"PARA\" name=\"${escapeXml(s.name || \"Style\" + idx)}\" engName=\"${escapeXml(s.engName ?? \"\")}\" paraPrIDRef=\"${s.paraShapeId}\" charPrIDRef=\"${s.charShapeId}\" nextStyleIDRef=\"${idx}\" langID=\"1042\" lockForm=\"0\"/>`\r\n )\r\n .join(\"\");\r\n return `<hh:styles itemCnt=\"${styles.length}\">${items}</hh:styles>`;\r\n}\r\n\r\n// ============================================================\r\n// \uC0C9\uC0C1 / \uC815\uB82C \uBCC0\uD658\r\n// ============================================================\r\n\r\n/** HWP ColorRef (u32 LE \uC758 0xAABBGGRR \uD615\uC2DD) \u2192 \"#RRGGBB\" */\r\nexport function colorBgrToHex(color: number): string {\r\n const r = color & 0xff;\r\n const g = (color >>> 8) & 0xff;\r\n const b = (color >>> 16) & 0xff;\r\n return \"#\" + [r, g, b].map((n) => n.toString(16).padStart(2, \"0\").toUpperCase()).join(\"\");\r\n}\r\n\r\nfunction alignToOwpml(a: HwpParaShape[\"alignment\"]): string {\r\n switch (a) {\r\n case \"left\":\r\n return \"LEFT\";\r\n case \"right\":\r\n return \"RIGHT\";\r\n case \"center\":\r\n return \"CENTER\";\r\n case \"justify\":\r\n return \"JUSTIFY\";\r\n case \"distribute\":\r\n return \"DISTRIBUTE\";\r\n case \"distributeSpace\":\r\n return \"DISTRIBUTE_SPACE\";\r\n default:\r\n return \"JUSTIFY\";\r\n }\r\n}\r\n\r\n// ============================================================\r\n// section.xml \uBE4C\uB4DC\r\n// ============================================================\r\n\r\nfunction buildSectionXml(paragraphs: HwpParagraph[], binEntries: BinEntry[]): string {\r\n // \uBCF8 \uBB38\uB2E8 + \uBA38\uB9AC\uB9D0/\uAF2C\uB9AC\uB9D0/\uAC01\uC8FC \uC778\uB77C\uC778 \uBCF4\uAC15\r\n const parts: string[] = [];\r\n // \uC139\uC158 \uCCAB \uBB38\uB2E8\uC5D0 secPr(\uD398\uC774\uC9C0 \uC124\uC815) \u2014 \uD55C\uCEF4\uC774 \uC139\uC158\uC744 \uAD6C\uC131\uD558\uB294 \uB370 \uD544\uC218\r\n parts.push(\r\n `<hp:p id=\"${makeParaId()}\" paraPrIDRef=\"0\" styleIDRef=\"0\" pageBreak=\"0\" columnBreak=\"0\" merged=\"0\">` +\r\n `<hp:run charPrIDRef=\"0\">${SEC_PR_XML}</hp:run>` +\r\n `<hp:run charPrIDRef=\"0\"><hp:t/></hp:run>` +\r\n DEFAULT_LINESEG +\r\n `</hp:p>`\r\n );\r\n for (const p of paragraphs) {\r\n parts.push(buildParagraphXml(p, binEntries));\r\n // \uAC19\uC740 paragraph \uC548\uC758 header/footer/footnote \uCEE8\uD2B8\uB864\uC774 \uAC00\uC9C4 paragraphs \uB3C4 \uBCF8\uBB38 \uD750\uB984\uC5D0 \uD3C9\uD0C4 \uCD9C\uB825\r\n for (const ctrl of p.controls) {\r\n if (\r\n ctrl.kind === \"header\" ||\r\n ctrl.kind === \"footer\" ||\r\n ctrl.kind === \"footnote\"\r\n ) {\r\n for (const subPara of ctrl.paragraphs) {\r\n parts.push(buildParagraphXml(subPara, binEntries));\r\n }\r\n }\r\n }\r\n }\r\n return (\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\r\n `<hs:sec ${OWPML_NS}>` +\r\n parts.join(\"\") +\r\n `</hs:sec>`\r\n );\r\n}\r\n\r\nfunction buildParagraphXml(p: HwpParagraph, binEntries: BinEntry[]): string {\r\n const parts: string[] = [];\r\n\r\n // \uD14D\uC2A4\uD2B8 run \uB4E4 (charShape \uBCC4\uB85C \uBD84\uB9AC\uB428)\r\n if (p.runs.length > 0) {\r\n for (const run of p.runs) {\r\n parts.push(buildRunXml(run));\r\n }\r\n } else if (p.text.length > 0) {\r\n parts.push(buildRunXml({ charShapeId: 0, text: p.text }));\r\n }\r\n\r\n // \uCEE8\uD2B8\uB864 (\uD45C/\uADF8\uB9BC/...)\r\n for (const ctrl of p.controls) {\r\n const xml = buildControlXml(ctrl, binEntries);\r\n if (xml) parts.push(xml);\r\n }\r\n\r\n if (parts.length === 0) {\r\n parts.push(`<hp:run charPrIDRef=\"0\"/>`);\r\n }\r\n\r\n return (\r\n `<hp:p id=\"${makeParaId()}\" paraPrIDRef=\"${p.paraShapeId}\" styleIDRef=\"${p.styleId}\" pageBreak=\"0\" columnBreak=\"0\" merged=\"0\">` +\r\n parts.join(\"\") +\r\n DEFAULT_LINESEG +\r\n `</hp:p>`\r\n );\r\n}\r\n\r\nfunction buildRunXml(run: HwpRun): string {\r\n return `<hp:run charPrIDRef=\"${run.charShapeId}\"><hp:t>${escapeXml(run.text)}</hp:t></hp:run>`;\r\n}\r\n\r\n// \uC774\uBBF8\uC9C0 \uD45C\uC2DC \uAE30\uBCF8 \uD06C\uAE30(HWPUNIT). \uC6D0\uBCF8 \uD53D\uC140\uC744 \uBAA8\uB974\uBBC0\uB85C \uACE0\uC815\uAC12 \u2014 \uD55C\uCEF4\uC774 \uBE44\uC728 \uBCF4\uC815.\r\nconst PIC_WIDTH = 40000;\r\nconst PIC_HEIGHT = 30000;\r\n\r\n/**\r\n * \uD55C\uCEF4 \uC815\uC0C1 hp:pic \uAD6C\uC870(etc/hwpjs_image_test \uAE30\uC900).\r\n * orgSz=curSz 1:1, \uB2E8\uC704\uD589\uB82C \u2014 \uD55C\uAE00\uC774 \uC2E4\uC81C \uD06C\uAE30\uB97C \uC7AC\uACC4\uC0B0\uD55C\uB2E4.\r\n */\r\nfunction buildPicXml(entry: BinEntry): string {\r\n const w = PIC_WIDTH;\r\n const h = PIC_HEIGHT;\r\n return (\r\n `<hp:pic id=\"${makeParaId()}\" zOrder=\"0\" numberingType=\"PICTURE\" textWrap=\"TOP_AND_BOTTOM\" textFlow=\"BOTH_SIDES\" ` +\r\n `lock=\"0\" dropcapstyle=\"None\" href=\"\" groupLevel=\"0\" instid=\"${makeParaId()}\" reverse=\"0\">` +\r\n `<hp:offset x=\"0\" y=\"0\"/>` +\r\n `<hp:orgSz width=\"${w}\" height=\"${h}\"/>` +\r\n `<hp:curSz width=\"${w}\" height=\"${h}\"/>` +\r\n `<hp:flip horizontal=\"0\" vertical=\"0\"/>` +\r\n `<hp:rotationInfo angle=\"0\" centerX=\"${(w / 2) | 0}\" centerY=\"${(h / 2) | 0}\" rotateimage=\"1\"/>` +\r\n `<hp:renderingInfo>` +\r\n `<hc:transMatrix e1=\"1\" e2=\"0\" e3=\"0\" e4=\"0\" e5=\"1\" e6=\"0\"/>` +\r\n `<hc:scaMatrix e1=\"1\" e2=\"0\" e3=\"0\" e4=\"0\" e5=\"1\" e6=\"0\"/>` +\r\n `<hc:rotMatrix e1=\"1\" e2=\"0\" e3=\"0\" e4=\"0\" e5=\"1\" e6=\"0\"/>` +\r\n `</hp:renderingInfo>` +\r\n `<hc:img binaryItemIDRef=\"${entry.id}\" bright=\"0\" contrast=\"0\" effect=\"REAL_PIC\" alpha=\"0\"/>` +\r\n `<hp:imgRect><hc:pt0 x=\"0\" y=\"0\"/><hc:pt1 x=\"${w}\" y=\"0\"/><hc:pt2 x=\"${w}\" y=\"${h}\"/><hc:pt3 x=\"0\" y=\"${h}\"/></hp:imgRect>` +\r\n `<hp:imgClip left=\"0\" right=\"${w}\" top=\"0\" bottom=\"${h}\"/>` +\r\n `<hp:inMargin left=\"0\" right=\"0\" top=\"0\" bottom=\"0\"/>` +\r\n `<hp:imgDim dimwidth=\"${w}\" dimheight=\"${h}\"/>` +\r\n `<hp:effects/>` +\r\n `<hp:sz width=\"${w}\" widthRelTo=\"ABSOLUTE\" height=\"${h}\" heightRelTo=\"ABSOLUTE\" protect=\"0\"/>` +\r\n `<hp:pos treatAsChar=\"1\" affectLSpacing=\"0\" flowWithText=\"1\" allowOverlap=\"0\" holdAnchorAndSO=\"0\" ` +\r\n `vertRelTo=\"PARA\" horzRelTo=\"COLUMN\" vertAlign=\"TOP\" horzAlign=\"LEFT\" vertOffset=\"0\" horzOffset=\"0\"/>` +\r\n `<hp:outMargin left=\"0\" right=\"0\" top=\"0\" bottom=\"0\"/>` +\r\n `</hp:pic>`\r\n );\r\n}\r\n\r\nfunction buildControlXml(ctrl: HwpControl, binEntries: BinEntry[]): string {\r\n switch (ctrl.kind) {\r\n case \"table\":\r\n return `<hp:run charPrIDRef=\"0\">${buildTableXml(ctrl, binEntries)}</hp:run>`;\r\n case \"picture\": {\r\n const entry = binEntries.find((b) => b.id === `image${ctrl.binDataId}`);\r\n if (!entry) return \"\";\r\n return `<hp:run charPrIDRef=\"0\">${buildPicXml(entry)}</hp:run>`;\r\n }\r\n case \"shape\": {\r\n // \uB3C4\uD615: 1\uCC28 \uD3EC\uD305\uC5D0\uC11C\uB294 placeholder. line \uC740 \uC88C\uD45C\uB9CC \uBCF4\uC874.\r\n const tag =\r\n ctrl.shapeType === \"line\"\r\n ? \"line\"\r\n : ctrl.shapeType === \"rectangle\"\r\n ? \"rect\"\r\n : ctrl.shapeType === \"ellipse\"\r\n ? \"ellipse\"\r\n : ctrl.shapeType === \"arc\"\r\n ? \"arc\"\r\n : ctrl.shapeType === \"polygon\"\r\n ? \"polygon\"\r\n : \"curve\";\r\n const coords =\r\n ctrl.shapeType === \"line\" && ctrl.x1 !== undefined\r\n ? `<hc:startPt x=\"${ctrl.x1}\" y=\"${ctrl.y1 ?? 0}\"/><hc:endPt x=\"${ctrl.x2 ?? 0}\" y=\"${ctrl.y2 ?? 0}\"/>`\r\n : \"\";\r\n return `<hp:run charPrIDRef=\"0\"><hp:${tag}>${coords}</hp:${tag}></hp:run>`;\r\n }\r\n case \"equation\": {\r\n if (ctrl.script.length === 0) return \"\";\r\n return (\r\n `<hp:run charPrIDRef=\"0\">` +\r\n `<hp:equation>` +\r\n `<hp:script>${escapeXml(ctrl.script)}</hp:script>` +\r\n `</hp:equation>` +\r\n `</hp:run>`\r\n );\r\n }\r\n case \"header\":\r\n case \"footer\":\r\n case \"footnote\":\r\n case \"field\":\r\n case \"unknown\":\r\n return \"\";\r\n }\r\n}\r\n\r\n// \uBCF8\uBB38 \uAC00\uC6A9 \uD3ED(HWPUNIT) \u2014 SEC_PR_XML \uC758 pagePr(width 59528, \uC88C\uC6B0 margin 8504) \uAE30\uC900.\r\nconst TABLE_BODY_WIDTH = 42520;\r\nconst DEFAULT_ROW_HEIGHT = 2000; // \uD55C\uAE00\uC774 \uC2E4\uC81C \uB192\uC774\uB97C \uC7AC\uACC4\uC0B0\uD558\uBBC0\uB85C \uCD94\uC815\uAC12\uC73C\uB85C \uCDA9\uBD84\r\n\r\nfunction buildTableXml(t: HwpTableControl, binEntries: BinEntry[]): string {\r\n const colCount = Math.max(1, t.colCount);\r\n const rowCount = Math.max(1, t.rowCount);\r\n const cellW = Math.max(1, Math.floor(TABLE_BODY_WIDTH / colCount));\r\n const tableW = cellW * colCount;\r\n const tableH = DEFAULT_ROW_HEIGHT * rowCount;\r\n\r\n const rows: HwpTableCell[][] = Array.from({ length: t.rowCount }, () => []);\r\n for (const cell of t.cells) {\r\n if (cell.row >= 0 && cell.row < t.rowCount) rows[cell.row].push(cell);\r\n }\r\n for (const row of rows) row.sort((a, b) => a.col - b.col);\r\n\r\n const subListAttrs =\r\n `id=\"\" textDirection=\"HORIZONTAL\" lineWrap=\"BREAK\" vertAlign=\"CENTER\" ` +\r\n `linkListIDRef=\"0\" linkListNextIDRef=\"0\" textWidth=\"0\" textHeight=\"0\" hasTextRef=\"0\" hasNumRef=\"0\"`;\r\n\r\n const trXml = rows\r\n .map((row) => {\r\n const tcXml = row\r\n .map((cell) => {\r\n const cellInner = cell.paragraphs\r\n .map((q) => buildParagraphXml(q, binEntries))\r\n .join(\"\");\r\n const colSpan = Math.max(1, cell.colSpan);\r\n const rowSpan = Math.max(1, cell.rowSpan);\r\n const cw = cellW * colSpan;\r\n const ch = DEFAULT_ROW_HEIGHT * rowSpan;\r\n const inner =\r\n cellInner ||\r\n `<hp:p id=\"${makeParaId()}\" paraPrIDRef=\"0\" styleIDRef=\"0\"><hp:run charPrIDRef=\"0\"/>${DEFAULT_LINESEG}</hp:p>`;\r\n return (\r\n `<hp:tc name=\"\" header=\"0\" hasMargin=\"0\" protect=\"0\" editable=\"0\" dirty=\"0\" borderFillIDRef=\"0\">` +\r\n `<hp:subList ${subListAttrs}>${inner}</hp:subList>` +\r\n `<hp:cellAddr colAddr=\"${cell.col}\" rowAddr=\"${cell.row}\"/>` +\r\n `<hp:cellSpan colSpan=\"${colSpan}\" rowSpan=\"${rowSpan}\"/>` +\r\n `<hp:cellSz width=\"${cw}\" height=\"${ch}\"/>` +\r\n `<hp:cellMargin left=\"510\" right=\"510\" top=\"141\" bottom=\"141\"/>` +\r\n `</hp:tc>`\r\n );\r\n })\r\n .join(\"\");\r\n return `<hp:tr>${tcXml}</hp:tr>`;\r\n })\r\n .join(\"\");\r\n\r\n return (\r\n `<hp:tbl id=\"${makeParaId()}\" zOrder=\"0\" numberingType=\"TABLE\" textWrap=\"TOP_AND_BOTTOM\" textFlow=\"BOTH_SIDES\" ` +\r\n `lock=\"0\" dropcapstyle=\"None\" pageBreak=\"CELL\" repeatHeader=\"1\" rowCnt=\"${rowCount}\" colCnt=\"${colCount}\" ` +\r\n `cellSpacing=\"0\" borderFillIDRef=\"0\" noAdjust=\"0\">` +\r\n `<hp:sz width=\"${tableW}\" widthRelTo=\"ABSOLUTE\" height=\"${tableH}\" heightRelTo=\"ABSOLUTE\" protect=\"0\"/>` +\r\n `<hp:pos treatAsChar=\"1\" affectLSpacing=\"0\" flowWithText=\"1\" allowOverlap=\"0\" holdAnchorAndSO=\"0\" ` +\r\n `vertRelTo=\"PARA\" horzRelTo=\"COLUMN\" vertAlign=\"TOP\" horzAlign=\"LEFT\" vertOffset=\"0\" horzOffset=\"0\"/>` +\r\n `<hp:outMargin left=\"283\" right=\"283\" top=\"283\" bottom=\"283\"/>` +\r\n `<hp:inMargin left=\"510\" right=\"510\" top=\"141\" bottom=\"141\"/>` +\r\n trXml +\r\n `</hp:tbl>`\r\n );\r\n}\r\n", "/**\r\n * HwpDocument IR \u2192 Markdown.\r\n *\r\n * \uBCF4\uC874:\r\n * - \uBB38\uB2E8 \uD14D\uC2A4\uD2B8\r\n * - \uAE00\uC790 \uBAA8\uC591 \uAD75\uAC8C/\uAE30\uC6B8\uC784 (charShape lookup)\r\n * - \uD45C (markdown table; \uC140 \uBCD1\uD569\uC740 \uD3C9\uD0C4\uD654)\r\n * - \uC774\uBBF8\uC9C0 (`` \uB610\uB294 `data:` URI \uC778\uB77C\uC778)\r\n * - \uBA38\uB9AC\uB9D0/\uAF2C\uB9AC\uB9D0/\uAC01\uC8FC (\uC778\uC6A9 \uBE14\uB85D)\r\n *\r\n * \uC758\uB3C4\uC801\uC73C\uB85C \uB2E8\uC21C\uD654\uD55C \uBD80\uBD84:\r\n * - \uD5E4\uB529 \uB808\uBCA8 \uC790\uB3D9 \uD310\uBCC4 \uC548 \uD568 (paraShape.heading \uC815\uBCF4 \uBD80\uC871)\r\n * - \uC0C9\uC0C1/\uC0AC\uC774\uC988\uB294 \uB9C8\uD06C\uB2E4\uC6B4 \uD45C\uC900\uC5D0\uC11C \uD45C\uD604 \uBABB \uD568 \u2192 \uBB34\uC2DC\r\n * - \uC904\uBC14\uAFC8\uC740 \\n\\n \uC73C\uB85C \uBB38\uB2E8 \uAD6C\uBD84\r\n */\r\n\r\nimport { detectImageMime } from \"./binData.js\";\r\nimport type {\r\n HwpDocument,\r\n HwpParagraph,\r\n HwpRun,\r\n HwpTableControl,\r\n HwpTableCell,\r\n HwpCharShape,\r\n} from \"./types.js\";\r\n\r\nexport interface MarkdownWriteOptions {\r\n /** \uC774\uBBF8\uC9C0\uB97C base64 data URI \uB85C \uC778\uB77C\uC778 (\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC989\uC2DC \uB80C\uB354\uB9C1) */\r\n embedImages?: boolean;\r\n /** \uC774\uBBF8\uC9C0 src \uACBD\uB85C \uBCC0\uD658 (embedImages=false \uC77C \uB54C) */\r\n imageSrcResolver?: (binPath: string, storageId: number) => string;\r\n}\r\n\r\nexport function hwpDocumentToMarkdown(\r\n doc: HwpDocument,\r\n options?: MarkdownWriteOptions\r\n): string {\r\n const blocks: string[] = [];\r\n for (const section of doc.sections) {\r\n for (const para of section.paragraphs) {\r\n const md = renderParagraph(para, doc, options);\r\n if (md.length > 0) blocks.push(md);\r\n }\r\n }\r\n return blocks.join(\"\\n\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim() + \"\\n\";\r\n}\r\n\r\nfunction renderParagraph(\r\n p: HwpParagraph,\r\n doc: HwpDocument,\r\n options?: MarkdownWriteOptions\r\n): string {\r\n const parts: string[] = [];\r\n\r\n // \uBCF8\uBB38 runs (charShape \uAE30\uBC18 \uAD75\uAC8C/\uAE30\uC6B8\uC784 \uBCF4\uC874)\r\n if (p.runs.length > 0) {\r\n parts.push(renderRuns(p.runs, doc));\r\n } else if (p.text.length > 0) {\r\n parts.push(escapeMd(p.text));\r\n }\r\n\r\n // \uCEE8\uD2B8\uB864\r\n for (const ctrl of p.controls) {\r\n switch (ctrl.kind) {\r\n case \"table\":\r\n parts.push(renderTable(ctrl, doc, options));\r\n break;\r\n case \"picture\": {\r\n const md = renderPicture(ctrl.binDataId, doc, options);\r\n if (md) parts.push(md);\r\n break;\r\n }\r\n case \"header\":\r\n case \"footer\":\r\n case \"footnote\": {\r\n const inner = ctrl.paragraphs\r\n .map((q) => renderParagraph(q, doc, options))\r\n .filter((s) => s.length > 0)\r\n .join(\"\\n\");\r\n if (inner) {\r\n // \uC778\uC6A9 \uBE14\uB85D\uC73C\uB85C \uD45C\uC2DC\r\n parts.push(inner.split(\"\\n\").map((line) => `> ${line}`).join(\"\\n\"));\r\n }\r\n break;\r\n }\r\n case \"equation\":\r\n if (ctrl.script.length > 0) {\r\n parts.push(\"```\\n\" + ctrl.script + \"\\n```\");\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return parts.filter((s) => s.length > 0).join(\"\\n\\n\");\r\n}\r\n\r\nfunction renderRuns(runs: HwpRun[], doc: HwpDocument): string {\r\n const out: string[] = [];\r\n for (const run of runs) {\r\n if (run.text.length === 0) continue;\r\n const cs = doc.docInfo.charShapes[run.charShapeId];\r\n out.push(applyInlineStyle(escapeMd(run.text), cs));\r\n }\r\n return out.join(\"\");\r\n}\r\n\r\nfunction applyInlineStyle(text: string, cs: HwpCharShape | undefined): string {\r\n if (!cs) return text;\r\n let s = text;\r\n if (cs.bold) s = `**${s}**`;\r\n if (cs.italic) s = `*${s}*`;\r\n // \uBC11\uC904/\uCDE8\uC18C\uC120: \uD45C\uC900 MD \uBD80\uC7AC \u2014 \uC0DD\uB7B5\r\n return s;\r\n}\r\n\r\nfunction renderTable(\r\n t: HwpTableControl,\r\n doc: HwpDocument,\r\n options?: MarkdownWriteOptions\r\n): string {\r\n if (t.rowCount === 0 || t.colCount === 0) return \"\";\r\n // \uC140\uC744 \uD589\uBCC4\uB85C \uADF8\uB8F9\uD551\uD558\uACE0 col \uC21C\uC73C\uB85C \uC815\uB82C\r\n const grid: (HwpTableCell | undefined)[][] = Array.from({ length: t.rowCount }, () =>\r\n new Array(t.colCount).fill(undefined)\r\n );\r\n for (const cell of t.cells) {\r\n if (cell.row >= 0 && cell.row < t.rowCount && cell.col >= 0 && cell.col < t.colCount) {\r\n // \uBCD1\uD569\uB41C \uC140 \uC601\uC5ED\uB3C4 \uB9C8\uD06C\uB2E4\uC6B4\uC5D0\uC11C\uB294 \uB3D9\uC77C \uCEE8\uD150\uCE20\uB85C \uCC44\uC6C0 (\uD45C\uC900 MD \uD45C\uB294 \uBCD1\uD569 \uBBF8\uC9C0\uC6D0)\r\n for (let r = 0; r < cell.rowSpan; r++) {\r\n for (let c = 0; c < cell.colSpan; c++) {\r\n const ri = cell.row + r;\r\n const ci = cell.col + c;\r\n if (ri < t.rowCount && ci < t.colCount && !grid[ri][ci]) {\r\n grid[ri][ci] = cell;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const rows: string[][] = [];\r\n for (const row of grid) {\r\n const cellTexts = row.map((cell) => {\r\n if (!cell) return \"\";\r\n const inner = cell.paragraphs\r\n .map((q) => renderParagraph(q, doc, options))\r\n .filter((s) => s.length > 0)\r\n .join(\" \")\r\n .replace(/\\n+/g, \" \")\r\n .replace(/\\|/g, \"\\\\|\");\r\n return inner;\r\n });\r\n rows.push(cellTexts);\r\n }\r\n\r\n if (rows.length === 0) return \"\";\r\n\r\n // \uCCAB \uD589\uC744 \uD5E4\uB354\uB85C (\uB9C8\uD06C\uB2E4\uC6B4 \uD45C \uADDC\uCE59 \u2014 \uD56D\uC0C1 \uD5E4\uB354 1\uD589 + \uAD6C\uBD84\uC120)\r\n const header = rows[0];\r\n const sep = header.map(() => \"---\");\r\n const body = rows.slice(1);\r\n\r\n const fmt = (cells: string[]) => `| ${cells.map((c) => c || \" \").join(\" | \")} |`;\r\n const lines: string[] = [];\r\n lines.push(fmt(header));\r\n lines.push(fmt(sep));\r\n for (const row of body) lines.push(fmt(row));\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction renderPicture(\r\n binDataId: number,\r\n doc: HwpDocument,\r\n options?: MarkdownWriteOptions\r\n): string {\r\n const entry = doc.binData.get(binDataId);\r\n if (!entry) return \"\";\r\n const ext = entry.extension.toLowerCase();\r\n const binPath = `BinData/image${binDataId}.${ext}`;\r\n\r\n if (options?.embedImages) {\r\n const mime = detectImageMime(ext);\r\n const b64 = bytesToBase64(entry.data);\r\n return ``;\r\n }\r\n\r\n if (options?.imageSrcResolver) {\r\n return `})`;\r\n }\r\n return ``;\r\n}\r\n\r\nfunction bytesToBase64(bytes: Uint8Array): string {\r\n if (typeof Buffer !== \"undefined\") {\r\n return Buffer.from(bytes).toString(\"base64\");\r\n }\r\n // \uBE0C\uB77C\uC6B0\uC800 fallback\r\n let bin = \"\";\r\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);\r\n return (globalThis as { btoa?: (s: string) => string }).btoa?.(bin) ?? \"\";\r\n}\r\n\r\n/**\r\n * \uB9C8\uD06C\uB2E4\uC6B4 \uBA54\uD0C0\uBB38\uC790 \uC774\uC2A4\uCF00\uC774\uD504.\r\n * \uB108\uBB34 \uACF5\uACA9\uC801\uC73C\uB85C \uD558\uBA74 \uBB38\uC11C\uAC00 \uC77D\uAE30 \uC5B4\uB824\uC6CC\uC9C0\uBBC0\uB85C \uD575\uC2EC\uB9CC \uCC98\uB9AC.\r\n * - \uBC31\uC2AC\uB798\uC2DC\r\n * - \uC778\uB77C\uC778 \uAC15\uC870: `*`, `_`, `` ` ``, `~`\r\n * - \uC904 \uC2DC\uC791\uC758 \uD5E4\uB529(#)/\uC778\uC6A9(>) \uB9C8\uCEE4\r\n *\r\n * \uC904 \uC2DC\uC791\uC758 `1.`, `-`, `+` \uB294 \uC77C\uBD80\uB7EC \uC774\uC2A4\uCF00\uC774\uD504\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC77C\uBC18 \uD14D\uC2A4\uD2B8(\uD2B9\uD788 \uB0A0\uC9DC)\uC5D0 \uB108\uBB34 \uC790\uC8FC \uB4F1\uC7A5.\r\n */\r\nfunction escapeMd(text: string): string {\r\n return text\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/([*_`~])/g, \"\\\\$1\")\r\n .replace(/^([#>])/gm, \"\\\\$1\");\r\n}\r\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n const cache: RegExp[] = [];\n return (indent: number) => {\n const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n let regex = cache[cacheIndex];\n if (!regex) {\n regex = createRegex(cacheIndex);\n cache[cacheIndex] = regex;\n }\n return regex;\n };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),\n fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')),\n blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]') // only non-empty lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // any bullet ends the table rows\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]') // only non-empty lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n const lines = str.split('\\n');\n let end = lines.length - 1;\n while (end >= 0 && other.blankLine.test(lines[end])) {\n end--;\n }\n if (lines.length - end <= 2) {\n // we want to keep single trailing blank lines\n return str;\n }\n\n return lines.slice(0, end + 1).join('\\n');\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const raw = this.options.pedantic\n ? cap[0]\n : trimTrailingBlankLines(cap[0]);\n const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw,\n codeBlockStyle: 'indented',\n text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n const itemToken = item.tokens[0];\n if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n } else if (item.task) {\n item.task = false;\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const raw = trimTrailingBlankLines(cap[0]);\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw,\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: raw,\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: rtrim(cap[0], '\\n'),\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: rtrim(cap[0], '\\n'),\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n const text = cap[1].trim();\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[3] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n this.tokenizer.lexer = this;\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n this.tokenizer.lexer = this;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) !== null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) !== null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) !== null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n return tokens;\n }\n\n private infiniteLoopError(byte: number) {\n const errMsg = 'Infinite loop on byte: ' + byte;\n if (this.options.silent) {\n console.error(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer(block = this.block) {\n return block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser(block = this.block) {\n return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "/**\r\n * Markdown \u2192 HwpDocument IR.\r\n *\r\n * `marked` \uC758 lexer \uB85C \uD1A0\uD070 \uD2B8\uB9AC\uB97C \uB9CC\uB4E4\uACE0 IR \uB85C \uBCC0\uD658.\r\n * - heading \u2192 \uAD75\uC740 paragraph (charShape \uBCC4\uB3C4 \uC815\uC758: \uD070 \uC0AC\uC774\uC988 + bold)\r\n * - paragraph \u2192 text + bold/italic run \uBD84\uD560\r\n * - list (ordered/unordered) \u2192 \"1. \" / \"- \" prefix \uAC00 \uD3EC\uD568\uB41C paragraph (\uAC04\uB2E8 \uD45C\uD604)\r\n * - blockquote \u2192 \uC778\uC6A9 paragraph (\uD68C\uC0C9 \uBC30\uACBD)\r\n * - code (block / inline) \u2192 \uBAA8\uB178\uC2A4\uD398\uC774\uC2A4 charShape\r\n * - table \u2192 HwpTableControl (\uC140 paragraph \uC7AC\uADC0)\r\n * - image \u2192 HwpPictureControl + binData \uB4F1\uB85D (data: URI \uB9CC \uC9C0\uC6D0)\r\n * - link \u2192 \uD14D\uC2A4\uD2B8 \uADF8\uB300\uB85C (\uB9C1\uD06C \uC790\uCCB4\uB294 \uBCF4\uC874\uD558\uC9C0 \uC54A\uC74C \u2014 HWP \uD544\uB4DC \uCEE8\uD2B8\uB864\uC740 \uBCC4\uB3C4 \uC791\uC5C5)\r\n */\r\n\r\nimport { marked, type Tokens } from \"marked\";\r\nimport type {\r\n HwpDocument,\r\n HwpDocInfo,\r\n HwpParagraph,\r\n HwpRun,\r\n HwpControl,\r\n HwpTableCell,\r\n HwpCharShape,\r\n HwpParaShape,\r\n HwpStyle,\r\n HwpFaceName,\r\n ImageResolver,\r\n ConvertOptions,\r\n} from \"./types.js\";\r\n\r\ninterface BuildContext {\r\n /** charShape ID \uBC1C\uAE09\uAE30 */\r\n charShapeIds: Map<string, number>;\r\n /** binData \uC801\uC7AC (storageId \u2192 bytes) */\r\n binData: Map<number, { data: Uint8Array; extension: string }>;\r\n /** \uB2E4\uC74C\uC5D0 \uBC1C\uAE09\uD560 binData storageId */\r\n nextBinDataId: number;\r\n /** data URI \uAC00 \uC544\uB2CC \uC774\uBBF8\uC9C0(file://\u00B7\uACBD\uB85C)\uB97C \uBC14\uC774\uD2B8\uB85C \uD574\uC11D (\uC120\uD0DD) */\r\n imageResolver?: ImageResolver;\r\n}\r\n\r\n/** Markdown \uD14D\uC2A4\uD2B8\uB97C HwpDocument \uB85C \uBCC0\uD658. */\r\nexport function markdownToHwpDocument(md: string, options?: ConvertOptions): HwpDocument {\r\n const tokens = marked.lexer(md);\r\n\r\n const ctx: BuildContext = {\r\n charShapeIds: new Map(),\r\n binData: new Map(),\r\n nextBinDataId: 1,\r\n imageResolver: options?.imageResolver,\r\n };\r\n\r\n // \uAE30\uBCF8 charShapes / paraShapes / styles / fontFaces \uB4F1\uB85D\r\n // ID 0: \uAE30\uBCF8 (10pt, \uD568\uCD08\uB86C\uBC14\uD0D5)\r\n // \uCD94\uAC00 ID \uB294 paragraph \uCC98\uB9AC \uC911\uC5D0 \uB3D9\uC801\uC73C\uB85C \uBC1C\uAE09\r\n const charShapes: HwpCharShape[] = [defaultCharShape()];\r\n ctx.charShapeIds.set(\"default\", 0);\r\n\r\n const paraShapes: HwpParaShape[] = [defaultParaShape()];\r\n const styles: HwpStyle[] = [{ name: \"\uBC14\uD0D5\uAE00\", engName: \"Normal\", paraShapeId: 0, charShapeId: 0 }];\r\n const fontFaces: HwpFaceName[][] = [\r\n [{ name: \"\uD568\uCD08\uB86C\uBC14\uD0D5\" }, { name: \"\uB9D1\uC740 \uACE0\uB515\" }, { name: \"Courier New\" }],\r\n [{ name: \"Times New Roman\" }],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [],\r\n ];\r\n\r\n // bold/italic charShape \uC0AC\uC804 \uB4F1\uB85D\r\n const idBold = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true });\r\n const idItalic = registerCharShape(charShapes, ctx, { ...defaultCharShape(), italic: true });\r\n const idBoldItalic = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, italic: true });\r\n // \uD5E4\uB529(\uAD75\uAC8C + \uD070 \uC0AC\uC774\uC988) \u2014 h1=1800, h2=1600, h3=1400, h4-6=1200\r\n const idH1 = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1800 });\r\n const idH2 = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1600 });\r\n const idH3 = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1400 });\r\n const idHmin = registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1200 });\r\n // \uBAA8\uB178\uC2A4\uD398\uC774\uC2A4\r\n const idMono = registerCharShape(charShapes, ctx, {\r\n ...defaultCharShape(),\r\n faceNameIds: { hangul: 2, latin: 2, hanja: 2, japanese: 2, other: 2, symbol: 2, user: 2 },\r\n });\r\n\r\n const headingShapeId = (depth: number) => (depth === 1 ? idH1 : depth === 2 ? idH2 : depth === 3 ? idH3 : idHmin);\r\n\r\n const paragraphs: HwpParagraph[] = [];\r\n\r\n const visitTokens = (tks: Tokens.Generic[]): void => {\r\n for (const tk of tks) {\r\n paragraphs.push(...renderToken(tk, { idBold, idItalic, idBoldItalic, headingShapeId, idMono }, ctx, charShapes));\r\n }\r\n };\r\n visitTokens(tokens as Tokens.Generic[]);\r\n\r\n return {\r\n header: defaultFileHeader(),\r\n docInfo: {\r\n fontFaces,\r\n charShapes,\r\n paraShapes,\r\n styles,\r\n binData: [],\r\n borderFills: [],\r\n numberings: [],\r\n bullets: [],\r\n tabDefs: [],\r\n },\r\n sections: [{ paragraphs }],\r\n binData: ctx.binData,\r\n };\r\n}\r\n\r\ninterface ShapeIds {\r\n idBold: number;\r\n idItalic: number;\r\n idBoldItalic: number;\r\n idMono: number;\r\n headingShapeId: (depth: number) => number;\r\n}\r\n\r\nfunction renderToken(\r\n tk: Tokens.Generic,\r\n ids: ShapeIds,\r\n ctx: BuildContext,\r\n charShapes: HwpCharShape[]\r\n): HwpParagraph[] {\r\n switch (tk.type) {\r\n case \"heading\": {\r\n const t = tk as Tokens.Heading;\r\n const csId = ids.headingShapeId(t.depth);\r\n const runs = inlineToRuns(t.tokens ?? [], ids, csId);\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls: [],\r\n },\r\n ];\r\n }\r\n case \"paragraph\": {\r\n const t = tk as Tokens.Paragraph;\r\n const runs = inlineToRuns(t.tokens ?? [], ids, 0);\r\n const controls: HwpControl[] = [];\r\n // image \uD1A0\uD070\uC740 \uBCC4\uB3C4 \uCEE8\uD2B8\uB864\uB85C\r\n const imageControls = collectImagesFromInline(t.tokens ?? [], ctx);\r\n controls.push(...imageControls);\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls,\r\n },\r\n ];\r\n }\r\n case \"blockquote\": {\r\n const t = tk as Tokens.Blockquote;\r\n const inner = (t.tokens ?? []).flatMap((sub) =>\r\n renderToken(sub as Tokens.Generic, ids, ctx, charShapes)\r\n );\r\n // \"> \" prefix \uB85C \uC2DC\uAC01\uC801 \uD45C\uC2DC\r\n return inner.map((p) => ({\r\n ...p,\r\n text: `> ${p.text}`,\r\n runs: p.runs.length > 0 ? [{ charShapeId: p.runs[0].charShapeId, text: `> ${runsToText(p.runs)}` }] : [],\r\n }));\r\n }\r\n case \"list\": {\r\n const t = tk as Tokens.List;\r\n const out: HwpParagraph[] = [];\r\n let idx = t.start === \"\" ? 1 : Number(t.start) || 1;\r\n for (const item of t.items) {\r\n const prefix = t.ordered ? `${idx}. ` : \"- \";\r\n const inner = (item.tokens ?? []).flatMap((sub) =>\r\n renderToken(sub as Tokens.Generic, ids, ctx, charShapes)\r\n );\r\n if (inner.length === 0) {\r\n out.push({\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: prefix,\r\n runs: [{ charShapeId: 0, text: prefix }],\r\n controls: [],\r\n });\r\n } else {\r\n // \uCCAB paragraph \uC5D0 prefix \uCD94\uAC00\r\n const first = inner[0];\r\n const newText = prefix + first.text;\r\n const newRuns: HwpRun[] = [\r\n { charShapeId: 0, text: prefix },\r\n ...first.runs,\r\n ];\r\n out.push({ ...first, text: newText, runs: newRuns });\r\n for (let i = 1; i < inner.length; i++) out.push(inner[i]);\r\n }\r\n idx++;\r\n }\r\n return out;\r\n }\r\n case \"code\": {\r\n const t = tk as Tokens.Code;\r\n // \uCF54\uB4DC \uBE14\uB85D \u2014 \uBAA8\uB178\uC2A4\uD398\uC774\uC2A4 paragraph \uB4E4\uB85C \uBD84\uD560\r\n const lines = t.text.split(\"\\n\");\r\n return lines.map((line) => ({\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: line,\r\n runs: line.length > 0 ? [{ charShapeId: ids.idMono, text: line }] : [],\r\n controls: [],\r\n }));\r\n }\r\n case \"table\": {\r\n const t = tk as Tokens.Table;\r\n const rowCount = 1 + t.rows.length;\r\n const colCount = t.header.length;\r\n const cells: HwpTableCell[] = [];\r\n // \uD5E4\uB354 \uD589\r\n for (let c = 0; c < t.header.length; c++) {\r\n const cellTokens = t.header[c].tokens ?? [];\r\n const runs = inlineToRuns(cellTokens, ids, ids.idBold);\r\n cells.push({\r\n col: c,\r\n row: 0,\r\n colSpan: 1,\r\n rowSpan: 1,\r\n paragraphs: [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls: [],\r\n },\r\n ],\r\n });\r\n }\r\n // \uBCF8 \uD589\r\n for (let r = 0; r < t.rows.length; r++) {\r\n for (let c = 0; c < t.rows[r].length; c++) {\r\n const cellTokens = t.rows[r][c].tokens ?? [];\r\n const runs = inlineToRuns(cellTokens, ids, 0);\r\n cells.push({\r\n col: c,\r\n row: r + 1,\r\n colSpan: 1,\r\n rowSpan: 1,\r\n paragraphs: [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls: [],\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\",\r\n runs: [],\r\n controls: [{ kind: \"table\", rowCount, colCount, cells }],\r\n },\r\n ];\r\n }\r\n case \"hr\":\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\u2500\u2500\u2500\u2500\u2500\",\r\n runs: [{ charShapeId: 0, text: \"\u2500\u2500\u2500\u2500\u2500\" }],\r\n controls: [],\r\n },\r\n ];\r\n case \"space\":\r\n return [];\r\n case \"text\": {\r\n // \uBE14\uB85D \uB808\uBCA8 text \uD1A0\uD070 \u2014 list item \uC548 \uB4F1\uC5D0\uC11C \uB4F1\uC7A5 (tight list).\r\n const t = tk as Tokens.Text & { tokens?: Tokens.Generic[] };\r\n const inlineTokens =\r\n t.tokens ??\r\n ([{ type: \"text\", text: t.text, raw: t.text }] as unknown as Tokens.Generic[]);\r\n const runs = inlineToRuns(inlineTokens, ids, 0);\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls: [],\r\n },\r\n ];\r\n }\r\n default:\r\n return [];\r\n }\r\n}\r\n\r\n/** \uC778\uB77C\uC778 \uD1A0\uD070 (text / strong / em / codespan / link / br / image) \u2192 HwpRun[] */\r\nfunction inlineToRuns(\r\n tokens: Tokens.Generic[],\r\n ids: ShapeIds,\r\n baseCharShapeId: number\r\n): HwpRun[] {\r\n const runs: HwpRun[] = [];\r\n for (const t of tokens) {\r\n walkInline(t, baseCharShapeId, ids, runs, false, false);\r\n }\r\n // \uC778\uC811 \uB3D9\uC77C charShape \uD569\uCE58\uAE30\r\n return mergeRuns(runs);\r\n}\r\n\r\nfunction walkInline(\r\n tk: Tokens.Generic,\r\n baseId: number,\r\n ids: ShapeIds,\r\n runs: HwpRun[],\r\n bold: boolean,\r\n italic: boolean\r\n): void {\r\n switch (tk.type) {\r\n case \"text\": {\r\n const t = tk as Tokens.Text;\r\n const text = t.text;\r\n // \uC790\uC2DD \uD1A0\uD070\uC774 \uC788\uC73C\uBA74 \uC7AC\uADC0, \uC5C6\uC73C\uBA74 \uADF8\uB300\uB85C\r\n if ((t as Tokens.Text & { tokens?: Tokens.Generic[] }).tokens) {\r\n for (const sub of (t as Tokens.Text & { tokens: Tokens.Generic[] }).tokens) {\r\n walkInline(sub, baseId, ids, runs, bold, italic);\r\n }\r\n } else if (text.length > 0) {\r\n runs.push({ charShapeId: pickShapeId(baseId, ids, bold, italic), text: decodeEntities(text) });\r\n }\r\n break;\r\n }\r\n case \"strong\": {\r\n const t = tk as Tokens.Strong;\r\n for (const sub of t.tokens ?? []) walkInline(sub, baseId, ids, runs, true, italic);\r\n break;\r\n }\r\n case \"em\": {\r\n const t = tk as Tokens.Em;\r\n for (const sub of t.tokens ?? []) walkInline(sub, baseId, ids, runs, bold, true);\r\n break;\r\n }\r\n case \"codespan\": {\r\n const t = tk as Tokens.Codespan;\r\n runs.push({ charShapeId: ids.idMono, text: decodeEntities(t.text) });\r\n break;\r\n }\r\n case \"link\": {\r\n const t = tk as Tokens.Link;\r\n // \uB9C1\uD06C \uD14D\uC2A4\uD2B8\uB9CC \uBCF4\uC874 (URL \uC740 \uBBF8\uBCF4\uC874 \u2014 \uD544\uB4DC \uCEE8\uD2B8\uB864\uC740 \uBCC4\uB3C4 \uC791\uC5C5)\r\n for (const sub of t.tokens ?? []) walkInline(sub, baseId, ids, runs, bold, italic);\r\n break;\r\n }\r\n case \"br\":\r\n runs.push({ charShapeId: pickShapeId(baseId, ids, bold, italic), text: \"\\n\" });\r\n break;\r\n case \"del\": {\r\n const t = tk as Tokens.Del;\r\n for (const sub of t.tokens ?? []) walkInline(sub, baseId, ids, runs, bold, italic);\r\n break;\r\n }\r\n case \"image\":\r\n // \uC774\uBBF8\uC9C0\uB294 paragraph \uB808\uBCA8\uC5D0\uC11C \uBCC4\uB3C4 \uCC98\uB9AC \u2014 runs \uC5D0\uB294 alt \uB9CC\r\n runs.push({ charShapeId: baseId, text: (tk as Tokens.Image).text });\r\n break;\r\n case \"escape\":\r\n runs.push({ charShapeId: pickShapeId(baseId, ids, bold, italic), text: (tk as Tokens.Escape).text });\r\n break;\r\n case \"html\":\r\n // raw HTML \uC740 \uD14D\uC2A4\uD2B8\uB85C\r\n runs.push({ charShapeId: baseId, text: (tk as Tokens.HTML).text });\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nfunction pickShapeId(baseId: number, ids: ShapeIds, bold: boolean, italic: boolean): number {\r\n if (bold && italic) return ids.idBoldItalic;\r\n if (bold) return ids.idBold;\r\n if (italic) return ids.idItalic;\r\n return baseId;\r\n}\r\n\r\nfunction mergeRuns(runs: HwpRun[]): HwpRun[] {\r\n const out: HwpRun[] = [];\r\n for (const r of runs) {\r\n const last = out[out.length - 1];\r\n if (last && last.charShapeId === r.charShapeId) {\r\n last.text += r.text;\r\n } else {\r\n out.push({ ...r });\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nfunction runsToText(runs: HwpRun[]): string {\r\n return runs.map((r) => r.text).join(\"\");\r\n}\r\n\r\nfunction decodeEntities(s: string): string {\r\n return s\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\");\r\n}\r\n\r\n/**\r\n * paragraph \uD1A0\uD070 \uC548\uC758 image \uD1A0\uD070\uC744 \uCD94\uCD9C \u2192 HwpPictureControl \uB85C.\r\n * src \uAC00 `data:` URI \uC778 \uACBD\uC6B0\uB9CC binData \uB85C \uB4F1\uB85D (\uC678\uBD80 URL/\uC0C1\uB300 \uACBD\uB85C\uB294 \uBCF4\uC874 \uBD88\uAC00).\r\n */\r\nfunction collectImagesFromInline(\r\n tokens: Tokens.Generic[],\r\n ctx: BuildContext\r\n): HwpControl[] {\r\n const out: HwpControl[] = [];\r\n const visit = (tks: Tokens.Generic[]) => {\r\n for (const tk of tks) {\r\n if (tk.type === \"image\") {\r\n const img = tk as Tokens.Image;\r\n const ctrl = imageTokenToControl(img.href, ctx);\r\n if (ctrl) out.push(ctrl);\r\n }\r\n const subTokens = (tk as Tokens.Generic & { tokens?: Tokens.Generic[] }).tokens;\r\n if (Array.isArray(subTokens)) visit(subTokens);\r\n }\r\n };\r\n visit(tokens);\r\n return out;\r\n}\r\n\r\nfunction imageTokenToControl(href: string, ctx: BuildContext): HwpControl | null {\r\n // data URI \uCC98\uB9AC\r\n const match = /^data:([^;]+);base64,(.*)$/i.exec(href);\r\n if (match) {\r\n const mime = match[1].toLowerCase();\r\n const ext =\r\n mime === \"image/png\"\r\n ? \"png\"\r\n : mime === \"image/jpeg\"\r\n ? \"jpg\"\r\n : mime === \"image/gif\"\r\n ? \"gif\"\r\n : mime === \"image/bmp\"\r\n ? \"bmp\"\r\n : mime === \"image/webp\"\r\n ? \"webp\"\r\n : \"bin\";\r\n let bytes: Uint8Array;\r\n try {\r\n if (typeof Buffer !== \"undefined\") {\r\n bytes = new Uint8Array(Buffer.from(match[2], \"base64\"));\r\n } else {\r\n const bin = (globalThis as { atob?: (s: string) => string }).atob?.(match[2]) ?? \"\";\r\n bytes = new Uint8Array(bin.length);\r\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\r\n }\r\n } catch {\r\n return null;\r\n }\r\n const id = ctx.nextBinDataId++;\r\n ctx.binData.set(id, { data: bytes, extension: ext });\r\n return { kind: \"picture\", binDataId: id };\r\n }\r\n // data URI \uAC00 \uC544\uB2C8\uBA74 resolver(\uC8FC\uC785 \uC2DC)\uB85C file://\u00B7\uB85C\uCEEC \uACBD\uB85C\uB97C \uD574\uC11D. \uC5C6\uC73C\uBA74 skip.\r\n const resolved = ctx.imageResolver?.(href);\r\n if (resolved && resolved.data.length > 0) {\r\n const id = ctx.nextBinDataId++;\r\n ctx.binData.set(id, { data: resolved.data, extension: resolved.extension.toLowerCase() });\r\n return { kind: \"picture\", binDataId: id };\r\n }\r\n return null;\r\n}\r\n\r\n// ============================================================\r\n// \uAE30\uBCF8 IR \uBE4C\uB354\r\n// ============================================================\r\n\r\nfunction defaultCharShape(): HwpCharShape {\r\n return {\r\n faceNameIds: { hangul: 0, latin: 1, hanja: 0, japanese: 0, other: 0, symbol: 0, user: 0 },\r\n baseSize: 1000, // 10pt\r\n property: 0,\r\n textColor: 0,\r\n shadeColor: 0xffffff,\r\n underlineColor: 0,\r\n shadowColor: 0,\r\n bold: false,\r\n italic: false,\r\n underline: false,\r\n strikeout: false,\r\n };\r\n}\r\n\r\nfunction defaultParaShape(): HwpParaShape {\r\n return {\r\n alignment: \"justify\",\r\n property: 0,\r\n leftMargin: 0,\r\n rightMargin: 0,\r\n indent: 0,\r\n prevSpacing: 0,\r\n nextSpacing: 0,\r\n lineSpacing: 160,\r\n };\r\n}\r\n\r\nfunction defaultFileHeader(): HwpDocument[\"header\"] {\r\n return {\r\n version: { major: 5, minor: 0, build: 6, revision: 0 },\r\n flags: {\r\n raw: 0,\r\n compressed: false,\r\n encrypted: false,\r\n distribution: false,\r\n script: false,\r\n drm: false,\r\n xmlTemplate: false,\r\n documentHistory: false,\r\n digitalSignature: false,\r\n publicKeyEncrypted: false,\r\n modifiedCertificate: false,\r\n prepareDistribution: false,\r\n },\r\n };\r\n}\r\n\r\nfunction registerCharShape(\r\n shapes: HwpCharShape[],\r\n ctx: BuildContext,\r\n cs: HwpCharShape\r\n): number {\r\n const key = JSON.stringify(cs);\r\n const existing = ctx.charShapeIds.get(key);\r\n if (existing !== undefined) return existing;\r\n const id = shapes.length;\r\n shapes.push(cs);\r\n ctx.charShapeIds.set(key, id);\r\n return id;\r\n}\r\n", "// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint: number): number {\n if (\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff\n ) {\n return 0xff_fd;\n }\n\n return decodeMap.get(codePoint) ?? codePoint;\n}\n", "/**\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n * @param input Input string to encode or decode.\n */\nexport function decodeBase64(input: string): Uint16Array {\n const binary: string = atob(input);\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n\n return out;\n}\n", "// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n \"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\",\n);\n", "// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed XML decode trie data. */\nexport const xmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n \"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\",\n);\n", "/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport enum BinTrieFlags {\n VALUE_LENGTH = 0b1100_0000_0000_0000,\n FLAG13 = 0b0010_0000_0000_0000,\n BRANCH_LENGTH = 0b0001_1111_1000_0000,\n JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n", "import { replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\n\nconst enum CharCodes {\n NUM = 35, // \"#\"\n SEMI = 59, // \";\"\n EQUALS = 61, // \"=\"\n ZERO = 48, // \"0\"\n NINE = 57, // \"9\"\n LOWER_A = 97, // \"a\"\n LOWER_F = 102, // \"f\"\n LOWER_X = 120, // \"x\"\n LOWER_Z = 122, // \"z\"\n UPPER_A = 65, // \"A\"\n UPPER_F = 70, // \"F\"\n UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nfunction isNumber(code: number): boolean {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code)\n );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to decode.\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n EntityStart,\n NumericStart,\n NumericDecimal,\n NumericHex,\n NamedEntity,\n}\n\n/**\n * Decoding mode for named entities.\n */\nexport enum DecodingMode {\n /** Entities in text nodes that can end with any character. */\n Legacy = 0,\n /** Only allow entities terminated with a semicolon. */\n Strict = 1,\n /** Entities in attributes have limitations on ending characters. */\n Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n missingSemicolonAfterCharacterReference(): void;\n absenceOfDigitsInNumericCharacterReference(\n consumedCharacters: number,\n ): void;\n validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n private readonly decodeTree: Uint16Array,\n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n private readonly emitCodePoint: (cp: number, consumed: number) => void,\n /** An object that is used to produce errors. */\n private readonly errors?: EntityErrorProducer | undefined,\n ) {}\n\n /** The current state of the decoder. */\n private state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n private consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n private result = 0;\n\n /** The current index in the decode tree. */\n private treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n private excess = 1;\n /** The mode in which the decoder is operating. */\n private decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n private runConsumed = 0;\n\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode: DecodingMode): void {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input: string, offset: number): number {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericStart(input: string, offset: number): number {\n if (offset >= input.length) {\n return -1;\n }\n\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericHex(input: string, offset: number): number {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit =\n char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n } else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericDecimal(input: string, offset: number): number {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n } else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n private emitNumericEntity(lastCp: number, expectedLength: number): number {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n } else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n\n this.errors.validateNumericCharacterReference(this.result);\n }\n\n return this.consumed;\n }\n\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNamedEntity(input: string, offset: number): number {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength =\n (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord =\n decodeTree[\n this.treeIndex + 1 + (charIndexInPacked >> 1)\n ];\n const expectedChar =\n charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n\n if (offset >= input.length) break;\n\n const char = input.charCodeAt(offset);\n\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (\n char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0\n ) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n this.treeIndex = determineBranch(\n decodeTree,\n current,\n this.treeIndex + Math.max(1, valueLength),\n char,\n );\n\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (\n this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0\n ) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n\n return -1;\n }\n\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n private emitNotTerminatedNamedEntity(): number {\n const { result, decodeTree } = this;\n\n const valueLength =\n (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n\n return this.consumed;\n }\n\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n private emitNamedEntityData(\n result: number,\n valueLength: number,\n consumed: number,\n ): number {\n const { decodeTree } = this;\n\n this.emitCodePoint(\n valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1],\n consumed,\n );\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n\n return consumed;\n }\n\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n * @returns The number of characters consumed.\n */\n end(): number {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(\n decodeTree,\n (data) => (returnValue += String.fromCodePoint(data)),\n );\n\n return function decodeWithTrie(\n input: string,\n decodeMode: DecodingMode,\n ): string {\n let lastIndex = 0;\n let offset = 0;\n\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n\n decoder.startEntity(decodeMode);\n\n const length = decoder.write(\n input,\n // Skip the \"&\"\n offset + 1,\n );\n\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n\n const result = returnValue + input.slice(lastIndex);\n\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n\n return result;\n };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIndex Index immediately after the current node header.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n decodeTree: Uint16Array,\n current: number,\n nodeIndex: number,\n char: number,\n): number {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n\n if (midKey < char) {\n lo = mid + 1;\n } else if (midKey > char) {\n hi = mid - 1;\n } else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n\n return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n htmlString: string,\n mode: DecodingMode = DecodingMode.Legacy,\n): string {\n return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\nexport { replaceCodePoint } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n", "import {\n DecodingMode,\n EntityDecoder,\n htmlDecodeTree,\n xmlDecodeTree,\n} from \"entities/decode\";\n\nconst enum CharCodes {\n Tab = 0x9, // \"\\t\"\n NewLine = 0xa, // \"\\n\"\n FormFeed = 0xc, // \"\\f\"\n CarriageReturn = 0xd, // \"\\r\"\n Space = 0x20, // \" \"\n ExclamationMark = 0x21, // \"!\"\n Number = 0x23, // \"#\"\n Amp = 0x26, // \"&\"\n SingleQuote = 0x27, // \"'\"\n DoubleQuote = 0x22, // '\"'\n Dash = 0x2d, // \"-\"\n Slash = 0x2f, // \"/\"\n Zero = 0x30, // \"0\"\n Nine = 0x39, // \"9\"\n Semi = 0x3b, // \";\"\n Lt = 0x3c, // \"<\"\n Eq = 0x3d, // \"=\"\n Gt = 0x3e, // \">\"\n Questionmark = 0x3f, // \"?\"\n UpperA = 0x41, // \"A\"\n LowerA = 0x61, // \"a\"\n UpperF = 0x46, // \"F\"\n LowerF = 0x66, // \"f\"\n UpperZ = 0x5a, // \"Z\"\n LowerZ = 0x7a, // \"z\"\n LowerX = 0x78, // \"x\"\n OpeningSquareBracket = 0x5b, // \"[\"\n}\n\n/** All the states the tokenizer can be in. */\nconst enum State {\n Text = 1,\n BeforeTagName, // After <\n InTagName,\n InSelfClosingTag,\n BeforeClosingTagName,\n InClosingTagName,\n AfterClosingTagName,\n\n // Attributes\n BeforeAttributeName,\n InAttributeName,\n AfterAttributeName,\n BeforeAttributeValue,\n InAttributeValueDq, // \"\n InAttributeValueSq, // '\n InAttributeValueNq,\n\n // Declarations\n BeforeDeclaration, // !\n InDeclaration,\n\n // Processing instructions\n InProcessingInstruction, // ?\n\n // Comments & CDATA\n BeforeComment,\n CDATASequence,\n DeclarationSequence,\n InSpecialComment,\n InCommentLike,\n\n // Special tags\n SpecialStartSequence,\n InSpecialTag,\n InPlainText,\n\n InEntity,\n}\n\nfunction isWhitespace(c: number): boolean {\n return (\n c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn\n );\n}\n\nfunction isEndOfTagSection(c: number): boolean {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\n\nfunction isASCIIAlpha(c: number): boolean {\n return (\n (c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ)\n );\n}\n\n/**\n * Quote style used for parsed attributes.\n */\nexport enum QuoteType {\n NoValue = 0,\n Unquoted = 1,\n Single = 2,\n Double = 3,\n}\n\n/**\n * Low-level tokenizer callback interface.\n */\nexport interface Callbacks {\n onattribdata(start: number, endIndex: number): void;\n onattribentity(codepoint: number): void;\n onattribend(quote: QuoteType, endIndex: number): void;\n onattribname(start: number, endIndex: number): void;\n oncdata(start: number, endIndex: number, endOffset: number): void;\n onclosetag(start: number, endIndex: number): void;\n oncomment(start: number, endIndex: number, endOffset: number): void;\n ondeclaration(start: number, endIndex: number): void;\n onend(): void;\n onopentagend(endIndex: number): void;\n onopentagname(start: number, endIndex: number): void;\n onprocessinginstruction(start: number, endIndex: number): void;\n onselfclosingtag(endIndex: number): void;\n ontext(start: number, endIndex: number): void;\n ontextentity(codepoint: number, endIndex: number): void;\n isInForeignContext?(): boolean;\n}\n\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n Empty: new Uint8Array(0),\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x21, 0x3e]), // `--!>`\n Doctype: new Uint8Array([0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65]), // `doctype`\n IframeEnd: new Uint8Array([0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65]), // `</iframe`\n NoembedEnd: new Uint8Array([\n 0x3c, 0x2f, 0x6e, 0x6f, 0x65, 0x6d, 0x62, 0x65, 0x64,\n ]), // `</noembed`\n NoframesEnd: new Uint8Array([\n 0x3c, 0x2f, 0x6e, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73,\n ]), // `</noframes`\n Plaintext: new Uint8Array([\n 0x3c, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74,\n ]), // `</plaintext`\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n TextareaEnd: new Uint8Array([\n 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n ]), // `</textarea`\n XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\n\n/**\n * Maps the first lowercase character of an HTML tag name to the sequence\n * used for special-tag detection. All sequences share a common layout\n * where index 2 is the first tag-name character, so matching always\n * continues from offset 3.\n */\nconst specialStartSequences = new Map<number, Uint8Array>([\n [Sequences.IframeEnd[2], Sequences.IframeEnd],\n [Sequences.NoembedEnd[2], Sequences.NoembedEnd],\n [Sequences.Plaintext[2], Sequences.Plaintext],\n [Sequences.ScriptEnd[2], Sequences.ScriptEnd],\n [Sequences.TitleEnd[2], Sequences.TitleEnd],\n [Sequences.XmpEnd[2], Sequences.XmpEnd],\n]);\n\n/**\n * Tokenizer implementation used by `Parser`.\n */\nexport default class Tokenizer {\n /** The current state the tokenizer is in. */\n private state = State.Text;\n /** The read buffer. */\n private buffer = \"\";\n /** The beginning of the section that is currently being read. */\n private sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n private index = 0;\n /** The start of the last entity. */\n private entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n private baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n private isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n running = true;\n /** The offset of the current buffer. */\n private offset = 0;\n\n private readonly xmlMode: boolean;\n private readonly decodeEntities: boolean;\n private readonly recognizeSelfClosing: boolean;\n private readonly entityDecoder: EntityDecoder;\n\n constructor(\n {\n xmlMode = false,\n decodeEntities = true,\n recognizeSelfClosing = xmlMode,\n }: {\n xmlMode?: boolean;\n decodeEntities?: boolean;\n recognizeSelfClosing?: boolean;\n },\n private readonly cbs: Callbacks,\n ) {\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.recognizeSelfClosing = recognizeSelfClosing;\n this.entityDecoder = new EntityDecoder(\n xmlMode ? xmlDecodeTree : htmlDecodeTree,\n (cp, consumed) => this.emitCodePoint(cp, consumed),\n );\n }\n\n reset(): void {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.isSpecial = false;\n this.currentSequence = Sequences.Empty;\n this.sequenceIndex = 0;\n this.running = true;\n this.offset = 0;\n }\n\n write(chunk: string): void {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n }\n\n end(): void {\n if (this.running) this.finish();\n }\n\n pause(): void {\n this.running = false;\n }\n\n resume(): void {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n }\n\n private stateText(c: number): void {\n if (\n c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))\n ) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n\n private currentSequence: Uint8Array = Sequences.Empty;\n private sequenceIndex = 0;\n\n private enterTagBody(): void {\n if (this.currentSequence === Sequences.Plaintext) {\n this.currentSequence = Sequences.Empty;\n this.state = State.InPlainText;\n } else if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n } else {\n this.state = State.Text;\n }\n }\n\n /**\n * Match the opening tag name against an HTML text-only tag sequence.\n *\n * Some tags share an initial prefix (`script`/`style`, `title`/`textarea`,\n * `noembed`/`noframes`), so we may switch to an alternate sequence at the\n * first distinguishing byte. On a successful full match we fall back to\n * the normal tag-name state; a later `>` will enter raw-text, RCDATA, or\n * plaintext mode based on `currentSequence` / `isSpecial`.\n * @param c Current character code point.\n */\n private stateSpecialStartSequence(c: number): void {\n const lower = c | 0x20;\n\n // Still matching \u2014 check for an alternate sequence at branch points.\n if (this.sequenceIndex < this.currentSequence.length) {\n if (lower === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex++;\n return;\n }\n\n if (this.sequenceIndex === 3) {\n if (\n this.currentSequence === Sequences.ScriptEnd &&\n lower === Sequences.StyleEnd[3]\n ) {\n this.currentSequence = Sequences.StyleEnd;\n this.sequenceIndex = 4;\n return;\n }\n\n if (\n this.currentSequence === Sequences.TitleEnd &&\n lower === Sequences.TextareaEnd[3]\n ) {\n this.currentSequence = Sequences.TextareaEnd;\n this.sequenceIndex = 4;\n return;\n }\n } else if (\n this.sequenceIndex === 4 &&\n this.currentSequence === Sequences.NoembedEnd &&\n lower === Sequences.NoframesEnd[4]\n ) {\n this.currentSequence = Sequences.NoframesEnd;\n this.sequenceIndex = 5;\n return;\n }\n } else if (isEndOfTagSection(c)) {\n // Full match on a valid tag boundary \u2014 keep the sequence.\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n return;\n }\n\n // No match \u2014 abandon special-tag detection.\n this.isSpecial = false;\n this.currentSequence = Sequences.Empty;\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n }\n\n private stateCDATASequence(c: number): void {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n } else {\n this.sequenceIndex = 0;\n if (this.xmlMode) {\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n } else {\n this.state = State.InSpecialComment;\n this.stateInSpecialComment(c); // Reconsume the character\n }\n }\n }\n\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n * @param c Current character code point.\n * @returns Whether the character was found.\n */\n private fastForwardTo(c: number): boolean {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n\n return false;\n }\n\n /**\n * Emit a comment token and return to the text state.\n * @param offset Number of characters in the end sequence that have already been matched.\n */\n private emitComment(offset: number): void {\n this.cbs.oncomment(this.sectionStart, this.index, offset);\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n * @param c Current character code point.\n */\n private stateInCommentLike(c: number): void {\n if (\n !this.xmlMode &&\n this.currentSequence === Sequences.CommentEnd &&\n this.sequenceIndex <= 1 &&\n /*\n * We're still at the very start of the comment: the only\n * characters consumed since `<!--` are the dashes that\n * advanced sequenceIndex (0 for `<!-->`, 1 for `<!--->`).\n */\n this.index === this.sectionStart + this.sequenceIndex &&\n c === CharCodes.Gt\n ) {\n // Abruptly closed empty HTML comment.\n this.emitComment(this.sequenceIndex);\n } else if (\n this.currentSequence === Sequences.CommentEnd &&\n this.sequenceIndex === 2 &&\n c === CharCodes.Gt\n ) {\n // `!` is optional here, so the same sequence also accepts `-->`.\n this.emitComment(2);\n } else if (\n this.currentSequence === Sequences.CommentEnd &&\n this.sequenceIndex === this.currentSequence.length - 1 &&\n c !== CharCodes.Gt\n ) {\n this.sequenceIndex = Number(c === CharCodes.Dash);\n } else if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n } else {\n this.cbs.oncomment(this.sectionStart, this.index, 3);\n }\n\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n } else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n }\n\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n * @param c Current character code point.\n */\n private isTagStartChar(c: number) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n }\n\n /**\n * Scan raw-text / RCDATA content for the matching end tag.\n *\n * For RCDATA tags (`<title>`, `<textarea>`) entities are decoded inline.\n * For raw-text tags (`<script>`, `<style>`, etc.) we fast-forward to `<`.\n * @param c Current character code point.\n */\n private stateInSpecialTag(c: number): void {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (isEndOfTagSection(c)) {\n const endOfText = this.index - this.currentSequence.length;\n\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n\n this.sequenceIndex = 0;\n }\n\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (this.sequenceIndex === 0) {\n if (\n this.currentSequence === Sequences.TitleEnd ||\n this.currentSequence === Sequences.TextareaEnd\n ) {\n // RCDATA tags have to parse entities while still looking for their end tag.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n } else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of RCDATA tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n } else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n }\n\n private stateBeforeTagName(c: number): void {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.Questionmark) {\n if (this.xmlMode) {\n this.state = State.InProcessingInstruction;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n } else {\n this.state = State.InSpecialComment;\n this.sectionStart = this.index;\n }\n } else if (this.isTagStartChar(c)) {\n this.sectionStart = this.index;\n\n const special =\n this.xmlMode || this.cbs.isInForeignContext?.()\n ? undefined\n : specialStartSequences.get(c | 0x20);\n\n if (special === undefined) {\n this.state = State.InTagName;\n } else {\n this.isSpecial = true;\n this.currentSequence = special;\n this.sequenceIndex = 3;\n this.state = State.SpecialStartSequence;\n }\n } else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n } else {\n this.state = State.Text;\n this.stateText(c);\n }\n }\n private stateInTagName(c: number): void {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n private stateBeforeClosingTagName(c: number): void {\n if (isWhitespace(c)) {\n if (this.xmlMode) {\n // Ignore\n } else {\n this.state = State.InSpecialComment;\n this.sectionStart = this.index;\n }\n } else if (c === CharCodes.Gt) {\n this.state = State.Text;\n if (!this.xmlMode) {\n this.sectionStart = this.index + 1;\n }\n } else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n }\n private stateInClosingTagName(c: number): void {\n if (isEndOfTagSection(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n }\n private stateAfterClosingTagName(c: number): void {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n private stateBeforeAttributeName(c: number): void {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n this.enterTagBody();\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n } else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n /**\n * Handle `/` before `>` in an opening tag.\n *\n * In HTML mode, text-only tags ignore the self-closing flag and still enter\n * their raw-text/RCDATA/plaintext state unless self-closing tags are being\n * recognized. In XML mode, or for ordinary tags, the tokenizer returns to\n * regular text parsing after emitting the self-closing callback.\n * @param c Current character code point.\n */\n private stateInSelfClosingTag(c: number): void {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.sectionStart = this.index + 1;\n\n if (!this.recognizeSelfClosing) {\n this.enterTagBody();\n return;\n }\n\n this.state = State.Text;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n this.currentSequence = Sequences.Empty;\n } else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n private stateInAttributeName(c: number): void {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = this.index;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n }\n private stateAfterAttributeName(c: number): void {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n } else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n } else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n private stateBeforeAttributeValue(c: number): void {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n } else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n }\n private handleInAttributeValue(c: number, quote: number) {\n if (\n c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))\n ) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(\n quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single,\n this.index + 1,\n );\n this.state = State.BeforeAttributeName;\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n private stateInAttributeValueDoubleQuotes(c: number): void {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n }\n private stateInAttributeValueSingleQuotes(c: number): void {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n }\n private stateInAttributeValueNoQuotes(c: number): void {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n /**\n * Distinguish between CDATA, declarations, HTML comments, and HTML bogus\n * comments after `<!`.\n *\n * In HTML mode, only real comments and doctypes stay on declaration paths;\n * everything else becomes a bogus comment terminated by the next `>`.\n * @param c Current character code point.\n */\n private stateBeforeDeclaration(c: number): void {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n } else if (this.xmlMode) {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n } else if ((c | 0x20) === Sequences.Doctype[0]) {\n this.state = State.DeclarationSequence;\n this.currentSequence = Sequences.Doctype;\n this.sequenceIndex = 1;\n } else if (c === CharCodes.Gt) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.Dash) {\n this.state = State.BeforeComment;\n } else {\n this.state = State.InSpecialComment;\n }\n }\n /**\n * Continue matching `doctype` after `<!d`.\n *\n * A full `doctype` match stays on the declaration path; any other name falls\n * back to an HTML bogus comment, which matches browser behavior for\n * non-doctype `<!...>` constructs.\n * @param c Current character code point.\n */\n private stateDeclarationSequence(c: number): void {\n if (this.sequenceIndex === this.currentSequence.length) {\n this.state = State.InDeclaration;\n this.stateInDeclaration(c);\n } else if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (c === CharCodes.Gt) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n } else {\n this.state = State.InSpecialComment;\n }\n }\n private stateInDeclaration(c: number): void {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n /**\n * XML processing instructions (`<?...?>`).\n *\n * In HTML mode `<?` is routed to `InSpecialComment` instead, so this\n * state is only reachable in XML mode.\n * @param c Current character code point.\n */\n private stateInProcessingInstruction(c: number): void {\n if (c === CharCodes.Questionmark) {\n // Remember that we just consumed `?`, so the next `>` closes the PI.\n this.sequenceIndex = 1;\n } else if (c === CharCodes.Gt && this.sequenceIndex === 1) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);\n this.sequenceIndex = 0;\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n } else {\n // Keep scanning for the next `?`, which can start a closing `?>`.\n this.sequenceIndex = Number(\n this.fastForwardTo(CharCodes.Questionmark),\n );\n }\n }\n private stateBeforeComment(c: number): void {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n } else if (this.xmlMode) {\n this.state = State.InDeclaration;\n } else if (c === CharCodes.Gt) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n } else {\n this.state = State.InSpecialComment;\n }\n }\n private stateInSpecialComment(c: number): void {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n\n private startEntity() {\n this.baseState = this.state;\n this.state = State.InEntity;\n this.entityStart = this.index;\n this.entityDecoder.startEntity(\n this.xmlMode\n ? DecodingMode.Strict\n : this.baseState === State.Text ||\n this.baseState === State.InSpecialTag\n ? DecodingMode.Legacy\n : DecodingMode.Attribute,\n );\n }\n\n private stateInEntity(): void {\n const indexInBuffer = this.index - this.offset;\n const length = this.entityDecoder.write(this.buffer, indexInBuffer);\n\n // If `length` is positive, we are done with the entity.\n if (length >= 0) {\n this.state = this.baseState;\n\n if (length === 0) {\n this.index -= 1;\n }\n } else {\n if (\n indexInBuffer < this.buffer.length &&\n this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp\n ) {\n this.state = this.baseState;\n this.index -= 1;\n return;\n }\n\n // Mark buffer as consumed.\n this.index = this.offset + this.buffer.length - 1;\n }\n }\n\n /**\n * Remove data that has already been consumed from the buffer.\n */\n private cleanup() {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (\n this.state === State.Text ||\n this.state === State.InPlainText ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)\n ) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n } else if (\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq\n ) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n\n private shouldContinue() {\n return this.index < this.buffer.length + this.offset && this.running;\n }\n\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n private parse() {\n while (this.shouldContinue()) {\n const c = this.buffer.charCodeAt(this.index - this.offset);\n switch (this.state) {\n case State.Text: {\n this.stateText(c);\n break;\n }\n case State.InPlainText: {\n // Skip to end of buffer; cleanup() emits the text.\n this.index = this.buffer.length + this.offset - 1;\n break;\n }\n case State.SpecialStartSequence: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case State.InSpecialTag: {\n this.stateInSpecialTag(c);\n break;\n }\n case State.CDATASequence: {\n this.stateCDATASequence(c);\n break;\n }\n case State.DeclarationSequence: {\n this.stateDeclarationSequence(c);\n break;\n }\n case State.InAttributeValueDq: {\n this.stateInAttributeValueDoubleQuotes(c);\n break;\n }\n case State.InAttributeName: {\n this.stateInAttributeName(c);\n break;\n }\n case State.InCommentLike: {\n this.stateInCommentLike(c);\n break;\n }\n case State.InSpecialComment: {\n this.stateInSpecialComment(c);\n break;\n }\n case State.BeforeAttributeName: {\n this.stateBeforeAttributeName(c);\n break;\n }\n case State.InTagName: {\n this.stateInTagName(c);\n break;\n }\n case State.InClosingTagName: {\n this.stateInClosingTagName(c);\n break;\n }\n case State.BeforeTagName: {\n this.stateBeforeTagName(c);\n break;\n }\n case State.AfterAttributeName: {\n this.stateAfterAttributeName(c);\n break;\n }\n case State.InAttributeValueSq: {\n this.stateInAttributeValueSingleQuotes(c);\n break;\n }\n case State.BeforeAttributeValue: {\n this.stateBeforeAttributeValue(c);\n break;\n }\n case State.BeforeClosingTagName: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case State.AfterClosingTagName: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case State.InAttributeValueNq: {\n this.stateInAttributeValueNoQuotes(c);\n break;\n }\n case State.InSelfClosingTag: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case State.InDeclaration: {\n this.stateInDeclaration(c);\n break;\n }\n case State.BeforeDeclaration: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case State.BeforeComment: {\n this.stateBeforeComment(c);\n break;\n }\n case State.InProcessingInstruction: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case State.InEntity: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n }\n\n private finish() {\n if (this.state === State.InEntity) {\n this.entityDecoder.end();\n this.state = this.baseState;\n }\n\n this.handleTrailingData();\n\n this.cbs.onend();\n }\n\n private handleTrailingCommentLikeData(endIndex: number): boolean {\n if (this.state !== State.InCommentLike) {\n return false;\n }\n\n if (this.currentSequence === Sequences.CdataEnd) {\n if (this.xmlMode) {\n if (this.sectionStart < endIndex) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n }\n } else {\n /* In HTML mode, unclosed CDATA is a bogus comment. */\n const cdataStart =\n this.sectionStart - Sequences.Cdata.length - 1;\n this.cbs.oncomment(cdataStart, endIndex, 0);\n }\n } else {\n const offset = this.xmlMode\n ? 0\n : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);\n this.cbs.oncomment(this.sectionStart, endIndex, offset);\n }\n\n return true;\n }\n\n private handleTrailingMarkupDeclaration(endIndex: number): boolean {\n if (this.xmlMode) {\n switch (this.state) {\n case State.InSpecialComment:\n case State.BeforeComment:\n case State.CDATASequence:\n case State.DeclarationSequence:\n case State.InDeclaration: {\n this.cbs.ontext(this.sectionStart, endIndex);\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n switch (this.state) {\n case State.BeforeDeclaration:\n case State.InSpecialComment:\n case State.BeforeComment:\n case State.CDATASequence: {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n return true;\n }\n case State.DeclarationSequence: {\n if (this.sequenceIndex !== Sequences.Doctype.length) {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n return true;\n }\n case State.InDeclaration: {\n return true;\n }\n default: {\n return false;\n }\n }\n }\n\n /** Handle any trailing data. */\n private handleTrailingData() {\n const endIndex = this.buffer.length + this.offset;\n\n if (\n this.handleTrailingCommentLikeData(endIndex) ||\n this.handleTrailingMarkupDeclaration(endIndex)\n ) {\n return;\n }\n\n // If there is no remaining data, we are done.\n if (this.sectionStart >= endIndex) {\n return;\n }\n\n switch (this.state) {\n case State.InTagName:\n case State.BeforeAttributeName:\n case State.BeforeAttributeValue:\n case State.AfterAttributeName:\n case State.InAttributeName:\n case State.InAttributeValueSq:\n case State.InAttributeValueDq:\n case State.InAttributeValueNq:\n case State.InClosingTagName: {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n break;\n }\n default: {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n }\n\n private emitCodePoint(cp: number, consumed: number): void {\n if (\n this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag\n ) {\n if (this.sectionStart < this.entityStart) {\n this.cbs.onattribdata(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n\n this.cbs.onattribentity(cp);\n } else {\n if (this.sectionStart < this.entityStart) {\n this.cbs.ontext(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n\n this.cbs.ontextentity(cp, this.sectionStart);\n }\n }\n}\n", "const { fromCodePoint } = String;\n\nimport Tokenizer, { type Callbacks, QuoteType } from \"./Tokenizer.js\";\n\nconst formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst headingTags = new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\n\nconst openImpliesClose = new Map<string, Set<string>>([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"a\", new Set([\"a\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", headingTags],\n [\"h2\", headingTags],\n [\"h3\", headingTags],\n [\"h4\", headingTags],\n [\"h5\", headingTags],\n [\"h6\", headingTags],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\n\nconst DOCUMENT_TYPE = \"doctype\";\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\n\n/**\n * Elements that can be used to integrate HTML content within foreign namespaces (e.g., SVG or MathML).\n *\n * Entries must use the SVG-adjusted casing (e.g. \"foreignObject\" not\n * \"foreignobject\") since they are compared against adjusted tag names.\n */\nconst htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\n\nconst svgTagNameAdjustments = new Map<string, string>([\n [\"altglyph\", \"altGlyph\"],\n [\"altglyphdef\", \"altGlyphDef\"],\n [\"altglyphitem\", \"altGlyphItem\"],\n [\"animatecolor\", \"animateColor\"],\n [\"animatemotion\", \"animateMotion\"],\n [\"animatetransform\", \"animateTransform\"],\n [\"clippath\", \"clipPath\"],\n [\"feblend\", \"feBlend\"],\n [\"fecolormatrix\", \"feColorMatrix\"],\n [\"fecomponenttransfer\", \"feComponentTransfer\"],\n [\"fecomposite\", \"feComposite\"],\n [\"feconvolvematrix\", \"feConvolveMatrix\"],\n [\"fediffuselighting\", \"feDiffuseLighting\"],\n [\"fedisplacementmap\", \"feDisplacementMap\"],\n [\"fedistantlight\", \"feDistantLight\"],\n [\"fedropshadow\", \"feDropShadow\"],\n [\"feflood\", \"feFlood\"],\n [\"fefunca\", \"feFuncA\"],\n [\"fefuncb\", \"feFuncB\"],\n [\"fefuncg\", \"feFuncG\"],\n [\"fefuncr\", \"feFuncR\"],\n [\"fegaussianblur\", \"feGaussianBlur\"],\n [\"feimage\", \"feImage\"],\n [\"femerge\", \"feMerge\"],\n [\"femergenode\", \"feMergeNode\"],\n [\"femorphology\", \"feMorphology\"],\n [\"feoffset\", \"feOffset\"],\n [\"fepointlight\", \"fePointLight\"],\n [\"fespecularlighting\", \"feSpecularLighting\"],\n [\"fespotlight\", \"feSpotLight\"],\n [\"fetile\", \"feTile\"],\n [\"feturbulence\", \"feTurbulence\"],\n [\"foreignobject\", \"foreignObject\"],\n [\"glyphref\", \"glyphRef\"],\n [\"lineargradient\", \"linearGradient\"],\n [\"radialgradient\", \"radialGradient\"],\n [\"textpath\", \"textPath\"],\n]);\n\nconst enum ForeignContext {\n None,\n Svg,\n MathML,\n}\n\n/**\n * Options for the streaming HTML/XML parser.\n */\nexport interface ParserOptions {\n /**\n * Indicates whether special tags (`<script>`, `<style>`, and `<title>`) should get special treatment\n * and if \"empty\" tags (eg. `<br>`) can have children. If `false`, the content of special tags\n * will be text only. For feeds and other XML content (documents that don't consist of HTML),\n * set this to `true`.\n * @default false\n */\n xmlMode?: boolean;\n\n /**\n * Decode entities within the document.\n * @default true\n */\n decodeEntities?: boolean;\n\n /**\n * If set to true, all tags will be lowercased.\n * @default !xmlMode\n */\n lowerCaseTags?: boolean;\n\n /**\n * If set to `true`, all attribute names will be lowercased. This has noticeable impact on speed.\n * @default !xmlMode\n */\n lowerCaseAttributeNames?: boolean;\n\n /**\n * If set to true, CDATA sections will be recognized as text even if the xmlMode option is not enabled.\n * NOTE: If xmlMode is set to `true` then CDATA sections will always be recognized as text.\n * @default xmlMode\n */\n recognizeCDATA?: boolean;\n\n /**\n * If set to `true`, self-closing tags will trigger the onclosetag event even if xmlMode is not set to `true`.\n * NOTE: If xmlMode is set to `true` then self-closing tags will always be recognized.\n * @default xmlMode\n */\n recognizeSelfClosing?: boolean;\n\n /**\n * Allows the default tokenizer to be overwritten.\n */\n Tokenizer?: typeof Tokenizer;\n}\n\n/**\n * Parser callback interface used by the tokenizer.\n */\nexport interface Handler {\n onparserinit(parser: Parser): void;\n\n /**\n * Resets the handler back to starting state\n */\n onreset(): void;\n\n /**\n * Signals the handler that parsing is done\n */\n onend(): void;\n onerror(error: Error): void;\n onclosetag(name: string, isImplied: boolean): void;\n onopentagname(name: string): void;\n /**\n *\n * @param name Name of the attribute\n * @param value Value of the attribute.\n * @param quote Quotes used around the attribute. `null` if the attribute has no quotes around the value, `undefined` if the attribute has no value.\n */\n onattribute(\n name: string,\n value: string,\n quote?: string | undefined | null,\n ): void;\n onopentag(\n name: string,\n attribs: { [s: string]: string },\n isImplied: boolean,\n ): void;\n ontext(data: string): void;\n oncomment(data: string): void;\n oncdatastart(): void;\n oncdataend(): void;\n oncommentend(): void;\n onprocessinginstruction(name: string, data: string): void;\n}\n\nconst reNameEnd = /\\s|\\//;\n\n/**\n * Incremental parser implementation.\n */\nexport class Parser implements Callbacks {\n /** The start index of the last event. */\n startIndex = 0;\n /** The end index of the last event. */\n endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n private openTagStart = 0;\n\n private tagname = \"\";\n private attribname = \"\";\n private attribvalue = \"\";\n private attribs: null | { [key: string]: string } = null;\n private readonly stack: string[] = [];\n private readonly foreignContext: ForeignContext[];\n private readonly cbs: Partial<Handler>;\n private readonly lowerCaseTagNames: boolean;\n private readonly lowerCaseAttributeNames: boolean;\n private readonly recognizeSelfClosing: boolean;\n /** We are parsing HTML. Inverse of the `xmlMode` option. */\n private readonly htmlMode: boolean;\n private readonly tokenizer: Tokenizer;\n\n private readonly buffers: string[] = [];\n private bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n private writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n private ended = false;\n\n constructor(\n cbs?: Partial<Handler> | null,\n private readonly options: ParserOptions = {},\n ) {\n this.cbs = cbs ?? {};\n this.htmlMode = !this.options.xmlMode;\n this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;\n this.lowerCaseAttributeNames =\n options.lowerCaseAttributeNames ?? this.htmlMode;\n this.recognizeSelfClosing =\n options.recognizeSelfClosing ?? !this.htmlMode;\n this.tokenizer = new (options.Tokenizer ?? Tokenizer)(\n this.options,\n this,\n );\n this.foreignContext = [ForeignContext.None];\n this.cbs.onparserinit?.(this);\n }\n\n // Tokenizer event handlers\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n ontext(start: number, endIndex: number): void {\n const data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n this.cbs.ontext?.(data);\n this.startIndex = endIndex;\n }\n\n /**\n * @param cp Current Unicode code point.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n ontextentity(cp: number, endIndex: number): void {\n this.endIndex = endIndex - 1;\n this.cbs.ontext?.(fromCodePoint(cp));\n this.startIndex = endIndex;\n }\n\n /** @internal */\n isInForeignContext(): boolean {\n return this.foreignContext[0] !== ForeignContext.None;\n }\n\n /**\n * Checks if the current tag is a void element. Override this if you want\n * to specify your own additional void elements.\n * @param name Name of the pseudo selector.\n */\n protected isVoidElement(name: string): boolean {\n return this.htmlMode && voidElements.has(name);\n }\n\n /**\n * Read a tag name from the buffer.\n *\n * When `lowerCaseTagNames` is enabled (the default in HTML mode), the name\n * is lowercased and may be adjusted for SVG casing or the `image` \u2192 `img`\n * alias.\n * @param start Start index of the tag name in the buffer.\n * @param endIndex End index of the tag name in the buffer.\n */\n private readTagName(start: number, endIndex: number): string {\n const name = this.lowerCaseTagNames\n ? this.getSlice(start, endIndex).toLowerCase()\n : this.getSlice(start, endIndex);\n\n if (!(this.lowerCaseTagNames && this.htmlMode)) {\n return name;\n }\n\n if (this.foreignContext[0] === ForeignContext.Svg) {\n return svgTagNameAdjustments.get(name) ?? name;\n }\n\n /*\n * Closing tags for SVG elements inside HTML integration points\n * (e.g. </foreignObject> while inside its own content) need case\n * adjustment so the name matches what was pushed to the stack.\n * `foreignContext.length > 1` means a foreign ancestor exists \u2014\n * the base [None] entry plus at least one pushed context.\n */\n if (this.foreignContext.length > 1) {\n const adjusted = svgTagNameAdjustments.get(name);\n if (adjusted !== undefined && this.stack.includes(adjusted)) {\n return adjusted;\n }\n }\n\n if (!this.isInForeignContext()) {\n return name === \"image\" ? \"img\" : name;\n }\n\n return name;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onopentagname(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n this.emitOpenTag(this.readTagName(start, endIndex));\n }\n\n private emitOpenTag(name: string) {\n this.openTagStart = this.startIndex;\n this.tagname = name;\n\n /*\n * The spec ignores a second <form> when one is already open.\n * Setting tagname to \"\" suppresses all downstream effects: attribs\n * stays null so endOpenTag is a no-op, and closeCurrentTag can't\n * match \"\" on the stack.\n */\n if (this.htmlMode && name === \"form\" && this.stack.includes(\"form\")) {\n this.tagname = \"\";\n return;\n }\n\n const impliesClose = this.htmlMode && openImpliesClose.get(name);\n\n if (impliesClose) {\n while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n this.popElement(true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.unshift(name);\n\n if (this.htmlMode) {\n if (name === \"svg\") {\n this.foreignContext.unshift(ForeignContext.Svg);\n } else if (name === \"math\") {\n this.foreignContext.unshift(ForeignContext.MathML);\n } else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.unshift(ForeignContext.None);\n }\n }\n }\n this.cbs.onopentagname?.(name);\n if (this.cbs.onopentag) this.attribs = {};\n }\n\n private endOpenTag(isImplied: boolean) {\n this.startIndex = this.openTagStart;\n\n if (this.attribs) {\n this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n\n this.tagname = \"\";\n }\n\n /**\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onopentagend(endIndex: number): void {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onclosetag(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n const name = this.readTagName(start, endIndex);\n\n if (!this.isVoidElement(name)) {\n const pos = this.stack.indexOf(name);\n if (pos !== -1) {\n for (let index = 0; index < pos; index++) {\n this.popElement(true);\n }\n this.popElement(false);\n } else if (this.htmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n } else if (this.htmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n this.cbs.onopentagname?.(\"br\");\n this.cbs.onopentag?.(\"br\", {}, true);\n this.cbs.onclosetag?.(\"br\", false);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /**\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onselfclosingtag(endIndex: number): void {\n this.endIndex = endIndex;\n if (this.recognizeSelfClosing || this.isInForeignContext()) {\n this.closeCurrentTag(false);\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n } else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n }\n\n /**\n * Pop the top element off the stack, emit a close event, and maintain\n * the foreign context stack.\n * @param implied Whether this close is implied (not from an explicit end tag).\n */\n private popElement(implied: boolean): void {\n // biome-ignore lint/style/noNonNullAssertion: The element is guaranteed to exist.\n const element = this.stack.shift()!;\n if (\n this.htmlMode &&\n (foreignContextElements.has(element) ||\n htmlIntegrationElements.has(element))\n ) {\n this.foreignContext.shift();\n }\n this.cbs.onclosetag?.(element, implied);\n }\n\n private closeCurrentTag(isOpenImplied: boolean) {\n const name = this.tagname;\n this.endOpenTag(isOpenImplied);\n\n // Self-closing tags will be on the top of the stack\n if (this.stack[0] === name) {\n this.popElement(!isOpenImplied);\n }\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onattribname(start: number, endIndex: number): void {\n this.startIndex = start;\n const name = this.getSlice(start, endIndex);\n\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onattribdata(start: number, endIndex: number): void {\n this.attribvalue += this.getSlice(start, endIndex);\n }\n\n /**\n * @param cp Current Unicode code point.\n * @internal\n */\n onattribentity(cp: number): void {\n this.attribvalue += fromCodePoint(cp);\n }\n\n /**\n * @param quote Quote type used for the current attribute.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onattribend(quote: QuoteType, endIndex: number): void {\n this.endIndex = endIndex;\n\n this.cbs.onattribute?.(\n this.attribname,\n this.attribvalue,\n quote === QuoteType.Double\n ? '\"'\n : quote === QuoteType.Single\n ? \"'\"\n : quote === QuoteType.NoValue\n ? undefined\n : null,\n );\n\n if (this.attribs && !Object.hasOwn(this.attribs, this.attribname)) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n }\n\n private getInstructionName(value: string) {\n const index = value.search(reNameEnd);\n let name = index < 0 ? value : value.substr(0, index);\n\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n\n return name;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n ondeclaration(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n\n if (this.cbs.onprocessinginstruction) {\n /*\n * In HTML mode, ondeclaration is only reached for DOCTYPE\n * (the tokenizer routes everything else to bogus comments).\n */\n const name = this.htmlMode\n ? this.lowerCaseTagNames\n ? DOCUMENT_TYPE\n : value.slice(0, DOCUMENT_TYPE.length)\n : this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @internal\n */\n onprocessinginstruction(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @param offset Offset applied when computing parser indices.\n * @internal\n */\n oncomment(start: number, endIndex: number, offset: number): void {\n this.endIndex = endIndex;\n\n this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));\n this.cbs.oncommentend?.();\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /**\n * @param start Start index for the current parser event.\n * @param endIndex End index for the current parser event.\n * @param offset Offset applied when computing parser indices.\n * @internal\n */\n oncdata(start: number, endIndex: number, offset: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex - offset);\n\n if (!this.htmlMode || this.options.recognizeCDATA) {\n this.cbs.oncdatastart?.();\n this.cbs.ontext?.(value);\n this.cbs.oncdataend?.();\n } else if (this.isInForeignContext()) {\n this.cbs.ontext?.(value);\n } else {\n this.cbs.oncomment?.(`[CDATA[${value}]]`);\n this.cbs.oncommentend?.();\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n onend(): void {\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (let index = 0; index < this.stack.length; index++) {\n this.cbs.onclosetag(this.stack[index], true);\n }\n }\n this.cbs.onend?.();\n }\n\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n reset(): void {\n this.cbs.onreset?.();\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribvalue = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n this.cbs.onparserinit?.(this);\n this.buffers.length = 0;\n this.foreignContext.length = 0;\n this.foreignContext.unshift(ForeignContext.None);\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n }\n\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n * @param data Document to parse.\n */\n parseComplete(data: string): void {\n this.reset();\n this.end(data);\n }\n\n private getSlice(start: number, end: number) {\n if (start === end) {\n return \"\";\n }\n\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n\n let slice = this.buffers[0].slice(\n start - this.bufferOffset,\n end - this.bufferOffset,\n );\n\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n slice += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n\n return slice;\n }\n\n private shiftBuffer(): void {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n }\n\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n * @param chunk Chunk to parse.\n */\n write(chunk: string): void {\n if (this.ended) {\n this.cbs.onerror?.(new Error(\".write() after done!\"));\n return;\n }\n\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n }\n\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n * @param chunk Optional final chunk to parse.\n */\n end(chunk?: string): void {\n if (this.ended) {\n this.cbs.onerror?.(new Error(\".end() after done!\"));\n return;\n }\n\n if (chunk) this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n }\n\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n pause(): void {\n this.tokenizer.pause();\n }\n\n /**\n * Resumes parsing after `pause` was called.\n */\n resume(): void {\n this.tokenizer.resume();\n\n while (\n this.tokenizer.running &&\n this.writeIndex < this.buffers.length\n ) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n\n if (this.ended) this.tokenizer.end();\n }\n}\n", "/**\r\n * HTML \u2192 HwpDocument IR.\r\n *\r\n * `htmlparser2` \uB85C SAX \uD30C\uC2F1 \u2192 \uD2B8\uB9AC \uAD6C\uCD95 \u2192 IR \uBCC0\uD658.\r\n * - p, div, h1~h6 \u2192 paragraph (heading \uC740 \uAD75\uAC8C + \uD070 \uC0AC\uC774\uC988)\r\n * - strong/b, em/i \u2192 \uAD75\uAC8C/\uAE30\uC6B8\uC784 run\r\n * - br \u2192 \uC904\uBC14\uAFC8\r\n * - ul/ol/li \u2192 \"- \" / \"1. \" prefix paragraph\r\n * - table/thead/tbody/tr/th/td \u2192 HwpTableControl\r\n * - img \u2192 HwpPictureControl (src \uAC00 data: URI \uC77C \uB54C\uB9CC)\r\n * - blockquote \u2192 \"> \" prefix paragraph\r\n * - code/pre \u2192 \uBAA8\uB178\uC2A4\uD398\uC774\uC2A4\r\n * - a \u2192 \uD14D\uC2A4\uD2B8\uB9CC (URL \uBBF8\uBCF4\uC874)\r\n * - \uAE30\uD0C0 (style/script/head \uB4F1) \u2192 \uBB34\uC2DC\r\n */\r\n\r\nimport { Parser } from \"htmlparser2\";\r\nimport type {\r\n HwpDocument,\r\n HwpParagraph,\r\n HwpRun,\r\n HwpControl,\r\n HwpTableCell,\r\n HwpCharShape,\r\n HwpParaShape,\r\n HwpStyle,\r\n HwpFaceName,\r\n ImageResolver,\r\n ConvertOptions,\r\n} from \"./types.js\";\r\n\r\ninterface HtmlNode {\r\n tag: string;\r\n attrs: Record<string, string>;\r\n children: (HtmlNode | string)[];\r\n parent: HtmlNode | null;\r\n}\r\n\r\nfunction parseToTree(html: string): HtmlNode {\r\n const root: HtmlNode = { tag: \"#root\", attrs: {}, children: [], parent: null };\r\n let current: HtmlNode = root;\r\n const voidTags = new Set([\r\n \"br\", \"img\", \"hr\", \"input\", \"meta\", \"link\", \"source\", \"track\", \"wbr\", \"col\", \"area\", \"base\", \"embed\",\r\n ]);\r\n const skipTags = new Set([\"script\", \"style\", \"head\", \"noscript\", \"template\"]);\r\n let inSkippedTag = 0;\r\n\r\n const parser = new Parser(\r\n {\r\n onopentag(name, attrs) {\r\n if (skipTags.has(name)) {\r\n inSkippedTag++;\r\n return;\r\n }\r\n if (inSkippedTag > 0) return;\r\n const node: HtmlNode = { tag: name, attrs, children: [], parent: current };\r\n current.children.push(node);\r\n if (!voidTags.has(name)) current = node;\r\n },\r\n ontext(text) {\r\n if (inSkippedTag > 0) return;\r\n current.children.push(text);\r\n },\r\n onclosetag(name) {\r\n if (skipTags.has(name)) {\r\n inSkippedTag = Math.max(0, inSkippedTag - 1);\r\n return;\r\n }\r\n if (inSkippedTag > 0) return;\r\n if (voidTags.has(name)) return;\r\n if (current.tag === name && current.parent) {\r\n current = current.parent;\r\n }\r\n },\r\n },\r\n { decodeEntities: true, lowerCaseTags: true }\r\n );\r\n parser.write(html);\r\n parser.end();\r\n return root;\r\n}\r\n\r\ninterface BuildContext {\r\n charShapeIds: Map<string, number>;\r\n binData: Map<number, { data: Uint8Array; extension: string }>;\r\n nextBinDataId: number;\r\n imageResolver?: ImageResolver;\r\n}\r\n\r\ninterface ShapeIds {\r\n idDefault: number;\r\n idBold: number;\r\n idItalic: number;\r\n idBoldItalic: number;\r\n idMono: number;\r\n idH1: number;\r\n idH2: number;\r\n idH3: number;\r\n idHmin: number;\r\n}\r\n\r\ninterface InlineState {\r\n bold: boolean;\r\n italic: boolean;\r\n mono: boolean;\r\n}\r\n\r\nexport function htmlToHwpDocument(html: string, options?: ConvertOptions): HwpDocument {\r\n const tree = parseToTree(html);\r\n\r\n const ctx: BuildContext = {\r\n charShapeIds: new Map(),\r\n binData: new Map(),\r\n nextBinDataId: 1,\r\n imageResolver: options?.imageResolver,\r\n };\r\n\r\n const charShapes: HwpCharShape[] = [defaultCharShape()];\r\n ctx.charShapeIds.set(\"default\", 0);\r\n\r\n const ids: ShapeIds = {\r\n idDefault: 0,\r\n idBold: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true }),\r\n idItalic: registerCharShape(charShapes, ctx, { ...defaultCharShape(), italic: true }),\r\n idBoldItalic: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, italic: true }),\r\n idMono: registerCharShape(charShapes, ctx, {\r\n ...defaultCharShape(),\r\n faceNameIds: { hangul: 2, latin: 2, hanja: 2, japanese: 2, other: 2, symbol: 2, user: 2 },\r\n }),\r\n idH1: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1800 }),\r\n idH2: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1600 }),\r\n idH3: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1400 }),\r\n idHmin: registerCharShape(charShapes, ctx, { ...defaultCharShape(), bold: true, baseSize: 1200 }),\r\n };\r\n\r\n const paragraphs: HwpParagraph[] = [];\r\n const initialState: InlineState = { bold: false, italic: false, mono: false };\r\n\r\n for (const child of tree.children) {\r\n paragraphs.push(...renderNode(child, ids, ctx, initialState, \"\"));\r\n }\r\n\r\n // \uBE48 paragraph \uC81C\uAC70\r\n const filtered = paragraphs.filter(\r\n (p) => p.text.trim().length > 0 || p.controls.length > 0\r\n );\r\n\r\n return {\r\n header: defaultFileHeader(),\r\n docInfo: {\r\n fontFaces: [\r\n [{ name: \"\uD568\uCD08\uB86C\uBC14\uD0D5\" }, { name: \"\uB9D1\uC740 \uACE0\uB515\" }, { name: \"Courier New\" }],\r\n [{ name: \"Times New Roman\" }],\r\n [],\r\n [],\r\n [],\r\n [],\r\n [],\r\n ],\r\n charShapes,\r\n paraShapes: [defaultParaShape()],\r\n styles: [{ name: \"\uBC14\uD0D5\uAE00\", engName: \"Normal\", paraShapeId: 0, charShapeId: 0 }],\r\n binData: [],\r\n borderFills: [],\r\n numberings: [],\r\n bullets: [],\r\n tabDefs: [],\r\n },\r\n sections: [{ paragraphs: filtered }],\r\n binData: ctx.binData,\r\n };\r\n}\r\n\r\nfunction renderNode(\r\n node: HtmlNode | string,\r\n ids: ShapeIds,\r\n ctx: BuildContext,\r\n state: InlineState,\r\n prefix: string\r\n): HwpParagraph[] {\r\n if (typeof node === \"string\") {\r\n const text = collapseWhitespace(node);\r\n if (!text) return [];\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: prefix + text,\r\n runs:\r\n prefix.length > 0\r\n ? [\r\n { charShapeId: ids.idDefault, text: prefix },\r\n { charShapeId: pickInlineId(ids, state), text },\r\n ]\r\n : [{ charShapeId: pickInlineId(ids, state), text }],\r\n controls: [],\r\n },\r\n ];\r\n }\r\n\r\n const tag = node.tag.toLowerCase();\r\n\r\n // \uBE14\uB85D \uB808\uBCA8 \uD0DC\uADF8 \uCC98\uB9AC\r\n switch (tag) {\r\n case \"p\":\r\n case \"div\":\r\n case \"section\":\r\n case \"article\": {\r\n const runs = collectInlineRuns(node, ids, ctx, state);\r\n const text = runsToText(runs);\r\n const controls = collectInlineControls(node, ctx);\r\n if (text.length === 0 && controls.length === 0) return [];\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: prefix + text,\r\n runs:\r\n prefix.length > 0\r\n ? [{ charShapeId: ids.idDefault, text: prefix }, ...runs]\r\n : runs,\r\n controls,\r\n },\r\n ];\r\n }\r\n case \"h1\":\r\n case \"h2\":\r\n case \"h3\":\r\n case \"h4\":\r\n case \"h5\":\r\n case \"h6\": {\r\n const depth = Number(tag[1]);\r\n const baseShapeId =\r\n depth === 1 ? ids.idH1 : depth === 2 ? ids.idH2 : depth === 3 ? ids.idH3 : ids.idHmin;\r\n const runs = collectInlineRuns(node, ids, ctx, state, baseShapeId);\r\n const text = runsToText(runs);\r\n if (!text) return [];\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text,\r\n runs,\r\n controls: [],\r\n },\r\n ];\r\n }\r\n case \"ul\":\r\n case \"ol\": {\r\n const out: HwpParagraph[] = [];\r\n let idx = 1;\r\n for (const child of node.children) {\r\n if (typeof child === \"string\") continue;\r\n if (child.tag !== \"li\") continue;\r\n const liPrefix = tag === \"ul\" ? \"- \" : `${idx}. `;\r\n const inner = renderNodeChildren(child, ids, ctx, state, liPrefix);\r\n if (inner.length === 0) {\r\n out.push({\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: liPrefix,\r\n runs: [{ charShapeId: ids.idDefault, text: liPrefix }],\r\n controls: [],\r\n });\r\n } else {\r\n out.push(...inner);\r\n }\r\n idx++;\r\n }\r\n return out;\r\n }\r\n case \"blockquote\": {\r\n const inner = renderNodeChildren(node, ids, ctx, state, \"\");\r\n return inner.map((p) => {\r\n const text = `> ${p.text}`;\r\n const runs: HwpRun[] = [\r\n { charShapeId: p.runs[0]?.charShapeId ?? ids.idDefault, text: \"> \" },\r\n ...p.runs,\r\n ];\r\n return { ...p, text, runs };\r\n });\r\n }\r\n case \"table\": {\r\n return [collectTableParagraph(node, ids, ctx)];\r\n }\r\n case \"br\":\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\",\r\n runs: [],\r\n controls: [],\r\n },\r\n ];\r\n case \"hr\":\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\u2500\u2500\u2500\u2500\u2500\",\r\n runs: [{ charShapeId: ids.idDefault, text: \"\u2500\u2500\u2500\u2500\u2500\" }],\r\n controls: [],\r\n },\r\n ];\r\n case \"pre\": {\r\n // pre \uC548\uC758 \uD14D\uC2A4\uD2B8\uB294 \uBAA8\uB178\uC2A4\uD398\uC774\uC2A4\uB85C \uBCF4\uC874 (\uAC1C\uD589 \uC720\uC9C0)\r\n const monoState: InlineState = { ...state, mono: true };\r\n const text = extractPreText(node);\r\n const lines = text.split(\"\\n\");\r\n return lines.map((line) => ({\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: line,\r\n runs: line.length > 0 ? [{ charShapeId: pickInlineId(ids, monoState), text: line }] : [],\r\n controls: [],\r\n }));\r\n }\r\n case \"img\": {\r\n const ctrl = imageNodeToControl(node, ctx);\r\n if (!ctrl) return [];\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\",\r\n runs: [],\r\n controls: [ctrl],\r\n },\r\n ];\r\n }\r\n case \"html\":\r\n case \"body\":\r\n case \"main\":\r\n case \"header\":\r\n case \"footer\":\r\n case \"nav\":\r\n case \"aside\":\r\n case \"figure\":\r\n case \"figcaption\":\r\n return renderNodeChildren(node, ids, ctx, state, prefix);\r\n default:\r\n // \uC778\uB77C\uC778 \uCEE8\uD14C\uC774\uB108\uB85C \uCC98\uB9AC (span/strong/em/code/a \uB4F1)\r\n // \uB2E8, blockquote/list \uB4F1\uC740 \uC704\uC5D0\uC11C \uCC98\uB9AC\uB428\r\n return renderNodeChildren(node, ids, ctx, state, prefix);\r\n }\r\n}\r\n\r\nfunction renderNodeChildren(\r\n node: HtmlNode,\r\n ids: ShapeIds,\r\n ctx: BuildContext,\r\n state: InlineState,\r\n prefix: string\r\n): HwpParagraph[] {\r\n // \uC790\uC2DD\uC774 \uBAA8\uB450 \uC778\uB77C\uC778\uC774\uBA74 \uB2E8\uC77C paragraph \uB85C \uD569\uCE58\uAE30\r\n const allInline = node.children.every((c) => typeof c === \"string\" || isInlineTag(c.tag));\r\n if (allInline) {\r\n const runs = collectInlineRuns(node, ids, ctx, state);\r\n const text = runsToText(runs);\r\n const controls = collectInlineControls(node, ctx);\r\n if (!text && controls.length === 0) return [];\r\n return [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: prefix + text,\r\n runs:\r\n prefix.length > 0\r\n ? [{ charShapeId: ids.idDefault, text: prefix }, ...runs]\r\n : runs,\r\n controls,\r\n },\r\n ];\r\n }\r\n // \uBE14\uB85D \uC790\uC2DD\uC774 \uC11E\uC5EC\uC788\uC73C\uBA74 \uAC01\uAC01 \uBCC4\uB3C4 paragraph \uB85C\r\n const out: HwpParagraph[] = [];\r\n let blockPrefix = prefix;\r\n for (const child of node.children) {\r\n out.push(...renderNode(child, ids, ctx, state, blockPrefix));\r\n blockPrefix = \"\"; // prefix \uB294 \uCCAB paragraph \uC5D0\uB9CC \uC801\uC6A9\r\n }\r\n return out;\r\n}\r\n\r\nfunction isInlineTag(tag: string): boolean {\r\n return [\r\n \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\",\r\n \"mark\", \"q\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\",\r\n \"wbr\", \"del\", \"ins\", \"img\",\r\n ].includes(tag);\r\n}\r\n\r\nfunction collectInlineRuns(\r\n node: HtmlNode,\r\n ids: ShapeIds,\r\n ctx: BuildContext,\r\n state: InlineState,\r\n baseId?: number\r\n): HwpRun[] {\r\n const runs: HwpRun[] = [];\r\n walkInline(node, ids, ctx, state, runs, baseId ?? null);\r\n return mergeRuns(runs);\r\n}\r\n\r\nfunction walkInline(\r\n node: HtmlNode | string,\r\n ids: ShapeIds,\r\n ctx: BuildContext,\r\n state: InlineState,\r\n runs: HwpRun[],\r\n baseId: number | null\r\n): void {\r\n if (typeof node === \"string\") {\r\n const text = collapseWhitespace(node);\r\n if (text.length === 0) return;\r\n runs.push({\r\n charShapeId: baseId !== null ? baseId : pickInlineId(ids, state),\r\n text,\r\n });\r\n return;\r\n }\r\n const tag = node.tag.toLowerCase();\r\n if (tag === \"img\") {\r\n // \uC774\uBBF8\uC9C0\uB294 \uBCC4\uB3C4 \uCEE8\uD2B8\uB864. \uC778\uB77C\uC778\uC5D0\uC11C\uB294 alt \uB9CC \uB178\uCD9C.\r\n const alt = node.attrs.alt;\r\n if (alt) {\r\n runs.push({ charShapeId: pickInlineId(ids, state), text: alt });\r\n }\r\n return;\r\n }\r\n if (tag === \"br\") {\r\n runs.push({ charShapeId: pickInlineId(ids, state), text: \"\\n\" });\r\n return;\r\n }\r\n let nextState = state;\r\n if (tag === \"strong\" || tag === \"b\") nextState = { ...nextState, bold: true };\r\n if (tag === \"em\" || tag === \"i\") nextState = { ...nextState, italic: true };\r\n if (tag === \"code\" || tag === \"samp\" || tag === \"kbd\") nextState = { ...nextState, mono: true };\r\n for (const child of node.children) {\r\n walkInline(child, ids, ctx, nextState, runs, baseId);\r\n }\r\n}\r\n\r\nfunction collectInlineControls(node: HtmlNode, ctx: BuildContext): HwpControl[] {\r\n const out: HwpControl[] = [];\r\n const visit = (n: HtmlNode | string): void => {\r\n if (typeof n === \"string\") return;\r\n if (n.tag === \"img\") {\r\n const ctrl = imageNodeToControl(n, ctx);\r\n if (ctrl) out.push(ctrl);\r\n return;\r\n }\r\n for (const c of n.children) visit(c);\r\n };\r\n for (const c of node.children) visit(c);\r\n return out;\r\n}\r\n\r\nfunction collectTableParagraph(\r\n table: HtmlNode,\r\n ids: ShapeIds,\r\n ctx: BuildContext\r\n): HwpParagraph {\r\n // <tr> \uC218\uC9D1 (thead/tbody/tfoot \uD3C9\uD0C4\uD654)\r\n const trs: HtmlNode[] = [];\r\n const collectTrs = (n: HtmlNode): void => {\r\n for (const c of n.children) {\r\n if (typeof c === \"string\") continue;\r\n if (c.tag === \"tr\") trs.push(c);\r\n else if (c.tag === \"thead\" || c.tag === \"tbody\" || c.tag === \"tfoot\") collectTrs(c);\r\n }\r\n };\r\n collectTrs(table);\r\n\r\n // rowspan/colspan \uC810\uC720 \uADF8\uB9AC\uB4DC\uB85C \uC2E4\uC81C \uC140 \uC88C\uD45C(colAddr/rowAddr)\uB97C \uACC4\uC0B0\uD55C\uB2E4.\r\n // \uB2E8\uC21C\uD788 \uC140\uB9C8\uB2E4 col \uC744 1 \uC99D\uAC00\uC2DC\uD0A4\uBA74 \uBCD1\uD569 \uC140\uC774 \uC810\uC720\uD55C \uCE78\uC744 \uBB34\uC2DC\uD574 \uC88C\uD45C\uAC00 \uC5B4\uAE0B\uB09C\uB2E4.\r\n let maxCols = 0;\r\n const occupied = new Set<string>();\r\n const tcs: {\r\n row: number;\r\n col: number;\r\n isHeader: boolean;\r\n node: HtmlNode;\r\n colSpan: number;\r\n rowSpan: number;\r\n }[] = [];\r\n for (let r = 0; r < trs.length; r++) {\r\n let col = 0;\r\n for (const c of trs[r].children) {\r\n if (typeof c === \"string\") continue;\r\n if (c.tag !== \"td\" && c.tag !== \"th\") continue;\r\n // \uC704\uCABD \uD589\uC758 rowspan \uC774\uB098 \uAC19\uC740 \uD589 colspan \uC774 \uC810\uC720\uD55C \uCE78\uC740 \uAC74\uB108\uB6F4\uB2E4.\r\n while (occupied.has(`${r},${col}`)) col++;\r\n const colSpan = Math.max(1, Number(c.attrs.colspan ?? \"1\") || 1);\r\n const rowSpan = Math.max(1, Number(c.attrs.rowspan ?? \"1\") || 1);\r\n tcs.push({ row: r, col, isHeader: c.tag === \"th\", node: c, colSpan, rowSpan });\r\n for (let dr = 0; dr < rowSpan; dr++) {\r\n for (let dc = 0; dc < colSpan; dc++) {\r\n occupied.add(`${r + dr},${col + dc}`);\r\n }\r\n }\r\n col += colSpan;\r\n if (col > maxCols) maxCols = col;\r\n }\r\n }\r\n\r\n const cells: HwpTableCell[] = tcs.map(({ row, col, isHeader, node, colSpan, rowSpan }) => {\r\n const baseId = isHeader ? ids.idBold : ids.idDefault;\r\n const runs = collectInlineRuns(node, ids, ctx, { bold: isHeader, italic: false, mono: false }, baseId);\r\n return {\r\n col,\r\n row,\r\n colSpan,\r\n rowSpan,\r\n paragraphs: [\r\n {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: runsToText(runs),\r\n runs,\r\n controls: [],\r\n },\r\n ],\r\n };\r\n });\r\n\r\n return {\r\n paraShapeId: 0,\r\n styleId: 0,\r\n text: \"\",\r\n runs: [],\r\n controls: [{ kind: \"table\", rowCount: trs.length, colCount: maxCols, cells }],\r\n };\r\n}\r\n\r\nfunction imageNodeToControl(node: HtmlNode, ctx: BuildContext): HwpControl | null {\r\n const src = node.attrs.src ?? \"\";\r\n const match = /^data:([^;]+);base64,(.*)$/i.exec(src);\r\n if (!match) {\r\n // data URI \uAC00 \uC544\uB2C8\uBA74 resolver(\uC8FC\uC785 \uC2DC)\uB85C file://\u00B7\uB85C\uCEEC \uACBD\uB85C \uD574\uC11D. \uC5C6\uC73C\uBA74 skip.\r\n const resolved = src ? ctx.imageResolver?.(src) : null;\r\n if (resolved && resolved.data.length > 0) {\r\n const id = ctx.nextBinDataId++;\r\n ctx.binData.set(id, { data: resolved.data, extension: resolved.extension.toLowerCase() });\r\n return { kind: \"picture\", binDataId: id };\r\n }\r\n return null;\r\n }\r\n const mime = match[1].toLowerCase();\r\n const ext =\r\n mime === \"image/png\"\r\n ? \"png\"\r\n : mime === \"image/jpeg\"\r\n ? \"jpg\"\r\n : mime === \"image/gif\"\r\n ? \"gif\"\r\n : mime === \"image/bmp\"\r\n ? \"bmp\"\r\n : \"bin\";\r\n let bytes: Uint8Array;\r\n try {\r\n if (typeof Buffer !== \"undefined\") {\r\n bytes = new Uint8Array(Buffer.from(match[2], \"base64\"));\r\n } else {\r\n const bin = (globalThis as { atob?: (s: string) => string }).atob?.(match[2]) ?? \"\";\r\n bytes = new Uint8Array(bin.length);\r\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\r\n }\r\n } catch {\r\n return null;\r\n }\r\n const id = ctx.nextBinDataId++;\r\n ctx.binData.set(id, { data: bytes, extension: ext });\r\n return { kind: \"picture\", binDataId: id };\r\n}\r\n\r\nfunction extractPreText(node: HtmlNode): string {\r\n let out = \"\";\r\n const visit = (n: HtmlNode | string): void => {\r\n if (typeof n === \"string\") {\r\n out += n;\r\n return;\r\n }\r\n if (n.tag === \"br\") {\r\n out += \"\\n\";\r\n return;\r\n }\r\n for (const c of n.children) visit(c);\r\n };\r\n for (const c of node.children) visit(c);\r\n return out;\r\n}\r\n\r\nfunction pickInlineId(ids: ShapeIds, state: InlineState): number {\r\n if (state.mono) return ids.idMono;\r\n if (state.bold && state.italic) return ids.idBoldItalic;\r\n if (state.bold) return ids.idBold;\r\n if (state.italic) return ids.idItalic;\r\n return ids.idDefault;\r\n}\r\n\r\nfunction mergeRuns(runs: HwpRun[]): HwpRun[] {\r\n const out: HwpRun[] = [];\r\n for (const r of runs) {\r\n if (r.text.length === 0) continue;\r\n const last = out[out.length - 1];\r\n if (last && last.charShapeId === r.charShapeId) {\r\n last.text += r.text;\r\n } else {\r\n out.push({ ...r });\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nfunction runsToText(runs: HwpRun[]): string {\r\n return runs.map((r) => r.text).join(\"\");\r\n}\r\n\r\nfunction collapseWhitespace(s: string): string {\r\n // HTML \uD14D\uC2A4\uD2B8 \uB178\uB4DC\uC758 \uC5F0\uC18D \uACF5\uBC31\uC744 \uB2E8\uC77C \uACF5\uBC31\uC73C\uB85C\r\n return s.replace(/[\\s\u00A0]+/g, \" \");\r\n}\r\n\r\n// ============================================================\r\n// \uAE30\uBCF8 IR\r\n// ============================================================\r\n\r\nfunction defaultCharShape(): HwpCharShape {\r\n return {\r\n faceNameIds: { hangul: 0, latin: 1, hanja: 0, japanese: 0, other: 0, symbol: 0, user: 0 },\r\n baseSize: 1000,\r\n property: 0,\r\n textColor: 0,\r\n shadeColor: 0xffffff,\r\n underlineColor: 0,\r\n shadowColor: 0,\r\n bold: false,\r\n italic: false,\r\n underline: false,\r\n strikeout: false,\r\n };\r\n}\r\n\r\nfunction defaultParaShape(): HwpParaShape {\r\n return {\r\n alignment: \"justify\",\r\n property: 0,\r\n leftMargin: 0,\r\n rightMargin: 0,\r\n indent: 0,\r\n prevSpacing: 0,\r\n nextSpacing: 0,\r\n lineSpacing: 160,\r\n };\r\n}\r\n\r\nfunction defaultFileHeader(): HwpDocument[\"header\"] {\r\n return {\r\n version: { major: 5, minor: 0, build: 6, revision: 0 },\r\n flags: {\r\n raw: 0,\r\n compressed: false,\r\n encrypted: false,\r\n distribution: false,\r\n script: false,\r\n drm: false,\r\n xmlTemplate: false,\r\n documentHistory: false,\r\n digitalSignature: false,\r\n publicKeyEncrypted: false,\r\n modifiedCertificate: false,\r\n prepareDistribution: false,\r\n },\r\n };\r\n}\r\n\r\nfunction registerCharShape(\r\n shapes: HwpCharShape[],\r\n ctx: BuildContext,\r\n cs: HwpCharShape\r\n): number {\r\n const key = JSON.stringify(cs);\r\n const existing = ctx.charShapeIds.get(key);\r\n if (existing !== undefined) return existing;\r\n const id = shapes.length;\r\n shapes.push(cs);\r\n ctx.charShapeIds.set(key, id);\r\n return id;\r\n}\r\n", "/**\r\n * HwpDocument IR \u2192 HWPX/Text \uBCC0\uD658\uAE30.\r\n *\r\n * - hwpToText: \uBAA8\uB4E0 \uC139\uC158\uC758 \uBB38\uB2E8 \uD14D\uC2A4\uD2B8\uB97C \uD3C9\uD0C4\uD654 (\uD45C \uC140, \uD5E4\uB354/\uD478\uD130 \uB4F1 \uD3EC\uD568).\r\n * - hwpToHwpx: hwpxBuilder \uB85C \uD48D\uBD80\uD55C HWPX \uD328\uD0A4\uC9C0 \uC0DD\uC131 (\uD45C/\uC774\uBBF8\uC9C0 \uD3EC\uD568).\r\n */\r\n\r\nimport { buildHwpxFromDocument } from \"./hwpxBuilder.js\";\r\nimport { hwpDocumentToMarkdown, type MarkdownWriteOptions } from \"./mdWriter.js\";\r\nimport { markdownToHwpDocument } from \"./mdReader.js\";\r\nimport { htmlToHwpDocument } from \"./htmlReader.js\";\r\nimport type { HwpDocument, HwpParagraph } from \"./types.js\";\r\n\r\nexport { hwpDocumentToMarkdown, markdownToHwpDocument, htmlToHwpDocument };\r\nexport type { MarkdownWriteOptions };\r\n\r\nexport interface HwpToTextOptions {\r\n paragraphSeparator?: string;\r\n sectionSeparator?: string;\r\n}\r\n\r\nexport function hwpDocumentToText(doc: HwpDocument, options?: HwpToTextOptions): string {\r\n const paraSep = options?.paragraphSeparator ?? \"\\n\";\r\n const sectSep = options?.sectionSeparator ?? \"\\n\\n\";\r\n return doc.sections\r\n .map((s) => s.paragraphs.map((p) => flattenParagraphText(p)).join(paraSep))\r\n .join(sectSep);\r\n}\r\n\r\nfunction flattenParagraphText(p: HwpParagraph): string {\r\n const parts: string[] = [];\r\n if (p.text.length > 0) parts.push(p.text);\r\n for (const ctrl of p.controls) {\r\n if (ctrl.kind === \"table\") {\r\n const cellTexts = ctrl.cells.map((cell) =>\r\n cell.paragraphs.map((q) => flattenParagraphText(q)).join(\"\\n\")\r\n );\r\n parts.push(cellTexts.join(\"\\n\"));\r\n } else if (\r\n ctrl.kind === \"header\" ||\r\n ctrl.kind === \"footer\" ||\r\n ctrl.kind === \"footnote\"\r\n ) {\r\n parts.push(ctrl.paragraphs.map((q) => flattenParagraphText(q)).join(\"\\n\"));\r\n } else if (ctrl.kind === \"equation\" && ctrl.script.length > 0) {\r\n parts.push(ctrl.script);\r\n }\r\n }\r\n return parts.join(\"\\n\");\r\n}\r\n\r\nexport interface HwpToHwpxOptions {\r\n title?: string;\r\n creator?: string;\r\n}\r\n\r\nexport async function hwpDocumentToHwpx(\r\n doc: HwpDocument,\r\n options?: HwpToHwpxOptions\r\n): Promise<Uint8Array> {\r\n return await buildHwpxFromDocument(doc, options);\r\n}\r\n", "/**\r\n * HWP 5.0 \uBC14\uC774\uB108\uB9AC \uD30C\uC11C \uC9C4\uC785\uC810.\r\n *\r\n * \uACF5\uAC1C API:\r\n * - detectFormat(bytes): \"hwp\" | \"hwpx\" | \"hwp3\" | \"unknown\"\r\n * - parseHwp(bytes): HwpDocument\r\n * - hwpToText(bytes, options?): Promise<string>\r\n * - hwpToHwpx(bytes, options?): Promise<Uint8Array>\r\n * - parseFileHeader, versionToString, isVersionSupported\r\n * - \uC5D0\uB7EC: HwpEncryptedError, HwpUnsupportedError, HwpInvalidFormatError\r\n * - \uD0C0\uC785: HwpDocument, HwpSection\r\n *\r\n * \uBCF4\uC874\uB418\uB294 \uAC83 (HWP \u2192 HWPX \uB77C\uC6B4\uB4DC\uD2B8\uB9BD):\r\n * - \uD45C (rowSpan/colSpan \uD3EC\uD568), \uC784\uBCA0\uB514\uB4DC \uC774\uBBF8\uC9C0 (BinData \uD328\uD0A4\uC9D5)\r\n * - 7\uAC1C \uC5B8\uC5B4 \uADF8\uB8F9\uBCC4 \uD3F0\uD2B8, \uAE00\uC790 \uBAA8\uC591(\uAD75\uAC8C/\uAE30\uC6B8\uC784/\uBC11\uC904/\uC0C9/\uD06C\uAE30)\r\n * - \uBB38\uB2E8 \uBAA8\uC591(\uC815\uB82C/\uB4E4\uC5EC\uC4F0\uAE30/\uC904\uAC04\uACA9), \uC2A4\uD0C0\uC77C, \uBC88\uD638 \uB9E4\uAE30\uAE30 \uD615\uC2DD \uBB38\uC790\uC5F4, \uAE00\uBA38\uB9AC\uD45C \uBB38\uC790\r\n * - \uB3C4\uD615(line) \uC88C\uD45C, \uC218\uC2DD(EQEDIT) \uC2A4\uD06C\uB9BD\uD2B8\r\n * - Preview/PrvText.txt \uC790\uB3D9 \uC0DD\uC131\r\n *\r\n * \uBBF8\uC9C0\uC6D0 / \uD55C\uACC4:\r\n * - \uC554\uD638\uD654\uB41C HWP / \uBC30\uD3EC\uC6A9 ViewText / HWP 3.0: \uBA85\uC2DC\uC801 \uC5D0\uB7EC\r\n * - \uBA38\uB9AC\uB9D0/\uAF2C\uB9AC\uB9D0/\uAC01\uC8FC: \uD30C\uC2F1\uB418\uB098 \uBCF8\uBB38 \uD750\uB984 \uC678\uBD80\uC5D0 \uCD9C\uB825\uD558\uC9C0 \uC54A\uC74C\r\n * - BorderFill \uC815\uC758: ID \uC2AC\uB86F\uB9CC \uCC44\uC6C0 (\uC0C9/\uAD75\uAE30/\uB300\uAC01\uC120 \uBBF8\uBCF4\uC874)\r\n * - \uCC28\uD2B8(CHART_DATA) / OLE / \uAE00\uB9F5\uC2DC: \uBBF8\uC9C0\uC6D0\r\n * - \uB3C4\uD615(line) \uC678 \uC0AC\uAC01\uD615/\uD0C0\uC6D0/\uD638/\uB2E4\uAC01\uD615/\uACE1\uC120: \uC885\uB958\uB9CC \uBCF4\uC874\r\n */\r\n\r\nimport { parseFileHeader, isVersionSupported, versionToString } from \"./fileHeader.js\";\r\nimport { HwpCfbReader } from \"./cfbReader.js\";\r\nimport { parseDocInfo } from \"./docInfo.js\";\r\nimport { parseBodyTextSection } from \"./bodyText.js\";\r\nimport { loadBinDataContent } from \"./binData.js\";\r\nimport {\r\n hwpDocumentToText,\r\n hwpDocumentToHwpx,\r\n hwpDocumentToMarkdown,\r\n markdownToHwpDocument,\r\n htmlToHwpDocument,\r\n type MarkdownWriteOptions,\r\n} from \"./converter.js\";\r\nimport type { HwpDocument, HwpSection, ImageResolver } from \"./types.js\";\r\n\r\nexport type { HwpDocument, HwpSection, ImageResolver, ConvertOptions } from \"./types.js\";\r\nexport type { MarkdownWriteOptions } from \"./converter.js\";\r\nexport {\r\n hwpDocumentToMarkdown,\r\n markdownToHwpDocument,\r\n htmlToHwpDocument,\r\n} from \"./converter.js\";\r\nexport { parseFileHeader, versionToString, isVersionSupported } from \"./fileHeader.js\";\r\n\r\nexport class HwpUnsupportedError extends Error {\r\n constructor(msg: string) {\r\n super(msg);\r\n this.name = \"HwpUnsupportedError\";\r\n }\r\n}\r\n\r\nexport class HwpEncryptedError extends Error {\r\n constructor() {\r\n super(\"\uC554\uD638\uD654\uB41C HWP \uBB38\uC11C\uB294 \uD604\uC7AC \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\");\r\n this.name = \"HwpEncryptedError\";\r\n }\r\n}\r\n\r\nexport class HwpInvalidFormatError extends Error {\r\n constructor(msg = \"\uC720\uD6A8\uD55C HWP 5.0 \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4.\") {\r\n super(msg);\r\n this.name = \"HwpInvalidFormatError\";\r\n }\r\n}\r\n\r\nexport type DetectedFormat = \"hwp\" | \"hwpx\" | \"hwp3\" | \"unknown\";\r\n\r\nexport function detectFormat(data: Uint8Array): DetectedFormat {\r\n if (data.byteLength >= 8) {\r\n // CFB/OLE \uC2DC\uADF8\uB2C8\uCC98\r\n if (\r\n data[0] === 0xd0 &&\r\n data[1] === 0xcf &&\r\n data[2] === 0x11 &&\r\n data[3] === 0xe0 &&\r\n data[4] === 0xa1 &&\r\n data[5] === 0xb1 &&\r\n data[6] === 0x1a &&\r\n data[7] === 0xe1\r\n ) {\r\n return \"hwp\";\r\n }\r\n // ZIP \uC2DC\uADF8\uB2C8\uCC98\r\n if (data[0] === 0x50 && data[1] === 0x4b && data[2] === 0x03 && data[3] === 0x04) {\r\n return \"hwpx\";\r\n }\r\n }\r\n // HWP 3.0\r\n if (data.byteLength >= 17) {\r\n const sig = String.fromCharCode(...data.subarray(0, 17));\r\n if (sig === \"HWP Document File\") return \"hwp3\";\r\n }\r\n return \"unknown\";\r\n}\r\n\r\n/**\r\n * HWP 5.0 \uBC14\uC774\uB108\uB9AC\uB97C \uD30C\uC2F1\uD558\uC5EC HwpDocument IR \uBC18\uD658.\r\n */\r\nexport function parseHwp(data: Uint8Array): HwpDocument {\r\n const fmt = detectFormat(data);\r\n if (fmt === \"hwp3\") {\r\n throw new HwpUnsupportedError(\r\n \"HWP 3.0 \uD3EC\uB9F7\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD55C\uCEF4\uC624\uD53C\uC2A4/LibreOffice \uC5D0\uC11C HWP 5.0 \uC73C\uB85C \uB2E4\uC2DC \uC800\uC7A5\uD574 \uC8FC\uC138\uC694.\"\r\n );\r\n }\r\n if (fmt !== \"hwp\") {\r\n throw new HwpInvalidFormatError(`HWP 5.0(CFB) \uC2DC\uADF8\uB2C8\uCC98\uAC00 \uC544\uB2D9\uB2C8\uB2E4 (\uAC10\uC9C0: ${fmt}).`);\r\n }\r\n\r\n const cfb = new HwpCfbReader(data);\r\n\r\n const headerBytes = cfb.readFileHeader();\r\n const fileHeader = parseFileHeader(headerBytes);\r\n\r\n if (fileHeader.flags.encrypted) {\r\n throw new HwpEncryptedError();\r\n }\r\n if (!isVersionSupported(fileHeader.version)) {\r\n throw new HwpUnsupportedError(\r\n `\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWP \uBC84\uC804: ${versionToString(fileHeader.version)} (5.0 ~ 5.1 \uC9C0\uC6D0)`\r\n );\r\n }\r\n if (fileHeader.flags.distribution) {\r\n // ViewText \uBCF5\uD638\uD654\uB294 1\uCC28 \uD3EC\uD305 \uBC94\uC704 \uBC16\r\n throw new HwpUnsupportedError(\r\n \"\uBC30\uD3EC\uC6A9 \uBB38\uC11C(ViewText)\uB294 \uD604\uC7AC \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC77C\uBC18 HWP \uB85C \uC800\uC7A5 \uD6C4 \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.\"\r\n );\r\n }\r\n\r\n const compressed = fileHeader.flags.compressed;\r\n\r\n const docInfoBytes = cfb.readDocInfo(compressed);\r\n const { docInfo } = parseDocInfo(docInfoBytes);\r\n\r\n const sectionCount = cfb.sectionCount(false);\r\n const sections: HwpSection[] = [];\r\n for (let i = 0; i < sectionCount; i++) {\r\n const secBytes = cfb.readBodySection(i, compressed, false);\r\n if (!secBytes) continue;\r\n try {\r\n sections.push(parseBodyTextSection(secBytes));\r\n } catch {\r\n // \uAC1C\uBCC4 \uC139\uC158 \uC2E4\uD328 \uC2DC \uBE48 \uC139\uC158\uC73C\uB85C \uB300\uCCB4 (\uC804\uCCB4 \uC2E4\uD328 \uBC29\uC9C0)\r\n sections.push({ paragraphs: [] });\r\n }\r\n }\r\n\r\n const binData = loadBinDataContent(cfb, docInfo.binData);\r\n\r\n return {\r\n header: fileHeader,\r\n docInfo,\r\n sections,\r\n binData,\r\n };\r\n}\r\n\r\nexport async function hwpToText(\r\n data: Uint8Array,\r\n options?: { paragraphSeparator?: string; sectionSeparator?: string }\r\n): Promise<string> {\r\n const doc = parseHwp(data);\r\n return hwpDocumentToText(doc, options);\r\n}\r\n\r\nexport async function hwpToHwpx(\r\n data: Uint8Array,\r\n options?: { title?: string; creator?: string }\r\n): Promise<Uint8Array> {\r\n const doc = parseHwp(data);\r\n return await hwpDocumentToHwpx(doc, options);\r\n}\r\n\r\nexport async function hwpToMarkdown(\r\n data: Uint8Array,\r\n options?: MarkdownWriteOptions\r\n): Promise<string> {\r\n const doc = parseHwp(data);\r\n return hwpDocumentToMarkdown(doc, options);\r\n}\r\n\r\n/** Markdown \uD14D\uC2A4\uD2B8\uB97C HWPX \uD328\uD0A4\uC9C0\uB85C \uBCC0\uD658. */\r\nexport async function markdownToHwpx(\r\n md: string,\r\n options?: { title?: string; creator?: string; imageResolver?: ImageResolver }\r\n): Promise<Uint8Array> {\r\n const doc = markdownToHwpDocument(md, { imageResolver: options?.imageResolver });\r\n return await hwpDocumentToHwpx(doc, options);\r\n}\r\n\r\n/** HTML \uBB38\uC11C\uB97C HWPX \uD328\uD0A4\uC9C0\uB85C \uBCC0\uD658. */\r\nexport async function htmlToHwpx(\r\n html: string,\r\n options?: { title?: string; creator?: string; imageResolver?: ImageResolver }\r\n): Promise<Uint8Array> {\r\n const doc = htmlToHwpDocument(html, { imageResolver: options?.imageResolver });\r\n return await hwpDocumentToHwpx(doc, options);\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exports", "e", "l", "t", "d", "r", "c", "n", "i", "A", "s", "O", "I", "m", "_", "g", "b", "v", "y", "w", "x", "z", "B", "E", "a", "o", "h", "T", "D", "F", "N", "U", "P", "L", "u", "f", "p", "j", "Z", "W", "M", "H", "K", "Y", "X", "V", "q", "J", "exports", "b", "s2a", "x", "l", "m", "CRC32", "T", "v", "Te", "L", "B", "d", "CFB", "i", "Z", "M", "q", "j", "filename", "read", "y", "cfb", "file", "flen", "w", "find", "build_tree", "_deflateRaw", "inflate", "crc32", "v", "tagName", "j", "defaultOptions", "tagName", "validateEntityName", "startIndex", "j", "zero", "d", "d", "lastSeg", "tag", "tagName", "sep", "tagName", "result", "tagName", "METADATA_SYMBOL", "JSZip", "m", "v", "b", "q", "import_jszip", "JSZip", "v", "w", "m", "v", "j", "rank", "b", "l", "q", "TABLE", "m", "v", "parseParagraphList", "j", "j", "b", "import_jszip", "NS_OASIS_CONTAINER", "NS_OASIS_MANIFEST", "JSZip", "_", "b", "q", "tagName", "g", "w", "escapeMd", "q", "sep", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "cachedIndentRegex", "createRegex", "cache", "indent", "cacheIndex", "regex", "edit", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "a", "bull", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "delLDelim", "delRDelimCore", "delRDelim", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "escapeHtmlEntities", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "trimTrailingBlankLines", "lines", "end", "findClosingBracket", "b", "level", "expandTabs", "line", "col", "expanded", "char", "added", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "src", "trimmed", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "blockquoteBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "itemToken", "taskRaw", "checkboxToken", "spacers", "t", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "srcLength", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "keepPrevChar", "byte", "errMsg", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "e", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "BinTrieFlags", "CharCodes", "EntityDecoderState", "DecodingMode", "EntityDecoder", "CharCodes", "State", "QuoteType", "decodeEntities", "EntityDecoder", "ForeignContext", "defaultCharShape", "registerCharShape", "defaultFileHeader", "defaultParaShape", "runsToText", "walkInline", "mergeRuns", "id", "q"]
|
|
7
|
+
}
|