Skip to content

Commit

Permalink
remove types for deprecated hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
gautamsi committed Jul 17, 2024
1 parent 2849031 commit c7d3f8c
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 184 deletions.
131 changes: 31 additions & 100 deletions packages/core/src/lib/core/initialise-lists.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,78 +221,27 @@ function defaultListHooksResolveInput ({ resolvedData }: { resolvedData: any })
return resolvedData
}

function parseListHooksResolveInput (f: ListHooks<BaseListTypeInfo>['resolveInput']) {
if (typeof f === 'function') {
return {
create: f,
update: f,
}
}

const {
create = defaultListHooksResolveInput,
update = defaultListHooksResolveInput
} = f ?? {}
return { create, update }
}

function parseListHooksValidate (f: ListHooks<BaseListTypeInfo>['validate']) {
if (typeof f === 'function') {
return {
create: f,
update: f,
delete: f,
}
}

const {
create = defaultOperationHook,
update = defaultOperationHook,
delete: delete_ = defaultOperationHook,
} = f ?? {}
return { create, update, delete: delete_ }
}

function parseListHooksBeforeOperation (f: ListHooks<BaseListTypeInfo>['beforeOperation']) {
if (typeof f === 'function') {
return {
create: f,
update: f,
delete: f,
}
}

const {
create = defaultOperationHook,
update = defaultOperationHook,
delete: _delete = defaultOperationHook,
} = f ?? {}
return { create, update, delete: _delete }
}

function parseListHooksAfterOperation (f: ListHooks<BaseListTypeInfo>['afterOperation']) {
if (typeof f === 'function') {
return {
create: f,
update: f,
delete: f,
}
}

const {
create = defaultOperationHook,
update = defaultOperationHook,
delete: _delete = defaultOperationHook,
} = f ?? {}
return { create, update, delete: _delete }
}

function parseListHooks (hooks: ListHooks<BaseListTypeInfo>): ResolvedListHooks<BaseListTypeInfo> {
return {
resolveInput: parseListHooksResolveInput(hooks.resolveInput),
validate: parseListHooksValidate(hooks.validate),
beforeOperation: parseListHooksBeforeOperation(hooks.beforeOperation),
afterOperation: parseListHooksAfterOperation(hooks.afterOperation),
resolveInput: {
create: hooks.resolveInput?.create ?? defaultListHooksResolveInput,
update: hooks.resolveInput?.update ?? defaultListHooksResolveInput,
},
validate: {
create: hooks.validate?.create ?? defaultOperationHook,
update: hooks.validate?.update ?? defaultOperationHook,
delete: hooks.validate?.delete ?? defaultOperationHook,
},
beforeOperation: {
create: hooks.beforeOperation?.create ?? defaultOperationHook,
update: hooks.beforeOperation?.update ?? defaultOperationHook,
delete: hooks.beforeOperation?.delete ?? defaultOperationHook,
},
afterOperation: {
create: hooks.afterOperation?.create ?? defaultOperationHook,
update: hooks.afterOperation?.update ?? defaultOperationHook,
delete: hooks.afterOperation?.delete ?? defaultOperationHook,
},
}
}

