export interface JSONDataSource {
readonly _tag: "JSONDataSource";
readonly getData: (
path: string,
fileType: string
) => Effect.Effect<never, Fetch | FSReadFile, string>;
}
export const JSONDataSource = Context.Tag<JSONDataSource>(
"@backend/JSONDataSource"
);
export const parseJSON = (path: string, fileType: string) =>
JSONDataSource.pipe(
Effect.flatMap((_) => _.getData(path, fileType)),
Effect.flatMap((data) =>
Effect.try({
try: () => JSON.parse(data) as Record<string, ValueType>,
catch: (err) =>
new Parse({
error: (err as SyntaxError).message,
type: `parsing ${path}`,
}),
})
)
);
export interface JSONDataSource {
readonly _tag: "JSONDataSource";
readonly getData: (
path: string,
fileType: string
) => Effect.Effect<never, Fetch | FSReadFile, string>;
}
export const JSONDataSource = Context.Tag<JSONDataSource>(
"@backend/JSONDataSource"
);
export const parseJSON = (path: string, fileType: string) =>
JSONDataSource.pipe(
Effect.flatMap((_) => _.getData(path, fileType)),
Effect.flatMap((data) =>
Effect.try({
try: () => JSON.parse(data) as Record<string, ValueType>,
catch: (err) =>
new Parse({
error: (err as SyntaxError).message,
type: `parsing ${path}`,
}),
})
)
);