@stroc/ui 0.0.0-stage → 0.1.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/LICENSE +7 -0
- package/README.md +15 -2
- package/dist/stroc-editor.js +16675 -0
- package/dist/stroc-editor.js.map +7 -0
- package/dist/vendor/fonts/NotoSansMono_400Regular.ttf +0 -0
- package/dist/vendor/fonts/NotoSerif_400Regular.ttf +0 -0
- package/dist/vendor/fonts/NotoSerif_400Regular_Italic.ttf +0 -0
- package/dist/vendor/fonts/NotoSerif_700Bold.ttf +0 -0
- package/dist/vendor/fonts/NotoSerif_700Bold_Italic.ttf +0 -0
- package/dist/vendor/pdfmake.min.js +3 -0
- package/package.json +53 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/qrcode-generator/qrcode.js", "../../../node_modules/@lit/reactive-element/src/css-tag.ts", "../../../node_modules/@lit/reactive-element/src/reactive-element.ts", "../../../node_modules/lit-html/src/lit-html.ts", "../../../node_modules/lit-element/src/lit-element.ts", "../../../node_modules/multiformats/src/bytes.ts", "../../../node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/multiformats/src/bases/base.ts", "../../../node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/multiformats/src/varint.ts", "../../../node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/multiformats/src/cid.ts", "../../core/src/text.ts", "../../core/src/ids.ts", "../../core/src/language.ts", "../../core/src/markup.ts", "../../../node_modules/cborg/lib/is.js", "../../../node_modules/cborg/lib/token.js", "../../../node_modules/cborg/lib/byte-utils.js", "../../../node_modules/cborg/lib/bl.js", "../../../node_modules/cborg/lib/common.js", "../../../node_modules/cborg/lib/0uint.js", "../../../node_modules/cborg/lib/1negint.js", "../../../node_modules/cborg/lib/2bytes.js", "../../../node_modules/cborg/lib/3string.js", "../../../node_modules/cborg/lib/4array.js", "../../../node_modules/cborg/lib/5map.js", "../../../node_modules/cborg/lib/6tag.js", "../../../node_modules/cborg/lib/7float.js", "../../../node_modules/cborg/lib/jump.js", "../../../node_modules/cborg/lib/encode.js", "../../../node_modules/cborg/lib/decode.js", "../../../node_modules/cborg/lib/json/encode.js", "../../../node_modules/cborg/lib/json/decode.js", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bytes.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/varint.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/cid.ts", "../../../node_modules/@ipld/dag-json/node_modules/multiformats/src/bases/base64.ts", "../../../node_modules/@ipld/dag-json/src/index.js", "../../../node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/@noble/hashes/_u64.js", "../../../node_modules/@noble/hashes/utils.js", "../../../node_modules/@noble/hashes/_md.js", "../../../node_modules/@noble/hashes/sha2.js", "../../core/src/hash.ts", "../../core/src/validate.ts", "../../core/src/dagjson.ts", "../../../node_modules/yaml/browser/dist/nodes/identity.js", "../../../node_modules/yaml/browser/dist/visit.js", "../../../node_modules/yaml/browser/dist/doc/directives.js", "../../../node_modules/yaml/browser/dist/doc/anchors.js", "../../../node_modules/yaml/browser/dist/doc/applyReviver.js", "../../../node_modules/yaml/browser/dist/nodes/toJS.js", "../../../node_modules/yaml/browser/dist/nodes/Node.js", "../../../node_modules/yaml/browser/dist/nodes/Alias.js", "../../../node_modules/yaml/browser/dist/nodes/Scalar.js", "../../../node_modules/yaml/browser/dist/doc/createNode.js", "../../../node_modules/yaml/browser/dist/nodes/Collection.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyComment.js", "../../../node_modules/yaml/browser/dist/stringify/foldFlowLines.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyString.js", "../../../node_modules/yaml/browser/dist/stringify/stringify.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyPair.js", "../../../node_modules/yaml/browser/dist/log.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js", "../../../node_modules/yaml/browser/dist/nodes/addPairToJSMap.js", "../../../node_modules/yaml/browser/dist/nodes/Pair.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyCollection.js", "../../../node_modules/yaml/browser/dist/nodes/YAMLMap.js", "../../../node_modules/yaml/browser/dist/schema/common/map.js", "../../../node_modules/yaml/browser/dist/nodes/YAMLSeq.js", "../../../node_modules/yaml/browser/dist/schema/common/seq.js", "../../../node_modules/yaml/browser/dist/schema/common/string.js", "../../../node_modules/yaml/browser/dist/schema/common/null.js", "../../../node_modules/yaml/browser/dist/schema/core/bool.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyNumber.js", "../../../node_modules/yaml/browser/dist/schema/core/float.js", "../../../node_modules/yaml/browser/dist/schema/core/int.js", "../../../node_modules/yaml/browser/dist/schema/core/schema.js", "../../../node_modules/yaml/browser/dist/schema/json/schema.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/float.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/int.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/set.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js", "../../../node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js", "../../../node_modules/yaml/browser/dist/schema/tags.js", "../../../node_modules/yaml/browser/dist/schema/Schema.js", "../../../node_modules/yaml/browser/dist/stringify/stringifyDocument.js", "../../../node_modules/yaml/browser/dist/doc/Document.js", "../../../node_modules/yaml/browser/dist/errors.js", "../../../node_modules/yaml/browser/dist/compose/resolve-props.js", "../../../node_modules/yaml/browser/dist/compose/util-contains-newline.js", "../../../node_modules/yaml/browser/dist/compose/util-flow-indent-check.js", "../../../node_modules/yaml/browser/dist/compose/util-map-includes.js", "../../../node_modules/yaml/browser/dist/compose/resolve-block-map.js", "../../../node_modules/yaml/browser/dist/compose/resolve-block-seq.js", "../../../node_modules/yaml/browser/dist/compose/resolve-end.js", "../../../node_modules/yaml/browser/dist/compose/resolve-flow-collection.js", "../../../node_modules/yaml/browser/dist/compose/compose-collection.js", "../../../node_modules/yaml/browser/dist/compose/resolve-block-scalar.js", "../../../node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js", "../../../node_modules/yaml/browser/dist/compose/compose-scalar.js", "../../../node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js", "../../../node_modules/yaml/browser/dist/compose/compose-node.js", "../../../node_modules/yaml/browser/dist/compose/compose-doc.js", "../../../node_modules/yaml/browser/dist/compose/composer.js", "../../../node_modules/yaml/browser/dist/parse/cst-visit.js", "../../../node_modules/yaml/browser/dist/parse/cst.js", "../../../node_modules/yaml/browser/dist/parse/lexer.js", "../../../node_modules/yaml/browser/dist/parse/line-counter.js", "../../../node_modules/yaml/browser/dist/parse/parser.js", "../../../node_modules/yaml/browser/dist/public-api.js", "../../yaml/src/index.ts", "../../compose/src/http.ts", "../../compose/src/index.ts", "../../render/src/index.ts", "../src/styles.ts", "../src/paragraph.ts", "../src/model.ts", "../src/sources.ts", "../src/includes.ts", "../src/editor.ts"],
|
|
4
|
+
"sourcesContent": ["//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '\u2588\u2588': '\u2588',\n '\u2588 ': '\u2580',\n ' \u2588': '\u2584',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '\u2588\u2588': '\u2580',\n '\u2588 ': '\u2580',\n ' \u2588': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '\u2588';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '\u2588';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('\u2580');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('\u2588\u2588');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n", "/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nconst NODE_MODE = false;\n\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets: boolean =\n global.ShadowRoot &&\n (global.ShadyCSS === undefined || global.ShadyCSS.nativeShadow) &&\n 'adoptedStyleSheets' in Document.prototype &&\n 'replace' in CSSStyleSheet.prototype;\n\n/**\n * A CSSResult or native CSSStyleSheet.\n *\n * In browsers that support constructible CSS style sheets, CSSStyleSheet\n * object can be used for styling along side CSSResult from the `css`\n * template tag.\n */\nexport type CSSResultOrNative = CSSResult | CSSStyleSheet;\n\nexport type CSSResultArray = Array<CSSResultOrNative | CSSResultArray>;\n\n/**\n * A single CSSResult, CSSStyleSheet, or an array or nested arrays of those.\n */\nexport type CSSResultGroup = CSSResultOrNative | CSSResultArray;\n\nconst constructionToken = Symbol();\n\nconst cssTagCache = new WeakMap<TemplateStringsArray, CSSStyleSheet>();\n\n/**\n * A container for a string of CSS text, that may be used to create a CSSStyleSheet.\n *\n * CSSResult is the return value of `css`-tagged template literals and\n * `unsafeCSS()`. In order to ensure that CSSResults are only created via the\n * `css` tag and `unsafeCSS()`, CSSResult cannot be constructed directly.\n */\nexport class CSSResult {\n // This property needs to remain unminified.\n ['_$cssResult$'] = true;\n readonly cssText: string;\n private _styleSheet?: CSSStyleSheet;\n private _strings: TemplateStringsArray | undefined;\n\n private constructor(\n cssText: string,\n strings: TemplateStringsArray | undefined,\n safeToken: symbol\n ) {\n if (safeToken !== constructionToken) {\n throw new Error(\n 'CSSResult is not constructable. Use `unsafeCSS` or `css` instead.'\n );\n }\n this.cssText = cssText;\n this._strings = strings;\n }\n\n // This is a getter so that it's lazy. In practice, this means stylesheets\n // are not created until the first element instance is made.\n get styleSheet(): CSSStyleSheet | undefined {\n // If `supportsAdoptingStyleSheets` is true then we assume CSSStyleSheet is\n // constructable.\n let styleSheet = this._styleSheet;\n const strings = this._strings;\n if (supportsAdoptingStyleSheets && styleSheet === undefined) {\n const cacheable = strings !== undefined && strings.length === 1;\n if (cacheable) {\n styleSheet = cssTagCache.get(strings);\n }\n if (styleSheet === undefined) {\n (this._styleSheet = styleSheet = new CSSStyleSheet()).replaceSync(\n this.cssText\n );\n if (cacheable) {\n cssTagCache.set(strings, styleSheet);\n }\n }\n }\n return styleSheet;\n }\n\n toString(): string {\n return this.cssText;\n }\n}\n\ntype ConstructableCSSResult = CSSResult & {\n new (\n cssText: string,\n strings: TemplateStringsArray | undefined,\n safeToken: symbol\n ): CSSResult;\n};\n\nconst textFromCSSResult = (value: CSSResultGroup | number) => {\n // This property needs to remain unminified.\n if ((value as CSSResult)['_$cssResult$'] === true) {\n return (value as CSSResult).cssText;\n } else if (typeof value === 'number') {\n return value;\n } else {\n throw new Error(\n `Value passed to 'css' function must be a 'css' function result: ` +\n `${value}. Use 'unsafeCSS' to pass non-literal values, but take care ` +\n `to ensure page security.`\n );\n }\n};\n\n/**\n * Wrap a value for interpolation in a {@linkcode css} tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value: unknown) =>\n new (CSSResult as ConstructableCSSResult)(\n typeof value === 'string' ? value : String(value),\n undefined,\n constructionToken\n );\n\n/**\n * A template literal tag which can be used with LitElement's\n * {@linkcode LitElement.styles} property to set element styles.\n *\n * For security reasons, only literal string values and number may be used in\n * embedded expressions. To incorporate non-literal values {@linkcode unsafeCSS}\n * may be used inside an expression.\n */\nexport const css = (\n strings: TemplateStringsArray,\n ...values: (CSSResultGroup | number)[]\n): CSSResult => {\n const cssText =\n strings.length === 1\n ? strings[0]\n : values.reduce(\n (acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1],\n strings[0]\n );\n return new (CSSResult as ConstructableCSSResult)(\n cssText,\n strings,\n constructionToken\n );\n};\n\n/**\n * Applies the given styles to a `shadowRoot`. When Shadow DOM is\n * available but `adoptedStyleSheets` is not, styles are appended to the\n * `shadowRoot` to [mimic the native feature](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/adoptedStyleSheets).\n * Note, when shimming is used, any styles that are subsequently placed into\n * the shadowRoot should be placed *before* any shimmed adopted styles. This\n * will match spec behavior that gives adopted sheets precedence over styles in\n * shadowRoot.\n */\nexport const adoptStyles = (\n renderRoot: ShadowRoot,\n styles: Array<CSSResultOrNative>\n) => {\n if (supportsAdoptingStyleSheets) {\n (renderRoot as ShadowRoot).adoptedStyleSheets = styles.map((s) =>\n s instanceof CSSStyleSheet ? s : s.styleSheet!\n );\n } else {\n for (const s of styles) {\n const style = document.createElement('style');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nonce = (global as any)['litNonce'];\n if (nonce !== undefined) {\n style.setAttribute('nonce', nonce);\n }\n style.textContent = (s as CSSResult).cssText;\n renderRoot.appendChild(style);\n }\n }\n};\n\nconst cssResultFromStyleSheet = (sheet: CSSStyleSheet) => {\n let cssText = '';\n for (const rule of sheet.cssRules) {\n cssText += rule.cssText;\n }\n return unsafeCSS(cssText);\n};\n\nexport const getCompatibleStyle =\n supportsAdoptingStyleSheets ||\n (NODE_MODE && global.CSSStyleSheet === undefined)\n ? (s: CSSResultOrNative) => s\n : (s: CSSResultOrNative) =>\n s instanceof CSSStyleSheet ? cssResultFromStyleSheet(s) : s;\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * Use this module if you want to create your own base class extending\n * {@link ReactiveElement}.\n * @packageDocumentation\n */\n\nimport {\n getCompatibleStyle,\n adoptStyles,\n CSSResultGroup,\n CSSResultOrNative,\n} from './css-tag.js';\nimport type {\n ReactiveController,\n ReactiveControllerHost,\n} from './reactive-controller.js';\n\n// In the Node build, this import will be injected by Rollup:\n// import {HTMLElement, customElements} from '@lit-labs/ssr-dom-shim';\n\nexport * from './css-tag.js';\nexport type {\n ReactiveController,\n ReactiveControllerHost,\n} from './reactive-controller.js';\n\n/**\n * Removes the `readonly` modifier from properties in the union K.\n *\n * This is a safer way to cast a value to a type with a mutable version of a\n * readonly field, than casting to an interface with the field re-declared\n * because it preserves the type of all the fields and warns on typos.\n */\ntype Mutable<T, K extends keyof T> = Omit<T, K> & {\n -readonly [P in keyof Pick<T, K>]: P extends K ? T[P] : never;\n};\n\n// TODO (justinfagnani): Add `hasOwn` here when we ship ES2022\nconst {\n is,\n defineProperty,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n getPrototypeOf,\n} = Object;\n\nconst NODE_MODE = false;\n\n// Lets a minifier replace globalThis references with a minified name\nconst global = globalThis;\n\nif (NODE_MODE) {\n global.customElements ??= customElements;\n}\n\nconst DEV_MODE = true;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nconst trustedTypes = (global as unknown as {trustedTypes?: {emptyScript: ''}})\n .trustedTypes;\n\n// Temporary workaround for https://crbug.com/993268\n// Currently, any attribute starting with \"on\" is considered to be a\n// TrustedScript source. Such boolean attributes must be set to the equivalent\n// trusted emptyScript value.\nconst emptyStringForBooleanAttribute = trustedTypes\n ? (trustedTypes.emptyScript as unknown as '')\n : '';\n\nconst polyfillSupport = DEV_MODE\n ? global.reactiveElementPolyfillSupportDevMode\n : global.reactiveElementPolyfillSupport;\n\nif (DEV_MODE) {\n // Ensure warnings are issued only 1x, even if multiple versions of Lit\n // are loaded.\n global.litIssuedWarnings ??= new Set();\n\n /**\n * Issue a warning if we haven't already, based either on `code` or `warning`.\n * Warnings are disabled automatically only by `warning`; disabling via `code`\n * can be done by users.\n */\n issueWarning = (code: string, warning: string) => {\n warning += ` See https://lit.dev/msg/${code} for more information.`;\n if (\n !global.litIssuedWarnings!.has(warning) &&\n !global.litIssuedWarnings!.has(code)\n ) {\n console.warn(warning);\n global.litIssuedWarnings!.add(warning);\n }\n };\n\n queueMicrotask(() => {\n issueWarning(\n 'dev-mode',\n `Lit is in dev mode. Not recommended for production!`\n );\n\n // Issue polyfill support warning.\n if (global.ShadyDOM?.inUse && polyfillSupport === undefined) {\n issueWarning(\n 'polyfill-support-missing',\n `Shadow DOM is being polyfilled via \\`ShadyDOM\\` but ` +\n `the \\`polyfill-support\\` module has not been loaded.`\n );\n }\n });\n}\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace ReactiveUnstable {\n /**\n * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n * we will emit 'lit-debug' events to window, with live details about the update and render\n * lifecycle. These can be useful for writing debug tooling and visualizations.\n *\n * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n * making certain operations that are normally very cheap (like a no-op render) much slower,\n * because we must copy data and dispatch events.\n */\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace DebugLog {\n export type Entry = Update;\n export interface Update {\n kind: 'update';\n }\n }\n}\n\ninterface DebugLoggingWindow {\n // Even in dev mode, we generally don't want to emit these events, as that's\n // another level of cost, so only emit them when DEV_MODE is true _and_ when\n // window.emitLitDebugEvents is true.\n emitLitDebugLogEvents?: boolean;\n}\n\n/**\n * Useful for visualizing and logging insights into what the Lit template system is doing.\n *\n * Compiled out of prod mode builds.\n */\nconst debugLogEvent = DEV_MODE\n ? (event: ReactiveUnstable.DebugLog.Entry) => {\n const shouldEmit = (global as unknown as DebugLoggingWindow)\n .emitLitDebugLogEvents;\n if (!shouldEmit) {\n return;\n }\n global.dispatchEvent(\n new CustomEvent<ReactiveUnstable.DebugLog.Entry>('lit-debug', {\n detail: event,\n })\n );\n }\n : undefined;\n\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\n/*@__INLINE__*/\nconst JSCompiler_renameProperty = <P extends PropertyKey>(\n prop: P,\n _obj: unknown\n): P => prop;\n\n/**\n * Converts property values to and from attribute values.\n */\nexport interface ComplexAttributeConverter<Type = unknown, TypeHint = unknown> {\n /**\n * Called to convert an attribute value to a property\n * value.\n */\n fromAttribute?(value: string | null, type?: TypeHint): Type;\n\n /**\n * Called to convert a property value to an attribute\n * value.\n *\n * It returns unknown instead of string, to be compatible with\n * https://github.com/WICG/trusted-types (and similar efforts).\n */\n toAttribute?(value: Type, type?: TypeHint): unknown;\n}\n\ntype AttributeConverter<Type = unknown, TypeHint = unknown> =\n | ComplexAttributeConverter<Type>\n | ((value: string | null, type?: TypeHint) => Type);\n\n/**\n * Defines options for a property accessor.\n */\nexport interface PropertyDeclaration<Type = unknown, TypeHint = unknown> {\n /**\n * When set to `true`, indicates the property is internal private state. The\n * property should not be set by users. When using TypeScript, this property\n * should be marked as `private` or `protected`, and it is also a common\n * practice to use a leading `_` in the name. The property is not added to\n * `observedAttributes`.\n */\n readonly state?: boolean;\n\n /**\n * Indicates how and whether the property becomes an observed attribute.\n * If the value is `false`, the property is not added to `observedAttributes`.\n * If true or absent, the lowercased property name is observed (e.g. `fooBar`\n * becomes `foobar`). If a string, the string value is observed (e.g\n * `attribute: 'foo-bar'`).\n */\n readonly attribute?: boolean | string;\n\n /**\n * Indicates the type of the property. This is used only as a hint for the\n * `converter` to determine how to convert the attribute\n * to/from a property.\n */\n readonly type?: TypeHint;\n\n /**\n * Indicates how to convert the attribute to/from a property. If this value\n * is a function, it is used to convert the attribute value a the property\n * value. If it's an object, it can have keys for `fromAttribute` and\n * `toAttribute`. If no `toAttribute` function is provided and\n * `reflect` is set to `true`, the property value is set directly to the\n * attribute. A default `converter` is used if none is provided; it supports\n * `Boolean`, `String`, `Number`, `Object`, and `Array`. Note,\n * when a property changes and the converter is used to update the attribute,\n * the property is never updated again as a result of the attribute changing,\n * and vice versa.\n */\n readonly converter?: AttributeConverter<Type, TypeHint>;\n\n /**\n * Indicates if the property should reflect to an attribute.\n * If `true`, when the property is set, the attribute is set using the\n * attribute name determined according to the rules for the `attribute`\n * property option and the value of the property converted using the rules\n * from the `converter` property option.\n */\n readonly reflect?: boolean;\n\n /**\n * A function that indicates if a property should be considered changed when\n * it is set. The function should take the `newValue` and `oldValue` and\n * return `true` if an update should be requested.\n */\n hasChanged?(value: Type, oldValue: Type): boolean;\n\n /**\n * Indicates whether an accessor will be created for this property. By\n * default, an accessor will be generated for this property that requests an\n * update when set. If this flag is `true`, no accessor will be created, and\n * it will be the user's responsibility to call\n * `this.requestUpdate(propertyName, oldValue)` to request an update when\n * the property changes.\n */\n readonly noAccessor?: boolean;\n\n /**\n * Whether this property is wrapping accessors. This is set by `@property`\n * to control the initial value change and reflection logic.\n *\n * @internal\n */\n wrapped?: boolean;\n\n /**\n * When `true`, uses the initial value of the property as the default value,\n * which changes how attributes are handled:\n * - The initial value does *not* reflect, even if the `reflect` option is `true`.\n * Subsequent changes to the property will reflect, even if they are equal to the\n * default value.\n * - When the attribute is removed, the property is set to the default value\n * - The initial value will not trigger an old value in the `changedProperties` map\n * argument to update lifecycle methods.\n *\n * When set, properties must be initialized, either with a field initializer, or an\n * assignment in the constructor. Not initializing the property may lead to\n * improper handling of subsequent property assignments.\n *\n * While this behavior is opt-in, most properties that reflect to attributes should\n * use `useDefault: true` so that their initial values do not reflect.\n */\n useDefault?: boolean;\n}\n\n/**\n * Map of properties to PropertyDeclaration options. For each property an\n * accessor is made, and the property is processed according to the\n * PropertyDeclaration options.\n */\nexport interface PropertyDeclarations {\n readonly [key: string]: PropertyDeclaration;\n}\n\ntype PropertyDeclarationMap = Map<PropertyKey, PropertyDeclaration>;\n\ntype AttributeMap = Map<string, PropertyKey>;\n\n/**\n * A Map of property keys to values.\n *\n * Takes an optional type parameter T, which when specified as a non-any,\n * non-unknown type, will make the Map more strongly-typed, associating the map\n * keys with their corresponding value type on T.\n *\n * Use `PropertyValues<this>` when overriding ReactiveElement.update() and\n * other lifecycle methods in order to get stronger type-checking on keys\n * and values.\n */\n// This type is conditional so that if the parameter T is not specified, or\n// is `any`, the type will include `Map<PropertyKey, unknown>`. Since T is not\n// given in the uses of PropertyValues in this file, all uses here fallback to\n// meaning `Map<PropertyKey, unknown>`, but if a developer uses\n// `PropertyValues<this>` (or any other value for T) they will get a\n// strongly-typed Map type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PropertyValues<T = any> = T extends object\n ? PropertyValueMap<T>\n : Map<PropertyKey, unknown>;\n\n/**\n * Do not use, instead prefer {@linkcode PropertyValues}.\n */\n// This type must be exported such that JavaScript generated by the Google\n// Closure Compiler can import a type reference.\nexport interface PropertyValueMap<T> extends Map<PropertyKey, unknown> {\n get<K extends keyof T>(k: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): this;\n has<K extends keyof T>(k: K): boolean;\n delete<K extends keyof T>(k: K): boolean;\n}\n\nexport const defaultConverter: ComplexAttributeConverter = {\n toAttribute(value: unknown, type?: unknown): unknown {\n switch (type) {\n case Boolean:\n value = value ? emptyStringForBooleanAttribute : null;\n break;\n case Object:\n case Array:\n // if the value is `null` or `undefined` pass this through\n // to allow removing/no change behavior.\n value = value == null ? value : JSON.stringify(value);\n break;\n }\n return value;\n },\n\n fromAttribute(value: string | null, type?: unknown) {\n let fromValue: unknown = value;\n switch (type) {\n case Boolean:\n fromValue = value !== null;\n break;\n case Number:\n fromValue = value === null ? null : Number(value);\n break;\n case Object:\n case Array:\n // Do *not* generate exception when invalid JSON is set as elements\n // don't normally complain on being mis-configured.\n // TODO(sorvell): Do generate exception in *dev mode*.\n try {\n // Assert to adhere to Bazel's \"must type assert JSON parse\" rule.\n fromValue = JSON.parse(value!) as unknown;\n } catch (e) {\n fromValue = null;\n }\n break;\n }\n return fromValue;\n },\n};\n\nexport interface HasChanged {\n (value: unknown, old: unknown): boolean;\n}\n\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual: HasChanged = (value: unknown, old: unknown): boolean =>\n !is(value, old);\n\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n attribute: true,\n type: String,\n converter: defaultConverter,\n reflect: false,\n useDefault: false,\n hasChanged: notEqual,\n};\n\n/**\n * A string representing one of the supported dev mode warning categories.\n */\nexport type WarningKind =\n | 'change-in-update'\n | 'migration'\n | 'async-perform-update';\n\nexport type Initializer = (element: ReactiveElement) => void;\n\n// Temporary, until google3 is on TypeScript 5.2\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n\n// Ensure metadata is enabled. TypeScript does not polyfill\n// Symbol.metadata, so we must ensure that it exists.\n(Symbol as {metadata: symbol}).metadata ??= Symbol('metadata');\n\ndeclare global {\n // This is public global API, do not change!\n // eslint-disable-next-line no-var\n var litPropertyMetadata: WeakMap<\n object,\n Map<PropertyKey, PropertyDeclaration>\n >;\n}\n\n// Map from a class's metadata object to property options\n// Note that we must use nullish-coalescing assignment so that we only use one\n// map even if we load multiple version of this module.\nglobal.litPropertyMetadata ??= new WeakMap<\n object,\n Map<PropertyKey, PropertyDeclaration>\n>();\n\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclasses to render updates as desired.\n * @noInheritDoc\n */\nexport abstract class ReactiveElement\n // In the Node build, this `extends` clause will be substituted with\n // `(globalThis.HTMLElement ?? HTMLElement)`.\n //\n // This way, we will first prefer any global `HTMLElement` polyfill that the\n // user has assigned, and then fall back to the `HTMLElement` shim which has\n // been imported (see note at the top of this file about how this import is\n // generated by Rollup). Note that the `HTMLElement` variable has been\n // shadowed by this import, so it no longer refers to the global.\n extends HTMLElement\n implements ReactiveControllerHost\n{\n // Note: these are patched in only in DEV_MODE.\n /**\n * Read or set all the enabled warning categories for this class.\n *\n * This property is only used in development builds.\n *\n * @nocollapse\n * @category dev-mode\n */\n static enabledWarnings?: WarningKind[];\n\n /**\n * Enable the given warning category for this class.\n *\n * This method only exists in development builds, so it should be accessed\n * with a guard like:\n *\n * ```ts\n * // Enable for all ReactiveElement subclasses\n * ReactiveElement.enableWarning?.('migration');\n *\n * // Enable for only MyElement and subclasses\n * MyElement.enableWarning?.('migration');\n * ```\n *\n * @nocollapse\n * @category dev-mode\n */\n static enableWarning?: (warningKind: WarningKind) => void;\n\n /**\n * Disable the given warning category for this class.\n *\n * This method only exists in development builds, so it should be accessed\n * with a guard like:\n *\n * ```ts\n * // Disable for all ReactiveElement subclasses\n * ReactiveElement.disableWarning?.('migration');\n *\n * // Disable for only MyElement and subclasses\n * MyElement.disableWarning?.('migration');\n * ```\n *\n * @nocollapse\n * @category dev-mode\n */\n static disableWarning?: (warningKind: WarningKind) => void;\n\n /**\n * Adds an initializer function to the class that is called during instance\n * construction.\n *\n * This is useful for code that runs against a `ReactiveElement`\n * subclass, such as a decorator, that needs to do work for each\n * instance, such as setting up a `ReactiveController`.\n *\n * ```ts\n * const myDecorator = (target: typeof ReactiveElement, key: string) => {\n * target.addInitializer((instance: ReactiveElement) => {\n * // This is run during construction of the element\n * new MyController(instance);\n * });\n * }\n * ```\n *\n * Decorating a field will then cause each instance to run an initializer\n * that adds a controller:\n *\n * ```ts\n * class MyElement extends LitElement {\n * @myDecorator foo;\n * }\n * ```\n *\n * Initializers are stored per-constructor. Adding an initializer to a\n * subclass does not add it to a superclass. Since initializers are run in\n * constructors, initializers will run in order of the class hierarchy,\n * starting with superclasses and progressing to the instance's class.\n *\n * @nocollapse\n */\n static addInitializer(initializer: Initializer) {\n this.__prepare();\n (this._initializers ??= []).push(initializer);\n }\n\n static _initializers?: Initializer[];\n\n /*\n * Due to closure compiler ES6 compilation bugs, @nocollapse is required on\n * all static methods and properties with initializers. Reference:\n * - https://github.com/google/closure-compiler/issues/1776\n */\n\n /**\n * Maps attribute names to properties; for example `foobar` attribute to\n * `fooBar` property. Created lazily on user subclasses when finalizing the\n * class.\n * @nocollapse\n */\n private static __attributeToPropertyMap: AttributeMap;\n\n /**\n * Marks class as having been finalized, which includes creating properties\n * from `static properties`, but does *not* include all properties created\n * from decorators.\n * @nocollapse\n */\n protected static finalized: true | undefined;\n\n /**\n * Memoized list of all element properties, including any superclass\n * properties. Created lazily on user subclasses when finalizing the class.\n *\n * @nocollapse\n * @category properties\n */\n static elementProperties: PropertyDeclarationMap;\n\n /**\n * User-supplied object that maps property names to `PropertyDeclaration`\n * objects containing options for configuring reactive properties. When\n * a reactive property is set the element will update and render.\n *\n * By default properties are public fields, and as such, they should be\n * considered as primarily settable by element users, either via attribute or\n * the property itself.\n *\n * Generally, properties that are changed by the element should be private or\n * protected fields and should use the `state: true` option. Properties\n * marked as `state` do not reflect from the corresponding attribute\n *\n * However, sometimes element code does need to set a public property. This\n * should typically only be done in response to user interaction, and an event\n * should be fired informing the user; for example, a checkbox sets its\n * `checked` property when clicked and fires a `changed` event. Mutating\n * public properties should typically not be done for non-primitive (object or\n * array) properties. In other cases when an element needs to manage state, a\n * private property set with the `state: true` option should be used. When\n * needed, state properties can be initialized via public properties to\n * facilitate complex interactions.\n * @nocollapse\n * @category properties\n */\n static properties: PropertyDeclarations;\n\n /**\n * Memoized list of all element styles.\n * Created lazily on user subclasses when finalizing the class.\n * @nocollapse\n * @category styles\n */\n static elementStyles: Array<CSSResultOrNative> = [];\n\n /**\n * Array of styles to apply to the element. The styles should be defined\n * using the {@linkcode css} tag function, via constructible stylesheets, or\n * imported from native CSS module scripts.\n *\n * Note on Content Security Policy:\n *\n * Element styles are implemented with `<style>` tags when the browser doesn't\n * support adopted StyleSheets. To use such `<style>` tags with the style-src\n * CSP directive, the style-src value must either include 'unsafe-inline' or\n * `nonce-<base64-value>` with `<base64-value>` replaced be a server-generated\n * nonce.\n *\n * To provide a nonce to use on generated `<style>` elements, set\n * `window.litNonce` to a server-generated nonce in your page's HTML, before\n * loading application code:\n *\n * ```html\n * <script>\n * // Generated and unique per request:\n * window.litNonce = 'a1b2c3d4';\n * </script>\n * ```\n * @nocollapse\n * @category styles\n */\n static styles?: CSSResultGroup;\n\n /**\n * Returns a list of attributes corresponding to the registered properties.\n * @nocollapse\n * @category attributes\n */\n static get observedAttributes() {\n // Ensure we've created all properties\n this.finalize();\n // this.__attributeToPropertyMap is only undefined after finalize() in\n // ReactiveElement itself. ReactiveElement.observedAttributes is only\n // accessed with ReactiveElement as the receiver when a subclass or mixin\n // calls super.observedAttributes\n return (\n this.__attributeToPropertyMap && [...this.__attributeToPropertyMap.keys()]\n );\n }\n\n private __instanceProperties?: PropertyValues = undefined;\n\n /**\n * Creates a property accessor on the element prototype if one does not exist\n * and stores a {@linkcode PropertyDeclaration} for the property with the\n * given options. The property setter calls the property's `hasChanged`\n * property option or uses a strict identity check to determine whether or not\n * to request an update.\n *\n * This method may be overridden to customize properties; however,\n * when doing so, it's important to call `super.createProperty` to ensure\n * the property is setup correctly. This method calls\n * `getPropertyDescriptor` internally to get a descriptor to install.\n * To customize what properties do when they are get or set, override\n * `getPropertyDescriptor`. To customize the options for a property,\n * implement `createProperty` like this:\n *\n * ```ts\n * static createProperty(name, options) {\n * options = Object.assign(options, {myOption: true});\n * super.createProperty(name, options);\n * }\n * ```\n *\n * @nocollapse\n * @category properties\n */\n static createProperty(\n name: PropertyKey,\n options: PropertyDeclaration = defaultPropertyDeclaration\n ) {\n // If this is a state property, force the attribute to false.\n if (options.state) {\n (options as Mutable<PropertyDeclaration, 'attribute'>).attribute = false;\n }\n this.__prepare();\n // Whether this property is wrapping accessors.\n // Helps control the initial value change and reflection logic.\n if (this.prototype.hasOwnProperty(name)) {\n options = Object.create(options);\n options.wrapped = true;\n }\n this.elementProperties.set(name, options);\n if (!options.noAccessor) {\n const key = DEV_MODE\n ? // Use Symbol.for in dev mode to make it easier to maintain state\n // when doing HMR.\n Symbol.for(`${String(name)} (@property() cache)`)\n : Symbol();\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n defineProperty(this.prototype, name, descriptor);\n }\n }\n }\n\n /**\n * Returns a property descriptor to be defined on the given named property.\n * If no descriptor is returned, the property will not become an accessor.\n * For example,\n *\n * ```ts\n * class MyElement extends LitElement {\n * static getPropertyDescriptor(name, key, options) {\n * const defaultDescriptor =\n * super.getPropertyDescriptor(name, key, options);\n * const setter = defaultDescriptor.set;\n * return {\n * get: defaultDescriptor.get,\n * set(value) {\n * setter.call(this, value);\n * // custom action.\n * },\n * configurable: true,\n * enumerable: true\n * }\n * }\n * }\n * ```\n *\n * @nocollapse\n * @category properties\n */\n protected static getPropertyDescriptor(\n name: PropertyKey,\n key: string | symbol,\n options: PropertyDeclaration\n ): PropertyDescriptor | undefined {\n const {get, set} = getOwnPropertyDescriptor(this.prototype, name) ?? {\n get(this: ReactiveElement) {\n return this[key as keyof typeof this];\n },\n set(this: ReactiveElement, v: unknown) {\n (this as unknown as Record<string | symbol, unknown>)[key] = v;\n },\n };\n if (DEV_MODE && get == null) {\n if ('value' in (getOwnPropertyDescriptor(this.prototype, name) ?? {})) {\n throw new Error(\n `Field ${JSON.stringify(String(name))} on ` +\n `${this.name} was declared as a reactive property ` +\n `but it's actually declared as a value on the prototype. ` +\n `Usually this is due to using @property or @state on a method.`\n );\n }\n issueWarning(\n 'reactive-property-without-getter',\n `Field ${JSON.stringify(String(name))} on ` +\n `${this.name} was declared as a reactive property ` +\n `but it does not have a getter. This will be an error in a ` +\n `future version of Lit.`\n );\n }\n return {\n get,\n set(this: ReactiveElement, value: unknown) {\n const oldValue = get?.call(this);\n set?.call(this, value);\n this.requestUpdate(name, oldValue, options);\n },\n configurable: true,\n enumerable: true,\n };\n }\n\n /**\n * Returns the property options associated with the given property.\n * These options are defined with a `PropertyDeclaration` via the `properties`\n * object or the `@property` decorator and are registered in\n * `createProperty(...)`.\n *\n * Note, this method should be considered \"final\" and not overridden. To\n * customize the options for a given property, override\n * {@linkcode createProperty}.\n *\n * @nocollapse\n * @final\n * @category properties\n */\n static getPropertyOptions(name: PropertyKey) {\n return this.elementProperties.get(name) ?? defaultPropertyDeclaration;\n }\n\n // Temporary, until google3 is on TypeScript 5.2\n declare static [Symbol.metadata]: object & Record<PropertyKey, unknown>;\n\n /**\n * Initializes static own properties of the class used in bookkeeping\n * for element properties, initializers, etc.\n *\n * Can be called multiple times by code that needs to ensure these\n * properties exist before using them.\n *\n * This method ensures the superclass is finalized so that inherited\n * property metadata can be copied down.\n * @nocollapse\n */\n private static __prepare() {\n if (\n this.hasOwnProperty(JSCompiler_renameProperty('elementProperties', this))\n ) {\n // Already prepared\n return;\n }\n // Finalize any superclasses\n const superCtor = getPrototypeOf(this) as typeof ReactiveElement;\n superCtor.finalize();\n\n // Create own set of initializers for this class if any exist on the\n // superclass and copy them down. Note, for a small perf boost, avoid\n // creating initializers unless needed.\n if (superCtor._initializers !== undefined) {\n this._initializers = [...superCtor._initializers];\n }\n // Initialize elementProperties from the superclass\n this.elementProperties = new Map(superCtor.elementProperties);\n }\n\n /**\n * Finishes setting up the class so that it's ready to be registered\n * as a custom element and instantiated.\n *\n * This method is called by the ReactiveElement.observedAttributes getter.\n * If you override the observedAttributes getter, you must either call\n * super.observedAttributes to trigger finalization, or call finalize()\n * yourself.\n *\n * @nocollapse\n */\n protected static finalize() {\n if (this.hasOwnProperty(JSCompiler_renameProperty('finalized', this))) {\n return;\n }\n this.finalized = true;\n this.__prepare();\n\n // Create properties from the static properties block:\n if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n const props = this.properties;\n const propKeys = [\n ...getOwnPropertyNames(props),\n ...getOwnPropertySymbols(props),\n ] as Array<keyof typeof props>;\n for (const p of propKeys) {\n this.createProperty(p, props[p]);\n }\n }\n\n // Create properties from standard decorator metadata:\n const metadata = this[Symbol.metadata];\n if (metadata !== null) {\n const properties = litPropertyMetadata.get(metadata);\n if (properties !== undefined) {\n for (const [p, options] of properties) {\n this.elementProperties.set(p, options);\n }\n }\n }\n\n // Create the attribute-to-property map\n this.__attributeToPropertyMap = new Map();\n for (const [p, options] of this.elementProperties) {\n const attr = this.__attributeNameForProperty(p, options);\n if (attr !== undefined) {\n this.__attributeToPropertyMap.set(attr, p);\n }\n }\n\n this.elementStyles = this.finalizeStyles(this.styles);\n\n if (DEV_MODE) {\n if (this.hasOwnProperty('createProperty')) {\n issueWarning(\n 'no-override-create-property',\n 'Overriding ReactiveElement.createProperty() is deprecated. ' +\n 'The override will not be called with standard decorators'\n );\n }\n if (this.hasOwnProperty('getPropertyDescriptor')) {\n issueWarning(\n 'no-override-get-property-descriptor',\n 'Overriding ReactiveElement.getPropertyDescriptor() is deprecated. ' +\n 'The override will not be called with standard decorators'\n );\n }\n }\n }\n\n /**\n * Options used when calling `attachShadow`. Set this property to customize\n * the options for the shadowRoot; for example, to create a closed\n * shadowRoot: `{mode: 'closed'}`.\n *\n * Note, these options are used in `createRenderRoot`. If this method\n * is customized, options should be respected if possible.\n * @nocollapse\n * @category rendering\n */\n static shadowRootOptions: ShadowRootInit = {mode: 'open'};\n\n /**\n * Takes the styles the user supplied via the `static styles` property and\n * returns the array of styles to apply to the element.\n * Override this method to integrate into a style management system.\n *\n * Styles are deduplicated preserving the _last_ instance in the list. This\n * is a performance optimization to avoid duplicated styles that can occur\n * especially when composing via subclassing. The last item is kept to try\n * to preserve the cascade order with the assumption that it's most important\n * that last added styles override previous styles.\n *\n * @nocollapse\n * @category styles\n */\n protected static finalizeStyles(\n styles?: CSSResultGroup\n ): Array<CSSResultOrNative> {\n const elementStyles = [];\n if (Array.isArray(styles)) {\n // Dedupe the flattened array in reverse order to preserve the last items.\n // Casting to Array<unknown> works around TS error that\n // appears to come from trying to flatten a type CSSResultArray.\n const set = new Set((styles as Array<unknown>).flat(Infinity).reverse());\n // Then preserve original order by adding the set items in reverse order.\n for (const s of set) {\n elementStyles.unshift(getCompatibleStyle(s as CSSResultOrNative));\n }\n } else if (styles !== undefined) {\n elementStyles.push(getCompatibleStyle(styles));\n }\n return elementStyles;\n }\n\n /**\n * Node or ShadowRoot into which element DOM should be rendered. Defaults\n * to an open shadowRoot.\n * @category rendering\n */\n readonly renderRoot!: HTMLElement | DocumentFragment;\n\n /**\n * Returns the property name for the given attribute `name`.\n * @nocollapse\n */\n private static __attributeNameForProperty(\n name: PropertyKey,\n options: PropertyDeclaration\n ) {\n const attribute = options.attribute;\n return attribute === false\n ? undefined\n : typeof attribute === 'string'\n ? attribute\n : typeof name === 'string'\n ? name.toLowerCase()\n : undefined;\n }\n\n // Initialize to an unresolved Promise so we can make sure the element has\n // connected before first update.\n private __updatePromise!: Promise<boolean>;\n\n /**\n * True if there is a pending update as a result of calling `requestUpdate()`.\n * Should only be read.\n * @category updates\n */\n isUpdatePending = false;\n\n /**\n * Is set to `true` after the first update. The element code cannot assume\n * that `renderRoot` exists before the element `hasUpdated`.\n * @category updates\n */\n hasUpdated = false;\n\n /**\n * Map with keys for any properties that have changed since the last\n * update cycle with previous values.\n *\n * @internal\n */\n _$changedProperties!: PropertyValues;\n\n /**\n * Records property default values when the\n * `useDefault` option is used.\n */\n private __defaultValues?: Map<PropertyKey, unknown>;\n\n /**\n * Properties that should be reflected when updated.\n */\n private __reflectingProperties?: Set<PropertyKey>;\n\n /**\n * Name of currently reflecting property\n */\n private __reflectingProperty: PropertyKey | null = null;\n\n /**\n * Set of controllers.\n */\n private __controllers?: Set<ReactiveController>;\n\n constructor() {\n super();\n this.__initialize();\n }\n\n /**\n * Internal only override point for customizing work done when elements\n * are constructed.\n */\n private __initialize() {\n this.__updatePromise = new Promise<boolean>(\n (res) => (this.enableUpdating = res)\n );\n this._$changedProperties = new Map();\n // This enqueues a microtask that must run before the first update, so it\n // must be called before requestUpdate()\n this.__saveInstanceProperties();\n // ensures first update will be caught by an early access of\n // `updateComplete`\n this.requestUpdate();\n (this.constructor as typeof ReactiveElement)._initializers?.forEach((i) =>\n i(this)\n );\n }\n\n /**\n * Registers a `ReactiveController` to participate in the element's reactive\n * update cycle. The element automatically calls into any registered\n * controllers during its lifecycle callbacks.\n *\n * If the element is connected when `addController()` is called, the\n * controller's `hostConnected()` callback will be immediately called.\n * @category controllers\n */\n addController(controller: ReactiveController) {\n (this.__controllers ??= new Set()).add(controller);\n // If a controller is added after the element has been connected,\n // call hostConnected. Note, re-using existence of `renderRoot` here\n // (which is set in connectedCallback) to avoid the need to track a\n // first connected state.\n if (this.renderRoot !== undefined && this.isConnected) {\n controller.hostConnected?.();\n }\n }\n\n /**\n * Removes a `ReactiveController` from the element.\n * @category controllers\n */\n removeController(controller: ReactiveController) {\n this.__controllers?.delete(controller);\n }\n\n /**\n * Fixes any properties set on the instance before upgrade time.\n * Otherwise these would shadow the accessor and break these properties.\n * The properties are stored in a Map which is played back after the\n * constructor runs.\n */\n private __saveInstanceProperties() {\n const instanceProperties = new Map<PropertyKey, unknown>();\n const elementProperties = (this.constructor as typeof ReactiveElement)\n .elementProperties;\n for (const p of elementProperties.keys() as IterableIterator<keyof this>) {\n if (this.hasOwnProperty(p)) {\n instanceProperties.set(p, this[p]);\n delete this[p];\n }\n }\n if (instanceProperties.size > 0) {\n this.__instanceProperties = instanceProperties;\n }\n }\n\n /**\n * Returns the node into which the element should render and by default\n * creates and returns an open shadowRoot. Implement to customize where the\n * element's DOM is rendered. For example, to render into the element's\n * childNodes, return `this`.\n *\n * @return Returns a node into which to render.\n * @category rendering\n */\n protected createRenderRoot(): HTMLElement | DocumentFragment {\n const renderRoot =\n this.shadowRoot ??\n this.attachShadow(\n (this.constructor as typeof ReactiveElement).shadowRootOptions\n );\n adoptStyles(\n renderRoot,\n (this.constructor as typeof ReactiveElement).elementStyles\n );\n return renderRoot;\n }\n\n /**\n * On first connection, creates the element's renderRoot, sets up\n * element styling, and enables updating.\n * @category lifecycle\n */\n connectedCallback() {\n // Create renderRoot before controllers `hostConnected`\n (this as Mutable<typeof this, 'renderRoot'>).renderRoot ??=\n this.createRenderRoot();\n this.enableUpdating(true);\n this.__controllers?.forEach((c) => c.hostConnected?.());\n }\n\n /**\n * Note, this method should be considered final and not overridden. It is\n * overridden on the element instance with a function that triggers the first\n * update.\n * @category updates\n */\n protected enableUpdating(_requestedUpdate: boolean) {}\n\n /**\n * Allows for `super.disconnectedCallback()` in extensions while\n * reserving the possibility of making non-breaking feature additions\n * when disconnecting at some point in the future.\n * @category lifecycle\n */\n disconnectedCallback() {\n this.__controllers?.forEach((c) => c.hostDisconnected?.());\n }\n\n /**\n * Synchronizes property values when attributes change.\n *\n * Specifically, when an attribute is set, the corresponding property is set.\n * You should rarely need to implement this callback. If this method is\n * overridden, `super.attributeChangedCallback(name, _old, value)` must be\n * called.\n *\n * See [responding to attribute changes](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#responding_to_attribute_changes)\n * on MDN for more information about the `attributeChangedCallback`.\n * @category attributes\n */\n attributeChangedCallback(\n name: string,\n _old: string | null,\n value: string | null\n ) {\n this._$attributeToProperty(name, value);\n }\n\n private __propertyToAttribute(name: PropertyKey, value: unknown) {\n const elemProperties: PropertyDeclarationMap = (\n this.constructor as typeof ReactiveElement\n ).elementProperties;\n const options = elemProperties.get(name)!;\n const attr = (\n this.constructor as typeof ReactiveElement\n ).__attributeNameForProperty(name, options);\n if (attr !== undefined && options.reflect === true) {\n const converter =\n (options.converter as ComplexAttributeConverter)?.toAttribute !==\n undefined\n ? (options.converter as ComplexAttributeConverter)\n : defaultConverter;\n const attrValue = converter.toAttribute!(value, options.type);\n if (\n DEV_MODE &&\n (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n 'migration'\n ) &&\n attrValue === undefined\n ) {\n issueWarning(\n 'undefined-attribute-value',\n `The attribute value for the ${name as string} property is ` +\n `undefined on element ${this.localName}. The attribute will be ` +\n `removed, but in the previous version of \\`ReactiveElement\\`, ` +\n `the attribute would not have changed.`\n );\n }\n // Track if the property is being reflected to avoid\n // setting the property again via `attributeChangedCallback`. Note:\n // 1. this takes advantage of the fact that the callback is synchronous.\n // 2. will behave incorrectly if multiple attributes are in the reaction\n // stack at time of calling. However, since we process attributes\n // in `update` this should not be possible (or an extreme corner case\n // that we'd like to discover).\n // mark state reflecting\n this.__reflectingProperty = name;\n if (attrValue == null) {\n this.removeAttribute(attr);\n } else {\n this.setAttribute(attr, attrValue as string);\n }\n // mark state not reflecting\n this.__reflectingProperty = null;\n }\n }\n\n /** @internal */\n _$attributeToProperty(name: string, value: string | null) {\n const ctor = this.constructor as typeof ReactiveElement;\n // Note, hint this as an `AttributeMap` so closure clearly understands\n // the type; it has issues with tracking types through statics\n const propName = (ctor.__attributeToPropertyMap as AttributeMap).get(name);\n // Use tracking info to avoid reflecting a property value to an attribute\n // if it was just set because the attribute changed.\n if (propName !== undefined && this.__reflectingProperty !== propName) {\n const options = ctor.getPropertyOptions(propName);\n const converter =\n typeof options.converter === 'function'\n ? {fromAttribute: options.converter}\n : options.converter?.fromAttribute !== undefined\n ? options.converter\n : defaultConverter;\n // mark state reflecting\n this.__reflectingProperty = propName;\n const convertedValue = converter.fromAttribute!(value, options.type);\n this[propName as keyof this] =\n convertedValue ??\n this.__defaultValues?.get(propName) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (convertedValue as any);\n // mark state not reflecting\n this.__reflectingProperty = null;\n }\n }\n\n /**\n * Requests an update which is processed asynchronously. This should be called\n * when an element should update based on some state not triggered by setting\n * a reactive property. In this case, pass no arguments. It should also be\n * called when manually implementing a property setter. In this case, pass the\n * property `name` and `oldValue` to ensure that any configured property\n * options are honored.\n *\n * @param name name of requesting property\n * @param oldValue old value of requesting property\n * @param options property options to use instead of the previously\n * configured options\n * @category updates\n */\n requestUpdate(\n name?: PropertyKey,\n oldValue?: unknown,\n options?: PropertyDeclaration\n ): void {\n // If we have a property key, perform property update steps.\n if (name !== undefined) {\n if (DEV_MODE && (name as unknown) instanceof Event) {\n issueWarning(\n ``,\n `The requestUpdate() method was called with an Event as the property name. This is probably a mistake caused by binding this.requestUpdate as an event listener. Instead bind a function that will call it with no arguments: () => this.requestUpdate()`\n );\n }\n const ctor = this.constructor as typeof ReactiveElement;\n const newValue = this[name as keyof this];\n options ??= ctor.getPropertyOptions(name);\n const changed =\n (options.hasChanged ?? notEqual)(newValue, oldValue) ||\n // When there is no change, check a corner case that can occur when\n // 1. there's a initial value which was not reflected\n // 2. the property is subsequently set to this value.\n // For example, `prop: {useDefault: true, reflect: true}`\n // and el.prop = 'foo'. This should be considered a change if the\n // attribute is not set because we will now reflect the property to the attribute.\n (options.useDefault &&\n options.reflect &&\n newValue === this.__defaultValues?.get(name) &&\n !this.hasAttribute(ctor.__attributeNameForProperty(name, options)!));\n if (changed) {\n this._$changeProperty(name, oldValue, options);\n } else {\n // Abort the request if the property should not be considered changed.\n return;\n }\n }\n if (this.isUpdatePending === false) {\n this.__updatePromise = this.__enqueueUpdate();\n }\n }\n\n /**\n * @internal\n */\n _$changeProperty(\n name: PropertyKey,\n oldValue: unknown,\n {useDefault, reflect, wrapped}: PropertyDeclaration,\n initializeValue?: unknown\n ) {\n // Record default value when useDefault is used. This allows us to\n // restore this value when the attribute is removed.\n if (useDefault && !(this.__defaultValues ??= new Map()).has(name)) {\n this.__defaultValues.set(\n name,\n initializeValue ?? oldValue ?? this[name as keyof this]\n );\n // if this is not wrapping an accessor, it must be an initial setting\n // and in this case we do not want to record the change or reflect.\n if (wrapped !== true || initializeValue !== undefined) {\n return;\n }\n }\n // TODO (justinfagnani): Create a benchmark of Map.has() + Map.set(\n // vs just Map.set()\n if (!this._$changedProperties.has(name)) {\n // On the initial change, the old value should be `undefined`, except\n // with `useDefault`\n if (!this.hasUpdated && !useDefault) {\n oldValue = undefined;\n }\n this._$changedProperties.set(name, oldValue);\n }\n // Add to reflecting properties set.\n // Note, it's important that every change has a chance to add the\n // property to `__reflectingProperties`. This ensures setting\n // attribute + property reflects correctly.\n if (reflect === true && this.__reflectingProperty !== name) {\n (this.__reflectingProperties ??= new Set<PropertyKey>()).add(name);\n }\n }\n\n /**\n * Sets up the element to asynchronously update.\n */\n private async __enqueueUpdate() {\n this.isUpdatePending = true;\n try {\n // Ensure any previous update has resolved before updating.\n // This `await` also ensures that property changes are batched.\n await this.__updatePromise;\n } catch (e) {\n // Refire any previous errors async so they do not disrupt the update\n // cycle. Errors are refired so developers have a chance to observe\n // them, and this can be done by implementing\n // `window.onunhandledrejection`.\n Promise.reject(e);\n }\n const result = this.scheduleUpdate();\n // If `scheduleUpdate` returns a Promise, we await it. This is done to\n // enable coordinating updates with a scheduler. Note, the result is\n // checked to avoid delaying an additional microtask unless we need to.\n if (result != null) {\n await result;\n }\n return !this.isUpdatePending;\n }\n\n /**\n * Schedules an element update. You can override this method to change the\n * timing of updates by returning a Promise. The update will await the\n * returned Promise, and you should resolve the Promise to allow the update\n * to proceed. If this method is overridden, `super.scheduleUpdate()`\n * must be called.\n *\n * For instance, to schedule updates to occur just before the next frame:\n *\n * ```ts\n * override protected async scheduleUpdate(): Promise<unknown> {\n * await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n * super.scheduleUpdate();\n * }\n * ```\n * @category updates\n */\n protected scheduleUpdate(): void | Promise<unknown> {\n const result = this.performUpdate();\n if (\n DEV_MODE &&\n (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n 'async-perform-update'\n ) &&\n typeof (result as unknown as Promise<unknown> | undefined)?.then ===\n 'function'\n ) {\n issueWarning(\n 'async-perform-update',\n `Element ${this.localName} returned a Promise from performUpdate(). ` +\n `This behavior is deprecated and will be removed in a future ` +\n `version of ReactiveElement.`\n );\n }\n return result;\n }\n\n /**\n * Performs an element update. Note, if an exception is thrown during the\n * update, `firstUpdated` and `updated` will not be called.\n *\n * Call `performUpdate()` to immediately process a pending update. This should\n * generally not be needed, but it can be done in rare cases when you need to\n * update synchronously.\n *\n * @category updates\n */\n protected performUpdate(): void {\n // Abort any update if one is not pending when this is called.\n // This can happen if `performUpdate` is called early to \"flush\"\n // the update.\n if (!this.isUpdatePending) {\n return;\n }\n debugLogEvent?.({kind: 'update'});\n if (!this.hasUpdated) {\n // Create renderRoot before first update. This occurs in `connectedCallback`\n // but is done here to support out of tree calls to `enableUpdating`/`performUpdate`.\n (this as Mutable<typeof this, 'renderRoot'>).renderRoot ??=\n this.createRenderRoot();\n if (DEV_MODE) {\n // Produce warning if any reactive properties on the prototype are\n // shadowed by class fields. Instance fields set before upgrade are\n // deleted by this point, so any own property is caused by class field\n // initialization in the constructor.\n const ctor = this.constructor as typeof ReactiveElement;\n const shadowedProperties = [...ctor.elementProperties.keys()].filter(\n (p) => this.hasOwnProperty(p) && p in getPrototypeOf(this)\n );\n if (shadowedProperties.length) {\n throw new Error(\n `The following properties on element ${this.localName} will not ` +\n `trigger updates as expected because they are set using class ` +\n `fields: ${shadowedProperties.join(', ')}. ` +\n `Native class fields and some compiled output will overwrite ` +\n `accessors used for detecting changes. See ` +\n `https://lit.dev/msg/class-field-shadowing ` +\n `for more information.`\n );\n }\n }\n // Mixin instance properties once, if they exist.\n if (this.__instanceProperties) {\n // TODO (justinfagnani): should we use the stored value? Could a new value\n // have been set since we stored the own property value?\n for (const [p, value] of this.__instanceProperties) {\n this[p as keyof this] = value as this[keyof this];\n }\n this.__instanceProperties = undefined;\n }\n // Trigger initial value reflection and populate the initial\n // `changedProperties` map, but only for the case of properties created\n // via `createProperty` on accessors, which will not have already\n // populated the `changedProperties` map since they are not set.\n // We can't know if these accessors had initializers, so we just set\n // them anyway - a difference from experimental decorators on fields and\n // standard decorators on auto-accessors.\n // For context see:\n // https://github.com/lit/lit/pull/4183#issuecomment-1711959635\n const elementProperties = (this.constructor as typeof ReactiveElement)\n .elementProperties;\n if (elementProperties.size > 0) {\n for (const [p, options] of elementProperties) {\n const {wrapped} = options;\n const value = this[p as keyof this];\n if (\n wrapped === true &&\n !this._$changedProperties.has(p) &&\n value !== undefined\n ) {\n this._$changeProperty(p, undefined, options, value);\n }\n }\n }\n }\n let shouldUpdate = false;\n const changedProperties = this._$changedProperties;\n try {\n shouldUpdate = this.shouldUpdate(changedProperties);\n if (shouldUpdate) {\n this.willUpdate(changedProperties);\n this.__controllers?.forEach((c) => c.hostUpdate?.());\n this.update(changedProperties);\n } else {\n this.__markUpdated();\n }\n } catch (e) {\n // Prevent `firstUpdated` and `updated` from running when there's an\n // update exception.\n shouldUpdate = false;\n // Ensure element can accept additional updates after an exception.\n this.__markUpdated();\n throw e;\n }\n // The update is no longer considered pending and further updates are now allowed.\n if (shouldUpdate) {\n this._$didUpdate(changedProperties);\n }\n }\n\n /**\n * Invoked before `update()` to compute values needed during the update.\n *\n * Implement `willUpdate` to compute property values that depend on other\n * properties and are used in the rest of the update process.\n *\n * ```ts\n * willUpdate(changedProperties) {\n * // only need to check changed properties for an expensive computation.\n * if (changedProperties.has('firstName') || changedProperties.has('lastName')) {\n * this.sha = computeSHA(`${this.firstName} ${this.lastName}`);\n * }\n * }\n *\n * render() {\n * return html`SHA: ${this.sha}`;\n * }\n * ```\n *\n * @category updates\n */\n protected willUpdate(_changedProperties: PropertyValues): void {}\n\n // Note, this is an override point for polyfill-support.\n // @internal\n _$didUpdate(changedProperties: PropertyValues) {\n this.__controllers?.forEach((c) => c.hostUpdated?.());\n if (!this.hasUpdated) {\n this.hasUpdated = true;\n this.firstUpdated(changedProperties);\n }\n this.updated(changedProperties);\n if (\n DEV_MODE &&\n this.isUpdatePending &&\n (this.constructor as typeof ReactiveElement).enabledWarnings!.includes(\n 'change-in-update'\n )\n ) {\n issueWarning(\n 'change-in-update',\n `Element ${this.localName} scheduled an update ` +\n `(generally because a property was set) ` +\n `after an update completed, causing a new update to be scheduled. ` +\n `This is inefficient and should be avoided unless the next update ` +\n `can only be scheduled as a side effect of the previous update.`\n );\n }\n }\n\n private __markUpdated() {\n this._$changedProperties = new Map();\n this.isUpdatePending = false;\n }\n\n /**\n * Returns a Promise that resolves when the element has completed updating.\n * The Promise value is a boolean that is `true` if the element completed the\n * update without triggering another update. The Promise result is `false` if\n * a property was set inside `updated()`. If the Promise is rejected, an\n * exception was thrown during the update.\n *\n * To await additional asynchronous work, override the `getUpdateComplete`\n * method. For example, it is sometimes useful to await a rendered element\n * before fulfilling this Promise. To do this, first await\n * `super.getUpdateComplete()`, then any subsequent state.\n *\n * @return A promise of a boolean that resolves to true if the update completed\n * without triggering another update.\n * @category updates\n */\n get updateComplete(): Promise<boolean> {\n return this.getUpdateComplete();\n }\n\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * ```ts\n * class MyElement extends LitElement {\n * override async getUpdateComplete() {\n * const result = await super.getUpdateComplete();\n * await this._myChild.updateComplete;\n * return result;\n * }\n * }\n * ```\n *\n * @return A promise of a boolean that resolves to true if the update completed\n * without triggering another update.\n * @category updates\n */\n protected getUpdateComplete(): Promise<boolean> {\n return this.__updatePromise;\n }\n\n /**\n * Controls whether or not `update()` should be called when the element requests\n * an update. By default, this method always returns `true`, but this can be\n * customized to control when to update.\n *\n * @param _changedProperties Map of changed properties with old values\n * @category updates\n */\n protected shouldUpdate(_changedProperties: PropertyValues): boolean {\n return true;\n }\n\n /**\n * Updates the element. This method reflects property values to attributes.\n * It can be overridden to render and keep updated element DOM.\n * Setting properties inside this method will *not* trigger\n * another update.\n *\n * @param _changedProperties Map of changed properties with old values\n * @category updates\n */\n protected update(_changedProperties: PropertyValues) {\n // The forEach() expression will only run when __reflectingProperties is\n // defined, and it returns undefined, setting __reflectingProperties to\n // undefined\n this.__reflectingProperties &&= this.__reflectingProperties.forEach((p) =>\n this.__propertyToAttribute(p, this[p as keyof this])\n ) as undefined;\n this.__markUpdated();\n }\n\n /**\n * Invoked whenever the element is updated. Implement to perform\n * post-updating tasks via DOM APIs, for example, focusing an element.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n * @category updates\n */\n protected updated(_changedProperties: PropertyValues) {}\n\n /**\n * Invoked when the element is first updated. Implement to perform one time\n * work on the element after update.\n *\n * ```ts\n * firstUpdated() {\n * this.renderRoot.getElementById('my-text-area').focus();\n * }\n * ```\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n * @category updates\n */\n protected firstUpdated(_changedProperties: PropertyValues) {}\n}\n// Assigned here to work around a jscompiler bug with static fields\n// when compiling to ES5.\n// https://github.com/google/closure-compiler/issues/3177\n(ReactiveElement as unknown as Record<string, unknown>)[\n JSCompiler_renameProperty('elementProperties', ReactiveElement)\n] = new Map();\n(ReactiveElement as unknown as Record<string, unknown>)[\n JSCompiler_renameProperty('finalized', ReactiveElement)\n] = new Map();\n\n// Apply polyfills if available\npolyfillSupport?.({ReactiveElement});\n\n// Dev mode warnings...\nif (DEV_MODE) {\n // Default warning set.\n ReactiveElement.enabledWarnings = [\n 'change-in-update',\n 'async-perform-update',\n ];\n const ensureOwnWarnings = function (ctor: typeof ReactiveElement) {\n if (\n !ctor.hasOwnProperty(JSCompiler_renameProperty('enabledWarnings', ctor))\n ) {\n ctor.enabledWarnings = ctor.enabledWarnings!.slice();\n }\n };\n ReactiveElement.enableWarning = function (\n this: typeof ReactiveElement,\n warning: WarningKind\n ) {\n ensureOwnWarnings(this);\n if (!this.enabledWarnings!.includes(warning)) {\n this.enabledWarnings!.push(warning);\n }\n };\n ReactiveElement.disableWarning = function (\n this: typeof ReactiveElement,\n warning: WarningKind\n ) {\n ensureOwnWarnings(this);\n const i = this.enabledWarnings!.indexOf(warning);\n if (i >= 0) {\n this.enabledWarnings!.splice(i, 1);\n }\n };\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for ReactiveElement usage.\n(global.reactiveElementVersions ??= []).push('2.1.1');\nif (DEV_MODE && global.reactiveElementVersions.length > 1) {\n queueMicrotask(() => {\n issueWarning!(\n 'multiple-versions',\n `Multiple versions of Lit loaded. Loading multiple versions ` +\n `is not recommended.`\n );\n });\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n// IMPORTANT: these imports must be type-only\nimport type {Directive, DirectiveResult, PartInfo} from './directive.js';\nimport type {TrustedHTML, TrustedTypesWindow} from 'trusted-types/lib/index.js';\n\nconst DEV_MODE = true;\nconst ENABLE_EXTRA_SECURITY_HOOKS = true;\nconst ENABLE_SHADYDOM_NOPATCH = true;\nconst NODE_MODE = false;\n\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LitUnstable {\n /**\n * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n * we will emit 'lit-debug' events to window, with live details about the update and render\n * lifecycle. These can be useful for writing debug tooling and visualizations.\n *\n * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n * making certain operations that are normally very cheap (like a no-op render) much slower,\n * because we must copy data and dispatch events.\n */\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace DebugLog {\n export type Entry =\n | TemplatePrep\n | TemplateInstantiated\n | TemplateInstantiatedAndUpdated\n | TemplateUpdating\n | BeginRender\n | EndRender\n | CommitPartEntry\n | SetPartValue;\n export interface TemplatePrep {\n kind: 'template prep';\n template: Template;\n strings: TemplateStringsArray;\n clonableTemplate: HTMLTemplateElement;\n parts: TemplatePart[];\n }\n export interface BeginRender {\n kind: 'begin render';\n id: number;\n value: unknown;\n container: HTMLElement | DocumentFragment;\n options: RenderOptions | undefined;\n part: ChildPart | undefined;\n }\n export interface EndRender {\n kind: 'end render';\n id: number;\n value: unknown;\n container: HTMLElement | DocumentFragment;\n options: RenderOptions | undefined;\n part: ChildPart;\n }\n export interface TemplateInstantiated {\n kind: 'template instantiated';\n template: Template | CompiledTemplate;\n instance: TemplateInstance;\n options: RenderOptions | undefined;\n fragment: Node;\n parts: Array<Part | undefined>;\n values: unknown[];\n }\n export interface TemplateInstantiatedAndUpdated {\n kind: 'template instantiated and updated';\n template: Template | CompiledTemplate;\n instance: TemplateInstance;\n options: RenderOptions | undefined;\n fragment: Node;\n parts: Array<Part | undefined>;\n values: unknown[];\n }\n export interface TemplateUpdating {\n kind: 'template updating';\n template: Template | CompiledTemplate;\n instance: TemplateInstance;\n options: RenderOptions | undefined;\n parts: Array<Part | undefined>;\n values: unknown[];\n }\n export interface SetPartValue {\n kind: 'set part';\n part: Part;\n value: unknown;\n valueIndex: number;\n values: unknown[];\n templateInstance: TemplateInstance;\n }\n\n export type CommitPartEntry =\n | CommitNothingToChildEntry\n | CommitText\n | CommitNode\n | CommitAttribute\n | CommitProperty\n | CommitBooleanAttribute\n | CommitEventListener\n | CommitToElementBinding;\n\n export interface CommitNothingToChildEntry {\n kind: 'commit nothing to child';\n start: ChildNode;\n end: ChildNode | null;\n parent: Disconnectable | undefined;\n options: RenderOptions | undefined;\n }\n\n export interface CommitText {\n kind: 'commit text';\n node: Text;\n value: unknown;\n options: RenderOptions | undefined;\n }\n\n export interface CommitNode {\n kind: 'commit node';\n start: Node;\n parent: Disconnectable | undefined;\n value: Node;\n options: RenderOptions | undefined;\n }\n\n export interface CommitAttribute {\n kind: 'commit attribute';\n element: Element;\n name: string;\n value: unknown;\n options: RenderOptions | undefined;\n }\n\n export interface CommitProperty {\n kind: 'commit property';\n element: Element;\n name: string;\n value: unknown;\n options: RenderOptions | undefined;\n }\n\n export interface CommitBooleanAttribute {\n kind: 'commit boolean attribute';\n element: Element;\n name: string;\n value: boolean;\n options: RenderOptions | undefined;\n }\n\n export interface CommitEventListener {\n kind: 'commit event listener';\n element: Element;\n name: string;\n value: unknown;\n oldListener: unknown;\n options: RenderOptions | undefined;\n // True if we're removing the old event listener (e.g. because settings changed, or value is nothing)\n removeListener: boolean;\n // True if we're adding a new event listener (e.g. because first render, or settings changed)\n addListener: boolean;\n }\n\n export interface CommitToElementBinding {\n kind: 'commit to element binding';\n element: Element;\n value: unknown;\n options: RenderOptions | undefined;\n }\n }\n}\n\ninterface DebugLoggingWindow {\n // Even in dev mode, we generally don't want to emit these events, as that's\n // another level of cost, so only emit them when DEV_MODE is true _and_ when\n // window.emitLitDebugEvents is true.\n emitLitDebugLogEvents?: boolean;\n}\n\n/**\n * Useful for visualizing and logging insights into what the Lit template system is doing.\n *\n * Compiled out of prod mode builds.\n */\nconst debugLogEvent = DEV_MODE\n ? (event: LitUnstable.DebugLog.Entry) => {\n const shouldEmit = (global as unknown as DebugLoggingWindow)\n .emitLitDebugLogEvents;\n if (!shouldEmit) {\n return;\n }\n global.dispatchEvent(\n new CustomEvent<LitUnstable.DebugLog.Entry>('lit-debug', {\n detail: event,\n })\n );\n }\n : undefined;\n// Used for connecting beginRender and endRender events when there are nested\n// renders when errors are thrown preventing an endRender event from being\n// called.\nlet debugLogRenderId = 0;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n global.litIssuedWarnings ??= new Set();\n\n /**\n * Issue a warning if we haven't already, based either on `code` or `warning`.\n * Warnings are disabled automatically only by `warning`; disabling via `code`\n * can be done by users.\n */\n issueWarning = (code: string, warning: string) => {\n warning += code\n ? ` See https://lit.dev/msg/${code} for more information.`\n : '';\n if (\n !global.litIssuedWarnings!.has(warning) &&\n !global.litIssuedWarnings!.has(code)\n ) {\n console.warn(warning);\n global.litIssuedWarnings!.add(warning);\n }\n };\n\n queueMicrotask(() => {\n issueWarning(\n 'dev-mode',\n `Lit is in dev mode. Not recommended for production!`\n );\n });\n}\n\nconst wrap =\n ENABLE_SHADYDOM_NOPATCH &&\n global.ShadyDOM?.inUse &&\n global.ShadyDOM?.noPatch === true\n ? (global.ShadyDOM!.wrap as <T extends Node>(node: T) => T)\n : <T extends Node>(node: T) => node;\n\nconst trustedTypes = (global as unknown as TrustedTypesWindow).trustedTypes;\n\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = trustedTypes\n ? trustedTypes.createPolicy('lit-html', {\n createHTML: (s) => s,\n })\n : undefined;\n\n/**\n * Used to sanitize any value before it is written into the DOM. This can be\n * used to implement a security policy of allowed and disallowed values in\n * order to prevent XSS attacks.\n *\n * One way of using this callback would be to check attributes and properties\n * against a list of high risk fields, and require that values written to such\n * fields be instances of a class which is safe by construction. Closure's Safe\n * HTML Types is one implementation of this technique (\n * https://github.com/google/safe-html-types/blob/master/doc/safehtml-types.md).\n * The TrustedTypes polyfill in API-only mode could also be used as a basis\n * for this technique (https://github.com/WICG/trusted-types).\n *\n * @param node The HTML node (usually either a #text node or an Element) that\n * is being written to. Note that this is just an exemplar node, the write\n * may take place against another instance of the same class of node.\n * @param name The name of an attribute or property (for example, 'href').\n * @param type Indicates whether the write that's about to be performed will\n * be to a property or a node.\n * @return A function that will sanitize this class of writes.\n */\nexport type SanitizerFactory = (\n node: Node,\n name: string,\n type: 'property' | 'attribute'\n) => ValueSanitizer;\n\n/**\n * A function which can sanitize values that will be written to a specific kind\n * of DOM sink.\n *\n * See SanitizerFactory.\n *\n * @param value The value to sanitize. Will be the actual value passed into\n * the lit-html template literal, so this could be of any type.\n * @return The value to write to the DOM. Usually the same as the input value,\n * unless sanitization is needed.\n */\nexport type ValueSanitizer = (value: unknown) => unknown;\n\nconst identityFunction: ValueSanitizer = (value: unknown) => value;\nconst noopSanitizer: SanitizerFactory = (\n _node: Node,\n _name: string,\n _type: 'property' | 'attribute'\n) => identityFunction;\n\n/** Sets the global sanitizer factory. */\nconst setSanitizer = (newSanitizer: SanitizerFactory) => {\n if (!ENABLE_EXTRA_SECURITY_HOOKS) {\n return;\n }\n if (sanitizerFactoryInternal !== noopSanitizer) {\n throw new Error(\n `Attempted to overwrite existing lit-html security policy.` +\n ` setSanitizeDOMValueFactory should be called at most once.`\n );\n }\n sanitizerFactoryInternal = newSanitizer;\n};\n\n/**\n * Only used in internal tests, not a part of the public API.\n */\nconst _testOnlyClearSanitizerFactoryDoNotCallOrElse = () => {\n sanitizerFactoryInternal = noopSanitizer;\n};\n\nconst createSanitizer: SanitizerFactory = (node, name, type) => {\n return sanitizerFactoryInternal(node, name, type);\n};\n\n// Added to an attribute name to mark the attribute as bound so we can find\n// it easily.\nconst boundAttributeSuffix = '$lit$';\n\n// This marker is used in many syntactic positions in HTML, so it must be\n// a valid element name and attribute name. We don't support dynamic names (yet)\n// but this at least ensures that the parse tree is closer to the template\n// intention.\nconst marker = `lit$${Math.random().toFixed(9).slice(2)}$`;\n\n// String used to tell if a comment is a marker comment\nconst markerMatch = '?' + marker;\n\n// Text used to insert a comment marker node. We use processing instruction\n// syntax because it's slightly smaller, but parses as a comment node.\nconst nodeMarker = `<${markerMatch}>`;\n\nconst d =\n NODE_MODE && global.document === undefined\n ? ({\n createTreeWalker() {\n return {};\n },\n } as unknown as Document)\n : document;\n\n// Creates a dynamic marker. We never have to search for these in the DOM.\nconst createMarker = () => d.createComment('');\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\ntype Primitive = null | undefined | boolean | number | string | symbol | bigint;\nconst isPrimitive = (value: unknown): value is Primitive =>\n value === null || (typeof value != 'object' && typeof value != 'function');\nconst isArray = Array.isArray;\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (value as any)?.[Symbol.iterator] === 'function';\n\nconst SPACE_CHAR = `[ \\t\\n\\f\\r]`;\nconst ATTR_VALUE_CHAR = `[^ \\t\\n\\f\\r\"'\\`<>=]`;\nconst NAME_CHAR = `[^\\\\s\"'>=/]`;\n\n// These regexes represent the five parsing states that we care about in the\n// Template's HTML scanner. They match the *end* of the state they're named\n// after.\n// Depending on the match, we transition to a new state. If there's no match,\n// we stay in the same state.\n// Note that the regexes are stateful. We utilize lastIndex and sync it\n// across the multiple regexes used. In addition to the five regexes below\n// we also dynamically create a regex to find the matching end tags for raw\n// text elements.\n\n/**\n * End of text is: `<` followed by:\n * (comment start) or (tag) or (dynamic tag binding)\n */\nconst textEndRegex = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nconst COMMENT_START = 1;\nconst TAG_NAME = 2;\nconst DYNAMIC_TAG_NAME = 3;\n\nconst commentEndRegex = /-->/g;\n/**\n * Comments not started with <!--, like </{, can be ended by a single `>`\n */\nconst comment2EndRegex = />/g;\n\n/**\n * The tagEnd regex matches the end of the \"inside an opening\" tag syntax\n * position. It either matches a `>`, an attribute-like sequence, or the end\n * of the string after a space (attribute-name position ending).\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\t\\n\\f\\r\" are HTML space characters:\n * https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * So an attribute is:\n * * The name: any character except a whitespace character, (\"), ('), \">\",\n * \"=\", or \"/\". Note: this is different from the HTML spec which also excludes control characters.\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nconst tagEndRegex = new RegExp(\n `>|${SPACE_CHAR}(?:(${NAME_CHAR}+)(${SPACE_CHAR}*=${SPACE_CHAR}*(?:${ATTR_VALUE_CHAR}|(\"|')|))|$)`,\n 'g'\n);\nconst ENTIRE_MATCH = 0;\nconst ATTRIBUTE_NAME = 1;\nconst SPACES_AND_EQUALS = 2;\nconst QUOTE_CHAR = 3;\n\nconst singleQuoteAttrEndRegex = /'/g;\nconst doubleQuoteAttrEndRegex = /\"/g;\n/**\n * Matches the raw text elements.\n *\n * Comments are not parsed within raw text elements, so we need to search their\n * text content for marker strings.\n */\nconst rawTextElement = /^(?:script|style|textarea|title)$/i;\n\n/** TemplateResult types */\nconst HTML_RESULT = 1;\nconst SVG_RESULT = 2;\nconst MATHML_RESULT = 3;\n\ntype ResultType = typeof HTML_RESULT | typeof SVG_RESULT | typeof MATHML_RESULT;\n\n// TemplatePart types\n// IMPORTANT: these must match the values in PartType\nconst ATTRIBUTE_PART = 1;\nconst CHILD_PART = 2;\nconst PROPERTY_PART = 3;\nconst BOOLEAN_ATTRIBUTE_PART = 4;\nconst EVENT_PART = 5;\nconst ELEMENT_PART = 6;\nconst COMMENT_PART = 7;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg} when it hasn't been compiled by @lit-labs/compiler.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n */\nexport type UncompiledTemplateResult<T extends ResultType = ResultType> = {\n // This property needs to remain unminified.\n ['_$litType$']: T;\n strings: TemplateStringsArray;\n values: unknown[];\n};\n\n/**\n * This is a template result that may be either uncompiled or compiled.\n *\n * In the future, TemplateResult will be this type. If you want to explicitly\n * note that a template result is potentially compiled, you can reference this\n * type and it will continue to behave the same through the next major version\n * of Lit. This can be useful for code that wants to prepare for the next\n * major version of Lit.\n */\nexport type MaybeCompiledTemplateResult<T extends ResultType = ResultType> =\n | UncompiledTemplateResult<T>\n | CompiledTemplateResult;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg}.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n * In Lit 4, this type will be an alias of\n * MaybeCompiledTemplateResult, so that code will get type errors if it assumes\n * that Lit templates are not compiled. When deliberately working with only\n * one, use either {@linkcode CompiledTemplateResult} or\n * {@linkcode UncompiledTemplateResult} explicitly.\n */\nexport type TemplateResult<T extends ResultType = ResultType> =\n UncompiledTemplateResult<T>;\n\nexport type HTMLTemplateResult = TemplateResult<typeof HTML_RESULT>;\n\nexport type SVGTemplateResult = TemplateResult<typeof SVG_RESULT>;\n\nexport type MathMLTemplateResult = TemplateResult<typeof MATHML_RESULT>;\n\n/**\n * A TemplateResult that has been compiled by @lit-labs/compiler, skipping the\n * prepare step.\n */\nexport interface CompiledTemplateResult {\n // This is a factory in order to make template initialization lazy\n // and allow ShadyRenderOptions scope to be passed in.\n // This property needs to remain unminified.\n ['_$litType$']: CompiledTemplate;\n values: unknown[];\n}\n\nexport interface CompiledTemplate extends Omit<Template, 'el'> {\n // el is overridden to be optional. We initialize it on first render\n el?: HTMLTemplateElement;\n\n // The prepared HTML string to create a template element from.\n // The type is a TemplateStringsArray to guarantee that the value came from\n // source code, preventing a JSON injection attack.\n h: TemplateStringsArray;\n}\n\n/**\n * Generates a template literal tag function that returns a TemplateResult with\n * the given result type.\n */\nconst tag =\n <T extends ResultType>(type: T) =>\n (strings: TemplateStringsArray, ...values: unknown[]): TemplateResult<T> => {\n // Warn against templates octal escape sequences\n // We do this here rather than in render so that the warning is closer to the\n // template definition.\n if (DEV_MODE && strings.some((s) => s === undefined)) {\n console.warn(\n 'Some template strings are undefined.\\n' +\n 'This is probably caused by illegal octal escape sequences.'\n );\n }\n if (DEV_MODE) {\n // Import static-html.js results in a circular dependency which g3 doesn't\n // handle. Instead we know that static values must have the field\n // `_$litStatic$`.\n if (\n values.some((val) => (val as {_$litStatic$: unknown})?.['_$litStatic$'])\n ) {\n issueWarning(\n '',\n `Static values 'literal' or 'unsafeStatic' cannot be used as values to non-static templates.\\n` +\n `Please use the static 'html' tag function. See https://lit.dev/docs/templates/expressions/#static-expressions`\n );\n }\n }\n return {\n // This property needs to remain unminified.\n ['_$litType$']: type,\n strings,\n values,\n };\n };\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n *\n * ```ts\n * const header = (title: string) => html`<h1>${title}</h1>`;\n * ```\n *\n * The `html` tag returns a description of the DOM to render as a value. It is\n * lazy, meaning no work is done until the template is rendered. When rendering,\n * if a template comes from the same expression as a previously rendered result,\n * it's efficiently updated instead of replaced.\n */\nexport const html = tag(HTML_RESULT);\n\n/**\n * Interprets a template literal as an SVG fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const rect = svg`<rect width=\"10\" height=\"10\"></rect>`;\n *\n * const myImage = html`\n * <svg viewBox=\"0 0 10 10\" xmlns=\"http://www.w3.org/2000/svg\">\n * ${rect}\n * </svg>`;\n * ```\n *\n * The `svg` *tag function* should only be used for SVG fragments, or elements\n * that would be contained **inside** an `<svg>` HTML element. A common error is\n * placing an `<svg>` *element* in a template tagged with the `svg` tag\n * function. The `<svg>` element is an HTML element and should be used within a\n * template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an SVG fragment from the\n * `render()` method, as the SVG fragment will be contained within the element's\n * shadow root and thus not be properly contained within an `<svg>` HTML\n * element.\n */\nexport const svg = tag(SVG_RESULT);\n\n/**\n * Interprets a template literal as MathML fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const num = mathml`<mn>1</mn>`;\n *\n * const eq = html`\n * <math>\n * ${num}\n * </math>`;\n * ```\n *\n * The `mathml` *tag function* should only be used for MathML fragments, or\n * elements that would be contained **inside** a `<math>` HTML element. A common\n * error is placing a `<math>` *element* in a template tagged with the `mathml`\n * tag function. The `<math>` element is an HTML element and should be used\n * within a template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an MathML fragment from the\n * `render()` method, as the MathML fragment will be contained within the\n * element's shadow root and thus not be properly contained within a `<math>`\n * HTML element.\n */\nexport const mathml = tag(MATHML_RESULT);\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = Symbol.for('lit-noChange');\n\n/**\n * A sentinel value that signals a ChildPart to fully clear its content.\n *\n * ```ts\n * const button = html`${\n * user.isAdmin\n * ? html`<button>DELETE</button>`\n * : nothing\n * }`;\n * ```\n *\n * Prefer using `nothing` over other falsy values as it provides a consistent\n * behavior between various expression binding contexts.\n *\n * In child expressions, `undefined`, `null`, `''`, and `nothing` all behave the\n * same and render no nodes. In attribute expressions, `nothing` _removes_ the\n * attribute, while `undefined` and `null` will render an empty string. In\n * property expressions `nothing` becomes `undefined`.\n */\nexport const nothing = Symbol.for('lit-nothing');\n\n/**\n * The cache of prepared templates, keyed by the tagged TemplateStringsArray\n * and _not_ accounting for the specific template tag used. This means that\n * template tags cannot be dynamic - they must statically be one of html, svg,\n * or attr. This restriction simplifies the cache lookup, which is on the hot\n * path for rendering.\n */\nconst templateCache = new WeakMap<TemplateStringsArray, Template>();\n\n/**\n * Object specifying options for controlling lit-html rendering. Note that\n * while `render` may be called multiple times on the same `container` (and\n * `renderBefore` reference node) to efficiently update the rendered content,\n * only the options passed in during the first render are respected during\n * the lifetime of renders to that unique `container` + `renderBefore`\n * combination.\n */\nexport interface RenderOptions {\n /**\n * An object to use as the `this` value for event listeners. It's often\n * useful to set this to the host component rendering a template.\n */\n host?: object;\n /**\n * A DOM node before which to render content in the container.\n */\n renderBefore?: ChildNode | null;\n /**\n * Node used for cloning the template (`importNode` will be called on this\n * node). This controls the `ownerDocument` of the rendered DOM, along with\n * any inherited context. Defaults to the global `document`.\n */\n creationScope?: {importNode(node: Node, deep?: boolean): Node};\n /**\n * The initial connected state for the top-level part being rendered. If no\n * `isConnected` option is set, `AsyncDirective`s will be connected by\n * default. Set to `false` if the initial render occurs in a disconnected tree\n * and `AsyncDirective`s should see `isConnected === false` for their initial\n * render. The `part.setConnected()` method must be used subsequent to initial\n * render to change the connected state of the part.\n */\n isConnected?: boolean;\n}\n\nconst walker = d.createTreeWalker(\n d,\n 129 /* NodeFilter.SHOW_{ELEMENT|COMMENT} */\n);\n\nlet sanitizerFactoryInternal: SanitizerFactory = noopSanitizer;\n\n//\n// Classes only below here, const variable declarations only above here...\n//\n// Keeping variable declarations and classes together improves minification.\n// Interfaces and type aliases can be interleaved freely.\n//\n\n// Type for classes that have a `_directive` or `_directives[]` field, used by\n// `resolveDirective`\nexport interface DirectiveParent {\n _$parent?: DirectiveParent;\n _$isConnected: boolean;\n __directive?: Directive;\n __directives?: Array<Directive | undefined>;\n}\n\nfunction trustFromTemplateString(\n tsa: TemplateStringsArray,\n stringFromTSA: string\n): TrustedHTML {\n // A security check to prevent spoofing of Lit template results.\n // In the future, we may be able to replace this with Array.isTemplateObject,\n // though we might need to make that check inside of the html and svg\n // functions, because precompiled templates don't come in as\n // TemplateStringArray objects.\n if (!isArray(tsa) || !tsa.hasOwnProperty('raw')) {\n let message = 'invalid template strings array';\n if (DEV_MODE) {\n message = `\n Internal Error: expected template strings to be an array\n with a 'raw' field. Faking a template strings array by\n calling html or svg like an ordinary function is effectively\n the same as calling unsafeHtml and can lead to major security\n issues, e.g. opening your code up to XSS attacks.\n If you're using the html or svg tagged template functions normally\n and still seeing this error, please file a bug at\n https://github.com/lit/lit/issues/new?template=bug_report.md\n and include information about your build tooling, if any.\n `\n .trim()\n .replace(/\\n */g, '\\n');\n }\n throw new Error(message);\n }\n return policy !== undefined\n ? policy.createHTML(stringFromTSA)\n : (stringFromTSA as unknown as TrustedHTML);\n}\n\n/**\n * Returns an HTML string for the given TemplateStringsArray and result type\n * (HTML or SVG), along with the case-sensitive bound attribute names in\n * template order. The HTML contains comment markers denoting the `ChildPart`s\n * and suffixes on bound attributes denoting the `AttributeParts`.\n *\n * @param strings template strings array\n * @param type HTML or SVG\n * @return Array containing `[html, attrNames]` (array returned for terseness,\n * to avoid object fields since this code is shared with non-minified SSR\n * code)\n */\nconst getTemplateHtml = (\n strings: TemplateStringsArray,\n type: ResultType\n): [TrustedHTML, Array<string>] => {\n // Insert makers into the template HTML to represent the position of\n // bindings. The following code scans the template strings to determine the\n // syntactic position of the bindings. They can be in text position, where\n // we insert an HTML comment, attribute value position, where we insert a\n // sentinel string and re-write the attribute name, or inside a tag where\n // we insert the sentinel string.\n const l = strings.length - 1;\n // Stores the case-sensitive bound attribute names in the order of their\n // parts. ElementParts are also reflected in this array as undefined\n // rather than a string, to disambiguate from attribute bindings.\n const attrNames: Array<string> = [];\n let html =\n type === SVG_RESULT ? '<svg>' : type === MATHML_RESULT ? '<math>' : '';\n\n // When we're inside a raw text tag (not it's text content), the regex\n // will still be tagRegex so we can find attributes, but will switch to\n // this regex when the tag ends.\n let rawTextEndRegex: RegExp | undefined;\n\n // The current parsing state, represented as a reference to one of the\n // regexes\n let regex = textEndRegex;\n\n for (let i = 0; i < l; i++) {\n const s = strings[i];\n // The index of the end of the last attribute name. When this is\n // positive at end of a string, it means we're in an attribute value\n // position and need to rewrite the attribute name.\n // We also use a special value of -2 to indicate that we encountered\n // the end of a string in attribute name position.\n let attrNameEndIndex = -1;\n let attrName: string | undefined;\n let lastIndex = 0;\n let match!: RegExpExecArray | null;\n\n // The conditions in this loop handle the current parse state, and the\n // assignments to the `regex` variable are the state transitions.\n while (lastIndex < s.length) {\n // Make sure we start searching from where we previously left off\n regex.lastIndex = lastIndex;\n match = regex.exec(s);\n if (match === null) {\n break;\n }\n lastIndex = regex.lastIndex;\n if (regex === textEndRegex) {\n if (match[COMMENT_START] === '!--') {\n regex = commentEndRegex;\n } else if (match[COMMENT_START] !== undefined) {\n // We started a weird comment, like </{\n regex = comment2EndRegex;\n } else if (match[TAG_NAME] !== undefined) {\n if (rawTextElement.test(match[TAG_NAME])) {\n // Record if we encounter a raw-text element. We'll switch to\n // this regex at the end of the tag.\n rawTextEndRegex = new RegExp(`</${match[TAG_NAME]}`, 'g');\n }\n regex = tagEndRegex;\n } else if (match[DYNAMIC_TAG_NAME] !== undefined) {\n if (DEV_MODE) {\n throw new Error(\n 'Bindings in tag names are not supported. Please use static templates instead. ' +\n 'See https://lit.dev/docs/templates/expressions/#static-expressions'\n );\n }\n regex = tagEndRegex;\n }\n } else if (regex === tagEndRegex) {\n if (match[ENTIRE_MATCH] === '>') {\n // End of a tag. If we had started a raw-text element, use that\n // regex\n regex = rawTextEndRegex ?? textEndRegex;\n // We may be ending an unquoted attribute value, so make sure we\n // clear any pending attrNameEndIndex\n attrNameEndIndex = -1;\n } else if (match[ATTRIBUTE_NAME] === undefined) {\n // Attribute name position\n attrNameEndIndex = -2;\n } else {\n attrNameEndIndex = regex.lastIndex - match[SPACES_AND_EQUALS].length;\n attrName = match[ATTRIBUTE_NAME];\n regex =\n match[QUOTE_CHAR] === undefined\n ? tagEndRegex\n : match[QUOTE_CHAR] === '\"'\n ? doubleQuoteAttrEndRegex\n : singleQuoteAttrEndRegex;\n }\n } else if (\n regex === doubleQuoteAttrEndRegex ||\n regex === singleQuoteAttrEndRegex\n ) {\n regex = tagEndRegex;\n } else if (regex === commentEndRegex || regex === comment2EndRegex) {\n regex = textEndRegex;\n } else {\n // Not one of the five state regexes, so it must be the dynamically\n // created raw text regex and we're at the close of that element.\n regex = tagEndRegex;\n rawTextEndRegex = undefined;\n }\n }\n\n if (DEV_MODE) {\n // If we have a attrNameEndIndex, which indicates that we should\n // rewrite the attribute name, assert that we're in a valid attribute\n // position - either in a tag, or a quoted attribute value.\n console.assert(\n attrNameEndIndex === -1 ||\n regex === tagEndRegex ||\n regex === singleQuoteAttrEndRegex ||\n regex === doubleQuoteAttrEndRegex,\n 'unexpected parse state B'\n );\n }\n\n // We have four cases:\n // 1. We're in text position, and not in a raw text element\n // (regex === textEndRegex): insert a comment marker.\n // 2. We have a non-negative attrNameEndIndex which means we need to\n // rewrite the attribute name to add a bound attribute suffix.\n // 3. We're at the non-first binding in a multi-binding attribute, use a\n // plain marker.\n // 4. We're somewhere else inside the tag. If we're in attribute name\n // position (attrNameEndIndex === -2), add a sequential suffix to\n // generate a unique attribute name.\n\n // Detect a binding next to self-closing tag end and insert a space to\n // separate the marker from the tag end:\n const end =\n regex === tagEndRegex && strings[i + 1].startsWith('/>') ? ' ' : '';\n html +=\n regex === textEndRegex\n ? s + nodeMarker\n : attrNameEndIndex >= 0\n ? (attrNames.push(attrName!),\n s.slice(0, attrNameEndIndex) +\n boundAttributeSuffix +\n s.slice(attrNameEndIndex)) +\n marker +\n end\n : s + marker + (attrNameEndIndex === -2 ? i : end);\n }\n\n const htmlResult: string | TrustedHTML =\n html +\n (strings[l] || '<?>') +\n (type === SVG_RESULT ? '</svg>' : type === MATHML_RESULT ? '</math>' : '');\n\n // Returned as an array for terseness\n return [trustFromTemplateString(strings, htmlResult), attrNames];\n};\n\n/** @internal */\nexport type {Template};\nclass Template {\n /** @internal */\n el!: HTMLTemplateElement;\n\n parts: Array<TemplatePart> = [];\n\n constructor(\n // This property needs to remain unminified.\n {strings, ['_$litType$']: type}: UncompiledTemplateResult,\n options?: RenderOptions\n ) {\n let node: Node | null;\n let nodeIndex = 0;\n let attrNameIndex = 0;\n const partCount = strings.length - 1;\n const parts = this.parts;\n\n // Create template element\n const [html, attrNames] = getTemplateHtml(strings, type);\n this.el = Template.createElement(html, options);\n walker.currentNode = this.el.content;\n\n // Re-parent SVG or MathML nodes into template root\n if (type === SVG_RESULT || type === MATHML_RESULT) {\n const wrapper = this.el.content.firstChild!;\n wrapper.replaceWith(...wrapper.childNodes);\n }\n\n // Walk the template to find binding markers and create TemplateParts\n while ((node = walker.nextNode()) !== null && parts.length < partCount) {\n if (node.nodeType === 1) {\n if (DEV_MODE) {\n const tag = (node as Element).localName;\n // Warn if `textarea` includes an expression and throw if `template`\n // does since these are not supported. We do this by checking\n // innerHTML for anything that looks like a marker. This catches\n // cases like bindings in textarea there markers turn into text nodes.\n if (\n /^(?:textarea|template)$/i!.test(tag) &&\n (node as Element).innerHTML.includes(marker)\n ) {\n const m =\n `Expressions are not supported inside \\`${tag}\\` ` +\n `elements. See https://lit.dev/msg/expression-in-${tag} for more ` +\n `information.`;\n if (tag === 'template') {\n throw new Error(m);\n } else issueWarning('', m);\n }\n }\n // TODO (justinfagnani): for attempted dynamic tag names, we don't\n // increment the bindingIndex, and it'll be off by 1 in the element\n // and off by two after it.\n if ((node as Element).hasAttributes()) {\n for (const name of (node as Element).getAttributeNames()) {\n if (name.endsWith(boundAttributeSuffix)) {\n const realName = attrNames[attrNameIndex++];\n const value = (node as Element).getAttribute(name)!;\n const statics = value.split(marker);\n const m = /([.?@])?(.*)/.exec(realName)!;\n parts.push({\n type: ATTRIBUTE_PART,\n index: nodeIndex,\n name: m[2],\n strings: statics,\n ctor:\n m[1] === '.'\n ? PropertyPart\n : m[1] === '?'\n ? BooleanAttributePart\n : m[1] === '@'\n ? EventPart\n : AttributePart,\n });\n (node as Element).removeAttribute(name);\n } else if (name.startsWith(marker)) {\n parts.push({\n type: ELEMENT_PART,\n index: nodeIndex,\n });\n (node as Element).removeAttribute(name);\n }\n }\n }\n // TODO (justinfagnani): benchmark the regex against testing for each\n // of the 3 raw text element names.\n if (rawTextElement.test((node as Element).tagName)) {\n // For raw text elements we need to split the text content on\n // markers, create a Text node for each segment, and create\n // a TemplatePart for each marker.\n const strings = (node as Element).textContent!.split(marker);\n const lastIndex = strings.length - 1;\n if (lastIndex > 0) {\n (node as Element).textContent = trustedTypes\n ? (trustedTypes.emptyScript as unknown as '')\n : '';\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for child parts\n for (let i = 0; i < lastIndex; i++) {\n (node as Element).append(strings[i], createMarker());\n // Walk past the marker node we just added\n walker.nextNode();\n parts.push({type: CHILD_PART, index: ++nodeIndex});\n }\n // Note because this marker is added after the walker's current\n // node, it will be walked to in the outer loop (and ignored), so\n // we don't need to adjust nodeIndex here\n (node as Element).append(strings[lastIndex], createMarker());\n }\n }\n } else if (node.nodeType === 8) {\n const data = (node as Comment).data;\n if (data === markerMatch) {\n parts.push({type: CHILD_PART, index: nodeIndex});\n } else {\n let i = -1;\n while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n parts.push({type: COMMENT_PART, index: nodeIndex});\n // Move to the end of the match\n i += marker.length - 1;\n }\n }\n }\n nodeIndex++;\n }\n\n if (DEV_MODE) {\n // If there was a duplicate attribute on a tag, then when the tag is\n // parsed into an element the attribute gets de-duplicated. We can detect\n // this mismatch if we haven't precisely consumed every attribute name\n // when preparing the template. This works because `attrNames` is built\n // from the template string and `attrNameIndex` comes from processing the\n // resulting DOM.\n if (attrNames.length !== attrNameIndex) {\n throw new Error(\n `Detected duplicate attribute bindings. This occurs if your template ` +\n `has duplicate attributes on an element tag. For example ` +\n `\"<input ?disabled=\\${true} ?disabled=\\${false}>\" contains a ` +\n `duplicate \"disabled\" attribute. The error was detected in ` +\n `the following template: \\n` +\n '`' +\n strings.join('${...}') +\n '`'\n );\n }\n }\n\n // We could set walker.currentNode to another node here to prevent a memory\n // leak, but every time we prepare a template, we immediately render it\n // and re-use the walker in new TemplateInstance._clone().\n debugLogEvent &&\n debugLogEvent({\n kind: 'template prep',\n template: this,\n clonableTemplate: this.el,\n parts: this.parts,\n strings,\n });\n }\n\n // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n /** @nocollapse */\n static createElement(html: TrustedHTML, _options?: RenderOptions) {\n const el = d.createElement('template');\n el.innerHTML = html as unknown as string;\n return el;\n }\n}\n\nexport interface Disconnectable {\n _$parent?: Disconnectable;\n _$disconnectableChildren?: Set<Disconnectable>;\n // Rather than hold connection state on instances, Disconnectables recursively\n // fetch the connection state from the RootPart they are connected in via\n // getters up the Disconnectable tree via _$parent references. This pushes the\n // cost of tracking the isConnected state to `AsyncDirectives`, and avoids\n // needing to pass all Disconnectables (parts, template instances, and\n // directives) their connection state each time it changes, which would be\n // costly for trees that have no AsyncDirectives.\n _$isConnected: boolean;\n}\n\nfunction resolveDirective(\n part: ChildPart | AttributePart | ElementPart,\n value: unknown,\n parent: DirectiveParent = part,\n attributeIndex?: number\n): unknown {\n // Bail early if the value is explicitly noChange. Note, this means any\n // nested directive is still attached and is not run.\n if (value === noChange) {\n return value;\n }\n let currentDirective =\n attributeIndex !== undefined\n ? (parent as AttributePart).__directives?.[attributeIndex]\n : (parent as ChildPart | ElementPart | Directive).__directive;\n const nextDirectiveConstructor = isPrimitive(value)\n ? undefined\n : // This property needs to remain unminified.\n (value as DirectiveResult)['_$litDirective$'];\n if (currentDirective?.constructor !== nextDirectiveConstructor) {\n // This property needs to remain unminified.\n currentDirective?.['_$notifyDirectiveConnectionChanged']?.(false);\n if (nextDirectiveConstructor === undefined) {\n currentDirective = undefined;\n } else {\n currentDirective = new nextDirectiveConstructor(part as PartInfo);\n currentDirective._$initialize(part, parent, attributeIndex);\n }\n if (attributeIndex !== undefined) {\n ((parent as AttributePart).__directives ??= [])[attributeIndex] =\n currentDirective;\n } else {\n (parent as ChildPart | Directive).__directive = currentDirective;\n }\n }\n if (currentDirective !== undefined) {\n value = resolveDirective(\n part,\n currentDirective._$resolve(part, (value as DirectiveResult).values),\n currentDirective,\n attributeIndex\n );\n }\n return value;\n}\n\nexport type {TemplateInstance};\n/**\n * An updateable instance of a Template. Holds references to the Parts used to\n * update the template instance.\n */\nclass TemplateInstance implements Disconnectable {\n _$template: Template;\n _$parts: Array<Part | undefined> = [];\n\n /** @internal */\n _$parent: ChildPart;\n /** @internal */\n _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n constructor(template: Template, parent: ChildPart) {\n this._$template = template;\n this._$parent = parent;\n }\n\n // Called by ChildPart parentNode getter\n get parentNode() {\n return this._$parent.parentNode;\n }\n\n // See comment in Disconnectable interface for why this is a getter\n get _$isConnected() {\n return this._$parent._$isConnected;\n }\n\n // This method is separate from the constructor because we need to return a\n // DocumentFragment and we don't want to hold onto it with an instance field.\n _clone(options: RenderOptions | undefined) {\n const {\n el: {content},\n parts: parts,\n } = this._$template;\n const fragment = (options?.creationScope ?? d).importNode(content, true);\n walker.currentNode = fragment;\n\n let node = walker.nextNode()!;\n let nodeIndex = 0;\n let partIndex = 0;\n let templatePart = parts[0];\n\n while (templatePart !== undefined) {\n if (nodeIndex === templatePart.index) {\n let part: Part | undefined;\n if (templatePart.type === CHILD_PART) {\n part = new ChildPart(\n node as HTMLElement,\n node.nextSibling,\n this,\n options\n );\n } else if (templatePart.type === ATTRIBUTE_PART) {\n part = new templatePart.ctor(\n node as HTMLElement,\n templatePart.name,\n templatePart.strings,\n this,\n options\n );\n } else if (templatePart.type === ELEMENT_PART) {\n part = new ElementPart(node as HTMLElement, this, options);\n }\n this._$parts.push(part);\n templatePart = parts[++partIndex];\n }\n if (nodeIndex !== templatePart?.index) {\n node = walker.nextNode()!;\n nodeIndex++;\n }\n }\n // We need to set the currentNode away from the cloned tree so that we\n // don't hold onto the tree even if the tree is detached and should be\n // freed.\n walker.currentNode = d;\n return fragment;\n }\n\n _update(values: Array<unknown>) {\n let i = 0;\n for (const part of this._$parts) {\n if (part !== undefined) {\n debugLogEvent &&\n debugLogEvent({\n kind: 'set part',\n part,\n value: values[i],\n valueIndex: i,\n values,\n templateInstance: this,\n });\n if ((part as AttributePart).strings !== undefined) {\n (part as AttributePart)._$setValue(values, part as AttributePart, i);\n // The number of values the part consumes is part.strings.length - 1\n // since values are in between template spans. We increment i by 1\n // later in the loop, so increment it by part.strings.length - 2 here\n i += (part as AttributePart).strings!.length - 2;\n } else {\n part._$setValue(values[i]);\n }\n }\n i++;\n }\n }\n}\n\n/*\n * Parts\n */\ntype AttributeTemplatePart = {\n readonly type: typeof ATTRIBUTE_PART;\n readonly index: number;\n readonly name: string;\n readonly ctor: typeof AttributePart;\n readonly strings: ReadonlyArray<string>;\n};\ntype ChildTemplatePart = {\n readonly type: typeof CHILD_PART;\n readonly index: number;\n};\ntype ElementTemplatePart = {\n readonly type: typeof ELEMENT_PART;\n readonly index: number;\n};\ntype CommentTemplatePart = {\n readonly type: typeof COMMENT_PART;\n readonly index: number;\n};\n\n/**\n * A TemplatePart represents a dynamic part in a template, before the template\n * is instantiated. When a template is instantiated Parts are created from\n * TemplateParts.\n */\ntype TemplatePart =\n | ChildTemplatePart\n | AttributeTemplatePart\n | ElementTemplatePart\n | CommentTemplatePart;\n\nexport type Part =\n | ChildPart\n | AttributePart\n | PropertyPart\n | BooleanAttributePart\n | ElementPart\n | EventPart;\n\nexport type {ChildPart};\nclass ChildPart implements Disconnectable {\n readonly type = CHILD_PART;\n readonly options: RenderOptions | undefined;\n _$committedValue: unknown = nothing;\n /** @internal */\n __directive?: Directive;\n /** @internal */\n _$startNode: ChildNode;\n /** @internal */\n _$endNode: ChildNode | null;\n private _textSanitizer: ValueSanitizer | undefined;\n /** @internal */\n _$parent: Disconnectable | undefined;\n /**\n * Connection state for RootParts only (i.e. ChildPart without _$parent\n * returned from top-level `render`). This field is unused otherwise. The\n * intention would be clearer if we made `RootPart` a subclass of `ChildPart`\n * with this field (and a different _$isConnected getter), but the subclass\n * caused a perf regression, possibly due to making call sites polymorphic.\n * @internal\n */\n __isConnected: boolean;\n\n // See comment in Disconnectable interface for why this is a getter\n get _$isConnected() {\n // ChildParts that are not at the root should always be created with a\n // parent; only RootChildNode's won't, so they return the local isConnected\n // state\n return this._$parent?._$isConnected ?? this.__isConnected;\n }\n\n // The following fields will be patched onto ChildParts when required by\n // AsyncDirective\n /** @internal */\n _$disconnectableChildren?: Set<Disconnectable> = undefined;\n /** @internal */\n _$notifyConnectionChanged?(\n isConnected: boolean,\n removeFromParent?: boolean,\n from?: number\n ): void;\n /** @internal */\n _$reparentDisconnectables?(parent: Disconnectable): void;\n\n constructor(\n startNode: ChildNode,\n endNode: ChildNode | null,\n parent: TemplateInstance | ChildPart | undefined,\n options: RenderOptions | undefined\n ) {\n this._$startNode = startNode;\n this._$endNode = endNode;\n this._$parent = parent;\n this.options = options;\n // Note __isConnected is only ever accessed on RootParts (i.e. when there is\n // no _$parent); the value on a non-root-part is \"don't care\", but checking\n // for parent would be more code\n this.__isConnected = options?.isConnected ?? true;\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n // Explicitly initialize for consistent class shape.\n this._textSanitizer = undefined;\n }\n }\n\n /**\n * The parent node into which the part renders its content.\n *\n * A ChildPart's content consists of a range of adjacent child nodes of\n * `.parentNode`, possibly bordered by 'marker nodes' (`.startNode` and\n * `.endNode`).\n *\n * - If both `.startNode` and `.endNode` are non-null, then the part's content\n * consists of all siblings between `.startNode` and `.endNode`, exclusively.\n *\n * - If `.startNode` is non-null but `.endNode` is null, then the part's\n * content consists of all siblings following `.startNode`, up to and\n * including the last child of `.parentNode`. If `.endNode` is non-null, then\n * `.startNode` will always be non-null.\n *\n * - If both `.endNode` and `.startNode` are null, then the part's content\n * consists of all child nodes of `.parentNode`.\n */\n get parentNode(): Node {\n let parentNode: Node = wrap(this._$startNode).parentNode!;\n const parent = this._$parent;\n if (\n parent !== undefined &&\n parentNode?.nodeType === 11 /* Node.DOCUMENT_FRAGMENT */\n ) {\n // If the parentNode is a DocumentFragment, it may be because the DOM is\n // still in the cloned fragment during initial render; if so, get the real\n // parentNode the part will be committed into by asking the parent.\n parentNode = (parent as ChildPart | TemplateInstance).parentNode;\n }\n return parentNode;\n }\n\n /**\n * The part's leading marker node, if any. See `.parentNode` for more\n * information.\n */\n get startNode(): Node | null {\n return this._$startNode;\n }\n\n /**\n * The part's trailing marker node, if any. See `.parentNode` for more\n * information.\n */\n get endNode(): Node | null {\n return this._$endNode;\n }\n\n _$setValue(value: unknown, directiveParent: DirectiveParent = this): void {\n if (DEV_MODE && this.parentNode === null) {\n throw new Error(\n `This \\`ChildPart\\` has no \\`parentNode\\` and therefore cannot accept a value. This likely means the element containing the part was manipulated in an unsupported way outside of Lit's control such that the part's marker nodes were ejected from DOM. For example, setting the element's \\`innerHTML\\` or \\`textContent\\` can do this.`\n );\n }\n value = resolveDirective(this, value, directiveParent);\n if (isPrimitive(value)) {\n // Non-rendering child values. It's important that these do not render\n // empty text nodes to avoid issues with preventing default <slot>\n // fallback content.\n if (value === nothing || value == null || value === '') {\n if (this._$committedValue !== nothing) {\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit nothing to child',\n start: this._$startNode,\n end: this._$endNode,\n parent: this._$parent,\n options: this.options,\n });\n this._$clear();\n }\n this._$committedValue = nothing;\n } else if (value !== this._$committedValue && value !== noChange) {\n this._commitText(value);\n }\n // This property needs to remain unminified.\n } else if ((value as TemplateResult)['_$litType$'] !== undefined) {\n this._commitTemplateResult(value as TemplateResult);\n } else if ((value as Node).nodeType !== undefined) {\n if (DEV_MODE && this.options?.host === value) {\n this._commitText(\n `[probable mistake: rendered a template's host in itself ` +\n `(commonly caused by writing \\${this} in a template]`\n );\n console.warn(\n `Attempted to render the template host`,\n value,\n `inside itself. This is almost always a mistake, and in dev mode `,\n `we render some warning text. In production however, we'll `,\n `render it, which will usually result in an error, and sometimes `,\n `in the element disappearing from the DOM.`\n );\n return;\n }\n this._commitNode(value as Node);\n } else if (isIterable(value)) {\n this._commitIterable(value);\n } else {\n // Fallback, will render the string representation\n this._commitText(value);\n }\n }\n\n private _insert<T extends Node>(node: T) {\n return wrap(wrap(this._$startNode).parentNode!).insertBefore(\n node,\n this._$endNode\n );\n }\n\n private _commitNode(value: Node): void {\n if (this._$committedValue !== value) {\n this._$clear();\n if (\n ENABLE_EXTRA_SECURITY_HOOKS &&\n sanitizerFactoryInternal !== noopSanitizer\n ) {\n const parentNodeName = this._$startNode.parentNode?.nodeName;\n if (parentNodeName === 'STYLE' || parentNodeName === 'SCRIPT') {\n let message = 'Forbidden';\n if (DEV_MODE) {\n if (parentNodeName === 'STYLE') {\n message =\n `Lit does not support binding inside style nodes. ` +\n `This is a security risk, as style injection attacks can ` +\n `exfiltrate data and spoof UIs. ` +\n `Consider instead using css\\`...\\` literals ` +\n `to compose styles, and do dynamic styling with ` +\n `css custom properties, ::parts, <slot>s, ` +\n `and by mutating the DOM rather than stylesheets.`;\n } else {\n message =\n `Lit does not support binding inside script nodes. ` +\n `This is a security risk, as it could allow arbitrary ` +\n `code execution.`;\n }\n }\n throw new Error(message);\n }\n }\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit node',\n start: this._$startNode,\n parent: this._$parent,\n value: value,\n options: this.options,\n });\n this._$committedValue = this._insert(value);\n }\n }\n\n private _commitText(value: unknown): void {\n // If the committed value is a primitive it means we called _commitText on\n // the previous render, and we know that this._$startNode.nextSibling is a\n // Text node. We can now just replace the text content (.data) of the node.\n if (\n this._$committedValue !== nothing &&\n isPrimitive(this._$committedValue)\n ) {\n const node = wrap(this._$startNode).nextSibling as Text;\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n if (this._textSanitizer === undefined) {\n this._textSanitizer = createSanitizer(node, 'data', 'property');\n }\n value = this._textSanitizer(value);\n }\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit text',\n node,\n value,\n options: this.options,\n });\n (node as Text).data = value as string;\n } else {\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n const textNode = d.createTextNode('');\n this._commitNode(textNode);\n // When setting text content, for security purposes it matters a lot\n // what the parent is. For example, <style> and <script> need to be\n // handled with care, while <span> does not. So first we need to put a\n // text node into the document, then we can sanitize its content.\n if (this._textSanitizer === undefined) {\n this._textSanitizer = createSanitizer(textNode, 'data', 'property');\n }\n value = this._textSanitizer(value);\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit text',\n node: textNode,\n value,\n options: this.options,\n });\n textNode.data = value as string;\n } else {\n this._commitNode(d.createTextNode(value as string));\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit text',\n node: wrap(this._$startNode).nextSibling as Text,\n value,\n options: this.options,\n });\n }\n }\n this._$committedValue = value;\n }\n\n private _commitTemplateResult(\n result: TemplateResult | CompiledTemplateResult\n ): void {\n // This property needs to remain unminified.\n const {values, ['_$litType$']: type} = result;\n // If $litType$ is a number, result is a plain TemplateResult and we get\n // the template from the template cache. If not, result is a\n // CompiledTemplateResult and _$litType$ is a CompiledTemplate and we need\n // to create the <template> element the first time we see it.\n const template: Template | CompiledTemplate =\n typeof type === 'number'\n ? this._$getTemplate(result as UncompiledTemplateResult)\n : (type.el === undefined &&\n (type.el = Template.createElement(\n trustFromTemplateString(type.h, type.h[0]),\n this.options\n )),\n type);\n\n if ((this._$committedValue as TemplateInstance)?._$template === template) {\n debugLogEvent &&\n debugLogEvent({\n kind: 'template updating',\n template,\n instance: this._$committedValue as TemplateInstance,\n parts: (this._$committedValue as TemplateInstance)._$parts,\n options: this.options,\n values,\n });\n (this._$committedValue as TemplateInstance)._update(values);\n } else {\n const instance = new TemplateInstance(template as Template, this);\n const fragment = instance._clone(this.options);\n debugLogEvent &&\n debugLogEvent({\n kind: 'template instantiated',\n template,\n instance,\n parts: instance._$parts,\n options: this.options,\n fragment,\n values,\n });\n instance._update(values);\n debugLogEvent &&\n debugLogEvent({\n kind: 'template instantiated and updated',\n template,\n instance,\n parts: instance._$parts,\n options: this.options,\n fragment,\n values,\n });\n this._commitNode(fragment);\n this._$committedValue = instance;\n }\n }\n\n // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n /** @internal */\n _$getTemplate(result: UncompiledTemplateResult) {\n let template = templateCache.get(result.strings);\n if (template === undefined) {\n templateCache.set(result.strings, (template = new Template(result)));\n }\n return template;\n }\n\n private _commitIterable(value: Iterable<unknown>): void {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n // If value is an array, then the previous render was of an\n // iterable and value will contain the ChildParts from the previous\n // render. If value is not an array, clear this part and make a new\n // array for ChildParts.\n if (!isArray(this._$committedValue)) {\n this._$committedValue = [];\n this._$clear();\n }\n\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this._$committedValue as ChildPart[];\n let partIndex = 0;\n let itemPart: ChildPart | undefined;\n\n for (const item of value) {\n if (partIndex === itemParts.length) {\n // If no existing part, create a new one\n // TODO (justinfagnani): test perf impact of always creating two parts\n // instead of sharing parts between nodes\n // https://github.com/lit/lit/issues/1266\n itemParts.push(\n (itemPart = new ChildPart(\n this._insert(createMarker()),\n this._insert(createMarker()),\n this,\n this.options\n ))\n );\n } else {\n // Reuse an existing part\n itemPart = itemParts[partIndex];\n }\n itemPart._$setValue(item);\n partIndex++;\n }\n\n if (partIndex < itemParts.length) {\n // itemParts always have end nodes\n this._$clear(\n itemPart && wrap(itemPart._$endNode!).nextSibling,\n partIndex\n );\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n }\n }\n\n /**\n * Removes the nodes contained within this Part from the DOM.\n *\n * @param start Start node to clear from, for clearing a subset of the part's\n * DOM (used when truncating iterables)\n * @param from When `start` is specified, the index within the iterable from\n * which ChildParts are being removed, used for disconnecting directives\n * in those Parts.\n *\n * @internal\n */\n _$clear(\n start: ChildNode | null = wrap(this._$startNode).nextSibling,\n from?: number\n ) {\n this._$notifyConnectionChanged?.(false, true, from);\n while (start !== this._$endNode) {\n // The non-null assertion is safe because if _$startNode.nextSibling is\n // null, then _$endNode is also null, and we would not have entered this\n // loop.\n const n = wrap(start!).nextSibling;\n wrap(start!).remove();\n start = n;\n }\n }\n\n /**\n * Implementation of RootPart's `isConnected`. Note that this method\n * should only be called on `RootPart`s (the `ChildPart` returned from a\n * top-level `render()` call). It has no effect on non-root ChildParts.\n * @param isConnected Whether to set\n * @internal\n */\n setConnected(isConnected: boolean) {\n if (this._$parent === undefined) {\n this.__isConnected = isConnected;\n this._$notifyConnectionChanged?.(isConnected);\n } else if (DEV_MODE) {\n throw new Error(\n 'part.setConnected() may only be called on a ' +\n 'RootPart returned from render().'\n );\n }\n }\n}\n\n/**\n * A top-level `ChildPart` returned from `render` that manages the connected\n * state of `AsyncDirective`s created throughout the tree below it.\n */\nexport interface RootPart extends ChildPart {\n /**\n * Sets the connection state for `AsyncDirective`s contained within this root\n * ChildPart.\n *\n * lit-html does not automatically monitor the connectedness of DOM rendered;\n * as such, it is the responsibility of the caller to `render` to ensure that\n * `part.setConnected(false)` is called before the part object is potentially\n * discarded, to ensure that `AsyncDirective`s have a chance to dispose of\n * any resources being held. If a `RootPart` that was previously\n * disconnected is subsequently re-connected (and its `AsyncDirective`s should\n * re-connect), `setConnected(true)` should be called.\n *\n * @param isConnected Whether directives within this tree should be connected\n * or not\n */\n setConnected(isConnected: boolean): void;\n}\n\nexport type {AttributePart};\nclass AttributePart implements Disconnectable {\n readonly type:\n | typeof ATTRIBUTE_PART\n | typeof PROPERTY_PART\n | typeof BOOLEAN_ATTRIBUTE_PART\n | typeof EVENT_PART = ATTRIBUTE_PART;\n readonly element: HTMLElement;\n readonly name: string;\n readonly options: RenderOptions | undefined;\n\n /**\n * If this attribute part represents an interpolation, this contains the\n * static strings of the interpolation. For single-value, complete bindings,\n * this is undefined.\n */\n readonly strings?: ReadonlyArray<string>;\n /** @internal */\n _$committedValue: unknown | Array<unknown> = nothing;\n /** @internal */\n __directives?: Array<Directive | undefined>;\n /** @internal */\n _$parent: Disconnectable;\n /** @internal */\n _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n protected _sanitizer: ValueSanitizer | undefined;\n\n get tagName() {\n return this.element.tagName;\n }\n\n // See comment in Disconnectable interface for why this is a getter\n get _$isConnected() {\n return this._$parent._$isConnected;\n }\n\n constructor(\n element: HTMLElement,\n name: string,\n strings: ReadonlyArray<string>,\n parent: Disconnectable,\n options: RenderOptions | undefined\n ) {\n this.element = element;\n this.name = name;\n this._$parent = parent;\n this.options = options;\n if (strings.length > 2 || strings[0] !== '' || strings[1] !== '') {\n this._$committedValue = new Array(strings.length - 1).fill(new String());\n this.strings = strings;\n } else {\n this._$committedValue = nothing;\n }\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n this._sanitizer = undefined;\n }\n }\n\n /**\n * Sets the value of this part by resolving the value from possibly multiple\n * values and static strings and committing it to the DOM.\n * If this part is single-valued, `this._strings` will be undefined, and the\n * method will be called with a single value argument. If this part is\n * multi-value, `this._strings` will be defined, and the method is called\n * with the value array of the part's owning TemplateInstance, and an offset\n * into the value array from which the values should be read.\n * This method is overloaded this way to eliminate short-lived array slices\n * of the template instance values, and allow a fast-path for single-valued\n * parts.\n *\n * @param value The part value, or an array of values for multi-valued parts\n * @param valueIndex the index to start reading values from. `undefined` for\n * single-valued parts\n * @param noCommit causes the part to not commit its value to the DOM. Used\n * in hydration to prime attribute parts with their first-rendered value,\n * but not set the attribute, and in SSR to no-op the DOM operation and\n * capture the value for serialization.\n *\n * @internal\n */\n _$setValue(\n value: unknown | Array<unknown>,\n directiveParent: DirectiveParent = this,\n valueIndex?: number,\n noCommit?: boolean\n ) {\n const strings = this.strings;\n\n // Whether any of the values has changed, for dirty-checking\n let change = false;\n\n if (strings === undefined) {\n // Single-value binding case\n value = resolveDirective(this, value, directiveParent, 0);\n change =\n !isPrimitive(value) ||\n (value !== this._$committedValue && value !== noChange);\n if (change) {\n this._$committedValue = value;\n }\n } else {\n // Interpolation case\n const values = value as Array<unknown>;\n value = strings[0];\n\n let i, v;\n for (i = 0; i < strings.length - 1; i++) {\n v = resolveDirective(this, values[valueIndex! + i], directiveParent, i);\n\n if (v === noChange) {\n // If the user-provided value is `noChange`, use the previous value\n v = (this._$committedValue as Array<unknown>)[i];\n }\n change ||=\n !isPrimitive(v) || v !== (this._$committedValue as Array<unknown>)[i];\n if (v === nothing) {\n value = nothing;\n } else if (value !== nothing) {\n value += (v ?? '') + strings[i + 1];\n }\n // We always record each value, even if one is `nothing`, for future\n // change detection.\n (this._$committedValue as Array<unknown>)[i] = v;\n }\n }\n if (change && !noCommit) {\n this._commitValue(value);\n }\n }\n\n /** @internal */\n _commitValue(value: unknown) {\n if (value === nothing) {\n (wrap(this.element) as Element).removeAttribute(this.name);\n } else {\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n if (this._sanitizer === undefined) {\n this._sanitizer = sanitizerFactoryInternal(\n this.element,\n this.name,\n 'attribute'\n );\n }\n value = this._sanitizer(value ?? '');\n }\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit attribute',\n element: this.element,\n name: this.name,\n value,\n options: this.options,\n });\n (wrap(this.element) as Element).setAttribute(\n this.name,\n (value ?? '') as string\n );\n }\n }\n}\n\nexport type {PropertyPart};\nclass PropertyPart extends AttributePart {\n override readonly type = PROPERTY_PART;\n\n /** @internal */\n override _commitValue(value: unknown) {\n if (ENABLE_EXTRA_SECURITY_HOOKS) {\n if (this._sanitizer === undefined) {\n this._sanitizer = sanitizerFactoryInternal(\n this.element,\n this.name,\n 'property'\n );\n }\n value = this._sanitizer(value);\n }\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit property',\n element: this.element,\n name: this.name,\n value,\n options: this.options,\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.element as any)[this.name] = value === nothing ? undefined : value;\n }\n}\n\nexport type {BooleanAttributePart};\nclass BooleanAttributePart extends AttributePart {\n override readonly type = BOOLEAN_ATTRIBUTE_PART;\n\n /** @internal */\n override _commitValue(value: unknown) {\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit boolean attribute',\n element: this.element,\n name: this.name,\n value: !!(value && value !== nothing),\n options: this.options,\n });\n (wrap(this.element) as Element).toggleAttribute(\n this.name,\n !!value && value !== nothing\n );\n }\n}\n\ntype EventListenerWithOptions = EventListenerOrEventListenerObject &\n Partial<AddEventListenerOptions>;\n\n/**\n * An AttributePart that manages an event listener via add/removeEventListener.\n *\n * This part works by adding itself as the event listener on an element, then\n * delegating to the value passed to it. This reduces the number of calls to\n * add/removeEventListener if the listener changes frequently, such as when an\n * inline function is used as a listener.\n *\n * Because event options are passed when adding listeners, we must take case\n * to add and remove the part as a listener when the event options change.\n */\nexport type {EventPart};\nclass EventPart extends AttributePart {\n override readonly type = EVENT_PART;\n\n constructor(\n element: HTMLElement,\n name: string,\n strings: ReadonlyArray<string>,\n parent: Disconnectable,\n options: RenderOptions | undefined\n ) {\n super(element, name, strings, parent, options);\n\n if (DEV_MODE && this.strings !== undefined) {\n throw new Error(\n `A \\`<${element.localName}>\\` has a \\`@${name}=...\\` listener with ` +\n 'invalid content. Event listeners in templates must have exactly ' +\n 'one expression and no surrounding text.'\n );\n }\n }\n\n // EventPart does not use the base _$setValue/_resolveValue implementation\n // since the dirty checking is more complex\n /** @internal */\n override _$setValue(\n newListener: unknown,\n directiveParent: DirectiveParent = this\n ) {\n newListener =\n resolveDirective(this, newListener, directiveParent, 0) ?? nothing;\n if (newListener === noChange) {\n return;\n }\n const oldListener = this._$committedValue;\n\n // If the new value is nothing or any options change we have to remove the\n // part as a listener.\n const shouldRemoveListener =\n (newListener === nothing && oldListener !== nothing) ||\n (newListener as EventListenerWithOptions).capture !==\n (oldListener as EventListenerWithOptions).capture ||\n (newListener as EventListenerWithOptions).once !==\n (oldListener as EventListenerWithOptions).once ||\n (newListener as EventListenerWithOptions).passive !==\n (oldListener as EventListenerWithOptions).passive;\n\n // If the new value is not nothing and we removed the listener, we have\n // to add the part as a listener.\n const shouldAddListener =\n newListener !== nothing &&\n (oldListener === nothing || shouldRemoveListener);\n\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit event listener',\n element: this.element,\n name: this.name,\n value: newListener,\n options: this.options,\n removeListener: shouldRemoveListener,\n addListener: shouldAddListener,\n oldListener,\n });\n if (shouldRemoveListener) {\n this.element.removeEventListener(\n this.name,\n this,\n oldListener as EventListenerWithOptions\n );\n }\n if (shouldAddListener) {\n this.element.addEventListener(\n this.name,\n this,\n newListener as EventListenerWithOptions\n );\n }\n this._$committedValue = newListener;\n }\n\n handleEvent(event: Event) {\n if (typeof this._$committedValue === 'function') {\n this._$committedValue.call(this.options?.host ?? this.element, event);\n } else {\n (this._$committedValue as EventListenerObject).handleEvent(event);\n }\n }\n}\n\nexport type {ElementPart};\nclass ElementPart implements Disconnectable {\n readonly type = ELEMENT_PART;\n\n /** @internal */\n __directive?: Directive;\n\n // This is to ensure that every Part has a _$committedValue\n _$committedValue: undefined;\n\n /** @internal */\n _$parent!: Disconnectable;\n\n /** @internal */\n _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n options: RenderOptions | undefined;\n\n constructor(\n public element: Element,\n parent: Disconnectable,\n options: RenderOptions | undefined\n ) {\n this._$parent = parent;\n this.options = options;\n }\n\n // See comment in Disconnectable interface for why this is a getter\n get _$isConnected() {\n return this._$parent._$isConnected;\n }\n\n _$setValue(value: unknown): void {\n debugLogEvent &&\n debugLogEvent({\n kind: 'commit to element binding',\n element: this.element,\n value,\n options: this.options,\n });\n resolveDirective(this, value);\n }\n}\n\n/**\n * END USERS SHOULD NOT RELY ON THIS OBJECT.\n *\n * Private exports for use by other Lit packages, not intended for use by\n * external users.\n *\n * We currently do not make a mangled rollup build of the lit-ssr code. In order\n * to keep a number of (otherwise private) top-level exports mangled in the\n * client side code, we export a _$LH object containing those members (or\n * helper methods for accessing private fields of those members), and then\n * re-export them for use in lit-ssr. This keeps lit-ssr agnostic to whether the\n * client-side code is being used in `dev` mode or `prod` mode.\n *\n * This has a unique name, to disambiguate it from private exports in\n * lit-element, which re-exports all of lit-html.\n *\n * @private\n */\nexport const _$LH = {\n // Used in lit-ssr\n _boundAttributeSuffix: boundAttributeSuffix,\n _marker: marker,\n _markerMatch: markerMatch,\n _HTML_RESULT: HTML_RESULT,\n _getTemplateHtml: getTemplateHtml,\n // Used in tests and private-ssr-support\n _TemplateInstance: TemplateInstance,\n _isIterable: isIterable,\n _resolveDirective: resolveDirective,\n _ChildPart: ChildPart,\n _AttributePart: AttributePart,\n _BooleanAttributePart: BooleanAttributePart,\n _EventPart: EventPart,\n _PropertyPart: PropertyPart,\n _ElementPart: ElementPart,\n};\n\n// Apply polyfills if available\nconst polyfillSupport = DEV_MODE\n ? global.litHtmlPolyfillSupportDevMode\n : global.litHtmlPolyfillSupport;\npolyfillSupport?.(Template, ChildPart);\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n(global.litHtmlVersions ??= []).push('3.3.1');\nif (DEV_MODE && global.litHtmlVersions.length > 1) {\n queueMicrotask(() => {\n issueWarning!(\n 'multiple-versions',\n `Multiple versions of Lit loaded. ` +\n `Loading multiple versions is not recommended.`\n );\n });\n}\n\n/**\n * Renders a value, usually a lit-html TemplateResult, to the container.\n *\n * This example renders the text \"Hello, Zoe!\" inside a paragraph tag, appending\n * it to the container `document.body`.\n *\n * ```js\n * import {html, render} from 'lit';\n *\n * const name = \"Zoe\";\n * render(html`<p>Hello, ${name}!</p>`, document.body);\n * ```\n *\n * @param value Any [renderable\n * value](https://lit.dev/docs/templates/expressions/#child-expressions),\n * typically a {@linkcode TemplateResult} created by evaluating a template tag\n * like {@linkcode html} or {@linkcode svg}.\n * @param container A DOM container to render to. The first render will append\n * the rendered value to the container, and subsequent renders will\n * efficiently update the rendered value if the same result type was\n * previously rendered there.\n * @param options See {@linkcode RenderOptions} for options documentation.\n * @see\n * {@link https://lit.dev/docs/libraries/standalone-templates/#rendering-lit-html-templates| Rendering Lit HTML Templates}\n */\nexport const render = (\n value: unknown,\n container: HTMLElement | DocumentFragment,\n options?: RenderOptions\n): RootPart => {\n if (DEV_MODE && container == null) {\n // Give a clearer error message than\n // Uncaught TypeError: Cannot read properties of null (reading\n // '_$litPart$')\n // which reads like an internal Lit error.\n throw new TypeError(`The container to render into may not be ${container}`);\n }\n const renderId = DEV_MODE ? debugLogRenderId++ : 0;\n const partOwnerNode = options?.renderBefore ?? container;\n // This property needs to remain unminified.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let part: ChildPart = (partOwnerNode as any)['_$litPart$'];\n debugLogEvent &&\n debugLogEvent({\n kind: 'begin render',\n id: renderId,\n value,\n container,\n options,\n part,\n });\n if (part === undefined) {\n const endNode = options?.renderBefore ?? null;\n // This property needs to remain unminified.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (partOwnerNode as any)['_$litPart$'] = part = new ChildPart(\n container.insertBefore(createMarker(), endNode),\n endNode,\n undefined,\n options ?? {}\n );\n }\n part._$setValue(value);\n debugLogEvent &&\n debugLogEvent({\n kind: 'end render',\n id: renderId,\n value,\n container,\n options,\n part,\n });\n return part as RootPart;\n};\n\nif (ENABLE_EXTRA_SECURITY_HOOKS) {\n render.setSanitizer = setSanitizer;\n render.createSanitizer = createSanitizer;\n if (DEV_MODE) {\n render._testOnlyClearSanitizerFactoryDoNotCallOrElse =\n _testOnlyClearSanitizerFactoryDoNotCallOrElse;\n }\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * The main LitElement module, which defines the {@linkcode LitElement} base\n * class and related APIs.\n *\n * LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n * Import {@linkcode LitElement} and {@linkcode html} from this module to\n * create a component:\n *\n * ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n * // Declare observed properties\n * static get properties() {\n * return {\n * adjective: {}\n * }\n * }\n *\n * constructor() {\n * this.adjective = 'awesome';\n * }\n *\n * // Define the element's template\n * render() {\n * return html`<p>your ${adjective} template here</p>`;\n * }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends {@linkcode ReactiveElement} and adds lit-html\n * templating. The `ReactiveElement` class is provided for users that want to\n * build their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport {PropertyValues, ReactiveElement} from '@lit/reactive-element';\nimport {render, RenderOptions, noChange, RootPart} from 'lit-html';\nexport * from '@lit/reactive-element';\nexport * from 'lit-html';\n\nimport {LitUnstable} from 'lit-html';\nimport {ReactiveUnstable} from '@lit/reactive-element';\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Unstable {\n /**\n * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n * we will emit 'lit-debug' events to window, with live details about the update and render\n * lifecycle. These can be useful for writing debug tooling and visualizations.\n *\n * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n * making certain operations that are normally very cheap (like a no-op render) much slower,\n * because we must copy data and dispatch events.\n */\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace DebugLog {\n export type Entry =\n | LitUnstable.DebugLog.Entry\n | ReactiveUnstable.DebugLog.Entry;\n }\n}\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\n/*@__INLINE__*/\nconst JSCompiler_renameProperty = <P extends PropertyKey>(\n prop: P,\n _obj: unknown\n): P => prop;\n\nconst DEV_MODE = true;\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n // Ensure warnings are issued only 1x, even if multiple versions of Lit\n // are loaded.\n global.litIssuedWarnings ??= new Set();\n\n /**\n * Issue a warning if we haven't already, based either on `code` or `warning`.\n * Warnings are disabled automatically only by `warning`; disabling via `code`\n * can be done by users.\n */\n issueWarning = (code: string, warning: string) => {\n warning += ` See https://lit.dev/msg/${code} for more information.`;\n if (\n !global.litIssuedWarnings!.has(warning) &&\n !global.litIssuedWarnings!.has(code)\n ) {\n console.warn(warning);\n global.litIssuedWarnings!.add(warning);\n }\n };\n}\n\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the {@linkcode LitElement.properties properties} property or the\n * {@linkcode property} decorator.\n */\nexport class LitElement extends ReactiveElement {\n // This property needs to remain unminified.\n static ['_$litElement$'] = true;\n\n /**\n * @category rendering\n */\n readonly renderOptions: RenderOptions = {host: this};\n\n private __childPart: RootPart | undefined = undefined;\n\n /**\n * @category rendering\n */\n protected override createRenderRoot() {\n const renderRoot = super.createRenderRoot();\n // When adoptedStyleSheets are shimmed, they are inserted into the\n // shadowRoot by createRenderRoot. Adjust the renderBefore node so that\n // any styles in Lit content render before adoptedStyleSheets. This is\n // important so that adoptedStyleSheets have precedence over styles in\n // the shadowRoot.\n this.renderOptions.renderBefore ??= renderRoot!.firstChild as ChildNode;\n return renderRoot;\n }\n\n /**\n * Updates the element. This method reflects property values to attributes\n * and calls `render` to render DOM via lit-html. Setting properties inside\n * this method will *not* trigger another update.\n * @param changedProperties Map of changed properties with old values\n * @category updates\n */\n protected override update(changedProperties: PropertyValues) {\n // Setting properties in `render` should not trigger an update. Since\n // updates are allowed after super.update, it's important to call `render`\n // before that.\n const value = this.render();\n if (!this.hasUpdated) {\n this.renderOptions.isConnected = this.isConnected;\n }\n super.update(changedProperties);\n this.__childPart = render(value, this.renderRoot, this.renderOptions);\n }\n\n /**\n * Invoked when the component is added to the document's DOM.\n *\n * In `connectedCallback()` you should setup tasks that should only occur when\n * the element is connected to the document. The most common of these is\n * adding event listeners to nodes external to the element, like a keydown\n * event handler added to the window.\n *\n * ```ts\n * connectedCallback() {\n * super.connectedCallback();\n * addEventListener('keydown', this._handleKeydown);\n * }\n * ```\n *\n * Typically, anything done in `connectedCallback()` should be undone when the\n * element is disconnected, in `disconnectedCallback()`.\n *\n * @category lifecycle\n */\n override connectedCallback() {\n super.connectedCallback();\n this.__childPart?.setConnected(true);\n }\n\n /**\n * Invoked when the component is removed from the document's DOM.\n *\n * This callback is the main signal to the element that it may no longer be\n * used. `disconnectedCallback()` should ensure that nothing is holding a\n * reference to the element (such as event listeners added to nodes external\n * to the element), so that it is free to be garbage collected.\n *\n * ```ts\n * disconnectedCallback() {\n * super.disconnectedCallback();\n * window.removeEventListener('keydown', this._handleKeydown);\n * }\n * ```\n *\n * An element may be re-connected after being disconnected.\n *\n * @category lifecycle\n */\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.__childPart?.setConnected(false);\n }\n\n /**\n * Invoked on each update to perform rendering tasks. This method may return\n * any value renderable by lit-html's `ChildPart` - typically a\n * `TemplateResult`. Setting properties inside this method will *not* trigger\n * the element to update.\n * @category rendering\n */\n protected render(): unknown {\n return noChange;\n }\n}\n\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n *\n * Note this property name is a string to prevent breaking Closure JS Compiler\n * optimizations. See @lit/reactive-element for more information.\n */\n(LitElement as unknown as Record<string, unknown>)[\n JSCompiler_renameProperty('finalized', LitElement)\n] = true;\n\n// Install hydration if available\nglobal.litElementHydrateSupport?.({LitElement});\n\n// Apply polyfills if available\nconst polyfillSupport = DEV_MODE\n ? global.litElementPolyfillSupportDevMode\n : global.litElementPolyfillSupport;\npolyfillSupport?.({LitElement});\n\n/**\n * END USERS SHOULD NOT RELY ON THIS OBJECT.\n *\n * Private exports for use by other Lit packages, not intended for use by\n * external users.\n *\n * We currently do not make a mangled rollup build of the lit-ssr code. In order\n * to keep a number of (otherwise private) top-level exports mangled in the\n * client side code, we export a _$LE object containing those members (or\n * helper methods for accessing private fields of those members), and then\n * re-export them for use in lit-ssr. This keeps lit-ssr agnostic to whether the\n * client-side code is being used in `dev` mode or `prod` mode.\n *\n * This has a unique name, to disambiguate it from private exports in\n * lit-html, since this module re-exports all of lit-html.\n *\n * @private\n */\nexport const _$LE = {\n _$attributeToProperty: (\n el: LitElement,\n name: string,\n value: string | null\n ) => {\n // eslint-disable-next-line\n (el as any)._$attributeToProperty(name, value);\n },\n // eslint-disable-next-line\n _$changedProperties: (el: LitElement) => (el as any)._$changedProperties,\n};\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n(global.litElementVersions ??= []).push('4.2.1');\nif (DEV_MODE && global.litElementVersions.length > 1) {\n queueMicrotask(() => {\n issueWarning!(\n 'multiple-versions',\n `Multiple versions of Lit loaded. Loading multiple versions ` +\n `is not recommended.`\n );\n });\n}\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array<ArrayBuffer> {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Normalize binary input to a plain `Uint8Array` backed by an `ArrayBuffer`.\n *\n * Returns the input itself when it is already a plain `Uint8Array` over an\n * `ArrayBuffer`, otherwise a fresh view (or, for `SharedArrayBuffer`-backed\n * input, a copy) over the same bytes.\n *\n * Throws if input is not a recognised binary type.\n */\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array<ArrayBuffer> {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') {\n return toArrayBufferBackedArray(o)\n }\n if (o instanceof ArrayBuffer) {\n return new Uint8Array(o)\n }\n if (ArrayBuffer.isView(o)) {\n return toArrayBufferBackedArray(new Uint8Array(o.buffer, o.byteOffset, o.byteLength))\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\n/**\n * Convert the passed string into a byte array, constraining each character\n * value to a single byte\n */\nexport function fromString (str: string): Uint8Array<ArrayBuffer> {\n const output = new Uint8Array(str.length)\n\n for (let i = 0; i < str.length; i++) {\n output[i] = str.charCodeAt(i)\n }\n\n return output\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\n/**\n * Convert the passed byte array to a string, interpreting each byte as a single\n * character\n */\nexport function toString (b: Uint8Array): string {\n const len = b.length\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n // @ts-expect-error cannot ordinarily apply a Uint8Array\n return String.fromCharCode.apply(String, b) // avoid extra subarray()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n // @ts-expect-error cannot ordinarily apply a Uint8Array\n b.subarray(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction isByteArrayWithArrayBuffer (b?: Uint8Array): b is Uint8Array<ArrayBuffer> {\n return b?.buffer instanceof ArrayBuffer\n}\n\n/**\n * Ensures `b` is backed by an ArrayBuffer - if not a new Uint8Array will be\n * created and the contents of `b` copied into it.\n */\nexport function toArrayBufferBackedArray (b: Uint8Array): Uint8Array<ArrayBuffer> {\n if (isByteArrayWithArrayBuffer(b)) {\n return b\n }\n\n return b.slice()\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n * @param {boolean} [caseInsensitive]\n */\nfunction base (ALPHABET, name, caseInsensitive) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n // For case-insensitive codecs, map the opposite case to the same index so\n // differently cased input decodes without errors (multibase spec).\n if (caseInsensitive) {\n var xl = x.toLowerCase().charCodeAt(0);\n var xu = x.toUpperCase().charCodeAt(0);\n if (xl !== xc) { BASE_MAP[xl] = i; }\n if (xu !== xc) { BASE_MAP[xu] = i; }\n }\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { coerce } from '../bytes.ts'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.ts'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array<ArrayBuffer> }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array<ArrayBuffer> {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array<ArrayBuffer> {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array<ArrayBuffer> {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet, caseInsensitive = false }: { name: Base, prefix: Prefix, alphabet: string, caseInsensitive?: boolean }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name, caseInsensitive)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array<ArrayBuffer> => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array<ArrayBuffer> {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string, caseInsensitive: boolean): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n // For case-insensitive codecs, map the opposite case to the same index so\n // differently cased input decodes without errors (multibase spec).\n if (caseInsensitive) {\n const lower = alphabet[i].toLowerCase()\n const upper = alphabet[i].toUpperCase()\n if (lower !== alphabet[i]) {\n alphabetIdx[lower] = i\n }\n if (upper !== alphabet[i]) {\n alphabetIdx[upper] = i\n }\n }\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet, caseInsensitive = false }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string, caseInsensitive?: boolean }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet, caseInsensitive)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array<ArrayBuffer> {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n", "import { rfc4648 } from './base.ts'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5,\n caseInsensitive: true\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n", "import { baseX } from './base.ts'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz',\n caseInsensitive: true\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n caseInsensitive: true\n})\n", "import { baseX } from './base.ts'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n const length = varint.decode.bytes\n if (length > 9) {\n throw new RangeError('Invalid varint: too long')\n }\n if (length > 1 && data[offset + length - 1] === 0) {\n throw new RangeError('Invalid varint: not minimally encoded')\n }\n return [code, length]\n}\n\nexport function encodeTo <T extends ArrayBufferLike> (int: number, target: Uint8Array<T>, offset = 0): Uint8Array<T> {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n", "import { coerce, equals as equalBytes, toArrayBufferBackedArray } from '../bytes.ts'\nimport * as varint from '../varint.ts'\nimport type { MultihashDigest } from './interface.ts'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array<ArrayBuffer>\n readonly bytes: Uint8Array<ArrayBuffer>\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = toArrayBufferBackedArray(digest)\n this.bytes = toArrayBufferBackedArray(bytes)\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n", "import { base32 } from './bases/base32.ts'\nimport { base36 } from './bases/base36.ts'\nimport { base58btc } from './bases/base58.ts'\nimport { coerce, toArrayBufferBackedArray } from './bytes.ts'\nimport * as Digest from './hashes/digest.ts'\nimport * as varint from './varint.ts'\nimport type * as API from './link/interface.ts'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.ts'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array<ArrayBuffer>\n readonly '/': Uint8Array<ArrayBuffer>\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = toArrayBufferBackedArray(bytes)\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = this.bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "// Canonical text rules (Specification: Canonical Form, rules 4 to 6)\n\n// Invisible characters that are never allowed (rule 6).\nconst FORBIDDEN_INVISIBLE = new Set(['\u200B', '\u2060', '\uFEFF', '\u00AD'])\n\nfunction isControl(code: number): boolean {\n return code < 0x20 || (code >= 0x7f && code <= 0x9f)\n}\n\nfunction isWhitespace(ch: string): boolean {\n return /\\s/u.test(ch) && !FORBIDDEN_INVISIBLE.has(ch)\n}\n\nexport interface TextIssue {\n code: string\n message: string\n offset?: number\n}\n\n// Report every way a string departs from canonical text. Empty result means canonical.\nexport function checkText(value: string): TextIssue[] {\n const issues: TextIssue[] = []\n if (value.length === 0) {\n issues.push({ code: 'empty', message: 'must not be empty (omit the field instead)' })\n return issues\n }\n if (value !== value.normalize('NFC')) {\n issues.push({ code: 'not-nfc', message: 'must be in Unicode NFC form' })\n }\n let offset = 0\n let prevSpace = 0 // length of the current run of spaces\n for (const ch of value) {\n const code = ch.codePointAt(0) ?? 0\n if (ch === ' ') {\n if (offset === 0) {\n issues.push({ code: 'leading-space', message: 'must not begin with a space', offset })\n prevSpace = 2 // the leading run is reported once, as leading-space\n } else if (prevSpace === 1) {\n issues.push({ code: 'double-space', message: 'must not contain two spaces in a row', offset })\n }\n prevSpace++\n } else {\n prevSpace = 0\n if (FORBIDDEN_INVISIBLE.has(ch)) {\n issues.push({ code: 'invisible', message: `invisible character U+${hex(code)} is not allowed`, offset })\n } else if (isWhitespace(ch)) {\n issues.push({ code: 'whitespace', message: `whitespace U+${hex(code)} is not allowed; use a single ordinary space`, offset })\n } else if (isControl(code)) {\n issues.push({ code: 'control', message: `control character U+${hex(code)} is not allowed`, offset })\n }\n }\n offset += ch.length\n }\n if (value.endsWith(' ')) {\n issues.push({ code: 'trailing-space', message: 'must not end with a space', offset: value.length - 1 })\n }\n return issues\n}\n\nexport function isCanonicalText(value: string): boolean {\n return checkText(value).length === 0\n}\n\n// Produce the canonical form of a string, for editors and lint fixes. Never applied before hashing.\nexport function canonicalizeText(value: string): string {\n let out = ''\n for (const ch of value.normalize('NFC')) {\n const code = ch.codePointAt(0) ?? 0\n if (FORBIDDEN_INVISIBLE.has(ch)) continue\n if (isWhitespace(ch)) out += ' '\n else if (isControl(code)) continue\n else out += ch\n }\n return out.replace(/ {2,}/g, ' ').trim()\n}\n\n// A sequence that looks like an HTML entity, for lint warnings (rule 7).\nexport function findEntityLike(value: string): number[] {\n const offsets: number[] = []\n for (const m of value.matchAll(/&(#\\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*);/g)) {\n offsets.push(m.index ?? 0)\n }\n return offsets\n}\n\nfunction hex(code: number): string {\n return code.toString(16).toUpperCase().padStart(4, '0')\n}\n", "// Section ids and parameter keys (Specification: Section Ids)\n\nconst ID_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/\nexport const MAX_ID_LENGTH = 64\n\nexport function isValidId(value: string): boolean {\n return value.length <= MAX_ID_LENGTH && ID_PATTERN.test(value)\n}\n\n// Propose an id from a title: \"Cure of Default\" -> \"cure-of-default\".\nexport function suggestId(title: string): string {\n const base = title\n .normalize('NFKD')\n .replace(/[\u0300-\u036F]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/^[0-9-]+/, '')\n .slice(0, MAX_ID_LENGTH)\n .replace(/-+$/, '')\n return base || 'section'\n}\n\n// A domain `author` (Specification: Author): lowercase ASCII labels separated by dots, at least\n// one dot, the last label alphabetic or an IDNA (xn--) label.\nconst DOMAIN_PATTERN = /^(?=.{4,253}$)([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+([a-z]{2,63}|xn--[a-z0-9-]{1,59})$/\n\nexport function isDomain(value: string): boolean {\n return DOMAIN_PATTERN.test(value)\n}\n\n// True when the value would be a domain if written in lowercase (for lint advice).\nexport function looksLikeDomain(value: string): boolean {\n return !isDomain(value) && isDomain(value.toLowerCase())\n}\n", "// BCP 47 language tags in canonical case (Specification: Field Definitions)\n//\n// Checks well-formedness of the common subset: language, extended language, script, region,\n// variants, extensions and private use. The primary language must be 2-3 letters; longer ones\n// are grammatical but unregistered, and usually a mistake such as \"english\". Canonical case:\n// language lowercase, script title case, region uppercase, everything else lowercase.\n\nconst SUBTAG_RULES = /^([a-z]{2,3}(-[a-z]{3}){0,3})(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?(-([a-z0-9]{5,8}|[0-9][a-z0-9]{3}))*(-[a-wy-z0-9](-[a-z0-9]{2,8})+)*(-x(-[a-z0-9]{1,8})+)?$/\n\nexport function isCanonicalLanguageTag(tag: string): boolean {\n return SUBTAG_RULES.test(tag)\n}\n\n// The canonical-case spelling of a tag, or undefined if it is not well formed in any case.\nexport function canonicalLanguageTag(tag: string): string | undefined {\n const parts = tag.split(/[-_]/)\n let seenSingleton = false\n const fixed = parts.map((p, i) => {\n if (i === 0) return p.toLowerCase()\n if (seenSingleton) return p.toLowerCase()\n if (p.length === 1) { seenSingleton = true; return p.toLowerCase() }\n if (p.length === 4 && /^[a-zA-Z]{4}$/.test(p)) return p[0].toUpperCase() + p.slice(1).toLowerCase()\n if (p.length === 2 && /^[a-zA-Z]{2}$/.test(p)) return p.toUpperCase()\n return p.toLowerCase()\n }).join('-')\n return isCanonicalLanguageTag(fixed) ? fixed : undefined\n}\n", "// Markup grammar (Specification: Inline Markup)\n//\n// text = { char | escape | token }\n// escape = \"\\<\" | \"\\\\\"\n// token = \"<b>\" | \"</b>\" | \"<i>\" | \"</i>\" | \"<u>\" | \"</u>\" | \"<ref:\" path \">\" | \"<param:\" id \">\"\n// path = id { \"/\" id }\n//\n// Markup is not HTML. Renderers walk the parsed tree and produce their own output.\n\nimport { isValidId } from './ids.js'\n\nexport type EmphasisTag = 'b' | 'i' | 'u'\n\n// Canonical order when one emphasis directly wraps another: b outside i outside u.\nconst EMPHASIS_ORDER: Record<EmphasisTag, number> = { b: 0, i: 1, u: 2 }\n\nexport type MarkupNode =\n | { type: 'text', value: string } // literal characters, escapes resolved\n | { type: 'emphasis', tag: EmphasisTag, children: MarkupNode[], offset: number }\n | { type: 'ref', path: string[], offset: number }\n | { type: 'param', key: string, offset: number } // a parameter's value, shown in place\n\nexport interface MarkupIssue {\n code: string\n message: string\n offset: number\n}\n\nexport interface ParsedMarkup {\n nodes: MarkupNode[]\n issues: MarkupIssue[]\n}\n\ntype Token =\n | { type: 'text', value: string, offset: number }\n | { type: 'open' | 'close', tag: EmphasisTag, offset: number }\n | { type: 'ref', path: string[], offset: number }\n | { type: 'param', key: string, offset: number }\n\nconst TAG_TOKENS: [string, Token['type'], EmphasisTag][] = [\n ['<b>', 'open', 'b'], ['</b>', 'close', 'b'],\n ['<i>', 'open', 'i'], ['</i>', 'close', 'i'],\n ['<u>', 'open', 'u'], ['</u>', 'close', 'u'],\n]\n\nfunction tokenize(text: string, issues: MarkupIssue[]): Token[] {\n const tokens: Token[] = []\n let buf = ''\n let bufStart = 0\n const flush = () => {\n if (buf) tokens.push({ type: 'text', value: buf, offset: bufStart })\n buf = ''\n }\n let i = 0\n while (i < text.length) {\n const ch = text[i]\n if (ch === '\\\\') {\n const next = text[i + 1]\n if (next === '<' || next === '\\\\') {\n if (!buf) bufStart = i\n buf += next\n i += 2\n } else {\n issues.push({ code: 'bad-escape', message: 'a backslash must be followed by < or \\\\ (write \\\\\\\\ for a literal backslash)', offset: i })\n if (!buf) bufStart = i\n buf += ch\n i += 1\n }\n continue\n }\n if (ch === '<') {\n const tag = TAG_TOKENS.find(([lit]) => text.startsWith(lit, i))\n if (tag) {\n flush()\n tokens.push({ type: tag[1] as 'open' | 'close', tag: tag[2], offset: i })\n i += tag[0].length\n continue\n }\n if (text.startsWith('<ref:', i)) {\n const end = text.indexOf('>', i)\n const body = end < 0 ? '' : text.slice(i + 5, end)\n const path = body.split('/')\n if (end >= 0 && body && path.every(isValidId)) {\n flush()\n tokens.push({ type: 'ref', path, offset: i })\n i = end + 1\n continue\n }\n issues.push({ code: 'bad-ref', message: 'a reference must be <ref:id> or <ref:id/id/...> using valid section ids', offset: i })\n } else if (text.startsWith('<param:', i)) {\n const end = text.indexOf('>', i)\n const key = end < 0 ? '' : text.slice(i + 7, end)\n if (end >= 0 && isValidId(key)) {\n flush()\n tokens.push({ type: 'param', key, offset: i })\n i = end + 1\n continue\n }\n issues.push({ code: 'bad-param', message: 'a placeholder must be <param:key> using a valid parameter key', offset: i })\n } else {\n issues.push({ code: 'bad-tag', message: 'every < must begin a markup token (<b>, </b>, <i>, </i>, <u>, </u>, <ref:...>, <param:...>); write \\\\< for a literal <', offset: i })\n }\n if (!buf) bufStart = i\n buf += ch\n i += 1\n continue\n }\n if (!buf) bufStart = i\n buf += ch\n i += 1\n }\n flush()\n return tokens\n}\n\n// Parse paragraph text into a tree, reporting every grammar and one-spelling violation.\nexport function parseMarkup(text: string): ParsedMarkup {\n const issues: MarkupIssue[] = []\n const tokens = tokenize(text, issues)\n const root: MarkupNode[] = []\n const stack: { tag: EmphasisTag, offset: number, children: MarkupNode[] }[] = []\n const current = () => (stack.length ? stack[stack.length - 1].children : root)\n\n for (const tok of tokens) {\n if (tok.type === 'text') {\n current().push({ type: 'text', value: tok.value })\n } else if (tok.type === 'ref') {\n current().push({ type: 'ref', path: tok.path, offset: tok.offset })\n } else if (tok.type === 'param') {\n current().push({ type: 'param', key: tok.key, offset: tok.offset })\n } else if (tok.type === 'open') {\n if (stack.some(s => s.tag === tok.tag)) {\n issues.push({ code: 'nested-same', message: `<${tok.tag}> must not be nested inside another <${tok.tag}>`, offset: tok.offset })\n }\n stack.push({ tag: tok.tag, offset: tok.offset, children: [] })\n } else {\n const top = stack[stack.length - 1]\n if (!top || top.tag !== tok.tag) {\n issues.push({ code: 'unbalanced', message: `</${tok.tag}> does not close the most recent open tag`, offset: tok.offset })\n continue\n }\n stack.pop()\n current().push({ type: 'emphasis', tag: top.tag, children: top.children, offset: top.offset })\n }\n }\n while (stack.length) {\n const open = stack.pop()!\n issues.push({ code: 'unclosed', message: `<${open.tag}> is never closed`, offset: open.offset })\n current().push({ type: 'emphasis', tag: open.tag, children: open.children, offset: open.offset })\n }\n checkSpelling(root, issues)\n return { nodes: root, issues }\n}\n\nfunction checkSpelling(nodes: MarkupNode[], issues: MarkupIssue[], outer?: EmphasisTag) {\n nodes.forEach((node, idx) => {\n if (node.type !== 'emphasis') return\n const { tag, children, offset } = node\n if (children.length === 0) {\n issues.push({ code: 'empty-emphasis', message: `<${tag}> must not be empty`, offset })\n }\n const first = children[0], last = children[children.length - 1]\n if (first?.type === 'text' && first.value.startsWith(' ')) {\n issues.push({ code: 'emphasis-edge-space', message: `<${tag}> content must not begin with a space; move the space outside`, offset })\n }\n if (last?.type === 'text' && last.value.endsWith(' ')) {\n issues.push({ code: 'emphasis-edge-space', message: `<${tag}> content must not end with a space; move the space outside`, offset })\n }\n // The order b, i, u holds at every depth: b never inside i or u, i never inside u.\n // (Equal tags nested are reported by the parser as nested-same.)\n if (outer && EMPHASIS_ORDER[tag] < EMPHASIS_ORDER[outer]) {\n issues.push({ code: 'emphasis-order', message: `<${tag}> must not be inside <${outer}>: emphasis nests in the order b, i, u`, offset })\n }\n const prev = nodes[idx - 1]\n if (prev?.type === 'emphasis' && prev.tag === tag) {\n issues.push({ code: 'adjacent-emphasis', message: `adjacent <${tag}> spans must be merged into one`, offset })\n }\n checkSpelling(children, issues, outer && EMPHASIS_ORDER[outer] > EMPHASIS_ORDER[tag] ? outer : tag)\n })\n}\n\n// ---------------------------------------------------------------------------------------------\n// Canonical serialization\n//\n// Writes formatted text in its one valid spelling: canonical text (NFC, single spaces, trimmed, no\n// forbidden invisible characters), emphasis nested b > i > u, maximal spans, no space at the edge\n// of an emphasis, literal < and \\ escaped. Editors and lint fixes use it; it is never applied\n// silently before hashing.\n\nconst TAGS: EmphasisTag[] = ['b', 'i', 'u']\nconst BIT: Record<EmphasisTag, number> = { b: 1, i: 2, u: 4 }\n// Characters dropped from canonical text: forbidden invisible characters and controls other than\n// whitespace (which becomes a space).\nconst forbidden = (ch: string): boolean => {\n const c = ch.codePointAt(0) ?? 0\n return c === 0x200b || c === 0x2060 || c === 0xfeff || c === 0xad ||\n (c < 0x20 && !/\\s/u.test(ch)) || (c >= 0x7f && c <= 0x9f && !/\\s/u.test(ch))\n}\n\ninterface Atom { ch?: string, ref?: string[], param?: string, style: number }\n\nexport function canonicalMarkup(input: string | MarkupNode[]): string {\n const nodes = typeof input === 'string' ? parseMarkup(input).nodes : input\n // 1. Flatten to atoms, each with the set of emphases that applies to it.\n const atoms: Atom[] = []\n const flatten = (list: MarkupNode[], style: number) => list.forEach(n => {\n if (n.type === 'text') {\n for (const ch of n.value.normalize('NFC')) {\n if (forbidden(ch)) continue\n atoms.push({ ch: /\\s/u.test(ch) ? ' ' : ch, style })\n }\n } else if (n.type === 'ref') atoms.push({ ref: n.path, style })\n else if (n.type === 'param') atoms.push({ param: n.key, style })\n else flatten(n.children, style | BIT[n.tag])\n })\n flatten(nodes, 0)\n // 2. Single spaces, none at either end.\n let list = atoms.filter((a, i) => !(a.ch === ' ' && (i === 0 || atoms[i - 1].ch === ' ')))\n while (list.length && list[list.length - 1].ch === ' ') list = list.slice(0, -1)\n // 3. A space at the edge of an emphasis is outside it. Tags are written in b, i, u order, so a\n // space keeps only the leading tags it shares, in that order, with both neighbours; any other\n // tag would open just before it or close just after it. Repeat until nothing changes.\n const tagsOf = (a: Atom) => TAGS.filter(t => a.style & BIT[t])\n const prefix = (x: EmphasisTag[], y: EmphasisTag[]) => { let n = 0; while (n < x.length && n < y.length && x[n] === y[n]) n++; return n }\n for (let changed = true; changed;) {\n changed = false\n list.forEach((a, i) => {\n if (a.ch !== ' ' || !a.style) return\n const own = tagsOf(a)\n const keep = Math.min(prefix(own, list[i - 1] ? tagsOf(list[i - 1]) : []), prefix(own, list[i + 1] ? tagsOf(list[i + 1]) : []))\n if (keep < own.length) {\n a.style = own.slice(0, keep).reduce((m, t) => m | BIT[t], 0)\n changed = true\n }\n })\n }\n // 4. Emit with a stack kept in b, i, u order, closing and reopening only where the set changes.\n let out = ''\n let stack: EmphasisTag[] = []\n for (const a of list) {\n const want = TAGS.filter(t => a.style & BIT[t])\n let common = 0\n while (common < stack.length && common < want.length && stack[common] === want[common]) common++\n for (let k = stack.length - 1; k >= common; k--) out += `</${stack[k]}>`\n for (let k = common; k < want.length; k++) out += `<${want[k]}>`\n stack = want\n out += a.ref ? `<ref:${a.ref.join('/')}>` : a.param ? `<param:${a.param}>` : escapeMarkupText(a.ch!)\n }\n for (let k = stack.length - 1; k >= 0; k--) out += `</${stack[k]}>`\n return out\n}\n\n// All references in a paragraph, in order.\nexport function findReferences(nodes: MarkupNode[]): { path: string[], offset: number }[] {\n const refs: { path: string[], offset: number }[] = []\n const walk = (list: MarkupNode[]) => list.forEach(n => {\n if (n.type === 'ref') refs.push({ path: n.path, offset: n.offset })\n else if (n.type === 'emphasis') walk(n.children)\n })\n walk(nodes)\n return refs\n}\n\n// All placeholders in a paragraph, in order.\nexport function findParams(nodes: MarkupNode[]): { key: string, offset: number }[] {\n const out: { key: string, offset: number }[] = []\n const walk = (list: MarkupNode[]) => list.forEach(n => {\n if (n.type === 'param') out.push({ key: n.key, offset: n.offset })\n else if (n.type === 'emphasis') walk(n.children)\n })\n walk(nodes)\n return out\n}\n\n// Plain text of a paragraph with markup removed (references by path, placeholders as [key]).\nexport function markupToPlainText(nodes: MarkupNode[]): string {\n return nodes.map(n =>\n n.type === 'text' ? n.value :\n n.type === 'ref' ? n.path.join('/') :\n n.type === 'param' ? `[${n.key}]` :\n markupToPlainText(n.children)).join('')\n}\n\n// Escape literal text for inclusion in paragraph markup.\nexport function escapeMarkupText(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/</g, '\\\\<')\n}\n", "// This is an unfortunate replacement for @sindresorhus/is that we need to\n// re-implement for performance purposes. In particular the is.observable()\n// check is expensive, and unnecessary for our purposes. The values returned\n// are compatible with @sindresorhus/is, however.\n\nconst typeofs = [\n 'string',\n 'number',\n 'bigint',\n 'symbol'\n]\n\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'HTMLElement',\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array'\n]\n\n/**\n * @param {any} value\n * @returns {string}\n */\nexport function is (value) {\n if (value === null) {\n return 'null'\n }\n if (value === undefined) {\n return 'undefined'\n }\n if (value === true || value === false) {\n return 'boolean'\n }\n const typeOf = typeof value\n if (typeofs.includes(typeOf)) {\n return typeOf\n }\n /* c8 ignore next 4 */\n // not going to bother testing this, it's not going to be valid anyway\n if (typeOf === 'function') {\n return 'Function'\n }\n if (Array.isArray(value)) {\n return 'Array'\n }\n if (isBuffer(value)) {\n return 'Buffer'\n }\n const objectType = getObjectType(value)\n if (objectType) {\n return objectType\n }\n /* c8 ignore next */\n return 'Object'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nfunction isBuffer (value) {\n return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value)\n}\n\n/**\n * @param {any} value\n * @returns {string|undefined}\n */\nfunction getObjectType (value) {\n const objectTypeName = Object.prototype.toString.call(value).slice(8, -1)\n if (objectTypeNames.includes(objectTypeName)) {\n return objectTypeName\n }\n /* c8 ignore next */\n return undefined\n}\n", "class Type {\n /**\n * @param {number} major\n * @param {string} name\n * @param {boolean} terminal\n */\n constructor (major, name, terminal) {\n this.major = major\n this.majorEncoded = major << 5\n this.name = name\n this.terminal = terminal\n }\n\n /* c8 ignore next 3 */\n toString () {\n return `Type[${this.major}].${this.name}`\n }\n\n /**\n * @param {Type} typ\n * @returns {number}\n */\n compare (typ) {\n /* c8 ignore next 1 */\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0\n }\n}\n\n// convert to static fields when better supported\nType.uint = new Type(0, 'uint', true)\nType.negint = new Type(1, 'negint', true)\nType.bytes = new Type(2, 'bytes', true)\nType.string = new Type(3, 'string', true)\nType.array = new Type(4, 'array', false)\nType.map = new Type(5, 'map', false)\nType.tag = new Type(6, 'tag', false) // terminal?\nType.float = new Type(7, 'float', true)\nType.false = new Type(7, 'false', true)\nType.true = new Type(7, 'true', true)\nType.null = new Type(7, 'null', true)\nType.undefined = new Type(7, 'undefined', true)\nType.break = new Type(7, 'break', true)\n// Type.indefiniteLength = new Type(0, 'indefiniteLength', true)\n\nclass Token {\n /**\n * @param {Type} type\n * @param {any} [value]\n * @param {number} [encodedLength]\n */\n constructor (type, value, encodedLength) {\n this.type = type\n this.value = value\n this.encodedLength = encodedLength\n /** @type {Uint8Array|undefined} */\n this.encodedBytes = undefined\n /** @type {Uint8Array|undefined} */\n this.byteValue = undefined\n }\n\n /* c8 ignore next 3 */\n toString () {\n return `Token[${this.type}].${this.value}`\n }\n}\n\nexport { Type, Token }\n", "// Use Uint8Array directly in the browser, use Buffer in Node.js but don't\n// speak its name directly to avoid bundlers pulling in the `Buffer` polyfill\n\n// @ts-ignore\nexport const useBuffer = globalThis.process &&\n // @ts-ignore\n !globalThis.process.browser &&\n // @ts-ignore\n globalThis.Buffer &&\n // @ts-ignore\n typeof globalThis.Buffer.isBuffer === 'function'\n\nconst textDecoder = new TextDecoder()\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {Uint8Array} buf\n * @returns {boolean}\n */\nfunction isBuffer (buf) {\n // @ts-ignore\n return useBuffer && globalThis.Buffer.isBuffer(buf)\n}\n\n/**\n * @param {Uint8Array|number[]} buf\n * @returns {Uint8Array}\n */\nexport function asU8A (buf) {\n /* c8 ignore next */\n if (!(buf instanceof Uint8Array)) {\n return Uint8Array.from(buf)\n }\n return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf\n}\n\nexport const toString = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return end - start > 64\n ? // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8')\n : utf8Slice(bytes, start, end)\n }\n /* c8 ignore next 11 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return end - start > 64\n ? textDecoder.decode(bytes.subarray(start, end))\n : utf8Slice(bytes, start, end)\n }\n\nexport const fromString = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {string} string\n */\n (string) => {\n return string.length > 64\n ? // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(string)\n : utf8ToBytes(string)\n }\n /* c8 ignore next 7 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {string} string\n */\n (string) => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string)\n }\n\n/**\n * Buffer variant not fast enough for what we need\n * @param {number[]} arr\n * @returns {Uint8Array}\n */\nexport const fromArray = (arr) => {\n return Uint8Array.from(arr)\n}\n\nexport const slice = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end))\n }\n return bytes.slice(start, end)\n }\n /* c8 ignore next 9 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return bytes.slice(start, end)\n }\n\nexport const concat = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\n (chunks, length) => {\n // might get a stray plain Array here\n /* c8 ignore next 1 */\n chunks = chunks.map((c) => c instanceof Uint8Array\n ? c\n // this case is occasionally missed during test runs so becomes coverage-flaky\n /* c8 ignore next 4 */\n : // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(c))\n // @ts-ignore\n return asU8A(globalThis.Buffer.concat(chunks, length))\n }\n /* c8 ignore next 19 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\n (chunks, length) => {\n const out = new Uint8Array(length)\n let off = 0\n for (let b of chunks) {\n if (off + b.length > out.length) {\n // final chunk that's bigger than we need\n b = b.subarray(0, out.length - off)\n }\n out.set(b, off)\n off += b.length\n }\n return out\n }\n\nexport const alloc = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {number} size\n * @returns {Uint8Array}\n */\n (size) => {\n // we always write over the contents we expose so this should be safe\n // @ts-ignore\n return globalThis.Buffer.allocUnsafe(size)\n }\n /* c8 ignore next 8 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {number} size\n * @returns {Uint8Array}\n */\n (size) => {\n return new Uint8Array(size)\n }\n\nexport const toHex = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} d\n * @returns {string}\n */\n (d) => {\n if (typeof d === 'string') {\n return d\n }\n // @ts-ignore\n return globalThis.Buffer.from(toBytes(d)).toString('hex')\n }\n /* c8 ignore next 12 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} d\n * @returns {string}\n */\n (d) => {\n if (typeof d === 'string') {\n return d\n }\n // @ts-ignore not smart enough to figure this out\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${p}${c.toString(16).padStart(2, '0')}`, '')\n }\n\nexport const fromHex = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {string|Uint8Array} hex\n * @returns {Uint8Array}\n */\n (hex) => {\n if (hex instanceof Uint8Array) {\n return hex\n }\n // @ts-ignore\n return globalThis.Buffer.from(hex, 'hex')\n }\n /* c8 ignore next 17 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {string|Uint8Array} hex\n * @returns {Uint8Array}\n */\n (hex) => {\n if (hex instanceof Uint8Array) {\n return hex\n }\n if (!hex.length) {\n return new Uint8Array(0)\n }\n return new Uint8Array(hex.split('')\n .map((/** @type {string} */ c, /** @type {number} */ i, /** @type {string[]} */ d) => i % 2 === 0 ? `0x${c}${d[i + 1]}` : '')\n .filter(Boolean)\n .map((/** @type {string} */ e) => parseInt(e, 16)))\n }\n\n/**\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView} obj\n * @returns {Uint8Array}\n */\nfunction toBytes (obj) {\n if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n return obj\n }\n if (obj instanceof ArrayBuffer) {\n return new Uint8Array(obj)\n }\n if (ArrayBuffer.isView(obj)) {\n return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength)\n }\n /* c8 ignore next */\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compare (b1, b2) {\n /* c8 ignore next 5 */\n if (isBuffer(b1) && isBuffer(b2)) {\n // probably not possible to get here in the current API\n // @ts-ignore Buffer\n return b1.compare(b2)\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] === b2[i]) {\n continue\n }\n return b1[i] < b2[i] ? -1 : 1\n } /* c8 ignore next 3 */\n return 0\n}\n\n// The below code is taken from https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n// Licensed Apache-2.0.\n\n/**\n * @param {string} str\n * @returns {number[]}\n */\nfunction utf8ToBytes (str) {\n const out = []\n let p = 0\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i)\n if (c < 128) {\n out[p++] = c\n } else if (c < 2048) {\n out[p++] = (c >> 6) | 192\n out[p++] = (c & 63) | 128\n } else if (\n ((c & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF)\n out[p++] = (c >> 18) | 240\n out[p++] = ((c >> 12) & 63) | 128\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n } else {\n out[p++] = (c >> 12) | 224\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n }\n }\n return out\n}\n\n// The below code is mostly taken from https://github.com/feross/buffer\n// Licensed MIT. Copyright (c) Feross Aboukhadijeh\n\n/**\n * @param {Uint8Array} buf\n * @param {number} offset\n * @param {number} end\n * @returns {string}\n */\nfunction utf8Slice (buf, offset, end) {\n const res = []\n\n while (offset < end) {\n const firstByte = buf[offset]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xef) ? 4 : (firstByte > 0xdf) ? 3 : (firstByte > 0xbf) ? 2 : 1\n\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[offset + 1]\n if ((secondByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0x1f) << 0x6 | (secondByte & 0x3f)\n if (tempCodePoint > 0x7f) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[offset + 1]\n thirdByte = buf[offset + 2]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0xc | (secondByte & 0x3f) << 0x6 | (thirdByte & 0x3f)\n /* c8 ignore next 3 */\n if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[offset + 1]\n thirdByte = buf[offset + 2]\n fourthByte = buf[offset + 3]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80 && (fourthByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0x12 | (secondByte & 0x3f) << 0xc | (thirdByte & 0x3f) << 0x6 | (fourthByte & 0x3f)\n if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n /* c8 ignore next 5 */\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xfffd\n bytesPerSequence = 1\n } else if (codePoint > 0xffff) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3ff | 0xd800)\n codePoint = 0xdc00 | codePoint & 0x3ff\n }\n\n res.push(codePoint)\n offset += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\n/**\n * @param {number[]} codePoints\n * @returns {string}\n */\nexport function decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n /* c8 ignore next 10 */\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n", "/**\n * Bl is a list of byte chunks, similar to https://github.com/rvagg/bl but for\n * writing rather than reading.\n * A Bl object accepts set() operations for individual bytes and copyTo() for\n * inserting byte arrays. These write operations don't automatically increment\n * the internal cursor so its \"length\" won't be changed. Instead, increment()\n * must be called to extend its length to cover the inserted data.\n * The toBytes() call will convert all internal memory to a single Uint8Array of\n * the correct length, truncating any data that is stored but hasn't been\n * included by an increment().\n * get() can retrieve a single byte.\n * All operations (except toBytes()) take an \"offset\" argument that will perform\n * the write at the offset _from the current cursor_. For most operations this\n * will be `0` to write at the current cursor position but it can be ahead of\n * the current cursor. Negative offsets probably work but are untested.\n */\n\n// TODO: ipjs doesn't support this, only for test files: https://github.com/mikeal/ipjs/blob/master/src/package/testFile.js#L39\nimport { alloc, concat, slice } from './byte-utils.js'\n\n// the ts-ignores in this file are almost all for the `Uint8Array|number[]` duality that exists\n// for perf reasons. Consider better approaches to this or removing it entirely, it is quite\n// risky because of some assumptions about small chunks === number[] and everything else === Uint8Array.\n\nconst defaultChunkSize = 256\n\nexport class Bl {\n /**\n * @param {number} [chunkSize]\n */\n constructor (chunkSize = defaultChunkSize) {\n this.chunkSize = chunkSize\n /** @type {number} */\n this.cursor = 0\n /** @type {number} */\n this.maxCursor = -1\n /** @type {(Uint8Array|number[])[]} */\n this.chunks = []\n // keep the first chunk around if we can to save allocations for future encodes\n /** @type {Uint8Array|number[]|null} */\n this._initReuseChunk = null\n }\n\n reset () {\n this.cursor = 0\n this.maxCursor = -1\n if (this.chunks.length) {\n this.chunks = []\n }\n if (this._initReuseChunk !== null) {\n this.chunks.push(this._initReuseChunk)\n this.maxCursor = this._initReuseChunk.length - 1\n }\n }\n\n /**\n * @param {Uint8Array|number[]} bytes\n */\n push (bytes) {\n let topChunk = this.chunks[this.chunks.length - 1]\n const newMax = this.cursor + bytes.length\n if (newMax <= this.maxCursor + 1) {\n // we have at least one chunk and we can fit these bytes into that chunk\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n // @ts-ignore\n topChunk.set(bytes, chunkPos)\n } else {\n // can't fit it in\n if (topChunk) {\n // trip the last chunk to `cursor` if we need to\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n if (chunkPos < topChunk.length) {\n // @ts-ignore\n this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos)\n this.maxCursor = this.cursor - 1\n }\n }\n if (bytes.length < 64 && bytes.length < this.chunkSize) {\n // make a new chunk and copy the new one into it\n topChunk = alloc(this.chunkSize)\n this.chunks.push(topChunk)\n this.maxCursor += topChunk.length\n if (this._initReuseChunk === null) {\n this._initReuseChunk = topChunk\n }\n // @ts-ignore\n topChunk.set(bytes, 0)\n } else {\n // push the new bytes in as its own chunk\n this.chunks.push(bytes)\n this.maxCursor += bytes.length\n }\n }\n this.cursor += bytes.length\n }\n\n /**\n * @param {boolean} [reset]\n * @returns {Uint8Array}\n */\n toBytes (reset = false) {\n let byts\n if (this.chunks.length === 1) {\n const chunk = this.chunks[0]\n if (reset && this.cursor > chunk.length / 2) {\n /* c8 ignore next 2 */\n // @ts-ignore\n byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor)\n this._initReuseChunk = null\n this.chunks = []\n } else {\n // @ts-ignore\n byts = slice(chunk, 0, this.cursor)\n }\n } else {\n // @ts-ignore\n byts = concat(this.chunks, this.cursor)\n }\n if (reset) {\n this.reset()\n }\n return byts\n }\n}\n", "const decodeErrPrefix = 'CBOR decode error:'\nconst encodeErrPrefix = 'CBOR encode error:'\n\nconst uintMinorPrefixBytes = []\nuintMinorPrefixBytes[23] = 1\nuintMinorPrefixBytes[24] = 2\nuintMinorPrefixBytes[25] = 3\nuintMinorPrefixBytes[26] = 5\nuintMinorPrefixBytes[27] = 9\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} need\n */\nfunction assertEnoughData (data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${decodeErrPrefix} not enough data for type`)\n }\n}\n\nexport {\n decodeErrPrefix,\n encodeErrPrefix,\n uintMinorPrefixBytes,\n assertEnoughData\n}\n", "/* globals BigInt */\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix, assertEnoughData } from './common.js'\n\nexport const uintBoundaries = [24, 256, 65536, 4294967296, BigInt('18446744073709551616')]\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint8 (data, offset, options) {\n assertEnoughData(data, offset, 1)\n const value = data[offset]\n if (options.strict === true && value < uintBoundaries[0]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint16 (data, offset, options) {\n assertEnoughData(data, offset, 2)\n const value = (data[offset] << 8) | data[offset + 1]\n if (options.strict === true && value < uintBoundaries[1]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint32 (data, offset, options) {\n assertEnoughData(data, offset, 4)\n const value = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n if (options.strict === true && value < uintBoundaries[2]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number|bigint}\n */\nexport function readUint64 (data, offset, options) {\n // assume BigInt, convert back to Number if within safe range\n assertEnoughData(data, offset, 8)\n const hi = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n const lo = (data[offset + 4] * 16777216 /* 2 ** 24 */) + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7]\n const value = (BigInt(hi) << BigInt(32)) + BigInt(lo)\n if (options.strict === true && value < uintBoundaries[3]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n if (value <= Number.MAX_SAFE_INTEGER) {\n return Number(value)\n }\n if (options.allowBigInt === true) {\n return value\n }\n throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n}\n\n/* not required thanks to quick[] list\nconst oneByteTokens = new Array(24).fill(0).map((v, i) => new Token(Type.uint, i, 1))\nexport function decodeUintCompact (data, pos, minor, options) {\n return oneByteTokens[minor]\n}\n*/\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint8 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint16 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint32 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint64 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeUint (buf, token) {\n return encodeUintValue(buf, 0, token.value)\n}\n\n/**\n * @param {Bl} buf\n * @param {number} major\n * @param {number|bigint} uint\n */\nexport function encodeUintValue (buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint)\n // pack into one byte, minor=0, additional=value\n buf.push([major | nuint])\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint)\n // pack into two byte, minor=0, additional=24\n buf.push([major | 24, nuint])\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint)\n // pack into three byte, minor=0, additional=25\n buf.push([major | 25, nuint >>> 8, nuint & 0xff])\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint)\n // pack into five byte, minor=0, additional=26\n buf.push([major | 26, (nuint >>> 24) & 0xff, (nuint >>> 16) & 0xff, (nuint >>> 8) & 0xff, nuint & 0xff])\n } else {\n const buint = BigInt(uint)\n if (buint < uintBoundaries[4]) {\n // pack into nine byte, minor=0, additional=27\n const set = [major | 27, 0, 0, 0, 0, 0, 0, 0]\n // simulate bitwise above 32 bits\n let lo = Number(buint & BigInt(0xffffffff))\n let hi = Number(buint >> BigInt(32) & BigInt(0xffffffff))\n set[8] = lo & 0xff\n lo = lo >> 8\n set[7] = lo & 0xff\n lo = lo >> 8\n set[6] = lo & 0xff\n lo = lo >> 8\n set[5] = lo & 0xff\n set[4] = hi & 0xff\n hi = hi >> 8\n set[3] = hi & 0xff\n hi = hi >> 8\n set[2] = hi & 0xff\n hi = hi >> 8\n set[1] = hi & 0xff\n buf.push(set)\n } else {\n throw new Error(`${decodeErrPrefix} encountered BigInt larger than allowable range`)\n }\n }\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeUint.encodedSize = function encodedSize (token) {\n return encodeUintValue.encodedSize(token.value)\n}\n\n/**\n * @param {number} uint\n * @returns {number}\n */\nencodeUintValue.encodedSize = function encodedSize (uint) {\n if (uint < uintBoundaries[0]) {\n return 1\n }\n if (uint < uintBoundaries[1]) {\n return 2\n }\n if (uint < uintBoundaries[2]) {\n return 3\n }\n if (uint < uintBoundaries[3]) {\n return 5\n }\n return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeUint.compareTokens = function compareTokens (tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : /* c8 ignore next */ 0\n}\n", "/* eslint-env es2020 */\n\nimport { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint8 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint16 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint32 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5)\n}\n\nconst neg1b = BigInt(-1)\nconst pos1b = BigInt(1)\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint64 (data, pos, _minor, options) {\n const int = uint.readUint64(data, pos + 1, options)\n if (typeof int !== 'bigint') {\n const value = -1 - int\n if (value >= Number.MIN_SAFE_INTEGER) {\n return new Token(Type.negint, value, 9)\n }\n }\n if (options.allowBigInt !== true) {\n throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n }\n return new Token(Type.negint, neg1b - BigInt(int), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeNegint (buf, token) {\n const negint = token.value\n const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n uint.encodeUintValue(buf, token.type.majorEncoded, unsigned)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeNegint.encodedSize = function encodedSize (token) {\n const negint = token.value\n const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n /* c8 ignore next 4 */\n // handled by quickEncode, we shouldn't get here but it's included for completeness\n if (unsigned < uint.uintBoundaries[0]) {\n return 1\n }\n if (unsigned < uint.uintBoundaries[1]) {\n return 2\n }\n if (unsigned < uint.uintBoundaries[2]) {\n return 3\n }\n if (unsigned < uint.uintBoundaries[3]) {\n return 5\n }\n return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeNegint.compareTokens = function compareTokens (tok1, tok2) {\n // opposite of the uint comparison since we store the uint version in bytes\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : /* c8 ignore next */ 0\n}\n", "import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { compare, fromString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length) {\n assertEnoughData(data, pos, prefix + length)\n const buf = slice(data, pos + prefix, pos + prefix + length)\n return new Token(Type.bytes, buf, prefix + length)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeBytesCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer bytes lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * `encodedBytes` allows for caching when we do a byte version of a string\n * for key sorting purposes\n * @param {Token} token\n * @returns {Uint8Array}\n */\nfunction tokenBytes (token) {\n if (token.encodedBytes === undefined) {\n token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value\n }\n // @ts-ignore c'mon\n return token.encodedBytes\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeBytes (buf, token) {\n const bytes = tokenBytes(token)\n uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length)\n buf.push(bytes)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeBytes.encodedSize = function encodedSize (token) {\n const bytes = tokenBytes(token)\n return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeBytes.compareTokens = function compareTokens (tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2))\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compareBytes (b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2)\n}\n", "import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { toString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length, options) {\n const totLength = prefix + length\n assertEnoughData(data, pos, totLength)\n const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength)\n if (options.retainStringBytes === true) {\n tok.byteValue = slice(data, pos + prefix, pos + totLength)\n }\n return tok\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeStringCompact (data, pos, minor, options) {\n return toToken(data, pos, 1, minor, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options)\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer string lengths not supported`)\n }\n return toToken(data, pos, 9, l, options)\n}\n\nexport const encodeString = encodeBytes\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n return new Token(Type.array, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeArrayCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer array lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArrayIndefinite (data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeArray (buf, token) {\n uint.encodeUintValue(buf, Type.array.majorEncoded, token.value)\n}\n\n// using an array as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeArray.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeArray.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n return new Token(Type.map, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeMapCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer map lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMapIndefinite (data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeMap (buf, token) {\n uint.encodeUintValue(buf, Type.map.majorEncoded, token.value)\n}\n\n// using a map as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeMap.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeMap.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeTagCompact (_data, _pos, minor, _options) {\n return new Token(Type.tag, minor, 1)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag8 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag16 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag32 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag64 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeTag (buf, token) {\n uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value)\n}\n\nencodeTag.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeTag.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n", "// TODO: shift some of the bytes logic to bytes-utils so we can use Buffer\n// where possible\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix } from './common.js'\nimport { encodeUint } from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n */\n\nconst MINOR_FALSE = 20\nconst MINOR_TRUE = 21\nconst MINOR_NULL = 22\nconst MINOR_UNDEFINED = 23\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUndefined (_data, _pos, _minor, options) {\n if (options.allowUndefined === false) {\n throw new Error(`${decodeErrPrefix} undefined values are not supported`)\n } else if (options.coerceUndefinedToNull === true) {\n return new Token(Type.null, null, 1)\n }\n return new Token(Type.undefined, undefined, 1)\n}\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBreak (_data, _pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return new Token(Type.break, undefined, 1)\n}\n\n/**\n * @param {number} value\n * @param {number} bytes\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction createToken (value, bytes, options) {\n if (options) {\n if (options.allowNaN === false && Number.isNaN(value)) {\n throw new Error(`${decodeErrPrefix} NaN values are not supported`)\n }\n if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n throw new Error(`${decodeErrPrefix} Infinity values are not supported`)\n }\n }\n return new Token(Type.float, value, bytes)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat16 (data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat32 (data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat64 (data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n * @param {EncodeOptions} options\n */\nexport function encodeFloat (buf, token, options) {\n const float = token.value\n\n if (float === false) {\n buf.push([Type.float.majorEncoded | MINOR_FALSE])\n } else if (float === true) {\n buf.push([Type.float.majorEncoded | MINOR_TRUE])\n } else if (float === null) {\n buf.push([Type.float.majorEncoded | MINOR_NULL])\n } else if (float === undefined) {\n buf.push([Type.float.majorEncoded | MINOR_UNDEFINED])\n } else {\n let decoded\n let success = false\n if (!options || options.float64 !== true) {\n encodeFloat16(float)\n decoded = readFloat16(ui8a, 1)\n if (float === decoded || Number.isNaN(float)) {\n ui8a[0] = 0xf9\n buf.push(ui8a.slice(0, 3))\n success = true\n } else {\n encodeFloat32(float)\n decoded = readFloat32(ui8a, 1)\n if (float === decoded) {\n ui8a[0] = 0xfa\n buf.push(ui8a.slice(0, 5))\n success = true\n }\n }\n }\n if (!success) {\n encodeFloat64(float)\n decoded = readFloat64(ui8a, 1)\n ui8a[0] = 0xfb\n buf.push(ui8a.slice(0, 9))\n }\n }\n}\n\n/**\n * @param {Token} token\n * @param {EncodeOptions} options\n * @returns {number}\n */\nencodeFloat.encodedSize = function encodedSize (token, options) {\n const float = token.value\n\n if (float === false || float === true || float === null || float === undefined) {\n return 1\n }\n\n if (!options || options.float64 !== true) {\n encodeFloat16(float)\n let decoded = readFloat16(ui8a, 1)\n if (float === decoded || Number.isNaN(float)) {\n return 3\n }\n encodeFloat32(float)\n decoded = readFloat32(ui8a, 1)\n if (float === decoded) {\n return 5\n }\n }\n return 9\n}\n\nconst buffer = new ArrayBuffer(9)\nconst dataView = new DataView(buffer, 1)\nconst ui8a = new Uint8Array(buffer, 0)\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat16 (inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 0x7c00, false)\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 0xfc00, false)\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 0x7e00, false)\n } else {\n dataView.setFloat32(0, inp)\n const valu32 = dataView.getUint32(0)\n const exponent = (valu32 & 0x7f800000) >> 23\n const mantissa = valu32 & 0x7fffff\n\n /* c8 ignore next 6 */\n if (exponent === 0xff) {\n // too big, Infinity, but this should be hard (impossible?) to trigger\n dataView.setUint16(0, 0x7c00, false)\n } else if (exponent === 0x00) {\n // 0.0, -0.0 and subnormals, shouldn't be possible to get here because 0.0 should be counted as an int\n dataView.setUint16(0, ((inp & 0x80000000) >> 16) | (mantissa >> 13), false)\n } else { // standard numbers\n // chunks of logic here borrowed from https://github.com/PJK/libcbor/blob/c78f437182533e3efa8d963ff4b945bb635c2284/src/cbor/encoding.c#L127\n const logicalExponent = exponent - 127\n // Now we know that 2^exponent <= 0 logically\n /* c8 ignore next 6 */\n if (logicalExponent < -24) {\n /* No unambiguous representation exists, this float is not a half float\n and is too small to be represented using a half, round off to zero.\n Consistent with the reference implementation. */\n // should be difficult (impossible?) to get here in JS\n dataView.setUint16(0, 0)\n } else if (logicalExponent < -14) {\n /* Offset the remaining decimal places by shifting the significand, the\n value is lost. This is an implementation decision that works around the\n absence of standard half-float in the language. */\n dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | /* sign bit */ (1 << (24 + logicalExponent)), false)\n } else {\n dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | ((logicalExponent + 15) << 10) | (mantissa >> 13), false)\n }\n }\n }\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat16 (ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${decodeErrPrefix} not enough data for float16`)\n }\n\n const half = (ui8a[pos] << 8) + ui8a[pos + 1]\n if (half === 0x7c00) {\n return Infinity\n }\n if (half === 0xfc00) {\n return -Infinity\n }\n if (half === 0x7e00) {\n return NaN\n }\n const exp = (half >> 10) & 0x1f\n const mant = half & 0x3ff\n let val\n if (exp === 0) {\n val = mant * (2 ** -24)\n } else if (exp !== 31) {\n val = (mant + 1024) * (2 ** (exp - 25))\n /* c8 ignore next 4 */\n } else {\n // may not be possible to get here\n val = mant === 0 ? Infinity : NaN\n }\n return (half & 0x8000) ? -val : val\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat32 (inp) {\n dataView.setFloat32(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat32 (ui8a, pos) {\n if (ui8a.length - pos < 4) {\n throw new Error(`${decodeErrPrefix} not enough data for float32`)\n }\n const offset = (ui8a.byteOffset || 0) + pos\n return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false)\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat64 (inp) {\n dataView.setFloat64(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat64 (ui8a, pos) {\n if (ui8a.length - pos < 8) {\n throw new Error(`${decodeErrPrefix} not enough data for float64`)\n }\n const offset = (ui8a.byteOffset || 0) + pos\n return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false)\n}\n\n/**\n * @param {Token} _tok1\n * @param {Token} _tok2\n * @returns {number}\n */\nencodeFloat.compareTokens = encodeUint.compareTokens\n/*\nencodeFloat.compareTokens = function compareTokens (_tok1, _tok2) {\n return _tok1\n throw new Error(`${encodeErrPrefix} cannot use floats as map keys`)\n}\n*/\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport * as negint from './1negint.js'\nimport * as bytes from './2bytes.js'\nimport * as string from './3string.js'\nimport * as array from './4array.js'\nimport * as map from './5map.js'\nimport * as tag from './6tag.js'\nimport * as float from './7float.js'\nimport { decodeErrPrefix } from './common.js'\nimport { fromArray } from './byte-utils.js'\n\n/**\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n */\nfunction invalidMinor (data, pos, minor) {\n throw new Error(`${decodeErrPrefix} encountered invalid minor (${minor}) for major ${data[pos] >>> 5}`)\n}\n\n/**\n * @param {string} msg\n * @returns {()=>any}\n */\nfunction errorer (msg) {\n return () => { throw new Error(`${decodeErrPrefix} ${msg}`) }\n}\n\n/** @type {((data:Uint8Array, pos:number, minor:number, options?:DecodeOptions) => any)[]} */\nexport const jump = []\n\n// unsigned integer, 0x00..0x17 (0..23)\nfor (let i = 0; i <= 0x17; i++) {\n jump[i] = invalidMinor // uint.decodeUintCompact, handled by quick[]\n}\njump[0x18] = uint.decodeUint8 // unsigned integer, one-byte uint8_t follows\njump[0x19] = uint.decodeUint16 // unsigned integer, two-byte uint16_t follows\njump[0x1a] = uint.decodeUint32 // unsigned integer, four-byte uint32_t follows\njump[0x1b] = uint.decodeUint64 // unsigned integer, eight-byte uint64_t follows\njump[0x1c] = invalidMinor\njump[0x1d] = invalidMinor\njump[0x1e] = invalidMinor\njump[0x1f] = invalidMinor\n// negative integer, -1-0x00..-1-0x17 (-1..-24)\nfor (let i = 0x20; i <= 0x37; i++) {\n jump[i] = invalidMinor // negintDecode, handled by quick[]\n}\njump[0x38] = negint.decodeNegint8 // negative integer, -1-n one-byte uint8_t for n follows\njump[0x39] = negint.decodeNegint16 // negative integer, -1-n two-byte uint16_t for n follows\njump[0x3a] = negint.decodeNegint32 // negative integer, -1-n four-byte uint32_t for follows\njump[0x3b] = negint.decodeNegint64 // negative integer, -1-n eight-byte uint64_t for follows\njump[0x3c] = invalidMinor\njump[0x3d] = invalidMinor\njump[0x3e] = invalidMinor\njump[0x3f] = invalidMinor\n// byte string, 0x00..0x17 bytes follow\nfor (let i = 0x40; i <= 0x57; i++) {\n jump[i] = bytes.decodeBytesCompact\n}\njump[0x58] = bytes.decodeBytes8 // byte string, one-byte uint8_t for n, and then n bytes follow\njump[0x59] = bytes.decodeBytes16 // byte string, two-byte uint16_t for n, and then n bytes follow\njump[0x5a] = bytes.decodeBytes32 // byte string, four-byte uint32_t for n, and then n bytes follow\njump[0x5b] = bytes.decodeBytes64 // byte string, eight-byte uint64_t for n, and then n bytes follow\njump[0x5c] = invalidMinor\njump[0x5d] = invalidMinor\njump[0x5e] = invalidMinor\njump[0x5f] = errorer('indefinite length bytes/strings are not supported') // byte string, byte strings follow, terminated by \"break\"\n// UTF-8 string 0x00..0x17 bytes follow\nfor (let i = 0x60; i <= 0x77; i++) {\n jump[i] = string.decodeStringCompact\n}\njump[0x78] = string.decodeString8 // UTF-8 string, one-byte uint8_t for n, and then n bytes follow\njump[0x79] = string.decodeString16 // UTF-8 string, two-byte uint16_t for n, and then n bytes follow\njump[0x7a] = string.decodeString32 // UTF-8 string, four-byte uint32_t for n, and then n bytes follow\njump[0x7b] = string.decodeString64 // UTF-8 string, eight-byte uint64_t for n, and then n bytes follow\njump[0x7c] = invalidMinor\njump[0x7d] = invalidMinor\njump[0x7e] = invalidMinor\njump[0x7f] = errorer('indefinite length bytes/strings are not supported') // UTF-8 strings follow, terminated by \"break\"\n// array, 0x00..0x17 data items follow\nfor (let i = 0x80; i <= 0x97; i++) {\n jump[i] = array.decodeArrayCompact\n}\njump[0x98] = array.decodeArray8 // array, one-byte uint8_t for n, and then n data items follow\njump[0x99] = array.decodeArray16 // array, two-byte uint16_t for n, and then n data items follow\njump[0x9a] = array.decodeArray32 // array, four-byte uint32_t for n, and then n data items follow\njump[0x9b] = array.decodeArray64 // array, eight-byte uint64_t for n, and then n data items follow\njump[0x9c] = invalidMinor\njump[0x9d] = invalidMinor\njump[0x9e] = invalidMinor\njump[0x9f] = array.decodeArrayIndefinite // array, data items follow, terminated by \"break\"\n// map, 0x00..0x17 pairs of data items follow\nfor (let i = 0xa0; i <= 0xb7; i++) {\n jump[i] = map.decodeMapCompact\n}\njump[0xb8] = map.decodeMap8 // map, one-byte uint8_t for n, and then n pairs of data items follow\njump[0xb9] = map.decodeMap16 // map, two-byte uint16_t for n, and then n pairs of data items follow\njump[0xba] = map.decodeMap32 // map, four-byte uint32_t for n, and then n pairs of data items follow\njump[0xbb] = map.decodeMap64 // map, eight-byte uint64_t for n, and then n pairs of data items follow\njump[0xbc] = invalidMinor\njump[0xbd] = invalidMinor\njump[0xbe] = invalidMinor\njump[0xbf] = map.decodeMapIndefinite // map, pairs of data items follow, terminated by \"break\"\n// tags\nfor (let i = 0xc0; i <= 0xd7; i++) {\n jump[i] = tag.decodeTagCompact\n}\njump[0xd8] = tag.decodeTag8\njump[0xd9] = tag.decodeTag16\njump[0xda] = tag.decodeTag32\njump[0xdb] = tag.decodeTag64\njump[0xdc] = invalidMinor\njump[0xdd] = invalidMinor\njump[0xde] = invalidMinor\njump[0xdf] = invalidMinor\n// 0xe0..0xf3 simple values, unsupported\nfor (let i = 0xe0; i <= 0xf3; i++) {\n jump[i] = errorer('simple values are not supported')\n}\njump[0xf4] = invalidMinor // false, handled by quick[]\njump[0xf5] = invalidMinor // true, handled by quick[]\njump[0xf6] = invalidMinor // null, handled by quick[]\njump[0xf7] = float.decodeUndefined // undefined\njump[0xf8] = errorer('simple values are not supported') // simple value, one byte follows, unsupported\njump[0xf9] = float.decodeFloat16 // half-precision float (two-byte IEEE 754)\njump[0xfa] = float.decodeFloat32 // single-precision float (four-byte IEEE 754)\njump[0xfb] = float.decodeFloat64 // double-precision float (eight-byte IEEE 754)\njump[0xfc] = invalidMinor\njump[0xfd] = invalidMinor\njump[0xfe] = invalidMinor\njump[0xff] = float.decodeBreak // \"break\" stop code\n\n/** @type {Token[]} */\nexport const quick = []\n// ints <24\nfor (let i = 0; i < 24; i++) {\n quick[i] = new Token(Type.uint, i, 1)\n}\n// negints >= -24\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new Token(Type.negint, i, 1)\n}\n// empty bytes\nquick[0x40] = new Token(Type.bytes, new Uint8Array(0), 1)\n// empty string\nquick[0x60] = new Token(Type.string, '', 1)\n// empty list\nquick[0x80] = new Token(Type.array, 0, 1)\n// empty map\nquick[0xa0] = new Token(Type.map, 0, 1)\n// false\nquick[0xf4] = new Token(Type.false, false, 1)\n// true\nquick[0xf5] = new Token(Type.true, true, 1)\n// null\nquick[0xf6] = new Token(Type.null, null, 1)\n\n/**\n * @param {Token} token\n * @returns {Uint8Array|undefined}\n */\nexport function quickEncodeToken (token) {\n switch (token.type) {\n case Type.false:\n return fromArray([0xf4])\n case Type.true:\n return fromArray([0xf5])\n case Type.null:\n return fromArray([0xf6])\n case Type.bytes:\n if (!token.value.length) {\n return fromArray([0x40])\n }\n return\n case Type.string:\n if (token.value === '') {\n return fromArray([0x60])\n }\n return\n case Type.array:\n if (token.value === 0) {\n return fromArray([0x80])\n }\n /* c8 ignore next 2 */\n // shouldn't be possible if this were called when there was only one token\n return\n case Type.map:\n if (token.value === 0) {\n return fromArray([0xa0])\n }\n /* c8 ignore next 2 */\n // shouldn't be possible if this were called when there was only one token\n return\n case Type.uint:\n if (token.value < 24) {\n return fromArray([Number(token.value)])\n }\n return\n case Type.negint:\n if (token.value >= -24) {\n return fromArray([31 - Number(token.value)])\n }\n }\n}\n", "import { is } from './is.js'\nimport { Token, Type } from './token.js'\nimport { Bl } from './bl.js'\nimport { encodeErrPrefix } from './common.js'\nimport { quickEncodeToken } from './jump.js'\nimport { asU8A, compare } from './byte-utils.js'\n\nimport { encodeUint } from './0uint.js'\nimport { encodeNegint } from './1negint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { encodeString } from './3string.js'\nimport { encodeArray } from './4array.js'\nimport { encodeMap } from './5map.js'\nimport { encodeTag } from './6tag.js'\nimport { encodeFloat } from './7float.js'\n\n/**\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../interface').OptionalTypeEncoder} OptionalTypeEncoder\n * @typedef {import('../interface').Reference} Reference\n * @typedef {import('../interface').StrictTypeEncoder} StrictTypeEncoder\n * @typedef {import('../interface').TokenTypeEncoder} TokenTypeEncoder\n * @typedef {import('../interface').TokenOrNestedTokens} TokenOrNestedTokens\n */\n\n/** @type {EncodeOptions} */\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken\n}\n\n/** @type {EncodeOptions} */\nexport const rfc8949EncodeOptions = Object.freeze({\n float64: true,\n mapSorter: rfc8949MapSorter,\n quickEncodeToken\n})\n\n/** @returns {TokenTypeEncoder[]} */\nexport function makeCborEncoders () {\n const encoders = []\n encoders[Type.uint.major] = encodeUint\n encoders[Type.negint.major] = encodeNegint\n encoders[Type.bytes.major] = encodeBytes\n encoders[Type.string.major] = encodeString\n encoders[Type.array.major] = encodeArray\n encoders[Type.map.major] = encodeMap\n encoders[Type.tag.major] = encodeTag\n encoders[Type.float.major] = encodeFloat\n return encoders\n}\n\nconst cborEncoders = makeCborEncoders()\n\nconst buf = new Bl()\n\n/** @implements {Reference} */\nclass Ref {\n /**\n * @param {object|any[]} obj\n * @param {Reference|undefined} parent\n */\n constructor (obj, parent) {\n this.obj = obj\n this.parent = parent\n }\n\n /**\n * @param {object|any[]} obj\n * @returns {boolean}\n */\n includes (obj) {\n /** @type {Reference|undefined} */\n let p = this\n do {\n if (p.obj === obj) {\n return true\n }\n } while (p = p.parent) // eslint-disable-line\n return false\n }\n\n /**\n * @param {Reference|undefined} stack\n * @param {object|any[]} obj\n * @returns {Reference}\n */\n static createCheck (stack, obj) {\n if (stack && stack.includes(obj)) {\n throw new Error(`${encodeErrPrefix} object contains circular references`)\n }\n return new Ref(obj, stack)\n }\n}\n\nconst simpleTokens = {\n null: new Token(Type.null, null),\n undefined: new Token(Type.undefined, undefined),\n true: new Token(Type.true, true),\n false: new Token(Type.false, false),\n emptyArray: new Token(Type.array, 0),\n emptyMap: new Token(Type.map, 0)\n}\n\n/** @type {{[typeName: string]: StrictTypeEncoder}} */\nconst typeEncoders = {\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n number (obj, _typ, _options, _refStack) {\n if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n return new Token(Type.float, obj)\n } else if (obj >= 0) {\n return new Token(Type.uint, obj)\n } else {\n return new Token(Type.negint, obj)\n }\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n bigint (obj, _typ, _options, _refStack) {\n if (obj >= BigInt(0)) {\n return new Token(Type.uint, obj)\n } else {\n return new Token(Type.negint, obj)\n }\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n Uint8Array (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, obj)\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n string (obj, _typ, _options, _refStack) {\n return new Token(Type.string, obj)\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n boolean (obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false\n },\n\n /**\n * @param {any} _obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n null (_obj, _typ, _options, _refStack) {\n return simpleTokens.null\n },\n\n /**\n * @param {any} _obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n undefined (_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n ArrayBuffer (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj))\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n DataView (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} options\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\n Array (obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [simpleTokens.emptyArray, new Token(Type.break)]\n }\n return simpleTokens.emptyArray\n }\n refStack = Ref.createCheck(refStack, obj)\n const entries = []\n let i = 0\n for (const e of obj) {\n entries[i++] = objectToTokens(e, options, refStack)\n }\n if (options.addBreakTokens) {\n return [new Token(Type.array, obj.length), entries, new Token(Type.break)]\n }\n return [new Token(Type.array, obj.length), entries]\n },\n\n /**\n * @param {any} obj\n * @param {string} typ\n * @param {EncodeOptions} options\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\n Object (obj, typ, options, refStack) {\n // could be an Object or a Map\n const isMap = typ !== 'Object'\n // it's slightly quicker to use Object.keys() than Object.entries()\n const keys = isMap ? obj.keys() : Object.keys(obj)\n const length = isMap ? obj.size : keys.length\n if (!length) {\n if (options.addBreakTokens === true) {\n return [simpleTokens.emptyMap, new Token(Type.break)]\n }\n return simpleTokens.emptyMap\n }\n refStack = Ref.createCheck(refStack, obj)\n /** @type {TokenOrNestedTokens[]} */\n const entries = []\n let i = 0\n for (const key of keys) {\n entries[i++] = [\n objectToTokens(key, options, refStack),\n objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n ]\n }\n sortMapEntries(entries, options)\n if (options.addBreakTokens) {\n return [new Token(Type.map, length), entries, new Token(Type.break)]\n }\n return [new Token(Type.map, length), entries]\n }\n}\n\ntypeEncoders.Map = typeEncoders.Object\ntypeEncoders.Buffer = typeEncoders.Uint8Array\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n typeEncoders[`${typ}Array`] = typeEncoders.DataView\n}\n\n/**\n * @param {any} obj\n * @param {EncodeOptions} [options]\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\nfunction objectToTokens (obj, options = {}, refStack) {\n const typ = is(obj)\n const customTypeEncoder = (options && options.typeEncoders && /** @type {OptionalTypeEncoder} */ options.typeEncoders[typ]) || typeEncoders[typ]\n if (typeof customTypeEncoder === 'function') {\n const tokens = customTypeEncoder(obj, typ, options, refStack)\n if (tokens != null) {\n return tokens\n }\n }\n const typeEncoder = typeEncoders[typ]\n if (!typeEncoder) {\n throw new Error(`${encodeErrPrefix} unsupported type: ${typ}`)\n }\n return typeEncoder(obj, typ, options, refStack)\n}\n\n/*\nCBOR key sorting is a mess.\n\nThe canonicalisation recommendation from https://tools.ietf.org/html/rfc7049#section-3.9\nincludes the wording:\n\n> The keys in every map must be sorted lowest value to highest.\n> Sorting is performed on the bytes of the representation of the key\n> data items without paying attention to the 3/5 bit splitting for\n> major types.\n> ...\n> * If two keys have different lengths, the shorter one sorts\n earlier;\n> * If two keys have the same length, the one with the lower value\n in (byte-wise) lexical order sorts earlier.\n\n1. It is not clear what \"bytes of the representation of the key\" means: is it\n the CBOR representation, or the binary representation of the object itself?\n Consider the int and uint difference here.\n2. It is not clear what \"without paying attention to\" means: do we include it\n and compare on that? Or do we omit the special prefix byte, (mostly) treating\n the key in its plain binary representation form.\n\nThe FIDO 2.0: Client To Authenticator Protocol spec takes the original CBOR\nwording and clarifies it according to their understanding.\nhttps://fidoalliance.org/specs/fido-v2.0-rd-20170927/fido-client-to-authenticator-protocol-v2.0-rd-20170927.html#message-encoding\n\n> The keys in every map must be sorted lowest value to highest. Sorting is\n> performed on the bytes of the representation of the key data items without\n> paying attention to the 3/5 bit splitting for major types. The sorting rules\n> are:\n> * If the major types are different, the one with the lower value in numerical\n> order sorts earlier.\n> * If two keys have different lengths, the shorter one sorts earlier;\n> * If two keys have the same length, the one with the lower value in\n> (byte-wise) lexical order sorts earlier.\n\nSome other implementations, such as borc, do a full encode then do a\nlength-first, byte-wise-second comparison:\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/encoder.js#L358\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/utils.js#L143-L151\n\nThis has the benefit of being able to easily handle arbitrary keys, including\ncomplex types (maps and arrays).\n\nWe'll opt for the FIDO approach, since it affords some efficies since we don't\nneed a full encode of each key to determine order and can defer to the types\nto determine how to most efficiently order their values (i.e. int and uint\nordering can be done on the numbers, no need for byte-wise, for example).\n\nRecommendation: stick to single key types or you'll get into trouble, and prefer\nstring keys because it's much simpler that way.\n*/\n\n/**\n * @param {TokenOrNestedTokens[]} entries\n * @param {EncodeOptions} options\n */\nfunction sortMapEntries (entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter)\n }\n}\n\n/**\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction mapSorter (e1, e2) {\n // the key position ([0]) could have a single token or an array\n // almost always it'll be a single token but complex key might get involved\n /* c8 ignore next 2 */\n const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0]\n const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0]\n\n // different key types\n if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type)\n }\n\n const major = keyToken1.type.major\n // TODO: handle case where cmp === 0 but there are more keyToken e. complex type)\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2)\n /* c8 ignore next 5 */\n if (tcmp === 0) {\n // duplicate key or complex type where the first token matched,\n // i.e. a map or array and we're only comparing the opening token\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone')\n }\n return tcmp\n}\n\n/**\n * @typedef {Token & { _keyBytes?: Uint8Array }} TokenEx\n *\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction rfc8949MapSorter (e1, e2) {\n if (e1[0] instanceof Token && e2[0] instanceof Token) {\n const t1 = /** @type {TokenEx} */ (e1[0])\n const t2 = /** @type {TokenEx} */ (e2[0])\n\n if (!t1._keyBytes) {\n t1._keyBytes = encodeRfc8949(t1.value)\n }\n\n if (!t2._keyBytes) {\n t2._keyBytes = encodeRfc8949(t2.value)\n }\n\n return compare(t1._keyBytes, t2._keyBytes)\n }\n\n throw new Error('rfc8949MapSorter: complex key types are not supported yet')\n}\n\n/**\n * @param {any} data\n * @returns {Uint8Array}\n */\nfunction encodeRfc8949 (data) {\n return encodeCustom(data, cborEncoders, rfc8949EncodeOptions)\n}\n\n/**\n * @param {Bl} buf\n * @param {TokenOrNestedTokens} tokens\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n */\nfunction tokensToEncoded (buf, tokens, encoders, options) {\n if (Array.isArray(tokens)) {\n for (const token of tokens) {\n tokensToEncoded(buf, token, encoders, options)\n }\n } else {\n encoders[tokens.type.major](buf, tokens, options)\n }\n}\n\n/**\n * @param {any} data\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n * @returns {Uint8Array}\n */\nfunction encodeCustom (data, encoders, options) {\n const tokens = objectToTokens(data, options)\n if (!Array.isArray(tokens) && options.quickEncodeToken) {\n const quickBytes = options.quickEncodeToken(tokens)\n if (quickBytes) {\n return quickBytes\n }\n const encoder = encoders[tokens.type.major]\n if (encoder.encodedSize) {\n const size = encoder.encodedSize(tokens, options)\n const buf = new Bl(size)\n encoder(buf, tokens, options)\n /* c8 ignore next 4 */\n // this would be a problem with encodedSize() functions\n if (buf.chunks.length !== 1) {\n throw new Error(`Unexpected error: pre-calculated length for ${tokens} was wrong`)\n }\n return asU8A(buf.chunks[0])\n }\n }\n buf.reset()\n tokensToEncoded(buf, tokens, encoders, options)\n return buf.toBytes(true)\n}\n\n/**\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {Uint8Array}\n */\nfunction encode (data, options) {\n options = Object.assign({}, defaultEncodeOptions, options)\n return encodeCustom(data, cborEncoders, options)\n}\n\nexport { objectToTokens, encode, encodeCustom, Ref }\n", "import { decodeErrPrefix } from './common.js'\nimport { Type } from './token.js'\nimport { jump, quick } from './jump.js'\n\n/**\n * @typedef {import('./token.js').Token} Token\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').DecodeTokenizer} DecodeTokenizer\n */\n\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n}\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass Tokeniser {\n /**\n * @param {Uint8Array} data\n * @param {DecodeOptions} options\n */\n constructor (data, options = {}) {\n this._pos = 0\n this.data = data\n this.options = options\n }\n\n pos () {\n return this._pos\n }\n\n done () {\n return this._pos >= this.data.length\n }\n\n next () {\n const byt = this.data[this._pos]\n let token = quick[byt]\n if (token === undefined) {\n const decoder = jump[byt]\n /* c8 ignore next 4 */\n // if we're here then there's something wrong with our jump or quick lists!\n if (!decoder) {\n throw new Error(`${decodeErrPrefix} no decoder for major type ${byt >>> 5} (byte 0x${byt.toString(16).padStart(2, '0')})`)\n }\n const minor = byt & 31\n token = decoder(this.data, this._pos, minor, this.options)\n }\n // @ts-ignore we get to assume encodedLength is set (crossing fingers slightly)\n this._pos += token.encodedLength\n return token\n }\n}\n\nconst DONE = Symbol.for('DONE')\nconst BREAK = Symbol.for('BREAK')\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToArray (token, tokeniser, options) {\n const arr = []\n for (let i = 0; i < token.value; i++) {\n const value = tokensToObject(tokeniser, options)\n if (value === BREAK) {\n if (token.value === Infinity) {\n // normal end to indefinite length array\n break\n }\n throw new Error(`${decodeErrPrefix} got unexpected break to lengthed array`)\n }\n if (value === DONE) {\n throw new Error(`${decodeErrPrefix} found array but not enough entries (got ${i}, expected ${token.value})`)\n }\n arr[i] = value\n }\n return arr\n}\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToMap (token, tokeniser, options) {\n const useMaps = options.useMaps === true\n const obj = useMaps ? undefined : {}\n const m = useMaps ? new Map() : undefined\n for (let i = 0; i < token.value; i++) {\n const key = tokensToObject(tokeniser, options)\n if (key === BREAK) {\n if (token.value === Infinity) {\n // normal end to indefinite length map\n break\n }\n throw new Error(`${decodeErrPrefix} got unexpected break to lengthed map`)\n }\n if (key === DONE) {\n throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no key], expected ${token.value})`)\n }\n if (useMaps !== true && typeof key !== 'string') {\n throw new Error(`${decodeErrPrefix} non-string keys not supported (got ${typeof key})`)\n }\n if (options.rejectDuplicateMapKeys === true) {\n // @ts-ignore\n if ((useMaps && m.has(key)) || (!useMaps && (key in obj))) {\n throw new Error(`${decodeErrPrefix} found repeat map key \"${key}\"`)\n }\n }\n const value = tokensToObject(tokeniser, options)\n if (value === DONE) {\n throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no value], expected ${token.value})`)\n }\n if (useMaps) {\n // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n m.set(key, value)\n } else {\n // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n obj[key] = value\n }\n }\n // @ts-ignore c'mon man\n return useMaps ? m : obj\n}\n\n/**\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokensToObject (tokeniser, options) {\n // should we support array as an argument?\n // check for tokenIter[Symbol.iterator] and replace tokenIter with what that returns?\n if (tokeniser.done()) {\n return DONE\n }\n\n const token = tokeniser.next()\n\n if (token.type === Type.break) {\n return BREAK\n }\n\n if (token.type.terminal) {\n return token.value\n }\n\n if (token.type === Type.array) {\n return tokenToArray(token, tokeniser, options)\n }\n\n if (token.type === Type.map) {\n return tokenToMap(token, tokeniser, options)\n }\n\n if (token.type === Type.tag) {\n if (options.tags && typeof options.tags[token.value] === 'function') {\n const tagged = tokensToObject(tokeniser, options)\n return options.tags[token.value](tagged)\n }\n throw new Error(`${decodeErrPrefix} tag not supported (${token.value})`)\n }\n /* c8 ignore next */\n throw new Error('unsupported')\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {[any, Uint8Array]}\n */\nfunction decodeFirst (data, options) {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`${decodeErrPrefix} data to decode must be a Uint8Array`)\n }\n options = Object.assign({}, defaultDecodeOptions, options)\n const tokeniser = options.tokenizer || new Tokeniser(data, options)\n const decoded = tokensToObject(tokeniser, options)\n if (decoded === DONE) {\n throw new Error(`${decodeErrPrefix} did not find any content to decode`)\n }\n if (decoded === BREAK) {\n throw new Error(`${decodeErrPrefix} got unexpected break`)\n }\n return [decoded, data.subarray(tokeniser.pos())]\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {any}\n */\nfunction decode (data, options) {\n const [decoded, remainder] = decodeFirst(data, options)\n if (remainder.length > 0) {\n throw new Error(`${decodeErrPrefix} too many terminals, data makes no sense`)\n }\n return decoded\n}\n\nexport { Tokeniser, tokensToObject, decode, decodeFirst }\n", "import { Type } from '../token.js'\nimport { encodeCustom } from '../encode.js'\nimport { encodeErrPrefix } from '../common.js'\nimport { asU8A, fromString } from '../byte-utils.js'\n\n/**\n * @typedef {import('../../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../token').Token} Token\n * @typedef {import('../bl').Bl} Bl\n */\n\nclass JSONEncoder extends Array {\n constructor () {\n super()\n /** @type {{type:Type,elements:number}[]} */\n this.inRecursive = []\n }\n\n /**\n * @param {Bl} buf\n */\n prefix (buf) {\n const recurs = this.inRecursive[this.inRecursive.length - 1]\n if (recurs) {\n if (recurs.type === Type.array) {\n recurs.elements++\n if (recurs.elements !== 1) { // >first\n buf.push([44]) // ','\n }\n }\n if (recurs.type === Type.map) {\n recurs.elements++\n if (recurs.elements !== 1) { // >first\n if (recurs.elements % 2 === 1) { // key\n buf.push([44]) // ','\n } else {\n buf.push([58]) // ':'\n }\n }\n }\n }\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.uint.major] (buf, token) {\n this.prefix(buf)\n const is = String(token.value)\n const isa = []\n for (let i = 0; i < is.length; i++) {\n isa[i] = is.charCodeAt(i)\n }\n buf.push(isa)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.negint.major] (buf, token) {\n // @ts-ignore hack\n this[Type.uint.major](buf, token)\n }\n\n /**\n * @param {Bl} _buf\n * @param {Token} _token\n */\n [Type.bytes.major] (_buf, _token) {\n throw new Error(`${encodeErrPrefix} unsupported type: Uint8Array`)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.string.major] (buf, token) {\n this.prefix(buf)\n // buf.push(34) // '\"'\n // encodeUtf8(token.value, byts)\n // buf.push(34) // '\"'\n const byts = fromString(JSON.stringify(token.value))\n buf.push(byts.length > 32 ? asU8A(byts) : byts)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} _token\n */\n [Type.array.major] (buf, _token) {\n this.prefix(buf)\n this.inRecursive.push({ type: Type.array, elements: 0 })\n buf.push([91]) // '['\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} _token\n */\n [Type.map.major] (buf, _token) {\n this.prefix(buf)\n this.inRecursive.push({ type: Type.map, elements: 0 })\n buf.push([123]) // '{'\n }\n\n /**\n * @param {Bl} _buf\n * @param {Token} _token\n */\n [Type.tag.major] (_buf, _token) {}\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.float.major] (buf, token) {\n if (token.type.name === 'break') {\n const recurs = this.inRecursive.pop()\n if (recurs) {\n if (recurs.type === Type.array) {\n buf.push([93]) // ']'\n } else if (recurs.type === Type.map) {\n buf.push([125]) // '}'\n /* c8 ignore next 3 */\n } else {\n throw new Error('Unexpected recursive type; this should not happen!')\n }\n return\n }\n /* c8 ignore next 2 */\n throw new Error('Unexpected break; this should not happen!')\n }\n if (token.value === undefined) {\n throw new Error(`${encodeErrPrefix} unsupported type: undefined`)\n }\n\n this.prefix(buf)\n if (token.type.name === 'true') {\n buf.push([116, 114, 117, 101]) // 'true'\n return\n } else if (token.type.name === 'false') {\n buf.push([102, 97, 108, 115, 101]) // 'false'\n return\n } else if (token.type.name === 'null') {\n buf.push([110, 117, 108, 108]) // 'null'\n return\n }\n\n // number\n const is = String(token.value)\n const isa = []\n let dp = false\n for (let i = 0; i < is.length; i++) {\n isa[i] = is.charCodeAt(i)\n if (!dp && (isa[i] === 46 || isa[i] === 101 || isa[i] === 69)) { // '[.eE]'\n dp = true\n }\n }\n if (!dp) { // need a decimal point for floats\n isa.push(46) // '.'\n isa.push(48) // '0'\n }\n buf.push(isa)\n }\n}\n\n// The below code is mostly taken and modified from https://github.com/feross/buffer\n// Licensed MIT. Copyright (c) Feross Aboukhadijeh\n// function encodeUtf8 (string, byts) {\n// let codePoint\n// const length = string.length\n// let leadSurrogate = null\n\n// for (let i = 0; i < length; ++i) {\n// codePoint = string.charCodeAt(i)\n\n// // is surrogate component\n// if (codePoint > 0xd7ff && codePoint < 0xe000) {\n// // last char was a lead\n// if (!leadSurrogate) {\n// // no lead yet\n// /* c8 ignore next 9 */\n// if (codePoint > 0xdbff) {\n// // unexpected trail\n// byts.push(0xef, 0xbf, 0xbd)\n// continue\n// } else if (i + 1 === length) {\n// // unpaired lead\n// byts.push(0xef, 0xbf, 0xbd)\n// continue\n// }\n\n// // valid lead\n// leadSurrogate = codePoint\n\n// continue\n// }\n\n// // 2 leads in a row\n// /* c8 ignore next 5 */\n// if (codePoint < 0xdc00) {\n// byts.push(0xef, 0xbf, 0xbd)\n// leadSurrogate = codePoint\n// continue\n// }\n\n// // valid surrogate pair\n// codePoint = (leadSurrogate - 0xd800 << 10 | codePoint - 0xdc00) + 0x10000\n// /* c8 ignore next 4 */\n// } else if (leadSurrogate) {\n// // valid bmp char, but last char was a lead\n// byts.push(0xef, 0xbf, 0xbd)\n// }\n\n// leadSurrogate = null\n\n// // encode utf8\n// if (codePoint < 0x80) {\n// // special JSON escapes\n// switch (codePoint) {\n// case 8: // '\\b'\n// byts.push(92, 98) // '\\\\b'\n// continue\n// case 9: // '\\t'\n// byts.push(92, 116) // '\\\\t'\n// continue\n// case 10: // '\\n'\n// byts.push(92, 110) // '\\\\n'\n// continue\n// case 12: // '\\f'\n// byts.push(92, 102) // '\\\\f'\n// continue\n// case 13: // '\\r'\n// byts.push(92, 114) // '\\\\r'\n// continue\n// case 34: // '\"'\n// byts.push(92, 34) // '\\\\\"'\n// continue\n// case 92: // '\\\\'\n// byts.push(92, 92) // '\\\\\\\\'\n// continue\n// }\n\n// byts.push(codePoint)\n// } else if (codePoint < 0x800) {\n// /* c8 ignore next 1 */\n// byts.push(\n// codePoint >> 0x6 | 0xc0,\n// codePoint & 0x3f | 0x80\n// )\n// } else if (codePoint < 0x10000) {\n// /* c8 ignore next 1 */\n// byts.push(\n// codePoint >> 0xc | 0xe0,\n// codePoint >> 0x6 & 0x3f | 0x80,\n// codePoint & 0x3f | 0x80\n// )\n// /* c8 ignore next 9 */\n// } else if (codePoint < 0x110000) {\n// byts.push(\n// codePoint >> 0x12 | 0xf0,\n// codePoint >> 0xc & 0x3f | 0x80,\n// codePoint >> 0x6 & 0x3f | 0x80,\n// codePoint & 0x3f | 0x80\n// )\n// } else {\n// /* c8 ignore next 2 */\n// throw new Error('Invalid code point')\n// }\n// }\n// }\n\n/**\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction mapSorter (e1, e2) {\n if (Array.isArray(e1[0]) || Array.isArray(e2[0])) {\n throw new Error(`${encodeErrPrefix} complex map keys are not supported`)\n }\n const keyToken1 = e1[0]\n const keyToken2 = e2[0]\n if (keyToken1.type !== Type.string || keyToken2.type !== Type.string) {\n throw new Error(`${encodeErrPrefix} non-string map keys are not supported`)\n }\n if (keyToken1 < keyToken2) {\n return -1\n }\n if (keyToken1 > keyToken2) {\n return 1\n }\n /* c8 ignore next 1 */\n throw new Error(`${encodeErrPrefix} unexpected duplicate map keys, this is not supported`)\n}\n\nconst defaultEncodeOptions = { addBreakTokens: true, mapSorter }\n\n/**\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {Uint8Array}\n */\nfunction encode (data, options) {\n options = Object.assign({}, defaultEncodeOptions, options)\n // @ts-ignore TokenTypeEncoder[] requires compareTokens() on each encoder, we don't use them here\n return encodeCustom(data, new JSONEncoder(), options)\n}\n\nexport { encode }\n", "import { decode as _decode, decodeFirst as _decodeFirst } from '../decode.js'\nimport { Token, Type } from '../token.js'\nimport { decodeCodePointsArray } from '../byte-utils.js'\nimport { decodeErrPrefix } from '../common.js'\n\n/**\n * @typedef {import('../../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../../interface').DecodeTokenizer} DecodeTokenizer\n */\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass Tokenizer {\n /**\n * @param {Uint8Array} data\n * @param {DecodeOptions} options\n */\n constructor (data, options = {}) {\n this._pos = 0\n this.data = data\n this.options = options\n /** @type {string[]} */\n this.modeStack = ['value']\n this.lastToken = ''\n }\n\n pos () {\n return this._pos\n }\n\n /**\n * @returns {boolean}\n */\n done () {\n return this._pos >= this.data.length\n }\n\n /**\n * @returns {number}\n */\n ch () {\n return this.data[this._pos]\n }\n\n /**\n * @returns {string}\n */\n currentMode () {\n return this.modeStack[this.modeStack.length - 1]\n }\n\n skipWhitespace () {\n let c = this.ch()\n // @ts-ignore\n while (c === 32 /* ' ' */ || c === 9 /* '\\t' */ || c === 13 /* '\\r' */ || c === 10 /* '\\n' */) {\n c = this.data[++this._pos]\n }\n }\n\n /**\n * @param {number[]} str\n */\n expect (str) {\n if (this.data.length - this._pos < str.length) {\n throw new Error(`${decodeErrPrefix} unexpected end of input at position ${this._pos}`)\n }\n for (let i = 0; i < str.length; i++) {\n if (this.data[this._pos++] !== str[i]) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...str)}'`)\n }\n }\n }\n\n parseNumber () {\n const startPos = this._pos\n let negative = false\n let float = false\n\n /**\n * @param {number[]} chars\n */\n const swallow = (chars) => {\n while (!this.done()) {\n const ch = this.ch()\n if (chars.includes(ch)) {\n this._pos++\n } else {\n break\n }\n }\n }\n\n // lead\n if (this.ch() === 45) { // '-'\n negative = true\n this._pos++\n }\n if (this.ch() === 48) { // '0'\n this._pos++\n if (this.ch() === 46) { // '.'\n this._pos++\n float = true\n } else {\n return new Token(Type.uint, 0, this._pos - startPos)\n }\n }\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n if (negative && this._pos === startPos + 1) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}`)\n }\n if (!this.done() && this.ch() === 46) { // '.'\n if (float) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}`)\n }\n float = true\n this._pos++\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n }\n if (!this.done() && (this.ch() === 101 || this.ch() === 69)) { // '[eE]'\n float = true\n this._pos++\n if (!this.done() && (this.ch() === 43 || this.ch() === 45)) { // '+', '-'\n this._pos++\n }\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n }\n // @ts-ignore\n const numStr = String.fromCharCode.apply(null, this.data.subarray(startPos, this._pos))\n const num = parseFloat(numStr)\n if (float) {\n return new Token(Type.float, num, this._pos - startPos)\n }\n if (this.options.allowBigInt !== true || Number.isSafeInteger(num)) {\n return new Token(num >= 0 ? Type.uint : Type.negint, num, this._pos - startPos)\n }\n return new Token(num >= 0 ? Type.uint : Type.negint, BigInt(numStr), this._pos - startPos)\n }\n\n /**\n * @returns {Token}\n */\n parseString () {\n /* c8 ignore next 4 */\n if (this.ch() !== 34) { // '\"'\n // this would be a programming error\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}; this shouldn't happen`)\n }\n this._pos++\n\n // check for simple fast-path, all printable ascii, no escapes\n // >0x10000 elements may fail fn.apply() (http://stackoverflow.com/a/22747272/680742)\n for (let i = this._pos, l = 0; i < this.data.length && l < 0x10000; i++, l++) {\n const ch = this.data[i]\n if (ch === 92 || ch < 32 || ch >= 128) { // '\\', ' ', control-chars or non-trivial\n break\n }\n if (ch === 34) { // '\"'\n // @ts-ignore\n const str = String.fromCharCode.apply(null, this.data.subarray(this._pos, i))\n this._pos = i + 1\n return new Token(Type.string, str, l)\n }\n }\n\n const startPos = this._pos\n const chars = []\n\n const readu4 = () => {\n if (this._pos + 4 >= this.data.length) {\n throw new Error(`${decodeErrPrefix} unexpected end of unicode escape sequence at position ${this._pos}`)\n }\n let u4 = 0\n for (let i = 0; i < 4; i++) {\n let ch = this.ch()\n if (ch >= 48 && ch <= 57) { // '0' && '9'\n ch -= 48\n } else if (ch >= 97 && ch <= 102) { // 'a' && 'f'\n ch = ch - 97 + 10\n } else if (ch >= 65 && ch <= 70) { // 'A' && 'F'\n ch = ch - 65 + 10\n } else {\n throw new Error(`${decodeErrPrefix} unexpected unicode escape character at position ${this._pos}`)\n }\n u4 = u4 * 16 + ch\n this._pos++\n }\n return u4\n }\n\n // mostly taken from feross/buffer and adjusted to fit\n const readUtf8Char = () => {\n const firstByte = this.ch()\n let codePoint = null\n /* c8 ignore next 1 */\n let bytesPerSequence = (firstByte > 0xef) ? 4 : (firstByte > 0xdf) ? 3 : (firstByte > 0xbf) ? 2 : 1\n\n if (this._pos + bytesPerSequence > this.data.length) {\n throw new Error(`${decodeErrPrefix} unexpected unicode sequence at position ${this._pos}`)\n }\n\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n /* c8 ignore next 6 */\n // this case is dealt with by the caller function\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = this.data[this._pos + 1]\n if ((secondByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0x1f) << 0x6 | (secondByte & 0x3f)\n if (tempCodePoint > 0x7f) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = this.data[this._pos + 1]\n thirdByte = this.data[this._pos + 2]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0xc | (secondByte & 0x3f) << 0x6 | (thirdByte & 0x3f)\n /* c8 ignore next 3 */\n if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = this.data[this._pos + 1]\n thirdByte = this.data[this._pos + 2]\n fourthByte = this.data[this._pos + 3]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80 && (fourthByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0x12 | (secondByte & 0x3f) << 0xc | (thirdByte & 0x3f) << 0x6 | (fourthByte & 0x3f)\n if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n\n /* c8 ignore next 5 */\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xfffd\n bytesPerSequence = 1\n } else if (codePoint > 0xffff) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n chars.push(codePoint >>> 10 & 0x3ff | 0xd800)\n codePoint = 0xdc00 | codePoint & 0x3ff\n }\n\n chars.push(codePoint)\n this._pos += bytesPerSequence\n }\n\n // TODO: could take the approach of a quick first scan for special chars like encoding/json/decode.go#unquoteBytes\n // and converting all of the ascii chars from the base array in bulk\n while (!this.done()) {\n const ch = this.ch()\n let ch1\n switch (ch) {\n case 92: // '\\'\n this._pos++\n if (this.done()) {\n throw new Error(`${decodeErrPrefix} unexpected string termination at position ${this._pos}`)\n }\n ch1 = this.ch()\n this._pos++\n switch (ch1) {\n case 34: // '\"'\n case 39: // '\\''\n case 92: // '\\'\n case 47: // '/'\n chars.push(ch1)\n break\n case 98: // 'b'\n chars.push(8)\n break\n case 116: // 't'\n chars.push(9)\n break\n case 110: // 'n'\n chars.push(10)\n break\n case 102: // 'f'\n chars.push(12)\n break\n case 114: // 'r'\n chars.push(13)\n break\n case 117: // 'u'\n chars.push(readu4())\n break\n default:\n throw new Error(`${decodeErrPrefix} unexpected string escape character at position ${this._pos}`)\n }\n break\n case 34: // '\"'\n this._pos++\n return new Token(Type.string, decodeCodePointsArray(chars), this._pos - startPos)\n default:\n if (ch < 32) { // ' '\n throw new Error(`${decodeErrPrefix} invalid control character at position ${this._pos}`)\n } else if (ch < 0x80) {\n chars.push(ch)\n this._pos++\n } else {\n readUtf8Char()\n }\n }\n }\n\n throw new Error(`${decodeErrPrefix} unexpected end of string at position ${this._pos}`)\n }\n\n /**\n * @returns {Token}\n */\n parseValue () {\n switch (this.ch()) {\n case 123: // '{'\n this.modeStack.push('obj-start')\n this._pos++\n return new Token(Type.map, Infinity, 1)\n case 91: // '['\n this.modeStack.push('array-start')\n this._pos++\n return new Token(Type.array, Infinity, 1)\n case 34: { // '\"'\n return this.parseString()\n }\n case 110: // 'n' / null\n this.expect([110, 117, 108, 108]) // 'null'\n return new Token(Type.null, null, 4)\n case 102: // 'f' / // false\n this.expect([102, 97, 108, 115, 101]) // 'false'\n return new Token(Type.false, false, 5)\n case 116: // 't' / // true\n this.expect([116, 114, 117, 101]) // 'true'\n return new Token(Type.true, true, 4)\n case 45: // '-'\n case 48: // '0'\n case 49: // '1'\n case 50: // '2'\n case 51: // '3'\n case 52: // '4'\n case 53: // '5'\n case 54: // '6'\n case 55: // '7'\n case 56: // '8'\n case 57: // '9'\n return this.parseNumber()\n default:\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}`)\n }\n }\n\n /**\n * @returns {Token}\n */\n next () {\n this.skipWhitespace()\n switch (this.currentMode()) {\n case 'value':\n this.modeStack.pop()\n return this.parseValue()\n case 'array-value': {\n this.modeStack.pop()\n if (this.ch() === 93) { // ']'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n if (this.ch() !== 44) { // ','\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.modeStack.push('array-value')\n this.skipWhitespace()\n return this.parseValue()\n }\n case 'array-start': {\n this.modeStack.pop()\n if (this.ch() === 93) { // ']'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n this.modeStack.push('array-value')\n this.skipWhitespace()\n return this.parseValue()\n }\n // @ts-ignore\n case 'obj-key':\n if (this.ch() === 125) { // '}'\n this.modeStack.pop()\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n if (this.ch() !== 44) { // ','\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.skipWhitespace()\n case 'obj-start': { // eslint-disable-line no-fallthrough\n this.modeStack.pop()\n if (this.ch() === 125) { // '}'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n const token = this.parseString()\n this.skipWhitespace()\n if (this.ch() !== 58) { // ':'\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.modeStack.push('obj-value')\n return token\n }\n case 'obj-value': {\n this.modeStack.pop()\n this.modeStack.push('obj-key')\n this.skipWhitespace()\n return this.parseValue()\n }\n /* c8 ignore next 2 */\n default:\n throw new Error(`${decodeErrPrefix} unexpected parse state at position ${this._pos}; this shouldn't happen`)\n }\n }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {any}\n */\nfunction decode (data, options) {\n options = Object.assign({ tokenizer: new Tokenizer(data, options) }, options)\n return _decode(data, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {[any, Uint8Array]}\n */\nfunction decodeFirst (data, options) {\n options = Object.assign({ tokenizer: new Tokenizer(data, options) }, options)\n return _decodeFirst(data, options)\n}\n\nexport { decode, decodeFirst, Tokenizer }\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n", "import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n", "/* eslint max-depth: [\"error\", 7] */\nimport { Token, Type } from 'cborg'\nimport * as cborgJson from 'cborg/json'\nimport { CID } from 'multiformats'\nimport { base64 } from 'multiformats/bases/base64'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n/**\n * @template T\n * @typedef {import('multiformats').ToString<T>} ToString\n */\n/**\n * @typedef {import('cborg/interface').DecodeTokenizer} DecodeTokenizer\n */\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nfunction toByteView (buf) {\n if (buf instanceof ArrayBuffer) {\n return new Uint8Array(buf, 0, buf.byteLength)\n }\n\n return buf\n}\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal. Encoding a CID means replacing it with a `{\"/\":\"<CidString>}`\n * object as per the DAG-JSON spec.\n *\n * @param {any} obj\n * @returns {Token[]|null}\n */\nfunction cidEncoder (obj) {\n if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n return null // any other kind of object\n }\n const cid = CID.asCID(obj)\n /* c8 ignore next 4 */\n // very unlikely case, and it'll probably throw a recursion error in cborg\n if (!cid) {\n return null\n }\n const cidString = cid.toString()\n\n return [\n new Token(Type.map, Infinity, 1),\n new Token(Type.string, '/', 1), // key\n new Token(Type.string, cidString, cidString.length), // value\n new Token(Type.break, undefined, 1)\n ]\n}\n\n/**\n * bytesEncoder will receive all Uint8Arrays (and friends) during encode, it\n * needs to replace it with a `{\"/\":{\"bytes\":\"Base64ByteString\"}}` object as\n * per the DAG-JSON spec.\n *\n * @param {Uint8Array} bytes\n * @returns {Token[]|null}\n */\nfunction bytesEncoder (bytes) {\n const bytesString = base64.encode(bytes).slice(1) // no mbase prefix\n return [\n new Token(Type.map, Infinity, 1),\n new Token(Type.string, '/', 1), // key\n new Token(Type.map, Infinity, 1), // value\n new Token(Type.string, 'bytes', 5), // inner key\n new Token(Type.string, bytesString, bytesString.length), // inner value\n new Token(Type.break, undefined, 1),\n new Token(Type.break, undefined, 1)\n ]\n}\n\n/**\n * taBytesEncoder wraps bytesEncoder() but for the more exotic typed arrays so\n * that we access the underlying ArrayBuffer data\n *\n * @param {Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|Uint8ClampedArray|BigInt64Array|BigUint64Array} obj\n * @returns {Token[]|null}\n */\nfunction taBytesEncoder (obj) {\n return bytesEncoder(new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))\n}\n\n/**\n * abBytesEncoder wraps bytesEncoder() but for plain ArrayBuffers\n *\n * @param {ArrayBuffer} ab\n * @returns {Token[]|null}\n */\nfunction abBytesEncoder (ab) {\n return bytesEncoder(new Uint8Array(ab))\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n }\n return null // process with standard number encoder\n}\n\nconst encodeOptions = {\n typeEncoders: {\n Object: cidEncoder,\n Buffer: bytesEncoder,\n Uint8Array: bytesEncoder,\n Int8Array: taBytesEncoder,\n Uint16Array: taBytesEncoder,\n Int16Array: taBytesEncoder,\n Uint32Array: taBytesEncoder,\n Int32Array: taBytesEncoder,\n Float32Array: taBytesEncoder,\n Float64Array: taBytesEncoder,\n Uint8ClampedArray: taBytesEncoder,\n BigInt64Array: taBytesEncoder,\n BigUint64Array: taBytesEncoder,\n DataView: taBytesEncoder,\n ArrayBuffer: abBytesEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n}\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass DagJsonTokenizer extends cborgJson.Tokenizer {\n /**\n * @param {Uint8Array} data\n * @param {object} [options]\n */\n constructor (data, options) {\n super(data, options)\n /** @type {Token[]} */\n this.tokenBuffer = []\n }\n\n /**\n * @returns {boolean}\n */\n done () {\n return this.tokenBuffer.length === 0 && super.done()\n }\n\n /**\n * @returns {Token}\n */\n _next () {\n if (this.tokenBuffer.length > 0) {\n // @ts-ignore https://github.com/Microsoft/TypeScript/issues/30406\n return this.tokenBuffer.pop()\n }\n return super.next()\n }\n\n /**\n * Implements rules outlined in https://github.com/ipld/specs/pull/356\n *\n * @returns {Token}\n */\n next () {\n const token = this._next()\n\n if (token.type === Type.map) {\n const keyToken = this._next()\n if (keyToken.type === Type.string && keyToken.value === '/') {\n const valueToken = this._next()\n if (valueToken.type === Type.string) { // *must* be a CID\n const breakToken = this._next() // swallow the end-of-map token\n if (breakToken.type !== Type.break) {\n throw new Error('Invalid encoded CID form')\n }\n this.tokenBuffer.push(valueToken) // CID.parse will pick this up after our tag token\n return new Token(Type.tag, 42, 0)\n }\n if (valueToken.type === Type.map) {\n const innerKeyToken = this._next()\n if (innerKeyToken.type === Type.string && innerKeyToken.value === 'bytes') {\n const innerValueToken = this._next()\n if (innerValueToken.type === Type.string) { // *must* be Bytes\n for (let i = 0; i < 2; i++) {\n const breakToken = this._next() // swallow two end-of-map tokens\n if (breakToken.type !== Type.break) {\n throw new Error('Invalid encoded Bytes form')\n }\n }\n const bytes = base64.decode(`m${innerValueToken.value}`)\n return new Token(Type.bytes, bytes, innerValueToken.value.length)\n }\n this.tokenBuffer.push(innerValueToken) // bail\n }\n this.tokenBuffer.push(innerKeyToken) // bail\n }\n this.tokenBuffer.push(valueToken) // bail\n }\n this.tokenBuffer.push(keyToken) // bail\n }\n return token\n }\n}\n\nconst decodeOptions = {\n allowIndefinite: false,\n allowUndefined: false,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true, // this will lead to BigInt for ints outside of\n // safe-integer range, which may surprise users\n strict: true,\n useMaps: false,\n rejectDuplicateMapKeys: true,\n /** @type {import('cborg').TagDecoder[]} */\n tags: []\n}\n\n// we're going to get TAG(42)STRING(\"bafy...\") from the tokenizer so we only need\n// to deal with the STRING(\"bafy...\") at this point\ndecodeOptions.tags[42] = CID.parse\n\nexport const name = 'dag-json'\nexport const code = 0x0129\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborgJson.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => {\n const buf = toByteView(data)\n // the tokenizer is stateful so we need a single instance of it\n const options = Object.assign(decodeOptions, { tokenizer: new DagJsonTokenizer(buf, decodeOptions) })\n return cborgJson.decode(buf, options)\n}\n\n/**\n * @template T\n * @param {T} node\n * @returns {ToString<T>}\n */\nexport const format = (node) => utf8Decoder.decode(encode(node))\nexport { format as stringify }\nconst utf8Decoder = new TextDecoder()\n\n/**\n * @template T\n * @param {ToString<T>} data\n * @returns {T}\n */\nexport const parse = (data) => decode(utf8Encoder.encode(data))\nconst utf8Encoder = new TextEncoder()\n", "import * as Digest from './digest.ts'\nimport type { MultihashHasher } from './interface.ts'\n\ntype Await<T> = Promise<T> | T\n\nconst DEFAULT_MIN_DIGEST_LENGTH = 20\n\nexport interface HasherInit <Name extends string, Code extends number> {\n name: Name\n code: Code\n encode(input: Uint8Array): Await<Uint8Array<ArrayBuffer>>\n\n /**\n * The minimum length a hash is allowed to be truncated to in bytes\n *\n * @default 20\n */\n minDigestLength?: number\n\n /**\n * The maximum length a hash is allowed to be truncated to in bytes. If not\n * specified it will be inferred from the length of the digest.\n */\n maxDigestLength?: number\n}\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode, minDigestLength, maxDigestLength }: HasherInit<Name, Code>): MultihashHasher<Code> {\n return new Hasher(name, code, encode, minDigestLength, maxDigestLength)\n}\n\nexport interface DigestOptions {\n /**\n * Truncate the returned digest to this number of bytes.\n *\n * This may cause the digest method to throw/reject if the passed value is\n * greater than the digest length or below a threshold under which the risk of\n * hash collisions is significant.\n *\n * The actual value of this threshold can depend on the hashing algorithm in\n * use.\n */\n truncate?: number\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array<ArrayBuffer>>\n readonly minDigestLength: number\n readonly maxDigestLength?: number\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array<ArrayBuffer>>, minDigestLength?: number, maxDigestLength?: number) {\n this.name = name\n this.code = code\n this.encode = encode\n this.minDigestLength = minDigestLength ?? DEFAULT_MIN_DIGEST_LENGTH\n this.maxDigestLength = maxDigestLength\n }\n\n digest (input: Uint8Array, options?: DigestOptions): Await<Digest.Digest<Code, number>> {\n if (options?.truncate != null) {\n if (options.truncate < this.minDigestLength) {\n throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`)\n }\n\n if (this.maxDigestLength != null && options.truncate > this.maxDigestLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)\n }\n }\n\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n\n if (result instanceof Uint8Array) {\n return createDigest(result, this.code, options?.truncate)\n }\n\n return result.then(digest => createDigest(digest, this.code, options?.truncate))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * Create a Digest from the passed uint8array and code, optionally truncating it\n * first.\n */\nfunction createDigest <Code extends number> (digest: Uint8Array, code: Code, truncate?: number): Digest.Digest<Code, number> {\n if (truncate != null && truncate !== digest.byteLength) {\n if (truncate > digest.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${digest.byteLength}`)\n }\n\n digest = digest.subarray(0, truncate)\n }\n\n return Digest.create(code, digest)\n}\n", "const U32_MASK64 = /* @__PURE__ */ (() => BigInt(2 ** 32 - 1))();\nconst _32n = /* @__PURE__ */ BigInt(32);\n// Split bigint into two 32-bit halves. With `le=true`, returned fields become `{ h: low, l: high\n// }` to match little-endian word order rather than the property names.\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n// Split bigint list into `[highWords, lowWords]` when `le=false`; with `le=true`, the first array\n// holds the low halves because `fromBig(...)` swaps the semantic meaning of `h` and `l`.\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n// Combine explicit `(high, low)` 32-bit halves into a bigint; `>>> 0` normalizes signed JS\n// bitwise results back to uint32 first, and little-endian callers must swap.\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// Split a JS number into u32 halves without a BigInt allocation. Exact only for integers\n// `0 <= n < 2**53`; callers use it on byte / bit counters, which JS length math caps far below\n// that (an ArrayBuffer cannot exceed 2**53 - 1 bytes).\nconst fromNumH = (n) => (n / 2 ** 32) | 0;\nconst fromNumL = (n) => n >>> 0;\n// Drop-in replacement for `view.setBigUint64(byteOffset, BigInt(n), isLE)` without the per-call\n// BigInt allocation. Same `n < 2**53` precondition as `fromNumH`/`fromNumL`.\nfunction setU64FromNum(view, byteOffset, n, isLE) {\n const h = fromNumH(n);\n const l = fromNumL(n);\n view.setUint32(byteOffset, isLE ? l : h, isLE);\n view.setUint32(byteOffset + 4, isLE ? h : l, isLE);\n}\n// High 32-bit half of a 64-bit logical right shift for `s` in `0..31`.\nconst shrSH = (h, _l, s) => h >>> s;\n// Low 32-bit half of a 64-bit logical right shift, valid for `s` in `1..31`.\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// High 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped low half.\nconst rotr32H = (_h, l) => l;\n// Low 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped high half.\nconst rotr32L = (h, _l) => h;\n// 64-bit left rotates (rotl*) are not defined here: sha3.ts, their only consumer, keeps\n// local copies so V8 inlines them into keccakP.\n// Add two split 64-bit words and return the split `{ h, l }` sum.\n// JS uses 32-bit signed integers for bitwise operations, so we cannot simply shift the carry out\n// of the low sum and instead use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\n// Unmasked low-word accumulator for 3-way addition; pass the raw result into `add3H(...)`.\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\n// High-word finalize step for 3-way addition; `low` must be the untruncated output of `add3L(...)`.\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 4-way addition; pass the raw result into `add4H(...)`.\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\n// High-word finalize step for 4-way addition; `low` must be the untruncated output of `add4L(...)`.\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 5-way addition; pass the raw result into `add5H(...)`.\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\n// High-word finalize step for 5-way addition; `low` must be the untruncated output of `add5L(...)`.\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, fromNumH, fromNumL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, setU64FromNum, shrSH, shrSL, split, toBig };\n", "/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - value to test\n * @returns `true` when the value is a Uint8Array-compatible view.\n * @example\n * Check whether a value is a Uint8Array-compatible view.\n * ```ts\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a) {\n // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n // The fallback still requires a real ArrayBuffer view, so plain\n // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n return (a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1));\n}\n// Shared error-message prefix builder. Only called on throw paths, so assert\n// success paths never pay for the string concatenation.\nconst atitle = (title) => (title ? `\"${title}\" ` : '');\n/**\n * Asserts something is a non-negative integer.\n * @param n - number to validate\n * @param title - label included in thrown errors\n * @returns The validated number.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a non-negative integer option.\n * ```ts\n * anumber(32, 'length');\n * ```\n */\nexport function anumber(n, title = '') {\n if (typeof n !== 'number')\n throw new TypeError(atitle(title) + 'expected number, got ' + typeof n);\n if (!Number.isSafeInteger(n) || n < 0)\n throw new RangeError(atitle(title) + 'expected integer >= 0, got ' + n);\n return n;\n}\n/**\n * Asserts something is a boolean.\n * @param value - value to validate\n * @param title - label included in thrown errors\n * @returns The validated boolean.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Validate a boolean option.\n * ```ts\n * abool(true, 'enableXOF');\n * ```\n */\nexport function abool(value, title = '') {\n if (typeof value !== 'boolean')\n throw new TypeError(atitle(title) + 'expected boolean, got type=' + typeof value);\n return value;\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - value to validate\n * @param length - optional exact length constraint\n * @param title - label included in thrown errors\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate that a value is a byte array.\n * ```ts\n * abytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function abytes(value, length, title = '') {\n // Success path first: this runs at the start of every update() / digestInto(), and the\n // common `abytes(data)` form must not pay for length handling it does not use.\n if (isBytes(value) && (length === undefined || value.length === length))\n return value;\n // Error path: recompute freely to build the exact message.\n if (length !== undefined)\n anumber(length, 'length');\n const bytes = isBytes(value);\n const ofLen = length !== undefined ? ` of length ${length}` : '';\n const got = bytes ? `length=${value.length}` : `type=${typeof value}`;\n const message = atitle(title) + 'expected Uint8Array' + ofLen + ', got ' + got;\n if (!bytes)\n throw new TypeError(message);\n throw new RangeError(message);\n}\n/**\n * Copies bytes into a fresh Uint8Array.\n * Buffer-style slices can alias the same backing store, so callers that need ownership should copy.\n * @param bytes - source bytes to clone\n * @returns Freshly allocated copy of `bytes`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Clone a byte array before mutating it.\n * ```ts\n * const copy = copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes) {\n // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n // because callers use it at byte-validation boundaries before mutating the detached copy.\n return Uint8Array.from(abytes(bytes));\n}\n/**\n * Asserts something is a wrapped hash constructor.\n * @param h - hash constructor to validate\n * @throws On wrong argument types or invalid hash wrapper shape. {@link TypeError}\n * @throws On invalid hash metadata ranges or values. {@link RangeError}\n * @throws If the hash metadata allows empty outputs or block sizes. {@link Error}\n * @example\n * Validate a callable hash wrapper.\n * ```ts\n * import { ahash } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new TypeError('expected hash wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n // validation and can produce empty outputs instead of failing fast.\n if (h.outputLen < 1 || h.blockLen < 1)\n throw new Error('hash blockLen / outputLen must be >= 1');\n}\nconst aobject = (value, label) => {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw new TypeError((label === 'object' ? '' : `\"${label}\" `) + 'expected object, got type=' + typeof value);\n};\nconst aopts = (value, label) => {\n aobject(value, label);\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto !== null)\n throw new TypeError(`\"${label}\" expected plain object`);\n // Object.assign() treats an own \"__proto__\" source key as a write to the target's legacy\n // prototype setter. Reject it before merging so inherited option values cannot be injected.\n if (Object.hasOwn(value, '__proto__'))\n throw new TypeError(`\"${label}.__proto__\" is not allowed`);\n};\n/**\n * Asserts a hash instance has not been destroyed or finished.\n * @param instance - hash instance to validate\n * @param checkFinished - whether to reject finalized instances\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Validate that a hash instance is still usable.\n * ```ts\n * import { aexists } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aexists(hash);\n * ```\n */\nexport function aexists(instance, checkFinished = true) {\n // Runs on every update()/digestInto(); the flags are library-owned booleans, so only their\n // truthiness is checked - re-validating their type per call was pure hot-path overhead.\n if (instance.destroyed)\n throw new Error('hash was destroyed');\n if (checkFinished && instance.finished)\n throw new Error('digest() was already called');\n}\n/**\n * Asserts output is a sufficiently-sized byte array.\n * @param out - destination buffer\n * @param instance - hash instance providing output length\n * Oversized buffers are allowed; downstream code only promises to fill the first `outputLen` bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a caller-provided digest buffer.\n * ```ts\n * import { aoutput } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aoutput(new Uint8Array(hash.outputLen), hash);\n * ```\n */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'output');\n // `outputLen` is a library-owned readonly number; the negated comparison keeps failing fast\n // when it is missing/NaN (comparisons with undefined/NaN are false) without an anumber() call.\n const min = instance.outputLen;\n if (!(out.length >= min)) {\n throw new RangeError('\"output\" expected length >= ' + min);\n }\n}\n/**\n * Casts a typed array view to Uint8Array.\n * @param arr - source typed array\n * @returns Uint8Array view over the same buffer.\n * @example\n * Reinterpret a typed array as bytes.\n * ```ts\n * u8(new Uint32Array([1, 2]));\n * ```\n */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed array view to Uint32Array.\n * `arr.byteOffset` must already be 4-byte aligned or the platform\n * Uint32Array constructor will throw.\n * @param arr - source typed array\n * @returns Uint32Array view over the same buffer.\n * @example\n * Reinterpret a byte array as 32-bit words.\n * ```ts\n * u32(new Uint8Array(8));\n * ```\n */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Zeroizes typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros\n * @example\n * Zeroize sensitive buffers in place.\n * ```ts\n * clean(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - source typed array\n * @returns DataView over the same buffer region.\n * @example\n * Create a DataView over an existing buffer.\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Rotate-right operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the right.\n * ```ts\n * rotr(0x12345678, 8);\n * ```\n */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/**\n * Rotate-left operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the left.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Whether the current platform is little-endian. */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/**\n * Byte-swap operation for uint32 values.\n * @param word - source word\n * @returns Word with reversed byte order.\n * @example\n * Reverse the byte order of a 32-bit word.\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/**\n * Conditionally byte-swaps one 32-bit word on big-endian platforms.\n * @param n - source word\n * @returns Original or byte-swapped word depending on platform endianness.\n * @example\n * Normalize a 32-bit word for host endianness.\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n) >>> 0;\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - array to mutate\n * @returns The same array after mutation; callers pass live state arrays here.\n * @example\n * Reverse the byte order of every word in place.\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n/**\n * Conditionally byte-swaps a Uint32Array on big-endian platforms.\n * @param u - array to normalize for host endianness\n * @returns Original or byte-swapped array depending on platform endianness.\n * On big-endian runtimes this mutates `u` in place via `byteSwap32(...)`.\n * @example\n * Normalize a word array for host endianness.\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string.\n * Uses the built-in function when available and assumes it matches the tested\n * fallback semantics.\n * @param bytes - bytes to encode\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Convert bytes to lowercase hexadecimal.\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// Strict ASCII nibble parser: non-ASCII hex lookalikes are rejected as undefined.\n// ASCII codes: '0'..'9' = 48..57, 'A'..'F' = 65..70, 'a'..'f' = 97..102.\n// prettier-ignore\nfunction asciiToBase16(ch) {\n return ch >= 48 && ch <= 57 ? ch - 48 // '2' => 50-48\n : ch >= 65 && ch <= 70 ? ch - (65 - 10) // 'B' => 66-(65-10)\n : ch >= 97 && ch <= 102 ? ch - (97 - 10) // 'b' => 98-(97-10)\n : undefined;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hexadecimal string to decode\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Decode lowercase hexadecimal into bytes.\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n if (hasHexBuiltin) {\n try {\n return Uint8Array.fromHex(hex);\n }\n catch (error) {\n if (error instanceof SyntaxError)\n throw new RangeError(error.message);\n throw error;\n }\n }\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new RangeError('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n}\n/**\n * Yields to the host task scheduler so timers, I/O, and rendering can make progress.\n * Uses the Web Scheduling API when available or `setTimeout` as a cross-platform fallback.\n * Host-task yields are much slower than microtasks (roughly 1ms with the timer fallback), so\n * async loops should use `asyncTick >= 10` to amortize scheduling overhead to about 10% while\n * still allowing other event-loop work to proceed.\n * @param onReject - optional cleanup invoked only if the host yield fails\n * @example\n * Yield to the next scheduler tick.\n * ```ts\n * await nextTick();\n * ```\n */\nexport function nextTick(onReject) {\n const host = globalThis;\n if (typeof host.scheduler?.yield === 'function') {\n const promise = host.scheduler.yield();\n // Keep the original scheduler rejection; this handler exists only for cleanup.\n if (onReject)\n promise.catch(onReject);\n return promise;\n }\n return new Promise((resolve) => host.setTimeout(resolve, 0));\n}\n/**\n * Returns control to the host event loop every `tick` milliseconds to avoid blocking long loops.\n * @param iters - number of loop iterations to run\n * @param tick - maximum time slice in milliseconds\n * @param cb - callback executed on each iteration\n * @param onReject - optional cleanup invoked only if a host yield fails\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Run a loop that periodically yields back to the event loop.\n * ```ts\n * await asyncLoop(2, 0, () => {});\n * ```\n */\nexport async function asyncLoop(iters, tick, cb, onReject) {\n anumber(iters, 'iters');\n anumber(tick, 'tick');\n if (typeof cb !== 'function')\n throw new TypeError('callback must be a function');\n // Callback is synchronous by contract; asyncLoop only yields between sync work windows.\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick(onReject);\n // Track only synchronous work time; scheduler delay after yielding is outside our budget.\n ts = Date.now();\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform `TextEncoder`.\n * @param str - string to encode\n * @returns UTF-8 encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * utf8ToBytes('abc'); // Uint8Array.from([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new TypeError('string expected');\n const encoded = new TextEncoder().encode(str);\n try {\n // Copy into the current realm for Firefox extension contexts. Callers that own the returned\n // buffer can then wipe it independently of TextEncoder's temporary result.\n return new Uint8Array(encoded); // https://bugzil.la/1681809\n }\n finally {\n clean(encoded);\n }\n}\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - user-provided KDF input\n * @param errorTitle - label included in thrown errors\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Normalize KDF input to bytes.\n * ```ts\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate\n * @returns Concatenated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Concatenate multiple byte arrays.\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Validates declared required and optional field types on a plain object.\n * This walks field schemas and formats detailed errors, so avoid it on hot paths; use direct\n * one-line guards such as `abytes()`, `abool()`, or `anumber()` instead.\n * @param object - object to validate\n * @param fields - map of required field names to expected types\n * @param optFields - map of optional field names to expected types\n * @param title - label included in thrown errors\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Validate required and optional option fields.\n * ```ts\n * validateObject({ N: 1024, dkLen: 32 }, { N: 'number' }, { dkLen: 'number' });\n * ```\n */\nexport const validateObject = (object, fields = {}, optFields = {}, title = 'object') => {\n aobject(object, title);\n aobject(fields, 'fields');\n aobject(optFields, 'optFields');\n function checkField(fieldName, expectedType, isOpt) {\n const label = title === 'object' ? `param \"${String(fieldName)}\"` : `\"${title}.${String(fieldName)}\"`;\n // Config fields must be explicit own properties. Optional inherited values are rejected too\n // because callers keep reading the same options object after validation.\n const val = object[fieldName];\n // Runtime objects such as Field instances intentionally satisfy required method slots\n // via their shared prototype.\n if (!Object.hasOwn(object, fieldName) &&\n (isOpt ? val !== undefined : expectedType !== 'function')) {\n throw new TypeError(`${label} is invalid: expected own property`);\n }\n if (isOpt && val === undefined)\n return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new TypeError(`${label} is invalid: expected ${expectedType}, got ${current}`);\n }\n const iter = (f, isOpt) => Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n};\n/**\n * Merges default options and passed options.\n * @param defaults - base option object\n * @param opts - user overrides\n * @param title - label included in thrown override errors\n * @returns Fresh merged option object with a null prototype.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Merge user overrides onto default options.\n * ```ts\n * checkOpts({ dkLen: 32 }, { asyncTick: 10 });\n * ```\n */\nexport function checkOpts(defaults, opts, title = 'opts') {\n aopts(defaults, 'defaults');\n if (opts !== undefined)\n aopts(opts, title);\n // Callers read optional fields directly, so omitted values must not fall through to ambient\n // Object.prototype pollution (for example a forged `dkLen` changing SHAKE's default output).\n const merged = Object.assign(Object.create(null), defaults, opts);\n return merged;\n}\n/**\n * Creates a callable hash function from a stateful class constructor.\n * @param hashCons - hash constructor or factory\n * @param info - optional metadata such as DER OID\n * @returns Frozen callable hash wrapper with `.create()`.\n * Wrapper construction eagerly calls `hashCons(undefined)` once to read\n * `outputLen` / `blockLen`, so constructor side effects happen at module\n * init time.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Wrap a stateful hash constructor into a callable helper.\n * ```ts\n * import { createHasher } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const wrapped = createHasher(sha256.create, { oid: sha256.oid });\n * wrapped(new Uint8Array([1]));\n * ```\n */\nexport function createHasher(hashCons, info = {}) {\n if (typeof hashCons !== 'function')\n throw new TypeError('\"hashCons\" expected function, got type=' + typeof hashCons);\n info = checkOpts({}, info, 'info');\n const hashC = (msg, opts) => hashCons(opts)\n .update(msg)\n .digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.canXOF = tmp.canXOF;\n hashC.create = (opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n/**\n * Cryptographically secure PRNG backed by `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate\n * @returns Random bytes.\n * The platform `getRandomValues()` implementation still defines any\n * single-call length cap, and this helper rejects oversize requests\n * with a stable library `RangeError` instead of host-specific errors.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the current runtime does not provide `crypto.getRandomValues`. {@link Error}\n * @example\n * Generate a fresh random key or nonce.\n * ```ts\n * const key = randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32) {\n // Match the repo's other length-taking helpers instead of relying on Uint8Array coercion.\n anumber(bytesLength, 'bytesLength');\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n // Web Cryptography API Level 2 \u00A710.1.1:\n // if `byteLength > 65536`, throw `QuotaExceededError`.\n // Keep the guard explicit so callers can see the quota in code\n // instead of discovering it by reading the spec or host errors.\n // This wrapper surfaces the same quota as a stable library RangeError.\n if (bytesLength > 65536)\n throw new RangeError(`\"bytesLength\" expected <= 65536, got ${bytesLength}`);\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/**\n * Creates OID metadata for NIST hashes with prefix `06 09 60 86 48 01 65 03 04 02`.\n * @param suffix - final OID byte for the selected hash.\n * The helper accepts any byte even though only the documented NIST hash\n * suffixes are meaningful downstream.\n * @returns Object containing the DER-encoded OID.\n * @example\n * Build OID metadata for a NIST hash.\n * ```ts\n * oidNist(0x01);\n * ```\n */\nexport const oidNist = (suffix) => ({\n // Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.\n // Larger suffix values would need base-128 OID encoding and a different length byte.\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { setU64FromNum } from \"./_u64.js\";\nimport { abytes, aexists, aoutput, createView } from \"./utils.js\";\n/**\n * Shared 32-bit conditional boolean primitive reused by SHA-256, SHA-1, and MD5 `F`.\n * Returns bits from `b` when `a` is set, otherwise from `c`.\n * The XOR form is equivalent to MD5's `F(X,Y,Z) = XY v not(X)Z` because the masked terms never\n * set the same bit.\n * @param a - selector word\n * @param b - word chosen when selector bit is set\n * @param c - word chosen when selector bit is clear\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit choice primitive.\n * ```ts\n * Chi(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/**\n * Shared 32-bit majority primitive reused by SHA-256 and SHA-1.\n * Returns bits shared by at least two inputs.\n * @param a - first input word\n * @param b - second input word\n * @param c - third input word\n * @returns Mixed 32-bit word.\n * @example\n * Combine three words with the shared 32-bit majority primitive.\n * ```ts\n * Maj(0xffffffff, 0x12345678, 0x87654321);\n * ```\n */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n * Accepts only byte-aligned `Uint8Array` input, even when the underlying spec describes bit\n * strings with partial-byte tails.\n * @param blockLen - internal block size in bytes\n * @param outputLen - digest size in bytes\n * @param padOffset - trailing length field size in bytes\n * @param isLE - whether length and state words are encoded in little-endian\n * @example\n * Use a concrete subclass to get the shared Merkle-Damgard update/digest flow.\n * ```ts\n * import { _SHA1 } from '@noble/hashes/legacy.js';\n * const hash = new _SHA1();\n * hash.update(new Uint8Array([97, 98, 99]));\n * hash.digest();\n * ```\n */\nexport class HashMD {\n blockLen;\n outputLen;\n canXOF = false;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n let processed = false;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path only when there is no buffered partial block: `take === blockLen` implies\n // `this.pos === 0`, so we can process full blocks directly from the input view.\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n processed = true;\n continue;\n }\n // When the whole input is buffered in one go (common for short messages), passing `data`\n // directly avoids allocating a subarray view.\n buffer.set(pos === 0 && take === len ? data : data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n processed = true;\n }\n }\n this.length += data.length;\n // Shared schedule buffers only pick up input-derived words inside process(); if everything\n // was buffered without processing, there is nothing to zero.\n if (processed)\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message, then zero-pad the rest of the block\n buffer[pos++] = 0b10000000;\n buffer.fill(0, pos);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n buffer.fill(0);\n }\n // `padOffset` reserves the whole length field. For SHA-384/512 the high 64 bits stay zero from\n // the padding fill above, and JS will overflow before user input can make that half non-zero.\n // So we only need to write the low 64 bits here (`length * 8` only scales the exponent of an\n // integer below 2**53, so the split inside the helper stays exact).\n setU64FromNum(view, blockLen - 8, this.length * 8, isLE);\n this.process(view, 0);\n // The final block above is processed outside update(), so the shared message-schedule\n // buffers (e.g. SHA256_W) would otherwise retain input-derived words after digest().\n this.roundClean();\n // digest() passes our own `buffer` as `out`; reuse its cached view instead of allocating one.\n const oview = out === buffer ? view : createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n const outLen = len / 4;\n const state = this.get();\n // Subclass-misconfiguration invariant: outputLen must be 32-bit aligned and fit the state.\n if (len % 4 || outLen > state.length)\n throw new Error('invalid outputLen');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n // Copy before destroy(): subclasses wipe `buffer` during cleanup, but `digest()` must return\n // fresh bytes to the caller.\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneIntoMeta(to) {\n const { buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // Only partial-block bytes need copying: when `length % blockLen === 0`, `pos === 0` and\n // later `update()` / `digestInto()` overwrite `to.buffer` from the start before reading it.\n if (pos)\n to.buffer.set(buffer); // Avoid a hot modulo guard.\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state from RFC 6234 \u00A76.1: the first 32 bits of the fractional parts of the\n * square roots of the first eight prime numbers. Exported as a shared table; callers must treat\n * it as read-only because constructors copy words from it by index. */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state `H(0)` from RFC 6234 \u00A76.1. Exported as a shared table; callers must\n * treat it as read-only because constructors copy words from it by index. */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state from RFC 6234 \u00A76.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the ninth\n * through sixteenth prime numbers. Exported as a shared table; callers must treat it as read-only\n * because constructors copy halves from it by index. */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state from RFC 6234 \u00A76.3: eight RFC 64-bit `H(0)` words stored as sixteen\n * big-endian 32-bit halves. Derived from the fractional parts of the square roots of the first\n * eight prime numbers. Exported as a shared table; callers must treat it as read-only because\n * constructors copy halves from it by index. */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out {@link https://www.rfc-editor.org/rfc/rfc4634 | RFC 4634} and\n * {@link https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf | FIPS 180-4}.\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, oidNist, rotr } from \"./utils.js\";\n/**\n * SHA-224 / SHA-256 round constants from RFC 6234 \u00A75.1: the first 32 bits\n * of the cube roots of the first 64 primes (2..311).\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable SHA-224 / SHA-256 message schedule buffer `W_t` from RFC 6234 \u00A76.2 step 1. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n/** Internal SHA-224 / SHA-256 compression engine from RFC 6234 \u00A76.2. */\nclass SHA2_32B extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // Numeric initializers matter: starting the fields as `undefined` changes\n // V8's field representation and makes sha256 3x slower (measured).\n A = 0;\n B = 0;\n C = 0;\n D = 0;\n E = 0;\n F = 0;\n G = 0;\n H = 0;\n constructor(outputLen, IV) {\n super(64, outputLen, 8, false);\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n _cloneInto(to) {\n (to ||= new this.constructor()).set(...this.get());\n return this._cloneIntoMeta(to);\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves\n // update()/digest() callable on reused instances.\n this.destroyed = true;\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/** Internal SHA-256 hash class grounded in RFC 6234 \u00A76.2. */\nexport class _SHA256 extends SHA2_32B {\n constructor() {\n super(32, SHA256_IV);\n }\n}\n/** Internal SHA-224 hash class grounded in RFC 6234 \u00A76.2 and \u00A78.5. */\nexport class _SHA224 extends SHA2_32B {\n constructor() {\n super(28, SHA224_IV);\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// SHA-384 / SHA-512 round constants from RFC 6234 \u00A75.2:\n// 80 full 64-bit words split into high/low halves.\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable high-half schedule buffer for the RFC 6234 \u00A76.4 64-bit `W_t` words.\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\n// Reusable low-half schedule buffer for the RFC 6234 \u00A76.4 64-bit `W_t` words.\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n/** Internal SHA-384 / SHA-512 compression engine from RFC 6234 \u00A76.4. */\nclass SHA2_64B extends HashMD {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n // Numeric initializers matter: starting the fields as `undefined` changes\n // V8's field representation and slows hashing down (measured on sha256).\n Ah = 0;\n Al = 0;\n Bh = 0;\n Bl = 0;\n Ch = 0;\n Cl = 0;\n Dh = 0;\n Dl = 0;\n Eh = 0;\n El = 0;\n Fh = 0;\n Fl = 0;\n Gh = 0;\n Gl = 0;\n Hh = 0;\n Hl = 0;\n constructor(outputLen, IV) {\n super(128, outputLen, 16, false);\n this.Ah = IV[0] | 0;\n this.Al = IV[1] | 0;\n this.Bh = IV[2] | 0;\n this.Bl = IV[3] | 0;\n this.Ch = IV[4] | 0;\n this.Cl = IV[5] | 0;\n this.Dh = IV[6] | 0;\n this.Dl = IV[7] | 0;\n this.Eh = IV[8] | 0;\n this.El = IV[9] | 0;\n this.Fh = IV[10] | 0;\n this.Fl = IV[11] | 0;\n this.Gh = IV[12] | 0;\n this.Gl = IV[13] | 0;\n this.Hh = IV[14] | 0;\n this.Hl = IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n _cloneInto(to) {\n (to ||= new this.constructor()).set(...this.get());\n return this._cloneIntoMeta(to);\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA512_W[i] = s0 + s1 + SHA512_W[i - 7] + SHA512_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves\n // update()/digest() callable on reused instances.\n this.destroyed = true;\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/** Internal SHA-512 hash class grounded in RFC 6234 \u00A76.3 and \u00A76.4. */\nexport class _SHA512 extends SHA2_64B {\n constructor() {\n super(64, SHA512_IV);\n }\n}\n/** Internal SHA-384 hash class grounded in RFC 6234 \u00A76.3 and \u00A76.4. */\nexport class _SHA384 extends SHA2_64B {\n constructor() {\n super(48, SHA384_IV);\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See the repo-side derivation recipe in `test/misc/sha2-gen-iv.js`.\n * These IV literals are checked against that script rather than a dedicated\n * local RFC section.\n */\n/** SHA-512/224 IV derived by the SHA-512/t recipe in `test/misc/sha2-gen-iv.js` and\n * stored as sixteen big-endian 32-bit halves. */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA-512/256 IV derived by the SHA-512/t recipe in `test/misc/sha2-gen-iv.js` and\n * stored as sixteen big-endian 32-bit halves. */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n/** Internal SHA-512/224 hash class using the derived `T224_IV` and the shared\n * RFC 6234 \u00A76.4 compression engine. */\nexport class _SHA512_224 extends SHA2_64B {\n constructor() {\n super(28, T224_IV);\n }\n}\n/** Internal SHA-512/256 hash class using the derived `T256_IV` and the shared\n * RFC 6234 \u00A76.4 compression engine. */\nexport class _SHA512_256 extends SHA2_64B {\n constructor() {\n super(32, T256_IV);\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-256.\n * ```ts\n * sha256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new _SHA256(), \n/* @__PURE__ */ oidNist(0x01));\n/**\n * SHA2-224 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-224.\n * ```ts\n * sha224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new _SHA224(), \n/* @__PURE__ */ oidNist(0x04));\n/**\n * SHA2-512 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512.\n * ```ts\n * sha512(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new _SHA512(), \n/* @__PURE__ */ oidNist(0x03));\n/**\n * SHA2-384 hash function from RFC 4634.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-384.\n * ```ts\n * sha384(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new _SHA384(), \n/* @__PURE__ */ oidNist(0x02));\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on {@link https://eprint.iacr.org/2010/548.pdf | truncated SHA512}.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512/256.\n * ```ts\n * sha512_256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new _SHA512_256(), \n/* @__PURE__ */ oidNist(0x06));\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on {@link https://eprint.iacr.org/2010/548.pdf | truncated SHA512}.\n * @param msg - message bytes to hash\n * @param opts - Reserved hash options.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA2-512/224.\n * ```ts\n * sha512_224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new _SHA512_224(), \n/* @__PURE__ */ oidNist(0x05));\n", "// SHA-256 for CIDs. The default is pure JavaScript (@noble/hashes), so hashing works the same in\n// browsers, Node and React Native (Hermes has no WebCrypto). An app may supply its own\n// implementation (for example a native module on a phone) with setSha256; it is checked against\n// known digests first, because a wrong implementation would silently produce wrong CIDs.\nimport { from } from 'multiformats/hashes/hasher'\nimport { sha256 as nobleSha256 } from '@noble/hashes/sha2.js'\n\nexport type Sha256 = (bytes: Uint8Array) => Uint8Array | Promise<Uint8Array>\n\nlet current: Sha256 = nobleSha256\n\nexport const sha256 = from({ name: 'sha2-256', code: 0x12, encode: (input: Uint8Array) => current(input) })\n\nconst ascii = (s: string) => Uint8Array.from(s, c => c.charCodeAt(0))\nconst hex = (b: Uint8Array) => Array.from(b, x => x.toString(16).padStart(2, '0')).join('')\n\n// FIPS 180-2 test vectors, and a large input checked against the built-in implementation (which\n// exercises block handling the short vectors do not).\nconst VECTORS: [Uint8Array, string][] = [\n [ascii(''), 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'],\n [ascii('abc'), 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'],\n [ascii('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'), '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'],\n]\n\n// Use a different SHA-256 implementation from now on. Rejects (and keeps the current one) if it\n// does not produce correct digests.\nexport async function setSha256(fn: Sha256): Promise<void> {\n const big = Uint8Array.from({ length: 1_000_003 }, (_, i) => (i * 31 + 7) & 255)\n const cases: [Uint8Array, string][] = [...VECTORS, [big, hex(nobleSha256(big))]]\n for (const [input, expected] of cases) {\n let got: string\n try { got = hex(await fn(input)) } catch (err) { throw new Error(`SHA-256 implementation failed its self-test: ${(err as Error).message}`) }\n if (got !== expected) throw new Error(`SHA-256 implementation failed its self-test (input of ${input.length} bytes)`)\n }\n current = fn\n}\n\n// Go back to the built-in pure-JavaScript implementation.\nexport function resetSha256(): void {\n current = nobleSha256\n}\n", "// Document validation (Specification 1.0). Never throws; reports every problem found.\n\nimport { CID } from 'multiformats/cid'\nimport * as dagJson from '@ipld/dag-json'\nimport { sha256 } from './hash.js'\nimport type { Problem } from './types.js'\nimport { checkText, findEntityLike } from './text.js'\nimport { isValidId, MAX_ID_LENGTH, looksLikeDomain } from './ids.js'\nimport { canonicalLanguageTag, isCanonicalLanguageTag } from './language.js'\nimport { parseMarkup, findReferences, findParams } from './markup.js'\n\nexport const SUPPORTED_VERSIONS = ['1.0'] as const\n\nconst DOCUMENT_FIELDS = new Set(['stroc', 'language', 'title', 'author', 'published', 'text', 'sections', 'replaces', 'parameters'])\nconst INLINE_FIELDS = new Set(['id', 'title', 'text', 'sections'])\nconst INCLUDE_FIELDS = new Set(['id', 'source'])\nconst PARAMETER_FIELDS = new Set(['key', 'label', 'default'])\n\ntype Path = (string | number)[]\n\n// A reference that steps into an included document; only composition can check the rest of it.\nexport interface ExternalReference {\n path: string[] // full reference path; path[0] is the include's id\n at: Path // where the reference appears\n offset: number\n}\n\nexport interface ValidationResult {\n valid: boolean\n problems: Problem[] // errors: the document is not valid\n warnings: Problem[] // advice: the document is valid\n external: ExternalReference[]\n}\n\ninterface Ctx {\n problems: Problem[]\n warnings: Problem[]\n ids: Map<string, { include: boolean, at: Path }>\n refs: { path: string[], at: Path, offset: number }[]\n params: { key: string, at: Path, offset: number }[]\n declared: Set<string>\n}\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v) && !CID.asCID(v) && !(v instanceof Uint8Array)\n}\n\nfunction describe(v: unknown): string {\n if (v === null) return 'null'\n if (Array.isArray(v)) return 'an array'\n if (CID.asCID(v)) return 'a link'\n return `a ${typeof v}`\n}\n\nfunction problem(ctx: Ctx, at: Path, code: string, message: string, offset?: number) {\n ctx.problems.push({ path: at, code, message, ...(offset !== undefined ? { offset } : {}) })\n}\n\nfunction checkUnknown(ctx: Ctx, obj: Record<string, unknown>, allowed: Set<string>, at: Path) {\n for (const key of Object.keys(obj)) {\n if (!allowed.has(key)) problem(ctx, [...at, key], 'unknown-field', `unknown field \"${key}\"`)\n }\n}\n\n// A plain-text string field. Returns the string if it is one.\nfunction checkString(ctx: Ctx, value: unknown, at: Path): string | undefined {\n if (typeof value !== 'string') {\n problem(ctx, at, 'not-string', `must be a string, not ${describe(value)}`)\n return undefined\n }\n for (const issue of checkText(value)) problem(ctx, at, issue.code, issue.message, issue.offset)\n return value\n}\n\n// Paragraph text: canonical text plus markup grammar.\nfunction checkParagraph(ctx: Ctx, value: unknown, at: Path) {\n const text = checkString(ctx, value, at)\n if (text === undefined) return\n const { nodes, issues } = parseMarkup(text)\n for (const issue of issues) problem(ctx, at, issue.code, issue.message, issue.offset)\n for (const ref of findReferences(nodes)) ctx.refs.push({ path: ref.path, at, offset: ref.offset })\n for (const p of findParams(nodes)) ctx.params.push({ key: p.key, at, offset: p.offset })\n for (const offset of findEntityLike(text)) {\n ctx.warnings.push({ path: at, code: 'entity-like', message: 'looks like an HTML entity; Stroc text is literal, so it will appear exactly as written', offset })\n }\n}\n\nfunction checkId(ctx: Ctx, value: unknown, at: Path, include: boolean) {\n const id = checkString(ctx, value, at)\n if (id === undefined) return\n if (!isValidId(id)) {\n problem(ctx, at, 'bad-id', `\"${id}\" is not a valid id: lowercase letters, digits and single hyphens, starting with a letter, at most ${MAX_ID_LENGTH} characters`)\n return\n }\n const prior = ctx.ids.get(id)\n if (prior) problem(ctx, at, 'duplicate-id', `id \"${id}\" is already used at ${prior.at.join('.')}; ids must be unique within the document`)\n else ctx.ids.set(id, { include, at })\n}\n\n// A link to another Stroc document: CIDv1, DAG-JSON codec, SHA-256.\nexport function checkDocumentLink(value: unknown): string | undefined {\n const cid = CID.asCID(value)\n if (!cid) return `must be a link ({\"/\": \"baguqeera...\"}), not ${describe(value)}`\n if (cid.version !== 1) return 'must be a CIDv1'\n if (cid.code !== dagJson.code) return 'must link to a DAG-JSON document (CID beginning \"baguqeera\")'\n if (cid.multihash.code !== sha256.code) return 'must use a SHA-256 hash'\n return undefined\n}\n\nfunction checkLink(ctx: Ctx, value: unknown, at: Path) {\n const err = checkDocumentLink(value)\n if (err) problem(ctx, at, 'bad-link', err)\n}\n\nfunction checkArray(ctx: Ctx, value: unknown, at: Path): unknown[] | undefined {\n if (!Array.isArray(value)) {\n problem(ctx, at, 'not-array', `must be an array, not ${describe(value)}`)\n return undefined\n }\n if (value.length === 0) {\n problem(ctx, at, 'empty', 'must not be empty (omit the field instead)')\n return undefined\n }\n return value\n}\n\nfunction checkSections(ctx: Ctx, value: unknown, at: Path) {\n const list = checkArray(ctx, value, at)\n list?.forEach((sec, idx) => checkSection(ctx, sec, [...at, idx]))\n}\n\nfunction checkSection(ctx: Ctx, sec: unknown, at: Path) {\n if (!isObject(sec)) {\n problem(ctx, at, 'not-object', `a section must be an object, not ${describe(sec)}`)\n return\n }\n if ('source' in sec) {\n checkUnknown(ctx, sec, INCLUDE_FIELDS, at)\n checkLink(ctx, sec.source, [...at, 'source'])\n if (sec.id === undefined) problem(ctx, [...at, 'id'], 'missing-id', 'an include section must have an id')\n else checkId(ctx, sec.id, [...at, 'id'], true)\n return\n }\n checkUnknown(ctx, sec, INLINE_FIELDS, at)\n if (sec.title === undefined && sec.text === undefined && sec.sections === undefined) {\n problem(ctx, at, 'empty-section', 'a section must have a title, text or sections')\n }\n if (sec.id !== undefined) checkId(ctx, sec.id, [...at, 'id'], false)\n if (sec.title !== undefined) checkString(ctx, sec.title, [...at, 'title'])\n if (sec.text !== undefined) checkParagraph(ctx, sec.text, [...at, 'text'])\n if (sec.sections !== undefined) checkSections(ctx, sec.sections, [...at, 'sections'])\n}\n\nfunction checkVersion(ctx: Ctx, value: unknown) {\n if (value === undefined) { problem(ctx, ['stroc'], 'missing', 'missing format version \"stroc\"'); return }\n if (typeof value !== 'string') { problem(ctx, ['stroc'], 'not-string', `must be a string such as '1.0', not ${describe(value)}`); return }\n if ((SUPPORTED_VERSIONS as readonly string[]).includes(value)) return\n if (/^0\\.\\d+$/.test(value)) {\n problem(ctx, ['stroc'], 'draft-version', `\"${value}\" is a pre-release draft format version; documents are now \"1.0\" (changing it changes the CID, so relink anything that includes this document)`)\n return\n }\n const newer = /^\\d+(\\.\\d+)*$/.test(value) && compareVersions(value, SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1]) > 0\n problem(ctx, ['stroc'], newer ? 'version-too-new' : 'unknown-version',\n newer ? `format version \"${value}\" is newer than this tool supports; upgrade the tool`\n : `unknown format version \"${value}\"; supported: ${SUPPORTED_VERSIONS.join(', ')}`)\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split('.').map(Number), pb = b.split('.').map(Number)\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0)\n if (d) return d\n }\n return 0\n}\n\nfunction checkLanguage(ctx: Ctx, value: unknown) {\n if (value === undefined) { problem(ctx, ['language'], 'missing', 'missing language'); return }\n const tag = checkString(ctx, value, ['language'])\n if (tag === undefined || isCanonicalLanguageTag(tag)) return\n const fixed = canonicalLanguageTag(tag)\n problem(ctx, ['language'], 'bad-language', fixed\n ? `language tag must be written \"${fixed}\"`\n : `\"${tag}\" is not a BCP 47 language tag (for example \"en\", \"en-US\", \"sr-Latn\")`)\n}\n\nfunction checkPublished(ctx: Ctx, value: unknown) {\n const date = checkString(ctx, value, ['published'])\n if (date === undefined) return\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(date)\n const ok = m && (() => {\n const d = new Date(Date.UTC(+m[1], +m[2] - 1, +m[3]))\n return d.getUTCFullYear() === +m[1] && d.getUTCMonth() === +m[2] - 1 && d.getUTCDate() === +m[3]\n })()\n if (!ok) problem(ctx, ['published'], 'bad-date', 'must be a date written YYYY-MM-DD')\n}\n\nfunction checkReplaces(ctx: Ctx, value: unknown) {\n const list = checkArray(ctx, value, ['replaces'])\n if (!list) return\n const seen = new Set<string>()\n list.forEach((link, idx) => {\n checkLink(ctx, link, ['replaces', idx])\n const cid = CID.asCID(link)\n if (cid) {\n if (seen.has(cid.toString())) problem(ctx, ['replaces', idx], 'duplicate', 'listed more than once')\n seen.add(cid.toString())\n }\n })\n}\n\nfunction checkParameters(ctx: Ctx, value: unknown) {\n const list = checkArray(ctx, value, ['parameters'])\n if (!list) return\n const keys = new Set<string>()\n list.forEach((param, idx) => {\n const at: Path = ['parameters', idx]\n if (!isObject(param)) { problem(ctx, at, 'not-object', `a parameter must be an object, not ${describe(param)}`); return }\n checkUnknown(ctx, param, PARAMETER_FIELDS, at)\n if (param.key === undefined) problem(ctx, [...at, 'key'], 'missing', 'a parameter must have a key')\n else {\n const key = checkString(ctx, param.key, [...at, 'key'])\n if (key !== undefined) {\n if (!isValidId(key)) problem(ctx, [...at, 'key'], 'bad-id', `\"${key}\" is not a valid key: same rules as a section id`)\n else if (keys.has(key)) problem(ctx, [...at, 'key'], 'duplicate-key', `parameter key \"${key}\" is declared more than once`)\n keys.add(key)\n ctx.declared.add(key)\n }\n }\n if (param.label === undefined) problem(ctx, [...at, 'label'], 'missing', 'a parameter must have a label')\n else checkString(ctx, param.label, [...at, 'label'])\n if (param.default !== undefined) checkString(ctx, param.default, [...at, 'default'])\n })\n}\n\nfunction checkReferences(ctx: Ctx): ExternalReference[] {\n const external: ExternalReference[] = []\n for (const ref of ctx.refs) {\n const target = ctx.ids.get(ref.path[0])\n if (!target) {\n problem(ctx, ref.at, 'unresolved-ref', `<ref:${ref.path.join('/')}>: no section with id \"${ref.path[0]}\" in this document`, ref.offset)\n } else if (ref.path.length > 1) {\n if (!target.include) {\n problem(ctx, ref.at, 'bad-ref-path', `<ref:${ref.path.join('/')}>: \"${ref.path[0]}\" is not an included document, so the path cannot continue`, ref.offset)\n } else {\n external.push({ path: ref.path, at: ref.at, offset: ref.offset })\n }\n }\n }\n return external\n}\n\n// Validate a document in the data model (links as CID objects, e.g. from fromPlain or decodeDocument).\nexport function validateDocument(doc: unknown): ValidationResult {\n const ctx: Ctx = { problems: [], warnings: [], ids: new Map(), refs: [], params: [], declared: new Set() }\n if (!isObject(doc)) {\n problem(ctx, [], 'not-object', `a document must be an object, not ${describe(doc)}`)\n return { valid: false, problems: ctx.problems, warnings: [], external: [] }\n }\n checkUnknown(ctx, doc, DOCUMENT_FIELDS, [])\n checkVersion(ctx, doc.stroc)\n checkLanguage(ctx, doc.language)\n if (doc.title === undefined) problem(ctx, ['title'], 'missing', 'missing title')\n else checkString(ctx, doc.title, ['title'])\n if (doc.author !== undefined) {\n const author = checkString(ctx, doc.author, ['author'])\n if (author !== undefined && looksLikeDomain(author)) {\n ctx.warnings.push({ path: ['author'], code: 'author-domain-case', message: `\"${author}\" looks like a domain; write it \"${author.toLowerCase()}\" if it should be verifiable, otherwise it is treated as a name` })\n }\n }\n if (doc.published !== undefined) checkPublished(ctx, doc.published)\n if (doc.text !== undefined) checkParagraph(ctx, doc.text, ['text'])\n if (doc.sections !== undefined) checkSections(ctx, doc.sections, ['sections'])\n if (doc.replaces !== undefined) checkReplaces(ctx, doc.replaces)\n if (doc.parameters !== undefined) checkParameters(ctx, doc.parameters)\n const external = checkReferences(ctx)\n for (const p of ctx.params) {\n if (!ctx.declared.has(p.key)) {\n problem(ctx, p.at, 'undeclared-param', `<param:${p.key}>: no parameter \"${p.key}\" is declared in this document's parameters`, p.offset)\n }\n }\n return { valid: ctx.problems.length === 0, problems: ctx.problems, warnings: ctx.warnings, external }\n}\n", "// Canonical encoding, CIDs and verification (Specification: Content ID Generation, Verification)\n\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from './hash.js'\nimport * as dagJson from '@ipld/dag-json'\nimport type { Problem, StrocDocument } from './types.js'\nimport { validateDocument, checkDocumentLink, type ValidationResult } from './validate.js'\n\nexport const DAG_JSON_CODE = dagJson.code\n\n// Canonical DAG-JSON bytes of any value in the data model. Does not validate.\nexport function encodeDagJson(value: unknown): Uint8Array {\n return dagJson.encode(value)\n}\n\n// The CID of some bytes, as a DAG-JSON block.\nexport async function computeCid(bytes: Uint8Array): Promise<CID> {\n return CID.create(1, dagJson.code, await sha256.digest(bytes))\n}\n\n// The CID of any value (for example an app's data object), encoded as DAG-JSON. Does not validate.\nexport async function cidOfValue(value: unknown): Promise<CID> {\n return computeCid(encodeDagJson(value))\n}\n\nexport interface DocumentCidResult {\n cid?: CID\n bytes?: Uint8Array\n validation: ValidationResult\n}\n\n// Validate a document and, if valid, encode it and compute its CID. Nothing is altered first:\n// a document that is not already canonical is reported, not fixed.\nexport async function documentCid(doc: unknown): Promise<DocumentCidResult> {\n const validation = validateDocument(doc)\n if (!validation.valid) return { validation }\n const bytes = encodeDagJson(doc)\n return { cid: await computeCid(bytes), bytes, validation }\n}\n\nexport interface VerifyResult {\n ok: boolean\n document?: StrocDocument\n problems: Problem[]\n validation?: ValidationResult\n}\n\n// Verify received bytes against a claimed CID: hash exactly what was received, require canonical\n// DAG-JSON, then validate. Never normalizes.\nexport async function verifyDocument(bytes: Uint8Array, claimed: CID | string): Promise<VerifyResult> {\n const fail = (code: string, message: string): VerifyResult =>\n ({ ok: false, problems: [{ path: [], code, message }] })\n let cid: CID\n try {\n cid = typeof claimed === 'string' ? CID.parse(claimed) : claimed\n } catch {\n return fail('bad-cid', `\"${String(claimed)}\" is not a CID`)\n }\n const linkError = checkDocumentLink(cid)\n if (linkError) return fail('bad-cid', `the claimed CID ${linkError}`)\n const actual = await computeCid(bytes)\n if (!actual.equals(cid)) return fail('cid-mismatch', `content hashes to ${actual}, not ${cid}`)\n let value: unknown\n try {\n value = dagJson.decode(bytes)\n } catch (err) {\n return fail('bad-encoding', `not valid DAG-JSON: ${(err as Error).message}`)\n }\n const reencoded = dagJson.encode(value)\n if (!sameBytes(reencoded, bytes)) return fail('not-canonical', 'not canonical DAG-JSON (key order, spacing or number form differs)')\n const validation = validateDocument(value)\n return {\n ok: validation.valid,\n document: validation.valid ? value as StrocDocument : undefined,\n problems: validation.problems,\n validation,\n }\n}\n\nexport function decodeDagJson(bytes: Uint8Array): unknown {\n return dagJson.decode(bytes)\n}\n\nfunction sameBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false\n return true\n}\n\n// Convert a plain value parsed from JSON or YAML into the data model: every {\"/\": \"<cid>\"} becomes\n// a link. Malformed link objects are reported and left as they are (validation will reject them).\nexport function fromPlain(value: unknown): { value: unknown, problems: Problem[] } {\n const problems: Problem[] = []\n const walk = (v: unknown, at: (string | number)[]): unknown => {\n if (Array.isArray(v)) return v.map((x, i) => walk(x, [...at, i]))\n if (typeof v === 'object' && v !== null && !CID.asCID(v)) {\n const obj = v as Record<string, unknown>\n if ('/' in obj) {\n if (Object.keys(obj).length === 1 && typeof obj['/'] === 'string') {\n try { return CID.parse(obj['/']) } catch {\n const linkText = obj['/']\n problems.push({ path: at, code: 'bad-link', message: /\\.(ya?ml|json)$/i.test(linkText)\n ? `\"${linkText}\" is a file, not a CID: run \\`stroc link\\` to replace it with that file's CID`\n : `\"${linkText}\" is not a CID` })\n return v\n }\n }\n problems.push({ path: at, code: 'bad-link', message: 'a link must be written {\"/\": \"<cid>\"} with no other keys' })\n return v\n }\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(obj)) out[k] = walk(x, [...at, k])\n return out\n }\n return v\n }\n return { value: walk(value, []), problems }\n}\n\n// Convert from the data model to plain JSON/YAML values: every link becomes {\"/\": \"<cid>\"}.\nexport function toPlain(value: unknown): unknown {\n const cid = CID.asCID(value)\n if (cid) return { '/': cid.toString() }\n if (Array.isArray(value)) return value.map(toPlain)\n if (typeof value === 'object' && value !== null) {\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(value)) out[k] = toPlain(x)\n return out\n }\n return value\n}\n", "const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n", "import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (isMap(node))\n return visitor.Map?.(key, node, path);\n if (isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (isPair(node))\n return visitor.Pair?.(key, node, path);\n if (isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexport { visit, visitAsync };\n", "import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n const tags = {};\n visit(doc.contents, (_key, node) => {\n if (isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n", "import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (isScalar(ref.node) || isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n", "/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n", "import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexport { toJS };\n", "import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexport { NodeBase };\n", "import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n constructor(source) {\n super(ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n if (ctx?.maxAliasCount === 0)\n throw new ReferenceError('Alias resolution is disabled');\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit(doc, {\n Node: (_key, node) => {\n if (isAlias(node) || hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n if (found && ctx) {\n const { anchors, doc, maxAliasCount } = ctx;\n let data = anchors.get(found);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS(found, null, ctx);\n data = anchors.get(found);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, found, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const source = this.resolve(ctx.doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n return ctx.anchors.get(source).res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexport { Alias };\n", "import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n constructor(value) {\n super(SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n", "import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (isDocument(value))\n value = value.contents;\n if (isNode(value))\n return value;\n if (isPair(value)) {\n const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[MAP]\n : Symbol.iterator in Object(value)\n ? schema[SEQ]\n : schema[MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexport { createNode };\n", "import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && isScalar(node) ? node.value : node;\n else\n return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n", "/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n", "const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n", "import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.BLOCK_FOLDED:\n case Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexport { stringifyString };\n", "import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trailingComma: false,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n if (anchor && anchorIsValid(anchor)) {\n anchors.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : isScalar(node)\n ? stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n", "import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n isCollection(key) ||\n (isScalar(key)\n ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexport { stringifyPair };\n", "function debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n console.warn(warning);\n }\n}\n\nexport { debug, warn };\n", "import { isScalar, isSeq, isAlias, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (isScalar(key) &&\n (!key.type || key.type === Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (isSeq(source))\n for (const it of source.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(source))\n for (const it of source)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (!isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\nfunction resolveAliasValue(ctx, value) {\n return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n", "import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (isMergeKey(ctx, key))\n addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (isNode(key) && ctx?.doc) {\n const strCtx = createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n", "import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n const k = createNode(key, undefined, ctx);\n const v = createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (isNode(key))\n key = key.clone(schema);\n if (isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexport { Pair, createPair };\n", "import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify(item, itemCtx, () => (comment = null));\n reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n if (i < items.length - 1) {\n str += ',';\n }\n else if (ctx.options.trailingComma) {\n if (ctx.options.lineWidth > 0) {\n reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n (str.length + 2) >\n ctx.options.lineWidth);\n }\n if (reqNewline) {\n str += ',';\n }\n }\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexport { stringifyCollection };\n", "import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n const k = isScalar(key) ? key.value : key;\n for (const it of items) {\n if (isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair(pair, pair?.value);\n }\n else\n _pair = new Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (isScalar(prev.value) && isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexport { YAMLMap, findPair };\n", "import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n", "import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (isScalar(prev) && isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexport { YAMLSeq };\n", "import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n", "import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexport { string };\n", "import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexport { nullTag };\n", "import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexport { boolTag };\n", "function stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^-?\\d/.test(n) &&\n !n.includes('e')) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexport { stringifyNumber };\n", "import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n", "import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n", "import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n boolTag,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float\n];\n\nexport { schema };\n", "import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n", "import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.BLOCK_LITERAL);\n if (type !== Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexport { binary };\n", "import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n if (isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (isPair(item))\n continue;\n else if (isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair(new Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = isPair(item) ? item : new Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n", "import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (isPair(pair)) {\n key = toJS(pair.key, '', ctx);\n value = toJS(pair.value, key, ctx);\n }\n else {\n key = toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs = createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs = resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs.items) {\n if (isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n", "import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar(false),\n stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n", "import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n", "import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n", "import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair(key.key, null);\n else\n pair = new Pair(key, null);\n const prev = findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = findPair(this.items, key);\n return !keepPair && isPair(pair)\n ? isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexport { YAMLSet, set };\n", "import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n", "import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n trueTag,\n falseTag,\n intBin,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float,\n binary,\n merge,\n omap,\n pairs,\n set,\n intTime,\n floatTime,\n timestamp\n];\n\nexport { schema };\n", "import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n ['core', schema],\n ['failsafe', [map, seq, string]],\n ['json', schema$1],\n ['yaml11', schema$2],\n ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n binary,\n bool: boolTag,\n float,\n floatExp,\n floatNaN,\n floatTime,\n int,\n intHex,\n intOct,\n intTime,\n map,\n merge,\n null: nullTag,\n omap,\n pairs,\n seq,\n set,\n timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary,\n 'tag:yaml.org,2002:merge': merge,\n 'tag:yaml.org,2002:omap': omap,\n 'tag:yaml.org,2002:pairs': pairs,\n 'tag:yaml.org,2002:set': set,\n 'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge)\n ? schemaTags.concat(merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexport { coreKnownTags, getTags };\n", "import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? getTags(compat, 'compat')\n : compat\n ? getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? coreKnownTags : {};\n this.tags = getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, MAP, { value: map });\n Object.defineProperty(this, SCALAR, { value: string });\n Object.defineProperty(this, SEQ, { value: seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexport { Schema };\n", "import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n", "import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, NODE_TYPE, { value: DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [NODE_TYPE]: { value: DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode(value, tag, ctx);\n if (flow && isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (isEmptyPath(path))\n return !keepScalar && isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (isEmptyPath(path))\n return this.contents !== undefined;\n return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n", "class YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '\u2026' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '\u2026';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '\u2026\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n", "function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexport { resolveProps };\n", "function containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexport { containsNewline };\n", "import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexport { flowIndentCheck };\n", "import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n", "import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexport { resolveBlockMap };\n", "import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexport { resolveBlockSeq };\n", "function resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexport { resolveEnd };\n", "import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // \u2192 key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexport { resolveFlowCollection };\n", "import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = isNode(res)\n ? res\n : new Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexport { composeCollection };\n", "import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexport { resolveBlockScalar };\n", "import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return unfoldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return unfoldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction unfoldLines(source) {\n const line = /(.*?)\\r?\\n/sy;\n let match = line.exec(source);\n if (!match)\n return source;\n /**\n * The negative lookbehinds in these RegExps are to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari < 16.4 and other old browsers:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let trimEnd, trimBoth;\n try {\n trimEnd = new RegExp('(?<![ \\t])[ \\t]+$');\n trimBoth = new RegExp('^[ \\t]+|(?<![ \\t])[ \\t]+$', 'g');\n }\n catch {\n trimEnd = /[ \\t]+$/;\n trimBoth = /^[ \\t]+|[ \\t]+$/g;\n }\n let res = match[1].replace(trimEnd, '');\n let sep = ' ';\n let pos = line.lastIndex;\n while ((match = line.exec(source))) {\n const lm = match[1].replace(trimBoth, '');\n if (lm === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + lm;\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n try {\n return String.fromCodePoint(code);\n }\n catch {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n}\n\nexport { resolveFlowScalar };\n", "import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = isScalar(res) ? res : new Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexport { composeScalar };\n", "function emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexport { emptyScalarPosition };\n", "import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n try {\n node = composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n }\n catch (error) {\n // Almost certainly here due to a stack overflow\n const message = error instanceof Error ? error.message : String(error);\n onError(token, 'RESOURCE_EXHAUSTION', message);\n }\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n isSrcToken = false;\n }\n }\n node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n", "import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexport { composeDoc };\n", "import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new YAMLWarning(pos, code, message));\n else\n this.errors.push(new YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n for (let i = 0; i < this.errors.length; ++i)\n doc.errors.push(this.errors[i]);\n for (let i = 0; i < this.warnings.length; ++i)\n doc.warnings.push(this.warnings[i]);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexport { Composer };\n", "const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` \u2013 Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` \u2013 Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` \u2013 Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` \u2013 The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n", "export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n", "import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return 'block-start';\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n let n = 0;\n loop: while (true) {\n switch (this.charAt(0)) {\n case '!':\n n += yield* this.pushTag();\n n += yield* this.pushSpaces(true);\n continue loop;\n case '&':\n n += yield* this.pushUntil(isNotAnchorChar);\n n += yield* this.pushSpaces(true);\n continue loop;\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n continue loop;\n }\n }\n }\n break loop;\n }\n return n;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexport { Lexer };\n", "/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexport { LineCounter };\n", "import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexport { Parser };\n", "import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n const docs = Array.from(composer.compose(parser.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n", "// YAML authoring format (Specification: YAML Authoring Format)\n//\n// A YAML file is the document: parsing gives the same data as its DAG-JSON spelling. Nothing is\n// normalized silently. `lintYaml` reports problems with line numbers, `fixYaml` edits only the\n// values that need fixing (keeping comments and layout), and `stringifyDocument` writes a document\n// in the standard layout.\n\nimport {\n parseDocument, isScalar, isMap, isSeq, isPair, visit, stringify, LineCounter,\n type Document, type Node as YamlNode, type Scalar,\n} from 'yaml'\nimport {\n fromPlain, toPlain, validateDocument, canonicalizeText, canonicalLanguageTag, canonicalMarkup, parseMarkup,\n type Problem, type ValidationResult,\n} from '@stroc/core'\n\nexport interface LocatedProblem extends Problem {\n line?: number // 1-based\n col?: number // 1-based\n}\n\nexport interface YamlParseResult {\n value?: unknown // the document in the data model (links as CIDs)\n problems: LocatedProblem[] // YAML errors and disallowed YAML features\n}\n\nexport interface YamlLintResult {\n valid: boolean\n value?: unknown\n problems: LocatedProblem[]\n warnings: LocatedProblem[]\n validation?: ValidationResult\n}\n\ninterface Parsed {\n ydoc: Document.Parsed\n lc: LineCounter\n}\n\nfunction parse(text: string): Parsed {\n const lc = new LineCounter()\n const ydoc = parseDocument(text, { lineCounter: lc, version: '1.2', schema: 'core', merge: false, uniqueKeys: true, prettyErrors: false })\n return { ydoc, lc }\n}\n\nfunction locate(p: Parsed, offset: number | undefined): { line?: number, col?: number } {\n if (offset === undefined) return {}\n const pos = p.lc.linePos(offset)\n return { line: pos.line, col: pos.col }\n}\n\n// The source offset of the value at a document path, or of its nearest existing ancestor.\nfunction offsetOfPath(p: Parsed, path: (string | number)[]): number | undefined {\n for (let n = path.length; n >= 0; n--) {\n const node = n === 0 ? p.ydoc.contents : p.ydoc.getIn(path.slice(0, n), true) as YamlNode | undefined\n if (node && 'range' in node && node.range) return node.range[0]\n }\n return undefined\n}\n\nfunction yamlFeatureProblems(p: Parsed): LocatedProblem[] {\n const problems: LocatedProblem[] = []\n for (const err of p.ydoc.errors) {\n problems.push({ path: [], code: 'yaml-error', message: err.message.split('\\n')[0], ...locate(p, err.pos[0]) })\n }\n visit(p.ydoc, {\n Alias(_k, node) {\n problems.push({ path: [], code: 'yaml-alias', message: 'YAML aliases (*name) are not allowed', ...locate(p, node.range?.[0]) })\n },\n Node(_k, node) {\n if (node.anchor) problems.push({ path: [], code: 'yaml-anchor', message: 'YAML anchors (&name) are not allowed', ...locate(p, node.range?.[0]) })\n if (node.tag) {\n problems.push({ path: [], code: 'yaml-tag', message: `YAML tags (${node.tag}) are not allowed`, ...locate(p, node.range?.[0]) })\n }\n },\n Pair(_k, pair) {\n if (isScalar(pair.key) && pair.key.value === '<<') {\n problems.push({ path: [], code: 'yaml-merge', message: 'YAML merge keys (<<) are not allowed', ...locate(p, pair.key.range?.[0]) })\n }\n },\n })\n return problems\n}\n\n// Parse YAML (or JSON, which is YAML) into the document model. Reports YAML errors and the YAML\n// features Stroc does not allow; does not validate the document.\nexport function parseYaml(text: string): YamlParseResult {\n const p = parse(text)\n const problems = yamlFeatureProblems(p)\n if (p.ydoc.errors.length) return { problems }\n const plain = fromPlain(p.ydoc.toJS({ maxAliasCount: -1 }))\n for (const prob of plain.problems) problems.push({ ...prob, ...locate(p, offsetOfPath(p, prob.path)) })\n return { value: plain.value, problems }\n}\n\n// Parse and validate. Every problem carries the line and column of the value it concerns.\nexport function lintYaml(text: string): YamlLintResult {\n const p = parse(text)\n const parsed = parseYaml(text)\n if (parsed.value === undefined) return { valid: false, problems: parsed.problems, warnings: [] }\n const validation = validateDocument(parsed.value)\n const place = (prob: Problem): LocatedProblem => ({ ...prob, ...locate(p, offsetOfPath(p, prob.path)) })\n // A malformed link is reported once, by the reader, not again by validation.\n const seen = new Set(parsed.problems.map(p => p.path.join('.')))\n const problems = [...parsed.problems, ...validation.problems.filter(p => !(p.code === 'bad-link' && seen.has(p.path.join('.')))).map(place)]\n return {\n valid: problems.length === 0,\n value: parsed.value,\n problems,\n warnings: validation.warnings.map(place),\n validation,\n }\n}\n\n// ---------------------------------------------------------------------------------------------\n// Writing\n\nconst DOCUMENT_ORDER = ['stroc', 'language', 'title', 'author', 'published', 'replaces', 'parameters', 'text', 'sections']\nconst SECTION_ORDER = ['id', 'title', 'text', 'sections', 'source']\nconst PARAMETER_ORDER = ['key', 'label', 'default']\n\n// Split canonical paragraph text into sentences, breaking only at single spaces, so that folding\n// the lines back together (YAML `>-`) restores the exact text.\nexport function sentenceLines(text: string, locale = 'en'): string[] {\n const Segmenter = (Intl as unknown as { Segmenter?: new (l: string, o: object) => { segment(t: string): Iterable<{ segment: string }> } }).Segmenter\n const pieces = Segmenter\n ? Array.from(new Segmenter(locale, { granularity: 'sentence' }).segment(text), s => s.segment)\n : text.split(/(?<=[.!?:;] )/)\n const lines: string[] = []\n let current = ''\n for (const piece of pieces) {\n current += piece\n if (current.endsWith(' ')) {\n lines.push(current.slice(0, -1))\n current = ''\n }\n }\n if (current) lines.push(current)\n return lines\n}\n\nfunction scalar(value: string): string {\n return stringify(value, { lineWidth: 0 }).trimEnd()\n}\n\nfunction quoted(value: string): string {\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nfunction linkText(value: unknown): string | undefined {\n if (value && typeof value === 'object' && '/' in value && Object.keys(value).length === 1) {\n return `{/: ${(value as { '/': string })['/']}}`\n }\n return undefined\n}\n\nfunction paragraph(text: string, indent: string, locale: string): string {\n return '>-\\n' + sentenceLines(text, locale).map(l => indent + l).join('\\n')\n}\n\nfunction ordered(obj: Record<string, unknown>, order: string[]): [string, unknown][] {\n const keys = [...order.filter(k => k in obj), ...Object.keys(obj).filter(k => !order.includes(k))]\n return keys.map(k => [k, obj[k]])\n}\n\nfunction emitMap(obj: Record<string, unknown>, order: string[], indent: string, locale: string, first = ''): string[] {\n const lines: string[] = []\n ordered(obj, order).forEach(([key, value], i) => {\n const lead = i === 0 ? first : indent\n const link = linkText(value)\n if (link) lines.push(`${lead}${key}: ${link}`)\n else if (typeof value === 'string') {\n if (key === 'text') lines.push(`${lead}${key}: ${paragraph(value, indent + ' ', locale)}`)\n else if (key === 'stroc' || key === 'published') lines.push(`${lead}${key}: ${quoted(value)}`)\n else lines.push(`${lead}${key}: ${scalar(value)}`)\n } else if (Array.isArray(value)) {\n lines.push(`${lead}${key}:`)\n const itemOrder = key === 'parameters' ? PARAMETER_ORDER : SECTION_ORDER\n for (const item of value) {\n const itemLink = linkText(item)\n if (itemLink) lines.push(`${indent} - ${itemLink}`)\n else if (typeof item === 'string') lines.push(`${indent} - ${scalar(item)}`)\n else lines.push(...emitMap(item as Record<string, unknown>, itemOrder, indent + ' ', locale, `${indent} - `))\n }\n } else {\n lines.push(`${lead}${key}: ${scalar(String(value))}`)\n }\n })\n return lines\n}\n\n// Write a document (data model) in the standard YAML layout: fixed field order, paragraphs as\n// folded scalars with one sentence per line, links as {/: cid}. Parsing the result gives back the\n// same document.\nexport function stringifyDocument(doc: unknown, options: { header?: string } = {}): string {\n const plain = toPlain(doc) as Record<string, unknown>\n const locale = typeof plain.language === 'string' ? plain.language : 'en'\n const header = options.header ? options.header.split('\\n').map(l => `# ${l}`.trimEnd()).join('\\n') + '\\n' : ''\n return header + emitMap(plain, DOCUMENT_ORDER, '', locale).join('\\n') + '\\n'\n}\n\n// ---------------------------------------------------------------------------------------------\n// Fixing\n\n// Markup spelling problems that can be fixed without guessing the author's intent. Grammar errors\n// (a bare <, a mistyped tag, unbalanced tags) are left for the author.\nconst SPELLING = new Set(['empty-emphasis', 'nested-same', 'emphasis-order', 'adjacent-emphasis', 'emphasis-edge-space'])\n\nfunction fixParagraph(value: string): string {\n const { issues } = parseMarkup(value)\n return issues.every(i => SPELLING.has(i.code)) ? canonicalMarkup(value) : canonicalizeText(value)\n}\n\nexport interface FixResult {\n text: string // the fixed source\n fixed: number // number of values changed\n}\n\n// Fix what can be fixed mechanically: non-canonical text (spaces, invisible characters, NFC),\n// markup spelling in paragraphs (order, merging, edge spaces), language tag case, and values YAML\n// read as numbers or booleans that must be strings. Only the affected values are rewritten;\n// comments and layout elsewhere are kept. Markup grammar errors are reported, not fixed.\nexport function fixYaml(text: string): FixResult {\n const p = parse(text)\n if (p.ydoc.errors.length) return { text, fixed: 0 }\n const edits: { start: number, end: number, replacement: string }[] = []\n\n visit(p.ydoc, {\n Pair(_k, pair) {\n if (!isScalar(pair.value) || !isScalar(pair.key)) return\n const key = String(pair.key.value)\n const node = pair.value as Scalar\n if (!node.range) return\n const inLink = key === '/'\n let replacement: string | undefined\n const value = node.value\n if (typeof value === 'string') {\n let fixedValue = inLink ? value : key === 'text' ? fixParagraph(value) : canonicalizeText(value)\n if (key === 'language') fixedValue = canonicalLanguageTag(fixedValue) ?? fixedValue\n if (fixedValue !== value && fixedValue !== '') {\n const isBlock = node.type === 'BLOCK_FOLDED' || node.type === 'BLOCK_LITERAL'\n const keyCol = p.lc.linePos(pair.key.range![0]).col - 1\n replacement = isBlock && key === 'text'\n ? paragraph(fixedValue, ' '.repeat(keyCol + 2), 'en')\n : key === 'stroc' || key === 'published' ? quoted(fixedValue) : scalar(fixedValue)\n }\n } else if (value !== null && value !== undefined && (typeof value === 'number' || typeof value === 'boolean')) {\n replacement = quoted(node.source ?? String(value))\n }\n if (replacement !== undefined) {\n // Keep any line breaks the original range ended with (block scalars include them).\n const trailing = /\\n*$/.exec(text.slice(node.range[0], node.range[1]))![0]\n edits.push({ start: node.range[0], end: node.range[1], replacement: replacement + trailing })\n }\n },\n })\n let out = text\n for (const e of edits.sort((a, b) => b.start - a.start)) {\n out = out.slice(0, e.start) + e.replacement + out.slice(e.end)\n }\n return { text: out, fixed: edits.length }\n}\n\n// ---------------------------------------------------------------------------------------------\n// File links (drafts)\n//\n// While drafting a set of documents, an include may name a sibling file instead of a CID:\n// `source: {/: ./clause.yaml}`. Such a file is not yet a valid document. `stroc link` replaces each\n// file link with the CID of that file, bottom-up.\n\nexport interface FileLink {\n target: string // the path as written\n start: number // source offsets of the path value\n end: number\n line: number\n}\n\nconst FILE_LINK = /\\.(ya?ml|json)$/i\n\nexport function isFileLink(value: string): boolean {\n return FILE_LINK.test(value)\n}\n\nexport function findFileLinks(text: string): FileLink[] {\n const p = parse(text)\n const links: FileLink[] = []\n visit(p.ydoc, {\n Pair(_k, pair) {\n if (!isScalar(pair.key) || pair.key.value !== '/' || !isScalar(pair.value)) return\n const value = pair.value.value\n if (typeof value === 'string' && isFileLink(value) && pair.value.range) {\n links.push({ target: value, start: pair.value.range[0], end: pair.value.range[1], line: p.lc.linePos(pair.value.range[0]).line })\n }\n },\n })\n return links\n}\n\n// Replace file links with CIDs; `resolve` returns the CID for a link's target, or undefined.\nexport function replaceFileLinks(text: string, resolve: (target: string) => string | undefined): { text: string, replaced: number, unresolved: FileLink[] } {\n const links = findFileLinks(text)\n const unresolved: FileLink[] = []\n let out = text\n let replaced = 0\n for (const link of [...links].sort((a, b) => b.start - a.start)) {\n const cid = resolve(link.target)\n if (!cid) { unresolved.unshift(link); continue }\n const trailing = /\\s*$/.exec(text.slice(link.start, link.end))![0]\n out = out.slice(0, link.start) + cid + trailing + out.slice(link.end)\n replaced++\n }\n return { text: out, replaced, unresolved }\n}\n\n// ---------------------------------------------------------------------------------------------\n// In-place edits for the folder tools\n\nexport interface LinkValue {\n value: string // the CID (or file path) as written\n start: number\n end: number\n line: number\n inReplaces: boolean // part of the document's replaces list, not an include\n}\n\n// Every link value ({/: ...}) in a file, with its position.\nexport function findLinkValues(text: string): LinkValue[] {\n const p = parse(text)\n const out: LinkValue[] = []\n visit(p.ydoc, {\n Pair(_k, pair, path) {\n if (!isScalar(pair.key) || pair.key.value !== '/' || !isScalar(pair.value) || !pair.value.range) return\n const inReplaces = path.some(n => isPair(n) && isScalar(n.key) && n.key.value === 'replaces')\n out.push({ value: String(pair.value.value), start: pair.value.range[0], end: pair.value.range[1], line: p.lc.linePos(pair.value.range[0]).line, inReplaces })\n },\n })\n return out\n}\n\n// Replace include links by CID: `map` gives the new CID for an old one (others are left alone).\nexport function replaceLinkValues(text: string, map: (value: string) => string | undefined): { text: string, replaced: number } {\n let out = text\n let replaced = 0\n for (const v of findLinkValues(text).filter(v => !v.inReplaces).sort((a, b) => b.start - a.start)) {\n const next = map(v.value)\n if (!next || next === v.value) continue\n const trailing = /\\s*$/.exec(text.slice(v.start, v.end))![0]\n out = out.slice(0, v.start) + next + trailing + out.slice(v.end)\n replaced++\n }\n return { text: out, replaced }\n}\n\n// Add a CID to the document's replaces list, creating the list in its standard place if needed.\nexport function addReplaces(text: string, cid: string): string {\n const p = parse(text)\n const top = p.ydoc.contents\n if (!isMap(top)) return text\n if (findLinkValues(text).some(v => v.inReplaces && v.value === cid)) return text\n const pair = top.items.find(i => isScalar(i.key) && i.key.value === 'replaces')\n if (pair && isSeq(pair.value) && pair.value.range) {\n const seq = pair.value\n if (seq.flow) {\n const close = text.lastIndexOf(']', seq.range![1])\n return text.slice(0, close) + `, {/: ${cid}}` + text.slice(close)\n }\n const first = seq.items[0] as { range?: [number, number, number] }\n const indent = first?.range ? ' '.repeat(p.lc.linePos(first.range[0]).col - 3) : ' '\n let end = seq.range![1]\n while (end > 0 && text[end - 1] === '\\n') end--\n return text.slice(0, end) + `\\n${indent}- {/: ${cid}}` + text.slice(end)\n }\n // No list yet: insert it before the first key that comes after replaces in the standard order.\n const after = ['parameters', 'text', 'sections']\n const next = top.items.find(i => isScalar(i.key) && after.includes(String(i.key.value)))\n const block = `replaces:\\n - {/: ${cid}}\\n`\n if (next && isScalar(next.key) && next.key.range) {\n const at = text.lastIndexOf('\\n', next.key.range[0] - 1) + 1\n return text.slice(0, at) + block + text.slice(at)\n }\n return text.replace(/\\n*$/, '\\n') + block\n}\n", "// HTTP access to published documents (Specification: Published Sets and Catalogs).\n//\n// Uses only the standard `fetch`, so it runs in browsers, Node and React Native. Nothing fetched is\n// trusted: documents are verified against their CIDs by `compose`, and catalogs only ever confirm\n// claims about a domain they were fetched from.\n\nimport type { CID } from 'multiformats/cid'\nimport { isDomain, type StrocDocument } from '@stroc/core'\nimport type { Resolver } from './index.js'\n\ntype Fetch = typeof globalThis.fetch\n\n// Reads documents from a Stroc server, a static host or an IPFS gateway, using the trustless\n// gateway convention: GET <base>/ipfs/<cid>?format=raw. Returns undefined for anything other than\n// a successful response (the caller reports the document as missing).\nexport class HttpResolver implements Resolver {\n readonly base: string\n private readonly fetchFn: Fetch\n\n constructor(base: string, options: { fetch?: Fetch } = {}) {\n this.base = base.replace(/\\/+$/, '')\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis)\n }\n\n async get(cid: CID): Promise<Uint8Array | undefined> {\n try {\n const res = await this.fetchFn(`${this.base}/ipfs/${cid}?format=raw`, {\n headers: { Accept: 'application/vnd.ipld.raw, application/vnd.ipld.dag-json;q=0.9, */*;q=0.1' },\n })\n if (!res.ok) return undefined\n return new Uint8Array(await res.arrayBuffer())\n } catch {\n return undefined\n }\n }\n}\n\n// ---------------------------------------------------------------------------------------------\n// Catalogs\n\nexport const CATALOG_PATH = '/.well-known/stroc/catalog.json'\n\nexport type CatalogRole = 'author' | 'endorse' | 'mirror'\nexport type CatalogStatus = 'current' | 'superseded' | 'withdrawn'\n\nexport interface CatalogEntry {\n cid: string\n title?: string\n role: CatalogRole\n status: CatalogStatus\n published?: string\n replaces?: string[]\n}\n\nexport interface Catalog {\n 'stroc-catalog': string\n domain: string\n entries: CatalogEntry[]\n}\n\nconst ROLES = new Set<string>(['author', 'endorse', 'mirror'])\nconst STATUSES = new Set<string>(['current', 'superseded', 'withdrawn'])\n\n// Check the shape of a fetched catalog. Returns undefined (with a reason) if it is not one.\nexport function parseCatalog(value: unknown): { catalog?: Catalog, error?: string } {\n if (typeof value !== 'object' || value === null) return { error: 'not a JSON object' }\n const c = value as Record<string, unknown>\n if (typeof c['stroc-catalog'] !== 'string') return { error: 'missing \"stroc-catalog\" version' }\n if (typeof c.domain !== 'string') return { error: 'missing \"domain\"' }\n if (!Array.isArray(c.entries)) return { error: '\"entries\" must be an array' }\n for (const e of c.entries as Record<string, unknown>[]) {\n if (typeof e?.cid !== 'string' || !ROLES.has(e.role as string) || !STATUSES.has(e.status as string)) {\n return { error: 'an entry lacks a valid cid, role or status' }\n }\n }\n return { catalog: value as Catalog }\n}\n\n// ---------------------------------------------------------------------------------------------\n// Author check\n\nexport type AuthorCheckStatus =\n | 'confirmed' // the author domain's catalog lists the document with role \"author\"\n | 'endorsed' // listed with role \"endorse\": the domain recommends but does not claim it\n | 'mirrored' // listed with role \"mirror\": hosted, no claim\n | 'not-listed' // the catalog does not list this document\n | 'unreachable' // the catalog could not be fetched or is malformed\n | 'not-a-domain' // the author is a name (or absent): nothing to check\n\nexport interface AuthorCheck {\n status: AuthorCheckStatus\n author?: string\n domain?: string\n entry?: CatalogEntry // the catalog's entry, when listed (its status may be superseded/withdrawn)\n reason?: string // for unreachable\n checked: string // ISO 8601 timestamp of the check\n}\n\nexport interface AuthorCheckOptions {\n fetch?: Fetch\n // Where to find a domain's catalog. Default: https://<domain>/.well-known/stroc/catalog.json.\n // Overridden in development and tests, e.g. to point a domain at a local `stroc serve`.\n catalogUrl?: (domain: string) => string\n now?: () => Date\n}\n\n// Checks documents' `author` claims, fetching each domain's catalog once.\nexport class AuthorChecker {\n private readonly fetchFn: Fetch\n private readonly catalogUrl: (domain: string) => string\n private readonly now: () => Date\n private readonly catalogs = new Map<string, Promise<{ catalog?: Catalog, error?: string }>>()\n\n constructor(options: AuthorCheckOptions = {}) {\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis)\n this.catalogUrl = options.catalogUrl ?? (d => `https://${d}${CATALOG_PATH}`)\n this.now = options.now ?? (() => new Date())\n }\n\n private catalog(domain: string) {\n let pending = this.catalogs.get(domain)\n if (!pending) {\n pending = (async () => {\n try {\n const res = await this.fetchFn(this.catalogUrl(domain), { headers: { Accept: 'application/json' } })\n if (!res.ok) return { error: `HTTP ${res.status}` }\n const parsed = parseCatalog(await res.json())\n if (parsed.catalog && parsed.catalog.domain !== domain) {\n return { error: `the catalog speaks for \"${parsed.catalog.domain}\", not \"${domain}\"` }\n }\n return parsed\n } catch (err) {\n return { error: (err as Error).message }\n }\n })()\n this.catalogs.set(domain, pending)\n }\n return pending\n }\n\n async check(document: StrocDocument, cid: CID | string): Promise<AuthorCheck> {\n const checked = this.now().toISOString()\n const author = document.author\n if (!author || !isDomain(author)) return { status: 'not-a-domain', ...(author ? { author } : {}), checked }\n const { catalog, error } = await this.catalog(author)\n if (!catalog) return { status: 'unreachable', author, domain: author, reason: error, checked }\n const entry = catalog.entries.find(e => e.cid === cid.toString())\n if (!entry) return { status: 'not-listed', author, domain: author, checked }\n const status: AuthorCheckStatus = entry.role === 'author' ? 'confirmed' : entry.role === 'endorse' ? 'endorsed' : 'mirrored'\n return { status, author, domain: author, entry, checked }\n }\n}\n", "// Composition: fetch and verify a document and everything it includes, number the whole tree,\n// resolve cross-references and gather parameters (Specification: Composition, Cross-References,\n// Parameters, Document Resolution and Verification).\n//\n// Where bytes come from is the app's business: it supplies a Resolver. Every fetched document is\n// verified against its CID before use.\n\nimport { CID } from 'multiformats/cid'\nimport {\n verifyDocument, computeCid, encodeDagJson, parseMarkup,\n type MarkupNode, type Problem, type StrocDocument, type StrocSection, type Parameter,\n} from '@stroc/core'\n\n// ---------------------------------------------------------------------------------------------\n// Resolvers and stores\n\nexport interface Resolver {\n // The bytes of the document with this CID, or undefined if not available.\n get(cid: CID): Promise<Uint8Array | undefined>\n}\n\n// An in-memory content-addressed store. Documents are keyed by the CID of their bytes.\nexport class MemoryStore implements Resolver {\n private blocks = new Map<string, Uint8Array>()\n\n async get(cid: CID): Promise<Uint8Array | undefined> {\n return this.blocks.get(cid.toString())\n }\n\n has(cid: CID): boolean {\n return this.blocks.has(cid.toString())\n }\n\n // Store bytes under their CID and return it. (Bytes are verified when read, not here.)\n async put(bytes: Uint8Array): Promise<CID> {\n const cid = await computeCid(bytes)\n this.blocks.set(cid.toString(), bytes)\n return cid\n }\n\n // Store a document from the data model in its canonical encoding.\n async putDocument(doc: unknown): Promise<CID> {\n return this.put(encodeDagJson(doc))\n }\n\n get size(): number {\n return this.blocks.size\n }\n}\n\n// Try several resolvers in order (for example a local store, then a peer, then a publisher).\nexport function firstOf(...resolvers: Resolver[]): Resolver {\n return {\n async get(cid) {\n for (const r of resolvers) {\n const bytes = await r.get(cid)\n if (bytes) return bytes\n }\n return undefined\n },\n }\n}\n\n// The CIDs reachable from root that the resolver cannot supply. Documents that are present are\n// verified and followed; an empty result means the whole composition is available.\nexport async function findMissing(root: CID, resolver: Resolver): Promise<CID[]> {\n const missing: CID[] = []\n const seen = new Set<string>()\n const visit = async (cid: CID) => {\n if (seen.has(cid.toString())) return\n seen.add(cid.toString())\n const bytes = await resolver.get(cid)\n if (!bytes) { missing.push(cid); return }\n const v = await verifyDocument(bytes, cid)\n if (v.document) for (const link of includeLinks(v.document.sections)) await visit(link)\n }\n await visit(root)\n return missing\n}\n\nfunction includeLinks(sections?: StrocSection[]): CID[] {\n const out: CID[] = []\n for (const s of sections ?? []) {\n if ('source' in s) out.push(s.source)\n else out.push(...includeLinks(s.sections))\n }\n return out\n}\n\n// ---------------------------------------------------------------------------------------------\n// The composed tree\n\n// A reference after composition: the target's number in the composed document, if it resolved.\nexport type ComposedInline =\n | { type: 'text', value: string }\n | { type: 'emphasis', tag: 'b' | 'i' | 'u', children: ComposedInline[] }\n | { type: 'ref', path: string[], target?: number[] }\n | { type: 'param', path: string } // full parameter path, e.g. \"terms/limit\"\n\nexport interface ComposedSection {\n number: number[] // e.g. [3, 1] for section 3.1\n id?: string // the section's id within its own document\n title?: string\n text?: ComposedInline[]\n sections: ComposedSection[]\n include?: { // present when this section is an included document\n cid: CID\n document: StrocDocument\n }\n}\n\nexport interface ParameterGroup {\n section?: { number: number[], title: string } // absent for the root document's own parameters\n prefix: string[] // include ids leading to the declaring document\n parameters: Parameter[]\n}\n\nexport interface Composed {\n cid: CID\n document?: StrocDocument // absent if the root itself could not be loaded\n title: string\n language: string\n text?: ComposedInline[]\n sections: ComposedSection[]\n parameters: ParameterGroup[]\n problems: Problem[] // missing or invalid documents, unresolved references\n}\n\ninterface Scope {\n ids: Map<string, ComposedSection> // ids declared in this document\n includes: Map<string, Scope> // scopes of included documents, by include id\n}\n\ninterface Pending {\n nodes: ComposedInline[]\n scope: Scope\n at: string // where, for messages\n}\n\nconst MAX_DEPTH = 64\n\n// Compose a document by CID. Never throws: anything missing, invalid or unresolved is reported in\n// `problems`, and the parts that could not be composed are left out.\nexport async function compose(root: CID | string, resolver: Resolver): Promise<Composed> {\n const rootCid = typeof root === 'string' ? CID.parse(root) : root\n const problems: Problem[] = []\n const pending: Pending[] = []\n const parameters: ParameterGroup[] = []\n const cache = new Map<string, StrocDocument | null>()\n\n const load = async (cid: CID, at: string): Promise<StrocDocument | undefined> => {\n const key = cid.toString()\n if (cache.has(key)) return cache.get(key) ?? undefined\n const bytes = await resolver.get(cid)\n if (!bytes) {\n problems.push({ path: [], code: 'missing-document', message: `${at}: document ${key} is not available` })\n cache.set(key, null)\n return undefined\n }\n const v = await verifyDocument(bytes, cid)\n if (!v.ok || !v.document) {\n const why = v.problems.map(p => `${p.path.join('.') || 'document'}: ${p.message}`).join('; ')\n problems.push({ path: [], code: 'invalid-document', message: `${at}: document ${key} failed verification: ${why}` })\n cache.set(key, null)\n return undefined\n }\n cache.set(key, v.document)\n return v.document\n }\n\n const convertText = (text: string, scope: Scope, at: string, prefix: string[]): ComposedInline[] => {\n const convert = (nodes: MarkupNode[]): ComposedInline[] => nodes.map(n =>\n n.type === 'text' ? { type: 'text', value: n.value } :\n n.type === 'ref' ? { type: 'ref', path: n.path } :\n n.type === 'param' ? { type: 'param', path: [...prefix, n.key].join('/') } :\n { type: 'emphasis', tag: n.tag, children: convert(n.children) })\n const nodes = convert(parseMarkup(text).nodes)\n pending.push({ nodes, scope, at })\n return nodes\n }\n\n // Compose a document's sections under a parent number, in the document's own id scope.\n const composeSections = async (\n sections: StrocSection[] | undefined, parent: number[], scope: Scope, prefix: string[], depth: number, at: string,\n ): Promise<ComposedSection[]> => {\n const out: ComposedSection[] = []\n let n = 0\n for (const sec of sections ?? []) {\n n++\n const number = [...parent, n]\n if ('source' in sec) {\n const placeholder: ComposedSection = { number, id: sec.id, sections: [] }\n scope.ids.set(sec.id, placeholder)\n out.push(placeholder)\n if (depth >= MAX_DEPTH) {\n problems.push({ path: [], code: 'too-deep', message: `${at}: includes nested more than ${MAX_DEPTH} deep` })\n continue\n }\n const doc = await load(sec.source, `${at} > ${sec.id}`)\n if (!doc) continue\n const inner: Scope = { ids: new Map(), includes: new Map() }\n scope.includes.set(sec.id, inner)\n const innerPrefix = [...prefix, sec.id]\n placeholder.title = doc.title\n placeholder.include = { cid: sec.source, document: doc }\n if (doc.parameters) parameters.push({ section: { number, title: doc.title }, prefix: innerPrefix, parameters: doc.parameters })\n if (doc.text) placeholder.text = convertText(doc.text, inner, `${at} > ${sec.id}`, innerPrefix)\n placeholder.sections = await composeSections(doc.sections, number, inner, innerPrefix, depth + 1, `${at} > ${sec.id}`)\n } else {\n const section: ComposedSection = { number, sections: [] }\n if (sec.id) { section.id = sec.id; scope.ids.set(sec.id, section) }\n if (sec.title) section.title = sec.title\n if (sec.text) section.text = convertText(sec.text, scope, at, prefix)\n section.sections = await composeSections(sec.sections, number, scope, prefix, depth, at)\n out.push(section)\n }\n }\n return out\n }\n\n const document = await load(rootCid, 'root')\n if (!document) {\n return { cid: rootCid, title: '', language: '', sections: [], parameters: [], problems }\n }\n const rootScope: Scope = { ids: new Map(), includes: new Map() }\n if (document.parameters) parameters.unshift({ prefix: [], parameters: document.parameters })\n const text = document.text ? convertText(document.text, rootScope, 'root', []) : undefined\n const sections = await composeSections(document.sections, [], rootScope, [], 0, 'root')\n // Root parameters first, then included documents' in document order.\n parameters.sort((a, b) => compareNumbers(a.section?.number ?? [], b.section?.number ?? []))\n\n // Resolve references now that every scope is complete.\n for (const p of pending) resolveRefs(p.nodes, p.scope, p.at, problems)\n\n return { cid: rootCid, document, title: document.title, language: document.language, text, sections, parameters, problems }\n}\n\nfunction resolveRefs(nodes: ComposedInline[], scope: Scope, at: string, problems: Problem[]) {\n for (const node of nodes) {\n if (node.type === 'emphasis') resolveRefs(node.children, scope, at, problems)\n if (node.type !== 'ref') continue\n let current: Scope | undefined = scope\n let target: ComposedSection | undefined\n for (let i = 0; i < node.path.length && current; i++) {\n target = current.ids.get(node.path[i])\n if (!target) break\n current = i < node.path.length - 1 ? current.includes.get(node.path[i]) : undefined\n if (i < node.path.length - 1 && !current) { target = undefined; break }\n }\n if (target) node.target = target.number\n else problems.push({ path: [], code: 'unresolved-ref', message: `${at}: <ref:${node.path.join('/')}> does not resolve in the composed document` })\n }\n}\n\nfunction compareNumbers(a: number[], b: number[]): number {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const d = (a[i] ?? 0) - (b[i] ?? 0)\n if (d) return d\n }\n return 0\n}\n\n// \"3.1\" for [3, 1].\nexport function formatNumber(number: number[]): string {\n return number.join('.')\n}\n\nexport * from './http.js'\n", "// Rendering (docs/Rendering.md): check render-time data, lay out a composed document in the legal\n// style, and produce HTML. The layout is a plain data structure with no UI framework or DOM, so\n// every output format (and any app with its own UI) draws the same thing.\n\nimport qrcode from 'qrcode-generator'\nimport { isDomain, type Problem } from '@stroc/core'\nimport { formatNumber, type Composed, type ComposedInline, type ComposedSection } from '@stroc/compose'\n\n// ---------------------------------------------------------------------------------------------\n// Inputs\n\nexport type Block =\n | { kind: 'heading', text: string }\n | { kind: 'paragraph', text: string }\n | { kind: 'table', title?: string, rows: [label: string, value: string][] }\n | { kind: 'qr', value: string, caption?: string }\n\nexport interface Labels {\n section: string // \"Section\" in \"Section 3.1\" (joined to the number by a no-break space)\n particulars: string // heading of the parameter table\n notSpecified: string // shown for a missing value in drafts\n documentId: string // label before the root CID\n blank: string // a required value not yet supplied (template view)\n}\n\nexport const ENGLISH: Labels = {\n section: 'Section',\n particulars: 'Particulars',\n notSpecified: 'not specified',\n documentId: 'Document',\n blank: '________________',\n}\n\nexport interface RenderOptions {\n labels?: Partial<Labels>\n draft?: boolean // render despite problems (missing values, unresolved references)\n template?: boolean // the document as published: required values print as blanks, not errors\n cidQr?: boolean // print a QR code at the end: a URL for fetching the document (see qrUrl)\n qrBase?: string // base URL for the QR code when the author is not a domain (e.g. a gateway)\n}\n\n// The URL a QR code (or link) uses to fetch a document: from its author's domain when the author is\n// a domain, else from qrBase; undefined if neither applies (the QR then holds the bare CID).\nexport function documentUrl(cid: string, author: string | undefined, qrBase?: string): string | undefined {\n if (author && isDomain(author)) return `https://${author}/ipfs/${cid}`\n if (qrBase) return `${qrBase.replace(/\\/+$/, '')}/ipfs/${cid}`\n return undefined\n}\n\n// ---------------------------------------------------------------------------------------------\n// Layout model\n\nexport interface Run {\n text: string\n bold?: boolean\n italic?: boolean\n underline?: boolean\n ref?: boolean // a resolved cross-reference (\"Section 3.1\")\n unresolved?: boolean // a reference that did not resolve (drafts only)\n param?: 'supplied' | 'default' | 'blank' // a placeholder: its value, or [Label] when there is none\n}\n\nexport interface ParticularsRow {\n label: string\n value: string\n supplied: boolean // true if the value came from the data object, not a default\n}\n\nexport type LayoutBlock =\n | { kind: 'title', text: string }\n | { kind: 'particulars', heading: string, groups: { heading?: string, rows: ParticularsRow[] }[] }\n | { kind: 'preamble', runs: Run[] }\n | { kind: 'section', number: string, depth: number, title?: string, runs?: Run[], cid?: string }\n | { kind: 'app-heading', text: string }\n | { kind: 'app-paragraph', text: string }\n | { kind: 'app-table', title?: string, rows: [string, string][] }\n | { kind: 'qr', value: string, caption?: string, modules: boolean[][] }\n\nexport interface Layout {\n title: string\n language: string\n cid: string\n labels: Labels\n blocks: LayoutBlock[]\n draft: boolean\n}\n\nexport interface LayoutResult {\n layout?: Layout // absent if there were problems and draft was not set\n problems: Problem[]\n}\n\n// ---------------------------------------------------------------------------------------------\n// Data\n\n// The full path of every declared parameter, with its declaration.\nfunction declaredParameters(doc: Composed) {\n return doc.parameters.flatMap(group => group.parameters.map(p => ({\n path: [...group.prefix, p.key].join('/'),\n parameter: p,\n group,\n })))\n}\n\n// Check a data object against the composed document's parameters (Specification: Supplying values).\nexport function checkData(doc: Composed, data: unknown = {}): Problem[] {\n const problems: Problem[] = []\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n return [{ path: [], code: 'bad-data', message: 'the data object must be a map of parameter paths to text values' }]\n }\n const values = data as Record<string, unknown>\n const declared = declaredParameters(doc)\n const paths = new Set(declared.map(d => d.path))\n for (const [key, value] of Object.entries(values)) {\n if (!paths.has(key)) problems.push({ path: [key], code: 'unknown-parameter', message: `\"${key}\" is not a parameter of this document` })\n else if (typeof value !== 'string' || value === '') problems.push({ path: [key], code: 'bad-value', message: `\"${key}\" must be non-empty text` })\n }\n for (const d of declared) {\n if (d.parameter.default === undefined && values[d.path] === undefined) {\n problems.push({ path: [d.path], code: 'missing-value', message: `no value for required parameter \"${d.path}\" (${d.parameter.label})` })\n }\n }\n return problems\n}\n\n// ---------------------------------------------------------------------------------------------\n// Layout\n\n// How placeholders are filled: from the data object, else the declared default, else [Label].\ntype ParamValue = (path: string) => { text: string, kind: 'supplied' | 'default' | 'blank' }\n\nfunction runs(nodes: ComposedInline[], labels: Labels, value: ParamValue, style: Omit<Run, 'text'> = {}): Run[] {\n return nodes.flatMap((n): Run[] => {\n if (n.type === 'text') return [{ text: n.value, ...style }]\n if (n.type === 'param') {\n const v = value(n.path)\n return [{ text: v.text, ...style, param: v.kind }]\n }\n if (n.type === 'ref') {\n return n.target\n ? [{ text: `${labels.section}\\u00A0${formatNumber(n.target)}`, ...style, ref: true }]\n : [{ text: `[${n.path.join('/')}]`, ...style, unresolved: true }]\n }\n const next = { ...style, ...(n.tag === 'b' ? { bold: true } : n.tag === 'i' ? { italic: true } : { underline: true }) }\n return runs(n.children, labels, value, next)\n })\n}\n\nexport function qrModules(value: string): boolean[][] {\n const qr = qrcode(0, 'M')\n qr.addData(value)\n qr.make()\n const n = qr.getModuleCount()\n return Array.from({ length: n }, (_, r) => Array.from({ length: n }, (_, c) => qr.isDark(r, c)))\n}\n\nexport function layout(doc: Composed, input: { data?: Record<string, string>, blocks?: Block[], options?: RenderOptions } = {}): LayoutResult {\n const options = input.options ?? {}\n const labels: Labels = { ...ENGLISH, ...options.labels }\n const data = input.data ?? {}\n const dataProblems = checkData(doc, data).filter(p => !(options.template && p.code === 'missing-value'))\n const problems = [...doc.problems, ...dataProblems]\n if (!doc.document || (problems.length && !options.draft)) return { problems }\n\n const declared = new Map<string, { label: string, default?: string }>()\n for (const g of doc.parameters) for (const p of g.parameters) declared.set([...g.prefix, p.key].join('/'), p)\n const value: ParamValue = path => {\n const supplied = data[path]\n if (typeof supplied === 'string' && supplied) return { text: supplied, kind: 'supplied' }\n const p = declared.get(path)\n if (p?.default !== undefined) return { text: p.default, kind: 'default' }\n return { text: `[${p?.label ?? path}]`, kind: 'blank' }\n }\n\n const blocks: LayoutBlock[] = [{ kind: 'title', text: doc.title }]\n\n if (doc.parameters.length) {\n const groups = doc.parameters.map(group => ({\n ...(group.section ? { heading: `${formatNumber(group.section.number)}. ${group.section.title}` } : {}),\n rows: group.parameters.map(p => {\n const path = [...group.prefix, p.key].join('/')\n const supplied = typeof data[path] === 'string' && data[path] !== ''\n const missing = options.template ? labels.blank : labels.notSpecified\n return { label: p.label, value: supplied ? data[path] : p.default ?? missing, supplied }\n }),\n }))\n blocks.push({ kind: 'particulars', heading: labels.particulars, groups })\n }\n\n if (doc.text) blocks.push({ kind: 'preamble', runs: runs(doc.text, labels, value) })\n\n const walk = (sections: ComposedSection[]) => {\n for (const s of sections) {\n blocks.push({\n kind: 'section',\n number: formatNumber(s.number) + '.',\n depth: s.number.length,\n ...(s.title ? { title: s.title } : {}),\n ...(s.text ? { runs: runs(s.text, labels, value) } : {}),\n ...(s.include ? { cid: s.include.cid.toString() } : {}),\n })\n walk(s.sections)\n }\n }\n walk(doc.sections)\n\n for (const b of input.blocks ?? []) {\n if (b.kind === 'heading') blocks.push({ kind: 'app-heading', text: b.text })\n else if (b.kind === 'paragraph') blocks.push({ kind: 'app-paragraph', text: b.text })\n else if (b.kind === 'table') blocks.push({ kind: 'app-table', ...(b.title ? { title: b.title } : {}), rows: b.rows })\n else blocks.push({ kind: 'qr', value: b.value, ...(b.caption ? { caption: b.caption } : {}), modules: qrModules(b.value) })\n }\n\n const cid = doc.cid.toString()\n if (options.cidQr) {\n const url = documentUrl(cid, doc.document.author, options.qrBase)\n blocks.push({ kind: 'qr', value: url ?? cid, caption: url ?? `${labels.documentId} ${cid}`, modules: qrModules(url ?? cid) })\n }\n\n return {\n layout: { title: doc.title, language: doc.language, cid, labels, blocks, draft: !!options.draft },\n problems,\n }\n}\n\n// ---------------------------------------------------------------------------------------------\n// HTML\n\nfunction esc(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''')\n}\n\nfunction runsHtml(list: Run[]): string {\n return list.map(r => {\n let h = esc(r.text)\n if (r.ref) h = `<span class=\"ref\">${h}</span>`\n if (r.unresolved) h = `<span class=\"unresolved\">${h}</span>`\n if (r.param) h = `<span class=\"param ${r.param}\">${h}</span>`\n if (r.underline) h = `<u>${h}</u>`\n if (r.italic) h = `<em>${h}</em>`\n if (r.bold) h = `<strong>${h}</strong>`\n return h\n }).join('')\n}\n\nexport function qrSvg(modules: boolean[][], size = 120): string {\n const n = modules.length\n const quiet = 2\n let path = ''\n modules.forEach((row, r) => row.forEach((dark, c) => { if (dark) path += `M${c + quiet} ${r + quiet}h1v1h-1z` }))\n const dim = n + quiet * 2\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${dim} ${dim}\" width=\"${size}\" height=\"${size}\" shape-rendering=\"crispEdges\"><rect width=\"${dim}\" height=\"${dim}\" fill=\"#fff\"/><path d=\"${path}\" fill=\"#000\"/></svg>`\n}\n\nconst STYLE = `\n:root { --ink: #111; --muted: #666; --value: #0b4f8a; }\nbody { margin: 0; background: #fff; color: var(--ink); }\n.stroc { font-family: \"Times New Roman\", Times, serif; font-size: 11pt; line-height: 1.4; max-width: 7in; margin: 0 auto; padding: 0.75in 0.5in 1in; }\n.stroc h1 { font-size: 16pt; text-align: center; margin: 0 0 1em; }\n.stroc .particulars { margin: 0 0 1.25em; }\n.stroc .particulars h2 { font-size: 11pt; margin: 0 0 0.4em; }\n.stroc .particulars h3 { font-size: 10pt; font-weight: normal; font-style: italic; margin: 0.5em 0 0.2em; }\n.stroc .particulars table { border-collapse: collapse; }\n.stroc .particulars td { padding: 0.1em 1em 0.1em 0; vertical-align: top; }\n.stroc .particulars td.label { color: var(--muted); }\n.stroc .particulars .supplied { color: var(--value); font-weight: bold; }\n.stroc .preamble { text-indent: 2em; margin: 0 0 1em; text-align: justify; }\n.stroc .section { display: grid; grid-template-columns: minmax(2.5em, max-content) 1fr; column-gap: 0.6em; margin: 0 0 0.5em calc((var(--depth) - 1) * 2.5em); break-inside: avoid-page; }\n.stroc .section .num { font-weight: bold; }\n.stroc .section .head { display: flex; justify-content: space-between; align-items: baseline; gap: 1em; }\n.stroc .section .title { font-weight: bold; }\n.stroc .section .cid { font-family: ui-monospace, Menlo, monospace; font-size: 6.5pt; color: var(--muted); white-space: nowrap; }\n.stroc .section p { margin: 0; text-align: justify; }\n.stroc .section .head + p { margin-top: 0.15em; }\n.stroc .ref { font-style: normal; }\n.stroc .unresolved { color: #b00; }\n.stroc .param { color: var(--value); border-bottom: 1px dotted var(--value); }\n.stroc .param.supplied { font-weight: bold; }\n.stroc .param.blank { color: #888; border-bottom-style: dashed; }\n.stroc .app h2 { font-size: 12pt; margin: 1.5em 0 0.5em; }\n.stroc .app table { border-collapse: collapse; margin: 0 0 1em; }\n.stroc .app td { padding: 0.1em 1em 0.1em 0; vertical-align: top; font-size: 9pt; }\n.stroc figure.qr { display: inline-block; vertical-align: top; margin: 1em 1em 0 0; text-align: center; }\n.stroc figure.qr figcaption { font-family: ui-monospace, Menlo, monospace; font-size: 6pt; color: var(--muted); max-width: 140px; word-break: break-all; }\n.stroc .draft { color: #b00; text-align: center; font-weight: bold; margin-bottom: 1em; }\n.stroc .notice { font-family: -apple-system, \"Segoe UI\", Roboto, sans-serif; font-size: 9pt; color: #444; background: #f3f5f8; border-radius: 6px; padding: 0.6em 0.9em; margin: 0 0 1.5em; }\n@media print { .stroc .notice { display: none; } }\n.stroc-footer { font-family: ui-monospace, Menlo, monospace; font-size: 6.5pt; color: var(--muted); text-align: right; max-width: 7in; margin: 0 auto; padding: 0 0.5in 0.5in; }\n@media (max-width: 640px) {\n .stroc { padding: 1em 0.9em 2em; font-size: 12pt; }\n .stroc .section { margin-left: calc((var(--depth) - 1) * 0.9em); column-gap: 0.4em; }\n .stroc .section .head { flex-wrap: wrap; gap: 0 1em; }\n .stroc .section .cid { white-space: normal; overflow-wrap: anywhere; }\n .stroc .section p { text-align: left; }\n .stroc .preamble { text-align: left; }\n .stroc-footer { padding: 0 0.9em 1em; text-align: left; overflow-wrap: anywhere; }\n}\n.stroc .notice { overflow-wrap: anywhere; }\n@page { size: letter; margin: 0.75in 0.75in 0.9in; }\n@media print {\n .stroc { padding: 0; max-width: none; }\n .stroc-footer { position: fixed; bottom: 0; left: 0; right: 0; padding: 0; max-width: none; }\n}\n`\n\nexport interface HtmlOptions {\n // A notice shown above the document (not printed), e.g. who served it and how to verify it.\n notice?: { text: string, links?: [label: string, href: string][] }\n}\n\n// A standalone, print-ready HTML page.\nexport function toHtml(l: Layout, options: HtmlOptions = {}): string {\n const body: string[] = []\n if (options.notice) {\n const links = (options.notice.links ?? []).map(([label, href]) => `<a href=\"${esc(href)}\">${esc(label)}</a>`).join(' \u00B7 ')\n body.push(`<div class=\"notice\">${esc(options.notice.text)}${links ? ` ${links}` : ''}</div>`)\n }\n if (l.draft) body.push('<div class=\"draft\">DRAFT</div>')\n for (const b of l.blocks) {\n switch (b.kind) {\n case 'title':\n body.push(`<h1>${esc(b.text)}</h1>`)\n break\n case 'particulars':\n body.push(`<section class=\"particulars\"><h2>${esc(b.heading)}</h2>` + b.groups.map(g =>\n (g.heading ? `<h3>${esc(g.heading)}</h3>` : '') + '<table>' + g.rows.map(r =>\n `<tr><td class=\"label\">${esc(r.label)}</td><td${r.supplied ? ' class=\"supplied\"' : ''}>${esc(r.value)}</td></tr>`).join('') + '</table>',\n ).join('') + '</section>')\n break\n case 'preamble':\n body.push(`<p class=\"preamble\">${runsHtml(b.runs)}</p>`)\n break\n case 'section': {\n const head = b.title || b.cid\n ? `<div class=\"head\"><span class=\"title\">${b.title ? esc(b.title) : ''}</span>${b.cid ? `<span class=\"cid\">${esc(b.cid)}</span>` : ''}</div>`\n : ''\n const text = b.runs ? `<p>${runsHtml(b.runs)}</p>` : ''\n body.push(`<div class=\"section\" style=\"--depth:${b.depth}\"><div class=\"num\">${esc(b.number)}</div><div class=\"body\">${head}${text}</div></div>`)\n break\n }\n case 'app-heading':\n body.push(`<div class=\"app\"><h2>${esc(b.text)}</h2></div>`)\n break\n case 'app-paragraph':\n body.push(`<div class=\"app\"><p>${esc(b.text)}</p></div>`)\n break\n case 'app-table':\n body.push('<div class=\"app\">' + (b.title ? `<h2>${esc(b.title)}</h2>` : '') + '<table>' +\n b.rows.map(([k, v]) => `<tr><td>${esc(k)}</td><td>${esc(v)}</td></tr>`).join('') + '</table></div>')\n break\n case 'qr':\n body.push(`<figure class=\"qr\">${qrSvg(b.modules)}${b.caption ? `<figcaption>${esc(b.caption)}</figcaption>` : ''}</figure>`)\n break\n }\n }\n return `<!doctype html>\n<html lang=\"${esc(l.language)}\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${esc(l.title)}</title>\n<style>${STYLE}</style>\n</head>\n<body>\n<article class=\"stroc\">\n${body.join('\\n')}\n</article>\n<footer class=\"stroc-footer\">${esc(l.labels.documentId)} ${esc(l.cid)}</footer>\n</body>\n</html>\n`\n}\n\n// ---------------------------------------------------------------------------------------------\n// PDF document definition\n//\n// A plain pdfmake document definition (no pdfmake dependency here): the same layout as the HTML,\n// modeled on MyCHIPs' buildpdf.js. @stroc/pdf turns it into PDF bytes.\n\nexport interface PdfOptions {\n pageSize?: 'LETTER' | 'A4'\n font?: string // body font family known to the PDF writer; default \"Times\"\n monoFont?: string // font family for CIDs; default \"Courier\"\n fontSize?: number // body size in points; default 10.5\n lineHeight?: number // multiple of the font's own line spacing; default 1.15\n}\n\n// pdfmake's document definition is loosely typed; keep it as plain data.\nexport type PdfContent = Record<string, unknown> | string | PdfContent[]\nexport interface PdfDefinition {\n info: Record<string, string>\n pageSize: string\n pageMargins: [number, number, number, number]\n defaultStyle: Record<string, unknown>\n styles: Record<string, Record<string, unknown>>\n content: PdfContent[]\n footer: (currentPage: number, pageCount: number) => PdfContent\n watermark?: Record<string, unknown>\n}\n\nconst PT = { indent: 18, numberWidth: 22, numberStep: 8 }\n\nfunction pdfRuns(list: Run[]): PdfContent[] {\n return list.map(r => {\n const t: Record<string, unknown> = { text: r.text }\n if (r.bold) t.bold = true\n if (r.italic) t.italics = true\n if (r.underline) t.decoration = 'underline'\n if (r.unresolved) t.color = '#b00000'\n if (r.param) { t.color = r.param === 'blank' ? '#888888' : '#0b4f8a'; if (r.param === 'supplied') t.bold = true }\n return t\n })\n}\n\nexport function toPdfDefinition(l: Layout, options: PdfOptions = {}): PdfDefinition {\n const content: PdfContent[] = []\n for (const b of l.blocks) {\n switch (b.kind) {\n case 'title':\n content.push({ text: b.text, style: 'title' })\n break\n case 'particulars': {\n const body: PdfContent[] = []\n for (const g of b.groups) {\n if (g.heading) body.push([{ text: g.heading, style: 'groupHeading', colSpan: 2 }, ''])\n for (const r of g.rows) {\n body.push([\n { text: r.label, style: 'label' },\n r.supplied ? { text: r.value, style: 'supplied' } : { text: r.value },\n ])\n }\n }\n content.push({ text: b.heading, style: 'particularsHeading' })\n content.push({ table: { widths: ['auto', '*'], body }, layout: 'noBorders', margin: [0, 0, 0, 12] })\n break\n }\n case 'preamble':\n content.push({ text: pdfRuns(b.runs), style: 'preamble' })\n break\n case 'section': {\n const numberWidth = PT.numberWidth + PT.numberStep * b.depth\n const head: PdfContent[] = []\n if (b.title || b.cid) {\n head.push({\n columns: [\n { text: b.title ?? '', bold: true, width: '*' },\n ...(b.cid ? [{ text: b.cid, style: 'cid', width: 'auto', alignment: 'right' }] : []),\n ],\n columnGap: 8,\n })\n }\n const body: PdfContent[] = [...head, ...(b.runs ? [{ text: pdfRuns(b.runs), style: 'paragraph', margin: [0, head.length ? 2 : 0, 0, 0] }] : [])]\n content.push({\n columns: [\n { text: b.number, bold: true, width: numberWidth },\n { stack: body, width: '*' },\n ],\n columnGap: 4,\n margin: [PT.indent * (b.depth - 1), 0, 0, 6],\n })\n break\n }\n case 'app-heading':\n content.push({ text: b.text, style: 'appHeading' })\n break\n case 'app-paragraph':\n content.push({ text: b.text, style: 'appText' })\n break\n case 'app-table':\n if (b.title) content.push({ text: b.title, style: 'appHeading' })\n content.push({\n table: { widths: ['auto', '*'], body: b.rows.map(([k, v]) => [{ text: k, style: 'appText' }, { text: v, style: 'appText' }]) },\n layout: 'noBorders',\n margin: [0, 0, 0, 10],\n })\n break\n case 'qr':\n content.push({\n stack: [\n { svg: qrSvg(b.modules, 100), width: 100 },\n ...(b.caption ? [{ text: b.caption, style: 'cid', margin: [0, 2, 0, 0] }] : []),\n ],\n width: 120,\n margin: [0, 10, 0, 0],\n unbreakable: true,\n })\n break\n }\n }\n return {\n info: { title: l.title, subject: `Stroc document ${l.cid}`, keywords: l.cid, creator: 'Stroc' },\n pageSize: options.pageSize ?? 'LETTER',\n pageMargins: [60, 54, 60, 60],\n defaultStyle: { font: options.font ?? 'Times', fontSize: options.fontSize ?? 10.5, lineHeight: options.lineHeight ?? 1.15 },\n styles: {\n title: { fontSize: 16, bold: true, alignment: 'center', margin: [0, 0, 0, 14] },\n particularsHeading: { bold: true, margin: [0, 0, 0, 4] },\n groupHeading: { italics: true, margin: [0, 4, 0, 1] },\n label: { color: '#555555' },\n supplied: { bold: true, color: '#0b4f8a' },\n preamble: { alignment: 'justify', margin: [0, 0, 0, 10], leadingIndent: 24 },\n paragraph: { alignment: 'justify' },\n cid: { font: options.monoFont ?? 'Courier', fontSize: 5.5, color: '#666666' },\n appHeading: { fontSize: 12, bold: true, margin: [0, 14, 0, 6] },\n appText: { fontSize: 9 },\n },\n content,\n footer: (currentPage: number, pageCount: number) => ({\n columns: [\n { text: `${l.labels.documentId} ${l.cid}`, style: 'cid', width: '*' },\n { text: `${currentPage} / ${pageCount}`, fontSize: 8, alignment: 'right', width: 'auto' },\n ],\n margin: [60, 24, 60, 0],\n }),\n ...(l.draft ? { watermark: { text: 'DRAFT', opacity: 0.08, bold: true } } : {}),\n }\n}\n", "// The editor's styles. The editor renders into the page's own DOM (not a shadow root, so text\n// selection works the same in every browser engine), so its styles are nested under the\n// stroc-editor element and cannot affect the host page.\n\nexport const editorCss = `\nstroc-editor {\n\n & {\n --ink: #1a1a1a; --muted: #6c757d; --line: #dee2e6; --accent: #0d6efd; --bad: #b02a37;\n --good-bg: #d1e7dd; --good: #0f5132; --warn-bg: #fff3cd; --warn: #664d03; --bad-bg: #f8d7da;\n display: flex; flex-direction: column; height: 100vh;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n background: white; color: var(--ink);\n }\n button { font: inherit; font-size: 13px; padding: 3px 9px; border: 1px solid #ced4da; border-radius: 4px; background: white; cursor: pointer; }\n button:hover:not(:disabled) { background: #f1f3f5; }\n button:disabled { opacity: 0.4; cursor: default; }\n input, textarea { font: inherit; }\n code { font-family: ui-monospace, Menlo, monospace; font-size: 12px; }\n .muted { color: var(--muted); }\n\n /* Menu bar and status */\n .menubar { display: flex; align-items: center; background: #f8f9fa; border-bottom: 1px solid var(--line); height: 40px; padding-right: 12px; gap: 2px; }\n .menu { position: relative; }\n .menu-label { padding: 8px 14px; border: none; background: transparent; font-size: 14px; font-weight: 500; border-radius: 0; }\n .menu-dropdown { display: none; position: absolute; top: 100%; left: 0; min-width: 240px; background: white; border: 1px solid var(--line); border-radius: 6px; box-shadow: 0 6px 18px rgba(0,0,0,.12); z-index: 100; padding: 4px 0; }\n .menu.open .menu-dropdown { display: block; }\n .menu-item { display: flex; justify-content: space-between; width: 100%; border: none; border-radius: 0; padding: 7px 16px; text-align: left; font-size: 14px; }\n .menu-item .shortcut { color: var(--muted); font-size: 12px; margin-left: 24px; }\n .menu-sep { border-top: 1px solid var(--line); margin: 4px 0; }\n .status { margin-left: auto; display: flex; align-items: center; gap: 10px; font-size: 12px; }\n .status .file { color: var(--muted); max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .status .dirty { color: #e67700; font-size: 16px; }\n .status .cid { font-family: ui-monospace, Menlo, monospace; background: #e9ecef; padding: 2px 8px; border-radius: 4px; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .badge { border-radius: 10px; padding: 1px 8px; background: #e9ecef; font-size: 12px; white-space: nowrap; }\n .badge.good { background: var(--good-bg); color: var(--good); }\n .badge.warn { background: var(--warn-bg); color: var(--warn); }\n .badge.bad { background: var(--bad-bg); color: var(--bad); }\n button.badge { border: none; padding: 1px 8px; }\n\n /* Format bar */\n .formatbar { display: flex; gap: 4px; align-items: center; padding: 6px 12px; border-bottom: 1px solid var(--line); background: white; }\n .formatbar .sep { width: 1px; align-self: stretch; background: var(--line); margin: 0 6px; }\n .formatbar .hint { margin-left: auto; font-size: 12px; color: var(--muted); }\n\n /* Narrow screens: the editor is a desktop tool, but must stay usable on a phone */\n @media (max-width: 700px) {\n .formatbar .hint, .status .file, .status .cid { display: none; }\n .document-area { padding: 16px 12px 64px; }\n .row { grid-template-columns: 16px 40px 1fr; }\n .children, .inc-body { margin-left: 16px; }\n .menu-label { padding: 8px 10px; }\n .doc-title { font-size: 22px; }\n }\n\n /* Document */\n .document-area { flex: 1; overflow-y: auto; padding: 32px 48px 96px; }\n .doc { max-width: 860px; margin: 0 auto; }\n .doc-title { font-size: 30px; font-weight: 700; border: none; width: 100%; padding: 4px 0; outline: none; }\n .doc-meta { display: flex; flex-wrap: wrap; gap: 16px; color: var(--muted); font-size: 13px; margin: 4px 0 18px; }\n .doc-meta b { color: #495057; font-weight: 600; }\n .doc-meta button { font-size: 12px; padding: 1px 8px; }\n .preamble { margin-bottom: 24px; }\n .problems { background: var(--bad-bg); color: var(--bad); border-radius: 6px; padding: 8px 12px; margin: 0 0 16px; font-size: 13px; }\n .problems li { margin: 2px 0; }\n\n /* Paragraphs */\n .para { min-height: 1.5em; line-height: 1.65; font-size: 16px; outline: none; border-radius: 4px; padding: 1px 4px; margin: 0 -4px; white-space: pre-wrap; }\n .para[contenteditable=\"true\"]:hover { background: #f8f9fa; }\n .para[contenteditable=\"true\"]:focus { background: #f1f6ff; box-shadow: 0 0 0 2px #cfe2ff; }\n .para.empty::before { content: attr(data-placeholder); color: #adb5bd; }\n .para .ref { color: var(--accent); cursor: default; }\n .para .ref.unresolved, .ref.unresolved { color: var(--bad); text-decoration: underline wavy; }\n .para .param, .composed .param, .inc-body .param { color: #0b4f8a; background: #e7f0fa; border-radius: 3px; padding: 0 3px; font-size: 0.95em; white-space: nowrap; }\n .para .param.unresolved { color: var(--bad); background: var(--bad-bg); }\n\n /* Preview: the document as readers see it */\n &[preview] .sec-problems, &[preview] .problems, &[preview] .doc-meta button,\n &[preview] .inc-title .inc-id, &[preview] .inc-info > :not(.cid-line) { display: none; }\n &[preview] .grip { visibility: hidden; overflow: hidden; } /* keep its grid column, or the layout collapses */\n &[preview] .row { grid-template-columns: 0 56px 1fr; }\n &[preview] .inc-body { margin-left: 56px; }\n &[preview] .sec.active > .row { background: none; box-shadow: none; }\n &[preview] .sec.include > .row { background: none; box-shadow: none; }\n &[preview] .title-input { cursor: default; }\n\n /* Sections */\n .sec { margin: 6px 0; border-radius: 6px; position: relative; }\n .sec.active > .row { background: #fbfcfe; box-shadow: inset 3px 0 0 #cfe2ff; }\n .sec.drop-before { box-shadow: 0 -3px 0 var(--accent); }\n .sec.drop-after { box-shadow: 0 3px 0 var(--accent); }\n .sec.drop-into > .row { outline: 2px dashed var(--accent); }\n .row { display: grid; grid-template-columns: 22px 56px 1fr; align-items: start; border-radius: 6px; padding: 2px 4px 2px 0; }\n .grip { cursor: grab; color: #ced4da; font-size: 14px; line-height: 28px; text-align: center; user-select: none; }\n .row:hover .grip { color: var(--muted); }\n .num { font-weight: 600; color: #495057; line-height: 28px; }\n .title-input { font-size: 17px; font-weight: 600; border: none; outline: none; width: 100%; padding: 2px 4px; margin: 0 -4px; border-radius: 4px; background: transparent; }\n .title-input:focus { background: #f1f6ff; box-shadow: 0 0 0 2px #cfe2ff; }\n .children { margin-left: 40px; }\n .tools { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; margin: 4px 0 2px; }\n .tools button { font-size: 12px; padding: 1px 7px; }\n .tools .id { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); margin-left: 8px; }\n .tools .id input { width: 150px; font-family: ui-monospace, Menlo, monospace; font-size: 12px; padding: 1px 4px; }\n .sec-problems { color: var(--bad); font-size: 12px; margin: 2px 0; }\n .add-section { margin: 20px 0; width: 100%; padding: 10px; border: 2px dashed var(--line); background: transparent; color: var(--muted); }\n .add-section:hover { border-color: var(--accent); color: var(--accent); }\n\n /* Included documents */\n .sec.include > .row { background: #f6f8fb; box-shadow: inset 4px 0 0 #6c8ebf; }\n .inc-title { font-size: 17px; font-weight: 600; line-height: 28px; display: flex; gap: 10px; align-items: baseline; }\n .inc-title .inc-id { margin-left: auto; font-family: ui-monospace, Menlo, monospace; font-size: 12px; color: var(--muted); font-weight: normal; }\n .inc-info { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; font-size: 12px; margin: 2px 0 4px; }\n .inc-info a, .inc-info button { font-size: 12px; }\n .cid-line { font-family: ui-monospace, Menlo, monospace; font-size: 11px; color: var(--muted); overflow-wrap: anywhere; }\n .inc-body { margin-left: 78px; border-left: 1px dashed #ced4da; padding-left: 12px; color: #343a40; }\n .composed { margin: 6px 0; font-size: 15px; line-height: 1.55; }\n .composed .crow { display: grid; grid-template-columns: 56px 1fr; }\n .composed .cnum { color: var(--muted); font-weight: 600; }\n .composed .ctitle { font-weight: 600; }\n .composed .chead { display: flex; gap: 12px; align-items: baseline; }\n .composed .chead .cid-line { margin-left: auto; }\n .composed .csub { margin-left: 32px; }\n .composed .ref { color: var(--accent); }\n\n /* Dialogs */\n .backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.3); z-index: 200; }\n .dialog { position: fixed; top: 64px; left: 50%; transform: translateX(-50%); width: min(780px, calc(100vw - 32px)); max-height: calc(100vh - 128px); overflow: auto; z-index: 201; background: white; border-radius: 8px; box-shadow: 0 8px 32px rgba(0,0,0,.2); padding: 16px 20px; font-size: 14px; }\n .dialog h2 { font-size: 16px; margin: 0 0 4px; display: flex; align-items: center; gap: 12px; }\n .dialog h2 button { margin-left: auto; }\n .dialog .intro { color: var(--muted); font-size: 13px; margin: 0 0 12px; }\n .dialog ol, .dialog ul { padding-left: 20px; }\n .dialog li { display: flex; gap: 6px; align-items: center; margin: 4px 0; }\n .dialog li code { flex: 1; }\n .dialog form { display: flex; gap: 6px; margin-top: 8px; }\n .dialog form input { flex: 1; padding: 4px 8px; }\n .dialog table { width: 100%; border-collapse: collapse; font-size: 13px; }\n .dialog th { text-align: left; color: var(--muted); font-weight: 500; font-size: 12px; }\n .dialog td, .dialog th { padding: 5px 8px 5px 0; border-bottom: 1px solid #f1f3f5; vertical-align: top; }\n .dialog tr.pick { cursor: pointer; }\n .dialog tr.pick:hover { background: #f1f6ff; }\n .dialog label { display: block; font-size: 12px; font-weight: 600; color: #495057; margin: 10px 0 3px; }\n .dialog .field { width: 100%; box-sizing: border-box; padding: 5px 8px; border: 1px solid #ced4da; border-radius: 4px; }\n .dialog .row-fields { display: grid; grid-template-columns: 1fr 1.6fr 1fr auto; gap: 6px; margin: 4px 0; }\n .dialog .row-fields input { padding: 4px 6px; border: 1px solid #ced4da; border-radius: 4px; }\n .dialog .note { font-size: 12px; color: var(--muted); }\n .drop-overlay { position: fixed; inset: 0; background: rgba(13,110,253,.08); border: 3px dashed var(--accent); z-index: 300; display: grid; place-items: center; font-size: 20px; color: var(--accent); pointer-events: none; }\n}\n`\n\n// Add the styles once to the document (or shadow root) the editor lives in.\nexport function installStyles(root: Document | ShadowRoot) {\n const host = root instanceof Document ? root.head : root\n if (host.querySelector('style[data-stroc-editor]')) return\n const style = document.createElement('style')\n style.dataset.strocEditor = ''\n style.textContent = editorCss\n host.appendChild(style)\n}\n", "// <stroc-paragraph>: one paragraph of Stroc text, shown formatted and edited in place.\n//\n// The element manages its own DOM (not Lit templates), so typing never loses the caret. It turns\n// markup into DOM for display, and DOM back into canonical markup after every edit. Only Stroc's\n// formatting survives the round trip: bold, italic, underline and references; anything else a\n// browser inserts is reduced to its text.\n\nimport { LitElement } from 'lit'\nimport { parseMarkup, canonicalMarkup, escapeMarkupText, type MarkupNode } from '@stroc/core'\n\nexport type RefLabel = (path: string[]) => string | undefined\nexport type ParamLabel = (key: string) => string | undefined\n\nexport interface ParagraphChange { key: string, value: string }\nexport interface ParagraphSplit { key: string, before: string, after: string }\nexport interface ParagraphPaste { key: string, before: string, blocks: string[], after: string }\n\nconst BLOCK = /^(P|DIV|LI|H[1-6]|BLOCKQUOTE|TR|DT|DD|PRE|SECTION|ARTICLE|HEADER|FOOTER|UL|OL|TABLE|TBODY)$/\n\n// Pasted HTML as paragraphs of canonical markup: one per block element (or per run of inline\n// content between blocks). Only bold, italic and underline survive.\nexport function htmlToParagraphs(html: string): string[] {\n const body = new DOMParser().parseFromString(html, 'text/html').body\n body.querySelectorAll('script, style, meta, link, title').forEach(n => n.remove())\n // Treat a pair of line breaks as a paragraph break.\n body.querySelectorAll('br + br').forEach(br => { const p = document.createElement('p'); br.replaceWith(p) })\n const out: string[] = []\n const hasBlock = (n: Node): boolean => Array.from(n.childNodes).some(c => c.nodeType === 1 && (BLOCK.test((c as Element).tagName) || hasBlock(c)))\n const collect = (node: Node) => {\n let run = document.createElement('div')\n const flushRun = () => { const m = domToMarkup(run); if (m) out.push(m); run = document.createElement('div') }\n for (const child of Array.from(node.childNodes)) {\n if (child.nodeType === 1 && (BLOCK.test((child as Element).tagName) || hasBlock(child))) {\n flushRun()\n if (hasBlock(child)) collect(child)\n else { const m = domToMarkup(child); if (m) out.push(m) }\n } else run.appendChild(child.cloneNode(true))\n }\n flushRun()\n }\n collect(body)\n return out\n}\n\n// Pasted plain text as paragraphs: one per line.\nexport function textToParagraphs(text: string): string[] {\n return text.split(/\\r?\\n/).map(l => canonicalMarkup(escapeMarkupText(l))).filter(Boolean)\n}\n\nconst TAG_OF: Record<string, 'b' | 'i' | 'u'> = { B: 'b', STRONG: 'b', I: 'i', EM: 'i', U: 'u' }\n\n// Markup to DOM nodes (display and editing share one representation).\nexport function markupToDom(markup: string, label: RefLabel, doc: Document = document, paramLabel: ParamLabel = () => undefined): DocumentFragment {\n const frag = doc.createDocumentFragment()\n const build = (nodes: MarkupNode[], parent: Node) => nodes.forEach(n => {\n if (n.type === 'text') parent.appendChild(doc.createTextNode(n.value))\n else if (n.type === 'ref') {\n const span = doc.createElement('span')\n const text = label(n.path)\n span.className = text ? 'ref' : 'ref unresolved'\n span.dataset.ref = n.path.join('/')\n span.contentEditable = 'false'\n span.title = `Reference to ${n.path.join('/')}`\n span.textContent = text ?? `\u2192${n.path.join('/')}`\n parent.appendChild(span)\n } else if (n.type === 'param') {\n const span = doc.createElement('span')\n const text = paramLabel(n.key)\n span.className = text ? 'param' : 'param unresolved'\n span.dataset.param = n.key\n span.contentEditable = 'false'\n span.title = text ? `Placeholder for ${text} (${n.key})` : `Undeclared parameter ${n.key}`\n span.textContent = `\u27E8${text ?? n.key}\u27E9`\n parent.appendChild(span)\n } else {\n const el = doc.createElement(n.tag)\n build(n.children, el)\n parent.appendChild(el)\n }\n })\n build(parseMarkup(markup).nodes, frag)\n return frag\n}\n\n// DOM to canonical markup. Block elements and line breaks become spaces.\nexport function domToMarkup(root: Node): string {\n const walk = (node: Node): MarkupNode[] => {\n const out: MarkupNode[] = []\n node.childNodes.forEach(child => {\n if (child.nodeType === 3) out.push({ type: 'text', value: child.nodeValue ?? '' })\n else if (child.nodeType === 1) {\n const el = child as HTMLElement\n if (el.dataset?.ref) out.push({ type: 'ref', path: el.dataset.ref.split('/'), offset: 0 })\n else if (el.dataset?.param) out.push({ type: 'param', key: el.dataset.param, offset: 0 })\n else if (el.tagName === 'BR') out.push({ type: 'text', value: ' ' })\n else if (TAG_OF[el.tagName]) out.push({ type: 'emphasis', tag: TAG_OF[el.tagName], children: walk(el), offset: 0 })\n else {\n const block = /^(DIV|P|LI|H[1-6])$/.test(el.tagName)\n if (block) out.push({ type: 'text', value: ' ' })\n out.push(...walk(el))\n if (block) out.push({ type: 'text', value: ' ' })\n }\n }\n })\n return out\n }\n return canonicalMarkup(walk(root))\n}\n\nexport class StrocParagraph extends LitElement {\n static properties = {\n value: { type: String },\n key: { type: String },\n placeholder: { type: String },\n editable: { type: Boolean },\n refresh: { type: Number }, // bump to redraw reference labels\n }\n\n declare value: string\n declare key: string\n declare placeholder: string\n declare editable: boolean\n declare refresh: number\n labelRef: RefLabel = () => undefined\n labelParam: ParamLabel = () => undefined\n\n private box?: HTMLDivElement\n private shown?: string // the markup currently in the DOM\n private timer?: ReturnType<typeof setTimeout>\n private savedOffset?: number // caret position in atoms (characters, a reference counts as one)\n\n constructor() {\n super()\n this.value = ''\n this.key = ''\n this.placeholder = ''\n this.editable = true\n this.refresh = 0\n }\n\n createRenderRoot() { return this } // light DOM: styled by the editor, selection works normally\n\n render() { return null }\n\n firstUpdated() {\n const box = document.createElement('div')\n box.className = 'para'\n box.dataset.test = 'text'\n box.addEventListener('input', () => this.scheduleChange())\n box.addEventListener('blur', () => { this.saveSelection(); this.flush() })\n box.addEventListener('keydown', e => this.onKey(e))\n box.addEventListener('paste', e => this.onPaste(e))\n document.addEventListener('selectionchange', this.onSelectionChange)\n this.appendChild(box)\n this.box = box\n this.draw()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('selectionchange', this.onSelectionChange)\n }\n\n // Remember where the caret is whenever it moves inside this paragraph, so it can be restored\n // after a dialog (such as the reference picker) takes the focus.\n private onSelectionChange = () => this.saveSelection()\n\n rememberSelection() {\n this.saveSelection()\n }\n\n updated(changed: Map<string, unknown>) {\n if (!this.box) return\n this.box.contentEditable = this.editable ? 'true' : 'false'\n this.box.spellcheck = this.getAttribute('spellcheck') !== 'false'\n this.box.dataset.placeholder = this.placeholder\n // Never redraw text the author is typing in; a changed value from outside wins only when it\n // really differs from what is shown.\n if ((changed.has('value') && this.value !== this.shown) || changed.has('refresh')) this.draw()\n }\n\n private draw() {\n if (!this.box) return\n const focused = this.box.matches(':focus')\n if (focused && this.value === this.shown) {\n // Only reference labels may have changed: update them in place, keeping the caret.\n this.box.querySelectorAll<HTMLElement>('[data-ref]').forEach(el => {\n const text = this.labelRef(el.dataset.ref!.split('/'))\n el.textContent = text ?? `\u2192${el.dataset.ref}`\n el.className = text ? 'ref' : 'ref unresolved'\n })\n this.box.querySelectorAll<HTMLElement>('[data-param]').forEach(el => {\n const text = this.labelParam(el.dataset.param!)\n el.textContent = `\u27E8${text ?? el.dataset.param}\u27E9`\n el.className = text ? 'param' : 'param unresolved'\n })\n return\n }\n this.box.replaceChildren(markupToDom(this.value ?? '', this.labelRef, document, this.labelParam))\n this.shown = this.value\n this.box.classList.toggle('empty', !this.value)\n }\n\n private scheduleChange() {\n clearTimeout(this.timer)\n this.timer = setTimeout(() => this.flush(), 250)\n }\n\n // Emit the current content as canonical markup, if it changed.\n flush() {\n clearTimeout(this.timer)\n if (!this.box) return\n const value = domToMarkup(this.box)\n this.box.classList.toggle('empty', !value)\n if (value === this.shown) return\n this.shown = value\n this.dispatchEvent(new CustomEvent<ParagraphChange>('paragraph-change', { detail: { key: this.key, value }, bubbles: true, composed: true }))\n }\n\n private selection(): Selection | null {\n const root = this.getRootNode() as ShadowRoot & { getSelection?: () => Selection | null }\n return root.getSelection?.() ?? document.getSelection()\n }\n\n private caretRange(): Range | undefined {\n const sel = this.selection()\n if (!sel || !sel.rangeCount || !this.box) return undefined\n const r = sel.getRangeAt(0)\n return this.box.contains(r.startContainer) ? r : undefined\n }\n\n private saveSelection() {\n const r = this.caretRange()\n if (r) this.savedOffset = this.atomsBefore(r.startContainer, r.startOffset)\n }\n\n // Positions in a paragraph are counted in atoms: each character of text is one, and each\n // reference is one (its label is not text). They survive redrawing the DOM, unlike Ranges.\n private atomsBefore(container: Node, offset: number): number {\n let count = 0\n const visit = (node: Node): boolean => {\n if (node === container && node.nodeType === 3) { count += offset; return true }\n if (node === container) {\n for (let i = 0; i < offset && i < node.childNodes.length; i++) count += this.atomsIn(node.childNodes[i])\n return true\n }\n if ((node as HTMLElement).dataset?.ref || (node as HTMLElement).dataset?.param) { if (node.contains(container)) return true; count += 1; return false }\n if (node.nodeType === 3) { count += node.nodeValue?.length ?? 0; return false }\n for (const child of Array.from(node.childNodes)) if (visit(child)) return true\n return false\n }\n for (const child of Array.from(this.box!.childNodes)) if (visit(child)) break\n if (container === this.box) { count = 0; for (let i = 0; i < offset; i++) count += this.atomsIn(this.box!.childNodes[i]) }\n return count\n }\n\n private atomsIn(node: Node): number {\n if ((node as HTMLElement).dataset?.ref || (node as HTMLElement).dataset?.param) return 1\n if (node.nodeType === 3) return node.nodeValue?.length ?? 0\n return Array.from(node.childNodes).reduce((n, c) => n + this.atomsIn(c), 0)\n }\n\n // A collapsed range at an atom position.\n private rangeAt(atoms: number): Range {\n const r = document.createRange()\n let left = atoms\n const place = (node: Node): boolean => {\n for (const child of Array.from(node.childNodes)) {\n if ((child as HTMLElement).dataset?.ref || (child as HTMLElement).dataset?.param) {\n if (left === 0) { r.setStartBefore(child); return true }\n left -= 1\n if (left === 0) { r.setStartAfter(child); return true }\n continue\n }\n if (child.nodeType === 3) {\n const len = child.nodeValue?.length ?? 0\n if (left <= len) { r.setStart(child, left); return true }\n left -= len\n continue\n }\n if (place(child)) return true\n }\n return false\n }\n if (!place(this.box!)) { r.selectNodeContents(this.box!); r.collapse(false) }\n r.collapse(true)\n return r\n }\n\n private onKey(e: KeyboardEvent) {\n const mod = e.metaKey || e.ctrlKey\n if (mod && ['b', 'i', 'u'].includes(e.key.toLowerCase())) {\n e.preventDefault()\n this.format(({ b: 'bold', i: 'italic', u: 'underline' } as const)[e.key.toLowerCase() as 'b' | 'i' | 'u'])\n return\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n this.split()\n return\n }\n if (e.key === 'Backspace') {\n const r = this.caretRange()\n if (r && r.collapsed && this.textBefore(r) === '') {\n e.preventDefault()\n this.flush()\n this.dispatchEvent(new CustomEvent('paragraph-merge', { detail: { key: this.key }, bubbles: true, composed: true }))\n }\n }\n }\n\n private textBefore(r: Range): string {\n const before = document.createRange()\n before.setStart(this.box!, 0)\n before.setEnd(r.startContainer, r.startOffset)\n return before.toString()\n }\n\n private split() {\n const r = this.caretRange()\n if (!r || !this.box) return\n const { before, after } = this.around(r)\n this.shown = before\n this.dispatchEvent(new CustomEvent<ParagraphSplit>('paragraph-split', { detail: { key: this.key, before, after }, bubbles: true, composed: true }))\n }\n\n // Paste keeps bold, italic and underline. Several paragraphs become several sections: the first\n // joins the text before the caret, the last joins the text after it.\n private onPaste(e: ClipboardEvent) {\n e.preventDefault()\n const html = e.clipboardData?.getData('text/html') ?? ''\n const text = e.clipboardData?.getData('text/plain') ?? ''\n const blocks = html ? htmlToParagraphs(html) : textToParagraphs(text)\n const r = this.caretRange()\n if (!r || !this.box || !blocks.length) return\n r.deleteContents()\n if (blocks.length === 1) {\n // Pasted into the middle of a paragraph: keep a space at either edge of what was copied.\n const raw = html ? (new DOMParser().parseFromString(html, 'text/html').body.textContent ?? '') : text\n const frag = markupToDom(blocks[0], this.labelRef)\n if (/^\\s/.test(raw)) frag.prepend(document.createTextNode(' '))\n if (/\\s$/.test(raw)) frag.append(document.createTextNode(' '))\n const last = frag.lastChild\n r.insertNode(frag)\n if (last) {\n const after = document.createRange()\n after.setStartAfter(last)\n after.collapse(true)\n const sel = this.selection()\n sel?.removeAllRanges()\n sel?.addRange(after)\n }\n this.flush()\n return\n }\n const { before, after } = this.around(r, true)\n this.shown = undefined\n this.dispatchEvent(new CustomEvent<ParagraphPaste>('paragraph-paste', { detail: { key: this.key, before, blocks, after }, bubbles: true, composed: true }))\n }\n\n // The paragraph's markup before and after a caret. With keepEdges, a space at the caret is kept\n // (for joining pasted text); otherwise both sides are trimmed (for splitting).\n private around(r: Range, keepEdges = false): { before: string, after: string } {\n const head = document.createRange()\n head.setStart(this.box!, 0)\n head.setEnd(r.startContainer, r.startOffset)\n const tail = document.createRange()\n tail.setStart(r.endContainer, r.endOffset)\n tail.setEnd(this.box!, this.box!.childNodes.length)\n const markup = (range: Range) => { const d = document.createElement('div'); d.appendChild(range.cloneContents()); return domToMarkup(d) }\n let before = markup(head), after = markup(tail)\n if (keepEdges && before && /\\s$/.test(head.toString())) before += ' '\n if (keepEdges && after && /^\\s/.test(tail.toString())) after = ' ' + after\n return { before, after }\n }\n\n // Apply bold, italic or underline to the selection (from shortcuts or the toolbar).\n format(command: 'bold' | 'italic' | 'underline') {\n if (!this.box) return\n if (!this.caretRange() && this.savedOffset !== undefined) this.restoreSelection()\n document.execCommand('styleWithCSS', false, 'false')\n document.execCommand(command)\n this.flush()\n }\n\n private restoreSelection() {\n const sel = this.selection()\n if (!sel || this.savedOffset === undefined || !this.box) return\n this.box.focus()\n sel.removeAllRanges()\n sel.addRange(this.rangeAt(this.savedOffset))\n }\n\n // Insert a reference or a placeholder at the caret (or where the caret last was).\n insertRef(path: string[]) { this.insertToken(`<ref:${path.join('/')}>`) }\n insertParam(key: string) { this.insertToken(`<param:${key}>`) }\n\n private insertToken(token: string) {\n if (!this.box) return\n if (!this.caretRange()) this.restoreSelection()\n const r = this.caretRange() ?? (() => { const x = document.createRange(); x.selectNodeContents(this.box!); x.collapse(false); return x })()\n const frag = markupToDom(token, this.labelRef, document, this.labelParam)\n const node = frag.firstChild!\n r.deleteContents()\n const before = this.textBefore(r)\n if (before && !/\\s$/.test(before)) { // keep the reference apart from the word before it\n r.insertNode(document.createTextNode(' '))\n r.collapse(false)\n }\n r.insertNode(node)\n const space = document.createTextNode(' ')\n node.parentNode!.insertBefore(space, node.nextSibling)\n const sel = this.selection()\n const after = document.createRange()\n after.setStartAfter(space)\n after.collapse(true)\n sel?.removeAllRanges()\n sel?.addRange(after)\n this.flush()\n }\n\n // Put the caret at an atom position (or the start or end) of the paragraph.\n focusAt(where: number | 'start' | 'end') {\n if (!this.box) return\n this.box.focus()\n const sel = this.selection()\n let r: Range\n if (where === 'start' || where === 'end') {\n r = document.createRange()\n r.selectNodeContents(this.box)\n r.collapse(where === 'start')\n } else r = this.rangeAt(where)\n sel?.removeAllRanges()\n sel?.addRange(r)\n this.saveSelection()\n }\n}\n\ncustomElements.define('stroc-paragraph', StrocParagraph)\n", "// The editor's document model: the document being edited, with a stable key on every section so\n// the UI can track sections as they move. Pure functions, no DOM: tested on their own.\n\nimport { suggestId, parseMarkup, canonicalMarkup, type MarkupNode } from '@stroc/core'\n\nexport interface EditSection {\n key: string\n id?: string\n title?: string\n text?: string // paragraph markup\n sections: EditSection[]\n source?: string // CID of an included document (then only id and source apply)\n}\n\nexport interface EditParameter {\n key: string\n label: string\n default?: string\n}\n\nexport interface EditDoc {\n stroc: string\n language: string\n title: string\n author?: string\n published?: string\n text?: string\n replaces: string[]\n parameters: EditParameter[]\n sections: EditSection[]\n}\n\nlet counter = 0\nexport const newKey = () => `s${++counter}`\n\nexport function newDoc(): EditDoc {\n return { stroc: '1.0', language: 'en', title: 'Untitled Document', replaces: [], parameters: [], sections: [] }\n}\n\nexport function newSection(init: Partial<Omit<EditSection, 'key'>> = {}): EditSection {\n return { key: newKey(), sections: [], ...init }\n}\n\n// ---------------------------------------------------------------------------------------------\n// Conversion to and from the plain form (links as {\"/\": cid})\n\nconst linkOf = (v: unknown): string | undefined =>\n typeof v === 'string' ? v : v && typeof v === 'object' && '/' in v ? String((v as { '/': unknown })['/']) : undefined\n\nexport function fromPlain(plain: Record<string, unknown>): EditDoc {\n const section = (s: Record<string, unknown>): EditSection => {\n if (s.source !== undefined) return { key: newKey(), id: (s.id ?? s.as) as string | undefined, source: linkOf(s.source), sections: [] }\n return {\n key: newKey(),\n ...(s.id !== undefined ? { id: String(s.id) } : {}),\n ...(s.title !== undefined ? { title: String(s.title) } : {}),\n ...(s.text !== undefined ? { text: String(s.text) } : {}),\n sections: Array.isArray(s.sections) ? s.sections.map(x => section(x as Record<string, unknown>)) : [],\n }\n }\n return {\n stroc: String(plain.stroc ?? '1.0'),\n language: String(plain.language ?? 'en'),\n title: String(plain.title ?? ''),\n ...(plain.author !== undefined ? { author: String(plain.author) } : {}),\n ...(plain.published !== undefined ? { published: String(plain.published) } : {}),\n ...(plain.text !== undefined ? { text: String(plain.text) } : {}),\n replaces: Array.isArray(plain.replaces) ? plain.replaces.map(linkOf).filter((x): x is string => !!x) : [],\n parameters: Array.isArray(plain.parameters) ? (plain.parameters as EditParameter[]).map(p => ({ ...p })) : [],\n sections: Array.isArray(plain.sections) ? plain.sections.map(x => section(x as Record<string, unknown>)) : [],\n }\n}\n\n// Tidy plain text (editors normalize as the author types): single spaces, trimmed.\nconst tidy = (v: string | undefined): string | undefined => {\n if (v === undefined) return undefined\n const t = v.replace(/\\s+/g, ' ').trim() // \\s includes the no-break space\n return t || undefined\n}\nconst tidyText = (v: string | undefined) => (v === undefined ? undefined : canonicalMarkup(v) || undefined)\n\nconst omitUndefined = <T extends Record<string, unknown>>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\n// The document as it is validated, hashed and saved: empty values omitted, text canonical, links\n// written {\"/\": cid}. Sections with nothing in them are dropped. If `trace` is given, it records\n// which section each plain path (\"sections.0.sections.2\") came from, for placing problems.\nexport function toPlain(doc: EditDoc, trace?: Map<string, string>): Record<string, unknown> {\n const list = (items: EditSection[], prefix: string): Record<string, unknown>[] => {\n const out: Record<string, unknown>[] = []\n for (const s of items) {\n const path = `${prefix}sections.${out.length}`\n const plain = section(s, path)\n if (plain) { out.push(plain); trace?.set(path, s.key) }\n }\n return out\n }\n const section = (s: EditSection, path: string): Record<string, unknown> | undefined => {\n if (s.source !== undefined) return { id: tidy(s.id), source: { '/': tidy(s.source) ?? '' } }\n const sections = list(s.sections, `${path}.`)\n const out = omitUndefined({ id: tidy(s.id), title: tidy(s.title), text: tidyText(s.text), sections: sections.length ? sections : undefined })\n return Object.keys(out).length ? out : undefined\n }\n const sections = list(doc.sections, '')\n const parameters = doc.parameters\n .map(p => omitUndefined({ key: tidy(p.key), label: tidy(p.label), default: tidy(p.default) }))\n .filter(p => p.key || p.label)\n return omitUndefined({\n stroc: doc.stroc,\n language: tidy(doc.language),\n title: tidy(doc.title),\n author: tidy(doc.author),\n published: tidy(doc.published),\n text: tidyText(doc.text),\n replaces: doc.replaces.length ? doc.replaces.map(c => ({ '/': c })) : undefined,\n parameters: parameters.length ? parameters : undefined,\n sections: sections.length ? sections : undefined,\n })\n}\n\n// ---------------------------------------------------------------------------------------------\n// Navigation\n\nexport interface Located {\n section: EditSection\n parent: EditSection[] // the list it is in\n index: number\n path: number[] // indexes from the document root\n}\n\nexport function locate(doc: EditDoc, key: string): Located | undefined {\n const walk = (list: EditSection[], path: number[]): Located | undefined => {\n for (let i = 0; i < list.length; i++) {\n const s = list[i]\n if (s.key === key) return { section: s, parent: list, index: i, path: [...path, i] }\n const inner = walk(s.sections, [...path, i])\n if (inner) return inner\n }\n return undefined\n }\n return walk(doc.sections, [])\n}\n\nexport function allSections(doc: EditDoc): { section: EditSection, number: string, depth: number }[] {\n const out: { section: EditSection, number: string, depth: number }[] = []\n const walk = (list: EditSection[], prefix: string, depth: number) => list.forEach((s, i) => {\n const number = prefix ? `${prefix}.${i + 1}` : `${i + 1}`\n out.push({ section: s, number, depth })\n if (s.source === undefined) walk(s.sections, number, depth + 1)\n })\n walk(doc.sections, '', 1)\n return out\n}\n\n// The section at a validation problem's path (['sections', 2, 'sections', 0, 'text']).\nexport function sectionAtPath(doc: EditDoc, path: (string | number)[]): EditSection | undefined {\n let list = doc.sections\n let found: EditSection | undefined\n for (let i = 0; i + 1 < path.length && path[i] === 'sections'; i += 2) {\n found = list[path[i + 1] as number]\n if (!found) return undefined\n list = found.sections\n }\n return found\n}\n\nfunction isDescendant(ancestor: EditSection, key: string): boolean {\n return ancestor.sections.some(s => s.key === key || isDescendant(s, key))\n}\n\n// ---------------------------------------------------------------------------------------------\n// Structure operations. Each returns true if it changed the document.\n\nexport function moveUp(doc: EditDoc, key: string): boolean {\n const at = locate(doc, key)\n if (!at || at.index === 0) return false\n at.parent.splice(at.index, 1)\n at.parent.splice(at.index - 1, 0, at.section)\n return true\n}\n\nexport function moveDown(doc: EditDoc, key: string): boolean {\n const at = locate(doc, key)\n if (!at || at.index >= at.parent.length - 1) return false\n at.parent.splice(at.index, 1)\n at.parent.splice(at.index + 1, 0, at.section)\n return true\n}\n\n// Make the section the last child of its previous sibling (which must be written out).\nexport function indent(doc: EditDoc, key: string): boolean {\n const at = locate(doc, key)\n if (!at || at.index === 0) return false\n const prev = at.parent[at.index - 1]\n if (prev.source !== undefined) return false\n at.parent.splice(at.index, 1)\n prev.sections.push(at.section)\n return true\n}\n\n// Move the section out of its parent, to just after the parent.\nexport function outdent(doc: EditDoc, key: string): boolean {\n const at = locate(doc, key)\n if (!at || at.path.length < 2) return false\n const parentKey = locateParentKey(doc, at)\n const parentAt = parentKey ? locate(doc, parentKey) : undefined\n if (!parentAt) return false\n at.parent.splice(at.index, 1)\n parentAt.parent.splice(parentAt.index + 1, 0, at.section)\n return true\n}\n\nfunction locateParentKey(doc: EditDoc, at: Located): string | undefined {\n let list = doc.sections\n let parent: EditSection | undefined\n for (const i of at.path.slice(0, -1)) { parent = list[i]; list = parent.sections }\n return parent?.key\n}\n\nexport function remove(doc: EditDoc, key: string): boolean {\n const at = locate(doc, key)\n if (!at) return false\n at.parent.splice(at.index, 1)\n return true\n}\n\n// A deep copy with new keys (and no ids, which must stay unique).\nexport function copySection(s: EditSection): EditSection {\n return { ...s, key: newKey(), id: s.source !== undefined ? s.id : undefined, sections: s.sections.map(copySection) }\n}\n\nexport type Placement = 'before' | 'after' | 'into'\n\n// Move (or copy) a section relative to a target. Refuses to put a section inside itself.\nexport function place(doc: EditDoc, key: string, targetKey: string, where: Placement, copy = false): boolean {\n if (key === targetKey && !copy) return false\n const from = locate(doc, key)\n const target = locate(doc, targetKey)\n if (!from || !target) return false\n if (!copy && isDescendant(from.section, targetKey)) return false\n if (where === 'into' && target.section.source !== undefined) return false\n const moving = copy ? copySection(from.section) : from.section\n if (!copy) from.parent.splice(from.index, 1)\n const t = locate(doc, targetKey)! // indexes may have shifted\n if (where === 'into') t.section.sections.push(moving)\n else t.parent.splice(t.index + (where === 'after' ? 1 : 0), 0, moving)\n return true\n}\n\nexport function insertAfter(doc: EditDoc, key: string | undefined, section: EditSection): void {\n const at = key ? locate(doc, key) : undefined\n if (!at) doc.sections.push(section)\n else at.parent.splice(at.index + 1, 0, section)\n}\n\n// Split a section's paragraph: the section keeps `before`; a new untitled paragraph section with\n// `after` follows it as a sibling. Returns the new section.\nexport function splitParagraph(doc: EditDoc, key: string, before: string, after: string): EditSection | undefined {\n const at = locate(doc, key)\n if (!at) return undefined\n at.section.text = before || undefined\n const next = newSection({ text: after || undefined })\n at.parent.splice(at.index + 1, 0, next)\n return next\n}\n\n// Join an untitled paragraph onto the previous sibling's paragraph (Backspace at its start).\n// Returns the section that now holds the text and where the join is, or undefined if not possible.\nexport function mergeWithPrevious(doc: EditDoc, key: string): { into: EditSection, at: number } | undefined {\n const loc = locate(doc, key)\n if (!loc || loc.index === 0 || loc.section.title || loc.section.sections.length || loc.section.source !== undefined) return undefined\n const prev = loc.parent[loc.index - 1]\n if (prev.source !== undefined || prev.sections.length) return undefined\n const left = prev.text ?? ''\n const right = loc.section.text ?? ''\n const joined = canonicalMarkup(left && right ? `${left} ${right}` : left + right)\n const at = plainLength(left)\n prev.text = joined || undefined\n loc.parent.splice(loc.index, 1)\n return { into: prev, at }\n}\n\n// Length in atoms: characters of text, plus one per reference or placeholder (as the editor counts).\nexport function plainLength(markup: string): number {\n const count = (nodes: MarkupNode[]): number => nodes.reduce((n, x) =>\n n + (x.type === 'text' ? x.value.length : x.type === 'ref' || x.type === 'param' ? 1 : count(x.children)), 0)\n return count(parseMarkup(markup).nodes)\n}\n\n// Inline an included document: replace the include with written-out sections (a copy, no longer\n// linked by CID). `content` comes from the composed include.\nexport function replaceInclude(doc: EditDoc, key: string, content: { title?: string, text?: string, sections: EditSection[] }): boolean {\n const at = locate(doc, key)\n if (!at || at.section.source === undefined) return false\n at.parent[at.index] = { key: at.section.key, id: at.section.id, ...content.title ? { title: content.title } : {}, ...content.text ? { text: content.text } : {}, sections: content.sections }\n return true\n}\n\n// ---------------------------------------------------------------------------------------------\n// Ids and references\n\nexport function idsInUse(doc: EditDoc): Set<string> {\n const ids = new Set<string>()\n const walk = (list: EditSection[]) => list.forEach(s => { if (s.id) ids.add(s.id); if (s.source === undefined) walk(s.sections) })\n walk(doc.sections)\n return ids\n}\n\n// A new id for a section, from its title, unique in the document.\nexport function uniqueId(doc: EditDoc, title: string | undefined): string {\n const base = suggestId(title ?? 'section')\n const used = idsInUse(doc)\n if (!used.has(base)) return base\n for (let n = 2; ; n++) if (!used.has(`${base}-${n}`)) return `${base}-${n}`\n}\n\n// Rename an id and update every reference in the document whose path starts with it.\nexport function renameId(doc: EditDoc, oldId: string, newId: string): number {\n let count = 0\n const fix = (text: string | undefined) => text?.replace(/<ref:([a-z0-9/-]+)>/g, (m, path: string) => {\n const parts = path.split('/')\n if (parts[0] !== oldId) return m\n count++\n return `<ref:${[newId, ...parts.slice(1)].join('/')}>`\n })\n doc.text = fix(doc.text)\n const walk = (list: EditSection[]) => list.forEach(s => {\n if (s.id === oldId) s.id = newId\n s.text = fix(s.text)\n walk(s.sections)\n })\n walk(doc.sections)\n return count\n}\n\nexport function includeCids(doc: EditDoc): string[] {\n const out: string[] = []\n const walk = (list: EditSection[]) => list.forEach(s => { if (s.source) out.push(s.source); else walk(s.sections) })\n walk(doc.sections)\n return out\n}\n\n// Rename a parameter key and update every placeholder for it in the document.\nexport function renameParam(doc: EditDoc, oldKey: string, newKey: string): number {\n let count = 0\n const fix = (text: string | undefined) => text?.replace(/<param:([a-z0-9-]+)>/g, (m, key: string) => {\n if (key !== oldKey) return m\n count++\n return `<param:${newKey}>`\n })\n doc.text = fix(doc.text)\n const walk = (list: EditSection[]) => list.forEach(s => { s.text = fix(s.text); walk(s.sections) })\n walk(doc.sections)\n for (const p of doc.parameters) if (p.key === oldKey) p.key = newKey\n return count\n}\n", "// The editor's document sources: an ordered, user-controlled list of servers (stroc serve, static\n// hosts, IPFS gateways) to fetch documents from by CID. Remembered per browser.\n\nimport type { CID } from 'multiformats/cid'\nimport { HttpResolver, parseCatalog, CATALOG_PATH, type Resolver, type Catalog } from '@stroc/compose'\n\nconst STORAGE_KEY = 'stroc.sources'\n\nexport function normalizeSource(url: string): string | undefined {\n try {\n const u = new URL(url.includes('://') ? url : `http://${url}`)\n return u.origin + u.pathname.replace(/\\/+$/, '')\n } catch {\n return undefined\n }\n}\n\n// The saved list, or the server hosting the editor if nothing is saved yet.\nexport function loadSources(): string[] {\n try {\n const saved = JSON.parse(localStorage.getItem(STORAGE_KEY) ?? 'null')\n if (Array.isArray(saved) && saved.every(s => typeof s === 'string')) return saved\n } catch { /* storage unavailable or corrupt: fall through */ }\n return [location.origin]\n}\n\nexport function saveSources(sources: string[]) {\n try { localStorage.setItem(STORAGE_KEY, JSON.stringify(sources)) } catch { /* not persisted */ }\n}\n\n// Tries each source in order and remembers which one supplied each CID. Verification happens in\n// compose, so a source that supplies wrong bytes only produces a reported failure.\nexport class SourcesResolver implements Resolver {\n readonly servedBy = new Map<string, string>()\n private readonly resolvers: [string, HttpResolver][]\n\n constructor(sources: string[]) {\n this.resolvers = sources.map(s => [s, new HttpResolver(s)])\n }\n\n async get(cid: CID): Promise<Uint8Array | undefined> {\n for (const [source, resolver] of this.resolvers) {\n const bytes = await resolver.get(cid)\n if (bytes) {\n this.servedBy.set(cid.toString(), source)\n return bytes\n }\n }\n return undefined\n }\n}\n\n// Each source's own catalog (what that server claims about what it serves), fetched once.\nconst catalogs = new Map<string, Promise<Catalog | undefined>>()\n\nexport function sourceCatalog(source: string): Promise<Catalog | undefined> {\n let pending = catalogs.get(source)\n if (!pending) {\n pending = fetch(source + CATALOG_PATH)\n .then(r => (r.ok ? r.json() : undefined))\n .then(json => (json ? parseCatalog(json).catalog : undefined))\n .catch(() => undefined)\n catalogs.set(source, pending)\n }\n return pending\n}\n\nexport function forgetCatalogs() {\n catalogs.clear()\n}\n", "// What the editor knows about an included document: whether it could be fetched and verified,\n// which source served it, what that source's catalog says about it, and whether its author claim\n// is confirmed by the author's own domain.\n\nimport { CID } from 'multiformats/cid'\nimport { compose, AuthorChecker, formatNumber, type Composed, type ComposedSection, type AuthorCheck, type CatalogEntry } from '@stroc/compose'\nimport { SourcesResolver, sourceCatalog } from './sources.js'\n\nexport interface IncludeInfo {\n cid: string\n state: 'loading' | 'ok' | 'missing' | 'invalid' | 'bad-cid'\n composed?: Composed\n source?: string // the source that served the root of the include\n sourceEntry?: { domain: string, entry: CatalogEntry } // that source's catalog entry for it\n author?: AuthorCheck // check against the author's own domain\n problems: string[] // missing nested documents, unresolved references\n}\n\nconst authorChecker = new AuthorChecker()\n\n// Load an included document and everything it includes, from the given sources.\nexport async function loadInclude(cidText: string, sources: string[]): Promise<IncludeInfo> {\n let cid: CID\n try { cid = CID.parse(cidText) } catch {\n return { cid: cidText, state: 'bad-cid', problems: ['not a CID'] }\n }\n const resolver = new SourcesResolver(sources)\n const composed = await compose(cid, resolver)\n const key = cid.toString()\n const source = resolver.servedBy.get(key)\n if (!composed.document) {\n const missing = composed.problems.some(p => p.code === 'missing-document')\n return { cid: key, state: missing ? 'missing' : 'invalid', problems: composed.problems.map(p => p.message) }\n }\n const info: IncludeInfo = { cid: key, state: 'ok', composed, source, problems: composed.problems.map(p => p.message) }\n const [catalog, author] = await Promise.all([\n source ? sourceCatalog(source) : Promise.resolve(undefined),\n authorChecker.check(composed.document, cid),\n ])\n const entry = catalog?.entries.find(e => e.cid === key)\n if (catalog && entry) info.sourceEntry = { domain: catalog.domain, entry }\n info.author = author\n return info\n}\n\n// Find a section by id within one document's scope of a composed tree: search the tree, but do\n// not look inside included documents (their ids belong to them); an include's own id is in scope.\nexport function findInScope(sections: ComposedSection[], id: string): ComposedSection | undefined {\n for (const s of sections) {\n if (s.id === id) return s\n if (!s.include) {\n const inner = findInScope(s.sections, id)\n if (inner) return inner\n }\n }\n return undefined\n}\n\n// The number of a reference path that steps into an included document, relative to that document.\nexport function numberWithin(composed: Composed, path: string[]): number[] | undefined {\n let scope = composed.sections\n let found: ComposedSection | undefined\n for (let i = 0; i < path.length; i++) {\n found = findInScope(scope, path[i])\n if (!found) return undefined\n if (i < path.length - 1) {\n if (!found.include) return undefined\n scope = found.sections\n }\n }\n return found?.number\n}\n\nexport function joinNumber(prefix: string, number: number[]): string {\n return number.length ? `${prefix}.${formatNumber(number)}` : prefix\n}\n", "// <stroc-editor>: the Stroc document editor (docs/Editor.md).\n//\n// One document at a time, edited in place in its rendered form. Everything is computed in the\n// browser: validation and CID as you type, included documents fetched from the user's sources and\n// verified, references shown as live section numbers.\n\nimport { LitElement, html, nothing, type TemplateResult } from 'lit'\nimport { CID } from 'multiformats/cid'\nimport { suggestId } from '@stroc/core'\nimport {\n fromPlain as coreFromPlain, toPlain as coreToPlain, validateDocument, documentCid, verifyDocument, canonicalMarkup,\n type ValidationResult,\n} from '@stroc/core'\nimport { lintYaml, stringifyDocument } from '@stroc/yaml'\nimport { MemoryStore, compose, firstOf, type ComposedInline, type ComposedSection, type CatalogEntry } from '@stroc/compose'\nimport { layout, toPdfDefinition } from '@stroc/render'\nimport { installStyles } from './styles.js'\nimport { StrocParagraph, type ParagraphChange, type ParagraphSplit, type ParagraphPaste } from './paragraph.js'\nimport * as M from './model.js'\nimport { loadInclude, numberWithin, joinNumber, type IncludeInfo } from './includes.js'\nimport { loadSources, saveSources, normalizeSource, SourcesResolver, sourceCatalog, forgetCatalogs } from './sources.js'\n\ntype Dialog = 'sources' | 'open' | 'include' | 'properties' | 'reference' | 'parameter' | undefined\ntype Format = 'yaml' | 'json'\n\ninterface FileHandle {\n name: string\n getFile(): Promise<File>\n createWritable?(): Promise<{ write(data: string): Promise<void>, close(): Promise<void> }>\n}\ninterface PickerWindow {\n showOpenFilePicker?(options: unknown): Promise<FileHandle[]>\n showSaveFilePicker?(options: unknown): Promise<FileHandle>\n}\n\nconst FILE_TYPES = [{ description: 'Stroc documents', accept: { 'application/yaml': ['.yaml', '.yml'], 'application/json': ['.json'] } }]\n\ninterface Validation {\n result?: ValidationResult\n bySection: Map<string, string[]> // problems shown at a section, by key\n document: string[] // problems shown at the top\n count: number\n}\n\ninterface CatalogRow { source: string, host: string, entry: CatalogEntry }\n\n// A place a reference can point to.\ninterface RefTarget {\n number: string\n label: string // title, or the start of the text\n path?: string[] // the reference path, if the target has an id (or will get one)\n section?: M.EditSection // a section of this document that needs an id first\n included?: boolean // inside an included document\n depth: number\n}\n\nexport class StrocEditor extends LitElement {\n static properties = {\n version: { state: true },\n dialog: { state: true },\n menu: { state: true },\n activeKey: { state: true },\n notice: { state: true },\n dragOverFile: { state: true },\n preview: { type: Boolean, reflect: true },\n }\n\n declare version: number\n declare dialog: Dialog\n declare menu: string | undefined\n declare activeKey: string | undefined\n declare notice: string | undefined\n declare dragOverFile: boolean\n declare preview: boolean // show the document as readers see it: no editing controls\n private checkSpelling = true\n\n doc: M.EditDoc = M.newDoc()\n private dirty = false\n private fileName?: string\n private fileHandle?: FileHandle\n private fileFormat: Format = 'yaml'\n private openedFrom?: string\n private cid?: string\n private validation: Validation = { bySection: new Map(), document: [], count: 0 }\n private sources = loadSources()\n private includes = new Map<string, IncludeInfo>()\n private catalogRows?: CatalogRow[]\n private pendingFocus?: { key: string, where: number | 'start' | 'end' }\n private validateTimer?: ReturnType<typeof setTimeout>\n private noticeTimer?: ReturnType<typeof setTimeout>\n private activePara?: StrocParagraph\n private refFilter = ''\n private refPara?: StrocParagraph\n // Undo history: snapshots of the document. `at` is the current one. Typing in one paragraph or\n // title within a short time is one step.\n private history: { doc: M.EditDoc, group?: string, time: number }[] = []\n private historyAt = -1\n private dragKey?: string\n private dropAt?: { key: string, where: M.Placement }\n\n constructor() {\n super()\n this.version = 0\n this.dragOverFile = false\n this.preview = false\n }\n\n // -------------------------------------------------------------------------------------------\n // Lifecycle\n\n // Render into the page's DOM, not a shadow root: browsers (Safari in particular) do not expose\n // the text selection inside shadow roots consistently, and in-place editing depends on it.\n createRenderRoot() { return this }\n\n connectedCallback() {\n super.connectedCallback()\n installStyles(this.getRootNode() as Document | ShadowRoot)\n window.addEventListener('beforeunload', this.onBeforeUnload)\n window.addEventListener('keydown', this.onShortcut, true) // capture: before the browser's own undo\n document.addEventListener('click', this.onDocumentClick)\n const cid = new URLSearchParams(location.search).get('cid')\n if (cid) void this.openByCid(cid)\n else { this.record(); this.validateSoon(0) }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener('beforeunload', this.onBeforeUnload)\n window.removeEventListener('keydown', this.onShortcut, true)\n document.removeEventListener('click', this.onDocumentClick)\n }\n\n updated() {\n this.loadIncludes()\n if (this.pendingFocus) {\n const { key, where } = this.pendingFocus\n const para = this.renderRoot.querySelector<StrocParagraph>(`stroc-paragraph[data-key=\"${key}\"]`)\n if (para) {\n this.pendingFocus = undefined\n // As soon as the paragraph has rendered (a microtask, before the next key event), so text\n // typed right after Enter lands in the new paragraph.\n void para.updateComplete.then(() => para.focusAt(where))\n }\n }\n }\n\n private onBeforeUnload = (e: BeforeUnloadEvent) => {\n if (this.dirty) { e.preventDefault(); e.returnValue = '' }\n }\n\n private onShortcut = (e: KeyboardEvent) => {\n // Structure: Tab / Shift+Tab indent and outdent; Alt+Shift+\u2191/\u2193 move the current section.\n const key = this.activeKey\n const editing = e.composedPath().some(n => (n as HTMLElement).classList?.contains('para') || (n as HTMLElement).classList?.contains('title-input'))\n if (key && editing && e.key === 'Tab' && !e.metaKey && !e.ctrlKey && !e.altKey) {\n e.preventDefault()\n this.structure(e.shiftKey ? 'outdent' : 'indent', key)\n return\n }\n if (key && editing && e.altKey && e.shiftKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {\n e.preventDefault()\n this.structure(e.key === 'ArrowUp' ? 'up' : 'down', key)\n return\n }\n if (!(e.metaKey || e.ctrlKey)) return\n const k = e.key.toLowerCase()\n if (k === 'z' && !this.dialog) { e.preventDefault(); if (e.shiftKey) this.redo(); else this.undo(); return }\n if (k === 'y' && !this.dialog) { e.preventDefault(); this.redo(); return }\n if (k === 's') { e.preventDefault(); void (e.shiftKey ? this.saveAs() : this.save()) }\n else if (k === 'k') { e.preventDefault(); this.showReferences() }\n else if (k === 'e') { e.preventDefault(); this.preview = !this.preview }\n else if (k === 'o') { e.preventDefault(); void this.openFile() }\n }\n\n private onDocumentClick = (e: MouseEvent) => {\n if (this.menu && !e.composedPath().some(n => (n as HTMLElement).classList?.contains('menu'))) this.menu = undefined\n }\n\n private say(message: string) {\n this.notice = message\n clearTimeout(this.noticeTimer)\n this.noticeTimer = setTimeout(() => { this.notice = undefined }, 6000)\n }\n\n // -------------------------------------------------------------------------------------------\n // Changes and validation\n\n private changed(markDirty = true, group?: string) {\n if (markDirty) this.dirty = true\n this.record(group)\n this.version++\n this.validateSoon()\n }\n\n private record(group?: string) {\n const now = Date.now()\n const top = this.history[this.historyAt]\n const snapshot = { doc: structuredClone(this.doc), group, time: now }\n this.history.splice(this.historyAt + 1) // a new change discards anything redoable\n if (group && top?.group === group && now - top.time < 1500 && this.historyAt > 0) this.history[this.historyAt] = snapshot\n else { this.history.push(snapshot); this.historyAt = this.history.length - 1 }\n if (this.history.length > 300) { this.history.shift(); this.historyAt-- }\n }\n\n private undo() { this.stepHistory(-1) }\n private redo() { this.stepHistory(1) }\n\n private stepHistory(delta: number) {\n this.activePara?.flush() // keep what was just typed as its own step\n const target = this.historyAt + delta\n if (target < 0 || target >= this.history.length) { this.say(delta < 0 ? 'Nothing to undo' : 'Nothing to redo'); return }\n this.historyAt = target\n this.doc = structuredClone(this.history[target].doc)\n this.dirty = true\n const key = this.activePara?.key\n if (key && (key === 'doc' || M.locate(this.doc, key))) this.pendingFocus = { key, where: 'end' }\n this.version++\n this.validateSoon()\n }\n\n private validateSoon(delay = 200) {\n clearTimeout(this.validateTimer)\n this.validateTimer = setTimeout(() => { void this.validate() }, delay)\n }\n\n private async validate() {\n const trace = new Map<string, string>()\n const plain = M.toPlain(this.doc, trace)\n const value = coreFromPlain(plain).value\n const result = validateDocument(value)\n const bySection = new Map<string, string[]>()\n const document: string[] = []\n const add = (path: (string | number)[], message: string) => {\n let key: string | undefined\n for (let n = path.length; n > 0 && !key; n--) key = trace.get(path.slice(0, n).join('.'))\n if (key) bySection.set(key, [...(bySection.get(key) ?? []), message])\n else document.push(`${path.join('.') || 'document'}: ${message}`)\n }\n for (const p of result.problems) add(p.path, p.message)\n // References into included documents are checked against the composed includes.\n for (const ext of result.external) {\n const include = this.includeBySectionId(ext.path[0])\n const info = include?.source ? this.includes.get(include.source) : undefined\n if (info?.state === 'ok' && !numberWithin(info.composed!, ext.path.slice(1))) {\n add(ext.at, `<ref:${ext.path.join('/')}> does not resolve in the included document`)\n }\n }\n const count = document.length + [...bySection.values()].reduce((n, l) => n + l.length, 0)\n this.validation = { result, bySection, document, count }\n this.cid = result.valid && !document.length && !bySection.size ? (await documentCid(value)).cid?.toString() : undefined\n this.requestUpdate()\n }\n\n private includeBySectionId(id: string): M.EditSection | undefined {\n const walk = (list: M.EditSection[]): M.EditSection | undefined => {\n for (const s of list) {\n if (s.id === id) return s\n if (s.source === undefined) { const inner = walk(s.sections); if (inner) return inner }\n }\n return undefined\n }\n return walk(this.doc.sections)\n }\n\n // -------------------------------------------------------------------------------------------\n // Included documents and references\n\n private loadIncludes() {\n for (const cid of M.includeCids(this.doc)) {\n if (this.includes.has(cid)) continue\n this.includes.set(cid, { cid, state: 'loading', problems: [] })\n void loadInclude(cid, this.sources).then(info => {\n this.includes.set(cid, info)\n this.version++\n this.validateSoon(0)\n })\n }\n }\n\n private numbers(): Map<string, { number: string, section: M.EditSection }> {\n const map = new Map<string, { number: string, section: M.EditSection }>()\n for (const { section, number } of M.allSections(this.doc)) if (section.id) map.set(section.id, { number, section })\n return map\n }\n\n // The live label of a reference, e.g. \"Section 3.1\" (with a no-break space), or undefined if it does not resolve.\n private refLabel = (path: string[]): string | undefined => {\n const first = this.numbers().get(path[0])\n if (!first) return undefined\n if (path.length === 1) return `Section\\u00A0${first.number}`\n const info = first.section.source ? this.includes.get(first.section.source) : undefined\n const within = info?.composed ? numberWithin(info.composed, path.slice(1)) : undefined\n return within ? `Section\\u00A0${joinNumber(first.number, within)}` : undefined\n }\n\n // The label a placeholder shows, or undefined if the parameter is not declared.\n private paramLabel = (key: string): string | undefined => {\n const p = this.doc.parameters.find(x => x.key === key)\n return p ? (p.label || p.key) : undefined\n }\n\n // -------------------------------------------------------------------------------------------\n // Paragraph events\n\n private onParagraphChange(e: CustomEvent<ParagraphChange>) {\n const { key, value } = e.detail\n if (key === 'doc') this.doc.text = value || undefined\n else { const at = M.locate(this.doc, key); if (!at) return; at.section.text = value || undefined }\n this.changed(true, `text:${key}`)\n }\n\n private onParagraphSplit(e: CustomEvent<ParagraphSplit>) {\n const { key, before, after } = e.detail\n if (key === 'doc') {\n this.doc.text = before || undefined\n const next = M.newSection({ text: after || undefined })\n this.doc.sections.unshift(next)\n this.pendingFocus = { key: next.key, where: 'start' }\n } else {\n const next = M.splitParagraph(this.doc, key, before, after)\n if (next) this.pendingFocus = { key: next.key, where: 'start' }\n }\n this.changed()\n }\n\n // Several pasted paragraphs: the first joins the text before the caret; the others become new\n // paragraph sections after this one, the last joined by the text after the caret.\n private onParagraphPaste(e: CustomEvent<ParagraphPaste>) {\n const { key, before, blocks, after } = e.detail\n const join = (a: string, b: string) => canonicalMarkup(a + b) || undefined\n const first = join(before, blocks[0])\n const lastText = blocks[blocks.length - 1]\n const rest = blocks.slice(1).map((b, i) => M.newSection({ text: i === blocks.length - 2 ? join(b, after) : b }))\n if (key === 'doc') {\n this.doc.text = first\n this.doc.sections.unshift(...rest)\n } else {\n const at = M.locate(this.doc, key)\n if (!at) return\n at.section.text = first\n at.parent.splice(at.index + 1, 0, ...rest)\n }\n const last = rest[rest.length - 1]\n this.pendingFocus = { key: last.key, where: M.plainLength(lastText) }\n this.changed()\n }\n\n private onParagraphMerge(e: CustomEvent<{ key: string }>) {\n // The first section joins back into the preamble (the reverse of Enter at the preamble's end).\n const first = this.doc.sections[0]\n if (first?.key === e.detail.key && first.source === undefined && first.title === undefined && !first.sections.length) {\n const left = this.doc.text ?? ''\n const at = M.plainLength(left)\n this.doc.text = canonicalMarkup(left && first.text ? `${left} ${first.text}` : left + (first.text ?? '')) || undefined\n this.doc.sections.shift()\n this.pendingFocus = { key: 'doc', where: at }\n this.changed()\n return\n }\n const merged = M.mergeWithPrevious(this.doc, e.detail.key)\n if (!merged) return\n this.pendingFocus = { key: merged.into.key, where: merged.at }\n this.changed()\n }\n\n private onFocusIn(e: FocusEvent) {\n const para = e.composedPath().find(n => n instanceof StrocParagraph) as StrocParagraph | undefined\n if (para) this.activePara = para\n const sec = e.composedPath().find(n => (n as HTMLElement).dataset?.sec) as HTMLElement | undefined\n this.activeKey = sec?.dataset.sec\n }\n\n private format(command: 'bold' | 'italic' | 'underline') {\n this.activePara?.format(command)\n }\n\n // -------------------------------------------------------------------------------------------\n // Opening and saving\n\n private confirmDiscard(): boolean {\n return !this.dirty || confirm('You have unsaved changes. Discard them?')\n }\n\n private load(doc: M.EditDoc, from: { name?: string, handle?: FileHandle, format?: Format, cid?: string }) {\n this.doc = doc\n this.fileName = from.name\n this.fileHandle = from.handle\n this.fileFormat = from.format ?? 'yaml'\n this.openedFrom = from.cid\n this.dirty = false\n this.activeKey = undefined\n const url = new URL(location.href)\n if (from.cid) url.searchParams.set('cid', from.cid)\n else url.searchParams.delete('cid')\n history.replaceState(null, '', url)\n this.history = []\n this.historyAt = -1\n this.changed(false)\n }\n\n private newDocument() {\n if (!this.confirmDiscard()) return\n this.load(M.newDoc(), {})\n }\n\n async openFile() {\n if (!this.confirmDiscard()) return\n const w = window as unknown as PickerWindow\n if (w.showOpenFilePicker) {\n try {\n const [handle] = await w.showOpenFilePicker({ types: FILE_TYPES })\n await this.loadFile(await handle.getFile(), handle)\n } catch (err) { if ((err as Error).name !== 'AbortError') this.say(`Could not open: ${(err as Error).message}`) }\n return\n }\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.yaml,.yml,.json'\n input.onchange = () => { const f = input.files?.[0]; if (f) void this.loadFile(f) }\n input.click()\n }\n\n private async loadFile(file: File, handle?: FileHandle) {\n const parsed = lintYaml(await file.text())\n if (parsed.value === undefined) {\n this.say(`${file.name} is not readable YAML or JSON: ${parsed.problems[0]?.message ?? ''}`)\n return\n }\n const plain = coreToPlain(parsed.value) as Record<string, unknown>\n if (!plain || typeof plain !== 'object' || !('title' in plain)) { this.say(`${file.name} is not a Stroc document`); return }\n this.load(M.fromPlain(plain), { name: file.name, handle, format: /\\.json$/i.test(file.name) ? 'json' : 'yaml' })\n }\n\n private serialize(format: Format): string {\n const plain = M.toPlain(this.doc)\n return format === 'json' ? JSON.stringify(plain, null, 2) + '\\n' : stringifyDocument(plain)\n }\n\n private suggestedName(format: Format) {\n const base = (this.doc.title || 'document').trim().replace(/[^\\w.-]+/g, '_')\n return `${base}.${format === 'json' ? 'json' : 'yaml'}`\n }\n\n async save() {\n if (this.fileHandle?.createWritable) {\n try {\n const out = await this.fileHandle.createWritable()\n await out.write(this.serialize(this.fileFormat))\n await out.close()\n this.saved(this.fileHandle.name)\n return\n } catch (err) { this.say(`Could not save to ${this.fileHandle.name}: ${(err as Error).message}`) }\n }\n await this.saveAs()\n }\n\n async saveAs(format: Format = this.fileFormat) {\n const w = window as unknown as PickerWindow\n if (w.showSaveFilePicker) {\n try {\n const handle = await w.showSaveFilePicker({ suggestedName: this.suggestedName(format), types: FILE_TYPES })\n const out = await handle.createWritable!()\n await out.write(this.serialize(/\\.json$/i.test(handle.name) ? 'json' : 'yaml'))\n await out.close()\n this.fileHandle = handle\n this.fileName = handle.name\n this.fileFormat = /\\.json$/i.test(handle.name) ? 'json' : 'yaml'\n this.saved(handle.name)\n } catch (err) { if ((err as Error).name !== 'AbortError') this.say(`Could not save: ${(err as Error).message}`) }\n return\n }\n const name = this.suggestedName(format)\n const url = URL.createObjectURL(new Blob([this.serialize(format)], { type: format === 'json' ? 'application/json' : 'application/yaml' }))\n const a = document.createElement('a')\n a.href = url\n a.download = name\n a.click()\n URL.revokeObjectURL(url)\n this.fileName = name\n this.saved(name)\n }\n\n private saved(name: string) {\n this.dirty = false\n const n = this.validation.count\n this.say(n ? `Saved ${name}, with ${n} problem${n === 1 ? '' : 's'}: not yet a valid document` : `Saved ${name}`)\n this.version++\n }\n\n // Fetch a document by CID from the sources, verify it, and open it.\n async openByCid(text: string) {\n if (!this.confirmDiscard()) return\n let cid: CID\n try { cid = CID.parse(text.trim()) } catch { this.say(`Not a CID: ${text}`); return }\n const bytes = await new SourcesResolver(this.sources).get(cid)\n if (!bytes) { this.say(`${cid} was not found in any source. Add one under File \u2192 Sources.`); return }\n const v = await verifyDocument(bytes, cid)\n if (!v.ok || !v.document) { this.say(`${cid} failed verification: ${v.problems[0]?.message ?? ''}`); return }\n this.dialog = undefined\n this.load(M.fromPlain(coreToPlain(v.document) as Record<string, unknown>), { cid: cid.toString() })\n }\n\n // Export the document as PDF: composed with its includes from the sources, laid out as a template\n // (deal-specific values blank), with a QR code for fetching it. pdfmake and the fonts are loaded\n // from vendor/ beside the editor bundle on first use; pdfmake may fetch only those fonts.\n async exportPdf(pageSize: 'LETTER' | 'A4') {\n const plain = M.toPlain(this.doc)\n const result = await documentCid(coreFromPlain(plain).value)\n if (!result.cid || !result.bytes) {\n this.say(`Fix the ${this.validation.count || 'remaining'} problem${this.validation.count === 1 ? '' : 's'} before exporting: a PDF shows the document's CID`)\n return\n }\n this.say('Preparing PDF\u2026')\n const store = new MemoryStore()\n await store.put(result.bytes)\n const composed = await compose(result.cid, firstOf(store, new SourcesResolver(this.sources)))\n const laid = layout(composed, { options: { template: true, draft: composed.problems.length > 0, cidQr: true } })\n if (!laid.layout) { this.say(`Cannot lay out: ${laid.problems[0]?.message ?? ''}`); return }\n try {\n const pdfMake = await loadPdfMake()\n const def = toPdfDefinition(laid.layout, { pageSize, font: 'NotoSerif', monoFont: 'NotoSansMono', fontSize: 9.5, lineHeight: 1.0 })\n pdfMake.createPdf(def).download(`${(this.doc.title || 'document').trim().replace(/[^\\w.-]+/g, '_')}.pdf`)\n this.say(composed.problems.length ? 'PDF exported as a draft: some included documents were not available' : 'PDF exported')\n } catch (err) {\n this.say(`PDF export failed: ${(err as Error).message}`)\n }\n }\n\n private onDrop = async (e: DragEvent) => {\n if (!e.dataTransfer?.files.length) return\n e.preventDefault()\n this.dragOverFile = false\n if (this.confirmDiscard()) await this.loadFile(e.dataTransfer.files[0])\n }\n\n // -------------------------------------------------------------------------------------------\n // Section operations\n\n private run(op: () => boolean | void, focusKey?: string) {\n if (op() === false) return\n if (focusKey) this.pendingFocus = { key: focusKey, where: 'end' }\n this.changed()\n }\n\n private addSection(where: 'end' | 'after' | 'child', init: Partial<M.EditSection> = {}) {\n const s = M.newSection(init)\n const at = this.activeKey ? M.locate(this.doc, this.activeKey) : undefined\n this.run(() => {\n if (where === 'child' && at && at.section.source === undefined) at.section.sections.push(s)\n else if (where === 'after' && at) M.insertAfter(this.doc, at.section.key, s)\n else this.doc.sections.push(s)\n }, s.key)\n this.activeKey = s.key\n }\n\n private toggleTitle(s: M.EditSection) {\n this.run(() => { s.title = s.title === undefined ? '' : undefined })\n }\n\n private setId(s: M.EditSection, value: string) {\n const id = value.trim() || undefined\n if (s.id && id && s.id !== id) {\n const n = M.renameId(this.doc, s.id, id)\n if (n) this.say(`Updated ${n} reference${n === 1 ? '' : 's'} to the new id`)\n } else s.id = id\n this.changed()\n }\n\n // Move the section and keep editing where the caret was.\n private structure(op: 'up' | 'down' | 'indent' | 'outdent', key: string) {\n const ops = { up: M.moveUp, down: M.moveDown, indent: M.indent, outdent: M.outdent }\n if (!ops[op](this.doc, key)) {\n if (op === 'indent') this.say('Cannot indent: there is no written-out section before this one at its level')\n return\n }\n const focused = this.activePara?.key === key\n this.changed()\n if (focused) this.pendingFocus = { key, where: 'end' }\n }\n\n // Replace an include with a written-out copy of the included document. It is then ordinary text\n // of this document: no longer linked by CID, and free to edit.\n private inlineInclude(s: M.EditSection) {\n const info = s.source ? this.includes.get(s.source) : undefined\n const doc = info?.composed?.document\n if (!doc) { this.say('The included document is not available to copy'); return }\n if (!confirm('Replace the include with a written-out copy of its text? The copy is no longer linked to the original document.')) return\n const copy = M.fromPlain(coreToPlain(doc) as Record<string, unknown>)\n this.run(() => M.replaceInclude(this.doc, s.key, { title: copy.title, text: copy.text, sections: copy.sections }))\n if (doc.parameters?.length) this.say('Note: the included document declared parameters; add them under Properties if this document needs them')\n }\n\n // Drag and drop: drop on the upper third of a section to place before it, the lower third to\n // place after it, the middle to make it the last subsection. Hold Shift (or Alt) to copy.\n private onDragStart(e: DragEvent, key: string) {\n this.dragKey = key\n e.dataTransfer!.effectAllowed = 'copyMove'\n e.dataTransfer!.setData('application/x-stroc-section', key)\n }\n\n private onDragOver(e: DragEvent, target: M.EditSection) {\n if (!this.dragKey || !e.dataTransfer?.types.includes('application/x-stroc-section')) return\n e.preventDefault()\n e.stopPropagation()\n const row = (e.currentTarget as HTMLElement).querySelector('.row') as HTMLElement\n const box = row.getBoundingClientRect()\n const y = (e.clientY - box.top) / box.height\n const where: M.Placement = target.source !== undefined ? (y < 0.5 ? 'before' : 'after') : y < 0.33 ? 'before' : y > 0.67 ? 'after' : 'into'\n e.dataTransfer.dropEffect = e.shiftKey || e.altKey ? 'copy' : 'move'\n if (this.dropAt?.key !== target.key || this.dropAt.where !== where) {\n this.dropAt = { key: target.key, where }\n this.version++\n }\n }\n\n private onDropSection(e: DragEvent) {\n if (!this.dragKey || !this.dropAt) return\n e.preventDefault()\n e.stopPropagation()\n const { key, where } = this.dropAt\n const copy = e.shiftKey || e.altKey\n const moved = M.place(this.doc, this.dragKey, key, where, copy)\n this.dragKey = undefined\n this.dropAt = undefined\n if (moved) this.changed()\n else { this.version++; this.say('Cannot drop a section inside itself') }\n }\n\n private onDragEnd() {\n this.dragKey = undefined\n if (this.dropAt) { this.dropAt = undefined; this.version++ }\n }\n\n // -------------------------------------------------------------------------------------------\n // References\n\n private showReferences() {\n if (!this.activePara) { this.say('Click in a paragraph first, where the reference should go'); return }\n this.activePara.rememberSelection()\n this.refPara = this.activePara\n this.refFilter = ''\n this.dialog = 'reference'\n }\n\n private showParameters() {\n if (!this.activePara) { this.say('Click in a paragraph first, where the value should appear'); return }\n this.activePara.rememberSelection()\n this.refPara = this.activePara\n this.dialog = 'parameter'\n }\n\n private pickParameter(key: string) {\n this.dialog = undefined\n const para = this.refPara\n this.refPara = undefined\n requestAnimationFrame(() => para?.insertParam(key))\n }\n\n // Everything a reference can point to: this document's sections, and the sections of included\n // documents that have ids (their ids cannot be added from here).\n private referenceTargets(): RefTarget[] {\n const out: RefTarget[] = []\n const snippet = (t?: string) => (t ? t.replace(/<[^>]*>|\\\\/g, '').slice(0, 70) : '')\n for (const { section, number, depth } of M.allSections(this.doc)) {\n if (section.source !== undefined) {\n const info = this.includes.get(section.source)\n out.push({ number, label: info?.composed?.title ?? 'Included document', path: section.id ? [section.id] : undefined, section, depth })\n if (section.id && info?.composed) this.composedTargets(info.composed.sections, [section.id], number, depth + 1, out)\n } else {\n out.push({ number, label: section.title || snippet(section.text) || '(empty)', path: section.id ? [section.id] : undefined, section, depth })\n }\n }\n return out\n }\n\n private composedTargets(list: ComposedSection[], scope: string[], prefix: string, depth: number, out: RefTarget[]) {\n for (const c of list) {\n const number = joinNumber(prefix, c.number)\n if (c.id) {\n out.push({ number, label: c.title ?? (c.text ? 'Paragraph' : ''), path: [...scope, c.id], included: true, depth })\n if (c.include) { this.composedTargets(c.sections, [...scope, c.id], prefix, depth + 1, out); continue }\n }\n if (!c.include) this.composedTargets(c.sections, scope, prefix, depth + 1, out)\n }\n }\n\n private pickReference(t: RefTarget) {\n let path = t.path\n if (!path && t.section) {\n t.section.id = M.uniqueId(this.doc, t.section.title || t.section.text?.replace(/<[^>]*>/g, '').slice(0, 40))\n path = [t.section.id]\n this.changed()\n }\n if (!path) return\n this.dialog = undefined\n const para = this.refPara\n this.refPara = undefined\n requestAnimationFrame(() => para?.insertRef(path!))\n }\n\n // -------------------------------------------------------------------------------------------\n // Rendering\n\n render() {\n return html`\n ${this.renderMenubar()}\n ${this.preview ? nothing : this.renderFormatbar()}\n <div class=\"document-area\"\n @focusin=${this.onFocusIn}\n @paragraph-change=${this.onParagraphChange}\n @paragraph-split=${this.onParagraphSplit}\n @paragraph-merge=${this.onParagraphMerge}\n @paragraph-paste=${this.onParagraphPaste}\n @dragover=${(e: DragEvent) => { if (e.dataTransfer?.types.includes('Files')) { e.preventDefault(); this.dragOverFile = true } }}\n @dragleave=${() => { this.dragOverFile = false }}\n @drop=${this.onDrop}>\n <div class=\"doc\">${this.renderHeader()}${this.renderSections(this.doc.sections, '')}\n ${this.preview ? nothing : html`<button class=\"add-section\" @click=${() => this.addSection('end')}>+ Add section</button>`}\n </div>\n </div>\n ${this.dragOverFile ? html`<div class=\"drop-overlay\">Drop a Stroc document to open it</div>` : nothing}\n ${this.renderDialog()}\n `\n }\n\n // Every command carries a stable data-test id, so tests do not depend on wording or styling.\n private menuItem(test: string, label: string, action: () => void, shortcut = '', disabled = false) {\n return html`<button class=\"menu-item\" data-test=${`cmd-${test}`} ?disabled=${disabled} @click=${() => { this.menu = undefined; action() }}>\n <span>${label}</span>${shortcut ? html`<span class=\"shortcut\">${shortcut}</span>` : nothing}</button>`\n }\n\n private renderMenu(id: string, label: string, items: TemplateResult) {\n return html`<div class=\"menu ${this.menu === id ? 'open' : ''}\">\n <button class=\"menu-label\" data-test=${`menu-${id}`} @click=${() => { this.menu = this.menu === id ? undefined : id }}>${label}</button>\n <div class=\"menu-dropdown\">${items}</div></div>`\n }\n\n private renderMenubar() {\n const v = this.validation\n const where = this.fileName ?? (this.openedFrom ? `CID ${this.openedFrom.slice(0, 14)}\u2026` : 'not saved')\n return html`\n <div class=\"menubar\">\n ${this.renderMenu('file', 'File', html`\n ${this.menuItem('new', 'New', () => this.newDocument())}\n ${this.menuItem('open-file', 'Open File\u2026', () => void this.openFile(), '\u2318O')}\n ${this.menuItem('open-sources', 'Open from Sources\u2026', () => this.showOpen('open'))}\n <div class=\"menu-sep\"></div>\n ${this.menuItem('save', 'Save', () => void this.save(), '\u2318S')}\n ${this.menuItem('save-as', 'Save As\u2026', () => void this.saveAs(), '\u21E7\u2318S')}\n ${this.menuItem('save-json', 'Save As JSON\u2026', () => void this.saveAs('json'))}\n <div class=\"menu-sep\"></div>\n ${this.menuItem('pdf-letter', 'Export PDF (Letter)\u2026', () => void this.exportPdf('LETTER'))}\n ${this.menuItem('pdf-a4', 'Export PDF (A4)\u2026', () => void this.exportPdf('A4'))}\n <div class=\"menu-sep\"></div>\n ${this.menuItem('sources', 'Sources\u2026', () => { this.dialog = 'sources' })}\n `)}\n ${this.renderMenu('edit', 'Edit', html`\n ${this.menuItem('undo', 'Undo', () => this.undo(), '\u2318Z', this.historyAt <= 0)}\n ${this.menuItem('redo', 'Redo', () => this.redo(), '\u21E7\u2318Z', this.historyAt >= this.history.length - 1)}\n <div class=\"menu-sep\"></div>\n ${this.menuItem('properties', 'Document Properties\u2026', () => { this.dialog = 'properties' })}\n `)}\n ${this.renderMenu('view', 'View', html`\n ${this.menuItem('preview', this.preview ? '\u2713 Preview (no editing)' : 'Preview (no editing)', () => { this.preview = !this.preview }, '\u2318E')}\n ${this.menuItem('spellcheck', this.checkSpelling ? '\u2713 Spell Check' : 'Spell Check', () => { this.checkSpelling = !this.checkSpelling; this.version++ })}\n `)}\n ${this.renderMenu('insert', 'Insert', html`\n ${this.menuItem('section-end', 'Section at End', () => this.addSection('end'))}\n ${this.menuItem('section-after', 'Section After Current', () => this.addSection('after'), '', !this.activeKey)}\n ${this.menuItem('subsection', 'Subsection', () => this.addSection('child'), '', !this.activeKey)}\n ${this.menuItem('include', 'Included Document\u2026', () => this.showOpen('include'))}\n ${this.menuItem('reference', 'Reference\u2026', () => this.showReferences(), '\u2318K')}\n ${this.menuItem('parameter', 'Parameter\u2026', () => this.showParameters())}\n `)}\n <div class=\"status\" data-test=\"status\">\n ${this.notice ? html`<span>${this.notice}</span>` : nothing}\n <span class=\"file\" title=${where}>${where}</span>\n ${this.dirty ? html`<span class=\"dirty\" title=\"Unsaved changes\">\u25CF</span>` : nothing}\n ${v.count\n ? html`<span class=\"badge bad\" data-test=\"problem-count\" title=\"Problems are shown at the sections they concern\">${v.count} problem${v.count === 1 ? '' : 's'}</span>`\n : html`<span class=\"badge good\" data-test=\"valid\">Valid</span>`}\n ${this.cid ? html`<span class=\"cid\" data-test=\"cid\" title=${this.cid}>${this.cid}</span>\n <button class=\"badge\" title=\"Copy the CID\" @click=${() => { void navigator.clipboard?.writeText(this.cid!); this.say('CID copied') }}>Copy</button>` : nothing}\n </div>\n </div>`\n }\n\n private renderFormatbar() {\n const keep = (e: Event) => e.preventDefault() // keep the selection in the paragraph\n return html`\n <div class=\"formatbar\" data-test=\"formatbar\">\n <button title=\"Bold (\u2318B)\" @mousedown=${keep} @click=${() => this.format('bold')}><b>B</b></button>\n <button title=\"Italic (\u2318I)\" @mousedown=${keep} @click=${() => this.format('italic')}><i>I</i></button>\n <button title=\"Underline (\u2318U)\" @mousedown=${keep} @click=${() => this.format('underline')}><u>U</u></button>\n <span class=\"sep\"></span>\n <button title=\"Insert a reference to a section (\u2318K)\" @mousedown=${keep} @click=${() => this.showReferences()}>Reference\u2026</button>\n <button data-test=\"insert-parameter\" title=\"Insert a placeholder for a parameter's value\" @mousedown=${keep} @click=${() => this.showParameters()}>Parameter\u2026</button>\n <span class=\"hint\">Paste keeps bold, italic, underline; several paragraphs become sections \u00B7 Enter: new paragraph \u00B7 Backspace at start: join \u00B7 Tab / Shift+Tab: indent / outdent \u00B7 Alt+Shift+\u2191\u2193: move \u00B7 drag \u22EE\u22EE to move (Shift to copy)</span>\n </div>`\n }\n\n private renderHeader() {\n const d = this.doc\n return html`\n <input class=\"doc-title\" data-test=\"doc-title\" .value=${d.title} placeholder=\"Document title\" ?readonly=${this.preview}\n @input=${(e: InputEvent) => { d.title = (e.target as HTMLInputElement).value; this.changed(true, 'title:doc') }} />\n <div class=\"doc-meta\">\n <span><b>Author</b> ${d.author ?? html`<span class=\"muted\">none</span>`}</span>\n <span><b>Language</b> ${d.language}</span>\n ${d.published ? html`<span><b>Published</b> ${d.published}</span>` : nothing}\n ${d.parameters.length ? html`<span><b>Parameters</b> ${d.parameters.length}</span>` : nothing}\n ${d.replaces.length ? html`<span><b>Replaces</b> ${d.replaces.length}</span>` : nothing}\n <button @click=${() => { this.dialog = 'properties' }}>Properties\u2026</button>\n </div>\n ${this.validation.document.length ? html`<ul class=\"problems\">${this.validation.document.map(p => html`<li>${p}</li>`)}</ul>` : nothing}\n <div class=\"preamble\">${this.renderParagraph('doc', d.text, 'Preamble (optional): text before the first section')}</div>`\n }\n\n private renderParagraph(key: string, value: string | undefined, placeholder: string) {\n return html`<stroc-paragraph data-key=${key} .key=${key} .value=${value ?? ''} .placeholder=${this.preview ? '' : placeholder}\n .editable=${!this.preview} spellcheck=${this.checkSpelling ? 'true' : 'false'}\n .labelRef=${this.refLabel} .labelParam=${this.paramLabel} .refresh=${this.version}></stroc-paragraph>`\n }\n\n private renderSections(list: M.EditSection[], prefix: string): unknown {\n return list.map((s, i) => this.renderSection(s, prefix ? `${prefix}.${i + 1}` : `${i + 1}`))\n }\n\n private renderSection(s: M.EditSection, number: string): TemplateResult {\n const active = this.activeKey === s.key\n const problems = this.validation.bySection.get(s.key) ?? []\n if (s.source !== undefined) return this.renderInclude(s, number, active, problems)\n return html`\n <div class=\"sec ${active ? 'active' : ''} ${this.dropClass(s)}\" data-sec=${s.key}\n @dragover=${(e: DragEvent) => this.onDragOver(e, s)} @drop=${(e: DragEvent) => this.onDropSection(e)}>\n <div class=\"row\" data-test=\"section-row\">\n ${this.grip(s)}\n <span class=\"num\">${number}.</span>\n <div>\n ${s.title !== undefined ? html`<input class=\"title-input\" .value=${s.title} placeholder=\"Section title\" ?readonly=${this.preview}\n @input=${(e: InputEvent) => { s.title = (e.target as HTMLInputElement).value; this.changed(true, `title:${s.key}`) }} />` : nothing}\n ${this.renderParagraph(s.key, s.text, s.sections.length || s.title ? 'Text (optional)' : 'Type a paragraph')}\n ${problems.map(p => html`<div class=\"sec-problems\">${p}</div>`)}\n ${active && !this.preview ? this.renderTools(s) : nothing}\n </div>\n </div>\n ${s.sections.length ? html`<div class=\"children\">${this.renderSections(s.sections, number)}</div>` : nothing}\n </div>`\n }\n\n private grip(s: M.EditSection) {\n return html`<span class=\"grip\" data-test=\"grip\" draggable=\"true\" title=\"Drag to move (Shift or Alt to copy)\"\n @dragstart=${(e: DragEvent) => this.onDragStart(e, s.key)} @dragend=${() => this.onDragEnd()}>\u22EE\u22EE</span>`\n }\n\n private dropClass(s: M.EditSection) {\n return this.dropAt?.key === s.key ? `drop-${this.dropAt.where}` : ''\n }\n\n private renderTools(s: M.EditSection) {\n const at = M.locate(this.doc, s.key)\n return html`\n <div class=\"tools\">\n <button title=\"Move up (Alt+Shift+\u2191)\" ?disabled=${!at || at.index === 0} @click=${() => this.structure('up', s.key)}>\u2191</button>\n <button title=\"Move down (Alt+Shift+\u2193)\" ?disabled=${!at || at.index >= at.parent.length - 1} @click=${() => this.structure('down', s.key)}>\u2193</button>\n <button title=\"Outdent (Shift+Tab)\" ?disabled=${!at || at.path.length < 2} @click=${() => this.structure('outdent', s.key)}>\u21E4</button>\n <button title=\"Indent under the section above (Tab)\" ?disabled=${!at || at.index === 0 || at.parent[at.index - 1].source !== undefined} @click=${() => this.structure('indent', s.key)}>\u21E5</button>\n ${s.source === undefined\n ? html`<button @click=${() => this.toggleTitle(s)}>${s.title === undefined ? 'Add title' : 'Remove title'}</button>`\n : html`<button title=\"Replace with a written-out copy of the document\" @click=${() => this.inlineInclude(s)}>Write out a copy</button>`}\n <button title=\"New paragraph after this section\" @click=${() => this.addSection('after')}>+ Paragraph</button>\n ${s.source === undefined ? html`<button title=\"New section inside this one\" @click=${() => this.addSection('child')}>+ Subsection</button>` : nothing}\n <button title=\"Delete this section\" @click=${() => { if (confirm('Delete this section and everything in it?')) this.run(() => M.remove(this.doc, s.key)) }}>Delete</button>\n <span class=\"id\">id\n <input .value=${s.id ?? ''} placeholder=${s.source !== undefined ? 'required' : 'none'} title=\"Id for references to this section\"\n @change=${(e: Event) => this.setId(s, (e.target as HTMLInputElement).value)} />\n ${!s.id && s.source === undefined ? html`<button title=\"Suggest an id from the title\" @click=${() => this.setId(s, M.uniqueId(this.doc, s.title || s.text?.slice(0, 40)))}>Suggest</button>` : nothing}\n </span>\n </div>`\n }\n\n private renderInclude(s: M.EditSection, number: string, active: boolean, problems: string[]) {\n const info = this.includes.get(s.source!)\n const doc = info?.composed\n return html`\n <div class=\"sec include ${active ? 'active' : ''} ${this.dropClass(s)}\" data-sec=${s.key} tabindex=\"-1\"\n @dragover=${(e: DragEvent) => this.onDragOver(e, s)} @drop=${(e: DragEvent) => this.onDropSection(e)}>\n <div class=\"row\" data-test=\"section-row\">\n ${this.grip(s)}\n <span class=\"num\">${number}.</span>\n <div>\n <div class=\"inc-title\">${doc?.title ?? 'Included document'}<span class=\"inc-id\">${s.id ?? '(no id)'}</span></div>\n ${this.renderIncludeInfo(info, s.source!)}\n ${problems.map(p => html`<div class=\"sec-problems\">${p}</div>`)}\n ${active && !this.preview ? this.renderTools(s) : nothing}\n </div>\n </div>\n ${doc ? html`<div class=\"inc-body\">\n ${doc.text ? html`<div>${this.renderComposedInline(doc.text, number, this.paramLabels(doc))}</div>` : nothing}\n ${doc.sections.map(c => this.renderComposed(c, number, this.paramLabels(doc)))}\n </div>` : nothing}\n </div>`\n }\n\n private renderIncludeInfo(info: IncludeInfo | undefined, cid: string) {\n if (!info || info.state === 'loading') return html`<div class=\"inc-info muted\">Loading from ${this.sources.length} source${this.sources.length === 1 ? '' : 's'}\u2026</div>`\n if (info.state !== 'ok') {\n const what = info.state === 'missing' ? 'Not found in any source' : info.state === 'bad-cid' ? 'Not a valid CID' : 'Failed verification'\n return html`<div class=\"inc-info\"><span class=\"badge bad\" data-test=\"include-failed\">\u2717 ${what}</span>\n <button @click=${() => { this.dialog = 'sources' }}>Sources\u2026</button>\n <div class=\"cid-line\">${cid}</div></div>`\n }\n const a = info.author\n let host = info.source ?? ''\n try { host = new URL(host).host } catch { /* as is */ }\n const entry = info.sourceEntry?.entry\n return html`\n <div class=\"inc-info\">\n <span class=\"badge good\" data-test=\"include-verified\" title=\"The content matches its CID\">\u2713 Verified</span>\n <span class=\"muted\">from ${host}</span>\n ${!a || a.status === 'not-a-domain'\n ? html`<span>${a?.author ? html`Author ${a.author} <span class=\"muted\">(a name; not verifiable)</span>` : html`<span class=\"muted\">No author</span>`}</span>`\n : a.status === 'confirmed'\n ? html`<span class=\"badge good\">\u2713 Author ${a.domain} confirmed</span>`\n : html`<span class=\"badge warn\" title=${a.reason ?? ''}>Author ${a.domain} not confirmed: ${a.status.replace('-', ' ')}</span>`}\n ${entry ? html`<span class=\"badge ${entry.status !== 'current' ? 'warn' : ''}\" title=\"What ${host} claims in its catalog\">${host}: ${entry.role}, ${entry.status}</span>` : nothing}\n ${info.problems.length ? html`<span class=\"badge warn\" title=${info.problems.join('\\n')}>${info.problems.length} problem${info.problems.length === 1 ? '' : 's'} inside</span>` : nothing}\n <button @click=${() => void this.openByCid(cid)}>Open</button>\n <a href=\"?cid=${encodeURIComponent(cid)}\" target=\"_blank\" rel=\"noopener\">Open in new tab \u2197</a>\n <div class=\"cid-line\">${cid}</div>\n </div>`\n }\n\n private renderComposedInline(nodes: ComposedInline[], prefix: string, params?: Map<string, string>): unknown {\n return nodes.map(n => {\n if (n.type === 'text') return n.value\n if (n.type === 'param') return html`<span class=\"param\">[${params?.get(n.path) ?? n.path}]</span>`\n if (n.type === 'ref') return n.target\n ? html`<span class=\"ref\">Section ${joinNumber(prefix, n.target)}</span>`\n : html`<span class=\"ref unresolved\">\u2192${n.path.join('/')}</span>`\n const inner = this.renderComposedInline(n.children, prefix, params)\n return n.tag === 'b' ? html`<b>${inner}</b>` : n.tag === 'i' ? html`<i>${inner}</i>` : html`<u>${inner}</u>`\n })\n }\n\n // Labels of a composed include's parameters, by path within it.\n private paramLabels(doc: { parameters: { prefix: string[], parameters: { key: string, label: string }[] }[] }): Map<string, string> {\n return new Map(doc.parameters.flatMap(g => g.parameters.map(p => [[...g.prefix, p.key].join('/'), p.label] as [string, string])))\n }\n\n private renderComposed(sec: ComposedSection, prefix: string, params?: Map<string, string>): TemplateResult {\n return html`\n <div class=\"composed\">\n <div class=\"crow\"><span class=\"cnum\">${joinNumber(prefix, sec.number)}.</span>\n <div>\n ${sec.title || sec.include ? html`<div class=\"chead\">${sec.title ? html`<span class=\"ctitle\">${sec.title}</span>` : nothing}\n ${sec.include ? html`<span class=\"cid-line\">${sec.include.cid.toString()}</span>` : nothing}</div>` : nothing}\n ${sec.text ? html`<div>${this.renderComposedInline(sec.text, prefix, params)}</div>` : nothing}\n </div>\n </div>\n ${sec.sections.length ? html`<div class=\"csub\">${sec.sections.map(c => this.renderComposed(c, prefix, params))}</div>` : nothing}\n </div>`\n }\n\n // -------------------------------------------------------------------------------------------\n // Dialogs\n\n private renderDialog() {\n if (!this.dialog) return nothing\n const close = () => { this.dialog = undefined }\n const body =\n this.dialog === 'sources' ? this.renderSourcesDialog(close) :\n this.dialog === 'properties' ? this.renderPropertiesDialog(close) :\n this.dialog === 'reference' ? this.renderReferenceDialog(close) :\n this.dialog === 'parameter' ? this.renderParameterDialog(close) :\n this.renderCatalogDialog(close)\n return html`<div class=\"backdrop\" @click=${close}></div><div class=\"dialog\" role=\"dialog\" data-test=${`dialog-${this.dialog}`}>${body}</div>`\n }\n\n private renderParameterDialog(close: () => void) {\n const params = this.doc.parameters.filter(p => p.key)\n const add = (e: Event) => {\n e.preventDefault()\n const form = e.target as HTMLFormElement\n const label = (form.elements.namedItem('label') as HTMLInputElement).value.trim()\n const dflt = (form.elements.namedItem('default') as HTMLInputElement).value.trim()\n if (!label) return\n const used = new Set(this.doc.parameters.map(p => p.key))\n let key = suggestId(label)\n for (let n = 2; used.has(key); n++) key = `${suggestId(label)}-${n}`\n this.doc.parameters.push({ key, label, ...(dflt ? { default: dflt } : {}) })\n this.changed()\n this.pickParameter(key)\n }\n return html`\n <h2>Insert a placeholder <button @click=${close}>Cancel</button></h2>\n <p class=\"intro\">A placeholder shows a parameter's value in the text when the document is used. The value is not part of the document: the same document (one CID) serves every agreement.</p>\n ${params.length ? html`<table>\n <thead><tr><th>Label</th><th>Key</th><th>Default</th></tr></thead>\n <tbody>${params.map(p => html`<tr class=\"pick\" data-test=\"param-row\" data-key=${p.key} @click=${() => this.pickParameter(p.key)}>\n <td>${p.label}</td><td><code>${p.key}</code></td><td>${p.default ?? html`<span class=\"muted\">required</span>`}</td></tr>`)}</tbody>\n </table>` : html`<p class=\"muted\">This document declares no parameters yet.</p>`}\n <label>New parameter</label>\n <form @submit=${add}>\n <input name=\"label\" data-test=\"new-param-label\" placeholder=\"Label, e.g. Weekly Rent\" />\n <input name=\"default\" placeholder=\"Default (optional)\" />\n <button type=\"submit\" data-test=\"new-param-add\">Add and insert</button>\n </form>`\n }\n\n private renderReferenceDialog(close: () => void) {\n const filter = this.refFilter.toLowerCase()\n const targets = this.referenceTargets().filter(t =>\n !filter || t.label.toLowerCase().includes(filter) || t.number.startsWith(filter) || t.path?.join('/').includes(filter))\n const choose = (e: Event) => { e.preventDefault(); const first = targets.find(t => t.path || t.section); if (first) this.pickReference(first) }\n return html`\n <h2>Insert a reference <button @click=${close}>Cancel</button></h2>\n <p class=\"intro\">References are shown as live section numbers and stored by id. Picking a section of this document without an id gives it one, from its title.</p>\n <form @submit=${choose}><input name=\"filter\" placeholder=\"Filter by title, number or id\" .value=${this.refFilter} autofocus\n @input=${(e: InputEvent) => { this.refFilter = (e.target as HTMLInputElement).value; this.version++ }} /></form>\n <table>\n <thead><tr><th>Section</th><th>Title</th><th>Reference</th></tr></thead>\n <tbody>${targets.map(t => {\n const usable = t.path || t.section\n return html`<tr class=${usable ? 'pick' : ''} data-test=\"ref-row\" data-label=${t.label} data-path=${t.path?.join('/') ?? ''} @click=${() => usable && this.pickReference(t)}>\n <td style=\"padding-left:${(t.depth - 1) * 12}px\">${t.number}</td>\n <td>${t.label}${t.included ? html` <span class=\"muted\">(included)</span>` : nothing}</td>\n <td>${t.path ? html`<code>${t.path.join('/')}</code>` : t.section ? html`<span class=\"muted\">will get an id</span>` : html`<span class=\"muted\">no id: cannot be referenced</span>`}</td></tr>`\n })}</tbody>\n </table>`\n }\n\n private renderSourcesDialog(close: () => void) {\n const update = (list: string[]) => {\n this.sources = list\n saveSources(list)\n forgetCatalogs()\n this.includes = new Map()\n this.catalogRows = undefined\n this.changed(false)\n }\n const move = (i: number, d: number) => { const l = [...this.sources]; const [x] = l.splice(i, 1); l.splice(i + d, 0, x); update(l) }\n const add = (e: Event) => {\n e.preventDefault()\n const input = (e.target as HTMLFormElement).elements.namedItem('source') as HTMLInputElement\n const url = normalizeSource(input.value.trim())\n if (!url) { this.say('Not a valid URL'); return }\n if (!this.sources.includes(url)) update([...this.sources, url])\n input.value = ''\n }\n return html`\n <h2>Document sources <button @click=${close}>Close</button></h2>\n <p class=\"intro\">Tried in order when fetching a document by CID. Everything fetched is verified against its CID, so no source needs to be trusted.</p>\n <ol>${this.sources.map((src, i) => html`<li><code>${src}</code>\n <button ?disabled=${i === 0} @click=${() => move(i, -1)}>\u2191</button>\n <button ?disabled=${i === this.sources.length - 1} @click=${() => move(i, 1)}>\u2193</button>\n <button @click=${() => update(this.sources.filter((_, j) => j !== i))}>Remove</button></li>`)}</ol>\n <form @submit=${add}>\n <input name=\"source\" placeholder=\"http://localhost:3001, https://example.org or an IPFS gateway\" />\n <button type=\"submit\">Add</button>\n <button type=\"button\" @click=${() => update([location.origin])}>Reset</button>\n </form>`\n }\n\n private showOpen(mode: 'open' | 'include') {\n this.dialog = mode\n if (!this.catalogRows) void this.loadCatalogRows()\n }\n\n private async loadCatalogRows() {\n const rows: CatalogRow[] = []\n await Promise.all(this.sources.map(async source => {\n const catalog = await sourceCatalog(source)\n let host = source\n try { host = new URL(source).host } catch { /* as is */ }\n for (const entry of catalog?.entries ?? []) rows.push({ source, host, entry })\n }))\n rows.sort((a, b) => (a.entry.title ?? '').localeCompare(b.entry.title ?? ''))\n this.catalogRows = rows\n this.version++\n }\n\n private insertInclude(cid: string, title?: string) {\n let id = M.uniqueId(this.doc, title ?? 'included')\n const answer = prompt('Id for this included document (used in references):', id)\n if (answer === null) return\n id = answer.trim() || id\n this.dialog = undefined\n this.addSection(this.activeKey ? 'after' : 'end', { id, source: cid })\n }\n\n private renderCatalogDialog(close: () => void) {\n const include = this.dialog === 'include'\n const pick = (row: CatalogRow) => include ? this.insertInclude(row.entry.cid, row.entry.title) : void this.openByCid(row.entry.cid)\n const byCid = (e: Event) => {\n e.preventDefault()\n const input = (e.target as HTMLFormElement).elements.namedItem('cid') as HTMLInputElement\n if (!input.value.trim()) return\n if (include) this.insertInclude(input.value.trim())\n else void this.openByCid(input.value)\n }\n const rows = this.catalogRows\n return html`\n <h2>${include ? 'Include a document' : 'Open from sources'} <button @click=${close}>Close</button></h2>\n <p class=\"intro\">Documents listed in your sources' catalogs (File \u2192 Sources). Or enter a CID, for sources without a catalog such as IPFS gateways.</p>\n ${!rows ? html`<p class=\"muted\">Loading catalogs\u2026</p>` : !rows.length ? html`<p class=\"muted\">No catalogs found in your sources.</p>` : html`\n <table>\n <thead><tr><th>Title</th><th>Source</th><th>Its claim</th><th>Status</th></tr></thead>\n <tbody>${rows.map(r => html`<tr class=\"pick\" data-test=\"catalog-row\" data-cid=${r.entry.cid} title=${r.entry.cid} @click=${() => pick(r)}>\n <td>${r.entry.title ?? r.entry.cid}</td><td>${r.host}</td><td>${r.entry.role}</td>\n <td>${r.entry.status === 'current' ? r.entry.status : html`<span class=\"badge warn\">${r.entry.status}</span>`}</td></tr>`)}</tbody>\n </table>`}\n <form @submit=${byCid}><input name=\"cid\" placeholder=\"baguqeera\u2026 (CID)\" /><button type=\"submit\">${include ? 'Include' : 'Open'}</button></form>`\n }\n\n private renderPropertiesDialog(close: () => void) {\n const d = this.doc\n const set = (field: 'author' | 'language' | 'published' | 'title') => (e: Event) => {\n const v = (e.target as HTMLInputElement).value\n if (field === 'title' || field === 'language') d[field] = v\n else d[field] = v || undefined\n this.changed()\n }\n const param = (i: number, field: keyof M.EditParameter) => (e: Event) => {\n const v = (e.target as HTMLInputElement).value\n if (field === 'default') d.parameters[i].default = v || undefined\n else d.parameters[i][field] = v\n this.changed()\n }\n const addReplaces = (e: Event) => {\n e.preventDefault()\n const input = (e.target as HTMLFormElement).elements.namedItem('cid') as HTMLInputElement\n if (input.value.trim()) { d.replaces.push(input.value.trim()); input.value = ''; this.changed() }\n }\n return html`\n <h2>Document properties <button @click=${close}>Done</button></h2>\n <label>Title</label><input class=\"field\" .value=${d.title} @input=${set('title')} />\n <label>Author</label><input class=\"field\" .value=${d.author ?? ''} @input=${set('author')} placeholder=\"A domain (verifiable), e.g. sereus.org, or a name\" />\n <label>Language</label><input class=\"field\" .value=${d.language} @input=${set('language')} placeholder=\"BCP 47 tag, e.g. en or en-US\" />\n <label>Published</label><input class=\"field\" type=\"date\" .value=${d.published ?? ''} @input=${set('published')} />\n <label>Parameters</label>\n <p class=\"note\">Values supplied when the document is used (party names, dates); shown in a Particulars table. A parameter without a default is required.</p>\n ${d.parameters.map((p, i) => html`<div class=\"row-fields\">\n <input .value=${p.key} placeholder=\"key, e.g. stock-name\" title=\"Changing the key updates its placeholders\"\n @change=${(e: Event) => {\n const v = (e.target as HTMLInputElement).value.trim()\n const old = d.parameters[i].key\n if (old && v && old !== v) { const n = M.renameParam(this.doc, old, v); if (n) this.say(`Updated ${n} placeholder${n === 1 ? '' : 's'}`) } else d.parameters[i].key = v\n this.changed()\n }} />\n <input .value=${p.label} placeholder=\"Label, e.g. Stock Holder\" @input=${param(i, 'label')} />\n <input .value=${p.default ?? ''} placeholder=\"Default (optional)\" @input=${param(i, 'default')} />\n <button @click=${() => { d.parameters.splice(i, 1); this.changed() }}>Remove</button></div>`)}\n <button @click=${() => { d.parameters.push({ key: '', label: '' }); this.changed() }}>+ Parameter</button>\n <label>Replaces</label>\n <p class=\"note\">Earlier versions this document supersedes (their CIDs).</p>\n <ul>${d.replaces.map((c, i) => html`<li><code>${c}</code><button @click=${() => { d.replaces.splice(i, 1); this.changed() }}>Remove</button></li>`)}</ul>\n <form @submit=${addReplaces}><input name=\"cid\" placeholder=\"baguqeera\u2026 (CID of an earlier version)\" /><button type=\"submit\">Add</button></form>\n ${this.validation.document.length ? html`<ul class=\"problems\">${this.validation.document.map(p => html`<li>${p}</li>`)}</ul>` : nothing}`\n }\n}\n\ninterface PdfMakeBrowser {\n setFonts(fonts: Record<string, Record<string, string>>): void\n setUrlAccessPolicy(cb: (url: string) => boolean): void\n createPdf(def: unknown): { download(name: string): void }\n}\n\nlet pdfMakeLoading: Promise<PdfMakeBrowser> | undefined\n\n// Load pdfmake's browser build and point it at the bundled fonts, once.\nfunction loadPdfMake(): Promise<PdfMakeBrowser> {\n pdfMakeLoading ??= new Promise((resolve, reject) => {\n const vendor = new URL('vendor/', import.meta.url).href\n const script = document.createElement('script')\n script.src = `${vendor}pdfmake.min.js`\n script.onload = () => {\n const pdfMake = (window as unknown as { pdfMake: PdfMakeBrowser }).pdfMake\n const font = (name: string) => `${vendor}fonts/${name}`\n pdfMake.setFonts({\n NotoSerif: {\n normal: font('NotoSerif_400Regular.ttf'), bold: font('NotoSerif_700Bold.ttf'),\n italics: font('NotoSerif_400Regular_Italic.ttf'), bolditalics: font('NotoSerif_700Bold_Italic.ttf'),\n },\n NotoSansMono: {\n normal: font('NotoSansMono_400Regular.ttf'), bold: font('NotoSansMono_400Regular.ttf'),\n italics: font('NotoSansMono_400Regular.ttf'), bolditalics: font('NotoSansMono_400Regular.ttf'),\n },\n })\n pdfMake.setUrlAccessPolicy(url => url.startsWith(`${vendor}fonts/`))\n resolve(pdfMake)\n }\n script.onerror = () => { pdfMakeLoading = undefined; reject(new Error(`could not load ${script.src}`)) }\n document.head.appendChild(script)\n })\n return pdfMakeLoading\n}\n\ncustomElements.define('stroc-editor', StrocEditor)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["qrcode", "r", "c", "i", "j", "buffer", "typeNumber", "errorCorrectionLevel", "qrSvg", "x", "y", "s", "r2", "p", "ascii", "length", "read", "b", "unicodeMap", "b2", "k", "v", "d", "a", "n", "_num", "e", "num", "_this", "data", "code", "encode", "decode", "base64", "global", "globalThis", "supportsAdoptingStyleSheets", "ShadowRoot", "ShadyCSS", "nativeShadow", "Document", "prototype", "CSSStyleSheet", "constructionToken", "Symbol", "cssTagCache", "WeakMap", "CSSResult", "cssText", "strings", "safeToken", "this", "Error", "_strings", "styleSheet", "_styleSheet", "cacheable", "length", "get", "replaceSync", "set", "toString", "unsafeCSS", "value", "String", "adoptStyles", "renderRoot", "styles", "supportsAdoptingStyleSheets", "adoptedStyleSheets", "map", "s", "CSSStyleSheet", "styleSheet", "style", "document", "createElement", "nonce", "global", "setAttribute", "textContent", "cssText", "appendChild", "getCompatibleStyle", "sheet", "rule", "cssRules", "unsafeCSS", "is", "defineProperty", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getOwnPropertySymbols", "getPrototypeOf", "Object", "global", "globalThis", "trustedTypes", "emptyStringForBooleanAttribute", "emptyScript", "polyfillSupport", "reactiveElementPolyfillSupport", "JSCompiler_renameProperty", "prop", "_obj", "defaultConverter", "value", "type", "Boolean", "Array", "JSON", "stringify", "fromValue", "Number", "parse", "e", "notEqual", "old", "defaultPropertyDeclaration", "attribute", "String", "converter", "reflect", "useDefault", "hasChanged", "Symbol", "metadata", "litPropertyMetadata", "WeakMap", "ReactiveElement", "HTMLElement", "initializer", "this", "__prepare", "_initializers", "push", "observedAttributes", "finalize", "__attributeToPropertyMap", "keys", "name", "options", "state", "prototype", "hasOwnProperty", "create", "wrapped", "elementProperties", "set", "noAccessor", "key", "descriptor", "getPropertyDescriptor", "get", "v", "oldValue", "call", "requestUpdate", "configurable", "enumerable", "superCtor", "Map", "finalized", "props", "properties", "propKeys", "p", "createProperty", "attr", "__attributeNameForProperty", "elementStyles", "finalizeStyles", "styles", "isArray", "Set", "flat", "Infinity", "reverse", "s", "unshift", "getCompatibleStyle", "toLowerCase", "constructor", "super", "__instanceProperties", "isUpdatePending", "hasUpdated", "__reflectingProperty", "__initialize", "__updatePromise", "Promise", "res", "enableUpdating", "_$changedProperties", "__saveInstanceProperties", "forEach", "i", "controller", "__controllers", "add", "renderRoot", "isConnected", "hostConnected", "delete", "instanceProperties", "size", "createRenderRoot", "shadowRoot", "attachShadow", "shadowRootOptions", "adoptStyles", "connectedCallback", "c", "_requestedUpdate", "disconnectedCallback", "hostDisconnected", "_old", "_$attributeToProperty", "attrValue", "toAttribute", "removeAttribute", "setAttribute", "ctor", "propName", "getPropertyOptions", "fromAttribute", "convertedValue", "__defaultValues", "newValue", "hasAttribute", "_$changeProperty", "__enqueueUpdate", "initializeValue", "has", "__reflectingProperties", "reject", "result", "scheduleUpdate", "performUpdate", "shouldUpdate", "changedProperties", "willUpdate", "hostUpdate", "update", "__markUpdated", "_$didUpdate", "_changedProperties", "hostUpdated", "firstUpdated", "updated", "updateComplete", "getUpdateComplete", "__propertyToAttribute", "mode", "reactiveElementVersions", "global", "globalThis", "trustedTypes", "policy", "createPolicy", "createHTML", "s", "boundAttributeSuffix", "marker", "Math", "random", "toFixed", "slice", "markerMatch", "nodeMarker", "d", "document", "createMarker", "createComment", "isPrimitive", "value", "isArray", "Array", "isIterable", "Symbol", "iterator", "SPACE_CHAR", "textEndRegex", "commentEndRegex", "comment2EndRegex", "tagEndRegex", "RegExp", "singleQuoteAttrEndRegex", "doubleQuoteAttrEndRegex", "rawTextElement", "tag", "type", "strings", "values", "_$litType$", "html", "svg", "mathml", "noChange", "for", "nothing", "templateCache", "WeakMap", "walker", "createTreeWalker", "trustFromTemplateString", "tsa", "stringFromTSA", "hasOwnProperty", "Error", "getTemplateHtml", "l", "length", "attrNames", "rawTextEndRegex", "regex", "i", "attrName", "match", "attrNameEndIndex", "lastIndex", "exec", "test", "end", "startsWith", "push", "Template", "constructor", "options", "node", "this", "parts", "nodeIndex", "attrNameIndex", "partCount", "el", "createElement", "currentNode", "content", "wrapper", "firstChild", "replaceWith", "childNodes", "nextNode", "nodeType", "hasAttributes", "name", "getAttributeNames", "endsWith", "realName", "statics", "getAttribute", "split", "m", "index", "ctor", "PropertyPart", "BooleanAttributePart", "EventPart", "AttributePart", "removeAttribute", "tagName", "textContent", "emptyScript", "append", "data", "indexOf", "_options", "innerHTML", "resolveDirective", "part", "parent", "attributeIndex", "currentDirective", "__directives", "__directive", "nextDirectiveConstructor", "_$initialize", "_$resolve", "TemplateInstance", "template", "_$parts", "_$disconnectableChildren", "_$template", "_$parent", "parentNode", "_$isConnected", "fragment", "creationScope", "importNode", "partIndex", "templatePart", "ChildPart", "nextSibling", "ElementPart", "_$setValue", "__isConnected", "startNode", "endNode", "_$committedValue", "_$startNode", "_$endNode", "isConnected", "directiveParent", "_$clear", "_commitText", "_commitTemplateResult", "_commitNode", "_commitIterable", "insertBefore", "_insert", "createTextNode", "result", "_$getTemplate", "h", "_update", "instance", "_clone", "get", "set", "itemParts", "itemPart", "item", "start", "from", "_$notifyConnectionChanged", "n", "remove", "element", "fill", "String", "valueIndex", "noCommit", "change", "v", "_commitValue", "setAttribute", "toggleAttribute", "super", "newListener", "oldListener", "shouldRemoveListener", "capture", "once", "passive", "shouldAddListener", "removeEventListener", "addEventListener", "event", "call", "host", "handleEvent", "polyfillSupport", "global", "litHtmlPolyfillSupport", "Template", "ChildPart", "litHtmlVersions", "push", "render", "value", "container", "options", "partOwnerNode", "renderBefore", "part", "endNode", "insertBefore", "createMarker", "_$setValue", "global", "globalThis", "LitElement", "ReactiveElement", "constructor", "this", "renderOptions", "host", "__childPart", "createRenderRoot", "renderRoot", "super", "renderBefore", "firstChild", "changedProperties", "value", "render", "hasUpdated", "isConnected", "update", "connectedCallback", "setConnected", "disconnectedCallback", "noChange", "litElementHydrateSupport", "polyfillSupport", "litElementPolyfillSupport", "global", "litElementVersions", "push", "o", "b", "j", "i", "x", "encode", "length", "decode", "string", "buffer", "encode", "decode", "string", "buffer", "i", "encode", "decode", "buf", "counter", "b", "l", "decode", "code", "length", "int", "code", "decode", "equals", "a", "b", "base", "baseCache", "code", "equals", "base", "decode", "i", "length", "cache", "cid", "code", "m", "code", "base", "p", "i", "buf", "i", "current", "s", "c", "list", "n", "a", "t", "x", "y", "m", "k", "isBuffer", "buf", "string", "length", "c", "b", "b2", "isBuffer", "i", "p", "c", "buf", "buf", "set", "encodedSize", "int", "buf", "encodedSize", "compareTokens", "length", "buf", "l", "encodedSize", "compareTokens", "b2", "toToken", "length", "l", "toToken", "length", "l", "buf", "encodedSize", "toToken", "length", "l", "buf", "encodedSize", "buf", "encodedSize", "buf", "float", "encodedSize", "ui8a", "i", "p", "i", "e", "isMap", "length", "e2", "t2", "buf", "i", "m", "decode", "buf", "is", "i", "e2", "encode", "c", "i", "float", "l", "decode", "empty", "equals", "coerce", "o", "base", "j", "i", "x", "encode", "length", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "Decoder", "or", "ComposedDecoder", "Codec", "from", "encode", "decode", "baseX", "base_x_default", "coerce", "string", "buffer", "i", "createAlphabetIdx", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36", "baseX", "base36upper", "base58btc", "baseX", "base58flickr", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "decode", "read", "MSB$1", "REST$1", "buf", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "varint", "_brrp_varint", "varint_default", "decode", "code", "varint_default", "encodeTo", "int", "encodingLength", "create", "code", "encodingLength", "encodeTo", "Digest", "decode", "coerce", "equals", "a", "b", "format", "base", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "CID", "code", "DAG_PB_CODE", "SHA_256_CODE", "create", "equals", "base", "format", "encodeCID", "cidSymbol", "decode", "coerce", "Digest", "i", "length", "parseCIDtoBytes", "base58btc", "base32", "base36", "toStringV0", "cid", "toStringV1", "encodingLength", "encodeTo", "rfc4648", "buf", "CID", "i", "encode", "decode", "buf", "from", "code", "encode", "n", "h", "l", "a", "n", "length", "i", "a", "b", "c", "buffer", "dataView", "i", "length", "A", "B", "C", "E", "H", "i", "sha256", "from", "s", "c", "v", "code", "p", "sha256", "a", "b", "i", "d", "m", "encode", "sha256", "code", "decode", "encode", "a", "b", "i", "v", "x", "linkText", "k", "BREAK", "i", "i", "i", "k", "v", "i", "res", "res", "doc", "src", "c", "t", "map", "schema", "node", "schema", "v", "i", "k", "a", "n", "indent", "indent", "i", "j", "end", "isBlock", "i", "indent", "code", "t", "t", "o", "indent", "map", "value", "map", "k", "v", "schema", "_", "stringify", "indent", "i", "comment", "str", "k", "schema", "map", "i", "_", "Type", "map", "schema", "schema", "_", "seq", "i", "seq", "schema", "format", "n", "i", "d", "intIdentify", "schema", "src", "buffer", "i", "buf", "s", "n", "o", "seq", "i", "schema", "pairs", "_", "map", "schema", "pairs", "omap", "seq", "floatNaN", "floatExp", "float", "f", "intIdentify", "intResolve", "n", "intStringify", "intOct", "int", "intHex", "schema", "_", "set", "map", "n", "res", "p", "d", "schema", "intOct", "int", "intHex", "floatNaN", "floatExp", "float", "schema", "tags", "a", "b", "merge", "schema", "sortMapEntries", "Document", "v", "k", "res", "s", "code", "src", "indent", "a", "b", "composeNode", "composeEmptyNode", "map", "composeNode", "composeEmptyNode", "seq", "composeNode", "composeEmptyNode", "isMap", "i", "map", "CN", "t", "scalar", "i", "value", "end", "indent", "src", "n", "length", "m", "scalar", "code", "i", "length", "scalar", "schema", "tag", "i", "Document", "src", "i", "code", "Document", "BREAK", "SKIP", "REMOVE", "visit", "i", "SCALAR", "SCALAR", "i", "n", "indent", "s", "ch", "SCALAR", "i", "n", "scalar", "map", "start", "seq", "indent", "stringify", "indent", "Document", "parse", "p", "n", "place", "s", "current", "stringify", "indent", "l", "k", "i", "stringifyDocument", "base", "c", "e", "d", "document", "r", "cache", "v", "p", "text", "nodes", "n", "sections", "document", "a", "b", "current", "i", "d", "p", "d", "n", "v", "qrcode", "_", "r", "c", "g", "s", "b", "n", "r", "c", "r", "t", "l", "b", "g", "k", "v", "n", "p", "c", "m", "l", "i", "e", "r", "visit", "place", "after", "d", "x", "v", "fromPlain", "s", "x", "p", "t", "o", "toPlain", "sections", "c", "locate", "i", "s", "locate", "i", "from", "t", "n", "x", "base", "m", "newKey", "p", "u", "s", "r", "p", "e", "s", "i", "i", "e", "n", "k", "p", "x", "locate", "toPlain", "document", "l", "s", "map", "a", "b", "from", "w", "f", "fromPlain", "format", "stringifyDocument", "base", "v", "y", "t", "c", "d", "g", "src", "_", "j", "r", "set"]
|
|
7
|
+
}
|