mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-08-27 15:30:57 +00:00
127 lines
3.3 KiB
JavaScript
127 lines
3.3 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* @typedef {object} MapOptions
|
|
* @property {boolean=} columns need columns?
|
|
* @property {boolean=} module is module
|
|
*/
|
|
|
|
/**
|
|
* @typedef {object} RawSourceMap
|
|
* @property {number} version version
|
|
* @property {string[]} sources sources
|
|
* @property {string[]} names names
|
|
* @property {string=} sourceRoot source root
|
|
* @property {string[]=} sourcesContent sources content
|
|
* @property {string} mappings mappings
|
|
* @property {string} file file
|
|
* @property {string=} debugId debug id
|
|
* @property {number[]=} ignoreList ignore list
|
|
*/
|
|
|
|
/** @typedef {string | Buffer} SourceValue */
|
|
|
|
/**
|
|
* @typedef {object} SourceAndMap
|
|
* @property {SourceValue} source source
|
|
* @property {RawSourceMap | null} map map
|
|
*/
|
|
|
|
/**
|
|
* @typedef {object} HashLike
|
|
* @property {(data: string | Buffer, inputEncoding?: string) => HashLike} update make hash update
|
|
* @property {(encoding?: string) => string | Buffer} digest get hash digest
|
|
*/
|
|
|
|
/**
|
|
* @typedef {object} ClearCacheOptions
|
|
* @property {boolean=} maps drop cached source maps (default `true`)
|
|
* @property {boolean=} source drop cached source/buffer copies (default `true`)
|
|
* @property {boolean=} parsedMap drop the parsed object form of cached source maps on `SourceMapSource` instances (default `false` — re-parsing JSON is significantly more expensive than `toString`). Only takes effect when a serialized form (buffer or string) is also retained, so the data remains recoverable.
|
|
*/
|
|
|
|
class Source {
|
|
/**
|
|
* @returns {SourceValue} source
|
|
*/
|
|
source() {
|
|
throw new Error("Abstract");
|
|
}
|
|
|
|
/**
|
|
* @returns {Buffer} buffer
|
|
*/
|
|
buffer() {
|
|
const source = this.source();
|
|
if (Buffer.isBuffer(source)) return source;
|
|
return Buffer.from(source, "utf8");
|
|
}
|
|
|
|
/**
|
|
* @returns {Buffer[]} buffers
|
|
*/
|
|
buffers() {
|
|
return [this.buffer()];
|
|
}
|
|
|
|
/**
|
|
* @returns {number} size
|
|
*/
|
|
size() {
|
|
return this.buffer().length;
|
|
}
|
|
|
|
/**
|
|
* @param {MapOptions=} options map options
|
|
* @returns {RawSourceMap | null} map
|
|
*/
|
|
// eslint-disable-next-line no-unused-vars
|
|
map(options) {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param {MapOptions=} options map options
|
|
* @returns {SourceAndMap} source and map
|
|
*/
|
|
sourceAndMap(options) {
|
|
return {
|
|
source: this.source(),
|
|
map: this.map(options),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @param {HashLike} hash hash
|
|
* @returns {void}
|
|
*/
|
|
// eslint-disable-next-line no-unused-vars
|
|
updateHash(hash) {
|
|
throw new Error("Abstract");
|
|
}
|
|
|
|
/**
|
|
* Release cached data held by this source. clearCache is a memory
|
|
* hint: it never affects correctness or output, only how expensive
|
|
* the next read is. Subclasses override; the base is a no-op so
|
|
* every Source supports the call. Composite sources always recurse
|
|
* into wrapped sources. When the same child is reachable via several
|
|
* parents (e.g. modules shared across webpack chunks), pass a shared
|
|
* `visited` WeakSet so each subtree is walked at most once.
|
|
* Not safe to call concurrently with source/map/sourceAndMap/
|
|
* streamChunks/updateHash on the same instance.
|
|
* @param {ClearCacheOptions=} options selectors
|
|
* @param {WeakSet<Source>=} visited de-duplication set shared across calls
|
|
* @returns {void}
|
|
*/
|
|
// eslint-disable-next-line no-unused-vars
|
|
clearCache(options, visited) {}
|
|
}
|
|
|
|
module.exports = Source;
|