@nhtio/lucid-resourceful-vue-components 0.1.0-master-ebe57eab → 0.1.0-master-fd238c08
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{VChip-1IMgN2NW.mjs → VChip-BslsWQfv.mjs} +2 -2
- package/{VChip-1IMgN2NW.mjs.map → VChip-BslsWQfv.mjs.map} +1 -1
- package/{VDatePicker-D3Y6VAGq.mjs → VDatePicker-QkOhEsiJ.mjs} +4 -4
- package/{VDatePicker-D3Y6VAGq.mjs.map → VDatePicker-QkOhEsiJ.mjs.map} +1 -1
- package/{VDialog-uKUuB6Ni.mjs → VDialog-CYWIsqyU.mjs} +3 -3
- package/{VDialog-uKUuB6Ni.mjs.map → VDialog-CYWIsqyU.mjs.map} +1 -1
- package/{VEmptyState-B5x_wEth.mjs → VEmptyState-DSkV3rdW.mjs} +2 -2
- package/{VEmptyState-B5x_wEth.mjs.map → VEmptyState-DSkV3rdW.mjs.map} +1 -1
- package/{VHover-DaqmIqJM.mjs → VHover-B2PK8R1R.mjs} +3 -3
- package/{VHover-DaqmIqJM.mjs.map → VHover-B2PK8R1R.mjs.map} +1 -1
- package/{VListItem-TG9oZPkm.mjs → VListItem-B2LElOLe.mjs} +3 -3
- package/{VListItem-TG9oZPkm.mjs.map → VListItem-B2LElOLe.mjs.map} +1 -1
- package/{VMenu-DbIG2Qhi.mjs → VMenu-CahiNXXZ.mjs} +3 -3
- package/{VMenu-DbIG2Qhi.mjs.map → VMenu-CahiNXXZ.mjs.map} +1 -1
- package/{VPicker-kVsex0W4.mjs → VPicker-DC_wz1Zr.mjs} +4 -4
- package/{VPicker-kVsex0W4.mjs.map → VPicker-DC_wz1Zr.mjs.map} +1 -1
- package/{VRadioGroup-DrU5JyGR.mjs → VRadioGroup-DMKik9Cu.mjs} +4 -4
- package/{VRadioGroup-DrU5JyGR.mjs.map → VRadioGroup-DMKik9Cu.mjs.map} +1 -1
- package/{VRow-cmYZqXOu.mjs → VRow-7oNLItQM.mjs} +2 -2
- package/{VRow-cmYZqXOu.mjs.map → VRow-7oNLItQM.mjs.map} +1 -1
- package/{VSheet-D_4R07YK.mjs → VSheet-DqbTSvsm.mjs} +2 -2
- package/{VSheet-D_4R07YK.mjs.map → VSheet-DqbTSvsm.mjs.map} +1 -1
- package/{actions-eZjKpI2f.mjs → actions-nnJGlDWx.mjs} +12 -12
- package/{actions-eZjKpI2f.mjs.map → actions-nnJGlDWx.mjs.map} +1 -1
- package/{alert-X_y7N0k5.mjs → alert-BXbhLNkg.mjs} +11 -11
- package/{alert-X_y7N0k5.mjs.map → alert-BXbhLNkg.mjs.map} +1 -1
- package/{bigint-BMjZO-KA.mjs → bigint-S8oJ2u2Y.mjs} +7 -7
- package/{bigint-BMjZO-KA.mjs.map → bigint-S8oJ2u2Y.mjs.map} +1 -1
- package/{boolean-BxVw3woA.mjs → boolean-BoaSL5pb.mjs} +10 -10
- package/{boolean-BxVw3woA.mjs.map → boolean-BoaSL5pb.mjs.map} +1 -1
- package/{clipboard-DRlt84JQ.mjs → clipboard-B4T3iSwL.mjs} +7 -7
- package/{clipboard-DRlt84JQ.mjs.map → clipboard-B4T3iSwL.mjs.map} +1 -1
- package/{common-Pv2k5d5L.mjs → common-crxptQS0.mjs} +15 -15
- package/{common-Pv2k5d5L.mjs.map → common-crxptQS0.mjs.map} +1 -1
- package/components/autorefresh_controller.mjs +1 -1
- package/components/control_button.mjs +1 -1
- package/components/control_button_bar.mjs +2 -2
- package/components/control_menu.mjs +1 -1
- package/components/custom_field.mjs +1 -1
- package/components/exporter.mjs +1 -1
- package/components/fields/bigint.mjs +1 -1
- package/components/fields/boolean.mjs +1 -1
- package/components/fields/date.mjs +1 -1
- package/components/fields/date_time.mjs +1 -1
- package/components/fields/enum.mjs +1 -1
- package/components/fields/integer.mjs +1 -1
- package/components/fields/number.mjs +1 -1
- package/components/fields/string.mjs +1 -1
- package/components/fields/unsigned_integer.mjs +1 -1
- package/components/fields.mjs +9 -9
- package/components/form_with_validation.mjs +1 -1
- package/components/resourceful_alerter.mjs +1 -1
- package/components/resourceful_index.mjs +1 -1
- package/components/resourceful_record.mjs +2 -2
- package/components/resourceful_record_default_form.mjs +1 -1
- package/components/resourceful_record_form.mjs +1 -1
- package/components/sortable.mjs +1 -1
- package/components/svg_icon.mjs +1 -1
- package/components/timezone_picker.mjs +1 -1
- package/components.mjs +23 -23
- package/composables.mjs +11 -11
- package/{custom-CorsNQ6V.mjs → custom-1zSxQhfh.mjs} +7 -7
- package/{custom-CorsNQ6V.mjs.map → custom-1zSxQhfh.mjs.map} +1 -1
- package/{date-CUv4AD1k.mjs → date-BaVQ-B5p.mjs} +10 -10
- package/{date-CUv4AD1k.mjs.map → date-BaVQ-B5p.mjs.map} +1 -1
- package/{date_time-DUPA8gK_.mjs → date_time-C2eWcsmU.mjs} +18 -18
- package/{date_time-DUPA8gK_.mjs.map → date_time-C2eWcsmU.mjs.map} +1 -1
- package/{display-DtPqxGxo.mjs → display-2uHLu-iA.mjs} +4 -4
- package/{display-DtPqxGxo.mjs.map → display-2uHLu-iA.mjs.map} +1 -1
- package/{display-CdPzCNpa.mjs → display-D19CpJw_.mjs} +3 -3
- package/{display-CdPzCNpa.mjs.map → display-D19CpJw_.mjs.map} +1 -1
- package/{enum-B2yaUE-A.mjs → enum-BshWH7_8.mjs} +9 -9
- package/{enum-B2yaUE-A.mjs.map → enum-BshWH7_8.mjs.map} +1 -1
- package/{exceptions-BYmapqhE.mjs → exceptions-K8eRFe_u.mjs} +2 -2
- package/{exceptions-BYmapqhE.mjs.map → exceptions-K8eRFe_u.mjs.map} +1 -1
- package/exceptions.mjs +2 -2
- package/factories.d.ts +1 -0
- package/factories.mjs +4 -2
- package/{field_composer-CUv8W3Tg.mjs → field_composer-BZoOWQ1U.mjs} +3 -3
- package/{field_composer-CUv8W3Tg.mjs.map → field_composer-BZoOWQ1U.mjs.map} +1 -1
- package/{form-zBaGUnUi.mjs → form-JY-hIKBm.mjs} +15 -16
- package/form-JY-hIKBm.mjs.map +1 -0
- package/{guards-DaiwJBYO.mjs → guards-DZPvWy_4.mjs} +3 -3
- package/guards-DZPvWy_4.mjs.map +1 -0
- package/guards.mjs +4 -4
- package/helpers.mjs +9 -9
- package/{http-Cxynx5pW.mjs → http-BbIZXN2x.mjs} +2 -2
- package/{http-Cxynx5pW.mjs.map → http-BbIZXN2x.mjs.map} +1 -1
- package/{http-BCXJjieC.mjs → http-pGFfofl9.mjs} +6 -3
- package/http-pGFfofl9.mjs.map +1 -0
- package/http.mjs +1 -1
- package/{index-BobM-vEI.mjs → index-BitVUrFg.mjs} +3 -3
- package/{index-BobM-vEI.mjs.map → index-BitVUrFg.mjs.map} +1 -1
- package/{index-BSGSQUvi.mjs → index-C7w5RPS8.mjs} +6 -6
- package/{index-BSGSQUvi.mjs.map → index-C7w5RPS8.mjs.map} +1 -1
- package/{index-1tiFk-z8.mjs → index-CZJ2FcjP.mjs} +2 -2
- package/{index-1tiFk-z8.mjs.map → index-CZJ2FcjP.mjs.map} +1 -1
- package/{index-Cp6PZ6jr.mjs → index-DHeWMCWw.mjs} +8 -8
- package/{index-Cp6PZ6jr.mjs.map → index-DHeWMCWw.mjs.map} +1 -1
- package/{index-Bux_9EQY.mjs → index-DiBGKnUB.mjs} +8 -8
- package/{index-Bux_9EQY.mjs.map → index-DiBGKnUB.mjs.map} +1 -1
- package/{index-CV-VR5ZN.mjs → index-Dl9jfPgI.mjs} +43 -43
- package/{index-CV-VR5ZN.mjs.map → index-Dl9jfPgI.mjs.map} +1 -1
- package/{index-otVKzohl.mjs → index-Dy1kohCE.mjs} +28 -19
- package/index-Dy1kohCE.mjs.map +1 -0
- package/{index-DGYeadWj.mjs → index-JGVXuda6.mjs} +4 -4
- package/{index-DGYeadWj.mjs.map → index-JGVXuda6.mjs.map} +1 -1
- package/{index-CfWOKNEo.mjs → index-dcZGsFwf.mjs} +3 -3
- package/{index-CfWOKNEo.mjs.map → index-dcZGsFwf.mjs.map} +1 -1
- package/{index-CzhpetTi.mjs → index-lUBFKgIk.mjs} +8 -8
- package/{index-CzhpetTi.mjs.map → index-lUBFKgIk.mjs.map} +1 -1
- package/index.mjs +40 -38
- package/{integer-BWKYSF5I.mjs → integer-DGV22mIh.mjs} +3 -3
- package/{integer-BWKYSF5I.mjs.map → integer-DGV22mIh.mjs.map} +1 -1
- package/{ioc-BRFP3w6U.mjs → ioc-CbjgKkoq.mjs} +2 -2
- package/{ioc-BRFP3w6U.mjs.map → ioc-CbjgKkoq.mjs.map} +1 -1
- package/ioc.mjs +1 -1
- package/{mdi-B06yTfXf.mjs → mdi-Kxmy15-q.mjs} +2 -2
- package/{mdi-B06yTfXf.mjs.map → mdi-Kxmy15-q.mjs.map} +1 -1
- package/{number-CV-ilUSy.mjs → number-ChyJi9k7.mjs} +8 -8
- package/{number-CV-ilUSy.mjs.map → number-ChyJi9k7.mjs.map} +1 -1
- package/package.json +38 -38
- package/private/resourceful-record/index.d.ts +9 -0
- package/private/resourceful-record/props.d.ts +4 -0
- package/private/services/browser.d.ts +2 -0
- package/{props-CWgQDMLq.mjs → props-B2HHemO2.mjs} +4 -4
- package/{props-CWgQDMLq.mjs.map → props-B2HHemO2.mjs.map} +1 -1
- package/{props-BBBc7J1q.mjs → props-BPO1G4n5.mjs} +4 -4
- package/{props-BBBc7J1q.mjs.map → props-BPO1G4n5.mjs.map} +1 -1
- package/{renderers-BD7CrBqo.mjs → renderers-Dowye4Bl.mjs} +14 -14
- package/{renderers-BD7CrBqo.mjs.map → renderers-Dowye4Bl.mjs.map} +1 -1
- package/{string-CcynWgei.mjs → string-DOIj21u5.mjs} +13 -13
- package/{string-CcynWgei.mjs.map → string-DOIj21u5.mjs.map} +1 -1
- package/{unsigned_integer-D0FzKzNU.mjs → unsigned_integer-cQWXKTHG.mjs} +4 -4
- package/{unsigned_integer-D0FzKzNU.mjs.map → unsigned_integer-cQWXKTHG.mjs.map} +1 -1
- package/{utils-C_uOac-v.mjs → utils-Dh8-g-7s.mjs} +2 -2
- package/{utils-C_uOac-v.mjs.map → utils-Dh8-g-7s.mjs.map} +1 -1
- package/{validation-D1FwcMNA.mjs → validation-DBLJZW1_.mjs} +6 -6
- package/{validation-D1FwcMNA.mjs.map → validation-DBLJZW1_.mjs.map} +1 -1
- package/{vendor-nhtio-vuetifiable-Qm2uuc7r.mjs → vendor-nhtio-vuetifiable-CRAkpWr4.mjs} +7 -7
- package/{vendor-nhtio-vuetifiable-Qm2uuc7r.mjs.map → vendor-nhtio-vuetifiable-CRAkpWr4.mjs.map} +1 -1
- package/{vendor-xlsx-BeYuj8cp.mjs → vendor-xlsx-B1NmWxyx.mjs} +2 -2
- package/{vendor-xlsx-BeYuj8cp.mjs.map → vendor-xlsx-B1NmWxyx.mjs.map} +1 -1
- package/form-zBaGUnUi.mjs.map +0 -1
- package/guards-DaiwJBYO.mjs.map +0 -1
- package/http-BCXJjieC.mjs.map +0 -1
- package/index-otVKzohl.mjs.map +0 -1
package/form-zBaGUnUi.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"form-zBaGUnUi.mjs","sources":["../src/private/resourceful-record/types.ts","../src/private/resourceful-record/props.ts","../src/private/resourceful-record/utils.ts","../src/private/resourceful-record/form.ts"],"sourcesContent":["import { joi } from '@nhtio/lucid-resourceful/joi'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport type { SlotsType } from 'vue'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { OpenAPIV3 } from 'openapi-types'\nimport type { NextFn } from '@nhtio/middleware'\nimport type { Schema } from '@nhtio/lucid-resourceful/joi'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ResourcefulRecordHookableEvents } from './props'\nimport type { ResourcefulHttpResponse } from '../services/http'\nimport type { EventMap, Key, Listener } from '@nhtio/tiny-typed-emitter'\nimport type { Hooks, HookHandler, HookHandlerProvider } from '@nhtio/hooks'\nimport type {\n FormWithValidationDefaultSlotProps,\n ScopedDisplayProps,\n ValidationProps,\n} from '../ux/validation'\nimport type {\n ResourcefulModelFieldRelationshipMeta,\n ResourcefulEnumObject,\n} from '@nhtio/lucid-resourceful/types'\n\nexport type ResourceResourcefulRecordResponse = Record<string, any>\n\nexport type ResourcefulRecordEvents = ResourcefulRecordHookableEvents\n\nexport type ResourcefulRecordHooks = Hooks<ResourcefulRecordEvents>\n\nexport type ResourcefulRecordHookHandler<Event extends keyof ResourcefulRecordEvents> =\n | HookHandler<ResourcefulRecordEvents[Event][0], ResourcefulRecordEvents[Event][1]>\n | HookHandlerProvider<ResourcefulRecordEvents[Event][0], ResourcefulRecordEvents[Event][1]>\n\nexport type ResourcefulRecordPreventedHookHandler = ResourcefulRecordHookHandler<'prevented'>\n\nexport type ResourcefulRecordSubmittedHookHandler = ResourcefulRecordHookHandler<'submitted'>\n\nexport type ResourcefulRecordProcessingHookHandler = ResourcefulRecordHookHandler<'processing'>\n\nexport type ResourcefulRecordSuccessHookHandler = ResourcefulRecordHookHandler<'success'>\n\nexport type ResourcefulRecordFailureHookHandler = ResourcefulRecordHookHandler<'failure'>\n\n/**\n * NOTE: Exception hooks are specifically for errors that occur during the processing\n * of the submission middleware chain, whereas general 'error' hooks handle caught errors\n * throughout the component lifecycle.\n */\nexport type ResourcefulRecordExceptionHookHandler = ResourcefulRecordHookHandler<'exception'>\n\nexport type ResourcefulRecordChangeStateSubmittingHookHandler =\n ResourcefulRecordHookHandler<'state:submitting'>\nexport type ResourcefulRecordChangeStateValidatingHookHandler =\n ResourcefulRecordHookHandler<'state:validating'>\nexport type ResourcefulRecordChangeStateTouchedHookHandler =\n ResourcefulRecordHookHandler<'state:touched'>\nexport type ResourcefulRecordChangeStateDirtyHookHandler =\n ResourcefulRecordHookHandler<'state:dirty'>\nexport type ResourcefulRecordChangeStateValidHookHandler =\n ResourcefulRecordHookHandler<'state:valid'>\nexport type ResourcefulRecordChangeStatePendingHookHandler =\n ResourcefulRecordHookHandler<'state:pending'>\nexport type ResourcefulRecordChangeStateErrorsHookHandler =\n ResourcefulRecordHookHandler<'state:errors'>\nexport type ResourcefulRecordChangeStateErrorBagHookHandler =\n ResourcefulRecordHookHandler<'state:errorBag'>\nexport type ResourcefulRecordChangeStateSubmitCountHookHandler =\n ResourcefulRecordHookHandler<'state:submitCount'>\n\nexport const ResourcefulRecordViewMode = ['read', 'create', 'update'] as const\nexport type ResourcefulRecordViewMode = (typeof ResourcefulRecordViewMode)[number]\n\nexport type ResourcefulRecordSlots = {\n 'error-media': () => any\n 'loading-media': (props: { percent: number }) => any\n 'form': ResourcefulRecordFormSlots['default']\n}\n\nexport type ResourcefulRecordComponentSlots = SlotsType<ResourcefulRecordSlots>\n\nexport type ResourcefulRecordFormWithValidationDefaultSlotProps = Omit<\n FormWithValidationDefaultSlotProps,\n 'forceUpdateSchema' | 'forceUpdateInitialValues'\n> & {\n doRefreshChoices: Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n}\n\nexport type ResourcefulRecordFormSlots = {\n default: <TSchema extends Schema>(\n props: ResourcefulRecordFormWithValidationDefaultSlotProps,\n display: ScopedDisplayProps,\n model: ResourcefulRecordModelSchema,\n schema: TSchema,\n mode: ResourcefulRecordViewMode,\n fire: FireAlertFn,\n doRefreshChoices: Record<string, () => Promise<REnumFieldLoadedChoice[]>>\n ) => any\n}\n\nexport type ResourcefulRecordFormDefaultSlotArgs = Parameters<ResourcefulRecordFormSlots['default']>\n\nexport type ResourcefulRecordFormComponentSlots = SlotsType<ResourcefulRecordFormSlots>\n\nexport type ResourcefulSubmissionHandler = (\n values: any,\n onSuccess: (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => void | Promise<void>,\n onFailure: (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n ) => void | Promise<void>\n) => void | Promise<void>\n\nexport type ResourcefulRecordBusEventMap = EventMap<{\n doFormSubmit: Parameters<ValidationProps['doFormSubmit']>\n doResetForm: Parameters<ValidationProps['doResetForm']>\n setFieldValue: Parameters<ValidationProps['setFieldValue']>\n setValues: Parameters<ValidationProps['setValues']>\n setFieldTouched: Parameters<ValidationProps['setFieldTouched']>\n setTouched: Parameters<ValidationProps['setTouched']>\n validate: Parameters<ValidationProps['validate']>\n validateField: Parameters<ValidationProps['validateField']>\n forceUpdateSchema: Parameters<ValidationProps['forceUpdateSchema']>\n forceUpdateInitialValues: Parameters<ValidationProps['forceUpdateInitialValues']>\n}>\n\nclass ResourcefulRecordBusConsumer {\n readonly #emitter: ResourcefulRecordBusEmitter\n\n constructor(emitter: ResourcefulRecordBusEmitter) {\n this.#emitter = emitter\n }\n\n on<K>(\n event: Key<K, ResourcefulRecordBusEventMap>,\n listener: Listener<K, ResourcefulRecordBusEventMap>,\n ctx?: any\n ): this {\n this.#emitter.on(event, listener, ctx)\n return this\n }\n\n once<K>(\n event: Key<K, ResourcefulRecordBusEventMap>,\n listener: Listener<K, ResourcefulRecordBusEventMap>,\n ctx?: any\n ): this {\n this.#emitter.once(event, listener, ctx)\n return this\n }\n\n off<K>(\n event: Key<K, ResourcefulRecordBusEventMap>,\n listener: Listener<K, ResourcefulRecordBusEventMap>\n ): this {\n this.#emitter.off(event, listener)\n return this\n }\n}\n\nexport type { ResourcefulRecordBusConsumer }\n\nexport const isResourcefulRecordBusConsumer = (\n value: unknown\n): value is ResourcefulRecordBusConsumer => {\n return value instanceof ResourcefulRecordBusConsumer\n}\n\nexport class ResourcefulRecordBusEmitter extends TypedEventEmitter<ResourcefulRecordBusEventMap> {\n spawn(): ResourcefulRecordBusConsumer {\n return new ResourcefulRecordBusConsumer(this)\n }\n}\n\nexport type ActionIsActionableValidator = (record: ResourceResourcefulRecordResponse) => boolean\n\nexport type TernaryOperator = boolean | null\n\nexport type ActionCallback = (\n record: ResourceResourcefulRecordResponse\n) => TernaryOperator | Promise<TernaryOperator> | PromiseLike<TernaryOperator>\n\nexport interface ResourcefulRecordAction {\n icon: IconValue\n cta: string\n actionable?: boolean | ActionIsActionableValidator | undefined\n}\n\nexport interface ResourcefulRecordUrlAction extends ResourcefulRecordAction {\n url: string | ((record: ResourceResourcefulRecordResponse) => string | null | undefined)\n target?: '_self' | '_blank' | '_parent' | '_top' | string | undefined\n}\n\nexport type SuccessCallback = (record: ResourceResourcefulRecordResponse) => void\n\nexport type UndeterminedCallback = (record: ResourceResourcefulRecordResponse) => void\n\nexport type FailureCallback = (record: ResourceResourcefulRecordResponse) => void\n\nexport type CompleteCallback = (record: ResourceResourcefulRecordResponse) => void\n\nexport type DispositionCallback = (\n record: ResourceResourcefulRecordResponse,\n result: TernaryOperator\n) => void\n\nexport type ExceptionCallback = (\n record: ResourceResourcefulRecordResponse,\n error: unknown,\n onComplete?: CompleteCallback | undefined\n) => void\n\nexport interface ResourcefulRecordFunctionAction extends ResourcefulRecordAction {\n action: ActionCallback\n onSuccess?: SuccessCallback | undefined\n onUndetermined?: UndeterminedCallback | undefined\n onFailure?: FailureCallback | undefined\n onComplete?: CompleteCallback | undefined\n onException?: ExceptionCallback | undefined\n}\n\nconst resourcefulRecordActionCommonSchema = {\n icon: joi\n .alternatives()\n .try(joi.string(), joi.object().unknown(true), joi.array(), joi.function())\n .required(),\n cta: joi.string().required(),\n actionable: joi.alternatives().try(joi.boolean(), joi.function()).optional(),\n} satisfies Record<keyof ResourcefulRecordAction, Schema>\n\nconst resourcefulRecordUrlActionSchema = joi.object<ResourcefulRecordUrlAction>({\n ...resourcefulRecordActionCommonSchema,\n url: joi.alternatives().try(joi.string(), joi.function()).required(),\n target: joi.string().optional(),\n})\n\nconst resourcefulRecordFunctionActionSchema = joi.object<ResourcefulRecordFunctionAction>({\n ...resourcefulRecordActionCommonSchema,\n action: joi.function().required(),\n onSuccess: joi.function().optional(),\n onUndetermined: joi.function().optional(),\n onFailure: joi.function().optional(),\n onComplete: joi.function().optional(),\n onException: joi.function().optional(),\n})\n\nexport const isResourcefulRecordUrlAction = (\n value: unknown\n): value is ResourcefulRecordUrlAction => {\n const { error } = resourcefulRecordUrlActionSchema.validate(value, { abortEarly: true })\n return !error\n}\n\nexport const isResourcefulRecordFunctionAction = (\n value: unknown\n): value is ResourcefulRecordFunctionAction => {\n const { error } = resourcefulRecordFunctionActionSchema.validate(value, { abortEarly: true })\n return !error\n}\n\nconst resourcefulRecordActionArraySchema = joi\n .array<Array<ResourcefulRecordUrlAction | ResourcefulRecordFunctionAction>>()\n .items(\n joi.alternatives().try(resourcefulRecordUrlActionSchema, resourcefulRecordFunctionActionSchema)\n )\n\nexport const isResourcefulRecordActionArray = (\n value: unknown\n): value is Array<ResourcefulRecordUrlAction | ResourcefulRecordFunctionAction> => {\n const { error } = resourcefulRecordActionArraySchema.validate(value, { abortEarly: true })\n return !error\n}\n\nexport type ResourcefulRecordCrudActionCallback = () => void | Promise<void>\n\nexport type ResourcefulRecordCrudInstanceActionCallback = (uid: string) => void | Promise<void>\n\nexport type ResourcefulRecordSubmissionMiddlewareFn = (\n values: any,\n next: NextFn\n) => void | Promise<void>\n\nexport type ResourcefulRecordModelSchemaMandatoryProps = Extract<\n keyof OpenAPIV3.NonArraySchemaObject,\n 'type' | 'title' | 'nullable' | 'readOnly' | 'writeOnly'\n>\n\nexport type ResourcefulRecordModelPropertySchema = Pick<\n Required<OpenAPIV3.NonArraySchemaObject>,\n ResourcefulRecordModelSchemaMandatoryProps\n> &\n Omit<NonNullable<OpenAPIV3.NonArraySchemaObject>, ResourcefulRecordModelSchemaMandatoryProps> & {\n 'x-resourceful-autocreated': boolean\n 'x-resourceful-autoupdated': boolean\n 'x-resourceful-immutable': boolean\n 'x-resourceful-primary-key': boolean\n 'x-resourceful-relationship': ResourcefulModelFieldRelationshipMeta\n 'x-resourceful-choices'?: ResourcefulEnumObject<any>[]\n }\n\nexport type ResourcefulRecordModelSchema = {\n [name: string]: ResourcefulRecordModelPropertySchema\n}\n","import { FireAlertFn } from '../ux/alert'\nimport { isObject } from '../common/guards'\nimport { joi } from '@nhtio/lucid-resourceful/joi'\nimport { isResourcefulRecordActionArray } from './types'\nimport { getDefaultsForPropFactory } from '../common/utils'\nimport { omit, pick } from '@nhtio/vuetifiable/util/helpers'\nimport { makeCommonResourcefulFieldProps } from '../fields/common'\nimport { makeVCardProps } from '@nhtio/vuetifiable/components/VCard/VCard'\nimport { defaultControlButtonBarOptionsProps } from '../control-button-bar/props'\nimport { propsAndEmitsFactory, propsAndDefaultsFactory } from '../common/factories'\nimport {\n defaultControlButtonProps,\n defaultControlButtonOverrideProps,\n} from '../control-button/props'\nimport {\n isResourcefulRecordPreventedEvent,\n isResourcefulRecordSubmittedEvent,\n isResourcefulRecordProcessingEvent,\n isResourcefulRecordSuccessEvent,\n isResourcefulRecordFailureEvent,\n} from './guards'\nimport type { PropFactory } from '../common/factories'\nimport type { REnumFieldLoadedChoice } from '../fields/enum'\nimport type { ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type { AsyncValidationOptions } from '@nhtio/lucid-resourceful/joi'\nimport type { PropType, ExtractPublicPropTypes, ExtractPropTypes } from 'vue'\nimport type { ValidationMessageKey, JoiSchemaPropType } from '../ux/validation'\nimport type { ControlButtonBarOptionsProps } from '../control-button-bar/props'\nimport type { ResourcefulHttpResponse, ResourcefulHttpProgress } from '../services/http'\nimport type { ExtractPublicPropTypesFromFactory, HookableEvents } from '../common/factories'\nimport type { RouteLocationAsRelativeGeneric, RouteLocationAsPathGeneric } from 'vue-router'\nimport type { ControlButtonProps, ControlButtonOverrideProps } from '../control-button/props'\nimport type {\n ResourcefulRecordModelSchema,\n ResourcefulRecordPreventedHookHandler,\n ResourcefulRecordSubmittedHookHandler,\n ResourcefulRecordProcessingHookHandler,\n ResourcefulRecordSuccessHookHandler,\n ResourcefulRecordFailureHookHandler,\n ResourcefulRecordExceptionHookHandler,\n ResourcefulRecordChangeStateSubmittingHookHandler,\n ResourcefulRecordChangeStateValidatingHookHandler,\n ResourcefulRecordChangeStateTouchedHookHandler,\n ResourcefulRecordChangeStateDirtyHookHandler,\n ResourcefulRecordChangeStateValidHookHandler,\n ResourcefulRecordChangeStatePendingHookHandler,\n ResourcefulRecordChangeStateErrorsHookHandler,\n ResourcefulRecordChangeStateErrorBagHookHandler,\n ResourcefulRecordChangeStateSubmitCountHookHandler,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordViewMode,\n ResourcefulSubmissionHandler,\n ResourcefulRecordBusConsumer,\n ResourcefulRecordUrlAction,\n ResourcefulRecordFunctionAction,\n ActionIsActionableValidator,\n ResourcefulRecordCrudActionCallback,\n ResourcefulRecordCrudInstanceActionCallback,\n ResourcefulRecordSubmissionMiddlewareFn,\n} from './types'\n\nexport const {\n factory: makeResourcefulRecordAdvancedOptions,\n defaults: resourcefulRecordAdvancedOptionsDefaults,\n} = propsAndDefaultsFactory(\n {\n uidForCreate: {\n type: String as PropType<string>,\n default: 'new',\n },\n debug: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n 'ResourcefulRecordAdvancedOptions'\n)\n\nexport type ResourcefulRecordAdvancedOptions = ExtractPublicPropTypesFromFactory<\n typeof makeResourcefulRecordAdvancedOptions\n>\n\nexport const {\n factory: makeResourcefulRecordRouteOptions,\n defaults: resourcefulRecordRouteOptionsDefaults,\n} = propsAndDefaultsFactory(\n {\n name: {\n type: String as PropType<string>,\n required: true,\n },\n paramForUid: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n queryPropForUid: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n },\n 'ResourcefulRecordRouteOptions'\n)\n\nexport type ResourcefulRecordRouteOptions = ExtractPublicPropTypesFromFactory<\n typeof makeResourcefulRecordRouteOptions\n>\n\nexport const {\n factory: makeResourcefulRecordCommonFieldProps,\n defaults: resourcefulRecordCommonFieldPropsDefaults,\n} = propsAndDefaultsFactory(\n {\n ...pick(makeCommonResourcefulFieldProps(), [\n 'density',\n 'class',\n 'style',\n 'menuIcon',\n 'theme',\n 'variant',\n 'persistentPlaceholder',\n ]),\n },\n 'ResourcefulRecordCommonFieldProps'\n)\n\nexport type ResourcefulRecordCommonFieldProps = ExtractPublicPropTypesFromFactory<\n typeof makeResourcefulRecordCommonFieldProps\n>\n\nexport type ResourcefulRecordFieldSpecificProps = {\n [prop: string]: ResourcefulRecordCommonFieldProps\n}\n\nconst resourcefulRecordRouteOptionsSchema = joi\n .object({\n name: joi.string().required(),\n paramForUid: joi.string().optional(),\n queryPropForUid: joi.string().optional(),\n })\n .xor('paramForUid', 'queryPropForUid')\n\nexport const resourcefulRecordRouteOptionsValidator = (\n value: unknown\n): value is ResourcefulRecordRouteOptions => {\n const { error } = resourcefulRecordRouteOptionsSchema.validate(value, { abortEarly: true })\n return !error\n}\n\nexport const {\n factory: makeResourcefulRecordNavOptions,\n defaults: resourcefulRecordNavOptionsDefaults,\n} = propsAndDefaultsFactory(\n {\n name: {\n type: String as PropType<RouteLocationAsRelativeGeneric['name'] | undefined>,\n default: undefined,\n },\n params: {\n type: Object as PropType<RouteLocationAsRelativeGeneric['params'] | undefined>,\n default: undefined,\n },\n path: {\n type: String as PropType<RouteLocationAsPathGeneric['path'] | undefined>,\n default: undefined,\n },\n query: {\n type: Object as PropType<\n RouteLocationAsRelativeGeneric['query'] | RouteLocationAsPathGeneric['query'] | undefined\n >,\n default: undefined,\n },\n hash: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n replace: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n force: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n },\n 'ResourcefulRecordNavOptions'\n)\n\nexport type ResourcefulRecordNavOptions = ExtractPublicPropTypesFromFactory<\n typeof makeResourcefulRecordNavOptions\n>\n\nconst routeLocationAsRelativeGenericSchema = joi.object<RouteLocationAsRelativeGeneric>({\n name: joi.string().optional(),\n params: joi.object().pattern(joi.string(), joi.any()).optional(),\n query: joi.object().pattern(joi.string(), joi.any()).optional(),\n path: joi.forbidden(),\n hash: joi.string().optional(),\n replace: joi.boolean().optional(),\n force: joi.boolean().optional(),\n})\nconst routeLocationAsPathGenericSchema = joi.object<RouteLocationAsPathGeneric>({\n path: joi.string().required(),\n query: joi.object().pattern(joi.string(), joi.any()).optional(),\n hash: joi.string().optional(),\n replace: joi.boolean().optional(),\n force: joi.boolean().optional(),\n})\nconst resourcefulRecordNavOptionsSchema = joi.alternatives<\n RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric\n>(routeLocationAsRelativeGenericSchema, routeLocationAsPathGenericSchema)\n\nexport const resourcefulRecordNavOptionsValidator = (\n value: unknown\n): value is RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric => {\n const { error } = resourcefulRecordNavOptionsSchema.validate(value, { abortEarly: true })\n return !error\n}\n\nexport const rawResourcefulEmits = {\n 'state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n 'update:state': (state: string | null | undefined) =>\n 'string' === typeof state || null === state || 'undefined' === typeof state,\n // NOTE: 'error' is a general error handler for caught errors throughout the component lifecycle\n 'error': (error: unknown) => error instanceof Error || true,\n 'prevented': (values: Record<string, any>, error: ValidationError) =>\n isResourcefulRecordPreventedEvent(values, error),\n 'submitted': (values: Record<string, any>) => isResourcefulRecordSubmittedEvent(values),\n 'success': (response: ResourceResourcefulRecordResponse, values: Record<string, any>) =>\n isResourcefulRecordSuccessEvent(response, values),\n 'failure': (response: ResourcefulHttpResponse, values: Record<string, any>) =>\n isResourcefulRecordFailureEvent(response, values),\n // NOTE: 'exception' is specifically for errors during submission middleware chain processing\n 'exception': (exception: unknown) => exception instanceof Error || true,\n 'state:submitting': (is: boolean) => 'boolean' === typeof is,\n 'state:validating': (is: boolean) => 'boolean' === typeof is,\n 'state:touched': (is: boolean) => 'boolean' === typeof is,\n 'state:dirty': (is: boolean) => 'boolean' === typeof is,\n 'state:valid': (is: boolean) => 'boolean' === typeof is,\n 'state:pending': (is: boolean) => 'boolean' === typeof is,\n 'state:errors': (errors: Record<string, string | undefined>) =>\n isObject(errors) &&\n Object.keys(errors).every((k) => 'string' === typeof k) &&\n Object.values(errors).every((v) => 'string' === typeof v || undefined === v),\n 'state:errorBag': (errors: Partial<Record<string, string[]>>) =>\n isObject(errors) &&\n Object.keys(errors).every((k) => 'string' === typeof k) &&\n Object.values(errors).every(\n (v) => Array.isArray(v) && v.every((item) => 'string' === typeof item)\n ),\n 'state:submitCount': (count: number) => 'number' === typeof count,\n}\n\nexport const { makeProps: makeBaseResourcefulRecordProps, emits: baseResourcefulEmits } =\n propsAndEmitsFactory(\n {\n state: {\n type: String as PropType<string | undefined | null>,\n default: undefined,\n },\n mode: {\n type: String as PropType<ResourcefulRecordViewMode>,\n default: 'read',\n validator: (v: string) => ['read', 'create', 'update'].includes(v),\n },\n initialValues: {\n type: Object as PropType<Record<string, any> | undefined | null>,\n default: undefined,\n },\n additionalMessages: {\n type: Object as PropType<Record<Exclude<string, ValidationMessageKey>, string>>,\n default: () => ({}),\n },\n overrideMessages: {\n type: Object as PropType<Partial<Record<ValidationMessageKey, string>>>,\n default: () => ({}),\n },\n callOnPrevented: {\n type: Array as PropType<Array<ResourcefulRecordPreventedHookHandler>>,\n default: () => [],\n },\n callOnSubmitted: {\n type: Array as PropType<Array<ResourcefulRecordSubmittedHookHandler>>,\n default: () => [],\n },\n callOnSuccess: {\n type: Array as PropType<Array<ResourcefulRecordSuccessHookHandler>>,\n default: () => [],\n },\n callOnFailure: {\n type: Array as PropType<Array<ResourcefulRecordFailureHookHandler>>,\n default: () => [],\n },\n callOnException: {\n type: Array as PropType<Array<ResourcefulRecordExceptionHookHandler>>,\n default: () => [],\n },\n callOnSubmittingStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateSubmittingHookHandler>>,\n default: () => [],\n },\n callOnValidatingStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateValidatingHookHandler>>,\n default: () => [],\n },\n callOnTouchedStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateTouchedHookHandler>>,\n default: () => [],\n },\n callOnDirtyStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateDirtyHookHandler>>,\n default: () => [],\n },\n callOnValidStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateValidHookHandler>>,\n default: () => [],\n },\n callOnPendingStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStatePendingHookHandler>>,\n default: () => [],\n },\n callOnErrorsStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateErrorsHookHandler>>,\n default: () => [],\n },\n callOnErrorBagStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateErrorBagHookHandler>>,\n default: () => [],\n },\n callOnSubmitCountStateChange: {\n type: Array as PropType<Array<ResourcefulRecordChangeStateSubmitCountHookHandler>>,\n default: () => [],\n },\n fieldLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n advanced: {\n type: Object as PropType<ResourcefulRecordAdvancedOptions>,\n default: () => resourcefulRecordAdvancedOptionsDefaults,\n },\n commonFieldOptions: {\n type: Object as PropType<ResourcefulRecordCommonFieldProps>,\n default: () => resourcefulRecordCommonFieldPropsDefaults,\n },\n specificFieldOptions: {\n type: Object as PropType<ResourcefulRecordFieldSpecificProps>,\n default: () => ({}),\n },\n bus: {\n type: Object as PropType<ResourcefulRecordBusConsumer>,\n required: true,\n },\n model: {\n type: Object as PropType<ResourcefulRecordModelSchema>,\n required: true,\n },\n schema: {\n type: Object as JoiSchemaPropType<any>,\n required: true,\n },\n submissionPayloadModifiers: {\n type: Array as PropType<Array<ResourcefulRecordSubmissionMiddlewareFn>>,\n default: () => [],\n },\n submissionHandler: {\n type: Function as PropType<ResourcefulSubmissionHandler>,\n required: true,\n },\n validationOptions: {\n type: Object as PropType<AsyncValidationOptions>,\n default: () => ({ abortEarly: false }),\n },\n fireAlertFn: {\n type: [Function, Object] as unknown as PropType<FireAlertFn | undefined>,\n default: undefined,\n },\n doRefreshChoices: {\n type: Object as PropType<Record<string, () => Promise<REnumFieldLoadedChoice[]>>>,\n default: () => ({}),\n },\n },\n rawResourcefulEmits,\n 'ResourcefulRecordBase'\n )\n\nexport type BaseResourcefulRecordProps = ExtractPublicPropTypesFromFactory<\n typeof makeBaseResourcefulRecordProps\n>\n\nexport type BaseResourcefulRecordInstanceProps = ExtractPropTypes<\n ReturnType<typeof makeBaseResourcefulRecordProps>\n>\n\nexport type ResourcefulRecordInstanceProps = ExtractPropTypes<\n ReturnType<typeof makeResourcefulRecordProps>\n>\n\nconst vCardDefaults = getDefaultsForPropFactory(makeVCardProps as PropFactory<any>)\nexport type VCardPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVCardProps>>\n\nexport type ResourcefulRecordVCardProps = Omit<\n VCardPublicProps,\n 'tag' | 'action' | 'method' | 'onSubmit'\n>\n\nconst rawResourcefulRecordEmits = {\n ...rawResourcefulEmits,\n processing: (progress: ResourcefulHttpProgress, values: Record<string, any>) =>\n isResourcefulRecordProcessingEvent(progress, values),\n}\n\nexport const { makeProps: makeResourcefulRecordProps, emits: resourcefulRecordEmits } =\n propsAndEmitsFactory(\n {\n baseUrl: {\n type: String as PropType<string>,\n required: true,\n },\n metaProgressColor: {\n type: String as PropType<string>,\n default: 'success',\n },\n uid: {\n type: String as PropType<string | undefined | null>,\n default: undefined,\n },\n container: {\n type: Object as PropType<ResourcefulRecordVCardProps>,\n default: () => ({\n ...vCardDefaults,\n width: '100%',\n }),\n },\n controlButtonOptions: {\n type: Object as PropType<ControlButtonProps>,\n default: () => defaultControlButtonProps,\n },\n controlButtonBarOptions: {\n type: Object as PropType<ControlButtonBarOptionsProps>,\n default: () => ({\n ...defaultControlButtonBarOptionsProps,\n gap: 3,\n }),\n },\n routeToIndex: {\n type: Object as PropType<ResourcefulRecordNavOptions | undefined>,\n default: undefined,\n validator: (v: unknown) => undefined === v || resourcefulRecordNavOptionsValidator(v),\n },\n // If both route and callback are provided, route is given priority\n callbackToIndex: {\n type: Function as PropType<ResourcefulRecordCrudActionCallback | undefined>,\n default: undefined,\n },\n indexButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n // while the default is `true`, the button will not show if no route and no callback are defined\n canIndex: {\n type: [Boolean, Function] as PropType<boolean | ActionIsActionableValidator>,\n default: true,\n },\n routeToCreate: {\n type: Object as PropType<ResourcefulRecordNavOptions | undefined>,\n default: undefined,\n validator: (v: unknown) => undefined === v || resourcefulRecordNavOptionsValidator(v),\n },\n // If both route and callback are provided, route is given priority\n callbackToCreate: {\n type: Function as PropType<ResourcefulRecordCrudActionCallback | undefined>,\n default: undefined,\n },\n createButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n // while the default is `true`, the button will not show if no route and no callback are defined\n canCreate: {\n type: [Boolean, Function] as PropType<boolean | ActionIsActionableValidator>,\n default: true,\n },\n routeToRead: {\n type: Object as PropType<ResourcefulRecordRouteOptions | undefined>,\n default: undefined,\n validator: (v: unknown) => undefined === v || resourcefulRecordRouteOptionsValidator(v),\n },\n // If both route and callback are provided, route is given priority\n callbackToRead: {\n type: Function as PropType<ResourcefulRecordCrudInstanceActionCallback | undefined>,\n default: undefined,\n },\n readButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n // while the default is `true`, the button will not show if no route and no callback are defined\n canRead: {\n type: [Boolean, Function] as PropType<boolean | ActionIsActionableValidator>,\n default: true,\n },\n routeToUpdate: {\n type: Object as PropType<ResourcefulRecordRouteOptions | undefined>,\n default: undefined,\n validator: (v: unknown) => undefined === v || resourcefulRecordRouteOptionsValidator(v),\n },\n // If both route and callback are provided, route is given priority\n callbackToUpdate: {\n type: Function as PropType<ResourcefulRecordCrudInstanceActionCallback | undefined>,\n default: undefined,\n },\n updateButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n // while the default is `true`, the button will not show if no route and no callback are defined\n canUpdate: {\n type: [Boolean, Function] as PropType<boolean | ActionIsActionableValidator>,\n default: true,\n },\n routeToDelete: {\n type: Object as PropType<ResourcefulRecordRouteOptions | undefined>,\n default: undefined,\n validator: (v: unknown) => undefined === v || resourcefulRecordRouteOptionsValidator(v),\n },\n // If both route and callback are provided, route is given priority\n callbackToDelete: {\n type: Function as PropType<ResourcefulRecordCrudInstanceActionCallback | undefined>,\n default: undefined,\n },\n deleteButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n // while the default is `true`, the button will not show if no route and no callback are defined\n canDelete: {\n type: [Boolean, Function] as PropType<boolean | ActionIsActionableValidator>,\n default: true,\n },\n actions: {\n type: Array as PropType<\n Array<ResourcefulRecordUrlAction | ResourcefulRecordFunctionAction>\n >,\n default: () => [],\n validator: (v: unknown) => isResourcefulRecordActionArray(v),\n },\n ...omit(makeBaseResourcefulRecordProps(), [\n 'bus',\n 'schema',\n 'model',\n 'submissionPayloadModifiers',\n 'submissionHandler',\n 'validationOptions',\n 'fireAlertFn',\n 'doRefreshChoices',\n ]),\n callOnProcessing: {\n type: Array as PropType<Array<ResourcefulRecordProcessingHookHandler>>,\n default: () => [],\n },\n commitButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n resetButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n refreshButtonOverrides: {\n type: Object as PropType<Partial<ControlButtonOverrideProps>>,\n default: () => ({\n ...defaultControlButtonOverrideProps,\n }),\n },\n bus: {\n type: Object as PropType<ResourcefulRecordBusConsumer | undefined>,\n default: undefined,\n },\n },\n rawResourcefulRecordEmits,\n 'ResourcefulRecord'\n )\n\nexport type ResourcefulRecordProps = ExtractPublicPropTypesFromFactory<\n typeof makeResourcefulRecordProps\n>\n\nexport type ResourcefulRecordEmits = typeof rawResourcefulRecordEmits\n\nexport type ResourcefulRecordHookableEvents = HookableEvents<ResourcefulRecordEmits>\n\nexport type ResourcefulRecordFormEmits = typeof rawResourcefulEmits\n\nexport type ResourcefulRecordFormHookableEvents = HookableEvents<ResourcefulRecordEmits>\n","import { useI18n } from '../ioc'\nimport { Hooks } from '@nhtio/hooks'\nimport { SvgIcon } from '../svg-icon'\nimport { diff } from 'deep-object-diff'\nimport { isObject } from '../common/guards'\nimport { Middleware } from '@nhtio/middleware'\nimport { baseResourcefulEmits } from './props'\nimport { default as dotCtor } from 'dot-object'\nimport { ControlButton } from '../control-button'\nimport { ResourcefulRecordViewMode } from './types'\nimport { validator } from '@nhtio/lucid-resourceful/joi'\nimport { mdiRefresh, mdiFileUndo, mdiContentSave } from '@mdi/js'\nimport { encode, decode } from '@nhtio/lucid-resourceful/encoding'\nimport { debounce, throttle } from '@nhtio/vuetifiable/util/helpers'\nimport { getCamelAndMaybeKebabPropKeysFor } from '../common/factories'\nimport { isResourcefulRecordUrlAction, isResourcefulRecordFunctionAction } from './types'\nimport { computed, h, shallowRef, triggerRef, watch, warn, toValue, nextTick } from 'vue'\nimport {\n stripUndefinedValuesFromObject,\n typeAndFormatToResourcefulFieldType,\n} from '../common/utils'\nimport {\n E_DECODED_STATE_MODEL_INCOMPATIBLE,\n E_FAILED_TO_DECODE_STATE_MODEL,\n E_FAILED_TO_COMPARE_STATE_MODEL_VALUES,\n} from './exceptions'\nimport type { Ref, ComputedRef, VNode, MaybeRef } from 'vue'\nimport type { ResourcefulHttpResponse } from '../services/http'\nimport type { ObjectSchema, Schema, ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type { ControlButtonProps, ControlButtonOverrideProps } from '../control-button/props'\nimport type {\n ControlButtonBarProps,\n ControlButtonBarOptionsProps,\n} from '../control-button-bar/props'\nimport type {\n // BaseResourcefulRecordProps,\n ResourcefulRecordNavOptions,\n ResourcefulRecordRouteOptions,\n ResourcefulRecordEmits,\n ResourcefulRecordFormEmits,\n ResourcefulRecordFormHookableEvents,\n BaseResourcefulRecordInstanceProps,\n ResourcefulRecordInstanceProps,\n} from './props'\nimport type {\n ActionCallback,\n SuccessCallback,\n UndeterminedCallback,\n FailureCallback,\n CompleteCallback,\n ExceptionCallback,\n ResourcefulRecordUrlAction,\n ResourcefulRecordFunctionAction,\n ActionIsActionableValidator,\n ResourceResourcefulRecordResponse,\n ResourcefulRecordCrudActionCallback,\n ResourcefulRecordCrudInstanceActionCallback,\n ResourcefulRecordPreventedHookHandler,\n ResourcefulRecordSubmittedHookHandler,\n ResourcefulRecordSuccessHookHandler,\n ResourcefulRecordFailureHookHandler,\n ResourcefulRecordExceptionHookHandler,\n ResourcefulRecordChangeStateSubmittingHookHandler,\n ResourcefulRecordChangeStateValidatingHookHandler,\n ResourcefulRecordChangeStateTouchedHookHandler,\n ResourcefulRecordChangeStateDirtyHookHandler,\n ResourcefulRecordChangeStateValidHookHandler,\n ResourcefulRecordChangeStatePendingHookHandler,\n ResourcefulRecordChangeStateErrorsHookHandler,\n ResourcefulRecordChangeStateErrorBagHookHandler,\n ResourcefulRecordChangeStateSubmitCountHookHandler,\n ResourcefulSubmissionHandler,\n ResourcefulRecordSubmissionMiddlewareFn,\n ResourcefulRecordModelSchema,\n ResourcefulRecordModelPropertySchema,\n ResourcefulRecordHookHandler,\n} from './types'\n\nconst dot = Object.create(dotCtor)\ndot.keepArray = true\n\nexport const useControlButtonBaseBindings = (\n controlButtonBarOptions: Ref<ControlButtonBarOptionsProps>,\n controlButtonOptions: Ref<ControlButtonProps>,\n isUnactionable: ComputedRef<boolean>\n): ComputedRef<ControlButtonProps> => {\n return computed(\n () =>\n ({\n ...stripUndefinedValuesFromObject({\n color: controlButtonBarOptions.value.overflowMenuButtonOptions?.color,\n density: controlButtonBarOptions.value.overflowMenuButtonOptions?.density,\n size: controlButtonBarOptions.value.overflowMenuButtonOptions?.size,\n }),\n ...stripUndefinedValuesFromObject({\n ...controlButtonOptions.value,\n }),\n ...stripUndefinedValuesFromObject(\n isUnactionable.value\n ? {\n state: {\n disabled: isUnactionable.value,\n },\n }\n : {}\n ),\n inOverflowMenu: true,\n }) satisfies ControlButtonProps\n )\n}\n\nconst evaluateActionIsActionable = (\n mode: ResourcefulRecordViewMode,\n record: ResourceResourcefulRecordResponse | Record<string, any>,\n can: boolean | ActionIsActionableValidator\n): boolean =>\n useEvaluateActionIsActionable(\n computed(() => mode),\n computed(() => record),\n computed(() => can)\n ).value\n\nexport const useEvaluateActionIsActionable = (\n mode: Ref<ResourcefulRecordViewMode>,\n record: Ref<ResourceResourcefulRecordResponse | Record<string, any>>,\n can: Ref<boolean | ActionIsActionableValidator>\n): ComputedRef<boolean> =>\n computed(() => {\n if (typeof can.value === 'boolean') {\n if (!can.value) return false\n } else if (typeof can.value === 'function') {\n if ('create' === mode.value && !can.value({} as any)) {\n return false\n } else if (!can.value(record.value)) {\n return false\n }\n }\n return true\n })\n\nexport const useCrudActionButtonBindings = (\n record: Ref<ResourceResourcefulRecordResponse | Record<string, any>>,\n mode: Ref<ResourcefulRecordViewMode>,\n route:\n | Ref<ResourcefulRecordNavOptions | undefined>\n | Ref<ResourcefulRecordRouteOptions | undefined>,\n callback:\n | Ref<ResourcefulRecordCrudActionCallback | undefined>\n | Ref<ResourcefulRecordCrudInstanceActionCallback | undefined>,\n can: Ref<boolean | ActionIsActionableValidator>,\n controlButtonDefaults: Partial<ControlButtonOverrideProps>,\n controlButtonOverrides: Ref<Partial<ControlButtonOverrideProps>>,\n controlButtonBaseBindings: ComputedRef<ControlButtonProps>\n): ComputedRef<ControlButtonProps | undefined> => {\n return computed(() => {\n if (!route.value && !callback.value) return undefined\n const isActionable = useEvaluateActionIsActionable(mode, record, can)\n if (!isActionable.value) return undefined\n const ret: ControlButtonProps = {\n ...controlButtonBaseBindings.value,\n ...stripUndefinedValuesFromObject(controlButtonDefaults),\n ...controlButtonOverrides.value,\n ...(route.value ? { to: route.value } : callback.value ? { onClick: callback.value } : {}),\n }\n return ret\n })\n}\n\nconst processActionForRecord = async (\n record: ResourceResourcefulRecordResponse,\n action: ActionCallback,\n onSuccess: SuccessCallback = () => {},\n onUndetermined: UndeterminedCallback = () => {},\n onFailure: FailureCallback = () => {},\n onComplete: CompleteCallback = () => {},\n onException: ExceptionCallback = () => {}\n): Promise<void> => {\n try {\n const result = await action(record)\n if (result === true) {\n onSuccess(record)\n } else if (result === false) {\n onFailure(record)\n } else {\n onUndetermined(record)\n }\n onComplete(record)\n } catch (e) {\n if ('function' === typeof onException) {\n onException(record, e, onComplete)\n }\n }\n}\n\nexport const useAdditionalActionButtonBindings = (\n record: Ref<ResourceResourcefulRecordResponse | Record<string, any>>,\n mode: Ref<ResourcefulRecordViewMode>,\n controlButtonBaseBindings: ComputedRef<ControlButtonProps>,\n actions: Ref<Array<ResourcefulRecordUrlAction | ResourcefulRecordFunctionAction>>\n): ComputedRef<ControlButtonProps[]> => {\n return computed(\n () =>\n Array.from(actions.value)\n .map((action) => {\n const isActionable = evaluateActionIsActionable(\n mode.value,\n record.value,\n action.actionable ?? true\n )\n if (!isActionable) return undefined\n if (isResourcefulRecordUrlAction(action)) {\n return {\n ...controlButtonBaseBindings.value,\n prependIcon: action.icon,\n cta: action.cta,\n to: 'function' === typeof action.url ? action.url(record.value) : action.url,\n target: action.target,\n } satisfies ControlButtonProps\n } else if (isResourcefulRecordFunctionAction(action)) {\n return {\n ...controlButtonBaseBindings.value,\n prependIcon: action.icon,\n cta: action.cta,\n onClick: () =>\n processActionForRecord(\n record.value as ResourceResourcefulRecordResponse,\n action.action,\n action.onSuccess,\n action.onUndetermined,\n action.onFailure,\n action.onComplete,\n action.onException\n ),\n } satisfies ControlButtonProps & { onClick: () => Promise<void> }\n } else {\n return undefined\n }\n })\n .filter((v) => v !== undefined) satisfies ControlButtonProps[]\n )\n}\n\nexport const useControlBarButtonBindings = (\n indexButtonBindings: ComputedRef<ControlButtonProps | undefined>,\n createButtonBindings: ComputedRef<ControlButtonProps | undefined>,\n readButtonBindings: ComputedRef<ControlButtonProps | undefined>,\n updateButtonBindings: ComputedRef<ControlButtonProps | undefined>,\n deleteButtonBindings: ComputedRef<ControlButtonProps | undefined>,\n additionalButtonBindings: ComputedRef<ControlButtonProps[]>\n): ComputedRef<VNode[]> =>\n computed<VNode[]>(() =>\n [\n indexButtonBindings.value,\n createButtonBindings.value,\n readButtonBindings.value,\n updateButtonBindings.value,\n deleteButtonBindings.value,\n ...additionalButtonBindings.value,\n ]\n .filter((b): b is ControlButtonProps => b !== undefined)\n .map((bindings) => h(ControlButton, bindings))\n )\n\nexport const useControlBarBaseBindings = (\n controlButtonBarOptions: Ref<ControlButtonBarOptionsProps>,\n controlButtonOptions: Ref<ControlButtonProps>\n): ComputedRef<Omit<ControlButtonBarProps, 'buttons'>> =>\n computed(\n () =>\n ({\n ...controlButtonBarOptions.value,\n overflowMenuButtonOptions: stripUndefinedValuesFromObject({\n ...stripUndefinedValuesFromObject({\n color: controlButtonOptions.value.color,\n density: controlButtonOptions.value.density,\n size: controlButtonOptions.value.size,\n }),\n ...stripUndefinedValuesFromObject(\n controlButtonBarOptions.value.overflowMenuButtonOptions ?? {}\n ),\n }),\n }) satisfies Omit<ControlButtonBarProps, 'buttons'>\n )\n\nexport const useResourcefulRecordFloatingControls = (\n mode: Ref<ResourcefulRecordViewMode>,\n controlButtonBaseBindings: ComputedRef<ControlButtonProps>,\n commitButtonOverrides: Ref<Partial<ControlButtonOverrideProps>>,\n refreshButtonOverrides: Ref<Partial<ControlButtonOverrideProps>>,\n resetButtonOverrides: Ref<Partial<ControlButtonOverrideProps>>,\n metaLoading: ComputedRef<boolean>,\n recordLoading: ComputedRef<boolean>,\n commitLoading: ComputedRef<boolean>,\n inErrorState: ComputedRef<boolean>,\n doFormReset: () => void | Promise<void>,\n doRecordRefresh: () => void | Promise<void>,\n doFormSubmit: () => void | Promise<void>\n): ComputedRef<VNode[]> => {\n const t = useI18n()\n const commitButtonBindings = computed<\n ControlButtonProps & { onClick: () => void | Promise<void> }\n >(() => ({\n ...controlButtonBaseBindings.value,\n ...stripUndefinedValuesFromObject({\n cta: t('general.save'),\n prependIcon: () => h(SvgIcon, { d: mdiContentSave }),\n }),\n ...commitButtonOverrides.value,\n state: {\n loading: commitLoading.value,\n disabled: metaLoading.value || recordLoading.value,\n },\n onClick: doFormSubmit,\n }))\n const refreshButtonBindings = computed<\n ControlButtonProps & { onClick: () => void | Promise<void> }\n >(() => ({\n ...controlButtonBaseBindings.value,\n ...stripUndefinedValuesFromObject({\n cta: t('general.refresh'),\n prependIcon: () => h(SvgIcon, { d: mdiRefresh }),\n }),\n ...refreshButtonOverrides.value,\n state: {\n loading: recordLoading.value,\n disabled: metaLoading.value || commitLoading.value,\n },\n onClick: doRecordRefresh,\n }))\n const resetButtonBindings = computed<\n ControlButtonProps & { onClick: () => void | Promise<void> }\n >(() => ({\n ...controlButtonBaseBindings.value,\n ...stripUndefinedValuesFromObject({\n cta: t('general.reset'),\n prependIcon: () => h(SvgIcon, { d: mdiFileUndo }),\n }),\n ...resetButtonOverrides.value,\n state: {\n loading: recordLoading.value,\n disabled: metaLoading.value || commitLoading.value,\n },\n onClick: doFormReset,\n }))\n return computed<VNode[]>(() =>\n mode.value === 'read' || inErrorState.value\n ? [h(ControlButton, refreshButtonBindings.value)]\n : [\n h(ControlButton, resetButtonBindings.value),\n h(ControlButton, {\n ...commitButtonBindings.value,\n class: ['ms-2'],\n }),\n ]\n )\n}\n\nexport type UseResourcefulPassthroughHookOptions<P extends any[]> = {\n // the hook to run if nothing is set to run for the event\n fallback?: (...args: P) => void | Promise<void>\n // if debounceMs is set, the hook will be debounced by the given milliseconds\n debounceMs?: number\n // if throttleMs is set, the hook will be throttled by the given milliseconds\n throttleMs?: number\n // if immediate is not set, the hook will be run using Vue's `nextTick`\n // if immediate is false, the hook will be run in the current tick\n // if immediate is true, the hook will be run using queueMicrotask\n immediate?: boolean\n}\n\nexport const useResourcefulPassthroughHook = <\n E extends Extract<keyof ResourcefulRecordEmits, string>,\n P extends any[] = Parameters<ResourcefulRecordEmits[E]>,\n>(\n event: E,\n callOnKey: Extract<keyof ResourcefulRecordInstanceProps, `callOn${string}`>,\n emit: (...args: any[]) => void,\n props: ResourcefulRecordInstanceProps,\n attrs: Record<string, unknown>,\n options: UseResourcefulPassthroughHookOptions<P> = {}\n) => {\n if (\n 'number' === typeof options.debounceMs &&\n 'number' === typeof options.throttleMs &&\n options.debounceMs > 0 &&\n options.throttleMs > 0\n ) {\n warn('useResourcefulPassthroughHook: debounceMs and throttleMs are both set.')\n }\n const { camel, kebab } = getCamelAndMaybeKebabPropKeysFor(event) as {\n camel: keyof ResourcefulRecordInstanceProps\n kebab: keyof ResourcefulRecordInstanceProps\n }\n const doHook = async (...args: P) => {\n // if the `on${event}` props are set to functions, emit as normal\n if (\n 'function' === typeof props[camel] ||\n 'function' === typeof props[kebab] ||\n 'function' === typeof attrs[camel] ||\n 'function' === typeof attrs[kebab]\n ) {\n emit(event, ...args)\n return\n }\n // if there are `callOn${event}` hooks, do not run the fallback\n const callOns: ResourcefulRecordHookHandler<E> = props[callOnKey] as any\n if (Array.isArray(callOns) && callOns.length > 0) {\n return\n }\n const fallback = options.fallback ?? (() => {})\n await fallback(...args)\n }\n let callHook = doHook\n if ('number' === typeof options.debounceMs && options.debounceMs > 0) {\n callHook = debounce(callHook, options.debounceMs) as unknown as typeof doHook\n }\n if ('number' === typeof options.throttleMs && options.throttleMs > 0) {\n callHook = throttle(callHook, options.throttleMs) as unknown as typeof doHook\n }\n switch (true) {\n case 'undefined' === typeof options.immediate:\n callHook = async (...args: P) => {\n await nextTick()\n return await doHook(...args)\n }\n break\n\n case options.immediate:\n callHook = async (...args: P) => {\n return await new Promise<void>((rslv) => {\n queueMicrotask(() => doHook(...args).then(rslv))\n })\n }\n break\n }\n return callHook\n}\n\nconst stateToFormStateModelValue = (\n state: string | undefined | null,\n onError: ResourcefulRecordHooks['onError'] = async () => {}\n): Record<string, any> | undefined | null => {\n if (state === undefined || state === null) {\n return state\n }\n try {\n const decoded = decode(state)\n if (!isObject(decoded)) {\n warn(`ResourcefulRecordForm: Decoded form state model value is not an object.`, decoded)\n onError(new E_DECODED_STATE_MODEL_INCOMPATIBLE())\n return undefined\n }\n return decoded as Record<string, any>\n } catch (e) {\n warn(\n `ResourcefulRecordForm: Failed to decode form state model value from state string \"${state}\".`,\n e\n )\n onError(\n new E_FAILED_TO_DECODE_STATE_MODEL([state], { cause: e instanceof Error ? e : undefined })\n )\n return undefined\n }\n}\n\nconst getFormValueUpdates = (\n formStateModelValue: Record<string, any> | undefined | null,\n currentFormValues: Record<string, any> | undefined | null\n) => {\n const is = isObject(formStateModelValue) ? formStateModelValue : {}\n const was = isObject(currentFormValues) ? currentFormValues : {}\n const differences = diff(was, is)\n return dot.dot(differences)\n}\n\nconst isSame = (\n a: any,\n b: any,\n onError: ResourcefulRecordHooks['onError'] = async () => {}\n): boolean => {\n try {\n return encode(a) === encode(b)\n } catch (e) {\n warn('ResourcefulRecordForm: Failed to compare form state model values.', e)\n onError(\n new E_FAILED_TO_COMPARE_STATE_MODEL_VALUES(undefined, {\n cause: e instanceof Error ? e : undefined,\n })\n )\n return true\n }\n}\n\nexport const useResourcefulRecordFormState = (\n state: Ref<string | undefined | null>,\n onState: (formState: string | null | undefined) => Promise<void>,\n onUpdateState: (formState: string | null | undefined) => Promise<void>,\n formValues: Ref<Record<string, any> | undefined | null>,\n setValues: (values: any, shouldValidate?: boolean) => void,\n onError: ResourcefulRecordHooks['onError'] = async () => {}\n) => {\n // the form state model value should start as the decoded state value\n const formStateModelValue = shallowRef<Record<string, any> | undefined | null>(\n stateToFormStateModelValue(state.value, onError)\n )\n const onChangeToState = debounce(\n (is: string | undefined | null, was: string | undefined | null) => {\n if (isSame(is, was, onError)) return\n formStateModelValue.value = stateToFormStateModelValue(is, onError)\n triggerRef(formStateModelValue)\n const toUpdate = getFormValueUpdates(formStateModelValue.value, formValues.value)\n if (Object.keys(toUpdate).length > 0) {\n setValues(toUpdate, false)\n }\n },\n 100\n )\n const onChangeToFormValues = debounce(\n (is: Record<string, any> | undefined | null, was: Record<string, any> | undefined | null) => {\n if (isSame(is, was, onError)) return\n formStateModelValue.value = is\n triggerRef(formStateModelValue)\n const encoded: string | null | undefined = isObject(is)\n ? (encode(is as any) as string)\n : (is as undefined | null)\n onState(encoded)\n onUpdateState(encoded)\n },\n 100\n )\n watch(state, onChangeToState, { immediate: true })\n watch(formValues, onChangeToFormValues, { immediate: true, deep: true })\n}\n\nexport const useResourcefulRecordFormHooks = (\n _props: BaseResourcefulRecordInstanceProps,\n emit: (event: keyof ResourcefulRecordEmits, ...args: any[]) => void,\n callOnPrevented: Ref<Array<ResourcefulRecordPreventedHookHandler>>,\n callOnSubmitted: Ref<Array<ResourcefulRecordSubmittedHookHandler>>,\n callOnSuccess: Ref<Array<ResourcefulRecordSuccessHookHandler>>,\n callOnFailure: Ref<Array<ResourcefulRecordFailureHookHandler>>,\n callOnException: Ref<Array<ResourcefulRecordExceptionHookHandler>>,\n callOnSubmittingStateChange: Ref<Array<ResourcefulRecordChangeStateSubmittingHookHandler>>,\n callOnValidatingStateChange: Ref<Array<ResourcefulRecordChangeStateValidatingHookHandler>>,\n callOnTouchedStateChange: Ref<Array<ResourcefulRecordChangeStateTouchedHookHandler>>,\n callOnDirtyStateChange: Ref<Array<ResourcefulRecordChangeStateDirtyHookHandler>>,\n callOnValidStateChange: Ref<Array<ResourcefulRecordChangeStateValidHookHandler>>,\n callOnPendingStateChange: Ref<Array<ResourcefulRecordChangeStatePendingHookHandler>>,\n callOnErrorsStateChange: Ref<Array<ResourcefulRecordChangeStateErrorsHookHandler>>,\n callOnErrorBagStateChange: Ref<Array<ResourcefulRecordChangeStateErrorBagHookHandler>>,\n callOnSubmitCountStateChange: Ref<Array<ResourcefulRecordChangeStateSubmitCountHookHandler>>\n) => {\n const hooks = new Hooks<ResourcefulRecordFormHookableEvents>()\n Object.entries(baseResourcefulEmits).forEach(([event]) => {\n const e: keyof ResourcefulRecordFormEmits = event as keyof ResourcefulRecordFormEmits\n function doEmit(...args: any[]) {\n emit(e, ...args)\n }\n hooks.add(e, doEmit)\n })\n watch(\n callOnPrevented,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('prevented', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('prevented', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnSubmitted,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('submitted', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('submitted', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnSuccess,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('success', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('success', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnFailure,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('failure', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('failure', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnException,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('exception', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('exception', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnSubmittingStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:submitting', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:submitting', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnValidatingStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:validating', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:validating', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnTouchedStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:touched', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:touched', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnDirtyStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:dirty', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:dirty', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnValidStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:valid', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:valid', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnPendingStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:pending', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:pending', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnErrorsStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:errors', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:errors', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnErrorBagStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:errorBag', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:errorBag', tuple)\n })\n }\n },\n { immediate: true }\n )\n watch(\n callOnSubmitCountStateChange,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((tuple) => {\n hooks.remove('state:submitCount', tuple)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((tuple) => {\n hooks.add('state:submitCount', tuple)\n })\n }\n },\n { immediate: true }\n )\n const onState = async (formState: string | null | undefined) => {\n const runner = hooks.runner('state')\n try {\n await runner.run(formState)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, formState)\n }\n }\n const onUpdateState = async (formState: string | null | undefined) => {\n const runner = hooks.runner('update:state')\n try {\n await runner.run(formState)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, formState)\n }\n }\n const onError = async (error: unknown) => {\n const runner = hooks.runner('error')\n try {\n await runner.run(error)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, error)\n }\n }\n const onPrevented = async (values: Record<string, any>, error: ValidationError) => {\n const runner = hooks.runner('prevented')\n try {\n await runner.run(values, error)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, values, error)\n }\n }\n const onSubmitted = async (values: Record<string, any>) => {\n const runner = hooks.runner('submitted')\n try {\n await runner.run(values)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, values)\n }\n }\n const onSuccess = async (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n ) => {\n const runner = hooks.runner('success')\n try {\n await runner.run(response, values)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, response, values)\n }\n }\n const onFailure = async (response: ResourcefulHttpResponse, values: Record<string, any>) => {\n const runner = hooks.runner('failure')\n try {\n await runner.run(response, values)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, response, values)\n }\n }\n const onException = async (exception: unknown) => {\n const runner = hooks.runner('exception')\n try {\n await runner.run(exception)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, exception)\n }\n }\n const onStateSubmitting = async (is: boolean) => {\n const runner = hooks.runner('state:submitting')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStateValidating = async (is: boolean) => {\n const runner = hooks.runner('state:validating')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStateTouched = async (is: boolean) => {\n const runner = hooks.runner('state:touched')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStateDirty = async (is: boolean) => {\n const runner = hooks.runner('state:dirty')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStateValid = async (is: boolean) => {\n const runner = hooks.runner('state:valid')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStatePending = async (is: boolean) => {\n const runner = hooks.runner('state:pending')\n try {\n await runner.run(is)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, is)\n }\n }\n const onStateErrors = async (errors: Record<string, string | undefined>) => {\n const runner = hooks.runner('state:errors')\n try {\n await runner.run(errors)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, errors)\n }\n }\n const onStateErrorBag = async (errors: Partial<Record<string, string[]>>) => {\n const runner = hooks.runner('state:errorBag')\n try {\n await runner.run(errors)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, errors)\n }\n }\n const onStateSubmitCount = async (count: number) => {\n const runner = hooks.runner('state:submitCount')\n try {\n await runner.run(count)\n } catch (e) {\n const err = e instanceof Error ? e : null\n await runner.cleanup(err, count)\n }\n }\n return {\n onState,\n onUpdateState,\n onError,\n onPrevented,\n onSubmitted,\n onSuccess,\n onFailure,\n onException,\n onStateSubmitting,\n onStateValidating,\n onStateTouched,\n onStateDirty,\n onStateValid,\n onStatePending,\n onStateErrors,\n onStateErrorBag,\n onStateSubmitCount,\n }\n}\n\nexport type ResourcefulRecordHooks = ReturnType<typeof useResourcefulRecordFormHooks>\n\nexport const useResourcefulRecordSubmitHandler = (\n submissionPayloadModifiers: Ref<Array<ResourcefulRecordSubmissionMiddlewareFn>>,\n submissionHandler: Ref<ResourcefulSubmissionHandler>,\n onSuccess: ResourcefulRecordHooks['onSuccess'],\n onFailure: ResourcefulRecordHooks['onFailure'],\n onException: ResourcefulRecordHooks['onException'],\n onSubmitted: ResourcefulRecordHooks['onSubmitted']\n) => {\n const middleware = new Middleware<ResourcefulRecordSubmissionMiddlewareFn>()\n watch(\n submissionPayloadModifiers,\n (is, was) => {\n if (Array.isArray(was)) {\n was.forEach((mw) => {\n middleware.remove(mw)\n })\n }\n if (Array.isArray(is)) {\n is.forEach((mw) => {\n middleware.add(mw)\n })\n }\n },\n { immediate: true }\n )\n const handleSubmit = async (values: any) => {\n const ret = await middleware\n .runner()\n .errorHandler((err: unknown) => onException(err))\n .finalHandler(async () => submissionHandler.value(values, onSuccess, onFailure))\n .run(async (fn, next) => fn(values, next))\n onSubmitted(values)\n return ret\n }\n return handleSubmit\n}\n\nconst resourcefulRecordModelPropertySchemaDefaultValue = (\n schema: ResourcefulRecordModelPropertySchema\n) => {\n if ('default' in schema) {\n return schema.default\n }\n const fieldType = typeAndFormatToResourcefulFieldType(schema.type, schema.format)\n switch (fieldType) {\n case 'string':\n return ''\n case 'date':\n case 'dateTime':\n case 'binary':\n case 'number':\n case 'integer':\n case 'bigint':\n case 'unsignedInteger':\n case 'boolean':\n return null\n default:\n return undefined\n }\n}\n\nexport const useResourcefulRecordModelSchemaDefaultInitialValues = (\n model: MaybeRef<ResourcefulRecordModelSchema>\n) => {\n const resolvedModelRef = computed(() => toValue(model))\n return computed(() =>\n Object.assign(\n {},\n ...Object.entries(resolvedModelRef.value).map(([key, schema]) => ({\n [key]: resourcefulRecordModelPropertySchemaDefaultValue(schema),\n }))\n )\n )\n}\n\nexport const fixFormSchemaForEnums = (\n initial: Ref<ObjectSchema>,\n model: Ref<ResourcefulRecordModelSchema>\n): ObjectSchema => {\n const needsFix = Object.values(model.value).some((schema) => {\n return (\n ('x-resourceful-relationship' in schema && schema['x-resourceful-relationship']) ||\n ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices']))\n )\n })\n if (!needsFix) {\n return initial.value\n }\n const keys =\n initial.value &&\n '$_terms' in initial.value &&\n initial.value.$_terms.keys &&\n Array.isArray(initial.value.$_terms.keys)\n ? initial.value.$_terms.keys.map(({ key }: { key: string; schema: Schema }) => key)\n : []\n return validator.object(\n Object.fromEntries(\n keys.map((key) => {\n const extracted = initial.value.extract(key)\n if (!extracted) {\n return [key, validator.any()]\n }\n const schema = model.value[key]\n if (!schema) {\n return [key, extracted]\n }\n if (schema['x-resourceful-relationship']) {\n if (Array.isArray(schema['x-resourceful-relationship'].choices)) {\n const opts = [...schema['x-resourceful-relationship'].choices.map((c) => c.value)]\n if (schema.nullable === true) {\n opts.unshift(null)\n }\n return [\n key,\n validator\n .any()\n .valid(...opts)\n .label(schema['x-resourceful-relationship'].title || key)\n .presence(schema.nullable === true ? 'optional' : 'required'),\n ]\n } else {\n if (schema.nullable !== true) {\n return [\n key,\n validator\n .any()\n .invalid(null, '')\n .label(schema['x-resourceful-relationship'].title || key)\n .required(),\n ]\n }\n return [\n key,\n validator\n .any()\n .label(schema['x-resourceful-relationship'].title || key)\n .presence(schema.nullable === true ? 'optional' : 'required'),\n ]\n }\n }\n if ('x-resourceful-choices' in schema && Array.isArray(schema['x-resourceful-choices'])) {\n const opts = [...schema['x-resourceful-choices'].map((c) => c.value)]\n if (schema.nullable === true) {\n opts.unshift(null)\n }\n return [key, validator.any().valid(...opts)]\n }\n return [key, extracted]\n })\n )\n )\n}\n\nexport const fixFieldLabelsForEnums = (\n initial: Ref<Record<string, string>>,\n model: Ref<ResourcefulRecordModelSchema>\n): Record<string, string> => {\n return stripUndefinedValuesFromObject(\n Object.fromEntries(\n Object.entries(model.value).map(([key, schema]) => {\n if (initial.value[key]) {\n return [key, initial.value[key]]\n }\n if ('x-resourceful-relationship' in schema && schema['x-resourceful-relationship']) {\n return [key, schema['x-resourceful-relationship'].title || key]\n }\n return [key, undefined]\n })\n )\n ) as Record<string, string>\n}\n","import { useDefaults } from 'vuetify'\nimport { DevErrorAlert } from '../fields/common'\nimport { useScopedDisplay } from '../ux/display'\nimport { useValidation } from '../ux/validation'\nimport { E_FORM_NOT_RENDERED } from './exceptions'\nimport { VSheet } from 'vuetify/components/VSheet'\nimport { isResourcefulRecordBusConsumer } from './types'\nimport { useRender } from '@nhtio/vuetifiable/util/useRender'\nimport { makeBaseResourcefulRecordProps, baseResourcefulEmits } from './props'\nimport { getCurrentInstanceName } from '@nhtio/vuetifiable/util/getCurrentInstance'\nimport { defineComponent, h, toRefs, computed, ref, watch, provide, inject, nextTick } from 'vue'\nimport {\n ResourcefulRecordScopedDisplaySymbol,\n ResourcefulRecordFormScopedDisplaySymbol,\n} from '../symbols'\nimport {\n fixFormSchemaForEnums,\n fixFieldLabelsForEnums,\n useResourcefulRecordFormState,\n useResourcefulRecordFormHooks,\n useResourcefulRecordSubmitHandler,\n useResourcefulRecordModelSchemaDefaultInitialValues,\n} from './utils'\nimport type { FireAlertFn } from '../ux/alert'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type {\n ResourcefulRecordFormComponentSlots,\n ResourcefulRecordFormWithValidationDefaultSlotProps,\n} from './types'\n\nexport const ResourcefulRecordForm = defineComponent({\n name: 'ResourcefulRecordForm',\n props: makeBaseResourcefulRecordProps(),\n emits: baseResourcefulEmits,\n slots: Object as ResourcefulRecordFormComponentSlots,\n setup(props, { slots, emit }) {\n const formRef = ref<VSheet | null>(null)\n const scopedDisplay = inject(ResourcefulRecordScopedDisplaySymbol) || useScopedDisplay(formRef)\n provide(ResourcefulRecordFormScopedDisplaySymbol, scopedDisplay)\n const {\n state,\n mode,\n initialValues,\n additionalMessages,\n overrideMessages,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange,\n fieldLabels: initialFieldLabels,\n advanced,\n specificFieldOptions,\n bus,\n schema: initialSchema,\n model,\n submissionPayloadModifiers,\n submissionHandler,\n validationOptions,\n fireAlertFn,\n doRefreshChoices,\n } = toRefs(props)\n const schema = computed(() => fixFormSchemaForEnums(initialSchema, model))\n const fieldLabels = computed(() => fixFieldLabelsForEnums(initialFieldLabels, model))\n const defaultCommonFieldOptions = useDefaults(\n props.commonFieldOptions,\n 'ResourcefulRecordFormField'\n )\n const commonFieldOptions = computed(() => ({\n ...defaultCommonFieldOptions,\n density: scopedDisplay.xs\n ? ('compact' as const)\n : scopedDisplay.lgAndUp\n ? ('default' as const)\n : ('comfortable' as const),\n }))\n const fire: FireAlertFn = (...args) =>\n fireAlertFn.value\n ? fireAlertFn.value(...args)\n : Promise.resolve({\n isConfirmed: false,\n isDenied: false,\n isCanceled: true,\n value: null,\n })\n const debug = computed(() => advanced.value?.debug || false)\n const {\n onState,\n onUpdateState,\n onError,\n onPrevented,\n onSubmitted,\n onSuccess,\n onFailure,\n // NOTE: onException specifically handles errors during submission middleware chain processing\n onException,\n onStateSubmitting,\n onStateValidating,\n onStateTouched,\n onStateDirty,\n onStateValid,\n onStatePending,\n onStateErrors,\n onStateErrorBag,\n onStateSubmitCount,\n } = useResourcefulRecordFormHooks(\n props,\n emit as any,\n callOnPrevented,\n callOnSubmitted,\n callOnSuccess,\n callOnFailure,\n callOnException,\n callOnSubmittingStateChange,\n callOnValidatingStateChange,\n callOnTouchedStateChange,\n callOnDirtyStateChange,\n callOnValidStateChange,\n callOnPendingStateChange,\n callOnErrorsStateChange,\n callOnErrorBagStateChange,\n callOnSubmitCountStateChange\n )\n const handleSubmit = useResourcefulRecordSubmitHandler(\n submissionPayloadModifiers,\n submissionHandler,\n onSuccess,\n onFailure,\n onException,\n onSubmitted\n )\n const defaultInitialValuesFromModel = useResourcefulRecordModelSchemaDefaultInitialValues(model)\n const computedInitialValues = computed(() =>\n Object.fromEntries(\n Object.entries({\n ...defaultInitialValuesFromModel.value,\n ...(initialValues.value || {}),\n }).filter(([prop]) => {\n const propSchema = model.value[prop]\n if (!propSchema) return false\n switch (mode.value) {\n case 'create':\n return (\n !propSchema['x-resourceful-autocreated'] && !propSchema['x-resourceful-primary-key']\n )\n\n case 'update':\n return (\n !propSchema['x-resourceful-autoupdated'] && !propSchema['x-resourceful-immutable']\n )\n default:\n return true\n }\n })\n )\n )\n const {\n validationSchema,\n formErrors,\n formErrorBag,\n formIsSubmitting,\n formIsValidating,\n formIsTouched,\n formIsDirty,\n formIsValid,\n formIsPending,\n formSubmitCount,\n formValues,\n doFormSubmit,\n doResetForm: originalDoResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n formFieldBindings,\n formBindings,\n useField,\n forceUpdateSchema,\n forceUpdateInitialValues,\n } = useValidation(\n schema,\n computedInitialValues,\n handleSubmit,\n additionalMessages,\n overrideMessages,\n validationOptions,\n getCurrentInstanceName() || 'ResourcefulRecordForm',\n debug,\n onPrevented as (values: unknown, error: ValidationError) => void | Promise<void>,\n fieldLabels,\n commonFieldOptions,\n specificFieldOptions\n )\n const doResetForm = () => {\n originalDoResetForm(\n {\n errors: {},\n touched: Object.fromEntries(\n Object.keys(computedInitialValues.value).map((key) => [key, false])\n ),\n submitCount: 0,\n },\n { force: true }\n )\n nextTick(() => setTouched(false))\n }\n const slotPropBindings = computed<ResourcefulRecordFormWithValidationDefaultSlotProps>(\n () =>\n ({\n formErrors,\n formErrorBag,\n formIsSubmitting,\n formIsValidating,\n formIsTouched,\n formIsDirty,\n formIsValid,\n formIsPending,\n formSubmitCount,\n doResetForm,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n formFieldBindings,\n useField,\n formValues,\n doRefreshChoices: doRefreshChoices.value,\n }) satisfies ResourcefulRecordFormWithValidationDefaultSlotProps\n )\n useResourcefulRecordFormState(state, onState, onUpdateState, formValues, setValues)\n watch(\n bus,\n (is: unknown, was: unknown) => {\n if (isResourcefulRecordBusConsumer(was)) {\n was.off('doFormSubmit', doFormSubmit)\n was.off('doResetForm', doResetForm)\n was.off('setFieldValue', setFieldValue)\n was.off('setValues', setValues)\n was.off('setFieldTouched', setFieldTouched)\n was.off('setTouched', setTouched)\n was.off('validate', validate)\n was.off('validateField', validateField)\n was.off('forceUpdateSchema', forceUpdateSchema)\n was.off('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n if (isResourcefulRecordBusConsumer(is)) {\n is.on('doFormSubmit', doFormSubmit)\n is.on('doResetForm', doResetForm)\n is.on('setFieldValue', setFieldValue)\n is.on('setValues', setValues)\n is.on('setFieldTouched', setFieldTouched)\n is.on('setTouched', setTouched)\n is.on('validate', validate)\n is.on('validateField', validateField)\n is.on('forceUpdateSchema', forceUpdateSchema)\n is.on('forceUpdateInitialValues', forceUpdateInitialValues)\n }\n },\n { immediate: true }\n )\n const doIfFormReady = (callback: (component: VSheet, form: HTMLFormElement) => void) => {\n if (formRef.value && formRef.value.$el) {\n const el = formRef.value.$el as HTMLFormElement\n callback(formRef.value, el)\n } else {\n onError(new E_FORM_NOT_RENDERED())\n }\n }\n useRender(() =>\n h(VSheet, { ref: formRef, tag: 'form', color: 'transparent', ...formBindings.value }, () => [\n h('input', {\n 'style': { display: 'none' },\n 'type': 'submit',\n 'aria-hidden': 'true',\n 'tabindex': -1,\n }),\n slots.default\n ? slots.default(\n slotPropBindings.value,\n scopedDisplay,\n model.value,\n schema.value,\n mode.value,\n fire,\n doRefreshChoices.value\n )\n : h(DevErrorAlert),\n ])\n )\n const submit = () => {\n doIfFormReady((_, form) => {\n form.requestSubmit()\n })\n }\n const reset = () => {\n doIfFormReady((_, form) => {\n form.reset()\n })\n }\n watch(formErrors, onStateErrors)\n watch(formErrorBag, onStateErrorBag)\n watch(formIsSubmitting, onStateSubmitting)\n watch(formIsValidating, onStateValidating)\n watch(formIsTouched, onStateTouched)\n watch(formIsDirty, onStateDirty)\n watch(formIsValid, onStateValid)\n watch(formIsPending, onStatePending)\n watch(formSubmitCount, onStateSubmitCount)\n return {\n formErrors,\n formErrorBag,\n formIsSubmitting,\n formIsValidating,\n formIsTouched,\n formIsDirty,\n formIsValid,\n formIsPending,\n formSubmitCount,\n formValues,\n submit,\n reset,\n setFieldValue,\n setValues,\n setFieldTouched,\n setTouched,\n validate,\n validateField,\n validationSchema,\n }\n },\n})\n\nexport type ResourcefulRecordForm = InstanceType<typeof ResourcefulRecordForm> &\n ComponentPublicInstance\n"],"names":["TypedEventEmitter","joi"],"mappings":"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"}
|
package/guards-DaiwJBYO.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guards-DaiwJBYO.mjs","sources":["../src/private/resourceful-record/guards.ts"],"sourcesContent":["import { isObject } from '../common/guards'\nimport { joi, ValidationError } from '@nhtio/lucid-resourceful/joi'\nimport type { Schema } from '@nhtio/lucid-resourceful/joi'\nimport type { ResourceResourcefulRecordResponse } from './types'\nimport type { ResourcefulHttpResponse, ResourcefulHttpProgress } from '../services/http'\n\nconst passesSchema = (schema: Schema, value: unknown): boolean => {\n const { error } = schema.validate(value, { abortEarly: true })\n return !error\n}\n\nexport const isValidationError = (value: unknown): value is ValidationError => {\n const schema = joi.alternatives(\n joi.object().instance(ValidationError),\n joi.function().instance(ValidationError),\n joi\n .object({\n message: joi.string().required(),\n details: joi\n .array()\n .items(\n joi.object({\n message: joi.string().required(),\n path: joi.array().items(joi.alternatives(joi.string(), joi.number())).required(),\n type: joi.string().required(),\n context: joi.object().unknown(true).required(),\n })\n )\n .required(),\n })\n .unknown(true)\n )\n return passesSchema(schema, value)\n}\n\nexport const isValues = (value: unknown): value is Record<string, any> => {\n return isObject(value)\n}\n\nexport const isResourceResourcefulRecordResponse = (\n value: unknown\n): value is ResourceResourcefulRecordResponse => {\n return isObject(value)\n}\n\nexport const isResourcefulHttpResponse = (value: unknown): value is ResourcefulHttpResponse => {\n const schema = joi.object({\n data: joi.any().required(),\n status: joi.number().required(),\n headers: joi.object().unknown(true).required(),\n url: joi.string().uri().required(),\n })\n return passesSchema(schema, value)\n}\n\nexport const isResourcefulHttpProgress = (value: unknown): value is ResourcefulHttpProgress => {\n const schema = joi.object({\n percent: joi.number().min(0).max(100).required(),\n transferredBytes: joi.number().min(0).required(),\n totalBytes: joi.number().min(0).required(),\n })\n return passesSchema(schema, value)\n}\n\nexport const isResourcefulRecordPreventedEvent = (\n values: Record<string, any>,\n error: ValidationError\n): boolean => {\n return isValues(values) && isValidationError(error)\n}\n\nexport const isResourcefulRecordSubmittedEvent = (values: Record<string, any>): boolean => {\n return isValues(values)\n}\n\nexport const isResourcefulRecordProcessingEvent = (\n progress: ResourcefulHttpProgress,\n values: Record<string, any>\n): boolean => {\n return isResourcefulHttpProgress(progress) && isValues(values)\n}\n\nexport const isResourcefulRecordSuccessEvent = (\n response: ResourceResourcefulRecordResponse,\n values: Record<string, any>\n): boolean => {\n return isResourceResourcefulRecordResponse(response) && isValues(values)\n}\n\nexport const isResourcefulRecordFailureEvent = (\n response: ResourcefulHttpResponse,\n values: Record<string, any>\n): boolean => {\n return isResourcefulHttpResponse(response) && isValues(values)\n}\n"],"names":["joi"],"mappings":";;AAMA,MAAM,eAAe,CAAC,QAAgB,UAA4B;AAChE,QAAM,EAAE,UAAU,OAAO,SAAS,OAAO,EAAE,YAAY,MAAM;AAC7D,SAAO,CAAC;AACV;AAEO,MAAM,oBAAoB,CAAC,UAA6C;AAC7E,QAAM,SAASA,UAAI;AAAA,IACjBA,UAAI,OAAA,EAAS,SAAS,eAAe;AAAA,IACrCA,UAAI,SAAA,EAAW,SAAS,eAAe;AAAA,IACvCA,UACG,OAAO;AAAA,MACN,SAASA,UAAI,OAAA,EAAS,SAAA;AAAA,MACtB,SAASA,UACN,MAAA,EACA;AAAA,QACCA,UAAI,OAAO;AAAA,UACT,SAASA,UAAI,OAAA,EAAS,SAAA;AAAA,UACtB,MAAMA,UAAI,MAAA,EAAQ,MAAMA,UAAI,aAAaA,UAAI,OAAA,GAAUA,UAAI,OAAA,CAAQ,CAAC,EAAE,SAAA;AAAA,UACtE,MAAMA,UAAI,OAAA,EAAS,SAAA;AAAA,UACnB,SAASA,UAAI,OAAA,EAAS,QAAQ,IAAI,EAAE,SAAA;AAAA,QAAS,CAC9C;AAAA,MAAA,EAEF,SAAA;AAAA,IAAS,CACb,EACA,QAAQ,IAAI;AAAA,EAAA;AAEjB,SAAO,aAAa,QAAQ,KAAK;AACnC;AAEO,MAAM,WAAW,CAAC,UAAiD;AACxE,SAAO,SAAS,KAAK;AACvB;AAEO,MAAM,sCAAsC,CACjD,UAC+C;AAC/C,SAAO,SAAS,KAAK;AACvB;AAEO,MAAM,4BAA4B,CAAC,UAAqD;AAC7F,QAAM,SAASA,UAAI,OAAO;AAAA,IACxB,MAAMA,UAAI,IAAA,EAAM,SAAA;AAAA,IAChB,QAAQA,UAAI,OAAA,EAAS,SAAA;AAAA,IACrB,SAASA,UAAI,OAAA,EAAS,QAAQ,IAAI,EAAE,SAAA;AAAA,IACpC,KAAKA,UAAI,SAAS,IAAA,EAAM,SAAA;AAAA,EAAS,CAClC;AACD,SAAO,aAAa,QAAQ,KAAK;AACnC;AAEO,MAAM,4BAA4B,CAAC,UAAqD;AAC7F,QAAM,SAASA,UAAI,OAAO;AAAA,IACxB,SAASA,UAAI,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAA;AAAA,IACtC,kBAAkBA,UAAI,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,IACtC,YAAYA,UAAI,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAAS,CAC1C;AACD,SAAO,aAAa,QAAQ,KAAK;AACnC;AAEO,MAAM,oCAAoC,CAC/C,QACA,UACY;AACZ,SAAO,SAAS,MAAM,KAAK,kBAAkB,KAAK;AACpD;AAEO,MAAM,oCAAoC,CAAC,WAAyC;AACzF,SAAO,SAAS,MAAM;AACxB;AAEO,MAAM,qCAAqC,CAChD,UACA,WACY;AACZ,SAAO,0BAA0B,QAAQ,KAAK,SAAS,MAAM;AAC/D;AAEO,MAAM,kCAAkC,CAC7C,UACA,WACY;AACZ,SAAO,oCAAoC,QAAQ,KAAK,SAAS,MAAM;AACzE;AAEO,MAAM,kCAAkC,CAC7C,UACA,WACY;AACZ,SAAO,0BAA0B,QAAQ,KAAK,SAAS,MAAM;AAC/D;"}
|