Skip to content
Snippets Groups Projects
Select Git revision
  • f0cc3bfad1bdecf383a3485377e3e89f321a8b4b
  • main default protected
  • renovate/main-ghcr.io-renovatebot-base-image-10.x
  • renovate/main-ghcr.io-containerbase-devcontainer-13.x
  • next
  • revert-31645-feat/rename-gradle-wrapper-validation-action
  • renovate/main-redis-5.x
  • fix/36615b-branch-reuse-no-cache
  • chore/punycode
  • fix/36615-branch-reuse-bug
  • refactor/pin-new-value
  • feat/36219--git-x509-signing
  • feat/structured-logger
  • hotfix/39.264.1
  • feat/skip-dangling
  • gh-readonly-queue/next/pr-36034-7a061c4ca1024a19e2c295d773d9642625d1c2be
  • hotfix/39.238.3
  • refactor/gitlab-auto-approve
  • feat/template-strings
  • gh-readonly-queue/next/pr-35654-137d934242c784e0c45d4b957362214f0eade1d7
  • fix/32307-global-extends-merging
  • 41.30.4
  • 41.30.3
  • 41.30.2
  • 41.30.1
  • 41.30.0
  • 41.29.1
  • 41.29.0
  • 41.28.2
  • 41.28.1
  • 41.28.0
  • 41.27.1
  • 41.27.0
  • 41.26.2
  • 41.26.1
  • 41.26.0
  • 41.25.1
  • 41.25.0
  • 41.24.0
  • 41.23.5
  • 41.23.4
41 results

modules.ts

Blame
  • user avatar
    renovate[bot] authored and GitHub committed
    * chore(deps): update dependency prettier to v2
    
    * Run prettier-fix
    
    Co-authored-by: default avatarRenovate Bot <bot@renovateapp.com>
    Co-authored-by: default avatarJamie Magee <jamie.magee@gmail.com>
    4f59b62d
    History
    modules.ts 1.47 KiB
    import fs from 'fs';
    import { join, normalizeTrim } from 'upath';
    
    function relatePath(here: string, there: string): string {
      const thereParts = normalizeTrim(there).split(/[\\/]/);
      const hereParts = normalizeTrim(here).split(/[\\/]/);
    
      let idx = 0;
      while (
        typeof thereParts[idx] === 'string' &&
        typeof hereParts[idx] === 'string' &&
        thereParts[idx] === hereParts[idx]
      ) {
        idx += 1;
      }
    
      const result = [];
      for (let x = 0; x < hereParts.length - idx; x += 1) {
        result.push('..');
      }
      for (let y = idx; y < thereParts.length; y += 1) {
        result.push(thereParts[idx]);
      }
      return result.join('/');
    }
    
    export function loadModules<T>(
      dirname: string,
      validate?: (module: T, moduleName?: string) => boolean,
      filter: (moduleName?: string) => boolean = () => true
    ): Record<string, T> {
      const result: Record<string, T> = {};
    
      const moduleNames: string[] = fs
        .readdirSync(dirname, { withFileTypes: true })
        .filter((dirent) => dirent.isDirectory())
        .map((dirent) => dirent.name)
        .filter((name) => !name.startsWith('__'))
        .filter(filter)
        .sort();
    
      for (const moduleName of moduleNames) {
        const modulePath = join(relatePath(__dirname, dirname), moduleName);
        const module = require(modulePath); // eslint-disable-line
        // istanbul ignore if
        if (!module || (validate && !validate(module, moduleName))) {
          throw new Error(`Invalid module: ${modulePath}`);
        }
        result[moduleName] = module as T;
      }
    
      return result;
    }