123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /* global __dirname */
- /* eslint import/no-nodejs-modules:0 */
- import fs from 'fs';
- import path from 'path';
- const FIXTURES_ROOT = path.join(__dirname, '../../../fixtures');
- type Options = {
- /**
- * Flatten all fixtures to together into a single object
- */
- flatten?: boolean;
- };
- /**
- * Loads a directory of JSON fixtures.
- */
- export function loadFixtures(dir: string, opts: Options = {}) {
- const from = path.join(FIXTURES_ROOT, dir);
- const files = fs.readdirSync(from);
- const fixtures = {};
- for (const file of files) {
- const filePath = path.join(from, file);
- if (/json$/.test(file)) {
- fixtures[file] = JSON.parse(fs.readFileSync(filePath).toString());
- continue;
- }
- throw new Error(`Invalid fixture type found: ${file}`);
- }
- if (opts.flatten) {
- const flattenedFixtures = {};
- for (const moduleKey in fixtures) {
- for (const moduleExport in fixtures[moduleKey]) {
- // Check if our flattenedFixtures already contains a key with the same export.
- // If it does, we want to throw and make sure that we dont silently override the fixtures.
- if (flattenedFixtures?.[moduleKey]?.[moduleExport]) {
- throw new Error(
- `Flatten will override ${flattenedFixtures[moduleKey]} with ${fixtures[moduleKey][moduleExport]}`
- );
- }
- flattenedFixtures[moduleExport] = fixtures[moduleKey][moduleExport];
- }
- }
- return flattenedFixtures;
- }
- return fixtures;
- }
|