All files / schemas/.history index_20220609164147.ts

0% Statements 0/61
0% Branches 0/1
0% Functions 0/1
0% Lines 0/61

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                                                                                                                           
/**
 * @license
 * Copyright 2022 Open Ag Data Alliance
 *
 * Use of this source code is governed by an MIT-style
 * license that can be found in the LICENSE file or at
 * https://opensource.org/licenses/MIT.
 */

import { createRequire } from 'node:module';
import path from 'node:path';
import url from 'node:url';

import type { JSONSchema8 as Schema } from 'jsonschema8';
import globP from 'glob-promise';

const dirname = path.dirname(url.fileURLToPath(import.meta.url));

const schemas = await globP('/**/*.schema.{c,m,}{ts,js}', {
  cwd: dirname,
  root: dirname,
  nomount: true,
});
/**
 * Every .schema.ts file we have
 */
export const glob = schemas.map((key) =>
  key.replace(/\/+/, '/').replace(/\.[cm]?[jt]s$/, '.json')
);

export const requireSchema: (path: string) => Schema = createRequire(
  path.join(dirname, 'schemas')
);
export class SchemaInfo {
  #schema;

  key: string;
  path: string;

  constructor(key: string) {
    this.path = path.join(dirname, key);
    this.key = key;
    const inFile = this.key.replace(/^\//, './').replace(/\.json$/, '.cjs');
    this.#schema = requireSchema(inFile);
  }

  get schema(): Schema {
    return this.#schema;
  }
}

/**
 * Load all the schemas
 */
function* loadAllFormats(): Generator<SchemaInfo, void, void> {
  for (const key of glob) {
    yield new SchemaInfo(key);
  }
}

export default loadAllFormats;