From 353692bf55c894f9f87abcf6b499bcb407df44c7 Mon Sep 17 00:00:00 2001 From: BluJ Date: Thu, 27 Apr 2023 09:27:03 -0600 Subject: [PATCH] feat: Save uses dependencies, which ensure the id is from manifest --- lib/config/dependencies.ts | 34 ++++++++++++++++++++++------------ lib/config/setupConfig.ts | 14 +++++++++++--- lib/util/getWrapperData.ts | 2 +- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/lib/config/dependencies.ts b/lib/config/dependencies.ts index ec24387..d4d46bf 100644 --- a/lib/config/dependencies.ts +++ b/lib/config/dependencies.ts @@ -1,15 +1,25 @@ +import { GenericManifest } from "../manifest/ManifestTypes"; import { Dependency, PackageId } from "../types"; -export function exists(id: PackageId) { - return { - id, - kind: "exists", - } as Dependency; -} +export type Dependencies = { + exists(id: keyof T["dependencies"]): Dependency; + running(id: keyof T["dependencies"]): Dependency; +}; -export function running(id: PackageId) { - return { - id, - kind: "running", - } as Dependency; -} +export const dependenciesSet = < + T extends GenericManifest, +>(): Dependencies => ({ + exists(id: keyof T["dependencies"]) { + return { + id, + kind: "exists", + } as Dependency; + }, + + running(id: keyof T["dependencies"]) { + return { + id, + kind: "running", + } as Dependency; + }, +}); diff --git a/lib/config/setupConfig.ts b/lib/config/setupConfig.ts index 3497f55..26f2221 100644 --- a/lib/config/setupConfig.ts +++ b/lib/config/setupConfig.ts @@ -3,16 +3,19 @@ import { DeepPartial, Dependencies, Effects, ExpectedExports } from "../types"; import { InputSpec } from "./configTypes"; import { Utils, nullIfEmpty, once, utils } from "../util"; import { TypeFromProps } from "../util/propertiesMatcher"; +import { GenericManifest } from "../manifest/ManifestTypes"; +import * as D from "./dependencies"; declare const dependencyProof: unique symbol; export type DependenciesReceipt = void & { [dependencyProof]: never; }; -export type Save = (options: { +export type Save = (options: { effects: Effects; input: A; utils: Utils; + dependencies: D.Dependencies; }) => Promise; export type Read = (options: { effects: Effects; @@ -25,9 +28,13 @@ export type Read = (options: { * @param options * @returns */ -export function setupConfig>( +export function setupConfig< + WD, + A extends Config, + Manifest extends GenericManifest, +>( spec: A, - write: Save>, + write: Save, Manifest>, read: Read>, ) { const validator = once(() => spec.validator()); @@ -41,6 +48,7 @@ export function setupConfig>( input: JSON.parse(JSON.stringify(input)), effects, utils: utils(effects), + dependencies: D.dependenciesSet(), }); }) as ExpectedExports.setConfig, getConfig: (async ({ effects, config }) => { diff --git a/lib/util/getWrapperData.ts b/lib/util/getWrapperData.ts index 5c98f95..eeeaa2b 100644 --- a/lib/util/getWrapperData.ts +++ b/lib/util/getWrapperData.ts @@ -26,7 +26,7 @@ export class WrapperData { callback: () => {}, }); } - async *overTime() { + async *watch() { while (true) { let callback: () => void; const waitForNext = new Promise((resolve) => {