@blueprint-ts/core 4.1.0-beta.1 → 4.1.0-beta.3
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/dist/bulkRequests/BulkRequestEvent.enum.d.ts +4 -0
- package/dist/bulkRequests/BulkRequestEvent.enum.js +5 -0
- package/dist/bulkRequests/BulkRequestSender.d.ts +31 -0
- package/dist/bulkRequests/BulkRequestSender.js +161 -0
- package/dist/bulkRequests/BulkRequestWrapper.d.ts +15 -0
- package/dist/bulkRequests/BulkRequestWrapper.js +50 -0
- package/dist/bulkRequests/index.d.ts +5 -0
- package/dist/bulkRequests/index.js +5 -0
- package/{src/laravel/pagination/contracts/PaginationResponseBodyContract.ts → dist/laravel/pagination/contracts/PaginationResponseBodyContract.d.ts} +4 -4
- package/dist/laravel/pagination/contracts/PaginationResponseBodyContract.js +1 -0
- package/dist/laravel/pagination/dataDrivers/RequestDriver.d.ts +10 -0
- package/dist/laravel/pagination/dataDrivers/RequestDriver.js +18 -0
- package/dist/laravel/pagination/index.d.ts +4 -0
- package/dist/laravel/pagination/index.js +2 -0
- package/dist/laravel/requests/JsonBaseRequest.d.ts +14 -0
- package/dist/laravel/requests/JsonBaseRequest.js +15 -0
- package/dist/laravel/requests/PaginationJsonBaseRequest.d.ts +8 -0
- package/dist/laravel/requests/PaginationJsonBaseRequest.js +13 -0
- package/dist/laravel/requests/index.d.ts +7 -0
- package/dist/laravel/requests/index.js +5 -0
- package/dist/laravel/requests/responses/JsonResponse.d.ts +5 -0
- package/dist/laravel/requests/responses/JsonResponse.js +6 -0
- package/dist/laravel/requests/responses/PaginationResponse.d.ts +7 -0
- package/dist/laravel/requests/responses/PaginationResponse.js +9 -0
- package/dist/pagination/BasePaginator.d.ts +19 -0
- package/dist/pagination/BasePaginator.js +65 -0
- package/dist/pagination/InfiniteScroller.d.ts +6 -0
- package/dist/pagination/InfiniteScroller.js +17 -0
- package/dist/pagination/PageAwarePaginator.d.ts +32 -0
- package/dist/pagination/PageAwarePaginator.js +86 -0
- package/dist/pagination/StatePaginator.d.ts +25 -0
- package/dist/pagination/StatePaginator.js +55 -0
- package/dist/pagination/contracts/BaseViewDriverContract.d.ts +6 -0
- package/dist/pagination/contracts/BaseViewDriverContract.js +1 -0
- package/{src/pagination/contracts/BaseViewDriverFactoryContract.ts → dist/pagination/contracts/BaseViewDriverFactoryContract.d.ts} +2 -3
- package/dist/pagination/contracts/BaseViewDriverFactoryContract.js +1 -0
- package/dist/pagination/contracts/PaginateableRequestContract.d.ts +4 -0
- package/dist/pagination/contracts/PaginateableRequestContract.js +1 -0
- package/dist/pagination/contracts/PaginationDataDriverContract.d.ts +4 -0
- package/dist/pagination/contracts/PaginationDataDriverContract.js +1 -0
- package/{src/pagination/contracts/PaginationResponseContract.ts → dist/pagination/contracts/PaginationResponseContract.d.ts} +3 -5
- package/dist/pagination/contracts/PaginationResponseContract.js +1 -0
- package/{src/pagination/contracts/PaginatorLoadDataOptions.ts → dist/pagination/contracts/PaginatorLoadDataOptions.d.ts} +2 -2
- package/dist/pagination/contracts/PaginatorLoadDataOptions.js +1 -0
- package/{src/pagination/contracts/StatePaginationDataDriverContract.ts → dist/pagination/contracts/StatePaginationDataDriverContract.d.ts} +2 -3
- package/dist/pagination/contracts/StatePaginationDataDriverContract.js +1 -0
- package/dist/pagination/contracts/ViewDriverContract.d.ts +9 -0
- package/dist/pagination/contracts/ViewDriverContract.js +1 -0
- package/dist/pagination/contracts/ViewDriverFactoryContract.d.ts +4 -0
- package/dist/pagination/contracts/ViewDriverFactoryContract.js +1 -0
- package/dist/pagination/dataDrivers/ArrayDriver.d.ts +9 -0
- package/dist/pagination/dataDrivers/ArrayDriver.js +20 -0
- package/dist/pagination/dtos/PaginationDataDto.d.ts +7 -0
- package/dist/pagination/dtos/PaginationDataDto.js +12 -0
- package/dist/pagination/dtos/StatePaginationDataDto.d.ts +7 -0
- package/dist/pagination/dtos/StatePaginationDataDto.js +13 -0
- package/dist/pagination/factories/VueBaseViewDriverFactory.d.ts +5 -0
- package/dist/pagination/factories/VueBaseViewDriverFactory.js +6 -0
- package/dist/pagination/factories/VuePaginationDriverFactory.d.ts +5 -0
- package/dist/pagination/factories/VuePaginationDriverFactory.js +6 -0
- package/dist/pagination/frontendDrivers/VueBaseViewDriver.d.ts +11 -0
- package/dist/pagination/frontendDrivers/VueBaseViewDriver.js +19 -0
- package/dist/pagination/frontendDrivers/VuePaginationDriver.d.ts +21 -0
- package/dist/pagination/frontendDrivers/VuePaginationDriver.js +41 -0
- package/dist/pagination/index.d.ts +22 -0
- package/dist/pagination/index.js +13 -0
- package/dist/persistenceDrivers/LocalStorageDriver.d.ts +9 -0
- package/dist/persistenceDrivers/LocalStorageDriver.js +18 -0
- package/dist/persistenceDrivers/NonPersistentDriver.d.ts +7 -0
- package/dist/persistenceDrivers/NonPersistentDriver.js +8 -0
- package/dist/persistenceDrivers/SessionStorageDriver.d.ts +9 -0
- package/dist/persistenceDrivers/SessionStorageDriver.js +18 -0
- package/dist/persistenceDrivers/index.d.ts +6 -0
- package/dist/persistenceDrivers/index.js +4 -0
- package/dist/persistenceDrivers/types/PersistenceDriver.d.ts +5 -0
- package/dist/persistenceDrivers/types/PersistenceDriver.js +1 -0
- package/dist/requests/BaseRequest.d.ts +62 -0
- package/dist/requests/BaseRequest.js +224 -0
- package/dist/requests/ErrorHandler.d.ts +11 -0
- package/dist/requests/ErrorHandler.js +127 -0
- package/dist/requests/RequestConcurrencyMode.enum.d.ts +6 -0
- package/dist/requests/RequestConcurrencyMode.enum.js +7 -0
- package/dist/requests/RequestErrorRouter.d.ts +38 -0
- package/dist/requests/RequestErrorRouter.js +38 -0
- package/dist/requests/RequestEvents.enum.d.ts +4 -0
- package/dist/requests/RequestEvents.enum.js +5 -0
- package/dist/requests/RequestMethod.enum.d.ts +8 -0
- package/dist/requests/RequestMethod.enum.js +9 -0
- package/dist/requests/bodies/BinaryBody.d.ts +10 -0
- package/dist/requests/bodies/BinaryBody.js +22 -0
- package/dist/requests/bodies/FormDataBody.d.ts +14 -0
- package/dist/requests/bodies/FormDataBody.js +60 -0
- package/dist/requests/bodies/JsonBody.d.ts +8 -0
- package/dist/requests/bodies/JsonBody.js +13 -0
- package/{src/requests/contracts/AbortableRequestContract.ts → dist/requests/contracts/AbortableRequestContract.d.ts} +1 -1
- package/dist/requests/contracts/AbortableRequestContract.js +1 -0
- package/dist/requests/contracts/BaseRequestContract.d.ts +23 -0
- package/dist/requests/contracts/BaseRequestContract.js +1 -0
- package/dist/requests/contracts/BodyContract.d.ts +6 -0
- package/dist/requests/contracts/BodyContract.js +1 -0
- package/dist/requests/contracts/BodyFactoryContract.d.ts +4 -0
- package/dist/requests/contracts/BodyFactoryContract.js +1 -0
- package/dist/requests/contracts/DriverConfigContract.d.ts +8 -0
- package/dist/requests/contracts/DriverConfigContract.js +1 -0
- package/dist/requests/contracts/HeadersContract.d.ts +7 -0
- package/dist/requests/contracts/HeadersContract.js +1 -0
- package/dist/requests/contracts/RequestDriverContract.d.ts +8 -0
- package/dist/requests/contracts/RequestDriverContract.js +1 -0
- package/dist/requests/contracts/RequestLoaderContract.d.ts +4 -0
- package/dist/requests/contracts/RequestLoaderContract.js +1 -0
- package/{src/requests/contracts/RequestLoaderFactoryContract.ts → dist/requests/contracts/RequestLoaderFactoryContract.d.ts} +2 -3
- package/dist/requests/contracts/RequestLoaderFactoryContract.js +1 -0
- package/dist/requests/contracts/ResponseContract.d.ts +5 -0
- package/dist/requests/contracts/ResponseContract.js +1 -0
- package/dist/requests/drivers/contracts/ResponseHandlerContract.d.ts +9 -0
- package/dist/requests/drivers/contracts/ResponseHandlerContract.js +1 -0
- package/dist/requests/drivers/fetch/FetchDriver.d.ts +26 -0
- package/dist/requests/drivers/fetch/FetchDriver.js +73 -0
- package/dist/requests/drivers/fetch/FetchResponse.d.ts +12 -0
- package/dist/requests/drivers/fetch/FetchResponse.js +38 -0
- package/dist/requests/drivers/xhr/XMLHttpRequestDriver.d.ts +13 -0
- package/dist/requests/drivers/xhr/XMLHttpRequestDriver.js +107 -0
- package/dist/requests/drivers/xhr/XMLHttpRequestResponse.d.ts +17 -0
- package/dist/requests/drivers/xhr/XMLHttpRequestResponse.js +84 -0
- package/dist/requests/exceptions/BadGatewayException.d.ts +3 -0
- package/dist/requests/exceptions/BadGatewayException.js +3 -0
- package/dist/requests/exceptions/BadRequestException.d.ts +3 -0
- package/dist/requests/exceptions/BadRequestException.js +3 -0
- package/dist/requests/exceptions/ConflictException.d.ts +3 -0
- package/dist/requests/exceptions/ConflictException.js +3 -0
- package/dist/requests/exceptions/ForbiddenException.d.ts +3 -0
- package/dist/requests/exceptions/ForbiddenException.js +3 -0
- package/dist/requests/exceptions/GatewayTimeoutException.d.ts +3 -0
- package/dist/requests/exceptions/GatewayTimeoutException.js +3 -0
- package/dist/requests/exceptions/GoneException.d.ts +3 -0
- package/dist/requests/exceptions/GoneException.js +3 -0
- package/dist/requests/exceptions/InvalidJsonException.d.ts +7 -0
- package/dist/requests/exceptions/InvalidJsonException.js +10 -0
- package/dist/requests/exceptions/LockedException.d.ts +3 -0
- package/dist/requests/exceptions/LockedException.js +3 -0
- package/dist/requests/exceptions/MethodNotAllowedException.d.ts +3 -0
- package/dist/requests/exceptions/MethodNotAllowedException.js +3 -0
- package/dist/requests/exceptions/NoResponseReceivedException.d.ts +3 -0
- package/{src/requests/exceptions/NoResponseReceivedException.ts → dist/requests/exceptions/NoResponseReceivedException.js} +3 -3
- package/dist/requests/exceptions/NotFoundException.d.ts +3 -0
- package/dist/requests/exceptions/NotFoundException.js +3 -0
- package/dist/requests/exceptions/NotImplementedException.d.ts +3 -0
- package/dist/requests/exceptions/NotImplementedException.js +3 -0
- package/dist/requests/exceptions/PageExpiredException.d.ts +3 -0
- package/dist/requests/exceptions/PageExpiredException.js +3 -0
- package/dist/requests/exceptions/PayloadTooLargeException.d.ts +3 -0
- package/dist/requests/exceptions/PayloadTooLargeException.js +3 -0
- package/dist/requests/exceptions/PreconditionFailedException.d.ts +3 -0
- package/dist/requests/exceptions/PreconditionFailedException.js +3 -0
- package/dist/requests/exceptions/RequestTimeoutException.d.ts +3 -0
- package/dist/requests/exceptions/RequestTimeoutException.js +3 -0
- package/dist/requests/exceptions/ResponseBodyException.d.ts +7 -0
- package/dist/requests/exceptions/ResponseBodyException.js +10 -0
- package/dist/requests/exceptions/ResponseException.d.ts +6 -0
- package/dist/requests/exceptions/ResponseException.js +9 -0
- package/dist/requests/exceptions/ServerErrorException.d.ts +3 -0
- package/dist/requests/exceptions/ServerErrorException.js +3 -0
- package/dist/requests/exceptions/ServiceUnavailableException.d.ts +3 -0
- package/dist/requests/exceptions/ServiceUnavailableException.js +3 -0
- package/dist/requests/exceptions/StaleResponseException.d.ts +5 -0
- package/dist/requests/exceptions/StaleResponseException.js +10 -0
- package/dist/requests/exceptions/TooManyRequestsException.d.ts +3 -0
- package/dist/requests/exceptions/TooManyRequestsException.js +3 -0
- package/dist/requests/exceptions/UnauthorizedException.d.ts +3 -0
- package/dist/requests/exceptions/UnauthorizedException.js +3 -0
- package/dist/requests/exceptions/UnsupportedMediaTypeException.d.ts +3 -0
- package/dist/requests/exceptions/UnsupportedMediaTypeException.js +3 -0
- package/dist/requests/exceptions/ValidationException.d.ts +3 -0
- package/dist/requests/exceptions/ValidationException.js +3 -0
- package/dist/requests/exceptions/index.d.ts +25 -0
- package/dist/requests/exceptions/index.js +25 -0
- package/dist/requests/factories/BinaryBodyFactory.d.ts +8 -0
- package/dist/requests/factories/BinaryBodyFactory.js +9 -0
- package/dist/requests/factories/FormDataFactory.d.ts +12 -0
- package/dist/requests/factories/FormDataFactory.js +6 -0
- package/dist/requests/factories/JsonBodyFactory.d.ts +5 -0
- package/dist/requests/factories/JsonBodyFactory.js +6 -0
- package/dist/requests/index.d.ts +31 -0
- package/dist/requests/index.js +19 -0
- package/dist/requests/responses/BaseResponse.d.ts +14 -0
- package/dist/requests/responses/BaseResponse.js +36 -0
- package/dist/requests/responses/BlobResponse.d.ts +7 -0
- package/dist/requests/responses/BlobResponse.js +16 -0
- package/dist/requests/responses/JsonResponse.d.ts +5 -0
- package/dist/requests/responses/JsonResponse.js +12 -0
- package/dist/requests/responses/PlainTextResponse.d.ts +5 -0
- package/dist/requests/responses/PlainTextResponse.js +12 -0
- package/{src/requests/types/RequestConcurrencyOptions.ts → dist/requests/types/RequestConcurrencyOptions.d.ts} +4 -5
- package/dist/requests/types/RequestConcurrencyOptions.js +1 -0
- package/dist/requests/types/RequestUploadProgress.d.ts +6 -0
- package/dist/requests/types/RequestUploadProgress.js +1 -0
- package/dist/support/DeferredPromise.d.ts +37 -0
- package/dist/support/DeferredPromise.js +55 -0
- package/dist/support/helpers.d.ts +5 -0
- package/dist/support/helpers.js +69 -0
- package/{src/support/index.ts → dist/support/index.d.ts} +3 -4
- package/dist/support/index.js +3 -0
- package/dist/vue/composables/useConfirmDialog.d.ts +20 -0
- package/dist/vue/composables/useConfirmDialog.js +52 -0
- package/dist/vue/composables/useGlobalCheckbox.d.ts +13 -0
- package/dist/vue/composables/useGlobalCheckbox.js +123 -0
- package/dist/vue/composables/useIsEmpty.d.ts +4 -0
- package/dist/vue/composables/useIsEmpty.js +27 -0
- package/dist/vue/composables/useIsOpen.d.ts +5 -0
- package/dist/vue/composables/useIsOpen.js +25 -0
- package/dist/vue/composables/useIsOpenFromVar.d.ts +6 -0
- package/dist/vue/composables/useIsOpenFromVar.js +45 -0
- package/dist/vue/composables/useModelWrapper.d.ts +9 -0
- package/dist/vue/composables/useModelWrapper.js +18 -0
- package/dist/vue/composables/useOnOpen.d.ts +7 -0
- package/dist/vue/composables/useOnOpen.js +25 -0
- package/{src/vue/contracts/ModelValueOptions.ts → dist/vue/contracts/ModelValueOptions.d.ts} +1 -1
- package/dist/vue/contracts/ModelValueOptions.js +1 -0
- package/dist/vue/contracts/ModelValueProps.d.ts +3 -0
- package/dist/vue/contracts/ModelValueProps.js +1 -0
- package/dist/vue/forms/BaseForm.d.ts +162 -0
- package/dist/vue/forms/BaseForm.js +997 -0
- package/dist/vue/forms/PropertyAwareArray.d.ts +53 -0
- package/dist/vue/forms/PropertyAwareArray.js +54 -0
- package/{src/vue/forms/index.ts → dist/vue/forms/index.d.ts} +9 -11
- package/dist/vue/forms/index.js +6 -0
- package/dist/vue/forms/types/PersistedForm.d.ts +6 -0
- package/dist/vue/forms/types/PersistedForm.js +1 -0
- package/dist/vue/forms/validation/ValidationMode.enum.d.ts +11 -0
- package/dist/vue/forms/validation/ValidationMode.enum.js +14 -0
- package/dist/vue/forms/validation/index.d.ts +12 -0
- package/dist/vue/forms/validation/index.js +9 -0
- package/dist/vue/forms/validation/rules/BaseRule.d.ts +5 -0
- package/dist/vue/forms/validation/rules/BaseRule.js +5 -0
- package/dist/vue/forms/validation/rules/ConfirmedRule.d.ts +10 -0
- package/dist/vue/forms/validation/rules/ConfirmedRule.js +26 -0
- package/dist/vue/forms/validation/rules/EmailRule.d.ts +7 -0
- package/dist/vue/forms/validation/rules/EmailRule.js +19 -0
- package/dist/vue/forms/validation/rules/JsonRule.d.ts +7 -0
- package/dist/vue/forms/validation/rules/JsonRule.js +25 -0
- package/dist/vue/forms/validation/rules/MinRule.d.ts +26 -0
- package/dist/vue/forms/validation/rules/MinRule.js +52 -0
- package/dist/vue/forms/validation/rules/RequiredRule.d.ts +7 -0
- package/dist/vue/forms/validation/rules/RequiredRule.js +16 -0
- package/dist/vue/forms/validation/rules/UrlRule.d.ts +7 -0
- package/dist/vue/forms/validation/rules/UrlRule.js +22 -0
- package/{src/vue/forms/validation/types/BidirectionalRule.ts → dist/vue/forms/validation/types/BidirectionalRule.d.ts} +4 -4
- package/dist/vue/forms/validation/types/BidirectionalRule.js +1 -0
- package/dist/vue/forms/validation/types/ValidationRules.d.ts +11 -0
- package/dist/vue/forms/validation/types/ValidationRules.js +1 -0
- package/dist/vue/index.d.ts +11 -0
- package/dist/vue/index.js +10 -0
- package/dist/vue/requests/factories/VueRequestLoaderFactory.d.ts +6 -0
- package/dist/vue/requests/factories/VueRequestLoaderFactory.js +6 -0
- package/{src/vue/requests/index.ts → dist/vue/requests/index.d.ts} +4 -5
- package/dist/vue/requests/index.js +4 -0
- package/dist/vue/requests/loaders/VueRequestBatchLoader.d.ts +12 -0
- package/dist/vue/requests/loaders/VueRequestBatchLoader.js +29 -0
- package/dist/vue/requests/loaders/VueRequestLoader.d.ts +8 -0
- package/dist/vue/requests/loaders/VueRequestLoader.js +12 -0
- package/dist/vue/router/routeResourceBinding/RouteResourceBoundView.d.ts +57 -0
- package/dist/vue/router/routeResourceBinding/RouteResourceBoundView.js +135 -0
- package/dist/vue/router/routeResourceBinding/RouteResourceRequestResolver.d.ts +6 -0
- package/dist/vue/router/routeResourceBinding/RouteResourceRequestResolver.js +20 -0
- package/dist/vue/router/routeResourceBinding/defineRoute.d.ts +23 -0
- package/dist/vue/router/routeResourceBinding/defineRoute.js +42 -0
- package/dist/vue/router/routeResourceBinding/index.d.ts +8 -0
- package/dist/vue/router/routeResourceBinding/index.js +6 -0
- package/dist/vue/router/routeResourceBinding/installRouteInjection.d.ts +14 -0
- package/dist/vue/router/routeResourceBinding/installRouteInjection.js +133 -0
- package/dist/vue/router/routeResourceBinding/types.d.ts +55 -0
- package/dist/vue/router/routeResourceBinding/types.js +1 -0
- package/dist/vue/router/routeResourceBinding/useRouteResource.d.ts +8 -0
- package/dist/vue/router/routeResourceBinding/useRouteResource.js +29 -0
- package/dist/vue/state/State.d.ts +75 -0
- package/dist/vue/state/State.js +267 -0
- package/dist/vue/state/index.d.ts +2 -0
- package/dist/vue/state/index.js +2 -0
- package/package.json +81 -23
- package/.editorconfig +0 -508
- package/.eslintrc.cjs +0 -15
- package/.prettierrc.json +0 -8
- package/CHANGELOG.md +0 -213
- package/docker-compose.yaml +0 -8
- package/docs/.vitepress/config.ts +0 -124
- package/docs/index.md +0 -13
- package/docs/laravel/pagination.md +0 -67
- package/docs/laravel/requests.md +0 -62
- package/docs/services/pagination/index.md +0 -46
- package/docs/services/pagination/infinite-scroller.md +0 -20
- package/docs/services/pagination/page-aware.md +0 -51
- package/docs/services/pagination/state-pagination.md +0 -77
- package/docs/services/pagination/updating-rows.md +0 -52
- package/docs/services/persistence/index.md +0 -46
- package/docs/services/requests/abort-requests.md +0 -29
- package/docs/services/requests/bulk-requests.md +0 -70
- package/docs/services/requests/concurrency.md +0 -58
- package/docs/services/requests/drivers.md +0 -115
- package/docs/services/requests/error-handling.md +0 -153
- package/docs/services/requests/events.md +0 -53
- package/docs/services/requests/file-uploads.md +0 -105
- package/docs/services/requests/getting-started.md +0 -201
- package/docs/services/requests/headers.md +0 -40
- package/docs/services/requests/loading.md +0 -63
- package/docs/services/requests/request-bodies.md +0 -61
- package/docs/services/requests/responses.md +0 -34
- package/docs/services/support/deferred-promise.md +0 -63
- package/docs/services/support/helpers.md +0 -77
- package/docs/services/support/index.md +0 -6
- package/docs/upgrading/v1-to-v2.md +0 -64
- package/docs/upgrading/v2-to-v3.md +0 -52
- package/docs/upgrading/v3-to-v4.md +0 -214
- package/docs/upgrading.md +0 -0
- package/docs/vue/composables/use-confirm-dialog.md +0 -96
- package/docs/vue/composables/use-global-checkbox.md +0 -73
- package/docs/vue/composables/use-is-empty.md +0 -26
- package/docs/vue/composables/use-is-open-from-var.md +0 -32
- package/docs/vue/composables/use-is-open.md +0 -28
- package/docs/vue/composables/use-model-wrapper.md +0 -29
- package/docs/vue/composables/use-on-open.md +0 -26
- package/docs/vue/forms/arrays.md +0 -102
- package/docs/vue/forms/errors.md +0 -52
- package/docs/vue/forms/index.md +0 -99
- package/docs/vue/forms/payloads.md +0 -99
- package/docs/vue/forms/persistence.md +0 -19
- package/docs/vue/forms/state-and-properties.md +0 -26
- package/docs/vue/forms/utilities.md +0 -27
- package/docs/vue/forms/validation.md +0 -189
- package/docs/vue/requests/loading.md +0 -51
- package/docs/vue/router/route-resource-binding.md +0 -240
- package/docs/vue/state.md +0 -309
- package/env.d.ts +0 -1
- package/eslint.config.js +0 -15
- package/release-tool.json +0 -26
- package/src/bulkRequests/BulkRequestEvent.enum.ts +0 -4
- package/src/bulkRequests/BulkRequestSender.ts +0 -196
- package/src/bulkRequests/BulkRequestWrapper.ts +0 -49
- package/src/bulkRequests/index.ts +0 -6
- package/src/laravel/pagination/dataDrivers/RequestDriver.ts +0 -30
- package/src/laravel/pagination/index.ts +0 -6
- package/src/laravel/requests/JsonBaseRequest.ts +0 -35
- package/src/laravel/requests/PaginationJsonBaseRequest.ts +0 -29
- package/src/laravel/requests/index.ts +0 -9
- package/src/laravel/requests/responses/JsonResponse.ts +0 -8
- package/src/laravel/requests/responses/PaginationResponse.ts +0 -16
- package/src/pagination/BasePaginator.ts +0 -94
- package/src/pagination/InfiniteScroller.ts +0 -22
- package/src/pagination/PageAwarePaginator.ts +0 -132
- package/src/pagination/StatePaginator.ts +0 -86
- package/src/pagination/contracts/BaseViewDriverContract.ts +0 -6
- package/src/pagination/contracts/PaginateableRequestContract.ts +0 -13
- package/src/pagination/contracts/PaginationDataDriverContract.ts +0 -5
- package/src/pagination/contracts/ViewDriverContract.ts +0 -10
- package/src/pagination/contracts/ViewDriverFactoryContract.ts +0 -5
- package/src/pagination/dataDrivers/ArrayDriver.ts +0 -28
- package/src/pagination/dtos/PaginationDataDto.ts +0 -14
- package/src/pagination/dtos/StatePaginationDataDto.ts +0 -19
- package/src/pagination/factories/VueBaseViewDriverFactory.ts +0 -9
- package/src/pagination/factories/VuePaginationDriverFactory.ts +0 -9
- package/src/pagination/frontendDrivers/VueBaseViewDriver.ts +0 -28
- package/src/pagination/frontendDrivers/VuePaginationDriver.ts +0 -61
- package/src/pagination/index.ts +0 -46
- package/src/persistenceDrivers/LocalStorageDriver.ts +0 -22
- package/src/persistenceDrivers/NonPersistentDriver.ts +0 -12
- package/src/persistenceDrivers/SessionStorageDriver.ts +0 -22
- package/src/persistenceDrivers/index.ts +0 -8
- package/src/persistenceDrivers/types/PersistenceDriver.ts +0 -5
- package/src/requests/BaseRequest.ts +0 -321
- package/src/requests/ErrorHandler.ts +0 -144
- package/src/requests/RequestConcurrencyMode.enum.ts +0 -6
- package/src/requests/RequestErrorRouter.ts +0 -89
- package/src/requests/RequestEvents.enum.ts +0 -4
- package/src/requests/RequestMethod.enum.ts +0 -8
- package/src/requests/bodies/FormDataBody.ts +0 -81
- package/src/requests/bodies/JsonBody.ts +0 -16
- package/src/requests/contracts/BaseRequestContract.ts +0 -39
- package/src/requests/contracts/BodyContract.ts +0 -7
- package/src/requests/contracts/BodyFactoryContract.ts +0 -5
- package/src/requests/contracts/DriverConfigContract.ts +0 -9
- package/src/requests/contracts/HeadersContract.ts +0 -5
- package/src/requests/contracts/RequestDriverContract.ts +0 -15
- package/src/requests/contracts/RequestLoaderContract.ts +0 -5
- package/src/requests/contracts/ResponseContract.ts +0 -7
- package/src/requests/drivers/contracts/ResponseHandlerContract.ts +0 -10
- package/src/requests/drivers/fetch/FetchDriver.ts +0 -115
- package/src/requests/drivers/fetch/FetchResponse.ts +0 -30
- package/src/requests/drivers/xhr/XMLHttpRequestDriver.ts +0 -138
- package/src/requests/drivers/xhr/XMLHttpRequestResponse.ts +0 -95
- package/src/requests/exceptions/BadGatewayException.ts +0 -3
- package/src/requests/exceptions/BadRequestException.ts +0 -3
- package/src/requests/exceptions/ConflictException.ts +0 -3
- package/src/requests/exceptions/ForbiddenException.ts +0 -3
- package/src/requests/exceptions/GatewayTimeoutException.ts +0 -3
- package/src/requests/exceptions/GoneException.ts +0 -3
- package/src/requests/exceptions/InvalidJsonException.ts +0 -15
- package/src/requests/exceptions/LockedException.ts +0 -3
- package/src/requests/exceptions/MethodNotAllowedException.ts +0 -3
- package/src/requests/exceptions/NotFoundException.ts +0 -3
- package/src/requests/exceptions/NotImplementedException.ts +0 -3
- package/src/requests/exceptions/PageExpiredException.ts +0 -3
- package/src/requests/exceptions/PayloadTooLargeException.ts +0 -3
- package/src/requests/exceptions/PreconditionFailedException.ts +0 -3
- package/src/requests/exceptions/RequestTimeoutException.ts +0 -3
- package/src/requests/exceptions/ResponseBodyException.ts +0 -15
- package/src/requests/exceptions/ResponseException.ts +0 -11
- package/src/requests/exceptions/ServerErrorException.ts +0 -3
- package/src/requests/exceptions/ServiceUnavailableException.ts +0 -3
- package/src/requests/exceptions/StaleResponseException.ts +0 -13
- package/src/requests/exceptions/TooManyRequestsException.ts +0 -3
- package/src/requests/exceptions/UnauthorizedException.ts +0 -3
- package/src/requests/exceptions/UnsupportedMediaTypeException.ts +0 -3
- package/src/requests/exceptions/ValidationException.ts +0 -3
- package/src/requests/exceptions/index.ts +0 -51
- package/src/requests/factories/FormDataFactory.ts +0 -17
- package/src/requests/factories/JsonBodyFactory.ts +0 -9
- package/src/requests/index.ts +0 -61
- package/src/requests/responses/BaseResponse.ts +0 -41
- package/src/requests/responses/BlobResponse.ts +0 -19
- package/src/requests/responses/JsonResponse.ts +0 -15
- package/src/requests/responses/PlainTextResponse.ts +0 -15
- package/src/requests/types/RequestUploadProgress.ts +0 -6
- package/src/support/DeferredPromise.ts +0 -67
- package/src/support/helpers.ts +0 -78
- package/src/vue/composables/useConfirmDialog.ts +0 -63
- package/src/vue/composables/useGlobalCheckbox.ts +0 -145
- package/src/vue/composables/useIsEmpty.ts +0 -34
- package/src/vue/composables/useIsOpen.ts +0 -37
- package/src/vue/composables/useIsOpenFromVar.ts +0 -61
- package/src/vue/composables/useModelWrapper.ts +0 -27
- package/src/vue/composables/useOnOpen.ts +0 -34
- package/src/vue/contracts/ModelValueProps.ts +0 -3
- package/src/vue/forms/BaseForm.ts +0 -1192
- package/src/vue/forms/PropertyAwareArray.ts +0 -81
- package/src/vue/forms/types/PersistedForm.ts +0 -6
- package/src/vue/forms/validation/ValidationMode.enum.ts +0 -14
- package/src/vue/forms/validation/index.ts +0 -15
- package/src/vue/forms/validation/rules/BaseRule.ts +0 -7
- package/src/vue/forms/validation/rules/ConfirmedRule.ts +0 -39
- package/src/vue/forms/validation/rules/EmailRule.ts +0 -23
- package/src/vue/forms/validation/rules/JsonRule.ts +0 -28
- package/src/vue/forms/validation/rules/MinRule.ts +0 -61
- package/src/vue/forms/validation/rules/RequiredRule.ts +0 -19
- package/src/vue/forms/validation/rules/UrlRule.ts +0 -24
- package/src/vue/forms/validation/types/ValidationRules.ts +0 -15
- package/src/vue/index.ts +0 -14
- package/src/vue/requests/factories/VueRequestLoaderFactory.ts +0 -10
- package/src/vue/requests/loaders/VueRequestBatchLoader.ts +0 -35
- package/src/vue/requests/loaders/VueRequestLoader.ts +0 -18
- package/src/vue/router/routeResourceBinding/RouteResourceBoundView.ts +0 -145
- package/src/vue/router/routeResourceBinding/RouteResourceRequestResolver.ts +0 -11
- package/src/vue/router/routeResourceBinding/defineRoute.ts +0 -59
- package/src/vue/router/routeResourceBinding/index.ts +0 -11
- package/src/vue/router/routeResourceBinding/installRouteInjection.ts +0 -164
- package/src/vue/router/routeResourceBinding/types.ts +0 -53
- package/src/vue/router/routeResourceBinding/useRouteResource.ts +0 -24
- package/src/vue/state/State.ts +0 -380
- package/src/vue/state/index.ts +0 -3
- package/tests/service/bulkRequests/BulkRequestSender.test.ts +0 -76
- package/tests/service/bulkRequests/BulkRequestWrapper.test.ts +0 -51
- package/tests/service/helpers/mergeDeep.test.ts +0 -53
- package/tests/service/laravel/pagination/dataDrivers/RequestDriver.test.ts +0 -84
- package/tests/service/laravel/requests/JsonBaseRequest.test.ts +0 -43
- package/tests/service/laravel/requests/PaginationJsonBaseRequest.test.ts +0 -58
- package/tests/service/laravel/requests/responses/JsonResponse.test.ts +0 -59
- package/tests/service/laravel/requests/responses/PaginationResponse.test.ts +0 -127
- package/tests/service/pagination/BasePaginator.test.ts +0 -100
- package/tests/service/pagination/InfiniteScroller.test.ts +0 -101
- package/tests/service/pagination/PageAwarePaginator.test.ts +0 -133
- package/tests/service/pagination/StatePaginator.test.ts +0 -76
- package/tests/service/pagination/VueViewDrivers.test.ts +0 -46
- package/tests/service/pagination/dtos/PaginationDataDto.test.ts +0 -35
- package/tests/service/pagination/dtos/StatePaginationDataDto.test.ts +0 -14
- package/tests/service/pagination/factories/VuePaginationDriverFactory.test.ts +0 -32
- package/tests/service/pagination/frontendDrivers/VuePaginationDriver.test.ts +0 -66
- package/tests/service/persistenceDrivers/PersistenceDrivers.test.ts +0 -56
- package/tests/service/requests/BaseRequest.test.ts +0 -250
- package/tests/service/requests/BodiesAndFactories.test.ts +0 -28
- package/tests/service/requests/Enums.test.ts +0 -20
- package/tests/service/requests/ErrorHandler.test.ts +0 -188
- package/tests/service/requests/FormDataBody.test.ts +0 -63
- package/tests/service/requests/RequestErrorRouter.test.ts +0 -44
- package/tests/service/requests/Responses.test.ts +0 -83
- package/tests/service/requests/exceptions/Exceptions.test.ts +0 -43
- package/tests/service/requests/fetch/FetchDriver.test.ts +0 -76
- package/tests/service/requests/fetch/FetchResponse.test.ts +0 -21
- package/tests/service/requests/xhr/XMLHttpRequestDriver.test.ts +0 -178
- package/tests/service/support/DeferredPromise.test.ts +0 -40
- package/tests/service/support/helpers.test.ts +0 -37
- package/tests/vue/composables/useConfirmDialog.test.ts +0 -77
- package/tests/vue/composables/useGlobalCheckbox.test.ts +0 -126
- package/tests/vue/composables/useIsEmpty.test.ts +0 -18
- package/tests/vue/composables/useIsOpen.test.ts +0 -25
- package/tests/vue/composables/useIsOpenFromVar.test.ts +0 -22
- package/tests/vue/composables/useModelWrapper.test.ts +0 -30
- package/tests/vue/composables/useOnOpen.test.ts +0 -26
- package/tests/vue/forms/BaseForm.behavior.test.ts +0 -98
- package/tests/vue/forms/BaseForm.transformers.test.ts +0 -109
- package/tests/vue/forms/PropertyAwareArray.test.ts +0 -30
- package/tests/vue/forms/validation/ValidationRules.test.ts +0 -79
- package/tests/vue/requests/VueRequestLoaders.test.ts +0 -48
- package/tests/vue/router/routeResourceBinding/RouteResourceBoundView.test.ts +0 -344
- package/tests/vue/router/routeResourceBinding/RouteResourceUtils.test.ts +0 -70
- package/tests/vue/router/routeResourceBinding/installRouteInjection.test.ts +0 -450
- package/tests/vue/state/State.test.ts +0 -151
- package/tsconfig.json +0 -114
- package/vite.config.ts +0 -34
- package/vitest.config.ts +0 -23
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type VNode } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Drop-in replacement for `<router-view>` that handles route resource
|
|
4
|
+
* injection loading and error states.
|
|
5
|
+
*
|
|
6
|
+
* When any injected resource is loading → renders the route's `loadingComponent`.
|
|
7
|
+
* When any injected resource has an error → renders the route's `errorComponent`
|
|
8
|
+
* (receives `error` and `refresh` as props).
|
|
9
|
+
* Otherwise → passes `{ Component, route }` to the default scoped slot,
|
|
10
|
+
* just like `<RouterView>`.
|
|
11
|
+
*
|
|
12
|
+
* Error and loading components are defined in the route via `defineRoute`:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* defineRoute<{ credential: CredentialResource }>()({
|
|
16
|
+
* path: '/credentials/:credentialId',
|
|
17
|
+
* component: CredentialShowPage,
|
|
18
|
+
* errorComponent: GenericErrorPage,
|
|
19
|
+
* loadingComponent: LoadingSpinner,
|
|
20
|
+
* inject: {
|
|
21
|
+
* credential: {
|
|
22
|
+
* from: 'credentialId',
|
|
23
|
+
* resolve: (id) => new RouteResourceRequestResolver(new CredentialShowRequest(id)),
|
|
24
|
+
* },
|
|
25
|
+
* },
|
|
26
|
+
* })
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Set `lazy: false` to render the target component immediately (without
|
|
30
|
+
* waiting for resources). The component can then handle loading/error
|
|
31
|
+
* states itself via `useRouteResource()`:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* defineRoute<{ credential: CredentialResource }>()({
|
|
35
|
+
* path: '/credentials/:credentialId',
|
|
36
|
+
* component: CredentialShowPage,
|
|
37
|
+
* lazy: false,
|
|
38
|
+
* inject: { ... },
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* Usage in layout (supports the same v-slot pattern as RouterView):
|
|
43
|
+
* ```vue
|
|
44
|
+
* <RouteResourceBoundView v-slot="{ Component, route }">
|
|
45
|
+
* <component :is="Component" v-if="Component" :key="route.meta.usePathKey ? route.path : undefined" />
|
|
46
|
+
* <EmptyState v-else />
|
|
47
|
+
* </RouteResourceBoundView>
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* Or without a slot (renders the matched component automatically):
|
|
51
|
+
* ```vue
|
|
52
|
+
* <RouteResourceBoundView />
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare const RouteResourceBoundView: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { computed, defineComponent, h } from 'vue';
|
|
11
|
+
import { RouterView, useRoute } from 'vue-router';
|
|
12
|
+
/**
|
|
13
|
+
* Drop-in replacement for `<router-view>` that handles route resource
|
|
14
|
+
* injection loading and error states.
|
|
15
|
+
*
|
|
16
|
+
* When any injected resource is loading → renders the route's `loadingComponent`.
|
|
17
|
+
* When any injected resource has an error → renders the route's `errorComponent`
|
|
18
|
+
* (receives `error` and `refresh` as props).
|
|
19
|
+
* Otherwise → passes `{ Component, route }` to the default scoped slot,
|
|
20
|
+
* just like `<RouterView>`.
|
|
21
|
+
*
|
|
22
|
+
* Error and loading components are defined in the route via `defineRoute`:
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* defineRoute<{ credential: CredentialResource }>()({
|
|
26
|
+
* path: '/credentials/:credentialId',
|
|
27
|
+
* component: CredentialShowPage,
|
|
28
|
+
* errorComponent: GenericErrorPage,
|
|
29
|
+
* loadingComponent: LoadingSpinner,
|
|
30
|
+
* inject: {
|
|
31
|
+
* credential: {
|
|
32
|
+
* from: 'credentialId',
|
|
33
|
+
* resolve: (id) => new RouteResourceRequestResolver(new CredentialShowRequest(id)),
|
|
34
|
+
* },
|
|
35
|
+
* },
|
|
36
|
+
* })
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Set `lazy: false` to render the target component immediately (without
|
|
40
|
+
* waiting for resources). The component can then handle loading/error
|
|
41
|
+
* states itself via `useRouteResource()`:
|
|
42
|
+
*
|
|
43
|
+
* ```ts
|
|
44
|
+
* defineRoute<{ credential: CredentialResource }>()({
|
|
45
|
+
* path: '/credentials/:credentialId',
|
|
46
|
+
* component: CredentialShowPage,
|
|
47
|
+
* lazy: false,
|
|
48
|
+
* inject: { ... },
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* Usage in layout (supports the same v-slot pattern as RouterView):
|
|
53
|
+
* ```vue
|
|
54
|
+
* <RouteResourceBoundView v-slot="{ Component, route }">
|
|
55
|
+
* <component :is="Component" v-if="Component" :key="route.meta.usePathKey ? route.path : undefined" />
|
|
56
|
+
* <EmptyState v-else />
|
|
57
|
+
* </RouteResourceBoundView>
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* Or without a slot (renders the matched component automatically):
|
|
61
|
+
* ```vue
|
|
62
|
+
* <RouteResourceBoundView />
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export const RouteResourceBoundView = defineComponent({
|
|
66
|
+
name: 'RouteResourceBoundView',
|
|
67
|
+
setup(_, { slots }) {
|
|
68
|
+
const route = useRoute();
|
|
69
|
+
const injectionState = computed(() => {
|
|
70
|
+
return route.meta._injectionState;
|
|
71
|
+
});
|
|
72
|
+
const firstError = computed(() => {
|
|
73
|
+
const state = injectionState.value;
|
|
74
|
+
if (!state)
|
|
75
|
+
return null;
|
|
76
|
+
for (const key of Object.keys(state)) {
|
|
77
|
+
const entry = state[key];
|
|
78
|
+
if (entry === null || entry === void 0 ? void 0 : entry.error)
|
|
79
|
+
return entry.error;
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
});
|
|
83
|
+
const anyLoading = computed(() => {
|
|
84
|
+
const state = injectionState.value;
|
|
85
|
+
if (!state)
|
|
86
|
+
return false;
|
|
87
|
+
return Object.keys(state).some((key) => { var _a; return (_a = state[key]) === null || _a === void 0 ? void 0 : _a.loading; });
|
|
88
|
+
});
|
|
89
|
+
const refresh = () => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const state = injectionState.value;
|
|
91
|
+
if (!state)
|
|
92
|
+
return;
|
|
93
|
+
const erroredProps = Object.keys(state).filter((key) => { var _a; return (_a = state[key]) === null || _a === void 0 ? void 0 : _a.error; });
|
|
94
|
+
yield Promise.all(erroredProps.map((propName) => { var _a, _b; return (_b = (_a = route.meta).refresh) === null || _b === void 0 ? void 0 : _b.call(_a, propName); }));
|
|
95
|
+
});
|
|
96
|
+
/**
|
|
97
|
+
* Core render logic that decides which slot/component to show
|
|
98
|
+
* given the resolved Component and route from RouterView.
|
|
99
|
+
*/
|
|
100
|
+
function renderContent(Component, resolvedRoute) {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
const isLazy = resolvedRoute.meta._lazy !== false;
|
|
103
|
+
if (isLazy) {
|
|
104
|
+
if (firstError.value) {
|
|
105
|
+
const errorComponent = resolvedRoute.meta._errorComponent;
|
|
106
|
+
if (errorComponent) {
|
|
107
|
+
return h(errorComponent, { error: firstError.value, refresh });
|
|
108
|
+
}
|
|
109
|
+
return (_a = slots['error']) === null || _a === void 0 ? void 0 : _a.call(slots, { error: firstError.value, refresh });
|
|
110
|
+
}
|
|
111
|
+
if (anyLoading.value) {
|
|
112
|
+
const loadingComponent = resolvedRoute.meta._loadingComponent;
|
|
113
|
+
if (loadingComponent) {
|
|
114
|
+
return h(loadingComponent);
|
|
115
|
+
}
|
|
116
|
+
return (_b = slots['loading']) === null || _b === void 0 ? void 0 : _b.call(slots);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (slots['default']) {
|
|
120
|
+
return slots['default']({ Component, route: resolvedRoute });
|
|
121
|
+
}
|
|
122
|
+
if (Component) {
|
|
123
|
+
return h(Component);
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return () => {
|
|
128
|
+
return h(RouterView, null, {
|
|
129
|
+
default: ({ Component, route: resolvedRoute }) => {
|
|
130
|
+
return renderContent(Component, resolvedRoute);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export class RouteResourceRequestResolver {
|
|
11
|
+
constructor(request) {
|
|
12
|
+
this.request = request;
|
|
13
|
+
}
|
|
14
|
+
resolve() {
|
|
15
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
const response = yield this.request.send();
|
|
17
|
+
return response.getData();
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Component } from 'vue';
|
|
2
|
+
import { type RouteRecordRaw } from 'vue-router';
|
|
3
|
+
import { type InjectConfig } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Type-safe route definition helper that ties:
|
|
6
|
+
* - component props type (Props)
|
|
7
|
+
* - inject config types (must resolve Props[K])
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* export default defineRoute<{ product: ProductResource }>()({
|
|
11
|
+
* path: '/products/:productId',
|
|
12
|
+
* component: ProductShowPage,
|
|
13
|
+
* errorComponent: GenericErrorPage,
|
|
14
|
+
* loadingComponent: LoadingSpinner,
|
|
15
|
+
* inject: { product: { from: 'productId', resolve: ... } },
|
|
16
|
+
* })
|
|
17
|
+
*/
|
|
18
|
+
export declare function defineRoute<Props extends Record<string, unknown>>(): <T extends RouteRecordRaw & {
|
|
19
|
+
inject?: InjectConfig<Props>;
|
|
20
|
+
errorComponent?: Component;
|
|
21
|
+
loadingComponent?: Component;
|
|
22
|
+
lazy?: boolean;
|
|
23
|
+
}>(route: T) => RouteRecordRaw;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { markRaw } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe route definition helper that ties:
|
|
4
|
+
* - component props type (Props)
|
|
5
|
+
* - inject config types (must resolve Props[K])
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* export default defineRoute<{ product: ProductResource }>()({
|
|
9
|
+
* path: '/products/:productId',
|
|
10
|
+
* component: ProductShowPage,
|
|
11
|
+
* errorComponent: GenericErrorPage,
|
|
12
|
+
* loadingComponent: LoadingSpinner,
|
|
13
|
+
* inject: { product: { from: 'productId', resolve: ... } },
|
|
14
|
+
* })
|
|
15
|
+
*/
|
|
16
|
+
export function defineRoute() {
|
|
17
|
+
return function (route) {
|
|
18
|
+
var _a, _b, _c;
|
|
19
|
+
const originalProps = route.props;
|
|
20
|
+
if (route.errorComponent) {
|
|
21
|
+
route.meta = (_a = route.meta) !== null && _a !== void 0 ? _a : {};
|
|
22
|
+
route.meta._errorComponent = markRaw(route.errorComponent);
|
|
23
|
+
delete route.errorComponent;
|
|
24
|
+
}
|
|
25
|
+
if (route.loadingComponent) {
|
|
26
|
+
route.meta = (_b = route.meta) !== null && _b !== void 0 ? _b : {};
|
|
27
|
+
route.meta._loadingComponent = markRaw(route.loadingComponent);
|
|
28
|
+
delete route.loadingComponent;
|
|
29
|
+
}
|
|
30
|
+
if (route.lazy !== undefined) {
|
|
31
|
+
route.meta = (_c = route.meta) !== null && _c !== void 0 ? _c : {};
|
|
32
|
+
route.meta._lazy = route.lazy;
|
|
33
|
+
delete route.lazy;
|
|
34
|
+
}
|
|
35
|
+
route.props = (to) => {
|
|
36
|
+
var _a;
|
|
37
|
+
const baseProps = typeof originalProps === 'function' ? originalProps(to) : originalProps === true ? to.params : (originalProps !== null && originalProps !== void 0 ? originalProps : {});
|
|
38
|
+
return Object.assign(Object.assign({}, baseProps), ((_a = to.meta._injectedProps) !== null && _a !== void 0 ? _a : {}));
|
|
39
|
+
};
|
|
40
|
+
return route;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineRoute } from './defineRoute';
|
|
2
|
+
import { installRouteInjection } from './installRouteInjection';
|
|
3
|
+
import { RouteResourceBoundView } from './RouteResourceBoundView';
|
|
4
|
+
import { RouteResourceRequestResolver } from './RouteResourceRequestResolver';
|
|
5
|
+
import { useRouteResource } from './useRouteResource';
|
|
6
|
+
import type { DataRequest, InjectConfig, Resolver } from './types';
|
|
7
|
+
export { defineRoute, installRouteInjection, RouteResourceBoundView, RouteResourceRequestResolver, useRouteResource };
|
|
8
|
+
export type { DataRequest, InjectConfig, Resolver };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { defineRoute } from './defineRoute';
|
|
2
|
+
import { installRouteInjection } from './installRouteInjection';
|
|
3
|
+
import { RouteResourceBoundView } from './RouteResourceBoundView';
|
|
4
|
+
import { RouteResourceRequestResolver } from './RouteResourceRequestResolver';
|
|
5
|
+
import { useRouteResource } from './useRouteResource';
|
|
6
|
+
export { defineRoute, installRouteInjection, RouteResourceBoundView, RouteResourceRequestResolver, useRouteResource };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Router } from 'vue-router';
|
|
2
|
+
/**
|
|
3
|
+
* Installs the runtime part:
|
|
4
|
+
* - resolves all route.inject entries before navigation completes
|
|
5
|
+
* - stores results on to.meta._injectedProps
|
|
6
|
+
* - ensures route props include injected results (so components receive them as props)
|
|
7
|
+
* - caches resolved resources so child routes inherit parent-resolved data
|
|
8
|
+
* without triggering redundant requests (as long as the param value is unchanged)
|
|
9
|
+
*
|
|
10
|
+
* Notes:
|
|
11
|
+
* - This keeps router files clean: only an `inject` block per route.
|
|
12
|
+
* - This is intentionally runtime-generic; type safety happens at route definition time.
|
|
13
|
+
*/
|
|
14
|
+
export declare function installRouteInjection(router: Router): void;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { reactive } from 'vue';
|
|
11
|
+
/**
|
|
12
|
+
* Installs the runtime part:
|
|
13
|
+
* - resolves all route.inject entries before navigation completes
|
|
14
|
+
* - stores results on to.meta._injectedProps
|
|
15
|
+
* - ensures route props include injected results (so components receive them as props)
|
|
16
|
+
* - caches resolved resources so child routes inherit parent-resolved data
|
|
17
|
+
* without triggering redundant requests (as long as the param value is unchanged)
|
|
18
|
+
*
|
|
19
|
+
* Notes:
|
|
20
|
+
* - This keeps router files clean: only an `inject` block per route.
|
|
21
|
+
* - This is intentionally runtime-generic; type safety happens at route definition time.
|
|
22
|
+
*/
|
|
23
|
+
export function installRouteInjection(router) {
|
|
24
|
+
const cache = {};
|
|
25
|
+
router.beforeResolve((to) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
console.log('[Route Injection] Resolving route injections...');
|
|
27
|
+
if (!to.meta._injectedProps) {
|
|
28
|
+
to.meta._injectedProps = reactive({});
|
|
29
|
+
}
|
|
30
|
+
if (!to.meta._injectionState) {
|
|
31
|
+
to.meta._injectionState = reactive({});
|
|
32
|
+
}
|
|
33
|
+
const resolvers = {};
|
|
34
|
+
const activePropNames = new Set();
|
|
35
|
+
const pendingResolvers = [];
|
|
36
|
+
// Iterate through all matched route records (from parent to child)
|
|
37
|
+
for (const record of to.matched) {
|
|
38
|
+
console.debug(`[Route Injection] Processing route "${record.path}"`);
|
|
39
|
+
// Access the custom 'inject' property directly from the record
|
|
40
|
+
const inject = record.meta.inject;
|
|
41
|
+
if (!inject) {
|
|
42
|
+
console.debug(`[Route Injection] No injections found for route "${record.path}"`);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
for (const [propName, cfg] of Object.entries(inject)) {
|
|
46
|
+
const rawParam = to.params[cfg.from];
|
|
47
|
+
if (rawParam === undefined || rawParam === null) {
|
|
48
|
+
console.warn(`[Route Injection] Param "${cfg.from}" not found for prop "${propName}"`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const paramValue = Array.isArray(rawParam) ? rawParam[0] : String(rawParam);
|
|
52
|
+
if (paramValue === undefined || paramValue === null) {
|
|
53
|
+
console.warn(`[Route Injection] Param value "${cfg.from}" not found for prop "${propName}"`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
activePropNames.add(propName);
|
|
57
|
+
// Initialize state for this prop
|
|
58
|
+
const state = to.meta._injectionState;
|
|
59
|
+
if (!state[propName]) {
|
|
60
|
+
state[propName] = reactive({ loading: false, error: null });
|
|
61
|
+
}
|
|
62
|
+
// Define the refresh logic for this specific prop (always fetches fresh data)
|
|
63
|
+
const resolveProp = (options) => __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
const propState = to.meta._injectionState[propName];
|
|
65
|
+
if (!(options === null || options === void 0 ? void 0 : options.silent)) {
|
|
66
|
+
propState.loading = true;
|
|
67
|
+
}
|
|
68
|
+
propState.error = null;
|
|
69
|
+
try {
|
|
70
|
+
const resolver = cfg.resolve(paramValue);
|
|
71
|
+
let payload = yield resolver.resolve();
|
|
72
|
+
if (typeof cfg.getter === 'function') {
|
|
73
|
+
payload = cfg.getter(payload);
|
|
74
|
+
}
|
|
75
|
+
// Update cache
|
|
76
|
+
cache[propName] = { paramValue, payload };
|
|
77
|
+
// Updating the reactive object triggers the component re-render
|
|
78
|
+
const injectedProps = to.meta._injectedProps;
|
|
79
|
+
injectedProps[propName] = payload;
|
|
80
|
+
return payload;
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
propState.error = e instanceof Error ? e : new Error(String(e));
|
|
84
|
+
throw e;
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
propState.loading = false;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
resolvers[propName] = resolveProp;
|
|
91
|
+
// Reuse cached value if the param hasn't changed (e.g. navigating between child routes)
|
|
92
|
+
const cached = cache[propName];
|
|
93
|
+
if (cached && cached.paramValue === paramValue) {
|
|
94
|
+
console.debug(`[Route Injection] Using cached value for prop "${propName}" (param "${cfg.from}" unchanged)`);
|
|
95
|
+
const injectedPropsCache = to.meta._injectedProps;
|
|
96
|
+
injectedPropsCache[propName] = cached.payload;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Set loading immediately and queue resolver (non-blocking)
|
|
100
|
+
const injectionState = to.meta._injectionState;
|
|
101
|
+
injectionState[propName].loading = true;
|
|
102
|
+
pendingResolvers.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
try {
|
|
104
|
+
yield resolveProp();
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
console.error(`[Route Injection] Failed to resolve prop "${propName}"`, e);
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
console.debug(`[Route Injection] Queued resolution for prop "${propName}" for route "${record.path}"`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Evict cache entries that are no longer part of the active route hierarchy
|
|
114
|
+
for (const key of Object.keys(cache)) {
|
|
115
|
+
if (!activePropNames.has(key)) {
|
|
116
|
+
delete cache[key];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Attach the resolvers and a global refresh helper to the route meta
|
|
120
|
+
to.meta['_injectedResolvers'] = resolvers;
|
|
121
|
+
to.meta['refresh'] = (propName, options) => __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
if (resolvers[propName]) {
|
|
123
|
+
return yield resolvers[propName](options);
|
|
124
|
+
}
|
|
125
|
+
console.warn(`[Route Injection] No resolver found for "${propName}"`);
|
|
126
|
+
return undefined;
|
|
127
|
+
});
|
|
128
|
+
// Fire pending resolvers without blocking navigation
|
|
129
|
+
if (pendingResolvers.length > 0) {
|
|
130
|
+
Promise.all(pendingResolvers.map((fn) => fn()));
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Component } from 'vue';
|
|
2
|
+
import { type RouteLocationNormalized } from 'vue-router';
|
|
3
|
+
/**
|
|
4
|
+
* Generic resolver interface.
|
|
5
|
+
*/
|
|
6
|
+
export interface Resolver<T> {
|
|
7
|
+
resolve(): Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A minimal "request" contract that matches your request classes:
|
|
11
|
+
* new ProductShowRequest(id).send() -> { getData(): T }
|
|
12
|
+
*/
|
|
13
|
+
export interface DataRequest<T> {
|
|
14
|
+
send(): Promise<{
|
|
15
|
+
getData(): T;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Inject config that is type-safe against component props.
|
|
20
|
+
*
|
|
21
|
+
* Props[K] is the required resolved type for prop K.
|
|
22
|
+
*/
|
|
23
|
+
export type InjectConfig<Props extends Record<string, unknown>> = {
|
|
24
|
+
[K in keyof Props]?: {
|
|
25
|
+
/**
|
|
26
|
+
* Route param name, e.g. "productId"
|
|
27
|
+
*/
|
|
28
|
+
from: keyof RouteLocationNormalized['params'] | string;
|
|
29
|
+
/**
|
|
30
|
+
* Create a resolver from the param value.
|
|
31
|
+
* Param value is treated as string (most common in routes).
|
|
32
|
+
*/
|
|
33
|
+
resolve: (param: string) => Resolver<Props[K]>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Extended route meta to store injected props at runtime.
|
|
38
|
+
*/
|
|
39
|
+
declare module 'vue-router' {
|
|
40
|
+
interface RouteMeta {
|
|
41
|
+
_injectedProps?: Record<string, unknown>;
|
|
42
|
+
_injectedResolvers?: Record<string, () => Promise<unknown>>;
|
|
43
|
+
_injectionState?: Record<string, {
|
|
44
|
+
loading: boolean;
|
|
45
|
+
error: Error | null;
|
|
46
|
+
}>;
|
|
47
|
+
_errorComponent?: Component;
|
|
48
|
+
_loadingComponent?: Component;
|
|
49
|
+
_lazy?: boolean;
|
|
50
|
+
refresh?: (propName: string, options?: {
|
|
51
|
+
silent?: boolean;
|
|
52
|
+
}) => Promise<unknown>;
|
|
53
|
+
inject?: Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { computed } from 'vue';
|
|
11
|
+
import { useRoute } from 'vue-router';
|
|
12
|
+
export function useRouteResource(propName) {
|
|
13
|
+
const route = useRoute();
|
|
14
|
+
const refresh = (options) => __awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
return yield ((_b = (_a = route.meta).refresh) === null || _b === void 0 ? void 0 : _b.call(_a, propName, options));
|
|
17
|
+
});
|
|
18
|
+
const isLoading = computed(() => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const state = route.meta._injectionState;
|
|
21
|
+
return (_b = (_a = state === null || state === void 0 ? void 0 : state[propName]) === null || _a === void 0 ? void 0 : _a.loading) !== null && _b !== void 0 ? _b : false;
|
|
22
|
+
});
|
|
23
|
+
const error = computed(() => {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
const state = route.meta._injectionState;
|
|
26
|
+
return (_b = (_a = state === null || state === void 0 ? void 0 : state[propName]) === null || _a === void 0 ? void 0 : _a.error) !== null && _b !== void 0 ? _b : null;
|
|
27
|
+
});
|
|
28
|
+
return { refresh, isLoading, error };
|
|
29
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type PersistenceDriver } from '../../persistenceDrivers';
|
|
2
|
+
export interface StateOptions {
|
|
3
|
+
persist?: boolean;
|
|
4
|
+
persistSuffix?: string;
|
|
5
|
+
}
|
|
6
|
+
/** Generic type for change handlers. */
|
|
7
|
+
type ChangeHandler<T> = (val: T, oldVal: T) => void;
|
|
8
|
+
/** Type for accessing nested properties with dot notation. */
|
|
9
|
+
type PathValue<T, P extends string> = P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? T[K] extends Record<string, unknown> ? PathValue<T[K], Rest> : never : never : never;
|
|
10
|
+
/** Helper type to get all possible paths in an object. */
|
|
11
|
+
type PathsToStringProps<T> = T extends object ? {
|
|
12
|
+
[K in keyof T]: K extends string ? K | `${K}.${PathsToStringProps<T[K]>}` : never;
|
|
13
|
+
}[keyof T] : never;
|
|
14
|
+
/** Union type of all possible dot-notation paths in T. */
|
|
15
|
+
type Path<T> = keyof T | PathsToStringProps<T>;
|
|
16
|
+
export declare abstract class State<T extends object> {
|
|
17
|
+
private readonly properties;
|
|
18
|
+
private readonly _initial;
|
|
19
|
+
private readonly _persist;
|
|
20
|
+
private readonly _persistKey;
|
|
21
|
+
private _driver;
|
|
22
|
+
private _stateProxy;
|
|
23
|
+
private _watchStopFunctions;
|
|
24
|
+
private _resetHandlers;
|
|
25
|
+
private _watchIdCounter;
|
|
26
|
+
protected constructor(initial: T, options?: StateOptions);
|
|
27
|
+
/**
|
|
28
|
+
* Safe deep clone that preserves types
|
|
29
|
+
*/
|
|
30
|
+
private deepClone;
|
|
31
|
+
/**
|
|
32
|
+
* Ensure objects/arrays are cloned and wrapped in Vue reactivity.
|
|
33
|
+
*/
|
|
34
|
+
private wrapReactive;
|
|
35
|
+
/**
|
|
36
|
+
* Get a proxy to the state that allows direct property access and setting
|
|
37
|
+
* without using .value
|
|
38
|
+
*/
|
|
39
|
+
get state(): T;
|
|
40
|
+
/**
|
|
41
|
+
* Add a subscription to specific properties or nested properties
|
|
42
|
+
* @param paths Path(s) to the property. Can be:
|
|
43
|
+
* - A single path (top-level key or nested with dot notation)
|
|
44
|
+
* - An array of paths to watch (triggers when any changes)
|
|
45
|
+
* @param handler Function to call when the property changes
|
|
46
|
+
* @param options Optional configuration for debounce and executeOnReset
|
|
47
|
+
* @returns A function to remove the subscription
|
|
48
|
+
*/
|
|
49
|
+
subscribe<P extends Path<T>>(paths: P, handler: ChangeHandler<PathValue<T, P & string>>, options?: {
|
|
50
|
+
debounce?: number;
|
|
51
|
+
executeOnReset?: boolean;
|
|
52
|
+
}): () => void;
|
|
53
|
+
subscribe<P extends Path<T>>(paths: P[], handler: (changedPath: P, state: T) => void, options?: {
|
|
54
|
+
debounce?: number;
|
|
55
|
+
executeOnReset?: boolean;
|
|
56
|
+
}): () => void;
|
|
57
|
+
/**
|
|
58
|
+
* Internal method to set up a watcher for a specific path
|
|
59
|
+
*/
|
|
60
|
+
private setupWatcher;
|
|
61
|
+
/**
|
|
62
|
+
* Simple deep equality check
|
|
63
|
+
*/
|
|
64
|
+
private isEqual;
|
|
65
|
+
protected getPersistenceDriver(): PersistenceDriver;
|
|
66
|
+
export(): T;
|
|
67
|
+
import(data: Partial<T>): void;
|
|
68
|
+
reset(): void;
|
|
69
|
+
get persistKey(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Clean up all watchers when the state is no longer needed
|
|
72
|
+
*/
|
|
73
|
+
destroy(): void;
|
|
74
|
+
}
|
|
75
|
+
export {};
|