@ 260902.1 · fetching
current
const id = 'subsystem'

const validSubsystems = [
  'benchmark',
  'build',
  'bootstrap',
  'cli',
  'config',
  'deps',
  'doc',
  'errors',
  'etw',
  'esm',
  'gyp',
  'inspector',
  'lib',
  'loader',
  'meta',
  'msi',
  'node',
  'node-api',
  'perfctr',
  'permission',
  'policy',
  'sea',
  'src',
  'test',
  'tools',
  'typings',
  'wasm',
  'watch',
  'win',

  // core libs
  'assert',
  'async_hooks',
  'buffer',
  'child_process',
  'cluster',
  'console',
  'constants',
  'crypto',
  'debugger',
  'dgram',
  'diagnostics_channel',
  'dns',
  'domain',
  'events',
  'ffi',
  'fs',
  'http',
  'http2',
  'https',
  'inspector',
  'module',
  'net',
  'os',
  'path',
  'perf_hooks',
  'process',
  'punycode',
  'querystring',
  'quic',
  'readline',
  'repl',
  'report',
  'sqlite',
  'stream',
  'string_decoder',
  'sys',
  'test_runner',
  'timers',
  'tls',
  'trace_events',
  'tty',
  'url',
  'util',
  'v8',
  'vfs',
  'vm',
  'wasi',
  'worker',
  'zlib'
]

export default {
  id,
  meta: {
    description: 'enforce subsystem validity',
    recommended: true
  },
  defaults: {
    subsystems: validSubsystems
  },
  options: {
    subsystems: validSubsystems
  },
  validate: (context, rule) => {
    const subs = rule.options.subsystems
    const parsed = context.toJSON()
    if (!parsed.subsystems.length) {
      if (!parsed.release && !parsed.working) {
        // Missing subsystem
        context.report({
          id,
          message: 'Missing subsystem.',
          string: parsed.title,
          line: 0,
          column: 0,
          level: 'fail',
          wanted: subs
        })
      } else {
        context.report({
          id,
          message: 'Release commits do not have subsystems',
          string: '',
          level: 'skip'
        })
      }
    } else {
      let failed = false
      for (const sub of parsed.subsystems) {
        if (!~subs.indexOf(sub)) {
          failed = true
          // invalid subsystem
          const column = parsed.title.indexOf(sub)
          context.report({
            id,
            message: `Invalid subsystem: "${sub}"`,
            string: parsed.title,
            line: 0,
            column,
            level: 'fail',
            wanted: subs
          })
        }
      }

      if (!failed) {
        context.report({
          id,
          message: 'valid subsystems',
          string: parsed.subsystems.join(','),
          level: 'pass'
        })
      }
    }
  }
}