优化日志域名信息查询API
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# Netscape HTTP Cookie File
|
||||
# https://curl.se/docs/http-cookies.html
|
||||
# This file was generated by libcurl! Edit at your own risk.
|
||||
|
||||
#HttpOnly_localhost FALSE / FALSE 1773506861 session_id 1773420461963447542_2
|
||||
+306
-1092
File diff suppressed because it is too large
Load Diff
+203383
-232594
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"blockedDomainsCount": {},
|
||||
"resolvedDomainsCount": {},
|
||||
"lastSaved": "2026-03-30T01:01:52.77650853+08:00"
|
||||
"lastSaved": "2026-03-30T09:21:52.777097039+08:00"
|
||||
}
|
||||
+683
-399
File diff suppressed because it is too large
Load Diff
@@ -1,21 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
// 读取文件内容
|
||||
const content = fs.readFileSync('./static/api/js/index.js', 'utf8');
|
||||
|
||||
// 提取swaggerDocument部分
|
||||
const match = content.match(/const swaggerDocument = (.*?);/s);
|
||||
|
||||
if (match) {
|
||||
const jsonStr = match[1];
|
||||
console.log('JSON字符串长度:', jsonStr.length);
|
||||
|
||||
// 显示错误位置附近的内容
|
||||
const errorPos = 70599;
|
||||
const start = Math.max(0, errorPos - 200);
|
||||
const end = Math.min(jsonStr.length, errorPos + 200);
|
||||
console.log('错误位置附近的内容:');
|
||||
console.log(jsonStr.substring(start, end));
|
||||
} else {
|
||||
console.log('未找到swaggerDocument定义');
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
import socket
|
||||
import struct
|
||||
|
||||
class DNSServer:
|
||||
def __init__(self, host='0.0.0.0', port=53):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self.socket.bind((self.host, self.port))
|
||||
print(f"DNS Server started on {self.host}:{self.port}")
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
try:
|
||||
data, addr = self.socket.recvfrom(512)
|
||||
print(f"Received query from {addr}")
|
||||
response = self.handle_query(data)
|
||||
self.socket.sendto(response, addr)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
def handle_query(self, data):
|
||||
# 解析查询
|
||||
header = data[:12]
|
||||
query_id, flags, qdcount, ancount, nscount, arcount = struct.unpack('!HHHHHH', header)
|
||||
|
||||
# 构建响应头部
|
||||
# 设置响应标志
|
||||
flags = 0x8400 # 标准查询响应,无错误
|
||||
|
||||
# 解析查询部分
|
||||
offset = 12
|
||||
queries = []
|
||||
for _ in range(qdcount):
|
||||
qname, offset = self._parse_name(data, offset)
|
||||
qtype, qclass = struct.unpack('!HH', data[offset:offset+4])
|
||||
offset += 4
|
||||
queries.append((qname, qtype, qclass))
|
||||
|
||||
# 构建响应
|
||||
response = header[:2] # 保留查询ID
|
||||
response += struct.pack('!H', flags)
|
||||
response += struct.pack('!HHHH', qdcount, 0, 0, 0) # 暂时没有回答、权威和附加记录
|
||||
|
||||
# 添加查询部分
|
||||
for qname, qtype, qclass in queries:
|
||||
response += self._encode_name(qname)
|
||||
response += struct.pack('!HH', qtype, qclass)
|
||||
|
||||
return response
|
||||
|
||||
def _parse_name(self, data, offset):
|
||||
parts = []
|
||||
while True:
|
||||
length = data[offset]
|
||||
if length == 0:
|
||||
offset += 1
|
||||
break
|
||||
offset += 1
|
||||
parts.append(data[offset:offset+length].decode('utf-8'))
|
||||
offset += length
|
||||
return '.'.join(parts), offset
|
||||
|
||||
def _encode_name(self, name):
|
||||
encoded = b''
|
||||
for part in name.split('.'):
|
||||
encoded += struct.pack('!B', len(part))
|
||||
encoded += part.encode('utf-8')
|
||||
encoded += b'\x00' # 结束标记
|
||||
return encoded
|
||||
|
||||
if __name__ == '__main__':
|
||||
server = DNSServer()
|
||||
server.run()
|
||||
+188236
File diff suppressed because it is too large
Load Diff
-1
@@ -1 +0,0 @@
|
||||
../acorn/bin/acorn
|
||||
-1
@@ -1 +0,0 @@
|
||||
../baseline-browser-mapping/dist/cli.cjs
|
||||
-1
@@ -1 +0,0 @@
|
||||
../browserslist/cli.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../cssesc/bin/cssesc
|
||||
-1
@@ -1 +0,0 @@
|
||||
../envinfo/dist/cli.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../flat/cli.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../import-local/fixtures/cli.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../nanoid/bin/nanoid.cjs
|
||||
-1
@@ -1 +0,0 @@
|
||||
../which/bin/node-which
|
||||
-1
@@ -1 +0,0 @@
|
||||
../resolve/bin/resolve
|
||||
-1
@@ -1 +0,0 @@
|
||||
../semver/bin/semver.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../svgo/bin/svgo
|
||||
-1
@@ -1 +0,0 @@
|
||||
../terser/bin/terser
|
||||
-1
@@ -1 +0,0 @@
|
||||
../update-browserslist-db/cli.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../webpack/bin/webpack.js
|
||||
-1
@@ -1 +0,0 @@
|
||||
../webpack-cli/bin/cli.js
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Roman Dvornov <rdvornov@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-256
@@ -1,256 +0,0 @@
|
||||
# json-ext
|
||||
|
||||
[](https://www.npmjs.com/package/@discoveryjs/json-ext)
|
||||
[](https://github.com/discoveryjs/json-ext/actions/workflows/ci.yml)
|
||||
[](https://coveralls.io/github/discoveryjs/json-ext?)
|
||||
[](https://www.npmjs.com/package/@discoveryjs/json-ext)
|
||||
|
||||
A set of utilities that extend the use of JSON. Designed to be fast and memory efficient
|
||||
|
||||
Features:
|
||||
|
||||
- [x] `parseChunked()` – Parse JSON that comes by chunks (e.g. FS readable stream or fetch response stream)
|
||||
- [x] `stringifyStream()` – Stringify stream (Node.js)
|
||||
- [x] `stringifyInfo()` – Get estimated size and other facts of JSON.stringify() without converting a value to string
|
||||
- [ ] **TBD** Support for circular references
|
||||
- [ ] **TBD** Binary representation [branch](https://github.com/discoveryjs/json-ext/tree/binary)
|
||||
- [ ] **TBD** WHATWG [Streams](https://streams.spec.whatwg.org/) support
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npm install @discoveryjs/json-ext
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
- [parseChunked(chunkEmitter)](#parsechunkedchunkemitter)
|
||||
- [stringifyStream(value[, replacer[, space]])](#stringifystreamvalue-replacer-space)
|
||||
- [stringifyInfo(value[, replacer[, space[, options]]])](#stringifyinfovalue-replacer-space-options)
|
||||
- [Options](#options)
|
||||
- [async](#async)
|
||||
- [continueOnCircular](#continueoncircular)
|
||||
- [version](#version)
|
||||
|
||||
### parseChunked(chunkEmitter)
|
||||
|
||||
Works the same as [`JSON.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) but takes `chunkEmitter` instead of string and returns [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
|
||||
|
||||
> NOTE: `reviver` parameter is not supported yet, but will be added in next releases.
|
||||
> NOTE: WHATWG streams aren't supported yet
|
||||
|
||||
When to use:
|
||||
- It's required to avoid freezing the main thread during big JSON parsing, since this process can be distributed in time
|
||||
- Huge JSON needs to be parsed (e.g. >500MB on Node.js)
|
||||
- Needed to reduce memory pressure. `JSON.parse()` needs to receive the entire JSON before parsing it. With `parseChunked()` you may parse JSON as first bytes of it comes. This approach helps to avoid storing a huge string in the memory at a single time point and following GC.
|
||||
|
||||
[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#parse-chunked)
|
||||
|
||||
Usage:
|
||||
|
||||
```js
|
||||
const { parseChunked } = require('@discoveryjs/json-ext');
|
||||
|
||||
// as a regular Promise
|
||||
parseChunked(chunkEmitter)
|
||||
.then(data => {
|
||||
/* data is parsed JSON */
|
||||
});
|
||||
|
||||
// using await (keep in mind that not every runtime has a support for top level await)
|
||||
const data = await parseChunked(chunkEmitter);
|
||||
```
|
||||
|
||||
Parameter `chunkEmitter` can be:
|
||||
- [`ReadableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_readable_streams) (Node.js only)
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const { parseChunked } = require('@discoveryjs/json-ext');
|
||||
|
||||
parseChunked(fs.createReadStream('path/to/file.json'))
|
||||
```
|
||||
- Generator, async generator or function that returns iterable (chunks). Chunk might be a `string`, `Uint8Array` or `Buffer` (Node.js only):
|
||||
```js
|
||||
const { parseChunked } = require('@discoveryjs/json-ext');
|
||||
const encoder = new TextEncoder();
|
||||
|
||||
// generator
|
||||
parseChunked(function*() {
|
||||
yield '{ "hello":';
|
||||
yield Buffer.from(' "wor'); // Node.js only
|
||||
yield encoder.encode('ld" }'); // returns Uint8Array(5) [ 108, 100, 34, 32, 125 ]
|
||||
});
|
||||
|
||||
// async generator
|
||||
parseChunked(async function*() {
|
||||
for await (const chunk of someAsyncSource) {
|
||||
yield chunk;
|
||||
}
|
||||
});
|
||||
|
||||
// function that returns iterable
|
||||
parseChunked(() => ['{ "hello":', ' "world"}'])
|
||||
```
|
||||
|
||||
Using with [fetch()](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API):
|
||||
|
||||
```js
|
||||
async function loadData(url) {
|
||||
const response = await fetch(url);
|
||||
const reader = response.body.getReader();
|
||||
|
||||
return parseChunked(async function*() {
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
|
||||
yield value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
loadData('https://example.com/data.json')
|
||||
.then(data => {
|
||||
/* data is parsed JSON */
|
||||
})
|
||||
```
|
||||
|
||||
### stringifyStream(value[, replacer[, space]])
|
||||
|
||||
Works the same as [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but returns an instance of [`ReadableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_readable_streams) instead of string.
|
||||
|
||||
> NOTE: WHATWG Streams aren't supported yet, so function available for Node.js only for now
|
||||
|
||||
Departs from JSON.stringify():
|
||||
- Outputs `null` when `JSON.stringify()` returns `undefined` (since streams may not emit `undefined`)
|
||||
- A promise is resolving and the resulting value is stringifying as a regular one
|
||||
- A stream in non-object mode is piping to output as is
|
||||
- A stream in object mode is piping to output as an array of objects
|
||||
|
||||
When to use:
|
||||
- Huge JSON needs to be generated (e.g. >500MB on Node.js)
|
||||
- Needed to reduce memory pressure. `JSON.stringify()` needs to generate the entire JSON before send or write it to somewhere. With `stringifyStream()` you may send a result to somewhere as first bytes of the result appears. This approach helps to avoid storing a huge string in the memory at a single time point.
|
||||
- The object being serialized contains Promises or Streams (see Usage for examples)
|
||||
|
||||
[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#stream-stringifying)
|
||||
|
||||
Usage:
|
||||
|
||||
```js
|
||||
const { stringifyStream } = require('@discoveryjs/json-ext');
|
||||
|
||||
// handle events
|
||||
stringifyStream(data)
|
||||
.on('data', chunk => console.log(chunk))
|
||||
.on('error', error => consold.error(error))
|
||||
.on('finish', () => console.log('DONE!'));
|
||||
|
||||
// pipe into a stream
|
||||
stringifyStream(data)
|
||||
.pipe(writableStream);
|
||||
```
|
||||
|
||||
Using Promise or ReadableStream in serializing object:
|
||||
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const { stringifyStream } = require('@discoveryjs/json-ext');
|
||||
|
||||
// output will be
|
||||
// {"name":"example","willSerializeResolvedValue":42,"fromFile":[1, 2, 3],"at":{"any":{"level":"promise!"}}}
|
||||
stringifyStream({
|
||||
name: 'example',
|
||||
willSerializeResolvedValue: Promise.resolve(42),
|
||||
fromFile: fs.createReadStream('path/to/file.json'), // support file content is "[1, 2, 3]", it'll be inserted as it
|
||||
at: {
|
||||
any: {
|
||||
level: new Promise(resolve => setTimeout(() => resolve('promise!'), 100))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// in case several async requests are used in object, it's prefered
|
||||
// to put fastest requests first, because in this case
|
||||
stringifyStream({
|
||||
foo: fetch('http://example.com/request_takes_2s').then(req => req.json()),
|
||||
bar: fetch('http://example.com/request_takes_5s').then(req => req.json())
|
||||
});
|
||||
```
|
||||
|
||||
Using with [`WritableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_writable_streams) (Node.js only):
|
||||
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const { stringifyStream } = require('@discoveryjs/json-ext');
|
||||
|
||||
// pipe into a console
|
||||
stringifyStream(data)
|
||||
.pipe(process.stdout);
|
||||
|
||||
// pipe into a file
|
||||
stringifyStream(data)
|
||||
.pipe(fs.createWriteStream('path/to/file.json'));
|
||||
|
||||
// wrapping into a Promise
|
||||
new Promise((resolve, reject) => {
|
||||
stringifyStream(data)
|
||||
.on('error', reject)
|
||||
.pipe(stream)
|
||||
.on('error', reject)
|
||||
.on('finish', resolve);
|
||||
});
|
||||
```
|
||||
|
||||
### stringifyInfo(value[, replacer[, space[, options]]])
|
||||
|
||||
`value`, `replacer` and `space` arguments are the same as for `JSON.stringify()`.
|
||||
|
||||
Result is an object:
|
||||
|
||||
```js
|
||||
{
|
||||
minLength: Number, // minimal bytes when values is stringified
|
||||
circular: [...], // list of circular references
|
||||
duplicate: [...], // list of objects that occur more than once
|
||||
async: [...] // list of async values, i.e. promises and streams
|
||||
}
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
const { stringifyInfo } = require('@discoveryjs/json-ext');
|
||||
|
||||
console.log(
|
||||
stringifyInfo({ test: true }).minLength
|
||||
);
|
||||
// > 13
|
||||
// that equals '{"test":true}'.length
|
||||
```
|
||||
|
||||
#### Options
|
||||
|
||||
##### async
|
||||
|
||||
Type: `Boolean`
|
||||
Default: `false`
|
||||
|
||||
Collect async values (promises and streams) or not.
|
||||
|
||||
##### continueOnCircular
|
||||
|
||||
Type: `Boolean`
|
||||
Default: `false`
|
||||
|
||||
Stop collecting info for a value or not whenever circular reference is found. Setting option to `true` allows to find all circular references.
|
||||
|
||||
### version
|
||||
|
||||
The version of library, e.g. `"0.3.1"`.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
-791
@@ -1,791 +0,0 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.jsonExt = factory());
|
||||
})(this, (function () { 'use strict';
|
||||
|
||||
var version = "0.5.7";
|
||||
|
||||
const PrimitiveType = 1;
|
||||
const ObjectType = 2;
|
||||
const ArrayType = 3;
|
||||
const PromiseType = 4;
|
||||
const ReadableStringType = 5;
|
||||
const ReadableObjectType = 6;
|
||||
// https://tc39.es/ecma262/#table-json-single-character-escapes
|
||||
const escapableCharCodeSubstitution$1 = { // JSON Single Character Escape Sequences
|
||||
0x08: '\\b',
|
||||
0x09: '\\t',
|
||||
0x0a: '\\n',
|
||||
0x0c: '\\f',
|
||||
0x0d: '\\r',
|
||||
0x22: '\\\"',
|
||||
0x5c: '\\\\'
|
||||
};
|
||||
|
||||
function isLeadingSurrogate$1(code) {
|
||||
return code >= 0xD800 && code <= 0xDBFF;
|
||||
}
|
||||
|
||||
function isTrailingSurrogate$1(code) {
|
||||
return code >= 0xDC00 && code <= 0xDFFF;
|
||||
}
|
||||
|
||||
function isReadableStream$1(value) {
|
||||
return (
|
||||
typeof value.pipe === 'function' &&
|
||||
typeof value._read === 'function' &&
|
||||
typeof value._readableState === 'object' && value._readableState !== null
|
||||
);
|
||||
}
|
||||
|
||||
function replaceValue$1(holder, key, value, replacer) {
|
||||
if (value && typeof value.toJSON === 'function') {
|
||||
value = value.toJSON();
|
||||
}
|
||||
|
||||
if (replacer !== null) {
|
||||
value = replacer.call(holder, String(key), value);
|
||||
}
|
||||
|
||||
switch (typeof value) {
|
||||
case 'function':
|
||||
case 'symbol':
|
||||
value = undefined;
|
||||
break;
|
||||
|
||||
case 'object':
|
||||
if (value !== null) {
|
||||
const cls = value.constructor;
|
||||
if (cls === String || cls === Number || cls === Boolean) {
|
||||
value = value.valueOf();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function getTypeNative$1(value) {
|
||||
if (value === null || typeof value !== 'object') {
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return ArrayType;
|
||||
}
|
||||
|
||||
return ObjectType;
|
||||
}
|
||||
|
||||
function getTypeAsync$1(value) {
|
||||
if (value === null || typeof value !== 'object') {
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
if (typeof value.then === 'function') {
|
||||
return PromiseType;
|
||||
}
|
||||
|
||||
if (isReadableStream$1(value)) {
|
||||
return value._readableState.objectMode ? ReadableObjectType : ReadableStringType;
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return ArrayType;
|
||||
}
|
||||
|
||||
return ObjectType;
|
||||
}
|
||||
|
||||
function normalizeReplacer$1(replacer) {
|
||||
if (typeof replacer === 'function') {
|
||||
return replacer;
|
||||
}
|
||||
|
||||
if (Array.isArray(replacer)) {
|
||||
const allowlist = new Set(replacer
|
||||
.map(item => {
|
||||
const cls = item && item.constructor;
|
||||
return cls === String || cls === Number ? String(item) : null;
|
||||
})
|
||||
.filter(item => typeof item === 'string')
|
||||
);
|
||||
|
||||
return [...allowlist];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function normalizeSpace$1(space) {
|
||||
if (typeof space === 'number') {
|
||||
if (!Number.isFinite(space) || space < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ' '.repeat(Math.min(space, 10));
|
||||
}
|
||||
|
||||
if (typeof space === 'string') {
|
||||
return space.slice(0, 10) || false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
var utils = {
|
||||
escapableCharCodeSubstitution: escapableCharCodeSubstitution$1,
|
||||
isLeadingSurrogate: isLeadingSurrogate$1,
|
||||
isTrailingSurrogate: isTrailingSurrogate$1,
|
||||
type: {
|
||||
PRIMITIVE: PrimitiveType,
|
||||
PROMISE: PromiseType,
|
||||
ARRAY: ArrayType,
|
||||
OBJECT: ObjectType,
|
||||
STRING_STREAM: ReadableStringType,
|
||||
OBJECT_STREAM: ReadableObjectType
|
||||
},
|
||||
|
||||
isReadableStream: isReadableStream$1,
|
||||
replaceValue: replaceValue$1,
|
||||
getTypeNative: getTypeNative$1,
|
||||
getTypeAsync: getTypeAsync$1,
|
||||
normalizeReplacer: normalizeReplacer$1,
|
||||
normalizeSpace: normalizeSpace$1
|
||||
};
|
||||
|
||||
const {
|
||||
normalizeReplacer,
|
||||
normalizeSpace,
|
||||
replaceValue,
|
||||
getTypeNative,
|
||||
getTypeAsync,
|
||||
isLeadingSurrogate,
|
||||
isTrailingSurrogate,
|
||||
escapableCharCodeSubstitution,
|
||||
type: {
|
||||
PRIMITIVE,
|
||||
OBJECT,
|
||||
ARRAY,
|
||||
PROMISE,
|
||||
STRING_STREAM,
|
||||
OBJECT_STREAM
|
||||
}
|
||||
} = utils;
|
||||
const charLength2048 = Array.from({ length: 2048 }).map((_, code) => {
|
||||
if (escapableCharCodeSubstitution.hasOwnProperty(code)) {
|
||||
return 2; // \X
|
||||
}
|
||||
|
||||
if (code < 0x20) {
|
||||
return 6; // \uXXXX
|
||||
}
|
||||
|
||||
return code < 128 ? 1 : 2; // UTF8 bytes
|
||||
});
|
||||
|
||||
function stringLength(str) {
|
||||
let len = 0;
|
||||
let prevLeadingSurrogate = false;
|
||||
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
const code = str.charCodeAt(i);
|
||||
|
||||
if (code < 2048) {
|
||||
len += charLength2048[code];
|
||||
} else if (isLeadingSurrogate(code)) {
|
||||
len += 6; // \uXXXX since no pair with trailing surrogate yet
|
||||
prevLeadingSurrogate = true;
|
||||
continue;
|
||||
} else if (isTrailingSurrogate(code)) {
|
||||
len = prevLeadingSurrogate
|
||||
? len - 2 // surrogate pair (4 bytes), since we calculate prev leading surrogate as 6 bytes, substruct 2 bytes
|
||||
: len + 6; // \uXXXX
|
||||
} else {
|
||||
len += 3; // code >= 2048 is 3 bytes length for UTF8
|
||||
}
|
||||
|
||||
prevLeadingSurrogate = false;
|
||||
}
|
||||
|
||||
return len + 2; // +2 for quotes
|
||||
}
|
||||
|
||||
function primitiveLength(value) {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
return stringLength(value);
|
||||
|
||||
case 'number':
|
||||
return Number.isFinite(value) ? String(value).length : 4 /* null */;
|
||||
|
||||
case 'boolean':
|
||||
return value ? 4 /* true */ : 5 /* false */;
|
||||
|
||||
case 'undefined':
|
||||
case 'object':
|
||||
return 4; /* null */
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function spaceLength(space) {
|
||||
space = normalizeSpace(space);
|
||||
return typeof space === 'string' ? space.length : 0;
|
||||
}
|
||||
|
||||
var stringifyInfo = function jsonStringifyInfo(value, replacer, space, options) {
|
||||
function walk(holder, key, value) {
|
||||
if (stop) {
|
||||
return;
|
||||
}
|
||||
|
||||
value = replaceValue(holder, key, value, replacer);
|
||||
|
||||
let type = getType(value);
|
||||
|
||||
// check for circular structure
|
||||
if (type !== PRIMITIVE && stack.has(value)) {
|
||||
circular.add(value);
|
||||
length += 4; // treat as null
|
||||
|
||||
if (!options.continueOnCircular) {
|
||||
stop = true;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case PRIMITIVE:
|
||||
if (value !== undefined || Array.isArray(holder)) {
|
||||
length += primitiveLength(value);
|
||||
} else if (holder === root) {
|
||||
length += 9; // FIXME: that's the length of undefined, should we normalize behaviour to convert it to null?
|
||||
}
|
||||
break;
|
||||
|
||||
case OBJECT: {
|
||||
if (visited.has(value)) {
|
||||
duplicate.add(value);
|
||||
length += visited.get(value);
|
||||
break;
|
||||
}
|
||||
|
||||
const valueLength = length;
|
||||
let entries = 0;
|
||||
|
||||
length += 2; // {}
|
||||
|
||||
stack.add(value);
|
||||
|
||||
for (const key in value) {
|
||||
if (hasOwnProperty.call(value, key) && (allowlist === null || allowlist.has(key))) {
|
||||
const prevLength = length;
|
||||
walk(value, key, value[key]);
|
||||
|
||||
if (prevLength !== length) {
|
||||
// value is printed
|
||||
length += stringLength(key) + 1; // "key":
|
||||
entries++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entries > 1) {
|
||||
length += entries - 1; // commas
|
||||
}
|
||||
|
||||
stack.delete(value);
|
||||
|
||||
if (space > 0 && entries > 0) {
|
||||
length += (1 + (stack.size + 1) * space + 1) * entries; // for each key-value: \n{space}
|
||||
length += 1 + stack.size * space; // for }
|
||||
}
|
||||
|
||||
visited.set(value, length - valueLength);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case ARRAY: {
|
||||
if (visited.has(value)) {
|
||||
duplicate.add(value);
|
||||
length += visited.get(value);
|
||||
break;
|
||||
}
|
||||
|
||||
const valueLength = length;
|
||||
|
||||
length += 2; // []
|
||||
|
||||
stack.add(value);
|
||||
|
||||
for (let i = 0; i < value.length; i++) {
|
||||
walk(value, i, value[i]);
|
||||
}
|
||||
|
||||
if (value.length > 1) {
|
||||
length += value.length - 1; // commas
|
||||
}
|
||||
|
||||
stack.delete(value);
|
||||
|
||||
if (space > 0 && value.length > 0) {
|
||||
length += (1 + (stack.size + 1) * space) * value.length; // for each element: \n{space}
|
||||
length += 1 + stack.size * space; // for ]
|
||||
}
|
||||
|
||||
visited.set(value, length - valueLength);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PROMISE:
|
||||
case STRING_STREAM:
|
||||
async.add(value);
|
||||
break;
|
||||
|
||||
case OBJECT_STREAM:
|
||||
length += 2; // []
|
||||
async.add(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let allowlist = null;
|
||||
replacer = normalizeReplacer(replacer);
|
||||
|
||||
if (Array.isArray(replacer)) {
|
||||
allowlist = new Set(replacer);
|
||||
replacer = null;
|
||||
}
|
||||
|
||||
space = spaceLength(space);
|
||||
options = options || {};
|
||||
|
||||
const visited = new Map();
|
||||
const stack = new Set();
|
||||
const duplicate = new Set();
|
||||
const circular = new Set();
|
||||
const async = new Set();
|
||||
const getType = options.async ? getTypeAsync : getTypeNative;
|
||||
const root = { '': value };
|
||||
let stop = false;
|
||||
let length = 0;
|
||||
|
||||
walk(root, '', value);
|
||||
|
||||
return {
|
||||
minLength: isNaN(length) ? Infinity : length,
|
||||
circular: [...circular],
|
||||
duplicate: [...duplicate],
|
||||
async: [...async]
|
||||
};
|
||||
};
|
||||
|
||||
var stringifyStreamBrowser = () => {
|
||||
throw new Error('Method is not supported');
|
||||
};
|
||||
|
||||
var textDecoderBrowser = TextDecoder;
|
||||
|
||||
const { isReadableStream } = utils;
|
||||
|
||||
|
||||
const STACK_OBJECT = 1;
|
||||
const STACK_ARRAY = 2;
|
||||
const decoder = new textDecoderBrowser();
|
||||
|
||||
function isObject(value) {
|
||||
return value !== null && typeof value === 'object';
|
||||
}
|
||||
|
||||
function adjustPosition(error, parser) {
|
||||
if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
|
||||
error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
|
||||
'at position ' + (Number(pos) + parser.jsonParseOffset)
|
||||
);
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
function append(array, elements) {
|
||||
// Note: Avoid to use array.push(...elements) since it may lead to
|
||||
// "RangeError: Maximum call stack size exceeded" for a long arrays
|
||||
const initialLength = array.length;
|
||||
array.length += elements.length;
|
||||
|
||||
for (let i = 0; i < elements.length; i++) {
|
||||
array[initialLength + i] = elements[i];
|
||||
}
|
||||
}
|
||||
|
||||
var parseChunked = function(chunkEmitter) {
|
||||
let parser = new ChunkParser();
|
||||
|
||||
if (isObject(chunkEmitter) && isReadableStream(chunkEmitter)) {
|
||||
return new Promise((resolve, reject) => {
|
||||
chunkEmitter
|
||||
.on('data', chunk => {
|
||||
try {
|
||||
parser.push(chunk);
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
parser = null;
|
||||
}
|
||||
})
|
||||
.on('error', (e) => {
|
||||
parser = null;
|
||||
reject(e);
|
||||
})
|
||||
.on('end', () => {
|
||||
try {
|
||||
resolve(parser.finish());
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
} finally {
|
||||
parser = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof chunkEmitter === 'function') {
|
||||
const iterator = chunkEmitter();
|
||||
|
||||
if (isObject(iterator) && (Symbol.iterator in iterator || Symbol.asyncIterator in iterator)) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
for await (const chunk of iterator) {
|
||||
parser.push(chunk);
|
||||
}
|
||||
|
||||
resolve(parser.finish());
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
} finally {
|
||||
parser = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
'Chunk emitter should be readable stream, generator, ' +
|
||||
'async generator or function returning an iterable object'
|
||||
);
|
||||
};
|
||||
|
||||
class ChunkParser {
|
||||
constructor() {
|
||||
this.value = undefined;
|
||||
this.valueStack = null;
|
||||
|
||||
this.stack = new Array(100);
|
||||
this.lastFlushDepth = 0;
|
||||
this.flushDepth = 0;
|
||||
this.stateString = false;
|
||||
this.stateStringEscape = false;
|
||||
this.pendingByteSeq = null;
|
||||
this.pendingChunk = null;
|
||||
this.chunkOffset = 0;
|
||||
this.jsonParseOffset = 0;
|
||||
}
|
||||
|
||||
parseAndAppend(fragment, wrap) {
|
||||
// Append new entries or elements
|
||||
if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
|
||||
if (wrap) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = '{' + fragment + '}';
|
||||
}
|
||||
|
||||
Object.assign(this.valueStack.value, JSON.parse(fragment));
|
||||
} else {
|
||||
if (wrap) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = '[' + fragment + ']';
|
||||
}
|
||||
|
||||
append(this.valueStack.value, JSON.parse(fragment));
|
||||
}
|
||||
}
|
||||
|
||||
prepareAddition(fragment) {
|
||||
const { value } = this.valueStack;
|
||||
const expectComma = Array.isArray(value)
|
||||
? value.length !== 0
|
||||
: Object.keys(value).length !== 0;
|
||||
|
||||
if (expectComma) {
|
||||
// Skip a comma at the beginning of fragment, otherwise it would
|
||||
// fail to parse
|
||||
if (fragment[0] === ',') {
|
||||
this.jsonParseOffset++;
|
||||
return fragment.slice(1);
|
||||
}
|
||||
|
||||
// When value (an object or array) is not empty and a fragment
|
||||
// doesn't start with a comma, a single valid fragment starting
|
||||
// is a closing bracket. If it's not, a prefix is adding to fail
|
||||
// parsing. Otherwise, the sequence of chunks can be successfully
|
||||
// parsed, although it should not, e.g. ["[{}", "{}]"]
|
||||
if (fragment[0] !== '}' && fragment[0] !== ']') {
|
||||
this.jsonParseOffset -= 3;
|
||||
return '[[]' + fragment;
|
||||
}
|
||||
}
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
flush(chunk, start, end) {
|
||||
let fragment = chunk.slice(start, end);
|
||||
|
||||
// Save position correction an error in JSON.parse() if any
|
||||
this.jsonParseOffset = this.chunkOffset + start;
|
||||
|
||||
// Prepend pending chunk if any
|
||||
if (this.pendingChunk !== null) {
|
||||
fragment = this.pendingChunk + fragment;
|
||||
this.jsonParseOffset -= this.pendingChunk.length;
|
||||
this.pendingChunk = null;
|
||||
}
|
||||
|
||||
if (this.flushDepth === this.lastFlushDepth) {
|
||||
// Depth didn't changed, so it's a root value or entry/element set
|
||||
if (this.flushDepth > 0) {
|
||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
||||
} else {
|
||||
// That's an entire value on a top level
|
||||
this.value = JSON.parse(fragment);
|
||||
this.valueStack = {
|
||||
value: this.value,
|
||||
prev: null
|
||||
};
|
||||
}
|
||||
} else if (this.flushDepth > this.lastFlushDepth) {
|
||||
// Add missed closing brackets/parentheses
|
||||
for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
|
||||
fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
|
||||
}
|
||||
|
||||
if (this.lastFlushDepth === 0) {
|
||||
// That's a root value
|
||||
this.value = JSON.parse(fragment);
|
||||
this.valueStack = {
|
||||
value: this.value,
|
||||
prev: null
|
||||
};
|
||||
} else {
|
||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
||||
}
|
||||
|
||||
// Move down to the depths to the last object/array, which is current now
|
||||
for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
|
||||
let value = this.valueStack.value;
|
||||
|
||||
if (this.stack[i - 1] === STACK_OBJECT) {
|
||||
// find last entry
|
||||
let key;
|
||||
// eslint-disable-next-line curly
|
||||
for (key in value);
|
||||
value = value[key];
|
||||
} else {
|
||||
// last element
|
||||
value = value[value.length - 1];
|
||||
}
|
||||
|
||||
this.valueStack = {
|
||||
value,
|
||||
prev: this.valueStack
|
||||
};
|
||||
}
|
||||
} else /* this.flushDepth < this.lastFlushDepth */ {
|
||||
fragment = this.prepareAddition(fragment);
|
||||
|
||||
// Add missed opening brackets/parentheses
|
||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
|
||||
}
|
||||
|
||||
this.parseAndAppend(fragment, false);
|
||||
|
||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
||||
this.valueStack = this.valueStack.prev;
|
||||
}
|
||||
}
|
||||
|
||||
this.lastFlushDepth = this.flushDepth;
|
||||
}
|
||||
|
||||
push(chunk) {
|
||||
if (typeof chunk !== 'string') {
|
||||
// Suppose chunk is Buffer or Uint8Array
|
||||
|
||||
// Prepend uncompleted byte sequence if any
|
||||
if (this.pendingByteSeq !== null) {
|
||||
const origRawChunk = chunk;
|
||||
chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
|
||||
chunk.set(this.pendingByteSeq);
|
||||
chunk.set(origRawChunk, this.pendingByteSeq.length);
|
||||
this.pendingByteSeq = null;
|
||||
}
|
||||
|
||||
// In case Buffer/Uint8Array, an input is encoded in UTF8
|
||||
// Seek for parts of uncompleted UTF8 symbol on the ending
|
||||
// This makes sense only if we expect more chunks and last char is not multi-bytes
|
||||
if (chunk[chunk.length - 1] > 127) {
|
||||
for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
|
||||
const byte = chunk[chunk.length - 1 - seqLength];
|
||||
|
||||
// 10xxxxxx - 2nd, 3rd or 4th byte
|
||||
// 110xxxxx – first byte of 2-byte sequence
|
||||
// 1110xxxx - first byte of 3-byte sequence
|
||||
// 11110xxx - first byte of 4-byte sequence
|
||||
if (byte >> 6 === 3) {
|
||||
seqLength++;
|
||||
|
||||
// If the sequence is really incomplete, then preserve it
|
||||
// for the future chunk and cut off it from the current chunk
|
||||
if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
|
||||
(seqLength !== 3 && byte >> 4 === 0b1110) ||
|
||||
(seqLength !== 2 && byte >> 5 === 0b110)) {
|
||||
this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
|
||||
chunk = chunk.slice(0, -seqLength);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Convert chunk to a string, since single decode per chunk
|
||||
// is much effective than decode multiple small substrings
|
||||
chunk = decoder.decode(chunk);
|
||||
}
|
||||
|
||||
const chunkLength = chunk.length;
|
||||
let lastFlushPoint = 0;
|
||||
let flushPoint = 0;
|
||||
|
||||
// Main scan loop
|
||||
scan: for (let i = 0; i < chunkLength; i++) {
|
||||
if (this.stateString) {
|
||||
for (; i < chunkLength; i++) {
|
||||
if (this.stateStringEscape) {
|
||||
this.stateStringEscape = false;
|
||||
} else {
|
||||
switch (chunk.charCodeAt(i)) {
|
||||
case 0x22: /* " */
|
||||
this.stateString = false;
|
||||
continue scan;
|
||||
|
||||
case 0x5C: /* \ */
|
||||
this.stateStringEscape = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
switch (chunk.charCodeAt(i)) {
|
||||
case 0x22: /* " */
|
||||
this.stateString = true;
|
||||
this.stateStringEscape = false;
|
||||
break;
|
||||
|
||||
case 0x2C: /* , */
|
||||
flushPoint = i;
|
||||
break;
|
||||
|
||||
case 0x7B: /* { */
|
||||
// Open an object
|
||||
flushPoint = i + 1;
|
||||
this.stack[this.flushDepth++] = STACK_OBJECT;
|
||||
break;
|
||||
|
||||
case 0x5B: /* [ */
|
||||
// Open an array
|
||||
flushPoint = i + 1;
|
||||
this.stack[this.flushDepth++] = STACK_ARRAY;
|
||||
break;
|
||||
|
||||
case 0x5D: /* ] */
|
||||
case 0x7D: /* } */
|
||||
// Close an object or array
|
||||
flushPoint = i + 1;
|
||||
this.flushDepth--;
|
||||
|
||||
if (this.flushDepth < this.lastFlushDepth) {
|
||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
||||
lastFlushPoint = flushPoint;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 0x09: /* \t */
|
||||
case 0x0A: /* \n */
|
||||
case 0x0D: /* \r */
|
||||
case 0x20: /* space */
|
||||
// Move points forward when they points on current position and it's a whitespace
|
||||
if (lastFlushPoint === i) {
|
||||
lastFlushPoint++;
|
||||
}
|
||||
|
||||
if (flushPoint === i) {
|
||||
flushPoint++;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flushPoint > lastFlushPoint) {
|
||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
||||
}
|
||||
|
||||
// Produce pendingChunk if something left
|
||||
if (flushPoint < chunkLength) {
|
||||
if (this.pendingChunk !== null) {
|
||||
// When there is already a pending chunk then no flush happened,
|
||||
// appending entire chunk to pending one
|
||||
this.pendingChunk += chunk;
|
||||
} else {
|
||||
// Create a pending chunk, it will start with non-whitespace since
|
||||
// flushPoint was moved forward away from whitespaces on scan
|
||||
this.pendingChunk = chunk.slice(flushPoint, chunkLength);
|
||||
}
|
||||
}
|
||||
|
||||
this.chunkOffset += chunkLength;
|
||||
}
|
||||
|
||||
finish() {
|
||||
if (this.pendingChunk !== null) {
|
||||
this.flush('', 0, 0);
|
||||
this.pendingChunk = null;
|
||||
}
|
||||
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
var src = {
|
||||
version: version,
|
||||
stringifyInfo: stringifyInfo,
|
||||
stringifyStream: stringifyStreamBrowser,
|
||||
parseChunked: parseChunked
|
||||
};
|
||||
|
||||
return src;
|
||||
|
||||
}));
|
||||
-1
File diff suppressed because one or more lines are too long
-1
@@ -1 +0,0 @@
|
||||
module.exports = "0.5.7";
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
declare module '@discoveryjs/json-ext' {
|
||||
import { Readable } from 'stream';
|
||||
|
||||
type TReplacer =
|
||||
| ((this: any, key: string, value: any) => any)
|
||||
| string[]
|
||||
| number[]
|
||||
| null;
|
||||
type TSpace = string | number | null;
|
||||
type TChunk = string | Buffer | Uint8Array;
|
||||
|
||||
export function parseChunked(input: Readable): Promise<any>;
|
||||
export function parseChunked(input: () => (Iterable<TChunk> | AsyncIterable<TChunk>)): Promise<any>;
|
||||
|
||||
export function stringifyStream(value: any, replacer?: TReplacer, space?: TSpace): Readable;
|
||||
|
||||
export function stringifyInfo(
|
||||
value: any,
|
||||
replacer?: TReplacer,
|
||||
space?: TSpace,
|
||||
options?: {
|
||||
async?: boolean;
|
||||
continueOnCircular?: boolean;
|
||||
}
|
||||
): {
|
||||
minLength: number;
|
||||
circular: any[];
|
||||
duplicate: any[];
|
||||
async: any[];
|
||||
};
|
||||
}
|
||||
-93
@@ -1,93 +0,0 @@
|
||||
{
|
||||
"_from": "@discoveryjs/json-ext@^0.5.0",
|
||||
"_id": "@discoveryjs/json-ext@0.5.7",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
|
||||
"_location": "/@discoveryjs/json-ext",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "@discoveryjs/json-ext@^0.5.0",
|
||||
"name": "@discoveryjs/json-ext",
|
||||
"escapedName": "@discoveryjs%2fjson-ext",
|
||||
"scope": "@discoveryjs",
|
||||
"rawSpec": "^0.5.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^0.5.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/webpack-cli"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
|
||||
"_shasum": "1d572bfbbe14b7704e0ba0f39b74815b84870d70",
|
||||
"_spec": "@discoveryjs/json-ext@^0.5.0",
|
||||
"_where": "/root/dns/node_modules/webpack-cli",
|
||||
"author": {
|
||||
"name": "Roman Dvornov",
|
||||
"email": "rdvornov@gmail.com",
|
||||
"url": "https://github.com/lahmatiy"
|
||||
},
|
||||
"browser": {
|
||||
"./src/stringify-stream.js": "./src/stringify-stream-browser.js",
|
||||
"./src/text-decoder.js": "./src/text-decoder-browser.js",
|
||||
"./src/version.js": "./dist/version.js"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/discoveryjs/json-ext/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "A set of utilities that extend the use of JSON",
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-commonjs": "^15.1.0",
|
||||
"@rollup/plugin-json": "^4.1.0",
|
||||
"@rollup/plugin-node-resolve": "^9.0.0",
|
||||
"c8": "^7.10.0",
|
||||
"chalk": "^4.1.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^8.10.0",
|
||||
"mocha": "^8.4.0",
|
||||
"rollup": "^2.28.2",
|
||||
"rollup-plugin-terser": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"src",
|
||||
"index.d.ts"
|
||||
],
|
||||
"homepage": "https://github.com/discoveryjs/json-ext#readme",
|
||||
"keywords": [
|
||||
"json",
|
||||
"utils",
|
||||
"stream",
|
||||
"async",
|
||||
"promise",
|
||||
"stringify",
|
||||
"info"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./src/index",
|
||||
"name": "@discoveryjs/json-ext",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/discoveryjs/json-ext.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rollup --config",
|
||||
"build-and-test": "npm run build && npm run test:dist",
|
||||
"coverage": "c8 --reporter=lcovonly npm test",
|
||||
"lint": "eslint src test",
|
||||
"lint-and-test": "npm run lint && npm test",
|
||||
"prepublishOnly": "npm run lint && npm test && npm run build-and-test",
|
||||
"test": "mocha --reporter progress",
|
||||
"test:all": "npm run test:src && npm run test:dist",
|
||||
"test:dist": "cross-env MODE=dist npm test && cross-env MODE=dist-min npm test",
|
||||
"test:src": "npm test"
|
||||
},
|
||||
"types": "./index.d.ts",
|
||||
"version": "0.5.7"
|
||||
}
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
version: require('./version'),
|
||||
stringifyInfo: require('./stringify-info'),
|
||||
stringifyStream: require('./stringify-stream'),
|
||||
parseChunked: require('./parse-chunked')
|
||||
};
|
||||
-384
@@ -1,384 +0,0 @@
|
||||
const { isReadableStream } = require('./utils');
|
||||
const TextDecoder = require('./text-decoder');
|
||||
|
||||
const STACK_OBJECT = 1;
|
||||
const STACK_ARRAY = 2;
|
||||
const decoder = new TextDecoder();
|
||||
|
||||
function isObject(value) {
|
||||
return value !== null && typeof value === 'object';
|
||||
}
|
||||
|
||||
function adjustPosition(error, parser) {
|
||||
if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
|
||||
error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
|
||||
'at position ' + (Number(pos) + parser.jsonParseOffset)
|
||||
);
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
function append(array, elements) {
|
||||
// Note: Avoid to use array.push(...elements) since it may lead to
|
||||
// "RangeError: Maximum call stack size exceeded" for a long arrays
|
||||
const initialLength = array.length;
|
||||
array.length += elements.length;
|
||||
|
||||
for (let i = 0; i < elements.length; i++) {
|
||||
array[initialLength + i] = elements[i];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function(chunkEmitter) {
|
||||
let parser = new ChunkParser();
|
||||
|
||||
if (isObject(chunkEmitter) && isReadableStream(chunkEmitter)) {
|
||||
return new Promise((resolve, reject) => {
|
||||
chunkEmitter
|
||||
.on('data', chunk => {
|
||||
try {
|
||||
parser.push(chunk);
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
parser = null;
|
||||
}
|
||||
})
|
||||
.on('error', (e) => {
|
||||
parser = null;
|
||||
reject(e);
|
||||
})
|
||||
.on('end', () => {
|
||||
try {
|
||||
resolve(parser.finish());
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
} finally {
|
||||
parser = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof chunkEmitter === 'function') {
|
||||
const iterator = chunkEmitter();
|
||||
|
||||
if (isObject(iterator) && (Symbol.iterator in iterator || Symbol.asyncIterator in iterator)) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
for await (const chunk of iterator) {
|
||||
parser.push(chunk);
|
||||
}
|
||||
|
||||
resolve(parser.finish());
|
||||
} catch (e) {
|
||||
reject(adjustPosition(e, parser));
|
||||
} finally {
|
||||
parser = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
'Chunk emitter should be readable stream, generator, ' +
|
||||
'async generator or function returning an iterable object'
|
||||
);
|
||||
};
|
||||
|
||||
class ChunkParser {
|
||||
constructor() {
|
||||
this.value = undefined;
|
||||
this.valueStack = null;
|
||||
|
||||
this.stack = new Array(100);
|
||||
this.lastFlushDepth = 0;
|
||||
this.flushDepth = 0;
|
||||
this.stateString = false;
|
||||
this.stateStringEscape = false;
|
||||
this.pendingByteSeq = null;
|
||||
this.pendingChunk = null;
|
||||
this.chunkOffset = 0;
|
||||
this.jsonParseOffset = 0;
|
||||
}
|
||||
|
||||
parseAndAppend(fragment, wrap) {
|
||||
// Append new entries or elements
|
||||
if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
|
||||
if (wrap) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = '{' + fragment + '}';
|
||||
}
|
||||
|
||||
Object.assign(this.valueStack.value, JSON.parse(fragment));
|
||||
} else {
|
||||
if (wrap) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = '[' + fragment + ']';
|
||||
}
|
||||
|
||||
append(this.valueStack.value, JSON.parse(fragment));
|
||||
}
|
||||
}
|
||||
|
||||
prepareAddition(fragment) {
|
||||
const { value } = this.valueStack;
|
||||
const expectComma = Array.isArray(value)
|
||||
? value.length !== 0
|
||||
: Object.keys(value).length !== 0;
|
||||
|
||||
if (expectComma) {
|
||||
// Skip a comma at the beginning of fragment, otherwise it would
|
||||
// fail to parse
|
||||
if (fragment[0] === ',') {
|
||||
this.jsonParseOffset++;
|
||||
return fragment.slice(1);
|
||||
}
|
||||
|
||||
// When value (an object or array) is not empty and a fragment
|
||||
// doesn't start with a comma, a single valid fragment starting
|
||||
// is a closing bracket. If it's not, a prefix is adding to fail
|
||||
// parsing. Otherwise, the sequence of chunks can be successfully
|
||||
// parsed, although it should not, e.g. ["[{}", "{}]"]
|
||||
if (fragment[0] !== '}' && fragment[0] !== ']') {
|
||||
this.jsonParseOffset -= 3;
|
||||
return '[[]' + fragment;
|
||||
}
|
||||
}
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
flush(chunk, start, end) {
|
||||
let fragment = chunk.slice(start, end);
|
||||
|
||||
// Save position correction an error in JSON.parse() if any
|
||||
this.jsonParseOffset = this.chunkOffset + start;
|
||||
|
||||
// Prepend pending chunk if any
|
||||
if (this.pendingChunk !== null) {
|
||||
fragment = this.pendingChunk + fragment;
|
||||
this.jsonParseOffset -= this.pendingChunk.length;
|
||||
this.pendingChunk = null;
|
||||
}
|
||||
|
||||
if (this.flushDepth === this.lastFlushDepth) {
|
||||
// Depth didn't changed, so it's a root value or entry/element set
|
||||
if (this.flushDepth > 0) {
|
||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
||||
} else {
|
||||
// That's an entire value on a top level
|
||||
this.value = JSON.parse(fragment);
|
||||
this.valueStack = {
|
||||
value: this.value,
|
||||
prev: null
|
||||
};
|
||||
}
|
||||
} else if (this.flushDepth > this.lastFlushDepth) {
|
||||
// Add missed closing brackets/parentheses
|
||||
for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
|
||||
fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
|
||||
}
|
||||
|
||||
if (this.lastFlushDepth === 0) {
|
||||
// That's a root value
|
||||
this.value = JSON.parse(fragment);
|
||||
this.valueStack = {
|
||||
value: this.value,
|
||||
prev: null
|
||||
};
|
||||
} else {
|
||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
||||
}
|
||||
|
||||
// Move down to the depths to the last object/array, which is current now
|
||||
for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
|
||||
let value = this.valueStack.value;
|
||||
|
||||
if (this.stack[i - 1] === STACK_OBJECT) {
|
||||
// find last entry
|
||||
let key;
|
||||
// eslint-disable-next-line curly
|
||||
for (key in value);
|
||||
value = value[key];
|
||||
} else {
|
||||
// last element
|
||||
value = value[value.length - 1];
|
||||
}
|
||||
|
||||
this.valueStack = {
|
||||
value,
|
||||
prev: this.valueStack
|
||||
};
|
||||
}
|
||||
} else /* this.flushDepth < this.lastFlushDepth */ {
|
||||
fragment = this.prepareAddition(fragment);
|
||||
|
||||
// Add missed opening brackets/parentheses
|
||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
||||
this.jsonParseOffset--;
|
||||
fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
|
||||
}
|
||||
|
||||
this.parseAndAppend(fragment, false);
|
||||
|
||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
||||
this.valueStack = this.valueStack.prev;
|
||||
}
|
||||
}
|
||||
|
||||
this.lastFlushDepth = this.flushDepth;
|
||||
}
|
||||
|
||||
push(chunk) {
|
||||
if (typeof chunk !== 'string') {
|
||||
// Suppose chunk is Buffer or Uint8Array
|
||||
|
||||
// Prepend uncompleted byte sequence if any
|
||||
if (this.pendingByteSeq !== null) {
|
||||
const origRawChunk = chunk;
|
||||
chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
|
||||
chunk.set(this.pendingByteSeq);
|
||||
chunk.set(origRawChunk, this.pendingByteSeq.length);
|
||||
this.pendingByteSeq = null;
|
||||
}
|
||||
|
||||
// In case Buffer/Uint8Array, an input is encoded in UTF8
|
||||
// Seek for parts of uncompleted UTF8 symbol on the ending
|
||||
// This makes sense only if we expect more chunks and last char is not multi-bytes
|
||||
if (chunk[chunk.length - 1] > 127) {
|
||||
for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
|
||||
const byte = chunk[chunk.length - 1 - seqLength];
|
||||
|
||||
// 10xxxxxx - 2nd, 3rd or 4th byte
|
||||
// 110xxxxx – first byte of 2-byte sequence
|
||||
// 1110xxxx - first byte of 3-byte sequence
|
||||
// 11110xxx - first byte of 4-byte sequence
|
||||
if (byte >> 6 === 3) {
|
||||
seqLength++;
|
||||
|
||||
// If the sequence is really incomplete, then preserve it
|
||||
// for the future chunk and cut off it from the current chunk
|
||||
if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
|
||||
(seqLength !== 3 && byte >> 4 === 0b1110) ||
|
||||
(seqLength !== 2 && byte >> 5 === 0b110)) {
|
||||
this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
|
||||
chunk = chunk.slice(0, -seqLength);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Convert chunk to a string, since single decode per chunk
|
||||
// is much effective than decode multiple small substrings
|
||||
chunk = decoder.decode(chunk);
|
||||
}
|
||||
|
||||
const chunkLength = chunk.length;
|
||||
let lastFlushPoint = 0;
|
||||
let flushPoint = 0;
|
||||
|
||||
// Main scan loop
|
||||
scan: for (let i = 0; i < chunkLength; i++) {
|
||||
if (this.stateString) {
|
||||
for (; i < chunkLength; i++) {
|
||||
if (this.stateStringEscape) {
|
||||
this.stateStringEscape = false;
|
||||
} else {
|
||||
switch (chunk.charCodeAt(i)) {
|
||||
case 0x22: /* " */
|
||||
this.stateString = false;
|
||||
continue scan;
|
||||
|
||||
case 0x5C: /* \ */
|
||||
this.stateStringEscape = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
switch (chunk.charCodeAt(i)) {
|
||||
case 0x22: /* " */
|
||||
this.stateString = true;
|
||||
this.stateStringEscape = false;
|
||||
break;
|
||||
|
||||
case 0x2C: /* , */
|
||||
flushPoint = i;
|
||||
break;
|
||||
|
||||
case 0x7B: /* { */
|
||||
// Open an object
|
||||
flushPoint = i + 1;
|
||||
this.stack[this.flushDepth++] = STACK_OBJECT;
|
||||
break;
|
||||
|
||||
case 0x5B: /* [ */
|
||||
// Open an array
|
||||
flushPoint = i + 1;
|
||||
this.stack[this.flushDepth++] = STACK_ARRAY;
|
||||
break;
|
||||
|
||||
case 0x5D: /* ] */
|
||||
case 0x7D: /* } */
|
||||
// Close an object or array
|
||||
flushPoint = i + 1;
|
||||
this.flushDepth--;
|
||||
|
||||
if (this.flushDepth < this.lastFlushDepth) {
|
||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
||||
lastFlushPoint = flushPoint;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 0x09: /* \t */
|
||||
case 0x0A: /* \n */
|
||||
case 0x0D: /* \r */
|
||||
case 0x20: /* space */
|
||||
// Move points forward when they points on current position and it's a whitespace
|
||||
if (lastFlushPoint === i) {
|
||||
lastFlushPoint++;
|
||||
}
|
||||
|
||||
if (flushPoint === i) {
|
||||
flushPoint++;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flushPoint > lastFlushPoint) {
|
||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
||||
}
|
||||
|
||||
// Produce pendingChunk if something left
|
||||
if (flushPoint < chunkLength) {
|
||||
if (this.pendingChunk !== null) {
|
||||
// When there is already a pending chunk then no flush happened,
|
||||
// appending entire chunk to pending one
|
||||
this.pendingChunk += chunk;
|
||||
} else {
|
||||
// Create a pending chunk, it will start with non-whitespace since
|
||||
// flushPoint was moved forward away from whitespaces on scan
|
||||
this.pendingChunk = chunk.slice(flushPoint, chunkLength);
|
||||
}
|
||||
}
|
||||
|
||||
this.chunkOffset += chunkLength;
|
||||
}
|
||||
|
||||
finish() {
|
||||
if (this.pendingChunk !== null) {
|
||||
this.flush('', 0, 0);
|
||||
this.pendingChunk = null;
|
||||
}
|
||||
|
||||
return this.value;
|
||||
}
|
||||
};
|
||||
-231
@@ -1,231 +0,0 @@
|
||||
const {
|
||||
normalizeReplacer,
|
||||
normalizeSpace,
|
||||
replaceValue,
|
||||
getTypeNative,
|
||||
getTypeAsync,
|
||||
isLeadingSurrogate,
|
||||
isTrailingSurrogate,
|
||||
escapableCharCodeSubstitution,
|
||||
type: {
|
||||
PRIMITIVE,
|
||||
OBJECT,
|
||||
ARRAY,
|
||||
PROMISE,
|
||||
STRING_STREAM,
|
||||
OBJECT_STREAM
|
||||
}
|
||||
} = require('./utils');
|
||||
const charLength2048 = Array.from({ length: 2048 }).map((_, code) => {
|
||||
if (escapableCharCodeSubstitution.hasOwnProperty(code)) {
|
||||
return 2; // \X
|
||||
}
|
||||
|
||||
if (code < 0x20) {
|
||||
return 6; // \uXXXX
|
||||
}
|
||||
|
||||
return code < 128 ? 1 : 2; // UTF8 bytes
|
||||
});
|
||||
|
||||
function stringLength(str) {
|
||||
let len = 0;
|
||||
let prevLeadingSurrogate = false;
|
||||
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
const code = str.charCodeAt(i);
|
||||
|
||||
if (code < 2048) {
|
||||
len += charLength2048[code];
|
||||
} else if (isLeadingSurrogate(code)) {
|
||||
len += 6; // \uXXXX since no pair with trailing surrogate yet
|
||||
prevLeadingSurrogate = true;
|
||||
continue;
|
||||
} else if (isTrailingSurrogate(code)) {
|
||||
len = prevLeadingSurrogate
|
||||
? len - 2 // surrogate pair (4 bytes), since we calculate prev leading surrogate as 6 bytes, substruct 2 bytes
|
||||
: len + 6; // \uXXXX
|
||||
} else {
|
||||
len += 3; // code >= 2048 is 3 bytes length for UTF8
|
||||
}
|
||||
|
||||
prevLeadingSurrogate = false;
|
||||
}
|
||||
|
||||
return len + 2; // +2 for quotes
|
||||
}
|
||||
|
||||
function primitiveLength(value) {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
return stringLength(value);
|
||||
|
||||
case 'number':
|
||||
return Number.isFinite(value) ? String(value).length : 4 /* null */;
|
||||
|
||||
case 'boolean':
|
||||
return value ? 4 /* true */ : 5 /* false */;
|
||||
|
||||
case 'undefined':
|
||||
case 'object':
|
||||
return 4; /* null */
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function spaceLength(space) {
|
||||
space = normalizeSpace(space);
|
||||
return typeof space === 'string' ? space.length : 0;
|
||||
}
|
||||
|
||||
module.exports = function jsonStringifyInfo(value, replacer, space, options) {
|
||||
function walk(holder, key, value) {
|
||||
if (stop) {
|
||||
return;
|
||||
}
|
||||
|
||||
value = replaceValue(holder, key, value, replacer);
|
||||
|
||||
let type = getType(value);
|
||||
|
||||
// check for circular structure
|
||||
if (type !== PRIMITIVE && stack.has(value)) {
|
||||
circular.add(value);
|
||||
length += 4; // treat as null
|
||||
|
||||
if (!options.continueOnCircular) {
|
||||
stop = true;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case PRIMITIVE:
|
||||
if (value !== undefined || Array.isArray(holder)) {
|
||||
length += primitiveLength(value);
|
||||
} else if (holder === root) {
|
||||
length += 9; // FIXME: that's the length of undefined, should we normalize behaviour to convert it to null?
|
||||
}
|
||||
break;
|
||||
|
||||
case OBJECT: {
|
||||
if (visited.has(value)) {
|
||||
duplicate.add(value);
|
||||
length += visited.get(value);
|
||||
break;
|
||||
}
|
||||
|
||||
const valueLength = length;
|
||||
let entries = 0;
|
||||
|
||||
length += 2; // {}
|
||||
|
||||
stack.add(value);
|
||||
|
||||
for (const key in value) {
|
||||
if (hasOwnProperty.call(value, key) && (allowlist === null || allowlist.has(key))) {
|
||||
const prevLength = length;
|
||||
walk(value, key, value[key]);
|
||||
|
||||
if (prevLength !== length) {
|
||||
// value is printed
|
||||
length += stringLength(key) + 1; // "key":
|
||||
entries++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entries > 1) {
|
||||
length += entries - 1; // commas
|
||||
}
|
||||
|
||||
stack.delete(value);
|
||||
|
||||
if (space > 0 && entries > 0) {
|
||||
length += (1 + (stack.size + 1) * space + 1) * entries; // for each key-value: \n{space}
|
||||
length += 1 + stack.size * space; // for }
|
||||
}
|
||||
|
||||
visited.set(value, length - valueLength);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case ARRAY: {
|
||||
if (visited.has(value)) {
|
||||
duplicate.add(value);
|
||||
length += visited.get(value);
|
||||
break;
|
||||
}
|
||||
|
||||
const valueLength = length;
|
||||
|
||||
length += 2; // []
|
||||
|
||||
stack.add(value);
|
||||
|
||||
for (let i = 0; i < value.length; i++) {
|
||||
walk(value, i, value[i]);
|
||||
}
|
||||
|
||||
if (value.length > 1) {
|
||||
length += value.length - 1; // commas
|
||||
}
|
||||
|
||||
stack.delete(value);
|
||||
|
||||
if (space > 0 && value.length > 0) {
|
||||
length += (1 + (stack.size + 1) * space) * value.length; // for each element: \n{space}
|
||||
length += 1 + stack.size * space; // for ]
|
||||
}
|
||||
|
||||
visited.set(value, length - valueLength);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PROMISE:
|
||||
case STRING_STREAM:
|
||||
async.add(value);
|
||||
break;
|
||||
|
||||
case OBJECT_STREAM:
|
||||
length += 2; // []
|
||||
async.add(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let allowlist = null;
|
||||
replacer = normalizeReplacer(replacer);
|
||||
|
||||
if (Array.isArray(replacer)) {
|
||||
allowlist = new Set(replacer);
|
||||
replacer = null;
|
||||
}
|
||||
|
||||
space = spaceLength(space);
|
||||
options = options || {};
|
||||
|
||||
const visited = new Map();
|
||||
const stack = new Set();
|
||||
const duplicate = new Set();
|
||||
const circular = new Set();
|
||||
const async = new Set();
|
||||
const getType = options.async ? getTypeAsync : getTypeNative;
|
||||
const root = { '': value };
|
||||
let stop = false;
|
||||
let length = 0;
|
||||
|
||||
walk(root, '', value);
|
||||
|
||||
return {
|
||||
minLength: isNaN(length) ? Infinity : length,
|
||||
circular: [...circular],
|
||||
duplicate: [...duplicate],
|
||||
async: [...async]
|
||||
};
|
||||
};
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
module.exports = () => {
|
||||
throw new Error('Method is not supported');
|
||||
};
|
||||
-408
@@ -1,408 +0,0 @@
|
||||
const { Readable } = require('stream');
|
||||
const {
|
||||
normalizeReplacer,
|
||||
normalizeSpace,
|
||||
replaceValue,
|
||||
getTypeAsync,
|
||||
type: {
|
||||
PRIMITIVE,
|
||||
OBJECT,
|
||||
ARRAY,
|
||||
PROMISE,
|
||||
STRING_STREAM,
|
||||
OBJECT_STREAM
|
||||
}
|
||||
} = require('./utils');
|
||||
const noop = () => {};
|
||||
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
|
||||
// TODO: Remove when drop support for Node.js 10
|
||||
// Node.js 10 has no well-formed JSON.stringify()
|
||||
// https://github.com/tc39/proposal-well-formed-stringify
|
||||
// Adopted code from https://bugs.chromium.org/p/v8/issues/detail?id=7782#c12
|
||||
const wellformedStringStringify = JSON.stringify('\ud800') === '"\\ud800"'
|
||||
? JSON.stringify
|
||||
: s => JSON.stringify(s).replace(
|
||||
/\p{Surrogate}/gu,
|
||||
m => `\\u${m.charCodeAt(0).toString(16)}`
|
||||
);
|
||||
|
||||
function push() {
|
||||
this.push(this._stack.value);
|
||||
this.popStack();
|
||||
}
|
||||
|
||||
function pushPrimitive(value) {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
this.push(this.encodeString(value));
|
||||
break;
|
||||
|
||||
case 'number':
|
||||
this.push(Number.isFinite(value) ? this.encodeNumber(value) : 'null');
|
||||
break;
|
||||
|
||||
case 'boolean':
|
||||
this.push(value ? 'true' : 'false');
|
||||
break;
|
||||
|
||||
case 'undefined':
|
||||
case 'object': // typeof null === 'object'
|
||||
this.push('null');
|
||||
break;
|
||||
|
||||
default:
|
||||
this.destroy(new TypeError(`Do not know how to serialize a ${value.constructor && value.constructor.name || typeof value}`));
|
||||
}
|
||||
}
|
||||
|
||||
function processObjectEntry(key) {
|
||||
const current = this._stack;
|
||||
|
||||
if (!current.first) {
|
||||
current.first = true;
|
||||
} else {
|
||||
this.push(',');
|
||||
}
|
||||
|
||||
if (this.space) {
|
||||
this.push(`\n${this.space.repeat(this._depth)}${this.encodeString(key)}: `);
|
||||
} else {
|
||||
this.push(this.encodeString(key) + ':');
|
||||
}
|
||||
}
|
||||
|
||||
function processObject() {
|
||||
const current = this._stack;
|
||||
|
||||
// when no keys left, remove obj from stack
|
||||
if (current.index === current.keys.length) {
|
||||
if (this.space && current.first) {
|
||||
this.push(`\n${this.space.repeat(this._depth - 1)}}`);
|
||||
} else {
|
||||
this.push('}');
|
||||
}
|
||||
|
||||
this.popStack();
|
||||
return;
|
||||
}
|
||||
|
||||
const key = current.keys[current.index];
|
||||
|
||||
this.processValue(current.value, key, current.value[key], processObjectEntry);
|
||||
current.index++;
|
||||
}
|
||||
|
||||
function processArrayItem(index) {
|
||||
if (index !== 0) {
|
||||
this.push(',');
|
||||
}
|
||||
|
||||
if (this.space) {
|
||||
this.push(`\n${this.space.repeat(this._depth)}`);
|
||||
}
|
||||
}
|
||||
|
||||
function processArray() {
|
||||
const current = this._stack;
|
||||
|
||||
if (current.index === current.value.length) {
|
||||
if (this.space && current.index > 0) {
|
||||
this.push(`\n${this.space.repeat(this._depth - 1)}]`);
|
||||
} else {
|
||||
this.push(']');
|
||||
}
|
||||
|
||||
this.popStack();
|
||||
return;
|
||||
}
|
||||
|
||||
this.processValue(current.value, current.index, current.value[current.index], processArrayItem);
|
||||
current.index++;
|
||||
}
|
||||
|
||||
function createStreamReader(fn) {
|
||||
return function() {
|
||||
const current = this._stack;
|
||||
const data = current.value.read(this._readSize);
|
||||
|
||||
if (data !== null) {
|
||||
current.first = false;
|
||||
fn.call(this, data, current);
|
||||
} else {
|
||||
if ((current.first && !current.value._readableState.reading) || current.ended) {
|
||||
this.popStack();
|
||||
} else {
|
||||
current.first = true;
|
||||
current.awaiting = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const processReadableObject = createStreamReader(function(data, current) {
|
||||
this.processValue(current.value, current.index, data, processArrayItem);
|
||||
current.index++;
|
||||
});
|
||||
|
||||
const processReadableString = createStreamReader(function(data) {
|
||||
this.push(data);
|
||||
});
|
||||
|
||||
class JsonStringifyStream extends Readable {
|
||||
constructor(value, replacer, space) {
|
||||
super({
|
||||
autoDestroy: true
|
||||
});
|
||||
|
||||
this.getKeys = Object.keys;
|
||||
this.replacer = normalizeReplacer(replacer);
|
||||
|
||||
if (Array.isArray(this.replacer)) {
|
||||
const allowlist = this.replacer;
|
||||
|
||||
this.getKeys = (value) => allowlist.filter(key => hasOwnProperty.call(value, key));
|
||||
this.replacer = null;
|
||||
}
|
||||
|
||||
this.space = normalizeSpace(space);
|
||||
this._depth = 0;
|
||||
|
||||
this.error = null;
|
||||
this._processing = false;
|
||||
this._ended = false;
|
||||
|
||||
this._readSize = 0;
|
||||
this._buffer = '';
|
||||
|
||||
this._stack = null;
|
||||
this._visited = new WeakSet();
|
||||
|
||||
this.pushStack({
|
||||
handler: () => {
|
||||
this.popStack();
|
||||
this.processValue({ '': value }, '', value, noop);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
encodeString(value) {
|
||||
if (/[^\x20-\uD799]|[\x22\x5c]/.test(value)) {
|
||||
return wellformedStringStringify(value);
|
||||
}
|
||||
|
||||
return '"' + value + '"';
|
||||
}
|
||||
|
||||
encodeNumber(value) {
|
||||
return value;
|
||||
}
|
||||
|
||||
processValue(holder, key, value, callback) {
|
||||
value = replaceValue(holder, key, value, this.replacer);
|
||||
|
||||
let type = getTypeAsync(value);
|
||||
|
||||
switch (type) {
|
||||
case PRIMITIVE:
|
||||
if (callback !== processObjectEntry || value !== undefined) {
|
||||
callback.call(this, key);
|
||||
pushPrimitive.call(this, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case OBJECT:
|
||||
callback.call(this, key);
|
||||
|
||||
// check for circular structure
|
||||
if (this._visited.has(value)) {
|
||||
return this.destroy(new TypeError('Converting circular structure to JSON'));
|
||||
}
|
||||
|
||||
this._visited.add(value);
|
||||
this._depth++;
|
||||
this.push('{');
|
||||
this.pushStack({
|
||||
handler: processObject,
|
||||
value,
|
||||
index: 0,
|
||||
first: false,
|
||||
keys: this.getKeys(value)
|
||||
});
|
||||
break;
|
||||
|
||||
case ARRAY:
|
||||
callback.call(this, key);
|
||||
|
||||
// check for circular structure
|
||||
if (this._visited.has(value)) {
|
||||
return this.destroy(new TypeError('Converting circular structure to JSON'));
|
||||
}
|
||||
|
||||
this._visited.add(value);
|
||||
|
||||
this.push('[');
|
||||
this.pushStack({
|
||||
handler: processArray,
|
||||
value,
|
||||
index: 0
|
||||
});
|
||||
this._depth++;
|
||||
break;
|
||||
|
||||
case PROMISE:
|
||||
this.pushStack({
|
||||
handler: noop,
|
||||
awaiting: true
|
||||
});
|
||||
|
||||
Promise.resolve(value)
|
||||
.then(resolved => {
|
||||
this.popStack();
|
||||
this.processValue(holder, key, resolved, callback);
|
||||
this.processStack();
|
||||
})
|
||||
.catch(error => {
|
||||
this.destroy(error);
|
||||
});
|
||||
break;
|
||||
|
||||
case STRING_STREAM:
|
||||
case OBJECT_STREAM:
|
||||
callback.call(this, key);
|
||||
|
||||
// TODO: Remove when drop support for Node.js 10
|
||||
// Used `_readableState.endEmitted` as fallback, since Node.js 10 has no `readableEnded` getter
|
||||
if (value.readableEnded || value._readableState.endEmitted) {
|
||||
return this.destroy(new Error('Readable Stream has ended before it was serialized. All stream data have been lost'));
|
||||
}
|
||||
|
||||
if (value.readableFlowing) {
|
||||
return this.destroy(new Error('Readable Stream is in flowing mode, data may have been lost. Trying to pause stream.'));
|
||||
}
|
||||
|
||||
if (type === OBJECT_STREAM) {
|
||||
this.push('[');
|
||||
this.pushStack({
|
||||
handler: push,
|
||||
value: this.space ? '\n' + this.space.repeat(this._depth) + ']' : ']'
|
||||
});
|
||||
this._depth++;
|
||||
}
|
||||
|
||||
const self = this.pushStack({
|
||||
handler: type === OBJECT_STREAM ? processReadableObject : processReadableString,
|
||||
value,
|
||||
index: 0,
|
||||
first: false,
|
||||
ended: false,
|
||||
awaiting: !value.readable || value.readableLength === 0
|
||||
});
|
||||
const continueProcessing = () => {
|
||||
if (self.awaiting) {
|
||||
self.awaiting = false;
|
||||
this.processStack();
|
||||
}
|
||||
};
|
||||
|
||||
value.once('error', error => this.destroy(error));
|
||||
value.once('end', () => {
|
||||
self.ended = true;
|
||||
continueProcessing();
|
||||
});
|
||||
value.on('readable', continueProcessing);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pushStack(node) {
|
||||
node.prev = this._stack;
|
||||
return this._stack = node;
|
||||
}
|
||||
|
||||
popStack() {
|
||||
const { handler, value } = this._stack;
|
||||
|
||||
if (handler === processObject || handler === processArray || handler === processReadableObject) {
|
||||
this._visited.delete(value);
|
||||
this._depth--;
|
||||
}
|
||||
|
||||
this._stack = this._stack.prev;
|
||||
}
|
||||
|
||||
processStack() {
|
||||
if (this._processing || this._ended) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
this._processing = true;
|
||||
|
||||
while (this._stack !== null && !this._stack.awaiting) {
|
||||
this._stack.handler.call(this);
|
||||
|
||||
if (!this._processing) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this._processing = false;
|
||||
} catch (error) {
|
||||
this.destroy(error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._stack === null && !this._ended) {
|
||||
this._finish();
|
||||
this.push(null);
|
||||
}
|
||||
}
|
||||
|
||||
push(data) {
|
||||
if (data !== null) {
|
||||
this._buffer += data;
|
||||
|
||||
// check buffer overflow
|
||||
if (this._buffer.length < this._readSize) {
|
||||
return;
|
||||
}
|
||||
|
||||
// flush buffer
|
||||
data = this._buffer;
|
||||
this._buffer = '';
|
||||
this._processing = false;
|
||||
}
|
||||
|
||||
super.push(data);
|
||||
}
|
||||
|
||||
_read(size) {
|
||||
// start processing
|
||||
this._readSize = size || this.readableHighWaterMark;
|
||||
this.processStack();
|
||||
}
|
||||
|
||||
_finish() {
|
||||
this._ended = true;
|
||||
this._processing = false;
|
||||
this._stack = null;
|
||||
this._visited = null;
|
||||
|
||||
if (this._buffer && this._buffer.length) {
|
||||
super.push(this._buffer); // flush buffer
|
||||
}
|
||||
|
||||
this._buffer = '';
|
||||
}
|
||||
|
||||
_destroy(error, cb) {
|
||||
this.error = this.error || error;
|
||||
this._finish();
|
||||
cb(error);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function createJsonStringifyStream(value, replacer, space) {
|
||||
return new JsonStringifyStream(value, replacer, space);
|
||||
};
|
||||
-1
@@ -1 +0,0 @@
|
||||
module.exports = TextDecoder;
|
||||
-1
@@ -1 +0,0 @@
|
||||
module.exports = require('util').TextDecoder;
|
||||
-149
@@ -1,149 +0,0 @@
|
||||
const PrimitiveType = 1;
|
||||
const ObjectType = 2;
|
||||
const ArrayType = 3;
|
||||
const PromiseType = 4;
|
||||
const ReadableStringType = 5;
|
||||
const ReadableObjectType = 6;
|
||||
// https://tc39.es/ecma262/#table-json-single-character-escapes
|
||||
const escapableCharCodeSubstitution = { // JSON Single Character Escape Sequences
|
||||
0x08: '\\b',
|
||||
0x09: '\\t',
|
||||
0x0a: '\\n',
|
||||
0x0c: '\\f',
|
||||
0x0d: '\\r',
|
||||
0x22: '\\\"',
|
||||
0x5c: '\\\\'
|
||||
};
|
||||
|
||||
function isLeadingSurrogate(code) {
|
||||
return code >= 0xD800 && code <= 0xDBFF;
|
||||
}
|
||||
|
||||
function isTrailingSurrogate(code) {
|
||||
return code >= 0xDC00 && code <= 0xDFFF;
|
||||
}
|
||||
|
||||
function isReadableStream(value) {
|
||||
return (
|
||||
typeof value.pipe === 'function' &&
|
||||
typeof value._read === 'function' &&
|
||||
typeof value._readableState === 'object' && value._readableState !== null
|
||||
);
|
||||
}
|
||||
|
||||
function replaceValue(holder, key, value, replacer) {
|
||||
if (value && typeof value.toJSON === 'function') {
|
||||
value = value.toJSON();
|
||||
}
|
||||
|
||||
if (replacer !== null) {
|
||||
value = replacer.call(holder, String(key), value);
|
||||
}
|
||||
|
||||
switch (typeof value) {
|
||||
case 'function':
|
||||
case 'symbol':
|
||||
value = undefined;
|
||||
break;
|
||||
|
||||
case 'object':
|
||||
if (value !== null) {
|
||||
const cls = value.constructor;
|
||||
if (cls === String || cls === Number || cls === Boolean) {
|
||||
value = value.valueOf();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function getTypeNative(value) {
|
||||
if (value === null || typeof value !== 'object') {
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return ArrayType;
|
||||
}
|
||||
|
||||
return ObjectType;
|
||||
}
|
||||
|
||||
function getTypeAsync(value) {
|
||||
if (value === null || typeof value !== 'object') {
|
||||
return PrimitiveType;
|
||||
}
|
||||
|
||||
if (typeof value.then === 'function') {
|
||||
return PromiseType;
|
||||
}
|
||||
|
||||
if (isReadableStream(value)) {
|
||||
return value._readableState.objectMode ? ReadableObjectType : ReadableStringType;
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return ArrayType;
|
||||
}
|
||||
|
||||
return ObjectType;
|
||||
}
|
||||
|
||||
function normalizeReplacer(replacer) {
|
||||
if (typeof replacer === 'function') {
|
||||
return replacer;
|
||||
}
|
||||
|
||||
if (Array.isArray(replacer)) {
|
||||
const allowlist = new Set(replacer
|
||||
.map(item => {
|
||||
const cls = item && item.constructor;
|
||||
return cls === String || cls === Number ? String(item) : null;
|
||||
})
|
||||
.filter(item => typeof item === 'string')
|
||||
);
|
||||
|
||||
return [...allowlist];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function normalizeSpace(space) {
|
||||
if (typeof space === 'number') {
|
||||
if (!Number.isFinite(space) || space < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ' '.repeat(Math.min(space, 10));
|
||||
}
|
||||
|
||||
if (typeof space === 'string') {
|
||||
return space.slice(0, 10) || false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
escapableCharCodeSubstitution,
|
||||
isLeadingSurrogate,
|
||||
isTrailingSurrogate,
|
||||
type: {
|
||||
PRIMITIVE: PrimitiveType,
|
||||
PROMISE: PromiseType,
|
||||
ARRAY: ArrayType,
|
||||
OBJECT: ObjectType,
|
||||
STRING_STREAM: ReadableStringType,
|
||||
OBJECT_STREAM: ReadableObjectType
|
||||
},
|
||||
|
||||
isReadableStream,
|
||||
replaceValue,
|
||||
getTypeNative,
|
||||
getTypeAsync,
|
||||
normalizeReplacer,
|
||||
normalizeSpace
|
||||
};
|
||||
-1
@@ -1 +0,0 @@
|
||||
module.exports = require('../package.json').version;
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
# `@jest/schemas`
|
||||
|
||||
Experimental and currently incomplete module for JSON schemas for [Jest's](https://jestjs.io/) configuration.
|
||||
-63
@@ -1,63 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import {Static} from '@sinclair/typebox';
|
||||
import {TBoolean} from '@sinclair/typebox';
|
||||
import {TNull} from '@sinclair/typebox';
|
||||
import {TNumber} from '@sinclair/typebox';
|
||||
import {TObject} from '@sinclair/typebox';
|
||||
import {TReadonlyOptional} from '@sinclair/typebox';
|
||||
import {TString} from '@sinclair/typebox';
|
||||
|
||||
declare const RawSnapshotFormat: TObject<{
|
||||
callToJSON: TReadonlyOptional<TBoolean>;
|
||||
compareKeys: TReadonlyOptional<TNull>;
|
||||
escapeRegex: TReadonlyOptional<TBoolean>;
|
||||
escapeString: TReadonlyOptional<TBoolean>;
|
||||
highlight: TReadonlyOptional<TBoolean>;
|
||||
indent: TReadonlyOptional<TNumber>;
|
||||
maxDepth: TReadonlyOptional<TNumber>;
|
||||
maxWidth: TReadonlyOptional<TNumber>;
|
||||
min: TReadonlyOptional<TBoolean>;
|
||||
printBasicPrototype: TReadonlyOptional<TBoolean>;
|
||||
printFunctionName: TReadonlyOptional<TBoolean>;
|
||||
theme: TReadonlyOptional<
|
||||
TObject<{
|
||||
comment: TReadonlyOptional<TString<string>>;
|
||||
content: TReadonlyOptional<TString<string>>;
|
||||
prop: TReadonlyOptional<TString<string>>;
|
||||
tag: TReadonlyOptional<TString<string>>;
|
||||
value: TReadonlyOptional<TString<string>>;
|
||||
}>
|
||||
>;
|
||||
}>;
|
||||
|
||||
export declare const SnapshotFormat: TObject<{
|
||||
callToJSON: TReadonlyOptional<TBoolean>;
|
||||
compareKeys: TReadonlyOptional<TNull>;
|
||||
escapeRegex: TReadonlyOptional<TBoolean>;
|
||||
escapeString: TReadonlyOptional<TBoolean>;
|
||||
highlight: TReadonlyOptional<TBoolean>;
|
||||
indent: TReadonlyOptional<TNumber>;
|
||||
maxDepth: TReadonlyOptional<TNumber>;
|
||||
maxWidth: TReadonlyOptional<TNumber>;
|
||||
min: TReadonlyOptional<TBoolean>;
|
||||
printBasicPrototype: TReadonlyOptional<TBoolean>;
|
||||
printFunctionName: TReadonlyOptional<TBoolean>;
|
||||
theme: TReadonlyOptional<
|
||||
TObject<{
|
||||
comment: TReadonlyOptional<TString<string>>;
|
||||
content: TReadonlyOptional<TString<string>>;
|
||||
prop: TReadonlyOptional<TString<string>>;
|
||||
tag: TReadonlyOptional<TString<string>>;
|
||||
value: TReadonlyOptional<TString<string>>;
|
||||
}>
|
||||
>;
|
||||
}>;
|
||||
|
||||
export declare type SnapshotFormat = Static<typeof RawSnapshotFormat>;
|
||||
|
||||
export {};
|
||||
-60
@@ -1,60 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.SnapshotFormat = void 0;
|
||||
function _typebox() {
|
||||
const data = require('@sinclair/typebox');
|
||||
_typebox = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const RawSnapshotFormat = _typebox().Type.Partial(
|
||||
_typebox().Type.Object({
|
||||
callToJSON: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
compareKeys: _typebox().Type.Readonly(_typebox().Type.Null()),
|
||||
escapeRegex: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
escapeString: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
highlight: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
indent: _typebox().Type.Readonly(
|
||||
_typebox().Type.Number({
|
||||
minimum: 0
|
||||
})
|
||||
),
|
||||
maxDepth: _typebox().Type.Readonly(
|
||||
_typebox().Type.Number({
|
||||
minimum: 0
|
||||
})
|
||||
),
|
||||
maxWidth: _typebox().Type.Readonly(
|
||||
_typebox().Type.Number({
|
||||
minimum: 0
|
||||
})
|
||||
),
|
||||
min: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
printBasicPrototype: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
printFunctionName: _typebox().Type.Readonly(_typebox().Type.Boolean()),
|
||||
theme: _typebox().Type.Readonly(
|
||||
_typebox().Type.Partial(
|
||||
_typebox().Type.Object({
|
||||
comment: _typebox().Type.Readonly(_typebox().Type.String()),
|
||||
content: _typebox().Type.Readonly(_typebox().Type.String()),
|
||||
prop: _typebox().Type.Readonly(_typebox().Type.String()),
|
||||
tag: _typebox().Type.Readonly(_typebox().Type.String()),
|
||||
value: _typebox().Type.Readonly(_typebox().Type.String())
|
||||
})
|
||||
)
|
||||
)
|
||||
})
|
||||
);
|
||||
const SnapshotFormat = _typebox().Type.Strict(RawSnapshotFormat);
|
||||
exports.SnapshotFormat = SnapshotFormat;
|
||||
-60
@@ -1,60 +0,0 @@
|
||||
{
|
||||
"_from": "@jest/schemas@^29.6.3",
|
||||
"_id": "@jest/schemas@29.6.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
|
||||
"_location": "/@jest/schemas",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "@jest/schemas@^29.6.3",
|
||||
"name": "@jest/schemas",
|
||||
"escapedName": "@jest%2fschemas",
|
||||
"scope": "@jest",
|
||||
"rawSpec": "^29.6.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^29.6.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/@jest/types"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
|
||||
"_shasum": "430b5ce8a4e0044a7e3819663305a7b3091c8e03",
|
||||
"_spec": "@jest/schemas@^29.6.3",
|
||||
"_where": "/root/dns/node_modules/@jest/types",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jestjs/jest/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"@sinclair/typebox": "^0.27.8"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Experimental and currently incomplete module for JSON schemas for [Jest's](https://jestjs.io/) configuration.",
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
},
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./build/index.d.ts",
|
||||
"default": "./build/index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"gitHead": "fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b",
|
||||
"homepage": "https://github.com/jestjs/jest#readme",
|
||||
"license": "MIT",
|
||||
"main": "./build/index.js",
|
||||
"name": "@jest/schemas",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jestjs/jest.git",
|
||||
"directory": "packages/jest-schemas"
|
||||
},
|
||||
"types": "./build/index.d.ts",
|
||||
"version": "29.6.3"
|
||||
}
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
# @jest/types
|
||||
|
||||
This package contains shared types of Jest's packages.
|
||||
|
||||
If you are looking for types of [Jest globals](https://jestjs.io/docs/api), you can import them from `@jest/globals` package:
|
||||
|
||||
```ts
|
||||
import {describe, expect, it} from '@jest/globals';
|
||||
|
||||
describe('my tests', () => {
|
||||
it('works', () => {
|
||||
expect(1).toBe(1);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
If you prefer to omit imports, a similar result can be achieved installing the [@types/jest](https://npmjs.com/package/@types/jest) package. Note that this is a third party library maintained at [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest) and may not cover the latest Jest features.
|
||||
|
||||
Another use-case for `@types/jest` is a typed Jest config as those types are not provided by Jest out of the box:
|
||||
|
||||
```ts
|
||||
// jest.config.ts
|
||||
import {Config} from '@jest/types';
|
||||
|
||||
const config: Config.InitialOptions = {
|
||||
// some typed config
|
||||
};
|
||||
|
||||
export default config;
|
||||
```
|
||||
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-1204
File diff suppressed because it is too large
Load Diff
-1
@@ -1 +0,0 @@
|
||||
'use strict';
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
{
|
||||
"_from": "@jest/types@^29.6.3",
|
||||
"_id": "@jest/types@29.6.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
|
||||
"_location": "/@jest/types",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "@jest/types@^29.6.3",
|
||||
"name": "@jest/types",
|
||||
"escapedName": "@jest%2ftypes",
|
||||
"scope": "@jest",
|
||||
"rawSpec": "^29.6.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^29.6.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/jest-util"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
|
||||
"_shasum": "1131f8cf634e7e84c5e77bab12f052af585fba59",
|
||||
"_spec": "@jest/types@^29.6.3",
|
||||
"_where": "/root/dns/node_modules/jest-util",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jestjs/jest/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"@jest/schemas": "^29.6.3",
|
||||
"@types/istanbul-lib-coverage": "^2.0.0",
|
||||
"@types/istanbul-reports": "^3.0.0",
|
||||
"@types/node": "*",
|
||||
"@types/yargs": "^17.0.8",
|
||||
"chalk": "^4.0.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "This package contains shared types of Jest's packages.",
|
||||
"devDependencies": {
|
||||
"@tsd/typescript": "^5.0.4",
|
||||
"tsd-lite": "^0.7.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||
},
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./build/index.d.ts",
|
||||
"default": "./build/index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"gitHead": "fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b",
|
||||
"homepage": "https://github.com/jestjs/jest#readme",
|
||||
"license": "MIT",
|
||||
"main": "./build/index.js",
|
||||
"name": "@jest/types",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jestjs/jest.git",
|
||||
"directory": "packages/jest-types"
|
||||
},
|
||||
"types": "./build/index.d.ts",
|
||||
"version": "29.6.3"
|
||||
}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
Copyright 2024 Justin Ridgewell <justin@ridgewell.name>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-227
@@ -1,227 +0,0 @@
|
||||
# @jridgewell/gen-mapping
|
||||
|
||||
> Generate source maps
|
||||
|
||||
`gen-mapping` allows you to generate a source map during transpilation or minification.
|
||||
With a source map, you're able to trace the original location in the source file, either in Chrome's
|
||||
DevTools or using a library like [`@jridgewell/trace-mapping`][trace-mapping].
|
||||
|
||||
You may already be familiar with the [`source-map`][source-map] package's `SourceMapGenerator`. This
|
||||
provides the same `addMapping` and `setSourceContent` API.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm install @jridgewell/gen-mapping
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```typescript
|
||||
import { GenMapping, addMapping, setSourceContent, toEncodedMap, toDecodedMap } from '@jridgewell/gen-mapping';
|
||||
|
||||
const map = new GenMapping({
|
||||
file: 'output.js',
|
||||
sourceRoot: 'https://example.com/',
|
||||
});
|
||||
|
||||
setSourceContent(map, 'input.js', `function foo() {}`);
|
||||
|
||||
addMapping(map, {
|
||||
// Lines start at line 1, columns at column 0.
|
||||
generated: { line: 1, column: 0 },
|
||||
source: 'input.js',
|
||||
original: { line: 1, column: 0 },
|
||||
});
|
||||
|
||||
addMapping(map, {
|
||||
generated: { line: 1, column: 9 },
|
||||
source: 'input.js',
|
||||
original: { line: 1, column: 9 },
|
||||
name: 'foo',
|
||||
});
|
||||
|
||||
assert.deepEqual(toDecodedMap(map), {
|
||||
version: 3,
|
||||
file: 'output.js',
|
||||
names: ['foo'],
|
||||
sourceRoot: 'https://example.com/',
|
||||
sources: ['input.js'],
|
||||
sourcesContent: ['function foo() {}'],
|
||||
mappings: [
|
||||
[ [0, 0, 0, 0], [9, 0, 0, 9, 0] ]
|
||||
],
|
||||
});
|
||||
|
||||
assert.deepEqual(toEncodedMap(map), {
|
||||
version: 3,
|
||||
file: 'output.js',
|
||||
names: ['foo'],
|
||||
sourceRoot: 'https://example.com/',
|
||||
sources: ['input.js'],
|
||||
sourcesContent: ['function foo() {}'],
|
||||
mappings: 'AAAA,SAASA',
|
||||
});
|
||||
```
|
||||
|
||||
### Smaller Sourcemaps
|
||||
|
||||
Not everything needs to be added to a sourcemap, and needless markings can cause signficantly
|
||||
larger file sizes. `gen-mapping` exposes `maybeAddSegment`/`maybeAddMapping` APIs that will
|
||||
intelligently determine if this marking adds useful information. If not, the marking will be
|
||||
skipped.
|
||||
|
||||
```typescript
|
||||
import { maybeAddMapping } from '@jridgewell/gen-mapping';
|
||||
|
||||
const map = new GenMapping();
|
||||
|
||||
// Adding a sourceless marking at the beginning of a line isn't useful.
|
||||
maybeAddMapping(map, {
|
||||
generated: { line: 1, column: 0 },
|
||||
});
|
||||
|
||||
// Adding a new source marking is useful.
|
||||
maybeAddMapping(map, {
|
||||
generated: { line: 1, column: 0 },
|
||||
source: 'input.js',
|
||||
original: { line: 1, column: 0 },
|
||||
});
|
||||
|
||||
// But adding another marking pointing to the exact same original location isn't, even if the
|
||||
// generated column changed.
|
||||
maybeAddMapping(map, {
|
||||
generated: { line: 1, column: 9 },
|
||||
source: 'input.js',
|
||||
original: { line: 1, column: 0 },
|
||||
});
|
||||
|
||||
assert.deepEqual(toEncodedMap(map), {
|
||||
version: 3,
|
||||
names: [],
|
||||
sources: ['input.js'],
|
||||
sourcesContent: [null],
|
||||
mappings: 'AAAA',
|
||||
});
|
||||
```
|
||||
|
||||
## Benchmarks
|
||||
|
||||
```
|
||||
node v18.0.0
|
||||
|
||||
amp.js.map
|
||||
Memory Usage:
|
||||
gen-mapping: addSegment 5852872 bytes
|
||||
gen-mapping: addMapping 7716042 bytes
|
||||
source-map-js 6143250 bytes
|
||||
source-map-0.6.1 6124102 bytes
|
||||
source-map-0.8.0 6121173 bytes
|
||||
Smallest memory usage is gen-mapping: addSegment
|
||||
|
||||
Adding speed:
|
||||
gen-mapping: addSegment x 441 ops/sec ±2.07% (90 runs sampled)
|
||||
gen-mapping: addMapping x 350 ops/sec ±2.40% (86 runs sampled)
|
||||
source-map-js: addMapping x 169 ops/sec ±2.42% (80 runs sampled)
|
||||
source-map-0.6.1: addMapping x 167 ops/sec ±2.56% (80 runs sampled)
|
||||
source-map-0.8.0: addMapping x 168 ops/sec ±2.52% (80 runs sampled)
|
||||
Fastest is gen-mapping: addSegment
|
||||
|
||||
Generate speed:
|
||||
gen-mapping: decoded output x 150,824,370 ops/sec ±0.07% (102 runs sampled)
|
||||
gen-mapping: encoded output x 663 ops/sec ±0.22% (98 runs sampled)
|
||||
source-map-js: encoded output x 197 ops/sec ±0.45% (84 runs sampled)
|
||||
source-map-0.6.1: encoded output x 198 ops/sec ±0.33% (85 runs sampled)
|
||||
source-map-0.8.0: encoded output x 197 ops/sec ±0.06% (93 runs sampled)
|
||||
Fastest is gen-mapping: decoded output
|
||||
|
||||
|
||||
***
|
||||
|
||||
|
||||
babel.min.js.map
|
||||
Memory Usage:
|
||||
gen-mapping: addSegment 37578063 bytes
|
||||
gen-mapping: addMapping 37212897 bytes
|
||||
source-map-js 47638527 bytes
|
||||
source-map-0.6.1 47690503 bytes
|
||||
source-map-0.8.0 47470188 bytes
|
||||
Smallest memory usage is gen-mapping: addMapping
|
||||
|
||||
Adding speed:
|
||||
gen-mapping: addSegment x 31.05 ops/sec ±8.31% (43 runs sampled)
|
||||
gen-mapping: addMapping x 29.83 ops/sec ±7.36% (51 runs sampled)
|
||||
source-map-js: addMapping x 20.73 ops/sec ±6.22% (38 runs sampled)
|
||||
source-map-0.6.1: addMapping x 20.03 ops/sec ±10.51% (38 runs sampled)
|
||||
source-map-0.8.0: addMapping x 19.30 ops/sec ±8.27% (37 runs sampled)
|
||||
Fastest is gen-mapping: addSegment
|
||||
|
||||
Generate speed:
|
||||
gen-mapping: decoded output x 381,379,234 ops/sec ±0.29% (96 runs sampled)
|
||||
gen-mapping: encoded output x 95.15 ops/sec ±2.98% (72 runs sampled)
|
||||
source-map-js: encoded output x 15.20 ops/sec ±7.41% (33 runs sampled)
|
||||
source-map-0.6.1: encoded output x 16.36 ops/sec ±10.46% (31 runs sampled)
|
||||
source-map-0.8.0: encoded output x 16.06 ops/sec ±6.45% (31 runs sampled)
|
||||
Fastest is gen-mapping: decoded output
|
||||
|
||||
|
||||
***
|
||||
|
||||
|
||||
preact.js.map
|
||||
Memory Usage:
|
||||
gen-mapping: addSegment 416247 bytes
|
||||
gen-mapping: addMapping 419824 bytes
|
||||
source-map-js 1024619 bytes
|
||||
source-map-0.6.1 1146004 bytes
|
||||
source-map-0.8.0 1113250 bytes
|
||||
Smallest memory usage is gen-mapping: addSegment
|
||||
|
||||
Adding speed:
|
||||
gen-mapping: addSegment x 13,755 ops/sec ±0.15% (98 runs sampled)
|
||||
gen-mapping: addMapping x 13,013 ops/sec ±0.11% (101 runs sampled)
|
||||
source-map-js: addMapping x 4,564 ops/sec ±0.21% (98 runs sampled)
|
||||
source-map-0.6.1: addMapping x 4,562 ops/sec ±0.11% (99 runs sampled)
|
||||
source-map-0.8.0: addMapping x 4,593 ops/sec ±0.11% (100 runs sampled)
|
||||
Fastest is gen-mapping: addSegment
|
||||
|
||||
Generate speed:
|
||||
gen-mapping: decoded output x 379,864,020 ops/sec ±0.23% (93 runs sampled)
|
||||
gen-mapping: encoded output x 14,368 ops/sec ±4.07% (82 runs sampled)
|
||||
source-map-js: encoded output x 5,261 ops/sec ±0.21% (99 runs sampled)
|
||||
source-map-0.6.1: encoded output x 5,124 ops/sec ±0.58% (99 runs sampled)
|
||||
source-map-0.8.0: encoded output x 5,434 ops/sec ±0.33% (96 runs sampled)
|
||||
Fastest is gen-mapping: decoded output
|
||||
|
||||
|
||||
***
|
||||
|
||||
|
||||
react.js.map
|
||||
Memory Usage:
|
||||
gen-mapping: addSegment 975096 bytes
|
||||
gen-mapping: addMapping 1102981 bytes
|
||||
source-map-js 2918836 bytes
|
||||
source-map-0.6.1 2885435 bytes
|
||||
source-map-0.8.0 2874336 bytes
|
||||
Smallest memory usage is gen-mapping: addSegment
|
||||
|
||||
Adding speed:
|
||||
gen-mapping: addSegment x 4,772 ops/sec ±0.15% (100 runs sampled)
|
||||
gen-mapping: addMapping x 4,456 ops/sec ±0.13% (97 runs sampled)
|
||||
source-map-js: addMapping x 1,618 ops/sec ±0.24% (97 runs sampled)
|
||||
source-map-0.6.1: addMapping x 1,622 ops/sec ±0.12% (99 runs sampled)
|
||||
source-map-0.8.0: addMapping x 1,631 ops/sec ±0.12% (100 runs sampled)
|
||||
Fastest is gen-mapping: addSegment
|
||||
|
||||
Generate speed:
|
||||
gen-mapping: decoded output x 379,107,695 ops/sec ±0.07% (99 runs sampled)
|
||||
gen-mapping: encoded output x 5,421 ops/sec ±1.60% (89 runs sampled)
|
||||
source-map-js: encoded output x 2,113 ops/sec ±1.81% (98 runs sampled)
|
||||
source-map-0.6.1: encoded output x 2,126 ops/sec ±0.10% (100 runs sampled)
|
||||
source-map-0.8.0: encoded output x 2,176 ops/sec ±0.39% (98 runs sampled)
|
||||
Fastest is gen-mapping: decoded output
|
||||
```
|
||||
|
||||
[source-map]: https://www.npmjs.com/package/source-map
|
||||
[trace-mapping]: https://github.com/jridgewell/sourcemaps/tree/main/packages/trace-mapping
|
||||
-292
@@ -1,292 +0,0 @@
|
||||
// src/set-array.ts
|
||||
var SetArray = class {
|
||||
constructor() {
|
||||
this._indexes = { __proto__: null };
|
||||
this.array = [];
|
||||
}
|
||||
};
|
||||
function cast(set) {
|
||||
return set;
|
||||
}
|
||||
function get(setarr, key) {
|
||||
return cast(setarr)._indexes[key];
|
||||
}
|
||||
function put(setarr, key) {
|
||||
const index = get(setarr, key);
|
||||
if (index !== void 0) return index;
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
const length = array.push(key);
|
||||
return indexes[key] = length - 1;
|
||||
}
|
||||
function remove(setarr, key) {
|
||||
const index = get(setarr, key);
|
||||
if (index === void 0) return;
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
for (let i = index + 1; i < array.length; i++) {
|
||||
const k = array[i];
|
||||
array[i - 1] = k;
|
||||
indexes[k]--;
|
||||
}
|
||||
indexes[key] = void 0;
|
||||
array.pop();
|
||||
}
|
||||
|
||||
// src/gen-mapping.ts
|
||||
import {
|
||||
encode
|
||||
} from "@jridgewell/sourcemap-codec";
|
||||
import { TraceMap, decodedMappings } from "@jridgewell/trace-mapping";
|
||||
|
||||
// src/sourcemap-segment.ts
|
||||
var COLUMN = 0;
|
||||
var SOURCES_INDEX = 1;
|
||||
var SOURCE_LINE = 2;
|
||||
var SOURCE_COLUMN = 3;
|
||||
var NAMES_INDEX = 4;
|
||||
|
||||
// src/gen-mapping.ts
|
||||
var NO_NAME = -1;
|
||||
var GenMapping = class {
|
||||
constructor({ file, sourceRoot } = {}) {
|
||||
this._names = new SetArray();
|
||||
this._sources = new SetArray();
|
||||
this._sourcesContent = [];
|
||||
this._mappings = [];
|
||||
this.file = file;
|
||||
this.sourceRoot = sourceRoot;
|
||||
this._ignoreList = new SetArray();
|
||||
}
|
||||
};
|
||||
function cast2(map) {
|
||||
return map;
|
||||
}
|
||||
function addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {
|
||||
return addSegmentInternal(
|
||||
false,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content
|
||||
);
|
||||
}
|
||||
function addMapping(map, mapping) {
|
||||
return addMappingInternal(false, map, mapping);
|
||||
}
|
||||
var maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {
|
||||
return addSegmentInternal(
|
||||
true,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content
|
||||
);
|
||||
};
|
||||
var maybeAddMapping = (map, mapping) => {
|
||||
return addMappingInternal(true, map, mapping);
|
||||
};
|
||||
function setSourceContent(map, source, content) {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const index = put(sources, source);
|
||||
sourcesContent[index] = content;
|
||||
}
|
||||
function setIgnore(map, source, ignore = true) {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_ignoreList: ignoreList
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const index = put(sources, source);
|
||||
if (index === sourcesContent.length) sourcesContent[index] = null;
|
||||
if (ignore) put(ignoreList, index);
|
||||
else remove(ignoreList, index);
|
||||
}
|
||||
function toDecodedMap(map) {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names,
|
||||
_ignoreList: ignoreList
|
||||
// _originalScopes: originalScopes,
|
||||
// _generatedRanges: generatedRanges,
|
||||
} = cast2(map);
|
||||
removeEmptyFinalLines(mappings);
|
||||
return {
|
||||
version: 3,
|
||||
file: map.file || void 0,
|
||||
names: names.array,
|
||||
sourceRoot: map.sourceRoot || void 0,
|
||||
sources: sources.array,
|
||||
sourcesContent,
|
||||
mappings,
|
||||
// originalScopes,
|
||||
// generatedRanges,
|
||||
ignoreList: ignoreList.array
|
||||
};
|
||||
}
|
||||
function toEncodedMap(map) {
|
||||
const decoded = toDecodedMap(map);
|
||||
return Object.assign({}, decoded, {
|
||||
// originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)),
|
||||
// generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]),
|
||||
mappings: encode(decoded.mappings)
|
||||
});
|
||||
}
|
||||
function fromMap(input) {
|
||||
const map = new TraceMap(input);
|
||||
const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });
|
||||
putAll(cast2(gen)._names, map.names);
|
||||
putAll(cast2(gen)._sources, map.sources);
|
||||
cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null);
|
||||
cast2(gen)._mappings = decodedMappings(map);
|
||||
if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList);
|
||||
return gen;
|
||||
}
|
||||
function allMappings(map) {
|
||||
const out = [];
|
||||
const { _mappings: mappings, _sources: sources, _names: names } = cast2(map);
|
||||
for (let i = 0; i < mappings.length; i++) {
|
||||
const line = mappings[i];
|
||||
for (let j = 0; j < line.length; j++) {
|
||||
const seg = line[j];
|
||||
const generated = { line: i + 1, column: seg[COLUMN] };
|
||||
let source = void 0;
|
||||
let original = void 0;
|
||||
let name = void 0;
|
||||
if (seg.length !== 1) {
|
||||
source = sources.array[seg[SOURCES_INDEX]];
|
||||
original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };
|
||||
if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];
|
||||
}
|
||||
out.push({ generated, source, original, name });
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const line = getIndex(mappings, genLine);
|
||||
const index = getColumnIndex(line, genColumn);
|
||||
if (!source) {
|
||||
if (skipable && skipSourceless(line, index)) return;
|
||||
return insert(line, index, [genColumn]);
|
||||
}
|
||||
assert(sourceLine);
|
||||
assert(sourceColumn);
|
||||
const sourcesIndex = put(sources, source);
|
||||
const namesIndex = name ? put(names, name) : NO_NAME;
|
||||
if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null;
|
||||
if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {
|
||||
return;
|
||||
}
|
||||
return insert(
|
||||
line,
|
||||
index,
|
||||
name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]
|
||||
);
|
||||
}
|
||||
function assert(_val) {
|
||||
}
|
||||
function getIndex(arr, index) {
|
||||
for (let i = arr.length; i <= index; i++) {
|
||||
arr[i] = [];
|
||||
}
|
||||
return arr[index];
|
||||
}
|
||||
function getColumnIndex(line, genColumn) {
|
||||
let index = line.length;
|
||||
for (let i = index - 1; i >= 0; index = i--) {
|
||||
const current = line[i];
|
||||
if (genColumn >= current[COLUMN]) break;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
function insert(array, index, value) {
|
||||
for (let i = array.length; i > index; i--) {
|
||||
array[i] = array[i - 1];
|
||||
}
|
||||
array[index] = value;
|
||||
}
|
||||
function removeEmptyFinalLines(mappings) {
|
||||
const { length } = mappings;
|
||||
let len = length;
|
||||
for (let i = len - 1; i >= 0; len = i, i--) {
|
||||
if (mappings[i].length > 0) break;
|
||||
}
|
||||
if (len < length) mappings.length = len;
|
||||
}
|
||||
function putAll(setarr, array) {
|
||||
for (let i = 0; i < array.length; i++) put(setarr, array[i]);
|
||||
}
|
||||
function skipSourceless(line, index) {
|
||||
if (index === 0) return true;
|
||||
const prev = line[index - 1];
|
||||
return prev.length === 1;
|
||||
}
|
||||
function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {
|
||||
if (index === 0) return false;
|
||||
const prev = line[index - 1];
|
||||
if (prev.length === 1) return false;
|
||||
return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME);
|
||||
}
|
||||
function addMappingInternal(skipable, map, mapping) {
|
||||
const { generated, source, original, name, content } = mapping;
|
||||
if (!source) {
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
);
|
||||
}
|
||||
assert(original);
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
source,
|
||||
original.line - 1,
|
||||
original.column,
|
||||
name,
|
||||
content
|
||||
);
|
||||
}
|
||||
export {
|
||||
GenMapping,
|
||||
addMapping,
|
||||
addSegment,
|
||||
allMappings,
|
||||
fromMap,
|
||||
maybeAddMapping,
|
||||
maybeAddSegment,
|
||||
setIgnore,
|
||||
setSourceContent,
|
||||
toDecodedMap,
|
||||
toEncodedMap
|
||||
};
|
||||
//# sourceMappingURL=gen-mapping.mjs.map
|
||||
-6
File diff suppressed because one or more lines are too long
-358
@@ -1,358 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof exports === 'object' && typeof module !== 'undefined') {
|
||||
factory(module, require('@jridgewell/sourcemap-codec'), require('@jridgewell/trace-mapping'));
|
||||
module.exports = def(module);
|
||||
} else if (typeof define === 'function' && define.amd) {
|
||||
define(['module', '@jridgewell/sourcemap-codec', '@jridgewell/trace-mapping'], function(mod) {
|
||||
factory.apply(this, arguments);
|
||||
mod.exports = def(mod);
|
||||
});
|
||||
} else {
|
||||
const mod = { exports: {} };
|
||||
factory(mod, global.sourcemapCodec, global.traceMapping);
|
||||
global = typeof globalThis !== 'undefined' ? globalThis : global || self;
|
||||
global.genMapping = def(mod);
|
||||
}
|
||||
function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; }
|
||||
})(this, (function (module, require_sourcemapCodec, require_traceMapping) {
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __commonJS = (cb, mod) => function __require() {
|
||||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||
};
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// umd:@jridgewell/sourcemap-codec
|
||||
var require_sourcemap_codec = __commonJS({
|
||||
"umd:@jridgewell/sourcemap-codec"(exports, module2) {
|
||||
module2.exports = require_sourcemapCodec;
|
||||
}
|
||||
});
|
||||
|
||||
// umd:@jridgewell/trace-mapping
|
||||
var require_trace_mapping = __commonJS({
|
||||
"umd:@jridgewell/trace-mapping"(exports, module2) {
|
||||
module2.exports = require_traceMapping;
|
||||
}
|
||||
});
|
||||
|
||||
// src/gen-mapping.ts
|
||||
var gen_mapping_exports = {};
|
||||
__export(gen_mapping_exports, {
|
||||
GenMapping: () => GenMapping,
|
||||
addMapping: () => addMapping,
|
||||
addSegment: () => addSegment,
|
||||
allMappings: () => allMappings,
|
||||
fromMap: () => fromMap,
|
||||
maybeAddMapping: () => maybeAddMapping,
|
||||
maybeAddSegment: () => maybeAddSegment,
|
||||
setIgnore: () => setIgnore,
|
||||
setSourceContent: () => setSourceContent,
|
||||
toDecodedMap: () => toDecodedMap,
|
||||
toEncodedMap: () => toEncodedMap
|
||||
});
|
||||
module.exports = __toCommonJS(gen_mapping_exports);
|
||||
|
||||
// src/set-array.ts
|
||||
var SetArray = class {
|
||||
constructor() {
|
||||
this._indexes = { __proto__: null };
|
||||
this.array = [];
|
||||
}
|
||||
};
|
||||
function cast(set) {
|
||||
return set;
|
||||
}
|
||||
function get(setarr, key) {
|
||||
return cast(setarr)._indexes[key];
|
||||
}
|
||||
function put(setarr, key) {
|
||||
const index = get(setarr, key);
|
||||
if (index !== void 0) return index;
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
const length = array.push(key);
|
||||
return indexes[key] = length - 1;
|
||||
}
|
||||
function remove(setarr, key) {
|
||||
const index = get(setarr, key);
|
||||
if (index === void 0) return;
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
for (let i = index + 1; i < array.length; i++) {
|
||||
const k = array[i];
|
||||
array[i - 1] = k;
|
||||
indexes[k]--;
|
||||
}
|
||||
indexes[key] = void 0;
|
||||
array.pop();
|
||||
}
|
||||
|
||||
// src/gen-mapping.ts
|
||||
var import_sourcemap_codec = __toESM(require_sourcemap_codec());
|
||||
var import_trace_mapping = __toESM(require_trace_mapping());
|
||||
|
||||
// src/sourcemap-segment.ts
|
||||
var COLUMN = 0;
|
||||
var SOURCES_INDEX = 1;
|
||||
var SOURCE_LINE = 2;
|
||||
var SOURCE_COLUMN = 3;
|
||||
var NAMES_INDEX = 4;
|
||||
|
||||
// src/gen-mapping.ts
|
||||
var NO_NAME = -1;
|
||||
var GenMapping = class {
|
||||
constructor({ file, sourceRoot } = {}) {
|
||||
this._names = new SetArray();
|
||||
this._sources = new SetArray();
|
||||
this._sourcesContent = [];
|
||||
this._mappings = [];
|
||||
this.file = file;
|
||||
this.sourceRoot = sourceRoot;
|
||||
this._ignoreList = new SetArray();
|
||||
}
|
||||
};
|
||||
function cast2(map) {
|
||||
return map;
|
||||
}
|
||||
function addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {
|
||||
return addSegmentInternal(
|
||||
false,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content
|
||||
);
|
||||
}
|
||||
function addMapping(map, mapping) {
|
||||
return addMappingInternal(false, map, mapping);
|
||||
}
|
||||
var maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {
|
||||
return addSegmentInternal(
|
||||
true,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content
|
||||
);
|
||||
};
|
||||
var maybeAddMapping = (map, mapping) => {
|
||||
return addMappingInternal(true, map, mapping);
|
||||
};
|
||||
function setSourceContent(map, source, content) {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const index = put(sources, source);
|
||||
sourcesContent[index] = content;
|
||||
}
|
||||
function setIgnore(map, source, ignore = true) {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_ignoreList: ignoreList
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const index = put(sources, source);
|
||||
if (index === sourcesContent.length) sourcesContent[index] = null;
|
||||
if (ignore) put(ignoreList, index);
|
||||
else remove(ignoreList, index);
|
||||
}
|
||||
function toDecodedMap(map) {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names,
|
||||
_ignoreList: ignoreList
|
||||
// _originalScopes: originalScopes,
|
||||
// _generatedRanges: generatedRanges,
|
||||
} = cast2(map);
|
||||
removeEmptyFinalLines(mappings);
|
||||
return {
|
||||
version: 3,
|
||||
file: map.file || void 0,
|
||||
names: names.array,
|
||||
sourceRoot: map.sourceRoot || void 0,
|
||||
sources: sources.array,
|
||||
sourcesContent,
|
||||
mappings,
|
||||
// originalScopes,
|
||||
// generatedRanges,
|
||||
ignoreList: ignoreList.array
|
||||
};
|
||||
}
|
||||
function toEncodedMap(map) {
|
||||
const decoded = toDecodedMap(map);
|
||||
return Object.assign({}, decoded, {
|
||||
// originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)),
|
||||
// generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]),
|
||||
mappings: (0, import_sourcemap_codec.encode)(decoded.mappings)
|
||||
});
|
||||
}
|
||||
function fromMap(input) {
|
||||
const map = new import_trace_mapping.TraceMap(input);
|
||||
const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });
|
||||
putAll(cast2(gen)._names, map.names);
|
||||
putAll(cast2(gen)._sources, map.sources);
|
||||
cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null);
|
||||
cast2(gen)._mappings = (0, import_trace_mapping.decodedMappings)(map);
|
||||
if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList);
|
||||
return gen;
|
||||
}
|
||||
function allMappings(map) {
|
||||
const out = [];
|
||||
const { _mappings: mappings, _sources: sources, _names: names } = cast2(map);
|
||||
for (let i = 0; i < mappings.length; i++) {
|
||||
const line = mappings[i];
|
||||
for (let j = 0; j < line.length; j++) {
|
||||
const seg = line[j];
|
||||
const generated = { line: i + 1, column: seg[COLUMN] };
|
||||
let source = void 0;
|
||||
let original = void 0;
|
||||
let name = void 0;
|
||||
if (seg.length !== 1) {
|
||||
source = sources.array[seg[SOURCES_INDEX]];
|
||||
original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };
|
||||
if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];
|
||||
}
|
||||
out.push({ generated, source, original, name });
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast2(map);
|
||||
const line = getIndex(mappings, genLine);
|
||||
const index = getColumnIndex(line, genColumn);
|
||||
if (!source) {
|
||||
if (skipable && skipSourceless(line, index)) return;
|
||||
return insert(line, index, [genColumn]);
|
||||
}
|
||||
assert(sourceLine);
|
||||
assert(sourceColumn);
|
||||
const sourcesIndex = put(sources, source);
|
||||
const namesIndex = name ? put(names, name) : NO_NAME;
|
||||
if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null;
|
||||
if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {
|
||||
return;
|
||||
}
|
||||
return insert(
|
||||
line,
|
||||
index,
|
||||
name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]
|
||||
);
|
||||
}
|
||||
function assert(_val) {
|
||||
}
|
||||
function getIndex(arr, index) {
|
||||
for (let i = arr.length; i <= index; i++) {
|
||||
arr[i] = [];
|
||||
}
|
||||
return arr[index];
|
||||
}
|
||||
function getColumnIndex(line, genColumn) {
|
||||
let index = line.length;
|
||||
for (let i = index - 1; i >= 0; index = i--) {
|
||||
const current = line[i];
|
||||
if (genColumn >= current[COLUMN]) break;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
function insert(array, index, value) {
|
||||
for (let i = array.length; i > index; i--) {
|
||||
array[i] = array[i - 1];
|
||||
}
|
||||
array[index] = value;
|
||||
}
|
||||
function removeEmptyFinalLines(mappings) {
|
||||
const { length } = mappings;
|
||||
let len = length;
|
||||
for (let i = len - 1; i >= 0; len = i, i--) {
|
||||
if (mappings[i].length > 0) break;
|
||||
}
|
||||
if (len < length) mappings.length = len;
|
||||
}
|
||||
function putAll(setarr, array) {
|
||||
for (let i = 0; i < array.length; i++) put(setarr, array[i]);
|
||||
}
|
||||
function skipSourceless(line, index) {
|
||||
if (index === 0) return true;
|
||||
const prev = line[index - 1];
|
||||
return prev.length === 1;
|
||||
}
|
||||
function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {
|
||||
if (index === 0) return false;
|
||||
const prev = line[index - 1];
|
||||
if (prev.length === 1) return false;
|
||||
return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME);
|
||||
}
|
||||
function addMappingInternal(skipable, map, mapping) {
|
||||
const { generated, source, original, name, content } = mapping;
|
||||
if (!source) {
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
);
|
||||
}
|
||||
assert(original);
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
source,
|
||||
original.line - 1,
|
||||
original.column,
|
||||
name,
|
||||
content
|
||||
);
|
||||
}
|
||||
}));
|
||||
//# sourceMappingURL=gen-mapping.umd.js.map
|
||||
-6
File diff suppressed because one or more lines are too long
-88
@@ -1,88 +0,0 @@
|
||||
import type { SourceMapInput } from '@jridgewell/trace-mapping';
|
||||
import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';
|
||||
export type { DecodedSourceMap, EncodedSourceMap, Mapping };
|
||||
export type Options = {
|
||||
file?: string | null;
|
||||
sourceRoot?: string | null;
|
||||
};
|
||||
/**
|
||||
* Provides the state to generate a sourcemap.
|
||||
*/
|
||||
export declare class GenMapping {
|
||||
private _names;
|
||||
private _sources;
|
||||
private _sourcesContent;
|
||||
private _mappings;
|
||||
private _ignoreList;
|
||||
file: string | null | undefined;
|
||||
sourceRoot: string | null | undefined;
|
||||
constructor({ file, sourceRoot }?: Options);
|
||||
}
|
||||
/**
|
||||
* A low-level API to associate a generated position with an original source position. Line and
|
||||
* column here are 0-based, unlike `addMapping`.
|
||||
*/
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void;
|
||||
/**
|
||||
* A high-level API to associate a generated position with an original source position. Line is
|
||||
* 1-based, but column is 0-based, due to legacy behavior in `source-map` library.
|
||||
*/
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source?: null;
|
||||
original?: null;
|
||||
name?: null;
|
||||
content?: null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name?: null;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
/**
|
||||
* Same as `addSegment`, but will only add the segment if it generates useful information in the
|
||||
* resulting map. This only works correctly if segments are added **in order**, meaning you should
|
||||
* not add a segment with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddSegment: typeof addSegment;
|
||||
/**
|
||||
* Same as `addMapping`, but will only add the mapping if it generates useful information in the
|
||||
* resulting map. This only works correctly if mappings are added **in order**, meaning you should
|
||||
* not add a mapping with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddMapping: typeof addMapping;
|
||||
/**
|
||||
* Adds/removes the content of the source file to the source map.
|
||||
*/
|
||||
export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void;
|
||||
export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void;
|
||||
/**
|
||||
* Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toDecodedMap(map: GenMapping): DecodedSourceMap;
|
||||
/**
|
||||
* Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toEncodedMap(map: GenMapping): EncodedSourceMap;
|
||||
/**
|
||||
* Constructs a new GenMapping, using the already present mappings of the input.
|
||||
*/
|
||||
export declare function fromMap(input: SourceMapInput): GenMapping;
|
||||
/**
|
||||
* Returns an array of high-level mapping objects for every recorded segment, which could then be
|
||||
* passed to the `source-map` library.
|
||||
*/
|
||||
export declare function allMappings(map: GenMapping): Mapping[];
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
type Key = string | number | symbol;
|
||||
/**
|
||||
* SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
|
||||
* index of the `key` in the backing array.
|
||||
*
|
||||
* This is designed to allow synchronizing a second array with the contents of the backing array,
|
||||
* like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
|
||||
* and there are never duplicates.
|
||||
*/
|
||||
export declare class SetArray<T extends Key = Key> {
|
||||
private _indexes;
|
||||
array: readonly T[];
|
||||
constructor();
|
||||
}
|
||||
/**
|
||||
* Gets the index associated with `key` in the backing array, if it is already present.
|
||||
*/
|
||||
export declare function get<T extends Key>(setarr: SetArray<T>, key: T): number | undefined;
|
||||
/**
|
||||
* Puts `key` into the backing array, if it is not already present. Returns
|
||||
* the index of the `key` in the backing array.
|
||||
*/
|
||||
export declare function put<T extends Key>(setarr: SetArray<T>, key: T): number;
|
||||
/**
|
||||
* Pops the last added item out of the SetArray.
|
||||
*/
|
||||
export declare function pop<T extends Key>(setarr: SetArray<T>): void;
|
||||
/**
|
||||
* Removes the key, if it exists in the set.
|
||||
*/
|
||||
export declare function remove<T extends Key>(setarr: SetArray<T>, key: T): void;
|
||||
export {};
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
type GeneratedColumn = number;
|
||||
type SourcesIndex = number;
|
||||
type SourceLine = number;
|
||||
type SourceColumn = number;
|
||||
type NamesIndex = number;
|
||||
export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];
|
||||
export declare const COLUMN = 0;
|
||||
export declare const SOURCES_INDEX = 1;
|
||||
export declare const SOURCE_LINE = 2;
|
||||
export declare const SOURCE_COLUMN = 3;
|
||||
export declare const NAMES_INDEX = 4;
|
||||
export {};
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
import type { SourceMapSegment } from './sourcemap-segment';
|
||||
export interface SourceMapV3 {
|
||||
file?: string | null;
|
||||
names: readonly string[];
|
||||
sourceRoot?: string;
|
||||
sources: readonly (string | null)[];
|
||||
sourcesContent?: readonly (string | null)[];
|
||||
version: 3;
|
||||
ignoreList?: readonly number[];
|
||||
}
|
||||
export interface EncodedSourceMap extends SourceMapV3 {
|
||||
mappings: string;
|
||||
}
|
||||
export interface DecodedSourceMap extends SourceMapV3 {
|
||||
mappings: readonly SourceMapSegment[][];
|
||||
}
|
||||
export interface Pos {
|
||||
line: number;
|
||||
column: number;
|
||||
}
|
||||
export interface OriginalPos extends Pos {
|
||||
source: string;
|
||||
}
|
||||
export interface BindingExpressionRange {
|
||||
start: Pos;
|
||||
expression: string;
|
||||
}
|
||||
export type Mapping = {
|
||||
generated: Pos;
|
||||
source: undefined;
|
||||
original: undefined;
|
||||
name: undefined;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: undefined;
|
||||
};
|
||||
-99
@@ -1,99 +0,0 @@
|
||||
{
|
||||
"_from": "@jridgewell/gen-mapping@^0.3.5",
|
||||
"_id": "@jridgewell/gen-mapping@0.3.13",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
|
||||
"_location": "/@jridgewell/gen-mapping",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "@jridgewell/gen-mapping@^0.3.5",
|
||||
"name": "@jridgewell/gen-mapping",
|
||||
"escapedName": "@jridgewell%2fgen-mapping",
|
||||
"scope": "@jridgewell",
|
||||
"rawSpec": "^0.3.5",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^0.3.5"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/@jridgewell/source-map"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
|
||||
"_shasum": "6342a19f44347518c93e43b1ac69deb3c4656a1f",
|
||||
"_spec": "@jridgewell/gen-mapping@^0.3.5",
|
||||
"_where": "/root/dns/node_modules/@jridgewell/source-map",
|
||||
"author": {
|
||||
"name": "Justin Ridgewell",
|
||||
"email": "justin@ridgewell.name"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jridgewell/sourcemaps/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Generate source maps",
|
||||
"exports": {
|
||||
".": [
|
||||
{
|
||||
"import": {
|
||||
"types": "./types/gen-mapping.d.mts",
|
||||
"default": "./dist/gen-mapping.mjs"
|
||||
},
|
||||
"default": {
|
||||
"types": "./types/gen-mapping.d.cts",
|
||||
"default": "./dist/gen-mapping.umd.js"
|
||||
}
|
||||
},
|
||||
"./dist/gen-mapping.umd.js"
|
||||
],
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"src",
|
||||
"types"
|
||||
],
|
||||
"homepage": "https://github.com/jridgewell/sourcemaps/tree/main/packages/gen-mapping",
|
||||
"keywords": [
|
||||
"source",
|
||||
"map"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "dist/gen-mapping.umd.js",
|
||||
"module": "dist/gen-mapping.mjs",
|
||||
"name": "@jridgewell/gen-mapping",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jridgewell/sourcemaps.git",
|
||||
"directory": "packages/gen-mapping"
|
||||
},
|
||||
"scripts": {
|
||||
"benchmark": "run-s build:code benchmark:*",
|
||||
"benchmark:install": "cd benchmark && npm install",
|
||||
"benchmark:only": "node --expose-gc benchmark/index.js",
|
||||
"build": "run-s -n build:code build:types",
|
||||
"build:code": "node ../../esbuild.mjs gen-mapping.ts",
|
||||
"build:types": "run-s build:types:force build:types:emit build:types:mts",
|
||||
"build:types:emit": "tsc --project tsconfig.build.json",
|
||||
"build:types:force": "rimraf tsconfig.build.tsbuildinfo",
|
||||
"build:types:mts": "node ../../mts-types.mjs",
|
||||
"clean": "run-s -n clean:code clean:types",
|
||||
"clean:code": "tsc --build --clean tsconfig.build.json",
|
||||
"clean:types": "rimraf dist types",
|
||||
"lint": "run-s -n lint:types lint:format",
|
||||
"lint:format": "npm run test:format -- --write",
|
||||
"lint:types": "npm run test:types -- --fix",
|
||||
"prepublishOnly": "npm run-s -n build test",
|
||||
"test": "run-s -n test:types test:only test:format",
|
||||
"test:format": "prettier --check '{src,test}/**/*.ts'",
|
||||
"test:only": "mocha",
|
||||
"test:types": "eslint '{src,test}/**/*.ts'"
|
||||
},
|
||||
"types": "types/gen-mapping.d.cts",
|
||||
"version": "0.3.13"
|
||||
}
|
||||
-614
@@ -1,614 +0,0 @@
|
||||
import { SetArray, put, remove } from './set-array';
|
||||
import {
|
||||
encode,
|
||||
// encodeGeneratedRanges,
|
||||
// encodeOriginalScopes
|
||||
} from '@jridgewell/sourcemap-codec';
|
||||
import { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';
|
||||
|
||||
import {
|
||||
COLUMN,
|
||||
SOURCES_INDEX,
|
||||
SOURCE_LINE,
|
||||
SOURCE_COLUMN,
|
||||
NAMES_INDEX,
|
||||
} from './sourcemap-segment';
|
||||
|
||||
import type { SourceMapInput } from '@jridgewell/trace-mapping';
|
||||
// import type { OriginalScope, GeneratedRange } from '@jridgewell/sourcemap-codec';
|
||||
import type { SourceMapSegment } from './sourcemap-segment';
|
||||
import type {
|
||||
DecodedSourceMap,
|
||||
EncodedSourceMap,
|
||||
Pos,
|
||||
Mapping,
|
||||
// BindingExpressionRange,
|
||||
// OriginalPos,
|
||||
// OriginalScopeInfo,
|
||||
// GeneratedRangeInfo,
|
||||
} from './types';
|
||||
|
||||
export type { DecodedSourceMap, EncodedSourceMap, Mapping };
|
||||
|
||||
export type Options = {
|
||||
file?: string | null;
|
||||
sourceRoot?: string | null;
|
||||
};
|
||||
|
||||
const NO_NAME = -1;
|
||||
|
||||
/**
|
||||
* Provides the state to generate a sourcemap.
|
||||
*/
|
||||
export class GenMapping {
|
||||
declare private _names: SetArray<string>;
|
||||
declare private _sources: SetArray<string>;
|
||||
declare private _sourcesContent: (string | null)[];
|
||||
declare private _mappings: SourceMapSegment[][];
|
||||
// private declare _originalScopes: OriginalScope[][];
|
||||
// private declare _generatedRanges: GeneratedRange[];
|
||||
declare private _ignoreList: SetArray<number>;
|
||||
declare file: string | null | undefined;
|
||||
declare sourceRoot: string | null | undefined;
|
||||
|
||||
constructor({ file, sourceRoot }: Options = {}) {
|
||||
this._names = new SetArray();
|
||||
this._sources = new SetArray();
|
||||
this._sourcesContent = [];
|
||||
this._mappings = [];
|
||||
// this._originalScopes = [];
|
||||
// this._generatedRanges = [];
|
||||
this.file = file;
|
||||
this.sourceRoot = sourceRoot;
|
||||
this._ignoreList = new SetArray();
|
||||
}
|
||||
}
|
||||
|
||||
interface PublicMap {
|
||||
_names: GenMapping['_names'];
|
||||
_sources: GenMapping['_sources'];
|
||||
_sourcesContent: GenMapping['_sourcesContent'];
|
||||
_mappings: GenMapping['_mappings'];
|
||||
// _originalScopes: GenMapping['_originalScopes'];
|
||||
// _generatedRanges: GenMapping['_generatedRanges'];
|
||||
_ignoreList: GenMapping['_ignoreList'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Typescript doesn't allow friend access to private fields, so this just casts the map into a type
|
||||
* with public access modifiers.
|
||||
*/
|
||||
function cast(map: unknown): PublicMap {
|
||||
return map as any;
|
||||
}
|
||||
|
||||
/**
|
||||
* A low-level API to associate a generated position with an original source position. Line and
|
||||
* column here are 0-based, unlike `addMapping`.
|
||||
*/
|
||||
export function addSegment(
|
||||
map: GenMapping,
|
||||
genLine: number,
|
||||
genColumn: number,
|
||||
source?: null,
|
||||
sourceLine?: null,
|
||||
sourceColumn?: null,
|
||||
name?: null,
|
||||
content?: null,
|
||||
): void;
|
||||
export function addSegment(
|
||||
map: GenMapping,
|
||||
genLine: number,
|
||||
genColumn: number,
|
||||
source: string,
|
||||
sourceLine: number,
|
||||
sourceColumn: number,
|
||||
name?: null,
|
||||
content?: string | null,
|
||||
): void;
|
||||
export function addSegment(
|
||||
map: GenMapping,
|
||||
genLine: number,
|
||||
genColumn: number,
|
||||
source: string,
|
||||
sourceLine: number,
|
||||
sourceColumn: number,
|
||||
name: string,
|
||||
content?: string | null,
|
||||
): void;
|
||||
export function addSegment(
|
||||
map: GenMapping,
|
||||
genLine: number,
|
||||
genColumn: number,
|
||||
source?: string | null,
|
||||
sourceLine?: number | null,
|
||||
sourceColumn?: number | null,
|
||||
name?: string | null,
|
||||
content?: string | null,
|
||||
): void {
|
||||
return addSegmentInternal(
|
||||
false,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A high-level API to associate a generated position with an original source position. Line is
|
||||
* 1-based, but column is 0-based, due to legacy behavior in `source-map` library.
|
||||
*/
|
||||
export function addMapping(
|
||||
map: GenMapping,
|
||||
mapping: {
|
||||
generated: Pos;
|
||||
source?: null;
|
||||
original?: null;
|
||||
name?: null;
|
||||
content?: null;
|
||||
},
|
||||
): void;
|
||||
export function addMapping(
|
||||
map: GenMapping,
|
||||
mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name?: null;
|
||||
content?: string | null;
|
||||
},
|
||||
): void;
|
||||
export function addMapping(
|
||||
map: GenMapping,
|
||||
mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
content?: string | null;
|
||||
},
|
||||
): void;
|
||||
export function addMapping(
|
||||
map: GenMapping,
|
||||
mapping: {
|
||||
generated: Pos;
|
||||
source?: string | null;
|
||||
original?: Pos | null;
|
||||
name?: string | null;
|
||||
content?: string | null;
|
||||
},
|
||||
): void {
|
||||
return addMappingInternal(false, map, mapping as Parameters<typeof addMappingInternal>[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as `addSegment`, but will only add the segment if it generates useful information in the
|
||||
* resulting map. This only works correctly if segments are added **in order**, meaning you should
|
||||
* not add a segment with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export const maybeAddSegment: typeof addSegment = (
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content,
|
||||
) => {
|
||||
return addSegmentInternal(
|
||||
true,
|
||||
map,
|
||||
genLine,
|
||||
genColumn,
|
||||
source,
|
||||
sourceLine,
|
||||
sourceColumn,
|
||||
name,
|
||||
content,
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Same as `addMapping`, but will only add the mapping if it generates useful information in the
|
||||
* resulting map. This only works correctly if mappings are added **in order**, meaning you should
|
||||
* not add a mapping with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export const maybeAddMapping: typeof addMapping = (map, mapping) => {
|
||||
return addMappingInternal(true, map, mapping as Parameters<typeof addMappingInternal>[2]);
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds/removes the content of the source file to the source map.
|
||||
*/
|
||||
export function setSourceContent(map: GenMapping, source: string, content: string | null): void {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast(map);
|
||||
const index = put(sources, source);
|
||||
sourcesContent[index] = content;
|
||||
// if (index === originalScopes.length) originalScopes[index] = [];
|
||||
}
|
||||
|
||||
export function setIgnore(map: GenMapping, source: string, ignore = true) {
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_ignoreList: ignoreList,
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast(map);
|
||||
const index = put(sources, source);
|
||||
if (index === sourcesContent.length) sourcesContent[index] = null;
|
||||
// if (index === originalScopes.length) originalScopes[index] = [];
|
||||
if (ignore) put(ignoreList, index);
|
||||
else remove(ignoreList, index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export function toDecodedMap(map: GenMapping): DecodedSourceMap {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names,
|
||||
_ignoreList: ignoreList,
|
||||
// _originalScopes: originalScopes,
|
||||
// _generatedRanges: generatedRanges,
|
||||
} = cast(map);
|
||||
removeEmptyFinalLines(mappings);
|
||||
|
||||
return {
|
||||
version: 3,
|
||||
file: map.file || undefined,
|
||||
names: names.array,
|
||||
sourceRoot: map.sourceRoot || undefined,
|
||||
sources: sources.array,
|
||||
sourcesContent,
|
||||
mappings,
|
||||
// originalScopes,
|
||||
// generatedRanges,
|
||||
ignoreList: ignoreList.array,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export function toEncodedMap(map: GenMapping): EncodedSourceMap {
|
||||
const decoded = toDecodedMap(map);
|
||||
return Object.assign({}, decoded, {
|
||||
// originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)),
|
||||
// generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]),
|
||||
mappings: encode(decoded.mappings as SourceMapSegment[][]),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new GenMapping, using the already present mappings of the input.
|
||||
*/
|
||||
export function fromMap(input: SourceMapInput): GenMapping {
|
||||
const map = new TraceMap(input);
|
||||
const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });
|
||||
|
||||
putAll(cast(gen)._names, map.names);
|
||||
putAll(cast(gen)._sources, map.sources as string[]);
|
||||
cast(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null);
|
||||
cast(gen)._mappings = decodedMappings(map) as GenMapping['_mappings'];
|
||||
// TODO: implement originalScopes/generatedRanges
|
||||
if (map.ignoreList) putAll(cast(gen)._ignoreList, map.ignoreList);
|
||||
|
||||
return gen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of high-level mapping objects for every recorded segment, which could then be
|
||||
* passed to the `source-map` library.
|
||||
*/
|
||||
export function allMappings(map: GenMapping): Mapping[] {
|
||||
const out: Mapping[] = [];
|
||||
const { _mappings: mappings, _sources: sources, _names: names } = cast(map);
|
||||
|
||||
for (let i = 0; i < mappings.length; i++) {
|
||||
const line = mappings[i];
|
||||
for (let j = 0; j < line.length; j++) {
|
||||
const seg = line[j];
|
||||
|
||||
const generated = { line: i + 1, column: seg[COLUMN] };
|
||||
let source: string | undefined = undefined;
|
||||
let original: Pos | undefined = undefined;
|
||||
let name: string | undefined = undefined;
|
||||
|
||||
if (seg.length !== 1) {
|
||||
source = sources.array[seg[SOURCES_INDEX]];
|
||||
original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };
|
||||
|
||||
if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];
|
||||
}
|
||||
|
||||
out.push({ generated, source, original, name } as Mapping);
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
// This split declaration is only so that terser can elminiate the static initialization block.
|
||||
function addSegmentInternal<S extends string | null | undefined>(
|
||||
skipable: boolean,
|
||||
map: GenMapping,
|
||||
genLine: number,
|
||||
genColumn: number,
|
||||
source: S,
|
||||
sourceLine: S extends string ? number : null | undefined,
|
||||
sourceColumn: S extends string ? number : null | undefined,
|
||||
name: S extends string ? string | null | undefined : null | undefined,
|
||||
content: S extends string ? string | null | undefined : null | undefined,
|
||||
): void {
|
||||
const {
|
||||
_mappings: mappings,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_names: names,
|
||||
// _originalScopes: originalScopes,
|
||||
} = cast(map);
|
||||
const line = getIndex(mappings, genLine);
|
||||
const index = getColumnIndex(line, genColumn);
|
||||
|
||||
if (!source) {
|
||||
if (skipable && skipSourceless(line, index)) return;
|
||||
return insert(line, index, [genColumn]);
|
||||
}
|
||||
|
||||
// Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source
|
||||
// isn't nullish.
|
||||
assert<number>(sourceLine);
|
||||
assert<number>(sourceColumn);
|
||||
|
||||
const sourcesIndex = put(sources, source);
|
||||
const namesIndex = name ? put(names, name) : NO_NAME;
|
||||
if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null;
|
||||
// if (sourcesIndex === originalScopes.length) originalScopes[sourcesIndex] = [];
|
||||
|
||||
if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return insert(
|
||||
line,
|
||||
index,
|
||||
name
|
||||
? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]
|
||||
: [genColumn, sourcesIndex, sourceLine, sourceColumn],
|
||||
);
|
||||
}
|
||||
|
||||
function assert<T>(_val: unknown): asserts _val is T {
|
||||
// noop.
|
||||
}
|
||||
|
||||
function getIndex<T>(arr: T[][], index: number): T[] {
|
||||
for (let i = arr.length; i <= index; i++) {
|
||||
arr[i] = [];
|
||||
}
|
||||
return arr[index];
|
||||
}
|
||||
|
||||
function getColumnIndex(line: SourceMapSegment[], genColumn: number): number {
|
||||
let index = line.length;
|
||||
for (let i = index - 1; i >= 0; index = i--) {
|
||||
const current = line[i];
|
||||
if (genColumn >= current[COLUMN]) break;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
function insert<T>(array: T[], index: number, value: T) {
|
||||
for (let i = array.length; i > index; i--) {
|
||||
array[i] = array[i - 1];
|
||||
}
|
||||
array[index] = value;
|
||||
}
|
||||
|
||||
function removeEmptyFinalLines(mappings: SourceMapSegment[][]) {
|
||||
const { length } = mappings;
|
||||
let len = length;
|
||||
for (let i = len - 1; i >= 0; len = i, i--) {
|
||||
if (mappings[i].length > 0) break;
|
||||
}
|
||||
if (len < length) mappings.length = len;
|
||||
}
|
||||
|
||||
function putAll<T extends string | number>(setarr: SetArray<T>, array: T[]) {
|
||||
for (let i = 0; i < array.length; i++) put(setarr, array[i]);
|
||||
}
|
||||
|
||||
function skipSourceless(line: SourceMapSegment[], index: number): boolean {
|
||||
// The start of a line is already sourceless, so adding a sourceless segment to the beginning
|
||||
// doesn't generate any useful information.
|
||||
if (index === 0) return true;
|
||||
|
||||
const prev = line[index - 1];
|
||||
// If the previous segment is also sourceless, then adding another sourceless segment doesn't
|
||||
// genrate any new information. Else, this segment will end the source/named segment and point to
|
||||
// a sourceless position, which is useful.
|
||||
return prev.length === 1;
|
||||
}
|
||||
|
||||
function skipSource(
|
||||
line: SourceMapSegment[],
|
||||
index: number,
|
||||
sourcesIndex: number,
|
||||
sourceLine: number,
|
||||
sourceColumn: number,
|
||||
namesIndex: number,
|
||||
): boolean {
|
||||
// A source/named segment at the start of a line gives position at that genColumn
|
||||
if (index === 0) return false;
|
||||
|
||||
const prev = line[index - 1];
|
||||
|
||||
// If the previous segment is sourceless, then we're transitioning to a source.
|
||||
if (prev.length === 1) return false;
|
||||
|
||||
// If the previous segment maps to the exact same source position, then this segment doesn't
|
||||
// provide any new position information.
|
||||
return (
|
||||
sourcesIndex === prev[SOURCES_INDEX] &&
|
||||
sourceLine === prev[SOURCE_LINE] &&
|
||||
sourceColumn === prev[SOURCE_COLUMN] &&
|
||||
namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)
|
||||
);
|
||||
}
|
||||
|
||||
function addMappingInternal<S extends string | null | undefined>(
|
||||
skipable: boolean,
|
||||
map: GenMapping,
|
||||
mapping: {
|
||||
generated: Pos;
|
||||
source: S;
|
||||
original: S extends string ? Pos : null | undefined;
|
||||
name: S extends string ? string | null | undefined : null | undefined;
|
||||
content: S extends string ? string | null | undefined : null | undefined;
|
||||
},
|
||||
) {
|
||||
const { generated, source, original, name, content } = mapping;
|
||||
if (!source) {
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
);
|
||||
}
|
||||
assert<Pos>(original);
|
||||
return addSegmentInternal(
|
||||
skipable,
|
||||
map,
|
||||
generated.line - 1,
|
||||
generated.column,
|
||||
source as string,
|
||||
original.line - 1,
|
||||
original.column,
|
||||
name,
|
||||
content,
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
export function addOriginalScope(
|
||||
map: GenMapping,
|
||||
data: {
|
||||
start: Pos;
|
||||
end: Pos;
|
||||
source: string;
|
||||
kind: string;
|
||||
name?: string;
|
||||
variables?: string[];
|
||||
},
|
||||
): OriginalScopeInfo {
|
||||
const { start, end, source, kind, name, variables } = data;
|
||||
const {
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_originalScopes: originalScopes,
|
||||
_names: names,
|
||||
} = cast(map);
|
||||
const index = put(sources, source);
|
||||
if (index === sourcesContent.length) sourcesContent[index] = null;
|
||||
if (index === originalScopes.length) originalScopes[index] = [];
|
||||
|
||||
const kindIndex = put(names, kind);
|
||||
const scope: OriginalScope = name
|
||||
? [start.line - 1, start.column, end.line - 1, end.column, kindIndex, put(names, name)]
|
||||
: [start.line - 1, start.column, end.line - 1, end.column, kindIndex];
|
||||
if (variables) {
|
||||
scope.vars = variables.map((v) => put(names, v));
|
||||
}
|
||||
const len = originalScopes[index].push(scope);
|
||||
return [index, len - 1, variables];
|
||||
}
|
||||
*/
|
||||
|
||||
// Generated Ranges
|
||||
/*
|
||||
export function addGeneratedRange(
|
||||
map: GenMapping,
|
||||
data: {
|
||||
start: Pos;
|
||||
isScope: boolean;
|
||||
originalScope?: OriginalScopeInfo;
|
||||
callsite?: OriginalPos;
|
||||
},
|
||||
): GeneratedRangeInfo {
|
||||
const { start, isScope, originalScope, callsite } = data;
|
||||
const {
|
||||
_originalScopes: originalScopes,
|
||||
_sources: sources,
|
||||
_sourcesContent: sourcesContent,
|
||||
_generatedRanges: generatedRanges,
|
||||
} = cast(map);
|
||||
|
||||
const range: GeneratedRange = [
|
||||
start.line - 1,
|
||||
start.column,
|
||||
0,
|
||||
0,
|
||||
originalScope ? originalScope[0] : -1,
|
||||
originalScope ? originalScope[1] : -1,
|
||||
];
|
||||
if (originalScope?.[2]) {
|
||||
range.bindings = originalScope[2].map(() => [[-1]]);
|
||||
}
|
||||
if (callsite) {
|
||||
const index = put(sources, callsite.source);
|
||||
if (index === sourcesContent.length) sourcesContent[index] = null;
|
||||
if (index === originalScopes.length) originalScopes[index] = [];
|
||||
range.callsite = [index, callsite.line - 1, callsite.column];
|
||||
}
|
||||
if (isScope) range.isScope = true;
|
||||
generatedRanges.push(range);
|
||||
|
||||
return [range, originalScope?.[2]];
|
||||
}
|
||||
|
||||
export function setEndPosition(range: GeneratedRangeInfo, pos: Pos) {
|
||||
range[0][2] = pos.line - 1;
|
||||
range[0][3] = pos.column;
|
||||
}
|
||||
|
||||
export function addBinding(
|
||||
map: GenMapping,
|
||||
range: GeneratedRangeInfo,
|
||||
variable: string,
|
||||
expression: string | BindingExpressionRange,
|
||||
) {
|
||||
const { _names: names } = cast(map);
|
||||
const bindings = (range[0].bindings ||= []);
|
||||
const vars = range[1];
|
||||
|
||||
const index = vars!.indexOf(variable);
|
||||
const binding = getIndex(bindings, index);
|
||||
|
||||
if (typeof expression === 'string') binding[0] = [put(names, expression)];
|
||||
else {
|
||||
const { start } = expression;
|
||||
binding.push([put(names, expression.expression), start.line - 1, start.column]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
-82
@@ -1,82 +0,0 @@
|
||||
type Key = string | number | symbol;
|
||||
|
||||
/**
|
||||
* SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
|
||||
* index of the `key` in the backing array.
|
||||
*
|
||||
* This is designed to allow synchronizing a second array with the contents of the backing array,
|
||||
* like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
|
||||
* and there are never duplicates.
|
||||
*/
|
||||
export class SetArray<T extends Key = Key> {
|
||||
declare private _indexes: Record<T, number | undefined>;
|
||||
declare array: readonly T[];
|
||||
|
||||
constructor() {
|
||||
this._indexes = { __proto__: null } as any;
|
||||
this.array = [];
|
||||
}
|
||||
}
|
||||
|
||||
interface PublicSet<T extends Key> {
|
||||
array: T[];
|
||||
_indexes: SetArray<T>['_indexes'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Typescript doesn't allow friend access to private fields, so this just casts the set into a type
|
||||
* with public access modifiers.
|
||||
*/
|
||||
function cast<T extends Key>(set: SetArray<T>): PublicSet<T> {
|
||||
return set as any;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the index associated with `key` in the backing array, if it is already present.
|
||||
*/
|
||||
export function get<T extends Key>(setarr: SetArray<T>, key: T): number | undefined {
|
||||
return cast(setarr)._indexes[key];
|
||||
}
|
||||
|
||||
/**
|
||||
* Puts `key` into the backing array, if it is not already present. Returns
|
||||
* the index of the `key` in the backing array.
|
||||
*/
|
||||
export function put<T extends Key>(setarr: SetArray<T>, key: T): number {
|
||||
// The key may or may not be present. If it is present, it's a number.
|
||||
const index = get(setarr, key);
|
||||
if (index !== undefined) return index;
|
||||
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
|
||||
const length = array.push(key);
|
||||
return (indexes[key] = length - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pops the last added item out of the SetArray.
|
||||
*/
|
||||
export function pop<T extends Key>(setarr: SetArray<T>): void {
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
if (array.length === 0) return;
|
||||
|
||||
const last = array.pop()!;
|
||||
indexes[last] = undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the key, if it exists in the set.
|
||||
*/
|
||||
export function remove<T extends Key>(setarr: SetArray<T>, key: T): void {
|
||||
const index = get(setarr, key);
|
||||
if (index === undefined) return;
|
||||
|
||||
const { array, _indexes: indexes } = cast(setarr);
|
||||
for (let i = index + 1; i < array.length; i++) {
|
||||
const k = array[i];
|
||||
array[i - 1] = k;
|
||||
indexes[k]!--;
|
||||
}
|
||||
indexes[key] = undefined;
|
||||
array.pop();
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
type GeneratedColumn = number;
|
||||
type SourcesIndex = number;
|
||||
type SourceLine = number;
|
||||
type SourceColumn = number;
|
||||
type NamesIndex = number;
|
||||
|
||||
export type SourceMapSegment =
|
||||
| [GeneratedColumn]
|
||||
| [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn]
|
||||
| [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];
|
||||
|
||||
export const COLUMN = 0;
|
||||
export const SOURCES_INDEX = 1;
|
||||
export const SOURCE_LINE = 2;
|
||||
export const SOURCE_COLUMN = 3;
|
||||
export const NAMES_INDEX = 4;
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
// import type { GeneratedRange, OriginalScope } from '@jridgewell/sourcemap-codec';
|
||||
import type { SourceMapSegment } from './sourcemap-segment';
|
||||
|
||||
export interface SourceMapV3 {
|
||||
file?: string | null;
|
||||
names: readonly string[];
|
||||
sourceRoot?: string;
|
||||
sources: readonly (string | null)[];
|
||||
sourcesContent?: readonly (string | null)[];
|
||||
version: 3;
|
||||
ignoreList?: readonly number[];
|
||||
}
|
||||
|
||||
export interface EncodedSourceMap extends SourceMapV3 {
|
||||
mappings: string;
|
||||
// originalScopes: string[];
|
||||
// generatedRanges: string;
|
||||
}
|
||||
|
||||
export interface DecodedSourceMap extends SourceMapV3 {
|
||||
mappings: readonly SourceMapSegment[][];
|
||||
// originalScopes: readonly OriginalScope[][];
|
||||
// generatedRanges: readonly GeneratedRange[];
|
||||
}
|
||||
|
||||
export interface Pos {
|
||||
line: number; // 1-based
|
||||
column: number; // 0-based
|
||||
}
|
||||
|
||||
export interface OriginalPos extends Pos {
|
||||
source: string;
|
||||
}
|
||||
|
||||
export interface BindingExpressionRange {
|
||||
start: Pos;
|
||||
expression: string;
|
||||
}
|
||||
|
||||
// export type OriginalScopeInfo = [number, number, string[] | undefined];
|
||||
// export type GeneratedRangeInfo = [GeneratedRange, string[] | undefined];
|
||||
|
||||
export type Mapping =
|
||||
| {
|
||||
generated: Pos;
|
||||
source: undefined;
|
||||
original: undefined;
|
||||
name: undefined;
|
||||
}
|
||||
| {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
}
|
||||
| {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: undefined;
|
||||
};
|
||||
-89
@@ -1,89 +0,0 @@
|
||||
import type { SourceMapInput } from '@jridgewell/trace-mapping';
|
||||
import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types.cts';
|
||||
export type { DecodedSourceMap, EncodedSourceMap, Mapping };
|
||||
export type Options = {
|
||||
file?: string | null;
|
||||
sourceRoot?: string | null;
|
||||
};
|
||||
/**
|
||||
* Provides the state to generate a sourcemap.
|
||||
*/
|
||||
export declare class GenMapping {
|
||||
private _names;
|
||||
private _sources;
|
||||
private _sourcesContent;
|
||||
private _mappings;
|
||||
private _ignoreList;
|
||||
file: string | null | undefined;
|
||||
sourceRoot: string | null | undefined;
|
||||
constructor({ file, sourceRoot }?: Options);
|
||||
}
|
||||
/**
|
||||
* A low-level API to associate a generated position with an original source position. Line and
|
||||
* column here are 0-based, unlike `addMapping`.
|
||||
*/
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void;
|
||||
/**
|
||||
* A high-level API to associate a generated position with an original source position. Line is
|
||||
* 1-based, but column is 0-based, due to legacy behavior in `source-map` library.
|
||||
*/
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source?: null;
|
||||
original?: null;
|
||||
name?: null;
|
||||
content?: null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name?: null;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
/**
|
||||
* Same as `addSegment`, but will only add the segment if it generates useful information in the
|
||||
* resulting map. This only works correctly if segments are added **in order**, meaning you should
|
||||
* not add a segment with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddSegment: typeof addSegment;
|
||||
/**
|
||||
* Same as `addMapping`, but will only add the mapping if it generates useful information in the
|
||||
* resulting map. This only works correctly if mappings are added **in order**, meaning you should
|
||||
* not add a mapping with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddMapping: typeof addMapping;
|
||||
/**
|
||||
* Adds/removes the content of the source file to the source map.
|
||||
*/
|
||||
export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void;
|
||||
export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void;
|
||||
/**
|
||||
* Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toDecodedMap(map: GenMapping): DecodedSourceMap;
|
||||
/**
|
||||
* Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toEncodedMap(map: GenMapping): EncodedSourceMap;
|
||||
/**
|
||||
* Constructs a new GenMapping, using the already present mappings of the input.
|
||||
*/
|
||||
export declare function fromMap(input: SourceMapInput): GenMapping;
|
||||
/**
|
||||
* Returns an array of high-level mapping objects for every recorded segment, which could then be
|
||||
* passed to the `source-map` library.
|
||||
*/
|
||||
export declare function allMappings(map: GenMapping): Mapping[];
|
||||
//# sourceMappingURL=gen-mapping.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"gen-mapping.d.ts","sourceRoot":"","sources":["../src/gen-mapping.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,EACH,OAAO,EAKR,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAIF;;GAEG;AACH,qBAAa,UAAU;IACrB,QAAgB,MAAM,CAAmB;IACzC,QAAgB,QAAQ,CAAmB;IAC3C,QAAgB,eAAe,CAAoB;IACnD,QAAgB,SAAS,CAAuB;IAGhD,QAAgB,WAAW,CAAmB;IACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBAElC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAE,OAAY;CAW/C;AAoBD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,IAAI,EACb,UAAU,CAAC,EAAE,IAAI,EACjB,YAAY,CAAC,EAAE,IAAI,EACnB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,IAAI,GACb,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AAwBR;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AAcR;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAqBpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAEpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS9F;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,QAYvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAwB9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAO9D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAYzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CA0BtD"}
|
||||
-89
@@ -1,89 +0,0 @@
|
||||
import type { SourceMapInput } from '@jridgewell/trace-mapping';
|
||||
import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types.mts';
|
||||
export type { DecodedSourceMap, EncodedSourceMap, Mapping };
|
||||
export type Options = {
|
||||
file?: string | null;
|
||||
sourceRoot?: string | null;
|
||||
};
|
||||
/**
|
||||
* Provides the state to generate a sourcemap.
|
||||
*/
|
||||
export declare class GenMapping {
|
||||
private _names;
|
||||
private _sources;
|
||||
private _sourcesContent;
|
||||
private _mappings;
|
||||
private _ignoreList;
|
||||
file: string | null | undefined;
|
||||
sourceRoot: string | null | undefined;
|
||||
constructor({ file, sourceRoot }?: Options);
|
||||
}
|
||||
/**
|
||||
* A low-level API to associate a generated position with an original source position. Line and
|
||||
* column here are 0-based, unlike `addMapping`.
|
||||
*/
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void;
|
||||
export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void;
|
||||
/**
|
||||
* A high-level API to associate a generated position with an original source position. Line is
|
||||
* 1-based, but column is 0-based, due to legacy behavior in `source-map` library.
|
||||
*/
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source?: null;
|
||||
original?: null;
|
||||
name?: null;
|
||||
content?: null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name?: null;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
export declare function addMapping(map: GenMapping, mapping: {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
content?: string | null;
|
||||
}): void;
|
||||
/**
|
||||
* Same as `addSegment`, but will only add the segment if it generates useful information in the
|
||||
* resulting map. This only works correctly if segments are added **in order**, meaning you should
|
||||
* not add a segment with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddSegment: typeof addSegment;
|
||||
/**
|
||||
* Same as `addMapping`, but will only add the mapping if it generates useful information in the
|
||||
* resulting map. This only works correctly if mappings are added **in order**, meaning you should
|
||||
* not add a mapping with a lower generated line/column than one that came before.
|
||||
*/
|
||||
export declare const maybeAddMapping: typeof addMapping;
|
||||
/**
|
||||
* Adds/removes the content of the source file to the source map.
|
||||
*/
|
||||
export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void;
|
||||
export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void;
|
||||
/**
|
||||
* Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toDecodedMap(map: GenMapping): DecodedSourceMap;
|
||||
/**
|
||||
* Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects
|
||||
* a sourcemap, or to JSON.stringify.
|
||||
*/
|
||||
export declare function toEncodedMap(map: GenMapping): EncodedSourceMap;
|
||||
/**
|
||||
* Constructs a new GenMapping, using the already present mappings of the input.
|
||||
*/
|
||||
export declare function fromMap(input: SourceMapInput): GenMapping;
|
||||
/**
|
||||
* Returns an array of high-level mapping objects for every recorded segment, which could then be
|
||||
* passed to the `source-map` library.
|
||||
*/
|
||||
export declare function allMappings(map: GenMapping): Mapping[];
|
||||
//# sourceMappingURL=gen-mapping.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"gen-mapping.d.ts","sourceRoot":"","sources":["../src/gen-mapping.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,EACH,OAAO,EAKR,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAIF;;GAEG;AACH,qBAAa,UAAU;IACrB,QAAgB,MAAM,CAAmB;IACzC,QAAgB,QAAQ,CAAmB;IAC3C,QAAgB,eAAe,CAAoB;IACnD,QAAgB,SAAS,CAAuB;IAGhD,QAAgB,WAAW,CAAmB;IACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBAElC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAE,OAAY;CAW/C;AAoBD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,IAAI,EACb,UAAU,CAAC,EAAE,IAAI,EACjB,YAAY,CAAC,EAAE,IAAI,EACnB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,IAAI,GACb,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AAwBR;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AAcR;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAqBpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAEpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS9F;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,QAYvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAwB9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAO9D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAYzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CA0BtD"}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
type Key = string | number | symbol;
|
||||
/**
|
||||
* SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
|
||||
* index of the `key` in the backing array.
|
||||
*
|
||||
* This is designed to allow synchronizing a second array with the contents of the backing array,
|
||||
* like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
|
||||
* and there are never duplicates.
|
||||
*/
|
||||
export declare class SetArray<T extends Key = Key> {
|
||||
private _indexes;
|
||||
array: readonly T[];
|
||||
constructor();
|
||||
}
|
||||
/**
|
||||
* Gets the index associated with `key` in the backing array, if it is already present.
|
||||
*/
|
||||
export declare function get<T extends Key>(setarr: SetArray<T>, key: T): number | undefined;
|
||||
/**
|
||||
* Puts `key` into the backing array, if it is not already present. Returns
|
||||
* the index of the `key` in the backing array.
|
||||
*/
|
||||
export declare function put<T extends Key>(setarr: SetArray<T>, key: T): number;
|
||||
/**
|
||||
* Pops the last added item out of the SetArray.
|
||||
*/
|
||||
export declare function pop<T extends Key>(setarr: SetArray<T>): void;
|
||||
/**
|
||||
* Removes the key, if it exists in the set.
|
||||
*/
|
||||
export declare function remove<T extends Key>(setarr: SetArray<T>, key: T): void;
|
||||
export {};
|
||||
//# sourceMappingURL=set-array.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"set-array.d.ts","sourceRoot":"","sources":["../src/set-array.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IACvC,QAAgB,QAAQ,CAAgC;IAChD,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;;CAM7B;AAeD;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAElF;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAStE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAYvE"}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
type Key = string | number | symbol;
|
||||
/**
|
||||
* SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
|
||||
* index of the `key` in the backing array.
|
||||
*
|
||||
* This is designed to allow synchronizing a second array with the contents of the backing array,
|
||||
* like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
|
||||
* and there are never duplicates.
|
||||
*/
|
||||
export declare class SetArray<T extends Key = Key> {
|
||||
private _indexes;
|
||||
array: readonly T[];
|
||||
constructor();
|
||||
}
|
||||
/**
|
||||
* Gets the index associated with `key` in the backing array, if it is already present.
|
||||
*/
|
||||
export declare function get<T extends Key>(setarr: SetArray<T>, key: T): number | undefined;
|
||||
/**
|
||||
* Puts `key` into the backing array, if it is not already present. Returns
|
||||
* the index of the `key` in the backing array.
|
||||
*/
|
||||
export declare function put<T extends Key>(setarr: SetArray<T>, key: T): number;
|
||||
/**
|
||||
* Pops the last added item out of the SetArray.
|
||||
*/
|
||||
export declare function pop<T extends Key>(setarr: SetArray<T>): void;
|
||||
/**
|
||||
* Removes the key, if it exists in the set.
|
||||
*/
|
||||
export declare function remove<T extends Key>(setarr: SetArray<T>, key: T): void;
|
||||
export {};
|
||||
//# sourceMappingURL=set-array.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"set-array.d.ts","sourceRoot":"","sources":["../src/set-array.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IACvC,QAAgB,QAAQ,CAAgC;IAChD,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;;CAM7B;AAeD;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAElF;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAStE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAYvE"}
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
type GeneratedColumn = number;
|
||||
type SourcesIndex = number;
|
||||
type SourceLine = number;
|
||||
type SourceColumn = number;
|
||||
type NamesIndex = number;
|
||||
export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];
|
||||
export declare const COLUMN = 0;
|
||||
export declare const SOURCES_INDEX = 1;
|
||||
export declare const SOURCE_LINE = 2;
|
||||
export declare const SOURCE_COLUMN = 3;
|
||||
export declare const NAMES_INDEX = 4;
|
||||
export {};
|
||||
//# sourceMappingURL=sourcemap-segment.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC"}
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
type GeneratedColumn = number;
|
||||
type SourcesIndex = number;
|
||||
type SourceLine = number;
|
||||
type SourceColumn = number;
|
||||
type NamesIndex = number;
|
||||
export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];
|
||||
export declare const COLUMN = 0;
|
||||
export declare const SOURCES_INDEX = 1;
|
||||
export declare const SOURCE_LINE = 2;
|
||||
export declare const SOURCE_COLUMN = 3;
|
||||
export declare const NAMES_INDEX = 4;
|
||||
export {};
|
||||
//# sourceMappingURL=sourcemap-segment.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC"}
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
import type { SourceMapSegment } from './sourcemap-segment.cts';
|
||||
export interface SourceMapV3 {
|
||||
file?: string | null;
|
||||
names: readonly string[];
|
||||
sourceRoot?: string;
|
||||
sources: readonly (string | null)[];
|
||||
sourcesContent?: readonly (string | null)[];
|
||||
version: 3;
|
||||
ignoreList?: readonly number[];
|
||||
}
|
||||
export interface EncodedSourceMap extends SourceMapV3 {
|
||||
mappings: string;
|
||||
}
|
||||
export interface DecodedSourceMap extends SourceMapV3 {
|
||||
mappings: readonly SourceMapSegment[][];
|
||||
}
|
||||
export interface Pos {
|
||||
line: number;
|
||||
column: number;
|
||||
}
|
||||
export interface OriginalPos extends Pos {
|
||||
source: string;
|
||||
}
|
||||
export interface BindingExpressionRange {
|
||||
start: Pos;
|
||||
expression: string;
|
||||
}
|
||||
export type Mapping = {
|
||||
generated: Pos;
|
||||
source: undefined;
|
||||
original: undefined;
|
||||
name: undefined;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: undefined;
|
||||
};
|
||||
//# sourceMappingURL=types.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,MAAM,CAAC;CAGlB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EAAE,CAAC;CAGzC;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,MAAM,OAAO,GACf;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC"}
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
import type { SourceMapSegment } from './sourcemap-segment.mts';
|
||||
export interface SourceMapV3 {
|
||||
file?: string | null;
|
||||
names: readonly string[];
|
||||
sourceRoot?: string;
|
||||
sources: readonly (string | null)[];
|
||||
sourcesContent?: readonly (string | null)[];
|
||||
version: 3;
|
||||
ignoreList?: readonly number[];
|
||||
}
|
||||
export interface EncodedSourceMap extends SourceMapV3 {
|
||||
mappings: string;
|
||||
}
|
||||
export interface DecodedSourceMap extends SourceMapV3 {
|
||||
mappings: readonly SourceMapSegment[][];
|
||||
}
|
||||
export interface Pos {
|
||||
line: number;
|
||||
column: number;
|
||||
}
|
||||
export interface OriginalPos extends Pos {
|
||||
source: string;
|
||||
}
|
||||
export interface BindingExpressionRange {
|
||||
start: Pos;
|
||||
expression: string;
|
||||
}
|
||||
export type Mapping = {
|
||||
generated: Pos;
|
||||
source: undefined;
|
||||
original: undefined;
|
||||
name: undefined;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: string;
|
||||
} | {
|
||||
generated: Pos;
|
||||
source: string;
|
||||
original: Pos;
|
||||
name: undefined;
|
||||
};
|
||||
//# sourceMappingURL=types.d.ts.map
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,MAAM,CAAC;CAGlB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EAAE,CAAC;CAGzC;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,MAAM,OAAO,GACf;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC"}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
Copyright 2019 Justin Ridgewell <jridgewell@google.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-40
@@ -1,40 +0,0 @@
|
||||
# @jridgewell/resolve-uri
|
||||
|
||||
> Resolve a URI relative to an optional base URI
|
||||
|
||||
Resolve any combination of absolute URIs, protocol-realtive URIs, absolute paths, or relative paths.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm install @jridgewell/resolve-uri
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```typescript
|
||||
function resolve(input: string, base?: string): string;
|
||||
```
|
||||
|
||||
```js
|
||||
import resolve from '@jridgewell/resolve-uri';
|
||||
|
||||
resolve('foo', 'https://example.com'); // => 'https://example.com/foo'
|
||||
```
|
||||
|
||||
| Input | Base | Resolution | Explanation |
|
||||
|-----------------------|-------------------------|--------------------------------|--------------------------------------------------------------|
|
||||
| `https://example.com` | _any_ | `https://example.com/` | Input is normalized only |
|
||||
| `//example.com` | `https://base.com/` | `https://example.com/` | Input inherits the base's protocol |
|
||||
| `//example.com` | _rest_ | `//example.com/` | Input is normalized only |
|
||||
| `/example` | `https://base.com/` | `https://base.com/example` | Input inherits the base's origin |
|
||||
| `/example` | `//base.com/` | `//base.com/example` | Input inherits the base's host and remains protocol relative |
|
||||
| `/example` | _rest_ | `/example` | Input is normalized only |
|
||||
| `example` | `https://base.com/dir/` | `https://base.com/dir/example` | Input is joined with the base |
|
||||
| `example` | `https://base.com/file` | `https://base.com/example` | Input is joined with the base without its file |
|
||||
| `example` | `//base.com/dir/` | `//base.com/dir/example` | Input is joined with the base's last directory |
|
||||
| `example` | `//base.com/file` | `//base.com/example` | Input is joined with the base without its file |
|
||||
| `example` | `/base/dir/` | `/base/dir/example` | Input is joined with the base's last directory |
|
||||
| `example` | `/base/file` | `/base/example` | Input is joined with the base without its file |
|
||||
| `example` | `base/dir/` | `base/dir/example` | Input is joined with the base's last directory |
|
||||
| `example` | `base/file` | `base/example` | Input is joined with the base without its file |
|
||||
-232
@@ -1,232 +0,0 @@
|
||||
// Matches the scheme of a URL, eg "http://"
|
||||
const schemeRegex = /^[\w+.-]+:\/\//;
|
||||
/**
|
||||
* Matches the parts of a URL:
|
||||
* 1. Scheme, including ":", guaranteed.
|
||||
* 2. User/password, including "@", optional.
|
||||
* 3. Host, guaranteed.
|
||||
* 4. Port, including ":", optional.
|
||||
* 5. Path, including "/", optional.
|
||||
* 6. Query, including "?", optional.
|
||||
* 7. Hash, including "#", optional.
|
||||
*/
|
||||
const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/;
|
||||
/**
|
||||
* File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start
|
||||
* with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).
|
||||
*
|
||||
* 1. Host, optional.
|
||||
* 2. Path, which may include "/", guaranteed.
|
||||
* 3. Query, including "?", optional.
|
||||
* 4. Hash, including "#", optional.
|
||||
*/
|
||||
const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;
|
||||
function isAbsoluteUrl(input) {
|
||||
return schemeRegex.test(input);
|
||||
}
|
||||
function isSchemeRelativeUrl(input) {
|
||||
return input.startsWith('//');
|
||||
}
|
||||
function isAbsolutePath(input) {
|
||||
return input.startsWith('/');
|
||||
}
|
||||
function isFileUrl(input) {
|
||||
return input.startsWith('file:');
|
||||
}
|
||||
function isRelative(input) {
|
||||
return /^[.?#]/.test(input);
|
||||
}
|
||||
function parseAbsoluteUrl(input) {
|
||||
const match = urlRegex.exec(input);
|
||||
return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');
|
||||
}
|
||||
function parseFileUrl(input) {
|
||||
const match = fileRegex.exec(input);
|
||||
const path = match[2];
|
||||
return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');
|
||||
}
|
||||
function makeUrl(scheme, user, host, port, path, query, hash) {
|
||||
return {
|
||||
scheme,
|
||||
user,
|
||||
host,
|
||||
port,
|
||||
path,
|
||||
query,
|
||||
hash,
|
||||
type: 7 /* Absolute */,
|
||||
};
|
||||
}
|
||||
function parseUrl(input) {
|
||||
if (isSchemeRelativeUrl(input)) {
|
||||
const url = parseAbsoluteUrl('http:' + input);
|
||||
url.scheme = '';
|
||||
url.type = 6 /* SchemeRelative */;
|
||||
return url;
|
||||
}
|
||||
if (isAbsolutePath(input)) {
|
||||
const url = parseAbsoluteUrl('http://foo.com' + input);
|
||||
url.scheme = '';
|
||||
url.host = '';
|
||||
url.type = 5 /* AbsolutePath */;
|
||||
return url;
|
||||
}
|
||||
if (isFileUrl(input))
|
||||
return parseFileUrl(input);
|
||||
if (isAbsoluteUrl(input))
|
||||
return parseAbsoluteUrl(input);
|
||||
const url = parseAbsoluteUrl('http://foo.com/' + input);
|
||||
url.scheme = '';
|
||||
url.host = '';
|
||||
url.type = input
|
||||
? input.startsWith('?')
|
||||
? 3 /* Query */
|
||||
: input.startsWith('#')
|
||||
? 2 /* Hash */
|
||||
: 4 /* RelativePath */
|
||||
: 1 /* Empty */;
|
||||
return url;
|
||||
}
|
||||
function stripPathFilename(path) {
|
||||
// If a path ends with a parent directory "..", then it's a relative path with excess parent
|
||||
// paths. It's not a file, so we can't strip it.
|
||||
if (path.endsWith('/..'))
|
||||
return path;
|
||||
const index = path.lastIndexOf('/');
|
||||
return path.slice(0, index + 1);
|
||||
}
|
||||
function mergePaths(url, base) {
|
||||
normalizePath(base, base.type);
|
||||
// If the path is just a "/", then it was an empty path to begin with (remember, we're a relative
|
||||
// path).
|
||||
if (url.path === '/') {
|
||||
url.path = base.path;
|
||||
}
|
||||
else {
|
||||
// Resolution happens relative to the base path's directory, not the file.
|
||||
url.path = stripPathFilename(base.path) + url.path;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The path can have empty directories "//", unneeded parents "foo/..", or current directory
|
||||
* "foo/.". We need to normalize to a standard representation.
|
||||
*/
|
||||
function normalizePath(url, type) {
|
||||
const rel = type <= 4 /* RelativePath */;
|
||||
const pieces = url.path.split('/');
|
||||
// We need to preserve the first piece always, so that we output a leading slash. The item at
|
||||
// pieces[0] is an empty string.
|
||||
let pointer = 1;
|
||||
// Positive is the number of real directories we've output, used for popping a parent directory.
|
||||
// Eg, "foo/bar/.." will have a positive 2, and we can decrement to be left with just "foo".
|
||||
let positive = 0;
|
||||
// We need to keep a trailing slash if we encounter an empty directory (eg, splitting "foo/" will
|
||||
// generate `["foo", ""]` pieces). And, if we pop a parent directory. But once we encounter a
|
||||
// real directory, we won't need to append, unless the other conditions happen again.
|
||||
let addTrailingSlash = false;
|
||||
for (let i = 1; i < pieces.length; i++) {
|
||||
const piece = pieces[i];
|
||||
// An empty directory, could be a trailing slash, or just a double "//" in the path.
|
||||
if (!piece) {
|
||||
addTrailingSlash = true;
|
||||
continue;
|
||||
}
|
||||
// If we encounter a real directory, then we don't need to append anymore.
|
||||
addTrailingSlash = false;
|
||||
// A current directory, which we can always drop.
|
||||
if (piece === '.')
|
||||
continue;
|
||||
// A parent directory, we need to see if there are any real directories we can pop. Else, we
|
||||
// have an excess of parents, and we'll need to keep the "..".
|
||||
if (piece === '..') {
|
||||
if (positive) {
|
||||
addTrailingSlash = true;
|
||||
positive--;
|
||||
pointer--;
|
||||
}
|
||||
else if (rel) {
|
||||
// If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute
|
||||
// URL, protocol relative URL, or an absolute path, we don't need to keep excess.
|
||||
pieces[pointer++] = piece;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// We've encountered a real directory. Move it to the next insertion pointer, which accounts for
|
||||
// any popped or dropped directories.
|
||||
pieces[pointer++] = piece;
|
||||
positive++;
|
||||
}
|
||||
let path = '';
|
||||
for (let i = 1; i < pointer; i++) {
|
||||
path += '/' + pieces[i];
|
||||
}
|
||||
if (!path || (addTrailingSlash && !path.endsWith('/..'))) {
|
||||
path += '/';
|
||||
}
|
||||
url.path = path;
|
||||
}
|
||||
/**
|
||||
* Attempts to resolve `input` URL/path relative to `base`.
|
||||
*/
|
||||
function resolve(input, base) {
|
||||
if (!input && !base)
|
||||
return '';
|
||||
const url = parseUrl(input);
|
||||
let inputType = url.type;
|
||||
if (base && inputType !== 7 /* Absolute */) {
|
||||
const baseUrl = parseUrl(base);
|
||||
const baseType = baseUrl.type;
|
||||
switch (inputType) {
|
||||
case 1 /* Empty */:
|
||||
url.hash = baseUrl.hash;
|
||||
// fall through
|
||||
case 2 /* Hash */:
|
||||
url.query = baseUrl.query;
|
||||
// fall through
|
||||
case 3 /* Query */:
|
||||
case 4 /* RelativePath */:
|
||||
mergePaths(url, baseUrl);
|
||||
// fall through
|
||||
case 5 /* AbsolutePath */:
|
||||
// The host, user, and port are joined, you can't copy one without the others.
|
||||
url.user = baseUrl.user;
|
||||
url.host = baseUrl.host;
|
||||
url.port = baseUrl.port;
|
||||
// fall through
|
||||
case 6 /* SchemeRelative */:
|
||||
// The input doesn't have a schema at least, so we need to copy at least that over.
|
||||
url.scheme = baseUrl.scheme;
|
||||
}
|
||||
if (baseType > inputType)
|
||||
inputType = baseType;
|
||||
}
|
||||
normalizePath(url, inputType);
|
||||
const queryHash = url.query + url.hash;
|
||||
switch (inputType) {
|
||||
// This is impossible, because of the empty checks at the start of the function.
|
||||
// case UrlType.Empty:
|
||||
case 2 /* Hash */:
|
||||
case 3 /* Query */:
|
||||
return queryHash;
|
||||
case 4 /* RelativePath */: {
|
||||
// The first char is always a "/", and we need it to be relative.
|
||||
const path = url.path.slice(1);
|
||||
if (!path)
|
||||
return queryHash || '.';
|
||||
if (isRelative(base || input) && !isRelative(path)) {
|
||||
// If base started with a leading ".", or there is no base and input started with a ".",
|
||||
// then we need to ensure that the relative path starts with a ".". We don't know if
|
||||
// relative starts with a "..", though, so check before prepending.
|
||||
return './' + path + queryHash;
|
||||
}
|
||||
return path + queryHash;
|
||||
}
|
||||
case 5 /* AbsolutePath */:
|
||||
return url.path + queryHash;
|
||||
default:
|
||||
return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;
|
||||
}
|
||||
}
|
||||
|
||||
export { resolve as default };
|
||||
//# sourceMappingURL=resolve-uri.mjs.map
|
||||
-1
File diff suppressed because one or more lines are too long
-240
@@ -1,240 +0,0 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.resolveURI = factory());
|
||||
})(this, (function () { 'use strict';
|
||||
|
||||
// Matches the scheme of a URL, eg "http://"
|
||||
const schemeRegex = /^[\w+.-]+:\/\//;
|
||||
/**
|
||||
* Matches the parts of a URL:
|
||||
* 1. Scheme, including ":", guaranteed.
|
||||
* 2. User/password, including "@", optional.
|
||||
* 3. Host, guaranteed.
|
||||
* 4. Port, including ":", optional.
|
||||
* 5. Path, including "/", optional.
|
||||
* 6. Query, including "?", optional.
|
||||
* 7. Hash, including "#", optional.
|
||||
*/
|
||||
const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/;
|
||||
/**
|
||||
* File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start
|
||||
* with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).
|
||||
*
|
||||
* 1. Host, optional.
|
||||
* 2. Path, which may include "/", guaranteed.
|
||||
* 3. Query, including "?", optional.
|
||||
* 4. Hash, including "#", optional.
|
||||
*/
|
||||
const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;
|
||||
function isAbsoluteUrl(input) {
|
||||
return schemeRegex.test(input);
|
||||
}
|
||||
function isSchemeRelativeUrl(input) {
|
||||
return input.startsWith('//');
|
||||
}
|
||||
function isAbsolutePath(input) {
|
||||
return input.startsWith('/');
|
||||
}
|
||||
function isFileUrl(input) {
|
||||
return input.startsWith('file:');
|
||||
}
|
||||
function isRelative(input) {
|
||||
return /^[.?#]/.test(input);
|
||||
}
|
||||
function parseAbsoluteUrl(input) {
|
||||
const match = urlRegex.exec(input);
|
||||
return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');
|
||||
}
|
||||
function parseFileUrl(input) {
|
||||
const match = fileRegex.exec(input);
|
||||
const path = match[2];
|
||||
return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');
|
||||
}
|
||||
function makeUrl(scheme, user, host, port, path, query, hash) {
|
||||
return {
|
||||
scheme,
|
||||
user,
|
||||
host,
|
||||
port,
|
||||
path,
|
||||
query,
|
||||
hash,
|
||||
type: 7 /* Absolute */,
|
||||
};
|
||||
}
|
||||
function parseUrl(input) {
|
||||
if (isSchemeRelativeUrl(input)) {
|
||||
const url = parseAbsoluteUrl('http:' + input);
|
||||
url.scheme = '';
|
||||
url.type = 6 /* SchemeRelative */;
|
||||
return url;
|
||||
}
|
||||
if (isAbsolutePath(input)) {
|
||||
const url = parseAbsoluteUrl('http://foo.com' + input);
|
||||
url.scheme = '';
|
||||
url.host = '';
|
||||
url.type = 5 /* AbsolutePath */;
|
||||
return url;
|
||||
}
|
||||
if (isFileUrl(input))
|
||||
return parseFileUrl(input);
|
||||
if (isAbsoluteUrl(input))
|
||||
return parseAbsoluteUrl(input);
|
||||
const url = parseAbsoluteUrl('http://foo.com/' + input);
|
||||
url.scheme = '';
|
||||
url.host = '';
|
||||
url.type = input
|
||||
? input.startsWith('?')
|
||||
? 3 /* Query */
|
||||
: input.startsWith('#')
|
||||
? 2 /* Hash */
|
||||
: 4 /* RelativePath */
|
||||
: 1 /* Empty */;
|
||||
return url;
|
||||
}
|
||||
function stripPathFilename(path) {
|
||||
// If a path ends with a parent directory "..", then it's a relative path with excess parent
|
||||
// paths. It's not a file, so we can't strip it.
|
||||
if (path.endsWith('/..'))
|
||||
return path;
|
||||
const index = path.lastIndexOf('/');
|
||||
return path.slice(0, index + 1);
|
||||
}
|
||||
function mergePaths(url, base) {
|
||||
normalizePath(base, base.type);
|
||||
// If the path is just a "/", then it was an empty path to begin with (remember, we're a relative
|
||||
// path).
|
||||
if (url.path === '/') {
|
||||
url.path = base.path;
|
||||
}
|
||||
else {
|
||||
// Resolution happens relative to the base path's directory, not the file.
|
||||
url.path = stripPathFilename(base.path) + url.path;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The path can have empty directories "//", unneeded parents "foo/..", or current directory
|
||||
* "foo/.". We need to normalize to a standard representation.
|
||||
*/
|
||||
function normalizePath(url, type) {
|
||||
const rel = type <= 4 /* RelativePath */;
|
||||
const pieces = url.path.split('/');
|
||||
// We need to preserve the first piece always, so that we output a leading slash. The item at
|
||||
// pieces[0] is an empty string.
|
||||
let pointer = 1;
|
||||
// Positive is the number of real directories we've output, used for popping a parent directory.
|
||||
// Eg, "foo/bar/.." will have a positive 2, and we can decrement to be left with just "foo".
|
||||
let positive = 0;
|
||||
// We need to keep a trailing slash if we encounter an empty directory (eg, splitting "foo/" will
|
||||
// generate `["foo", ""]` pieces). And, if we pop a parent directory. But once we encounter a
|
||||
// real directory, we won't need to append, unless the other conditions happen again.
|
||||
let addTrailingSlash = false;
|
||||
for (let i = 1; i < pieces.length; i++) {
|
||||
const piece = pieces[i];
|
||||
// An empty directory, could be a trailing slash, or just a double "//" in the path.
|
||||
if (!piece) {
|
||||
addTrailingSlash = true;
|
||||
continue;
|
||||
}
|
||||
// If we encounter a real directory, then we don't need to append anymore.
|
||||
addTrailingSlash = false;
|
||||
// A current directory, which we can always drop.
|
||||
if (piece === '.')
|
||||
continue;
|
||||
// A parent directory, we need to see if there are any real directories we can pop. Else, we
|
||||
// have an excess of parents, and we'll need to keep the "..".
|
||||
if (piece === '..') {
|
||||
if (positive) {
|
||||
addTrailingSlash = true;
|
||||
positive--;
|
||||
pointer--;
|
||||
}
|
||||
else if (rel) {
|
||||
// If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute
|
||||
// URL, protocol relative URL, or an absolute path, we don't need to keep excess.
|
||||
pieces[pointer++] = piece;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// We've encountered a real directory. Move it to the next insertion pointer, which accounts for
|
||||
// any popped or dropped directories.
|
||||
pieces[pointer++] = piece;
|
||||
positive++;
|
||||
}
|
||||
let path = '';
|
||||
for (let i = 1; i < pointer; i++) {
|
||||
path += '/' + pieces[i];
|
||||
}
|
||||
if (!path || (addTrailingSlash && !path.endsWith('/..'))) {
|
||||
path += '/';
|
||||
}
|
||||
url.path = path;
|
||||
}
|
||||
/**
|
||||
* Attempts to resolve `input` URL/path relative to `base`.
|
||||
*/
|
||||
function resolve(input, base) {
|
||||
if (!input && !base)
|
||||
return '';
|
||||
const url = parseUrl(input);
|
||||
let inputType = url.type;
|
||||
if (base && inputType !== 7 /* Absolute */) {
|
||||
const baseUrl = parseUrl(base);
|
||||
const baseType = baseUrl.type;
|
||||
switch (inputType) {
|
||||
case 1 /* Empty */:
|
||||
url.hash = baseUrl.hash;
|
||||
// fall through
|
||||
case 2 /* Hash */:
|
||||
url.query = baseUrl.query;
|
||||
// fall through
|
||||
case 3 /* Query */:
|
||||
case 4 /* RelativePath */:
|
||||
mergePaths(url, baseUrl);
|
||||
// fall through
|
||||
case 5 /* AbsolutePath */:
|
||||
// The host, user, and port are joined, you can't copy one without the others.
|
||||
url.user = baseUrl.user;
|
||||
url.host = baseUrl.host;
|
||||
url.port = baseUrl.port;
|
||||
// fall through
|
||||
case 6 /* SchemeRelative */:
|
||||
// The input doesn't have a schema at least, so we need to copy at least that over.
|
||||
url.scheme = baseUrl.scheme;
|
||||
}
|
||||
if (baseType > inputType)
|
||||
inputType = baseType;
|
||||
}
|
||||
normalizePath(url, inputType);
|
||||
const queryHash = url.query + url.hash;
|
||||
switch (inputType) {
|
||||
// This is impossible, because of the empty checks at the start of the function.
|
||||
// case UrlType.Empty:
|
||||
case 2 /* Hash */:
|
||||
case 3 /* Query */:
|
||||
return queryHash;
|
||||
case 4 /* RelativePath */: {
|
||||
// The first char is always a "/", and we need it to be relative.
|
||||
const path = url.path.slice(1);
|
||||
if (!path)
|
||||
return queryHash || '.';
|
||||
if (isRelative(base || input) && !isRelative(path)) {
|
||||
// If base started with a leading ".", or there is no base and input started with a ".",
|
||||
// then we need to ensure that the relative path starts with a ".". We don't know if
|
||||
// relative starts with a "..", though, so check before prepending.
|
||||
return './' + path + queryHash;
|
||||
}
|
||||
return path + queryHash;
|
||||
}
|
||||
case 5 /* AbsolutePath */:
|
||||
return url.path + queryHash;
|
||||
default:
|
||||
return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;
|
||||
}
|
||||
}
|
||||
|
||||
return resolve;
|
||||
|
||||
}));
|
||||
//# sourceMappingURL=resolve-uri.umd.js.map
|
||||
-1
File diff suppressed because one or more lines are too long
-4
@@ -1,4 +0,0 @@
|
||||
/**
|
||||
* Attempts to resolve `input` URL/path relative to `base`.
|
||||
*/
|
||||
export default function resolve(input: string, base: string | undefined): string;
|
||||
-105
@@ -1,105 +0,0 @@
|
||||
{
|
||||
"_from": "@jridgewell/resolve-uri@^3.1.0",
|
||||
"_id": "@jridgewell/resolve-uri@3.1.2",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"_location": "/@jridgewell/resolve-uri",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "@jridgewell/resolve-uri@^3.1.0",
|
||||
"name": "@jridgewell/resolve-uri",
|
||||
"escapedName": "@jridgewell%2fresolve-uri",
|
||||
"scope": "@jridgewell",
|
||||
"rawSpec": "^3.1.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^3.1.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/@jridgewell/trace-mapping"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"_shasum": "7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6",
|
||||
"_spec": "@jridgewell/resolve-uri@^3.1.0",
|
||||
"_where": "/root/dns/node_modules/@jridgewell/trace-mapping",
|
||||
"author": {
|
||||
"name": "Justin Ridgewell",
|
||||
"email": "justin@ridgewell.name"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jridgewell/resolve-uri/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Resolve a URI relative to an optional base URI",
|
||||
"devDependencies": {
|
||||
"@jridgewell/resolve-uri-latest": "npm:@jridgewell/resolve-uri@*",
|
||||
"@rollup/plugin-typescript": "8.3.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.10.0",
|
||||
"@typescript-eslint/parser": "5.10.0",
|
||||
"c8": "7.11.0",
|
||||
"eslint": "8.7.0",
|
||||
"eslint-config-prettier": "8.3.0",
|
||||
"mocha": "9.2.0",
|
||||
"npm-run-all": "4.1.5",
|
||||
"prettier": "2.5.1",
|
||||
"rollup": "2.66.0",
|
||||
"typescript": "4.5.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
},
|
||||
"exports": {
|
||||
".": [
|
||||
{
|
||||
"types": "./dist/types/resolve-uri.d.ts",
|
||||
"browser": "./dist/resolve-uri.umd.js",
|
||||
"require": "./dist/resolve-uri.umd.js",
|
||||
"import": "./dist/resolve-uri.mjs"
|
||||
},
|
||||
"./dist/resolve-uri.umd.js"
|
||||
],
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"homepage": "https://github.com/jridgewell/resolve-uri#readme",
|
||||
"keywords": [
|
||||
"resolve",
|
||||
"uri",
|
||||
"url",
|
||||
"path"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "dist/resolve-uri.umd.js",
|
||||
"module": "dist/resolve-uri.mjs",
|
||||
"name": "@jridgewell/resolve-uri",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jridgewell/resolve-uri.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "run-s -n build:*",
|
||||
"build:rollup": "rollup -c rollup.config.js",
|
||||
"build:ts": "tsc --project tsconfig.build.json",
|
||||
"lint": "run-s -n lint:*",
|
||||
"lint:prettier": "npm run test:lint:prettier -- --write",
|
||||
"lint:ts": "npm run test:lint:ts -- --fix",
|
||||
"prebuild": "rm -rf dist",
|
||||
"prepublishOnly": "npm run preversion",
|
||||
"pretest": "run-s build:rollup",
|
||||
"preversion": "run-s test build",
|
||||
"test": "run-s -n test:lint test:only",
|
||||
"test:coverage": "c8 mocha",
|
||||
"test:debug": "mocha --inspect-brk",
|
||||
"test:lint": "run-s -n test:lint:*",
|
||||
"test:lint:prettier": "prettier --check '{src,test}/**/*.ts'",
|
||||
"test:lint:ts": "eslint '{src,test}/**/*.ts'",
|
||||
"test:only": "mocha",
|
||||
"test:watch": "mocha --watch"
|
||||
},
|
||||
"types": "dist/types/resolve-uri.d.ts",
|
||||
"version": "3.1.2"
|
||||
}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
Copyright 2024 Justin Ridgewell <justin@ridgewell.name>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-184
@@ -1,184 +0,0 @@
|
||||
# @jridgewell/source-map
|
||||
|
||||
> Packages `@jridgewell/trace-mapping` and `@jridgewell/gen-mapping` into the familiar source-map API
|
||||
|
||||
This isn't the full API, but it's the core functionality. This wraps
|
||||
[@jridgewell/trace-mapping][trace-mapping] and [@jridgewell/gen-mapping][gen-mapping]
|
||||
implementations.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm install @jridgewell/source-map
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
TODO
|
||||
|
||||
### SourceMapConsumer
|
||||
|
||||
```typescript
|
||||
import { SourceMapConsumer } from '@jridgewell/source-map';
|
||||
const smc = new SourceMapConsumer({
|
||||
version: 3,
|
||||
names: ['foo'],
|
||||
sources: ['input.js'],
|
||||
mappings: 'AAAAA',
|
||||
});
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.fromSourceMap(mapGenerator[, mapUrl])
|
||||
|
||||
Transforms a `SourceMapGenerator` into a `SourceMapConsumer`.
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
|
||||
const smc = SourceMapConsumer.fromSourceMap(map);
|
||||
smc.originalPositionFor({ line: 1, column: 0 });
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.originalPositionFor({ line: 1, column: 0 });
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.mappings
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.mappings; // AAAA
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.allGeneratedpositionsfor({ line: 1, column: 5, source: "baz.ts" });
|
||||
// [
|
||||
// { line: 2, column: 8 }
|
||||
// ]
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.eachMapping(callback[, context[, order]])
|
||||
|
||||
> This implementation currently does not support the "order" parameter.
|
||||
> This function can only iterate in Generated order.
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.eachMapping((mapping) => {
|
||||
// { source: 'baz.ts',
|
||||
// generatedLine: 4,
|
||||
// generatedColumn: 5,
|
||||
// originalLine: 4,
|
||||
// originalColumn: 5,
|
||||
// name: null }
|
||||
});
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.generatedPositionFor({ line: 1, column: 5, source: "baz.ts" });
|
||||
// { line: 2, column: 8 }
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.hasContentsOfAllSources()
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.hasContentsOfAllSources();
|
||||
// true
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer(map);
|
||||
smc.generatedPositionFor("baz.ts");
|
||||
// "export default ..."
|
||||
```
|
||||
|
||||
#### SourceMapConsumer.prototype.version
|
||||
|
||||
Returns the source map's version
|
||||
|
||||
### SourceMapGenerator
|
||||
|
||||
```typescript
|
||||
import { SourceMapGenerator } from '@jridgewell/source-map';
|
||||
const smg = new SourceMapGenerator({
|
||||
file: 'output.js',
|
||||
sourceRoot: 'https://example.com/',
|
||||
});
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.fromSourceMap(map)
|
||||
|
||||
Transform a `SourceMapConsumer` into a `SourceMapGenerator`.
|
||||
|
||||
```typescript
|
||||
const smc = new SourceMapConsumer();
|
||||
const smg = SourceMapGenerator.fromSourceMap(smc);
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
|
||||
|
||||
> This method is not implemented yet
|
||||
|
||||
#### SourceMapGenerator.prototype.addMapping(mapping)
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
smg.addMapping({
|
||||
generated: { line: 1, column: 0 },
|
||||
source: 'input.js',
|
||||
original: { line: 1, column: 0 },
|
||||
name: 'foo',
|
||||
});
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
smg.setSourceContent('input.js', 'foobar');
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.prototype.toJSON()
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
smg.toJSON(); // { version: 3, names: [], sources: [], mappings: '' }
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.prototype.toString()
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
smg.toJSON(); // "{version:3,names:[],sources:[],mappings:''}"
|
||||
```
|
||||
|
||||
#### SourceMapGenerator.prototype.toDecodedMap()
|
||||
|
||||
```typescript
|
||||
const smg = new SourceMapGenerator();
|
||||
smg.toDecodedMap(); // { version: 3, names: [], sources: [], mappings: [] }
|
||||
```
|
||||
|
||||
## Known differences with other implementations
|
||||
|
||||
This implementation has some differences with `source-map` and `source-map-js`.
|
||||
|
||||
- `SourceMapConsumer.prototype.eachMapping()`
|
||||
- Does not support the `order` argument
|
||||
- `SourceMapGenerator.prototype.applySourceMap()`
|
||||
- Not implemented
|
||||
|
||||
[trace-mapping]: https://github.com/jridgewell/sourcemaps/tree/main/packages/trace-mapping/
|
||||
[gen-mapping]: https://github.com/jridgewell/sourcemaps/tree/main/packages/gen-mapping/
|
||||
-101
@@ -1,101 +0,0 @@
|
||||
// src/source-map.ts
|
||||
import {
|
||||
AnyMap,
|
||||
originalPositionFor,
|
||||
generatedPositionFor,
|
||||
allGeneratedPositionsFor,
|
||||
eachMapping,
|
||||
encodedMappings,
|
||||
sourceContentFor
|
||||
} from "@jridgewell/trace-mapping";
|
||||
import {
|
||||
GenMapping,
|
||||
maybeAddMapping,
|
||||
toDecodedMap,
|
||||
toEncodedMap,
|
||||
setSourceContent,
|
||||
fromMap
|
||||
} from "@jridgewell/gen-mapping";
|
||||
var SourceMapConsumer = class _SourceMapConsumer {
|
||||
constructor(map, mapUrl) {
|
||||
const trace = this._map = new AnyMap(map, mapUrl);
|
||||
this.file = trace.file;
|
||||
this.names = trace.names;
|
||||
this.sourceRoot = trace.sourceRoot;
|
||||
this.sources = trace.resolvedSources;
|
||||
this.sourcesContent = trace.sourcesContent;
|
||||
this.version = trace.version;
|
||||
}
|
||||
static fromSourceMap(map, mapUrl) {
|
||||
if (map.toDecodedMap) {
|
||||
return new _SourceMapConsumer(map.toDecodedMap(), mapUrl);
|
||||
}
|
||||
return new _SourceMapConsumer(map.toJSON(), mapUrl);
|
||||
}
|
||||
get mappings() {
|
||||
return encodedMappings(this._map);
|
||||
}
|
||||
originalPositionFor(needle) {
|
||||
return originalPositionFor(this._map, needle);
|
||||
}
|
||||
generatedPositionFor(originalPosition) {
|
||||
return generatedPositionFor(this._map, originalPosition);
|
||||
}
|
||||
allGeneratedPositionsFor(originalPosition) {
|
||||
return allGeneratedPositionsFor(this._map, originalPosition);
|
||||
}
|
||||
hasContentsOfAllSources() {
|
||||
if (!this.sourcesContent || this.sourcesContent.length !== this.sources.length) {
|
||||
return false;
|
||||
}
|
||||
for (const content of this.sourcesContent) {
|
||||
if (content == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
sourceContentFor(source, nullOnMissing) {
|
||||
const sourceContent = sourceContentFor(this._map, source);
|
||||
if (sourceContent != null) {
|
||||
return sourceContent;
|
||||
}
|
||||
if (nullOnMissing) {
|
||||
return null;
|
||||
}
|
||||
throw new Error(`"${source}" is not in the SourceMap.`);
|
||||
}
|
||||
eachMapping(callback, context) {
|
||||
eachMapping(this._map, context ? callback.bind(context) : callback);
|
||||
}
|
||||
destroy() {
|
||||
}
|
||||
};
|
||||
var SourceMapGenerator = class _SourceMapGenerator {
|
||||
constructor(opts) {
|
||||
this._map = opts instanceof GenMapping ? opts : new GenMapping(opts);
|
||||
}
|
||||
static fromSourceMap(consumer) {
|
||||
return new _SourceMapGenerator(fromMap(consumer));
|
||||
}
|
||||
addMapping(mapping) {
|
||||
maybeAddMapping(this._map, mapping);
|
||||
}
|
||||
setSourceContent(source, content) {
|
||||
setSourceContent(this._map, source, content);
|
||||
}
|
||||
toJSON() {
|
||||
return toEncodedMap(this._map);
|
||||
}
|
||||
toString() {
|
||||
return JSON.stringify(this.toJSON());
|
||||
}
|
||||
toDecodedMap() {
|
||||
return toDecodedMap(this._map);
|
||||
}
|
||||
};
|
||||
export {
|
||||
SourceMapConsumer,
|
||||
SourceMapGenerator
|
||||
};
|
||||
//# sourceMappingURL=source-map.mjs.map
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../src/source-map.ts"],
|
||||
"mappings": ";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAaA,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EAS7B,YACE,KACA,QACA;AACA,UAAM,QAAS,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM;AAEjD,SAAK,OAAO,MAAM;AAClB,SAAK,QAAQ,MAAM;AACnB,SAAK,aAAa,MAAM;AACxB,SAAK,UAAU,MAAM;AACrB,SAAK,iBAAiB,MAAM;AAC5B,SAAK,UAAU,MAAM;AAAA,EACvB;AAAA,EAEA,OAAO,cAAc,KAAyB,QAAuC;AAGnF,QAAI,IAAI,cAAc;AACpB,aAAO,IAAI,mBAAkB,IAAI,aAAa,GAA8B,MAAM;AAAA,IACpF;AAGA,WAAO,IAAI,mBAAkB,IAAI,OAAO,GAA8B,MAAM;AAAA,EAC9E;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,gBAAgB,KAAK,IAAI;AAAA,EAClC;AAAA,EAEA,oBACE,QACwC;AACxC,WAAO,oBAAoB,KAAK,MAAM,MAAM;AAAA,EAC9C;AAAA,EAEA,qBACE,kBACyC;AACzC,WAAO,qBAAqB,KAAK,MAAM,gBAAgB;AAAA,EACzD;AAAA,EAEA,yBACE,kBAC2C;AAC3C,WAAO,yBAAyB,KAAK,MAAM,gBAAgB;AAAA,EAC7D;AAAA,EAEA,0BAAmC;AACjC,QAAI,CAAC,KAAK,kBAAkB,KAAK,eAAe,WAAW,KAAK,QAAQ,QAAQ;AAC9E,aAAO;AAAA,IACT;AAEA,eAAW,WAAW,KAAK,gBAAgB;AACzC,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,QAAgB,eAAwC;AACvE,UAAM,gBAAgB,iBAAiB,KAAK,MAAM,MAAM;AACxD,QAAI,iBAAiB,MAAM;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,IAAI,MAAM,4BAA4B;AAAA,EACxD;AAAA,EAEA,YACE,UACA,SACM;AAEN,gBAAY,KAAK,MAAM,UAAU,SAAS,KAAK,OAAO,IAAI,QAAQ;AAAA,EACpE;AAAA,EAEA,UAAU;AAAA,EAEV;AACF;AAEO,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EAG9B,YAAY,MAAgE;AAE1E,SAAK,OAAO,gBAAgB,aAAa,OAAO,IAAI,WAAW,IAAI;AAAA,EACrE;AAAA,EAEA,OAAO,cAAc,UAA6B;AAChD,WAAO,IAAI,oBAAmB,QAAQ,QAAQ,CAAC;AAAA,EACjD;AAAA,EAEA,WAAW,SAAoF;AAC7F,oBAAgB,KAAK,MAAM,OAAO;AAAA,EACpC;AAAA,EAEA,iBACE,QACA,SACqC;AACrC,qBAAiB,KAAK,MAAM,QAAQ,OAAO;AAAA,EAC7C;AAAA,EAEA,SAA0C;AACxC,WAAO,aAAa,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,EACrC;AAAA,EAEA,eAAgD;AAC9C,WAAO,aAAa,KAAK,IAAI;AAAA,EAC/B;AACF;",
|
||||
"names": []
|
||||
}
|
||||
-152
@@ -1,152 +0,0 @@
|
||||
(function (global, factory) {
|
||||
if (typeof exports === 'object' && typeof module !== 'undefined') {
|
||||
factory(module, require('@jridgewell/gen-mapping'), require('@jridgewell/trace-mapping'));
|
||||
module.exports = def(module);
|
||||
} else if (typeof define === 'function' && define.amd) {
|
||||
define(['module', '@jridgewell/gen-mapping', '@jridgewell/trace-mapping'], function(mod) {
|
||||
factory.apply(this, arguments);
|
||||
mod.exports = def(mod);
|
||||
});
|
||||
} else {
|
||||
const mod = { exports: {} };
|
||||
factory(mod, global.genMapping, global.traceMapping);
|
||||
global = typeof globalThis !== 'undefined' ? globalThis : global || self;
|
||||
global.sourceMap = def(mod);
|
||||
}
|
||||
function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; }
|
||||
})(this, (function (module, require_genMapping, require_traceMapping) {
|
||||
"use strict";
|
||||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __commonJS = (cb, mod) => function __require() {
|
||||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||
};
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// umd:@jridgewell/trace-mapping
|
||||
var require_trace_mapping = __commonJS({
|
||||
"umd:@jridgewell/trace-mapping"(exports, module2) {
|
||||
module2.exports = require_traceMapping;
|
||||
}
|
||||
});
|
||||
|
||||
// umd:@jridgewell/gen-mapping
|
||||
var require_gen_mapping = __commonJS({
|
||||
"umd:@jridgewell/gen-mapping"(exports, module2) {
|
||||
module2.exports = require_genMapping;
|
||||
}
|
||||
});
|
||||
|
||||
// src/source-map.ts
|
||||
var source_map_exports = {};
|
||||
__export(source_map_exports, {
|
||||
SourceMapConsumer: () => SourceMapConsumer,
|
||||
SourceMapGenerator: () => SourceMapGenerator
|
||||
});
|
||||
module.exports = __toCommonJS(source_map_exports);
|
||||
var import_trace_mapping = __toESM(require_trace_mapping());
|
||||
var import_gen_mapping = __toESM(require_gen_mapping());
|
||||
var SourceMapConsumer = class _SourceMapConsumer {
|
||||
constructor(map, mapUrl) {
|
||||
const trace = this._map = new import_trace_mapping.AnyMap(map, mapUrl);
|
||||
this.file = trace.file;
|
||||
this.names = trace.names;
|
||||
this.sourceRoot = trace.sourceRoot;
|
||||
this.sources = trace.resolvedSources;
|
||||
this.sourcesContent = trace.sourcesContent;
|
||||
this.version = trace.version;
|
||||
}
|
||||
static fromSourceMap(map, mapUrl) {
|
||||
if (map.toDecodedMap) {
|
||||
return new _SourceMapConsumer(map.toDecodedMap(), mapUrl);
|
||||
}
|
||||
return new _SourceMapConsumer(map.toJSON(), mapUrl);
|
||||
}
|
||||
get mappings() {
|
||||
return (0, import_trace_mapping.encodedMappings)(this._map);
|
||||
}
|
||||
originalPositionFor(needle) {
|
||||
return (0, import_trace_mapping.originalPositionFor)(this._map, needle);
|
||||
}
|
||||
generatedPositionFor(originalPosition) {
|
||||
return (0, import_trace_mapping.generatedPositionFor)(this._map, originalPosition);
|
||||
}
|
||||
allGeneratedPositionsFor(originalPosition) {
|
||||
return (0, import_trace_mapping.allGeneratedPositionsFor)(this._map, originalPosition);
|
||||
}
|
||||
hasContentsOfAllSources() {
|
||||
if (!this.sourcesContent || this.sourcesContent.length !== this.sources.length) {
|
||||
return false;
|
||||
}
|
||||
for (const content of this.sourcesContent) {
|
||||
if (content == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
sourceContentFor(source, nullOnMissing) {
|
||||
const sourceContent = (0, import_trace_mapping.sourceContentFor)(this._map, source);
|
||||
if (sourceContent != null) {
|
||||
return sourceContent;
|
||||
}
|
||||
if (nullOnMissing) {
|
||||
return null;
|
||||
}
|
||||
throw new Error(`"${source}" is not in the SourceMap.`);
|
||||
}
|
||||
eachMapping(callback, context) {
|
||||
(0, import_trace_mapping.eachMapping)(this._map, context ? callback.bind(context) : callback);
|
||||
}
|
||||
destroy() {
|
||||
}
|
||||
};
|
||||
var SourceMapGenerator = class _SourceMapGenerator {
|
||||
constructor(opts) {
|
||||
this._map = opts instanceof import_gen_mapping.GenMapping ? opts : new import_gen_mapping.GenMapping(opts);
|
||||
}
|
||||
static fromSourceMap(consumer) {
|
||||
return new _SourceMapGenerator((0, import_gen_mapping.fromMap)(consumer));
|
||||
}
|
||||
addMapping(mapping) {
|
||||
(0, import_gen_mapping.maybeAddMapping)(this._map, mapping);
|
||||
}
|
||||
setSourceContent(source, content) {
|
||||
(0, import_gen_mapping.setSourceContent)(this._map, source, content);
|
||||
}
|
||||
toJSON() {
|
||||
return (0, import_gen_mapping.toEncodedMap)(this._map);
|
||||
}
|
||||
toString() {
|
||||
return JSON.stringify(this.toJSON());
|
||||
}
|
||||
toDecodedMap() {
|
||||
return (0, import_gen_mapping.toDecodedMap)(this._map);
|
||||
}
|
||||
};
|
||||
}));
|
||||
//# sourceMappingURL=source-map.umd.js.map
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["umd:@jridgewell/trace-mapping", "umd:@jridgewell/gen-mapping", "../src/source-map.ts"],
|
||||
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,2CAAAA,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA,yCAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAQO;AACP,yBAOO;AAaA,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EAS7B,YACE,KACA,QACA;AACA,UAAM,QAAS,KAAK,OAAO,IAAI,4BAAO,KAAK,MAAM;AAEjD,SAAK,OAAO,MAAM;AAClB,SAAK,QAAQ,MAAM;AACnB,SAAK,aAAa,MAAM;AACxB,SAAK,UAAU,MAAM;AACrB,SAAK,iBAAiB,MAAM;AAC5B,SAAK,UAAU,MAAM;AAAA,EACvB;AAAA,EAEA,OAAO,cAAc,KAAyB,QAAuC;AAGnF,QAAI,IAAI,cAAc;AACpB,aAAO,IAAI,mBAAkB,IAAI,aAAa,GAA8B,MAAM;AAAA,IACpF;AAGA,WAAO,IAAI,mBAAkB,IAAI,OAAO,GAA8B,MAAM;AAAA,EAC9E;AAAA,EAEA,IAAI,WAAmB;AACrB,eAAO,sCAAgB,KAAK,IAAI;AAAA,EAClC;AAAA,EAEA,oBACE,QACwC;AACxC,eAAO,0CAAoB,KAAK,MAAM,MAAM;AAAA,EAC9C;AAAA,EAEA,qBACE,kBACyC;AACzC,eAAO,2CAAqB,KAAK,MAAM,gBAAgB;AAAA,EACzD;AAAA,EAEA,yBACE,kBAC2C;AAC3C,eAAO,+CAAyB,KAAK,MAAM,gBAAgB;AAAA,EAC7D;AAAA,EAEA,0BAAmC;AACjC,QAAI,CAAC,KAAK,kBAAkB,KAAK,eAAe,WAAW,KAAK,QAAQ,QAAQ;AAC9E,aAAO;AAAA,IACT;AAEA,eAAW,WAAW,KAAK,gBAAgB;AACzC,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,QAAgB,eAAwC;AACvE,UAAM,oBAAgB,uCAAiB,KAAK,MAAM,MAAM;AACxD,QAAI,iBAAiB,MAAM;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,eAAe;AACjB,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,IAAI,MAAM,4BAA4B;AAAA,EACxD;AAAA,EAEA,YACE,UACA,SACM;AAEN,0CAAY,KAAK,MAAM,UAAU,SAAS,KAAK,OAAO,IAAI,QAAQ;AAAA,EACpE;AAAA,EAEA,UAAU;AAAA,EAEV;AACF;AAEO,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EAG9B,YAAY,MAAgE;AAE1E,SAAK,OAAO,gBAAgB,gCAAa,OAAO,IAAI,8BAAW,IAAI;AAAA,EACrE;AAAA,EAEA,OAAO,cAAc,UAA6B;AAChD,WAAO,IAAI,wBAAmB,4BAAQ,QAAQ,CAAC;AAAA,EACjD;AAAA,EAEA,WAAW,SAAoF;AAC7F,4CAAgB,KAAK,MAAM,OAAO;AAAA,EACpC;AAAA,EAEA,iBACE,QACA,SACqC;AACrC,6CAAiB,KAAK,MAAM,QAAQ,OAAO;AAAA,EAC7C;AAAA,EAEA,SAA0C;AACxC,eAAO,iCAAa,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,EACrC;AAAA,EAEA,eAAgD;AAC9C,eAAO,iCAAa,KAAK,IAAI;AAAA,EAC/B;AACF;",
|
||||
"names": ["module", "module"]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user