Spaces:
Running
Running
| ; | |
| 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; | |
| //# sourceMappingURL=buffer.js.map | |