All files / schemas index.ts

100% Statements 56/56
100% Branches 4/4
100% Functions 2/2
100% Lines 56/56

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 571x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 59x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 59x 59x 59x 59x 59x 1x 1x 1x 1x 1x 1x 1x 59x 59x 1x 1x 1x  
/**
 * @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,}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 {
  key;
  path;
  readonly schema;
 
  constructor(key: string) {
    this.path = path.join(dirname, key);
    this.key = key;
    const inFile = this.key.replace(/^\//, './').replace(/\.json$/, '.cjs');
    this.schema = requireSchema(inFile);
  }
}
 
/**
 * Load all the schemas
 */
function* loadAllFormats(): Generator<SchemaInfo, void, void> {
  for (const key of glob) {
    yield new SchemaInfo(key);
  }
}
 
export default loadAllFormats;