diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2026-05-18 23:10:59 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2026-05-18 23:41:44 +0800 |
| commit | fc87c009806dcc98867f6b58efe29b042aa01dee (patch) | |
| tree | 8f59b3f4a5b66e9dfef2d40c8d318e258a521228 /node_modules/doiuse/lib/stream | |
| parent | 3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff) | |
node: updatemain
Diffstat (limited to 'node_modules/doiuse/lib/stream')
| -rw-r--r-- | node_modules/doiuse/lib/stream/CssUsageDuplex.js | 36 | ||||
| -rw-r--r-- | node_modules/doiuse/lib/stream/RuleUsageTransform.js | 80 | ||||
| -rw-r--r-- | node_modules/doiuse/lib/stream/SourceMapTransform.js | 74 |
3 files changed, 0 insertions, 190 deletions
diff --git a/node_modules/doiuse/lib/stream/CssUsageDuplex.js b/node_modules/doiuse/lib/stream/CssUsageDuplex.js deleted file mode 100644 index 063ed1dc..00000000 --- a/node_modules/doiuse/lib/stream/CssUsageDuplex.js +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable no-underscore-dangle */ - -import { pipeline } from 'node:stream'; - -import Tokenize from 'css-tokenize'; -import Duplexify from 'duplexify'; - -import RuleUsageTransform from './RuleUsageTransform.js'; -import SourceMapTransform from './SourceMapTransform.js'; - -/** @typedef {import('../../data/features.js').FeatureKeys} FeatureKeys */ - -export default class CssUsageDuplex extends Duplexify { - /** - * @param {Object} options - * @param {string} options.browsers - * @param {FeatureKeys[]} [options.ignore] - * @param {boolean} [options.skipErrors] - * @param {string} [filename] Filename for outputting source code locations. - */ - constructor(options, filename) { - const streams = [ - new Tokenize(), - new SourceMapTransform(), - new RuleUsageTransform(options, filename), - ]; - pipeline( - // @ts-expect-error Bad typings - ...streams, - () => { - // noop (Error handled by Duplexify) - }, - ); - super(streams[0], streams.at(-1), { objectMode: true }); - } -} diff --git a/node_modules/doiuse/lib/stream/RuleUsageTransform.js b/node_modules/doiuse/lib/stream/RuleUsageTransform.js deleted file mode 100644 index a2a79d4d..00000000 --- a/node_modules/doiuse/lib/stream/RuleUsageTransform.js +++ /dev/null @@ -1,80 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import { Transform } from 'node:stream'; - -import postcss from 'postcss'; -import sourcemap from 'source-map'; - -import DoIUse from '../DoIUse.js'; - -/** @typedef {import('../../data/features.js').FeatureKeys} FeatureKeys */ -/** @typedef {import('./SourceMapTransform.js').SourceMapTransformation} SourceMapTransformation */ - -export default class RuleUsageTransform extends Transform { - /** @type {import("postcss").Processor} */ - #processor; - - #skipErrors; - - #filename; - - /** - * @param {Object} options - * @param {string} options.browsers - * @param {FeatureKeys[]} [options.ignore] - * @param {boolean} [options.skipErrors] - * @param {string} [filename] Filename for outputting source code locations. - */ - constructor(options, filename = '<streaming css input>') { - super({ - objectMode: true, - }); - this.#processor = postcss([new DoIUse({ - browsers: options.browsers, - ignore: options.ignore, - onFeatureUsage: (usage) => { - this.push(usage); - }, - })]); - this.#filename = filename; - this.#skipErrors = options.skipErrors; - } - - /** - * @param {SourceMapTransformation} rule - * @param {any} encoding - * @param {Function} callback - */ - async _transform(rule, encoding, callback) { - let caughtError; - try { - const mapper = new sourcemap.SourceMapGenerator(); - const lines = rule.content.split('\n'); - let oline = rule.line; - let ocol = rule.column; - for (const [lineNumber, content] of lines.entries()) { - mapper.addMapping({ - generated: { line: lineNumber + 1, column: 1 }, - original: { line: oline, column: ocol }, - source: this.#filename, - }); - mapper.addMapping({ - generated: { line: lineNumber + 1, column: content.length }, - original: { line: oline, column: ocol + content.length }, - source: this.#filename, - }); - oline += 1; - ocol = 1; - } - await this.#processor.process(rule.content, { - from: this.#filename, map: { prev: mapper.toString() }, - }); - } catch (error) { - if (this.#skipErrors) { - this.emit('warning', error); - } else { - caughtError = error; - } - } - callback(caughtError); - } -} diff --git a/node_modules/doiuse/lib/stream/SourceMapTransform.js b/node_modules/doiuse/lib/stream/SourceMapTransform.js deleted file mode 100644 index 6295b1d3..00000000 --- a/node_modules/doiuse/lib/stream/SourceMapTransform.js +++ /dev/null @@ -1,74 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import { Transform } from 'node:stream'; - -const NEW_LINE_CHAR = '\n'.codePointAt(0); - -/** - * @typedef {Object} SourceMapTransformation - * @prop {number} line - * @prop {number} column - * @prop {string} content - */ - -export default class SourceMapTransform extends Transform { - constructor() { - super({ objectMode: true }); - } - - /** - * @type {?{location:[number,number], buffers: Buffer[]}} - * buffer for the current incoming rule. - */ - #current = null; - - /** track depth to handle rules nested in at-rules. */ - #depth = 0; - - /** track this and pass it downstream for source mapping. */ - #line = 1; - - /** track this and pass it downstream for source mapping. */ - #column = 1; - - /** - * @param {[string,Buffer]} chunk - * @param {any} encoding - * @param {Function} callback - */ - _transform([type, buf], encoding, callback) { - if ((type === 'rule_start' || type === 'atrule_start')) { - this.#depth += 1; - } - if (this.#depth > 0 && !this.#current) { - this.#current = { location: [this.#line, this.#column], buffers: [] }; - } - if (type === 'rule_end' || type === 'atrule_end') { - this.#depth -= 1; - } - - if (this.#current) { - this.#current.buffers.push(buf); - if (this.#depth === 0) { - // Push rule - this.push({ - line: this.#current.location[0], - column: this.#current.location[1], - content: Buffer.concat(this.#current.buffers).toString(), - }); - this.#current = null; - } - } - - // Update position - for (const char of buf) { - if (char === NEW_LINE_CHAR) { - this.#line += 1; - this.#column = 1; - } else { - this.#column += 1; - } - } - - callback(); - } -} |
