| "use strict"; |
|
|
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| const spaceIndents = []; |
| for (let i = 0; i < 32; i++) { |
| spaceIndents.push(" ".repeat(i * 2)); |
| } |
| class Buffer { |
| constructor(map, indentChar) { |
| this._map = null; |
| this._buf = ""; |
| this._str = ""; |
| this._appendCount = 0; |
| this._last = 0; |
| this._canMarkIdName = true; |
| this._indentChar = ""; |
| this._queuedChar = 0; |
| this._position = { |
| line: 1, |
| column: 0 |
| }; |
| this._sourcePosition = { |
| identifierName: undefined, |
| identifierNamePos: undefined, |
| line: undefined, |
| column: undefined, |
| filename: undefined |
| }; |
| this._map = map; |
| this._indentChar = indentChar; |
| } |
| get() { |
| const { |
| _map, |
| _last |
| } = this; |
| if (this._queuedChar !== 32) { |
| this._flush(); |
| } |
| const code = _last === 10 ? (this._buf + this._str).trimRight() : this._buf + this._str; |
| if (_map === null) { |
| return { |
| code: code, |
| decodedMap: undefined, |
| map: null, |
| rawMappings: undefined |
| }; |
| } |
| const result = { |
| code: code, |
| decodedMap: _map.getDecoded(), |
| get __mergedMap() { |
| return this.map; |
| }, |
| get map() { |
| const resultMap = _map.get(); |
| result.map = resultMap; |
| return resultMap; |
| }, |
| set map(value) { |
| Object.defineProperty(result, "map", { |
| value, |
| writable: true |
| }); |
| }, |
| get rawMappings() { |
| const mappings = _map.getRawMappings(); |
| result.rawMappings = mappings; |
| return mappings; |
| }, |
| set rawMappings(value) { |
| Object.defineProperty(result, "rawMappings", { |
| value, |
| writable: true |
| }); |
| } |
| }; |
| return result; |
| } |
| append(str, maybeNewline) { |
| this._flush(); |
| this._append(str, maybeNewline); |
| } |
| appendChar(char) { |
| this._flush(); |
| this._appendChar(char, 1, true); |
| } |
| queue(char) { |
| this._flush(); |
| this._queuedChar = char; |
| } |
| _flush() { |
| const queuedChar = this._queuedChar; |
| if (queuedChar !== 0) { |
| this._appendChar(queuedChar, 1, true); |
| this._queuedChar = 0; |
| } |
| } |
| _appendChar(char, repeat, useSourcePos) { |
| this._last = char; |
| if (char === -1) { |
| const indent = repeat >= 64 ? this._indentChar.repeat(repeat) : spaceIndents[repeat / 2]; |
| this._str += indent; |
| } else { |
| this._str += repeat > 1 ? String.fromCharCode(char).repeat(repeat) : String.fromCharCode(char); |
| } |
| const isSpace = char === 32; |
| const position = this._position; |
| if (char !== 10) { |
| if (this._map) { |
| const sourcePos = this._sourcePosition; |
| if (useSourcePos && sourcePos) { |
| this._map.mark(position, sourcePos.line, sourcePos.column, isSpace ? undefined : sourcePos.identifierName, isSpace ? undefined : sourcePos.identifierNamePos, sourcePos.filename); |
| if (!isSpace && this._canMarkIdName) { |
| sourcePos.identifierName = undefined; |
| sourcePos.identifierNamePos = undefined; |
| } |
| } else { |
| this._map.mark(position); |
| } |
| } |
| position.column += repeat; |
| } else { |
| position.line++; |
| position.column = 0; |
| } |
| } |
| _append(str, maybeNewline) { |
| const len = str.length; |
| const position = this._position; |
| const sourcePos = this._sourcePosition; |
| this._last = -1; |
| if (++this._appendCount > 4096) { |
| +this._str; |
| this._buf += this._str; |
| this._str = str; |
| this._appendCount = 0; |
| } else { |
| this._str += str; |
| } |
| const hasMap = this._map !== null; |
| if (!maybeNewline && !hasMap) { |
| position.column += len; |
| return; |
| } |
| const { |
| column, |
| identifierName, |
| identifierNamePos, |
| filename |
| } = sourcePos; |
| let line = sourcePos.line; |
| if ((identifierName != null || identifierNamePos != null) && this._canMarkIdName) { |
| sourcePos.identifierName = undefined; |
| sourcePos.identifierNamePos = undefined; |
| } |
| let i = str.indexOf("\n"); |
| let last = 0; |
| if (hasMap && i !== 0) { |
| this._map.mark(position, line, column, identifierName, identifierNamePos, filename); |
| } |
| while (i !== -1) { |
| position.line++; |
| position.column = 0; |
| last = i + 1; |
| if (last < len && line !== undefined) { |
| line++; |
| if (hasMap) { |
| this._map.mark(position, line, 0, undefined, undefined, filename); |
| } |
| } |
| i = str.indexOf("\n", last); |
| } |
| position.column += len - last; |
| } |
| removeLastSemicolon() { |
| if (this._queuedChar === 59) { |
| this._queuedChar = 0; |
| } |
| } |
| getLastChar(checkQueue) { |
| if (!checkQueue) { |
| return this._last; |
| } |
| const queuedChar = this._queuedChar; |
| return queuedChar !== 0 ? queuedChar : this._last; |
| } |
| getNewlineCount() { |
| return this._queuedChar === 0 && this._last === 10 ? 1 : 0; |
| } |
| hasContent() { |
| return this._last !== 0; |
| } |
| exactSource(loc, cb) { |
| if (!this._map) { |
| cb(); |
| return; |
| } |
| this.source("start", loc); |
| const identifierName = loc.identifierName; |
| const sourcePos = this._sourcePosition; |
| if (identifierName != null) { |
| this._canMarkIdName = false; |
| sourcePos.identifierName = identifierName; |
| } |
| cb(); |
| if (identifierName != null) { |
| this._canMarkIdName = true; |
| sourcePos.identifierName = undefined; |
| sourcePos.identifierNamePos = undefined; |
| } |
| this.source("end", loc); |
| } |
| source(prop, loc) { |
| if (!this._map) return; |
| this._normalizePosition(prop, loc, 0); |
| } |
| sourceWithOffset(prop, loc, columnOffset) { |
| if (!this._map) return; |
| this._normalizePosition(prop, loc, columnOffset); |
| } |
| _normalizePosition(prop, loc, columnOffset) { |
| this._flush(); |
| const pos = loc[prop]; |
| const target = this._sourcePosition; |
| if (pos) { |
| target.line = pos.line; |
| target.column = Math.max(pos.column + columnOffset, 0); |
| target.filename = loc.filename; |
| } |
| } |
| getCurrentColumn() { |
| return this._position.column + (this._queuedChar ? 1 : 0); |
| } |
| getCurrentLine() { |
| return this._position.line; |
| } |
| } |
| exports.default = Buffer; |
|
|
| |
|
|