All files / src/builder buildRuntimeDatafiles.ts

0% Statements 0/8
0% Branches 0/2
0% Functions 0/2
0% Lines 0/8

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                                                                                                                   
import type { DatafileContent } from "@featurevisor/types";
 
import type { Dependencies } from "../dependencies";
import { resolveTargets } from "../targeting";
import { buildDatafile } from "./buildDatafile";
import { buildTargetDatafile } from "./buildProject";
 
export interface RuntimeDatafile {
  target?: string;
  datafile: DatafileContent;
}
 
export async function buildRuntimeDatafiles(
  deps: Dependencies,
  options: {
    environment: string | false;
    target?: string | string[];
    revision: string;
    inflate?: number;
  },
): Promise<RuntimeDatafile[]> {
  const { projectConfig, datasource } = deps;
  const existingState = await datasource.readState(options.environment);
  const targets = await resolveTargets(datasource, options.target, {
    defaultToAll: false,
    requireTargets: false,
  });
 
  if (targets.length === 0) {
    const datafile = await buildDatafile(
      projectConfig,
      datasource,
      {
        revision: options.revision,
        environment: options.environment,
        inflate: options.inflate,
      },
      existingState,
    );
    return [{ datafile }];
  }
 
  return Promise.all(
    targets.map(async (target) => ({
      target: target.key,
      datafile: await buildTargetDatafile({
        projectConfig,
        datasource,
        target,
        environment: options.environment,
        existingState,
        revision: options.revision,
        inflate: options.inflate,
      }),
    })),
  );
}