Expand All @@ -307,45 +256,27 @@ function defaultFieldHooksResolveInput ({
}

function parseFieldHooks (
fieldKey: string,
hooks: FieldHooks<BaseListTypeInfo>,
): ResolvedFieldHooks<BaseListTypeInfo> {
/** @deprecated, TODO: remove in breaking change */
if (hooks.validate !== undefined) {
if (hooks.validateInput !== undefined) throw new TypeError(`"hooks.validate" conflicts with "hooks.validateInput" for the "${fieldKey}" field`)
if (hooks.validateDelete !== undefined) throw new TypeError(`"hooks.validate" conflicts with "hooks.validateDelete" for the "${fieldKey}" field`)

if (typeof hooks.validate === 'function') {
return parseFieldHooks(fieldKey, {
...hooks,
validate: {
create: hooks.validate,
update: hooks.validate,
delete: hooks.validate,
}
})
}
}

return {
resolveInput: {
create: hooks.resolveInput ?? defaultFieldHooksResolveInput,
update: hooks.resolveInput ?? defaultFieldHooksResolveInput,
create: hooks.resolveInput?.create ?? defaultFieldHooksResolveInput,
update: hooks.resolveInput?.update ?? defaultFieldHooksResolveInput,
},
validate: {
create: hooks.validate?.create ?? hooks.validateInput ?? defaultOperationHook,
update: hooks.validate?.update ?? hooks.validateInput ?? defaultOperationHook,
delete: hooks.validate?.delete ?? hooks.validateDelete ?? defaultOperationHook,
create: hooks.validate?.create ?? defaultOperationHook,
update: hooks.validate?.update ?? defaultOperationHook,
delete: hooks.validate?.delete ?? defaultOperationHook,
},
beforeOperation: {
create: hooks.beforeOperation ?? defaultOperationHook,
update: hooks.beforeOperation ?? defaultOperationHook,
delete: hooks.beforeOperation ?? defaultOperationHook,
create: hooks.beforeOperation?.create ?? defaultOperationHook,
update: hooks.beforeOperation?.update ?? defaultOperationHook,
delete: hooks.beforeOperation?.delete ?? defaultOperationHook,
},
afterOperation: {
create: hooks.afterOperation ?? defaultOperationHook,
update: hooks.afterOperation ?? defaultOperationHook,
delete: hooks.afterOperation ?? defaultOperationHook,
create: hooks.afterOperation?.create ?? defaultOperationHook,
update: hooks.afterOperation?.update ?? defaultOperationHook,
delete: hooks.afterOperation?.delete ?? defaultOperationHook,
},
}
}
Expand Down Expand Up @@ -402,7 +333,7 @@ function getListsWithInitialisedFields (
resultFields[fieldKey] = {
dbField: f.dbField as ResolvedDBField,
access: parseFieldAccessControl(f.access),
hooks: parseFieldHooks(fieldKey, f.hooks ?? {}),
hooks: parseFieldHooks(f.hooks ?? {}),
graphql: {
cacheHint: f.graphql?.cacheHint,
isEnabled: isEnabledField,
Expand Down
19 changes: 0 additions & 19 deletions packages/core/src/lib/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,25 +46,6 @@ function injectDefaults (config: KeystoneConfig, defaultIdField: IdFieldConfig)
}
}

/** @deprecated, TODO: remove in breaking change */
for (const [listKey, list] of Object.entries(updated)) {
if (list.hooks === undefined) continue
if (list.hooks.validate !== undefined) {
if (list.hooks.validateInput !== undefined) throw new TypeError(`"hooks.validate" conflicts with "hooks.validateInput" for the "${listKey}" list`)
if (list.hooks.validateDelete !== undefined) throw new TypeError(`"hooks.validate" conflicts with "hooks.validateDelete" for the "${listKey}" list`)
continue
}

list.hooks = {
...list.hooks,
validate: {
create: list.hooks.validateInput,
update: list.hooks.validateInput,
delete: list.hooks.validateDelete
}
}
}

return updated
}

Expand Down
103 changes: 38 additions & 65 deletions packages/core/src/types/config/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,55 +51,37 @@ export type ListHooks<ListTypeInfo extends BaseListTypeInfo> = {
/**
* Used to **modify the input** for create and update operations after default values and access control have been applied
*/
resolveInput?:
| ResolveInputListHook<ListTypeInfo, 'create' | 'update'>
| {
create?: ResolveInputListHook<ListTypeInfo, 'create'>
update?: ResolveInputListHook<ListTypeInfo, 'update'>
}
resolveInput?: {
create?: ResolveInputListHook<ListTypeInfo, 'create'>
update?: ResolveInputListHook<ListTypeInfo, 'update'>
}

/**
* Used to **validate** if a create, update or delete operation is OK
*/
validate?:
| ValidateHook<ListTypeInfo, 'create' | 'update' | 'delete'>
| {
create?: ValidateHook<ListTypeInfo, 'create'>
update?: ValidateHook<ListTypeInfo, 'update'>
delete?: ValidateHook<ListTypeInfo, 'delete'>
}

/**
* @deprecated, replaced by validate^
*/
validateInput?: ValidateHook<ListTypeInfo, 'create' | 'update'>

/**
* @deprecated, replaced by validate^
*/
validateDelete?: ValidateHook<ListTypeInfo, 'delete'>
validate?: {
create?: ValidateHook<ListTypeInfo, 'create'>
update?: ValidateHook<ListTypeInfo, 'update'>
delete?: ValidateHook<ListTypeInfo, 'delete'>
}

/**
* Used to **cause side effects** before a create, update, or delete operation once all validateInput hooks have resolved
*/
beforeOperation?:
| BeforeOperationListHook<ListTypeInfo, 'create' | 'update' | 'delete'>
| {
create?: BeforeOperationListHook<ListTypeInfo, 'create'>
update?: BeforeOperationListHook<ListTypeInfo, 'update'>
delete?: BeforeOperationListHook<ListTypeInfo, 'delete'>
}
beforeOperation?: {
create?: BeforeOperationListHook<ListTypeInfo, 'create'>
update?: BeforeOperationListHook<ListTypeInfo, 'update'>
delete?: BeforeOperationListHook<ListTypeInfo, 'delete'>
}

/**
* Used to **cause side effects** after a create, update, or delete operation operation has occurred
*/
afterOperation?:
| AfterOperationListHook<ListTypeInfo, 'create' | 'update' | 'delete'>
| {
create?: AfterOperationListHook<ListTypeInfo, 'create'>
update?: AfterOperationListHook<ListTypeInfo, 'update'>
delete?: AfterOperationListHook<ListTypeInfo, 'delete'>
}
afterOperation?: {
create?: AfterOperationListHook<ListTypeInfo, 'create'>
update?: AfterOperationListHook<ListTypeInfo, 'update'>
delete?: AfterOperationListHook<ListTypeInfo, 'delete'>
}
}

export type ResolvedListHooks<ListTypeInfo extends BaseListTypeInfo> = {
Expand Down Expand Up @@ -131,46 +113,37 @@ export type FieldHooks<
/**
* Used to **modify the input** for create and update operations after default values and access control have been applied
*/
resolveInput?:
| ResolveInputFieldHook<ListTypeInfo, 'create' | 'update', FieldKey>
// TODO: add in breaking change
// | {
// create?: ResolveInputFieldHook<ListTypeInfo, 'create', FieldKey>
// update?: ResolveInputFieldHook<ListTypeInfo, 'update', FieldKey>
// }
resolveInput?: {
create?: ResolveInputFieldHook<ListTypeInfo, 'create', FieldKey>
update?: ResolveInputFieldHook<ListTypeInfo, 'update', FieldKey>
}

/**
* Used to **validate** if a create, update or delete operation is OK
*/
validate?:
| ValidateFieldHook<ListTypeInfo, 'create' | 'update' | 'delete', FieldKey>
| {
create?: ValidateFieldHook<ListTypeInfo, 'create', FieldKey>
update?: ValidateFieldHook<ListTypeInfo, 'update', FieldKey>
delete?: ValidateFieldHook<ListTypeInfo, 'delete', FieldKey>
}

/**
* @deprecated, replaced by validate^
* Used to **validate the input** for create and update operations once all resolveInput hooks resolved
*/
validateInput?: ValidateFieldHook<ListTypeInfo, 'create' | 'update', FieldKey>

/**
* @deprecated, replaced by validate^
* Used to **validate** that a delete operation can happen after access control has occurred
*/
validateDelete?: ValidateFieldHook<ListTypeInfo, 'delete', FieldKey>
validate?:{
create?: ValidateFieldHook<ListTypeInfo, 'create', FieldKey>
update?: ValidateFieldHook<ListTypeInfo, 'update', FieldKey>
delete?: ValidateFieldHook<ListTypeInfo, 'delete', FieldKey>
}

/**
* Used to **cause side effects** before a create, update, or delete operation once all validateInput hooks have resolved
*/
beforeOperation?: BeforeOperationFieldHook<ListTypeInfo, 'create' | 'update' | 'delete', FieldKey>
beforeOperation?: {
create?: BeforeOperationFieldHook<ListTypeInfo, 'create', FieldKey>
update?: BeforeOperationFieldHook<ListTypeInfo, 'update', FieldKey>
delete?: BeforeOperationFieldHook<ListTypeInfo, 'delete', FieldKey>
}

/**
* Used to **cause side effects** after a create, update, or delete operation operation has occurred
*/
afterOperation?: AfterOperationFieldHook<ListTypeInfo, 'create' | 'update' | 'delete', FieldKey>
afterOperation?: {
create?: AfterOperationFieldHook<ListTypeInfo, 'create', FieldKey>
update?: AfterOperationFieldHook<ListTypeInfo, 'update', FieldKey>
delete?: AfterOperationFieldHook<ListTypeInfo, 'delete', FieldKey>
}
}

export type ResolvedFieldHooks<
Expand Down

0 comments on commit c7d3f8c

Please sign in to comment.