Code coverage report for src/capabilities.ts

# All files / src capabilities.ts

75.34% Statements 55/73
85.71% Branches 6/7
57.14% Functions 4/7
75.34% Lines 55/73

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    741x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    2x
    1x
    1x
    2x
    2x
    2x
    2x
    2x
    2x
    1x
    1x
    2x
    2x
    2x
    2x
    2x

    2x
    2x

    2x
    2x

    2x
     import { FfmpegProcess } from './process'
    import {
      FfmpegCodecs,
      FfmpegEncoders,
      FfmpegFilters,
      FfmpegFormats
    } from './utils/data-types'
    import {
      extractCodecs,
      extractEncoders,
      extractFilters,
      extractFormats
    } from './utils/parsing'
    import { nlRegexp } from './utils/regexp'

    export class FfmpegCapabilities {
      #codecs: FfmpegCodecs | null = null
      #formats: FfmpegFormats | null = null
      #filters: FfmpegFilters | null = null
      #encoders: FfmpegEncoders | null = null
      #decoders: FfmpegEncoders | null = null

      private async getLines(arg: string): Promise<string[]> {
        let { stdout } = await new FfmpegProcess({
          args: [arg],
          captureStdout: true
        }).run()

        return stdout.split(nlRegexp) || []
      }

      async codecs() {
        // TODO note: if we ever check codecs, "copy" is also an option for output codec

        if (!this.#codecs) {
          this.#codecs = extractCodecs(await this.getLines('-codecs'))
        }

        return this.#codecs
      }

      async formats() {
        if (!this.#formats) {
          this.#formats = extractFormats(await this.getLines('-formats'))
        }

        return this.#formats
      }

      async filters() {
        if (!this.#filters) {
          this.#filters = extractFilters(await this.getLines('-filters'))
        }

        return this.#filters
      }

      async encoders() {
        if (!this.#encoders) {
          this.#encoders = extractEncoders(await this.getLines('-encoders'))
        }

        return this.#encoders
      }

      async decoders() {
        if (!this.#decoders) {
          this.#decoders = extractEncoders(await this.getLines('-decoders'))
        }

        return this.#decoders
      }
    }