summaryrefslogtreecommitdiff
path: root/node_modules/doiuse/lib/stream/CssUsageDuplex.js
blob: 063ed1dc6502800fe1cec18708634cb2b9f539e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* 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 });
  }
}