mirror of
https://github.com/Start9Labs/start-sdk.git
synced 2026-03-30 12:21:57 +00:00
chore: Update to fix the types
This commit is contained in:
@@ -94,7 +94,7 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
}) => Promise<ActionResult>,
|
}) => Promise<ActionResult>,
|
||||||
) => {
|
) => {
|
||||||
const { input, ...rest } = metaData
|
const { input, ...rest } = metaData
|
||||||
return createAction<Store, ConfigType, Type>(rest, fn, input)
|
return createAction<Manifest, Store, ConfigType, Type>(rest, fn, input)
|
||||||
},
|
},
|
||||||
createDynamicAction: <
|
createDynamicAction: <
|
||||||
ConfigType extends
|
ConfigType extends
|
||||||
@@ -114,7 +114,11 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
}) => Promise<ActionResult>,
|
}) => Promise<ActionResult>,
|
||||||
input: Config<Type, Store> | Config<Type, never>,
|
input: Config<Type, Store> | Config<Type, never>,
|
||||||
) => {
|
) => {
|
||||||
return createAction<Store, ConfigType, Type>(metaData, fn, input)
|
return createAction<Manifest, Store, ConfigType, Type>(
|
||||||
|
metaData,
|
||||||
|
fn,
|
||||||
|
input,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
HealthCheck: {
|
HealthCheck: {
|
||||||
@@ -127,7 +131,7 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
},
|
},
|
||||||
patterns,
|
patterns,
|
||||||
setupActions: (...createdActions: CreatedAction<any, any, any>[]) =>
|
setupActions: (...createdActions: CreatedAction<any, any, any>[]) =>
|
||||||
setupActions<Store>(...createdActions),
|
setupActions<Manifest, Store>(...createdActions),
|
||||||
setupBackups: (...args: SetupBackupsParams<Manifest>) =>
|
setupBackups: (...args: SetupBackupsParams<Manifest>) =>
|
||||||
setupBackups<Manifest>(...args),
|
setupBackups<Manifest>(...args),
|
||||||
setupConfig: <
|
setupConfig: <
|
||||||
@@ -168,26 +172,26 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
setupExports: (fn: SetupExports<Store>) => fn,
|
setupExports: (fn: SetupExports<Store>) => fn,
|
||||||
setupDependencyMounts,
|
setupDependencyMounts,
|
||||||
setupInit: (
|
setupInit: (
|
||||||
migrations: Migrations<Store>,
|
migrations: Migrations<Manifest, Store>,
|
||||||
install: Install<Store>,
|
install: Install<Manifest, Store>,
|
||||||
uninstall: Uninstall<Store>,
|
uninstall: Uninstall<Manifest, Store>,
|
||||||
setInterfaces: SetInterfaces<Store, any, any>,
|
setInterfaces: SetInterfaces<Manifest, Store, any, any>,
|
||||||
setupExports: SetupExports<Store>,
|
setupExports: SetupExports<Store>,
|
||||||
) =>
|
) =>
|
||||||
setupInit<Store>(
|
setupInit<Manifest, Store>(
|
||||||
migrations,
|
migrations,
|
||||||
install,
|
install,
|
||||||
uninstall,
|
uninstall,
|
||||||
setInterfaces,
|
setInterfaces,
|
||||||
setupExports,
|
setupExports,
|
||||||
),
|
),
|
||||||
setupInstall: (fn: InstallFn<Store>) => Install.of(fn),
|
setupInstall: (fn: InstallFn<Manifest, Store>) => Install.of(fn),
|
||||||
setupInterfaces: <
|
setupInterfaces: <
|
||||||
ConfigInput extends Record<string, any>,
|
ConfigInput extends Record<string, any>,
|
||||||
Output extends InterfacesReceipt,
|
Output extends InterfacesReceipt,
|
||||||
>(
|
>(
|
||||||
config: Config<ConfigInput, Store>,
|
config: Config<ConfigInput, Store>,
|
||||||
fn: SetInterfaces<Store, ConfigInput, Output>,
|
fn: SetInterfaces<Manifest, Store, ConfigInput, Output>,
|
||||||
) => setupInterfaces(config, fn),
|
) => setupInterfaces(config, fn),
|
||||||
setupMain: (
|
setupMain: (
|
||||||
fn: (o: {
|
fn: (o: {
|
||||||
@@ -196,10 +200,17 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
utils: Utils<Manifest, Store, {}>
|
utils: Utils<Manifest, Store, {}>
|
||||||
}) => Promise<Daemons<Manifest, any>>,
|
}) => Promise<Daemons<Manifest, any>>,
|
||||||
) => setupMain<Manifest, Store>(fn),
|
) => setupMain<Manifest, Store>(fn),
|
||||||
setupMigrations: <Migrations extends Array<Migration<Store, any>>>(
|
setupMigrations: <
|
||||||
|
Migrations extends Array<Migration<Manifest, Store, any>>,
|
||||||
|
>(
|
||||||
...migrations: EnsureUniqueId<Migrations>
|
...migrations: EnsureUniqueId<Migrations>
|
||||||
) => setupMigrations<Store, Migrations>(this.manifest, ...migrations),
|
) =>
|
||||||
setupUninstall: (fn: UninstallFn<Store>) => setupUninstall<Store>(fn),
|
setupMigrations<Manifest, Store, Migrations>(
|
||||||
|
this.manifest,
|
||||||
|
...migrations,
|
||||||
|
),
|
||||||
|
setupUninstall: (fn: UninstallFn<Manifest, Store>) =>
|
||||||
|
setupUninstall<Manifest, Store>(fn),
|
||||||
trigger: {
|
trigger: {
|
||||||
defaultTrigger,
|
defaultTrigger,
|
||||||
cooldownTrigger,
|
cooldownTrigger,
|
||||||
@@ -331,7 +342,7 @@ export class StartSdk<Manifest extends SDKManifest, Store> {
|
|||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Manifest, Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => Promise<void>
|
}) => Promise<void>
|
||||||
}) => Migration.of<Store, Version>(options),
|
}) => Migration.of<Manifest, Store, Version>(options),
|
||||||
},
|
},
|
||||||
Value: {
|
Value: {
|
||||||
toggle: Value.toggle,
|
toggle: Value.toggle,
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
import { Config, ExtractConfigType } from "../config/builder/config"
|
import { Config, ExtractConfigType } from "../config/builder/config"
|
||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { ActionMetadata, ActionResult, Effects, ExportedAction } from "../types"
|
import { ActionMetadata, ActionResult, Effects, ExportedAction } from "../types"
|
||||||
import { createUtils } from "../util"
|
import { createUtils } from "../util"
|
||||||
import { Utils } from "../util/utils"
|
import { Utils } from "../util/utils"
|
||||||
|
|
||||||
export type MaybeFn<Store, Value> =
|
export type MaybeFn<Manifest extends SDKManifest, Store, Value> =
|
||||||
| Value
|
| Value
|
||||||
| ((options: {
|
| ((options: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => Promise<Value> | Value)
|
}) => Promise<Value> | Value)
|
||||||
export class CreatedAction<
|
export class CreatedAction<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
Store,
|
Store,
|
||||||
ConfigType extends
|
ConfigType extends
|
||||||
| Record<string, any>
|
| Record<string, any>
|
||||||
@@ -18,17 +20,22 @@ export class CreatedAction<
|
|||||||
Type extends Record<string, any> = ExtractConfigType<ConfigType>,
|
Type extends Record<string, any> = ExtractConfigType<ConfigType>,
|
||||||
> {
|
> {
|
||||||
private constructor(
|
private constructor(
|
||||||
public readonly myMetaData: MaybeFn<Store, Omit<ActionMetadata, "input">>,
|
public readonly myMetaData: MaybeFn<
|
||||||
|
Manifest,
|
||||||
|
Store,
|
||||||
|
Omit<ActionMetadata, "input">
|
||||||
|
>,
|
||||||
readonly fn: (options: {
|
readonly fn: (options: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
input: Type
|
input: Type
|
||||||
}) => Promise<ActionResult>,
|
}) => Promise<ActionResult>,
|
||||||
readonly input: Config<Type, Store>,
|
readonly input: Config<Type, Store>,
|
||||||
|
public validator = input.validator,
|
||||||
) {}
|
) {}
|
||||||
public validator = this.input.validator
|
|
||||||
|
|
||||||
static of<
|
static of<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
Store,
|
Store,
|
||||||
ConfigType extends
|
ConfigType extends
|
||||||
| Record<string, any>
|
| Record<string, any>
|
||||||
@@ -36,15 +43,15 @@ export class CreatedAction<
|
|||||||
| Config<any, never>,
|
| Config<any, never>,
|
||||||
Type extends Record<string, any> = ExtractConfigType<ConfigType>,
|
Type extends Record<string, any> = ExtractConfigType<ConfigType>,
|
||||||
>(
|
>(
|
||||||
metaData: MaybeFn<Store, Omit<ActionMetadata, "input">>,
|
metaData: MaybeFn<Manifest, Store, Omit<ActionMetadata, "input">>,
|
||||||
fn: (options: {
|
fn: (options: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
input: Type
|
input: Type
|
||||||
}) => Promise<ActionResult>,
|
}) => Promise<ActionResult>,
|
||||||
inputConfig: Config<Type, Store> | Config<Type, never>,
|
inputConfig: Config<Type, Store> | Config<Type, never>,
|
||||||
) {
|
) {
|
||||||
return new CreatedAction<Store, ConfigType, Type>(
|
return new CreatedAction<Manifest, Store, ConfigType, Type>(
|
||||||
metaData,
|
metaData,
|
||||||
fn,
|
fn,
|
||||||
inputConfig as Config<Type, Store>,
|
inputConfig as Config<Type, Store>,
|
||||||
@@ -67,7 +74,7 @@ export class CreatedAction<
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async metaData(options: { effects: Effects; utils: Utils<Store> }) {
|
async metaData(options: { effects: Effects; utils: Utils<Manifest, Store> }) {
|
||||||
if (this.myMetaData instanceof Function)
|
if (this.myMetaData instanceof Function)
|
||||||
return await this.myMetaData(options)
|
return await this.myMetaData(options)
|
||||||
return this.myMetaData
|
return this.myMetaData
|
||||||
@@ -75,7 +82,7 @@ export class CreatedAction<
|
|||||||
|
|
||||||
async ActionMetadata(options: {
|
async ActionMetadata(options: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}): Promise<ActionMetadata> {
|
}): Promise<ActionMetadata> {
|
||||||
return {
|
return {
|
||||||
...(await this.metaData(options)),
|
...(await this.metaData(options)),
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { Effects, ExpectedExports } from "../types"
|
import { Effects, ExpectedExports } from "../types"
|
||||||
import { createUtils } from "../util"
|
import { createUtils } from "../util"
|
||||||
import { once } from "../util/once"
|
import { once } from "../util/once"
|
||||||
import { Utils } from "../util/utils"
|
import { Utils } from "../util/utils"
|
||||||
import { CreatedAction } from "./createAction"
|
import { CreatedAction } from "./createAction"
|
||||||
|
|
||||||
export function setupActions<Store>(
|
export function setupActions<Manifest extends SDKManifest, Store>(
|
||||||
...createdActions: CreatedAction<Store, any>[]
|
...createdActions: CreatedAction<Manifest, Store, any>[]
|
||||||
) {
|
) {
|
||||||
const myActions = async (options: {
|
const myActions = async (options: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => {
|
}) => {
|
||||||
const actions: Record<string, CreatedAction<Store, any>> = {}
|
const actions: Record<string, CreatedAction<Manifest, Store, any>> = {}
|
||||||
for (const action of createdActions) {
|
for (const action of createdActions) {
|
||||||
const actionMetadata = await action.metaData(options)
|
const actionMetadata = await action.metaData(options)
|
||||||
actions[actionMetadata.id] = action
|
actions[actionMetadata.id] = action
|
||||||
@@ -23,7 +24,7 @@ export function setupActions<Store>(
|
|||||||
actionsMetadata: ExpectedExports.actionsMetadata
|
actionsMetadata: ExpectedExports.actionsMetadata
|
||||||
} = {
|
} = {
|
||||||
actions(options: { effects: Effects }) {
|
actions(options: { effects: Effects }) {
|
||||||
const utils = createUtils<Store>(options.effects)
|
const utils = createUtils<Manifest, Store>(options.effects)
|
||||||
|
|
||||||
return myActions({
|
return myActions({
|
||||||
...options,
|
...options,
|
||||||
@@ -31,7 +32,7 @@ export function setupActions<Store>(
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
async actionsMetadata({ effects }: { effects: Effects }) {
|
async actionsMetadata({ effects }: { effects: Effects }) {
|
||||||
const utils = createUtils<Store>(effects)
|
const utils = createUtils<Manifest, Store>(effects)
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
createdActions.map((x) => x.ActionMetadata({ effects, utils })),
|
createdActions.map((x) => x.ActionMetadata({ effects, utils })),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Parser, object } from "ts-matches"
|
|||||||
|
|
||||||
export type LazyBuildOptions<Store> = {
|
export type LazyBuildOptions<Store> = {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<any, Store>
|
||||||
}
|
}
|
||||||
export type LazyBuild<Store, ExpectedOut> = (
|
export type LazyBuild<Store, ExpectedOut> = (
|
||||||
options: LazyBuildOptions<Store>,
|
options: LazyBuildOptions<Store>,
|
||||||
|
|||||||
@@ -1,28 +1,48 @@
|
|||||||
import { ManifestVersion } from "../../manifest/ManifestTypes"
|
import { ManifestVersion, SDKManifest } from "../../manifest/ManifestTypes"
|
||||||
import { Effects } from "../../types"
|
import { Effects } from "../../types"
|
||||||
import { Utils } from "../../util/utils"
|
import { Utils } from "../../util/utils"
|
||||||
|
|
||||||
export class Migration<Stor, Version extends ManifestVersion> {
|
export class Migration<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
|
Store,
|
||||||
|
Version extends ManifestVersion,
|
||||||
|
> {
|
||||||
constructor(
|
constructor(
|
||||||
readonly options: {
|
readonly options: {
|
||||||
version: Version
|
version: Version
|
||||||
up: (opts: { effects: Effects; utils: Utils<Stor> }) => Promise<void>
|
up: (opts: {
|
||||||
down: (opts: { effects: Effects; utils: Utils<Stor> }) => Promise<void>
|
effects: Effects
|
||||||
|
utils: Utils<Manifest, Store>
|
||||||
|
}) => Promise<void>
|
||||||
|
down: (opts: {
|
||||||
|
effects: Effects
|
||||||
|
utils: Utils<Manifest, Store>
|
||||||
|
}) => Promise<void>
|
||||||
},
|
},
|
||||||
) {}
|
) {}
|
||||||
static of<Stor, Version extends ManifestVersion>(options: {
|
static of<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
|
Store,
|
||||||
|
Version extends ManifestVersion,
|
||||||
|
>(options: {
|
||||||
version: Version
|
version: Version
|
||||||
up: (opts: { effects: Effects; utils: Utils<Stor> }) => Promise<void>
|
up: (opts: {
|
||||||
down: (opts: { effects: Effects; utils: Utils<Stor> }) => Promise<void>
|
effects: Effects
|
||||||
|
utils: Utils<Manifest, Store>
|
||||||
|
}) => Promise<void>
|
||||||
|
down: (opts: {
|
||||||
|
effects: Effects
|
||||||
|
utils: Utils<Manifest, Store>
|
||||||
|
}) => Promise<void>
|
||||||
}) {
|
}) {
|
||||||
return new Migration<Stor, Version>(options)
|
return new Migration<Manifest, Store, Version>(options)
|
||||||
}
|
}
|
||||||
|
|
||||||
async up(opts: { effects: Effects; utils: Utils<Stor> }) {
|
async up(opts: { effects: Effects; utils: Utils<Manifest, Store> }) {
|
||||||
this.up(opts)
|
this.up(opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
async down(opts: { effects: Effects; utils: Utils<Stor> }) {
|
async down(opts: { effects: Effects; utils: Utils<Manifest, Store> }) {
|
||||||
this.down(opts)
|
this.down(opts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,30 +5,34 @@ import { createUtils } from "../../util"
|
|||||||
import { once } from "../../util/once"
|
import { once } from "../../util/once"
|
||||||
import { Migration } from "./Migration"
|
import { Migration } from "./Migration"
|
||||||
|
|
||||||
export class Migrations<Store> {
|
export class Migrations<Manifest extends SDKManifest, Store> {
|
||||||
private constructor(
|
private constructor(
|
||||||
readonly manifest: SDKManifest,
|
readonly manifest: SDKManifest,
|
||||||
readonly migrations: Array<Migration<Store, any>>,
|
readonly migrations: Array<Migration<Manifest, Store, any>>,
|
||||||
) {}
|
) {}
|
||||||
private sortedMigrations = once(() => {
|
private sortedMigrations = once(() => {
|
||||||
const migrationsAsVersions = (
|
const migrationsAsVersions = (
|
||||||
this.migrations as Array<Migration<Store, any>>
|
this.migrations as Array<Migration<Manifest, Store, any>>
|
||||||
).map((x) => [EmVer.parse(x.options.version), x] as const)
|
).map((x) => [EmVer.parse(x.options.version), x] as const)
|
||||||
migrationsAsVersions.sort((a, b) => a[0].compareForSort(b[0]))
|
migrationsAsVersions.sort((a, b) => a[0].compareForSort(b[0]))
|
||||||
return migrationsAsVersions
|
return migrationsAsVersions
|
||||||
})
|
})
|
||||||
private currentVersion = once(() => EmVer.parse(this.manifest.version))
|
private currentVersion = once(() => EmVer.parse(this.manifest.version))
|
||||||
static of<Store, Migrations extends Array<Migration<Store, any>>>(
|
static of<
|
||||||
manifest: SDKManifest,
|
Manifest extends SDKManifest,
|
||||||
...migrations: EnsureUniqueId<Migrations>
|
Store,
|
||||||
) {
|
Migrations extends Array<Migration<Manifest, Store, any>>,
|
||||||
return new Migrations(manifest, migrations as Array<Migration<Store, any>>)
|
>(manifest: SDKManifest, ...migrations: EnsureUniqueId<Migrations>) {
|
||||||
|
return new Migrations(
|
||||||
|
manifest,
|
||||||
|
migrations as Array<Migration<Manifest, Store, any>>,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
async init({
|
async init({
|
||||||
effects,
|
effects,
|
||||||
previousVersion,
|
previousVersion,
|
||||||
}: Parameters<ExpectedExports.init>[0]) {
|
}: Parameters<ExpectedExports.init>[0]) {
|
||||||
const utils = createUtils<Store>(effects)
|
const utils = createUtils<Manifest, Store>(effects)
|
||||||
if (!!previousVersion) {
|
if (!!previousVersion) {
|
||||||
const previousVersionEmVer = EmVer.parse(previousVersion)
|
const previousVersionEmVer = EmVer.parse(previousVersion)
|
||||||
for (const [_, migration] of this.sortedMigrations()
|
for (const [_, migration] of this.sortedMigrations()
|
||||||
@@ -42,7 +46,7 @@ export class Migrations<Store> {
|
|||||||
effects,
|
effects,
|
||||||
nextVersion,
|
nextVersion,
|
||||||
}: Parameters<ExpectedExports.uninit>[0]) {
|
}: Parameters<ExpectedExports.uninit>[0]) {
|
||||||
const utils = createUtils<Store>(effects)
|
const utils = createUtils<Manifest, Store>(effects)
|
||||||
if (!!nextVersion) {
|
if (!!nextVersion) {
|
||||||
const nextVersionEmVer = EmVer.parse(nextVersion)
|
const nextVersionEmVer = EmVer.parse(nextVersion)
|
||||||
const reversed = [...this.sortedMigrations()].reverse()
|
const reversed = [...this.sortedMigrations()].reverse()
|
||||||
@@ -56,16 +60,17 @@ export class Migrations<Store> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setupMigrations<
|
export function setupMigrations<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
Store,
|
Store,
|
||||||
Migrations extends Array<Migration<Store, any>>,
|
Migrations extends Array<Migration<Manifest, Store, any>>,
|
||||||
>(manifest: SDKManifest, ...migrations: EnsureUniqueId<Migrations>) {
|
>(manifest: SDKManifest, ...migrations: EnsureUniqueId<Migrations>) {
|
||||||
return Migrations.of<Store, Migrations>(manifest, ...migrations)
|
return Migrations.of<Manifest, Store, Migrations>(manifest, ...migrations)
|
||||||
}
|
}
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
export type EnsureUniqueId<A, B = A, ids = never> =
|
export type EnsureUniqueId<A, B = A, ids = never> =
|
||||||
B extends [] ? A :
|
B extends [] ? A :
|
||||||
B extends [Migration<any, infer id>, ...infer Rest] ? (
|
B extends [Migration<any, any, infer id>, ...infer Rest] ? (
|
||||||
id extends ids ? "One of the ids are not unique"[] :
|
id extends ids ? "One of the ids are not unique"[] :
|
||||||
EnsureUniqueId<A, Rest, id | ids>
|
EnsureUniqueId<A, Rest, id | ids>
|
||||||
) : "There exists a migration that is not a Migration"[]
|
) : "There exists a migration that is not a Migration"[]
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { SetInterfaces } from "../interfaces/setupInterfaces"
|
import { SetInterfaces } from "../interfaces/setupInterfaces"
|
||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { ExpectedExports } from "../types"
|
import { ExpectedExports } from "../types"
|
||||||
import { createUtils } from "../util"
|
import { createUtils } from "../util"
|
||||||
import { Migrations } from "./migrations/setupMigrations"
|
import { Migrations } from "./migrations/setupMigrations"
|
||||||
@@ -6,11 +7,11 @@ import { SetupExports } from "./setupExports"
|
|||||||
import { Install } from "./setupInstall"
|
import { Install } from "./setupInstall"
|
||||||
import { Uninstall } from "./setupUninstall"
|
import { Uninstall } from "./setupUninstall"
|
||||||
|
|
||||||
export function setupInit<Store>(
|
export function setupInit<Manifest extends SDKManifest, Store>(
|
||||||
migrations: Migrations<Store>,
|
migrations: Migrations<Manifest, Store>,
|
||||||
install: Install<Store>,
|
install: Install<Manifest, Store>,
|
||||||
uninstall: Uninstall<Store>,
|
uninstall: Uninstall<Manifest, Store>,
|
||||||
setInterfaces: SetInterfaces<Store, any, any>,
|
setInterfaces: SetInterfaces<Manifest, Store, any, any>,
|
||||||
setupExports: SetupExports<Store>,
|
setupExports: SetupExports<Store>,
|
||||||
): {
|
): {
|
||||||
init: ExpectedExports.init
|
init: ExpectedExports.init
|
||||||
@@ -18,7 +19,7 @@ export function setupInit<Store>(
|
|||||||
} {
|
} {
|
||||||
return {
|
return {
|
||||||
init: async (opts) => {
|
init: async (opts) => {
|
||||||
const utils = createUtils<Store>(opts.effects)
|
const utils = createUtils<Manifest, Store>(opts.effects)
|
||||||
await migrations.init(opts)
|
await migrations.init(opts)
|
||||||
await install.init(opts)
|
await install.init(opts)
|
||||||
await setInterfaces({
|
await setInterfaces({
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { Effects, ExpectedExports } from "../types"
|
import { Effects, ExpectedExports } from "../types"
|
||||||
import { Utils, utils } from "../util/utils"
|
import { Utils, utils } from "../util/utils"
|
||||||
|
|
||||||
export type InstallFn<Store> = (opts: {
|
export type InstallFn<Manifest extends SDKManifest, Store> = (opts: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => Promise<void>
|
}) => Promise<void>
|
||||||
export class Install<Store> {
|
export class Install<Manifest extends SDKManifest, Store> {
|
||||||
private constructor(readonly fn: InstallFn<Store>) {}
|
private constructor(readonly fn: InstallFn<Manifest, Store>) {}
|
||||||
static of<Store>(fn: InstallFn<Store>) {
|
static of<Manifest extends SDKManifest, Store>(
|
||||||
|
fn: InstallFn<Manifest, Store>,
|
||||||
|
) {
|
||||||
return new Install(fn)
|
return new Install(fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +26,8 @@ export class Install<Store> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setupInstall<Store>(fn: InstallFn<Store>) {
|
export function setupInstall<Manifest extends SDKManifest, Store>(
|
||||||
|
fn: InstallFn<Manifest, Store>,
|
||||||
|
) {
|
||||||
return Install.of(fn)
|
return Install.of(fn)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { Effects, ExpectedExports } from "../types"
|
import { Effects, ExpectedExports } from "../types"
|
||||||
import { Utils, utils } from "../util/utils"
|
import { Utils, utils } from "../util/utils"
|
||||||
|
|
||||||
export type UninstallFn<Store> = (opts: {
|
export type UninstallFn<Manifest extends SDKManifest, Store> = (opts: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => Promise<void>
|
}) => Promise<void>
|
||||||
export class Uninstall<Store> {
|
export class Uninstall<Manifest extends SDKManifest, Store> {
|
||||||
private constructor(readonly fn: UninstallFn<Store>) {}
|
private constructor(readonly fn: UninstallFn<Manifest, Store>) {}
|
||||||
static of<Store>(fn: UninstallFn<Store>) {
|
static of<Manifest extends SDKManifest, Store>(
|
||||||
|
fn: UninstallFn<Manifest, Store>,
|
||||||
|
) {
|
||||||
return new Uninstall(fn)
|
return new Uninstall(fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +26,8 @@ export class Uninstall<Store> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setupUninstall<Store>(fn: UninstallFn<Store>) {
|
export function setupUninstall<Manifest extends SDKManifest, Store>(
|
||||||
|
fn: UninstallFn<Manifest, Store>,
|
||||||
|
) {
|
||||||
return Uninstall.of(fn)
|
return Uninstall.of(fn)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,28 @@
|
|||||||
import { Config } from "../config/builder/config"
|
import { Config } from "../config/builder/config"
|
||||||
|
import { SDKManifest } from "../manifest/ManifestTypes"
|
||||||
import { Address, Effects } from "../types"
|
import { Address, Effects } from "../types"
|
||||||
import { Utils } from "../util/utils"
|
import { Utils } from "../util/utils"
|
||||||
import { AddressReceipt } from "./AddressReceipt"
|
import { AddressReceipt } from "./AddressReceipt"
|
||||||
|
|
||||||
export type InterfacesReceipt = Array<Address[] & AddressReceipt>
|
export type InterfacesReceipt = Array<Address[] & AddressReceipt>
|
||||||
export type SetInterfaces<
|
export type SetInterfaces<
|
||||||
|
Manifest extends SDKManifest,
|
||||||
Store,
|
Store,
|
||||||
ConfigInput extends Record<string, any>,
|
ConfigInput extends Record<string, any>,
|
||||||
Output extends InterfacesReceipt,
|
Output extends InterfacesReceipt,
|
||||||
> = (opts: {
|
> = (opts: {
|
||||||
effects: Effects
|
effects: Effects
|
||||||
input: null | ConfigInput
|
input: null | ConfigInput
|
||||||
utils: Utils<Store>
|
utils: Utils<Manifest, Store>
|
||||||
}) => Promise<Output>
|
}) => Promise<Output>
|
||||||
export type SetupInterfaces = <
|
export type SetupInterfaces = <
|
||||||
|
Manifest extends SDKManifest,
|
||||||
Store,
|
Store,
|
||||||
ConfigInput extends Record<string, any>,
|
ConfigInput extends Record<string, any>,
|
||||||
Output extends InterfacesReceipt,
|
Output extends InterfacesReceipt,
|
||||||
>(
|
>(
|
||||||
config: Config<ConfigInput, Store>,
|
config: Config<ConfigInput, Store>,
|
||||||
fn: SetInterfaces<Store, ConfigInput, Output>,
|
fn: SetInterfaces<Manifest, Store, ConfigInput, Output>,
|
||||||
) => SetInterfaces<Store, ConfigInput, Output>
|
) => SetInterfaces<Manifest, Store, ConfigInput, Output>
|
||||||
export const NO_INTERFACE_CHANGES = [] as InterfacesReceipt
|
export const NO_INTERFACE_CHANGES = [] as InterfacesReceipt
|
||||||
export const setupInterfaces: SetupInterfaces = (_config, fn) => fn
|
export const setupInterfaces: SetupInterfaces = (_config, fn) => fn
|
||||||
|
|||||||
Reference in New Issue
Block a user