summaryrefslogtreecommitdiff
path: root/node_modules/@babel/generator/lib/buffer.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/generator/lib/buffer.js')
-rw-r--r--node_modules/@babel/generator/lib/buffer.js244
1 files changed, 244 insertions, 0 deletions
diff --git a/node_modules/@babel/generator/lib/buffer.js b/node_modules/@babel/generator/lib/buffer.js
new file mode 100644
index 0000000..05b5279
--- /dev/null
+++ b/node_modules/@babel/generator/lib/buffer.js
@@ -0,0 +1,244 @@
+"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;
+
+//# sourceMappingURL=buffer.js.map