Skip to content

Commit b7bb6d1

Browse files
committed
exporting few helper methods
1 parent 7c120ed commit b7bb6d1

File tree

3 files changed

+26
-20
lines changed

3 files changed

+26
-20
lines changed

.changes/convert-obj-to-prop.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@simulacrum/foundation-simulator": minor:enhance
3+
"@simulacrum/github-api-simulator": patch:deps
4+
---
5+
6+
Export helpers from foundation simulator for use in dumping data into the stores, such as in the GitHub API simulator.

packages/foundation/src/index.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { apiProxy } from "./middleware/proxy.ts";
3838
import { delayMiddleware } from "./middleware/delay.ts";
3939
import { generateRoutesHTML } from "./routeTemplate.ts";
4040
import { createAppServer } from "./server.ts";
41+
import type { IdProp } from "starfx";
4142

4243
// for use in the OpenAPI handler functions
4344
type SimulationHandlerFunctions = (
@@ -60,6 +61,15 @@ export type {
6061
Document,
6162
};
6263

64+
export const convertObjToProp = <T extends { [k: string]: any }>(
65+
arrayOfObjects: T[],
66+
key: IdProp = "id"
67+
): Record<IdProp, T> =>
68+
arrayOfObjects.reduce((final, obj: T) => {
69+
final[obj[key].toString()] = obj;
70+
return final;
71+
}, {} as Record<IdProp, T>);
72+
6373
// public, nameable shape for downstream packages that wish to extend the
6474
// foundation simulation store without importing deep cyclical types.
6575
export type ExtendStoreConfig<Schema, Actions, Selectors> = {
@@ -71,6 +81,8 @@ export type ExtendStoreConfig<Schema, Actions, Selectors> = {
7181

7282
export type { AnyState, TableOutput, IdProp } from "starfx";
7383

84+
export type PartialDocument = RecursivePartial<Document>;
85+
7486
// the return type after a server is listening, useful for
7587
// referring to the running server while testing
7688
export type FoundationSimulatorListening<ExtendedSimulationStore> = {
@@ -448,9 +460,7 @@ export function createFoundationSimulationServer<
448460
};
449461
}
450462

451-
const mergeDocumentArray = (
452-
documents: RecursivePartial<Document>[]
453-
): Document => {
463+
const mergeDocumentArray = (documents: PartialDocument[]): Document => {
454464
let document = defu({}, ...documents);
455465
return document as Document;
456466
};

packages/github-api/src/store/entities.ts

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { z } from "zod";
2-
import { type IdProp } from "@simulacrum/foundation-simulator";
2+
import { convertObjToProp } from "@simulacrum/foundation-simulator";
33
import { faker } from "@faker-js/faker";
44

55
export const githubUserSchema = z
@@ -412,27 +412,17 @@ export const gitubInitialStoreSchema = z
412412
export type GitHubStore = z.output<typeof gitubInitialStoreSchema>;
413413
export type GitHubInitialStore = z.input<typeof gitubInitialStoreSchema>;
414414

415-
export const convertToObj = <T extends { [k: string]: any }>(
416-
arrayOfObjects: T[],
417-
key: IdProp = "id"
418-
): Record<IdProp, T> =>
419-
arrayOfObjects.reduce((final, obj: T) => {
420-
final[obj[key].toString()] = obj;
421-
return final;
422-
}, {} as Record<IdProp, T>);
423-
424415
export const convertInitialStateToStoreState = (
425416
initialState: GitHubStore | undefined
426417
) => {
427418
if (!initialState) return undefined;
428-
// TODO try to make this generic?
429419
const storeObject = {
430-
users: convertToObj(initialState.users, "login"),
431-
installations: convertToObj(initialState.installations, "id"),
432-
repositories: convertToObj(initialState.repositories, "name"),
433-
branches: convertToObj(initialState.branches, "name"),
434-
organizations: convertToObj(initialState.organizations, "login"),
435-
blobs: convertToObj(initialState.blobs),
420+
users: convertObjToProp(initialState.users, "login"),
421+
installations: convertObjToProp(initialState.installations, "id"),
422+
repositories: convertObjToProp(initialState.repositories, "name"),
423+
branches: convertObjToProp(initialState.branches, "name"),
424+
organizations: convertObjToProp(initialState.organizations, "login"),
425+
blobs: convertObjToProp(initialState.blobs),
436426
};
437427

438428
return storeObject;

0 commit comments

Comments
 (0)