tdesign-mobile-vue
Version:
tdesign-mobile-vue
1,508 lines (1,494 loc) • 64.3 kB
JavaScript
/**
* tdesign v1.9.3
* (c) 2025 TDesign Group
* @license MIT
*/
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
import _createClass from '@babel/runtime/helpers/createClass';
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
// src/vlq.ts
var comma = ",".charCodeAt(0);
var semicolon = ";".charCodeAt(0);
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var intToChar = new Uint8Array(64);
var charToInt = new Uint8Array(128);
for (var i = 0; i < chars.length; i++) {
var c = chars.charCodeAt(i);
intToChar[i] = c;
charToInt[c] = i;
}
function decodeInteger(reader, relative) {
var value = 0;
var shift = 0;
var integer = 0;
do {
var _c = reader.next();
integer = charToInt[_c];
value |= (integer & 31) << shift;
shift += 5;
} while (integer & 32);
var shouldNegate = value & 1;
value >>>= 1;
if (shouldNegate) {
value = -2147483648 | -value;
}
return relative + value;
}
function encodeInteger(builder, num, relative) {
var delta = num - relative;
delta = delta < 0 ? -delta << 1 | 1 : delta << 1;
do {
var clamped = delta & 31;
delta >>>= 5;
if (delta > 0) clamped |= 32;
builder.write(intToChar[clamped]);
} while (delta > 0);
return num;
}
function hasMoreVlq(reader, max) {
if (reader.pos >= max) return false;
return reader.peek() !== comma;
}
// src/strings.ts
var bufLength = 1024 * 16;
var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */new TextDecoder() : typeof Buffer !== "undefined" ? {
decode: function decode(buf) {
var out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);
return out.toString();
}
} : {
decode: function decode(buf) {
var out = "";
for (var _i = 0; _i < buf.length; _i++) {
out += String.fromCharCode(buf[_i]);
}
return out;
}
};
var StringWriter = /*#__PURE__*/function () {
function StringWriter() {
_classCallCheck(this, StringWriter);
this.pos = 0;
this.out = "";
this.buffer = new Uint8Array(bufLength);
}
return _createClass(StringWriter, [{
key: "write",
value: function write(v) {
var buffer = this.buffer;
buffer[this.pos++] = v;
if (this.pos === bufLength) {
this.out += td.decode(buffer);
this.pos = 0;
}
}
}, {
key: "flush",
value: function flush() {
var buffer = this.buffer,
out = this.out,
pos = this.pos;
return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;
}
}]);
}();
var StringReader = /*#__PURE__*/function () {
function StringReader(buffer) {
_classCallCheck(this, StringReader);
this.pos = 0;
this.buffer = buffer;
}
return _createClass(StringReader, [{
key: "next",
value: function next() {
return this.buffer.charCodeAt(this.pos++);
}
}, {
key: "peek",
value: function peek() {
return this.buffer.charCodeAt(this.pos);
}
}, {
key: "indexOf",
value: function indexOf(char) {
var buffer = this.buffer,
pos = this.pos;
var idx = buffer.indexOf(char, pos);
return idx === -1 ? buffer.length : idx;
}
}]);
}();
// src/scopes.ts
var EMPTY = [];
function decodeOriginalScopes(input) {
var length = input.length;
var reader = new StringReader(input);
var scopes = [];
var stack = [];
var line = 0;
for (; reader.pos < length; reader.pos++) {
line = decodeInteger(reader, line);
var column = decodeInteger(reader, 0);
if (!hasMoreVlq(reader, length)) {
var last = stack.pop();
last[2] = line;
last[3] = column;
continue;
}
var kind = decodeInteger(reader, 0);
var fields = decodeInteger(reader, 0);
var hasName = fields & 1;
var scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind];
var vars = EMPTY;
if (hasMoreVlq(reader, length)) {
vars = [];
do {
var varsIndex = decodeInteger(reader, 0);
vars.push(varsIndex);
} while (hasMoreVlq(reader, length));
}
scope.vars = vars;
scopes.push(scope);
stack.push(scope);
}
return scopes;
}
function encodeOriginalScopes(scopes) {
var writer = new StringWriter();
for (var _i2 = 0; _i2 < scopes.length;) {
_i2 = _encodeOriginalScopes(scopes, _i2, writer, [0]);
}
return writer.flush();
}
function _encodeOriginalScopes(scopes, index, writer, state) {
var scope = scopes[index];
var startLine = scope[0],
startColumn = scope[1],
endLine = scope[2],
endColumn = scope[3],
kind = scope[4],
vars = scope.vars;
if (index > 0) writer.write(comma);
state[0] = encodeInteger(writer, startLine, state[0]);
encodeInteger(writer, startColumn, 0);
encodeInteger(writer, kind, 0);
var fields = scope.length === 6 ? 1 : 0;
encodeInteger(writer, fields, 0);
if (scope.length === 6) encodeInteger(writer, scope[5], 0);
var _iterator = _createForOfIteratorHelper(vars),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var v = _step.value;
encodeInteger(writer, v, 0);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
for (index++; index < scopes.length;) {
var next = scopes[index];
var l = next[0],
_c2 = next[1];
if (l > endLine || l === endLine && _c2 >= endColumn) {
break;
}
index = _encodeOriginalScopes(scopes, index, writer, state);
}
writer.write(comma);
state[0] = encodeInteger(writer, endLine, state[0]);
encodeInteger(writer, endColumn, 0);
return index;
}
function decodeGeneratedRanges(input) {
var length = input.length;
var reader = new StringReader(input);
var ranges = [];
var stack = [];
var genLine = 0;
var definitionSourcesIndex = 0;
var definitionScopeIndex = 0;
var callsiteSourcesIndex = 0;
var callsiteLine = 0;
var callsiteColumn = 0;
var bindingLine = 0;
var bindingColumn = 0;
do {
var semi = reader.indexOf(";");
var genColumn = 0;
for (; reader.pos < semi; reader.pos++) {
genColumn = decodeInteger(reader, genColumn);
if (!hasMoreVlq(reader, semi)) {
var last = stack.pop();
last[2] = genLine;
last[3] = genColumn;
continue;
}
var fields = decodeInteger(reader, 0);
var hasDefinition = fields & 1;
var hasCallsite = fields & 2;
var hasScope = fields & 4;
var callsite = null;
var bindings = EMPTY;
var range = void 0;
if (hasDefinition) {
var defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);
definitionScopeIndex = decodeInteger(reader, definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0);
definitionSourcesIndex = defSourcesIndex;
range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex];
} else {
range = [genLine, genColumn, 0, 0];
}
range.isScope = !!hasScope;
if (hasCallsite) {
var prevCsi = callsiteSourcesIndex;
var prevLine = callsiteLine;
callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);
var sameSource = prevCsi === callsiteSourcesIndex;
callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);
callsiteColumn = decodeInteger(reader, sameSource && prevLine === callsiteLine ? callsiteColumn : 0);
callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];
}
range.callsite = callsite;
if (hasMoreVlq(reader, semi)) {
bindings = [];
do {
bindingLine = genLine;
bindingColumn = genColumn;
var expressionsCount = decodeInteger(reader, 0);
var expressionRanges = void 0;
if (expressionsCount < -1) {
expressionRanges = [[decodeInteger(reader, 0)]];
for (var _i3 = -1; _i3 > expressionsCount; _i3--) {
var prevBl = bindingLine;
bindingLine = decodeInteger(reader, bindingLine);
bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);
var expression = decodeInteger(reader, 0);
expressionRanges.push([expression, bindingLine, bindingColumn]);
}
} else {
expressionRanges = [[expressionsCount]];
}
bindings.push(expressionRanges);
} while (hasMoreVlq(reader, semi));
}
range.bindings = bindings;
ranges.push(range);
stack.push(range);
}
genLine++;
reader.pos = semi + 1;
} while (reader.pos < length);
return ranges;
}
function encodeGeneratedRanges(ranges) {
if (ranges.length === 0) return "";
var writer = new StringWriter();
for (var _i4 = 0; _i4 < ranges.length;) {
_i4 = _encodeGeneratedRanges(ranges, _i4, writer, [0, 0, 0, 0, 0, 0, 0]);
}
return writer.flush();
}
function _encodeGeneratedRanges(ranges, index, writer, state) {
var range = ranges[index];
var startLine = range[0],
startColumn = range[1],
endLine = range[2],
endColumn = range[3],
isScope = range.isScope,
callsite = range.callsite,
bindings = range.bindings;
if (state[0] < startLine) {
catchupLine(writer, state[0], startLine);
state[0] = startLine;
state[1] = 0;
} else if (index > 0) {
writer.write(comma);
}
state[1] = encodeInteger(writer, range[1], state[1]);
var fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0);
encodeInteger(writer, fields, 0);
if (range.length === 6) {
var sourcesIndex = range[4],
scopesIndex = range[5];
if (sourcesIndex !== state[2]) {
state[3] = 0;
}
state[2] = encodeInteger(writer, sourcesIndex, state[2]);
state[3] = encodeInteger(writer, scopesIndex, state[3]);
}
if (callsite) {
var _range$callsite = range.callsite,
_sourcesIndex = _range$callsite[0],
callLine = _range$callsite[1],
callColumn = _range$callsite[2];
if (_sourcesIndex !== state[4]) {
state[5] = 0;
state[6] = 0;
} else if (callLine !== state[5]) {
state[6] = 0;
}
state[4] = encodeInteger(writer, _sourcesIndex, state[4]);
state[5] = encodeInteger(writer, callLine, state[5]);
state[6] = encodeInteger(writer, callColumn, state[6]);
}
if (bindings) {
var _iterator2 = _createForOfIteratorHelper(bindings),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var binding = _step2.value;
if (binding.length > 1) encodeInteger(writer, -binding.length, 0);
var expression = binding[0][0];
encodeInteger(writer, expression, 0);
var bindingStartLine = startLine;
var bindingStartColumn = startColumn;
for (var _i5 = 1; _i5 < binding.length; _i5++) {
var expRange = binding[_i5];
bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);
bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);
encodeInteger(writer, expRange[0], 0);
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
for (index++; index < ranges.length;) {
var next = ranges[index];
var l = next[0],
_c3 = next[1];
if (l > endLine || l === endLine && _c3 >= endColumn) {
break;
}
index = _encodeGeneratedRanges(ranges, index, writer, state);
}
if (state[0] < endLine) {
catchupLine(writer, state[0], endLine);
state[0] = endLine;
state[1] = 0;
} else {
writer.write(comma);
}
state[1] = encodeInteger(writer, endColumn, state[1]);
return index;
}
function catchupLine(writer, lastLine, line) {
do {
writer.write(semicolon);
} while (++lastLine < line);
}
// src/sourcemap-codec.ts
function decode(mappings) {
var length = mappings.length;
var reader = new StringReader(mappings);
var decoded = [];
var genColumn = 0;
var sourcesIndex = 0;
var sourceLine = 0;
var sourceColumn = 0;
var namesIndex = 0;
do {
var semi = reader.indexOf(";");
var line = [];
var sorted = true;
var lastCol = 0;
genColumn = 0;
while (reader.pos < semi) {
var seg = void 0;
genColumn = decodeInteger(reader, genColumn);
if (genColumn < lastCol) sorted = false;
lastCol = genColumn;
if (hasMoreVlq(reader, semi)) {
sourcesIndex = decodeInteger(reader, sourcesIndex);
sourceLine = decodeInteger(reader, sourceLine);
sourceColumn = decodeInteger(reader, sourceColumn);
if (hasMoreVlq(reader, semi)) {
namesIndex = decodeInteger(reader, namesIndex);
seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];
} else {
seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];
}
} else {
seg = [genColumn];
}
line.push(seg);
reader.pos++;
}
if (!sorted) sort(line);
decoded.push(line);
reader.pos = semi + 1;
} while (reader.pos <= length);
return decoded;
}
function sort(line) {
line.sort(sortComparator);
}
function sortComparator(a, b) {
return a[0] - b[0];
}
function encode(decoded) {
var writer = new StringWriter();
var sourcesIndex = 0;
var sourceLine = 0;
var sourceColumn = 0;
var namesIndex = 0;
for (var _i6 = 0; _i6 < decoded.length; _i6++) {
var line = decoded[_i6];
if (_i6 > 0) writer.write(semicolon);
if (line.length === 0) continue;
var genColumn = 0;
for (var j = 0; j < line.length; j++) {
var segment = line[j];
if (j > 0) writer.write(comma);
genColumn = encodeInteger(writer, segment[0], genColumn);
if (segment.length === 1) continue;
sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);
sourceLine = encodeInteger(writer, segment[2], sourceLine);
sourceColumn = encodeInteger(writer, segment[3], sourceColumn);
if (segment.length === 4) continue;
namesIndex = encodeInteger(writer, segment[4], namesIndex);
}
}
return writer.flush();
}
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var BitSet = /*#__PURE__*/function () {
function BitSet(arg) {
_classCallCheck(this, BitSet);
this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
}
return _createClass(BitSet, [{
key: "add",
value: function add(n) {
this.bits[n >> 5] |= 1 << (n & 31);
}
}, {
key: "has",
value: function has(n) {
return !!(this.bits[n >> 5] & 1 << (n & 31));
}
}]);
}();
var Chunk = /*#__PURE__*/function () {
function Chunk(start, end, content) {
_classCallCheck(this, Chunk);
this.start = start;
this.end = end;
this.original = content;
this.intro = '';
this.outro = '';
this.content = content;
this.storeName = false;
this.edited = false;
{
this.previous = null;
this.next = null;
}
}
return _createClass(Chunk, [{
key: "appendLeft",
value: function appendLeft(content) {
this.outro += content;
}
}, {
key: "appendRight",
value: function appendRight(content) {
this.intro = this.intro + content;
}
}, {
key: "clone",
value: function clone() {
var chunk = new Chunk(this.start, this.end, this.original);
chunk.intro = this.intro;
chunk.outro = this.outro;
chunk.content = this.content;
chunk.storeName = this.storeName;
chunk.edited = this.edited;
return chunk;
}
}, {
key: "contains",
value: function contains(index) {
return this.start < index && index < this.end;
}
}, {
key: "eachNext",
value: function eachNext(fn) {
var chunk = this;
while (chunk) {
fn(chunk);
chunk = chunk.next;
}
}
}, {
key: "eachPrevious",
value: function eachPrevious(fn) {
var chunk = this;
while (chunk) {
fn(chunk);
chunk = chunk.previous;
}
}
}, {
key: "edit",
value: function edit(content, storeName, contentOnly) {
this.content = content;
if (!contentOnly) {
this.intro = '';
this.outro = '';
}
this.storeName = storeName;
this.edited = true;
return this;
}
}, {
key: "prependLeft",
value: function prependLeft(content) {
this.outro = content + this.outro;
}
}, {
key: "prependRight",
value: function prependRight(content) {
this.intro = content + this.intro;
}
}, {
key: "reset",
value: function reset() {
this.intro = '';
this.outro = '';
if (this.edited) {
this.content = this.original;
this.storeName = false;
this.edited = false;
}
}
}, {
key: "split",
value: function split(index) {
var sliceIndex = index - this.start;
var originalBefore = this.original.slice(0, sliceIndex);
var originalAfter = this.original.slice(sliceIndex);
this.original = originalBefore;
var newChunk = new Chunk(index, this.end, originalAfter);
newChunk.outro = this.outro;
this.outro = '';
this.end = index;
if (this.edited) {
// after split we should save the edit content record into the correct chunk
// to make sure sourcemap correct
// For example:
// ' test'.trim()
// split -> ' ' + 'test'
// ✔️ edit -> '' + 'test'
// ✖️ edit -> 'test' + ''
// TODO is this block necessary?...
newChunk.edit('', false);
this.content = '';
} else {
this.content = originalBefore;
}
newChunk.next = this.next;
if (newChunk.next) newChunk.next.previous = newChunk;
newChunk.previous = this;
this.next = newChunk;
return newChunk;
}
}, {
key: "toString",
value: function toString() {
return this.intro + this.content + this.outro;
}
}, {
key: "trimEnd",
value: function trimEnd(rx) {
this.outro = this.outro.replace(rx, '');
if (this.outro.length) return true;
var trimmed = this.content.replace(rx, '');
if (trimmed.length) {
if (trimmed !== this.content) {
this.split(this.start + trimmed.length).edit('', undefined, true);
if (this.edited) {
// save the change, if it has been edited
this.edit(trimmed, this.storeName, true);
}
}
return true;
} else {
this.edit('', undefined, true);
this.intro = this.intro.replace(rx, '');
if (this.intro.length) return true;
}
}
}, {
key: "trimStart",
value: function trimStart(rx) {
this.intro = this.intro.replace(rx, '');
if (this.intro.length) return true;
var trimmed = this.content.replace(rx, '');
if (trimmed.length) {
if (trimmed !== this.content) {
var newChunk = this.split(this.end - trimmed.length);
if (this.edited) {
// save the change, if it has been edited
newChunk.edit(trimmed, this.storeName, true);
}
this.edit('', undefined, true);
}
return true;
} else {
this.edit('', undefined, true);
this.outro = this.outro.replace(rx, '');
if (this.outro.length) return true;
}
}
}]);
}();
function getBtoa() {
if (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {
return function (str) {
return globalThis.btoa(unescape(encodeURIComponent(str)));
};
} else if (typeof Buffer === 'function') {
return function (str) {
return Buffer.from(str, 'utf-8').toString('base64');
};
} else {
return function () {
throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
};
}
}
var btoa = /*#__PURE__*/getBtoa();
var SourceMap = /*#__PURE__*/function () {
function SourceMap(properties) {
_classCallCheck(this, SourceMap);
this.version = 3;
this.file = properties.file;
this.sources = properties.sources;
this.sourcesContent = properties.sourcesContent;
this.names = properties.names;
this.mappings = encode(properties.mappings);
if (typeof properties.x_google_ignoreList !== 'undefined') {
this.x_google_ignoreList = properties.x_google_ignoreList;
}
if (typeof properties.debugId !== 'undefined') {
this.debugId = properties.debugId;
}
}
return _createClass(SourceMap, [{
key: "toString",
value: function toString() {
return JSON.stringify(this);
}
}, {
key: "toUrl",
value: function toUrl() {
return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
}
}]);
}();
function guessIndent(code) {
var lines = code.split('\n');
var tabbed = lines.filter(function (line) {
return /^\t+/.test(line);
});
var spaced = lines.filter(function (line) {
return /^ {2,}/.test(line);
});
if (tabbed.length === 0 && spaced.length === 0) {
return null;
}
// More lines tabbed than spaced? Assume tabs, and
// default to tabs in the case of a tie (or nothing
// to go on)
if (tabbed.length >= spaced.length) {
return '\t';
}
// Otherwise, we need to guess the multiple
var min = spaced.reduce(function (previous, current) {
var numSpaces = /^ +/.exec(current)[0].length;
return Math.min(numSpaces, previous);
}, Infinity);
return new Array(min + 1).join(' ');
}
function getRelativePath(from, to) {
var fromParts = from.split(/[/\\]/);
var toParts = to.split(/[/\\]/);
fromParts.pop(); // get dirname
while (fromParts[0] === toParts[0]) {
fromParts.shift();
toParts.shift();
}
if (fromParts.length) {
var i = fromParts.length;
while (i--) fromParts[i] = '..';
}
return fromParts.concat(toParts).join('/');
}
var toString = Object.prototype.toString;
function isObject(thing) {
return toString.call(thing) === '[object Object]';
}
function getLocator(source) {
var originalLines = source.split('\n');
var lineOffsets = [];
for (var i = 0, pos = 0; i < originalLines.length; i++) {
lineOffsets.push(pos);
pos += originalLines[i].length + 1;
}
return function locate(index) {
var i = 0;
var j = lineOffsets.length;
while (i < j) {
var m = i + j >> 1;
if (index < lineOffsets[m]) {
j = m;
} else {
i = m + 1;
}
}
var line = i - 1;
var column = index - lineOffsets[line];
return {
line: line,
column: column
};
};
}
var wordRegex = /\w/;
var Mappings = /*#__PURE__*/function () {
function Mappings(hires) {
_classCallCheck(this, Mappings);
this.hires = hires;
this.generatedCodeLine = 0;
this.generatedCodeColumn = 0;
this.raw = [];
this.rawSegments = this.raw[this.generatedCodeLine] = [];
this.pending = null;
}
return _createClass(Mappings, [{
key: "addEdit",
value: function addEdit(sourceIndex, content, loc, nameIndex) {
if (content.length) {
var contentLengthMinusOne = content.length - 1;
var contentLineEnd = content.indexOf('\n', 0);
var previousContentLineEnd = -1;
// Loop through each line in the content and add a segment, but stop if the last line is empty,
// else code afterwards would fill one line too many
while (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {
var _segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
if (nameIndex >= 0) {
_segment.push(nameIndex);
}
this.rawSegments.push(_segment);
this.generatedCodeLine += 1;
this.raw[this.generatedCodeLine] = this.rawSegments = [];
this.generatedCodeColumn = 0;
previousContentLineEnd = contentLineEnd;
contentLineEnd = content.indexOf('\n', contentLineEnd + 1);
}
var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
if (nameIndex >= 0) {
segment.push(nameIndex);
}
this.rawSegments.push(segment);
this.advance(content.slice(previousContentLineEnd + 1));
} else if (this.pending) {
this.rawSegments.push(this.pending);
this.advance(content);
}
this.pending = null;
}
}, {
key: "addUneditedChunk",
value: function addUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {
var originalCharIndex = chunk.start;
var first = true;
// when iterating each char, check if it's in a word boundary
var charInHiresBoundary = false;
while (originalCharIndex < chunk.end) {
if (original[originalCharIndex] === '\n') {
loc.line += 1;
loc.column = 0;
this.generatedCodeLine += 1;
this.raw[this.generatedCodeLine] = this.rawSegments = [];
this.generatedCodeColumn = 0;
first = true;
charInHiresBoundary = false;
} else {
if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
if (this.hires === 'boundary') {
// in hires "boundary", group segments per word boundary than per char
if (wordRegex.test(original[originalCharIndex])) {
// for first char in the boundary found, start the boundary by pushing a segment
if (!charInHiresBoundary) {
this.rawSegments.push(segment);
charInHiresBoundary = true;
}
} else {
// for non-word char, end the boundary by pushing a segment
this.rawSegments.push(segment);
charInHiresBoundary = false;
}
} else {
this.rawSegments.push(segment);
}
}
loc.column += 1;
this.generatedCodeColumn += 1;
first = false;
}
originalCharIndex += 1;
}
this.pending = null;
}
}, {
key: "advance",
value: function advance(str) {
if (!str) return;
var lines = str.split('\n');
if (lines.length > 1) {
for (var i = 0; i < lines.length - 1; i++) {
this.generatedCodeLine++;
this.raw[this.generatedCodeLine] = this.rawSegments = [];
}
this.generatedCodeColumn = 0;
}
this.generatedCodeColumn += lines[lines.length - 1].length;
}
}]);
}();
var n = '\n';
var warned = {
insertLeft: false,
insertRight: false,
storeName: false
};
var MagicString = /*#__PURE__*/function () {
function MagicString(string) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, MagicString);
var chunk = new Chunk(0, string.length, string);
Object.defineProperties(this, {
original: {
writable: true,
value: string
},
outro: {
writable: true,
value: ''
},
intro: {
writable: true,
value: ''
},
firstChunk: {
writable: true,
value: chunk
},
lastChunk: {
writable: true,
value: chunk
},
lastSearchedChunk: {
writable: true,
value: chunk
},
byStart: {
writable: true,
value: {}
},
byEnd: {
writable: true,
value: {}
},
filename: {
writable: true,
value: options.filename
},
indentExclusionRanges: {
writable: true,
value: options.indentExclusionRanges
},
sourcemapLocations: {
writable: true,
value: new BitSet()
},
storedNames: {
writable: true,
value: {}
},
indentStr: {
writable: true,
value: undefined
},
ignoreList: {
writable: true,
value: options.ignoreList
},
offset: {
writable: true,
value: options.offset || 0
}
});
this.byStart[0] = chunk;
this.byEnd[string.length] = chunk;
}
return _createClass(MagicString, [{
key: "addSourcemapLocation",
value: function addSourcemapLocation(char) {
this.sourcemapLocations.add(char);
}
}, {
key: "append",
value: function append(content) {
if (typeof content !== 'string') throw new TypeError('outro content must be a string');
this.outro += content;
return this;
}
}, {
key: "appendLeft",
value: function appendLeft(index, content) {
index = index + this.offset;
if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
this._split(index);
var chunk = this.byEnd[index];
if (chunk) {
chunk.appendLeft(content);
} else {
this.intro += content;
}
return this;
}
}, {
key: "appendRight",
value: function appendRight(index, content) {
index = index + this.offset;
if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
this._split(index);
var chunk = this.byStart[index];
if (chunk) {
chunk.appendRight(content);
} else {
this.outro += content;
}
return this;
}
}, {
key: "clone",
value: function clone() {
var cloned = new MagicString(this.original, {
filename: this.filename,
offset: this.offset
});
var originalChunk = this.firstChunk;
var clonedChunk = cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone();
while (originalChunk) {
cloned.byStart[clonedChunk.start] = clonedChunk;
cloned.byEnd[clonedChunk.end] = clonedChunk;
var nextOriginalChunk = originalChunk.next;
var nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();
if (nextClonedChunk) {
clonedChunk.next = nextClonedChunk;
nextClonedChunk.previous = clonedChunk;
clonedChunk = nextClonedChunk;
}
originalChunk = nextOriginalChunk;
}
cloned.lastChunk = clonedChunk;
if (this.indentExclusionRanges) {
cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
}
cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
cloned.intro = this.intro;
cloned.outro = this.outro;
return cloned;
}
}, {
key: "generateDecodedMap",
value: function generateDecodedMap(options) {
var _this = this;
options = options || {};
var sourceIndex = 0;
var names = Object.keys(this.storedNames);
var mappings = new Mappings(options.hires);
var locate = getLocator(this.original);
if (this.intro) {
mappings.advance(this.intro);
}
this.firstChunk.eachNext(function (chunk) {
var loc = locate(chunk.start);
if (chunk.intro.length) mappings.advance(chunk.intro);
if (chunk.edited) {
mappings.addEdit(sourceIndex, chunk.content, loc, chunk.storeName ? names.indexOf(chunk.original) : -1);
} else {
mappings.addUneditedChunk(sourceIndex, chunk, _this.original, loc, _this.sourcemapLocations);
}
if (chunk.outro.length) mappings.advance(chunk.outro);
});
return {
file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
sources: [options.source ? getRelativePath(options.file || '', options.source) : options.file || ''],
sourcesContent: options.includeContent ? [this.original] : undefined,
names: names,
mappings: mappings.raw,
x_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined
};
}
}, {
key: "generateMap",
value: function generateMap(options) {
return new SourceMap(this.generateDecodedMap(options));
}
}, {
key: "_ensureindentStr",
value: function _ensureindentStr() {
if (this.indentStr === undefined) {
this.indentStr = guessIndent(this.original);
}
}
}, {
key: "_getRawIndentString",
value: function _getRawIndentString() {
this._ensureindentStr();
return this.indentStr;
}
}, {
key: "getIndentString",
value: function getIndentString() {
this._ensureindentStr();
return this.indentStr === null ? '\t' : this.indentStr;
}
}, {
key: "indent",
value: function indent(indentStr, options) {
var pattern = /^[^\r\n]/gm;
if (isObject(indentStr)) {
options = indentStr;
indentStr = undefined;
}
if (indentStr === undefined) {
this._ensureindentStr();
indentStr = this.indentStr || '\t';
}
if (indentStr === '') return this; // noop
options = options || {};
// Process exclusion ranges
var isExcluded = {};
if (options.exclude) {
var exclusions = typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
exclusions.forEach(function (exclusion) {
for (var i = exclusion[0]; i < exclusion[1]; i += 1) {
isExcluded[i] = true;
}
});
}
var shouldIndentNextCharacter = options.indentStart !== false;
var replacer = function replacer(match) {
if (shouldIndentNextCharacter) return "".concat(indentStr).concat(match);
shouldIndentNextCharacter = true;
return match;
};
this.intro = this.intro.replace(pattern, replacer);
var charIndex = 0;
var chunk = this.firstChunk;
while (chunk) {
var end = chunk.end;
if (chunk.edited) {
if (!isExcluded[charIndex]) {
chunk.content = chunk.content.replace(pattern, replacer);
if (chunk.content.length) {
shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
}
}
} else {
charIndex = chunk.start;
while (charIndex < end) {
if (!isExcluded[charIndex]) {
var char = this.original[charIndex];
if (char === '\n') {
shouldIndentNextCharacter = true;
} else if (char !== '\r' && shouldIndentNextCharacter) {
shouldIndentNextCharacter = false;
if (charIndex === chunk.start) {
chunk.prependRight(indentStr);
} else {
this._splitChunk(chunk, charIndex);
chunk = chunk.next;
chunk.prependRight(indentStr);
}
}
}
charIndex += 1;
}
}
charIndex = chunk.end;
chunk = chunk.next;
}
this.outro = this.outro.replace(pattern, replacer);
return this;
}
}, {
key: "insert",
value: function insert() {
throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');
}
}, {
key: "insertLeft",
value: function insertLeft(index, content) {
if (!warned.insertLeft) {
console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead');
warned.insertLeft = true;
}
return this.appendLeft(index, content);
}
}, {
key: "insertRight",
value: function insertRight(index, content) {
if (!warned.insertRight) {
console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead');
warned.insertRight = true;
}
return this.prependRight(index, content);
}
}, {
key: "move",
value: function move(start, end, index) {
start = start + this.offset;
end = end + this.offset;
index = index + this.offset;
if (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');
this._split(start);
this._split(end);
this._split(index);
var first = this.byStart[start];
var last = this.byEnd[end];
var oldLeft = first.previous;
var oldRight = last.next;
var newRight = this.byStart[index];
if (!newRight && last === this.lastChunk) return this;
var newLeft = newRight ? newRight.previous : this.lastChunk;
if (oldLeft) oldLeft.next = oldRight;
if (oldRight) oldRight.previous = oldLeft;
if (newLeft) newLeft.next = first;
if (newRight) newRight.previous = last;
if (!first.previous) this.firstChunk = last.next;
if (!last.next) {
this.lastChunk = first.previous;
this.lastChunk.next = null;
}
first.previous = newLeft;
last.next = newRight || null;
if (!newLeft) this.firstChunk = first;
if (!newRight) this.lastChunk = last;
return this;
}
}, {
key: "overwrite",
value: function overwrite(start, end, content, options) {
options = options || {};
return this.update(start, end, content, _objectSpread(_objectSpread({}, options), {}, {
overwrite: !options.contentOnly
}));
}
}, {
key: "update",
value: function update(start, end, content, options) {
start = start + this.offset;
end = end + this.offset;
if (typeof content !== 'string') throw new TypeError('replacement content must be a string');
if (this.original.length !== 0) {
while (start < 0) start += this.original.length;
while (end < 0) end += this.original.length;
}
if (end > this.original.length) throw new Error('end is out of bounds');
if (start === end) throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead');
this._split(start);
this._split(end);
if (options === true) {
if (!warned.storeName) {
console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string');
warned.storeName = true;
}
options = {
storeName: true
};
}
var storeName = options !== undefined ? options.storeName : false;
var overwrite = options !== undefined ? options.overwrite : false;
if (storeName) {
var original = this.original.slice(start, end);
Object.defineProperty(this.storedNames, original, {
writable: true,
value: true,
enumerable: true
});
}
var first = this.byStart[start];
var last = this.byEnd[end];
if (first) {
var chunk = first;
while (chunk !== last) {
if (chunk.next !== this.byStart[chunk.end]) {
throw new Error('Cannot overwrite across a split point');
}
chunk = chunk.next;
chunk.edit('', false);
}
first.edit(content, storeName, !overwrite);
} else {
// must be inserting at the end
var newChunk = new Chunk(start, end, '').edit(content, storeName);
// TODO last chunk in the array may not be the last chunk, if it's moved...
last.next = newChunk;
newChunk.previous = last;
}
return this;
}
}, {
key: "prepend",
value: function prepend(content) {
if (typeof content !== 'string') throw new TypeError('outro content must be a string');
this.intro = content + this.intro;
return this;
}
}, {
key: "prependLeft",
value: function prependLeft(index, content) {
index = index + this.offset;
if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
this._split(index);
var chunk = this.byEnd[index];
if (chunk) {
chunk.prependLeft(content);
} else {
this.intro = content + this.intro;
}
return this;
}
}, {
key: "prependRight",
value: function prependRight(index, content) {
index = index + this.offset;
if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
this._split(index);
var chunk = this.byStart[index];
if (chunk) {
chunk.prependRight(content);
} else {
this.outro = content + this.outro;
}
return this;
}
}, {
key: "remove",
value: function remove(start, end) {
start = start + this.offset;
end = end + this.offset;
if (this.original.length !== 0) {
while (start < 0) start += this.original.length;
while (end < 0) end += this.original.length;
}
if (start === end) return this;
if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
if (start > end) throw new Error('end must be greater than start');
this._split(start);
this._split(end);
var chunk = this.byStart[start];
while (chunk) {
chunk.intro = '';
chunk.outro = '';
chunk.edit('');
chunk = end > chunk.end ? this.byStart[chunk.end] : null;
}
return this;
}
}, {
key: "reset",
value: function reset(start, end) {
start = start + this.offset;
end = end + this.offset;
if (this.original.length !== 0) {
while (start < 0) start += this.original.length;
while (end < 0) end += this.original.length;
}
if (start === end) return this;
if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
if (start > end) throw new Error('end must be greater than start');
this._split(start);
this._split(end);
var chunk = this.byStart[start];
while (chunk) {
chunk.reset();
chunk = end > chunk.end ? this.byStart[chunk.end] : null;
}
return this;
}
}, {
key: "lastChar",
value: function lastChar() {
if (this.outro.length) return this.outro[this.outro.length - 1];
var chunk = this.lastChunk;
do {
if (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];
if (chunk.content.length) return chunk.content[chunk.content.length - 1];
if (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];
} while (chunk = chunk.previous);
if (this.intro.length) return this.intro[this.intro.length - 1];
return '';
}
}, {
key: "lastLine",
value: function lastLine() {
var lineIndex = this.outro.lastIndexOf(n);
if (lineIndex !== -1) return this.outro.substr(lineIndex + 1);
var lineStr = this.outro;
var chunk = this.lastChunk;
do {
if (chunk.outro.length > 0) {
lineIndex = chunk.outro.lastIndexOf(n);
if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;
lineStr = chunk.outro + lineStr;
}
if (chunk.content.length > 0) {
lineIndex = chunk.content.lastIndexOf(n);
if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;
lineStr = chunk.content + lineStr;
}
if (chunk.intro.length > 0) {
lineIndex = chunk.intro.lastIndexOf(n);
if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;
lineStr = chunk.intro + lineStr;
}
} while (chunk = chunk.previous);
lineIndex = this.intro.lastIndexOf(n);
if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;
return this.intro + lineStr;
}
}, {
key: "slice",
value: function slice() {
var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.original.length - this.offset;
start = start + this.offset;
end = end + this.offset;
if (this.original.length !== 0) {
while (start < 0) start += this.original.length;
while (end < 0) end += this.original.length;
}
var result = '';
// find start chunk
var chunk = this.firstChunk;
while (chunk && (chunk.start > start || chunk.end <= start)) {
// found end chunk before start
if (chunk.start < end && chunk.end >= end) {
return result;
}
chunk = chunk.next;
}
if (chunk && chunk.edited && chunk.start !== start) throw new Error("Cannot use replaced character ".concat(start, " as slice start anchor."));
var startChunk = chunk;
while (chunk) {
if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
result += chunk.intro;
}
var containsEnd = chunk.start < end && chunk.end >= end;
if (containsEnd && chunk.edited && chunk.end !== end) throw new Error("Cannot use replaced character ".concat(end, " as slice end anchor."));
var sliceStart = startChunk === chunk ? start - chunk.start : 0;
var sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;
result += chunk.content.slice(sliceStart, sliceEnd);
if (chunk.outro && (!containsEnd || chunk.end === end)) {
result += chunk.outro;
}
if (containsEnd) {
break;
}
chunk = chunk.next;
}
return result;
}
// TODO deprecate this? not really very useful
}, {
key: "snip",
value: function snip(start, end) {
var clone = this.clone();
clone.remove(0, start);
clone.remove(end, clone.original.length);
return clone;
}
}, {
key: "_split",
value: function _split(index) {
if (this.byStart[index] || this.byEnd[index]) return;
var chunk = this.lastSearchedChunk;
var searchForward = index > chunk.end;
while (chunk) {
if (chunk.contains(index)) return this._splitChunk(chunk, index);
chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
}
}
}, {
key: "_splitChunk",
value: function _splitChunk(chunk, index) {
if (chunk.edited && chunk.content.length) {
// zero-length edited chunks are a special case (overlapping replacements)
var loc = getLocator(this.original)(index);
throw new Error("Cannot split a chunk that has already been edited (".concat(loc.line, ":").concat(loc.column, " \u2013 \"").concat(chunk.original, "\")"));
}
var newChunk = chunk.split(index);
this.byEnd[index] = chunk;
this.byStart[index] = newChunk;
this.byEnd[newChunk.end] = newChunk;
if (chunk === this.lastChunk) this.lastChunk = newChunk;
this.lastSearchedChunk = chunk;
return true;
}
}, {
key: "toString",
value: function toString() {
var str = this.intro;
var chunk = this.firstChunk;
while (chunk) {
str += chunk.toString();
chunk = chunk.next;
}
return str + this.outro;
}
}, {
key: "isEmpty",
value: function isEmpty() {
var chunk = this.firstChunk;
do {
if (chunk.intro.length && chunk.intro.trim() || chunk.content.length && chunk.content.trim() || chunk.outro.length && chunk.outro.trim()) return false;
} while (chunk = chunk.next);
return true;
}
}, {
key: "length",
value: function length() {
var chunk = this.firstChunk;
var length = 0;
do {
length += chunk.intro.length + chunk.content.length + chunk.outro.length;
} while (chunk = chunk.next);
return length;
}
}, {
key: "trimLines",
value: function trimLines() {
return this.trim('[\\r\\n]');
}
}, {
key: "trim",
value: function trim(charType) {
return this.trimStart(charType).t