@civet/core 4.0.0 → 6.0.0

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.
@@ -6,7 +6,7 @@ import { Constructor } from './utilityTypes';
6
6
  export type RequestDetails<Query, Options> = {
7
7
  name: string;
8
8
  query: Query;
9
- empty: boolean;
9
+ disabled: boolean;
10
10
  options: Options | undefined;
11
11
  };
12
12
  export type ResourceBaseContext<Response, Query, Options, MetaType extends Meta> = {
@@ -18,7 +18,7 @@ export type ResourceBaseContext<Response, Query, Options, MetaType extends Meta>
18
18
  data: Response;
19
19
  meta: InferSchema<MetaType>;
20
20
  error: Error | undefined;
21
- isEmpty: boolean;
21
+ isDisabled: boolean;
22
22
  isIncomplete: boolean;
23
23
  isInitial: boolean;
24
24
  };
@@ -46,20 +46,25 @@ export interface GetCallback<Response> {
46
46
  (error: Error, done: boolean, result: undefined): void;
47
47
  }
48
48
  export type ContinuousGet<Response> = (callback: GetCallback<Response>) => void;
49
- export default abstract class DataProvider<Item, Query, Options, MetaType extends Meta = Meta, Response extends Item | Item[] = Item | Item[]> {
49
+ export type DataProviderExtend = {
50
+ context: <PluginProps, PluginTypes>(plugin: ContextPlugin<PluginProps, PluginTypes>) => void;
51
+ ui: <PluginProps, PluginTypes>(plugin: UIPlugin<PluginProps, PluginTypes>) => void;
52
+ };
53
+ export default abstract class DataProvider<Item, Query, Options, MetaType extends Meta = Meta, Response extends Item | Item[] = Item | Item[], ContextPluginProps = unknown, ContextPluginTypes = unknown, UIPluginProps = unknown, UIPluginTypes = unknown> {
50
54
  readonly _inferItem: Item;
51
55
  readonly _inferQuery: Query;
52
56
  readonly _inferOptions: Options;
53
57
  readonly _inferMetaType: MetaType;
54
58
  readonly _inferResponse: Response;
59
+ readonly _inferContextPluginProps: ContextPluginProps;
60
+ readonly _inferContextPluginTypes: ContextPluginTypes;
61
+ readonly _inferUIPluginProps: UIPluginProps;
62
+ readonly _inferUIPluginTypes: UIPluginTypes;
55
63
  notifier: ChannelNotifier<never[]>;
56
- readonly contextPlugins: ContextPlugin<unknown, unknown>[];
57
- readonly uiPlugins: UIPlugin<unknown, unknown>[];
64
+ readonly contextPlugins: ContextPlugin[];
65
+ readonly uiPlugins: UIPlugin[];
58
66
  constructor();
59
- extend(_extend: {
60
- context: (plugin: ContextPlugin<unknown, unknown>) => void;
61
- ui: (plugin: UIPlugin<unknown, unknown>) => void;
62
- }): void;
67
+ extend(_extend: DataProviderExtend): void;
63
68
  createInstance(): InferInstance<MetaType> | undefined;
64
69
  releaseInstance(_: InferInstance<MetaType>): void;
65
70
  subscribe(resource: string, callback: () => void): () => void;
@@ -68,7 +73,7 @@ export default abstract class DataProvider<Item, Query, Options, MetaType extend
68
73
  continuousGet<ResponseI extends Response = Response, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options: OptionsI | undefined, meta: MetaLike<MetaTypeI> | undefined, callback: GetCallback<ResponseI>, abortSignal?: AbortSignal): void;
69
74
  abstract handleGet(resource: string, query: Query, options: Options | undefined, meta: MetaType, abortSignal: AbortSignalProxy): Promise<Response | ContinuousGet<Response>> | Response | ContinuousGet<Response>;
70
75
  compareRequests(nextRequestDetails: RequestDetails<Query, Options>, prevRequestDetails: RequestDetails<Query, Options>): boolean;
71
- getEmptyResponse(_requestDetails: RequestDetails<Query, Options>): Response;
76
+ createEmptyResponse(_requestDetails: RequestDetails<Query, Options>): Response;
72
77
  shouldPersist(nextRequestDetails: RequestDetails<Query, Options>, prevRequestDetails: RequestDetails<Query, Options>, persistent: Persistence, _context: ResourceBaseContext<Response, Query, Options, MetaType>): boolean;
73
78
  compareItemVersions(_item1: Item, _item2: Item): boolean;
74
79
  getItemIdentifier(item: Item): string | undefined;
@@ -79,10 +84,14 @@ export declare const isDataProvider: (dataProvider: unknown) => boolean;
79
84
  export type DataProviderImplementation<DataProviderI extends GenericDataProvider, ConstructorArgs extends any[]> = Constructor<ConstructorArgs, DataProviderI & {
80
85
  handleGet(resource: string, query: InferQuery<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>, abortSignal: AbortSignalProxy): Promise<InferResponse<DataProviderI> | ContinuousGet<InferResponse<DataProviderI>>> | InferResponse<DataProviderI> | ContinuousGet<InferResponse<DataProviderI>>;
81
86
  }>;
82
- export type GenericDataProvider = DataProvider<unknown, unknown, unknown, Meta, unknown>;
87
+ export type GenericDataProvider = DataProvider<unknown, unknown, unknown, Meta, unknown, unknown, unknown, unknown, unknown>;
83
88
  export type GenericDataProviderImplementation = DataProviderImplementation<GenericDataProvider, any[]>;
84
89
  export type InferItem<DataProviderI extends GenericDataProvider> = DataProviderI['_inferItem'];
85
90
  export type InferQuery<DataProviderI extends GenericDataProvider> = DataProviderI['_inferQuery'];
86
91
  export type InferOptions<DataProviderI extends GenericDataProvider> = DataProviderI['_inferOptions'];
87
92
  export type InferMetaType<DataProviderI extends GenericDataProvider> = DataProviderI['_inferMetaType'];
88
93
  export type InferResponse<DataProviderI extends GenericDataProvider> = DataProviderI['_inferResponse'];
94
+ export type InferContextPluginProps<DataProviderI extends GenericDataProvider> = DataProviderI['_inferContextPluginProps'];
95
+ export type InferContextPluginTypes<DataProviderI extends GenericDataProvider> = DataProviderI['_inferContextPluginTypes'];
96
+ export type InferUIPluginProps<DataProviderI extends GenericDataProvider> = DataProviderI['_inferUIPluginProps'];
97
+ export type InferUIPluginTypes<DataProviderI extends GenericDataProvider> = DataProviderI['_inferUIPluginTypes'];
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, Persistence } from './DataProvider';
2
+ import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, Persistence, InferUIPluginProps, InferContextPluginProps } from './DataProvider';
3
3
  /**
4
4
  * Provides data based on the given request details and DataProvider.
5
5
  * Context provider for the ResourceContext.
@@ -8,7 +8,7 @@ import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQ
8
8
  *
9
9
  * The provided DataProvider must not be changed.
10
10
  */
11
- export default function Resource<DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ dataProvider, name, query, empty, options, persistent, children, ...rest }: {
11
+ export default function Resource<DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ dataProvider, name, query, disabled, options, persistent, children, ...rest }: {
12
12
  /** DataProvider to be used for requests - must not be changed */
13
13
  dataProvider?: DataProviderI;
14
14
  /** Resource name */
@@ -16,11 +16,10 @@ export default function Resource<DataProviderI extends GenericDataProvider, Resp
16
16
  /** Query instructions */
17
17
  query: QueryI;
18
18
  /** Disables fetching data, resulting in an empty data array */
19
- empty?: boolean;
19
+ disabled?: boolean;
20
20
  /** Query options for requests */
21
21
  options?: OptionsI;
22
22
  /** Whether stale data should be retained during the next request - this only applies if name did not change, unless set to "very" */
23
23
  persistent?: Persistence;
24
24
  children?: ReactNode;
25
- [rest: string]: unknown;
26
- }): import("react/jsx-runtime").JSX.Element;
25
+ } & InferContextPluginProps<DataProviderI> & InferUIPluginProps<DataProviderI>): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { PropsWithChildren, ReactNode } from 'react';
2
- import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
3
- export default function ResourceProvider<DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ resource, children, }: PropsWithChildren<{
4
- resource: ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI>;
5
- }>): ReactNode;
2
+ import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, ResourceContextValue, InferContextPluginTypes, InferUIPluginProps } from './DataProvider';
3
+ export default function ResourceProvider<DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ resource, children, ...rest }: PropsWithChildren<{
4
+ resource: ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI> & InferContextPluginTypes<DataProviderI>;
5
+ } & InferUIPluginProps<DataProviderI>>): ReactNode;
package/dist/context.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ConsumerProps, ExoticComponent, ReactNode } from 'react';
2
- import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
1
+ import { Consumer, ConsumerProps, ExoticComponent, Provider, ProviderProps, ReactNode } from 'react';
2
+ import { GenericDataProvider, InferResponse, InferMetaType, InferOptions, InferQuery, ResourceContextValue, InferContextPluginTypes, InferUIPluginTypes } from './DataProvider';
3
3
  export type ConfigContextValue<DataProviderI extends GenericDataProvider> = {
4
4
  dataProvider?: DataProviderI;
5
5
  };
@@ -8,8 +8,10 @@ export declare const ConfigConsumer: ExoticComponent<GenericDataProvider> & {
8
8
  <DataProviderI extends GenericDataProvider>(props: ConsumerProps<ConfigContextValue<DataProviderI>>): ReactNode;
9
9
  };
10
10
  export declare const useConfigContext: <DataProviderI extends GenericDataProvider>() => ConfigContextValue<DataProviderI>;
11
- export declare const ResourceContext: import('react').Context<ResourceContextValue<GenericDataProvider>>;
12
- export declare const ResourceConsumer: ExoticComponent<GenericDataProvider> & {
13
- <DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>(props: ConsumerProps<ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI>>): ReactNode;
11
+ export declare const ResourceContextProvider: Provider<GenericDataProvider> & {
12
+ <DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>(props: ProviderProps<ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI> & InferContextPluginTypes<DataProviderI> & InferUIPluginTypes<DataProviderI>>): ReactNode;
14
13
  };
15
- export declare const useResourceContext: <DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>() => ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI>;
14
+ export declare const ResourceConsumer: Consumer<GenericDataProvider> & {
15
+ <DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>(props: ConsumerProps<ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI> & InferContextPluginTypes<DataProviderI> & InferUIPluginTypes<DataProviderI>>): ReactNode;
16
+ };
17
+ export declare const useResourceContext: <DataProviderI extends GenericDataProvider, ResponseI extends InferResponse<DataProviderI> = InferResponse<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>() => ResourceContextValue<DataProviderI, ResponseI, QueryI, OptionsI, MetaTypeI> & InferContextPluginTypes<DataProviderI> & InferUIPluginTypes<DataProviderI>;
@@ -1,5 +1,14 @@
1
1
  import { GenericDataProviderImplementation } from './DataProvider';
2
2
  import { Constructor } from './utilityTypes';
3
- export type DataProviderImplementationWithPlugin<BaseDataProvider extends GenericDataProviderImplementation, PluginTypes> = Pick<BaseDataProvider, keyof BaseDataProvider> & Constructor<ConstructorParameters<BaseDataProvider>, InstanceType<BaseDataProvider> & PluginTypes>;
4
- export type DataProviderPlugin<BaseDataProvider extends GenericDataProviderImplementation, PluginTypes> = <BaseDataProviderT extends BaseDataProvider>(baseDataProviderClass: BaseDataProviderT) => DataProviderImplementationWithPlugin<BaseDataProviderT, PluginTypes>;
5
- export default function createPlugin<BaseDataProvider extends GenericDataProviderImplementation, PluginTypes>(plugin: (baseDataProviderClass: Pick<BaseDataProvider, keyof BaseDataProvider> & Constructor<any[], InstanceType<BaseDataProvider>>) => DataProviderImplementationWithPlugin<Pick<BaseDataProvider, keyof BaseDataProvider> & Constructor<any[], InstanceType<BaseDataProvider>>, PluginTypes>): DataProviderPlugin<BaseDataProvider, PluginTypes>;
3
+ type InstanceTypeExtension<BaseClass extends new (...args: any) => any, InstanceTypeExtension> = Pick<BaseClass, keyof BaseClass> & Constructor<ConstructorParameters<BaseClass>, InstanceType<BaseClass> & InstanceTypeExtension>;
4
+ type PluginBaseDataProvider<BaseDataProvider extends GenericDataProviderImplementation> = Pick<BaseDataProvider, keyof BaseDataProvider> & Constructor<any[], InstanceType<BaseDataProvider>>;
5
+ type PluginExtendedDataProvider<BaseDataProvider extends GenericDataProviderImplementation, PluginTypes> = InstanceTypeExtension<PluginBaseDataProvider<BaseDataProvider>, PluginTypes>;
6
+ export type DataProviderImplementationWithPlugin<BaseDataProvider extends GenericDataProviderImplementation, DataProviderPluginTypes, ContextPluginProps, ContextPluginTypes, UIPluginProps, UIPluginTypes> = InstanceTypeExtension<BaseDataProvider, {
7
+ _inferContextPluginProps: ContextPluginProps;
8
+ _inferContextPluginTypes: ContextPluginTypes;
9
+ _inferUIPluginProps: UIPluginProps;
10
+ _inferUIPluginTypes: UIPluginTypes;
11
+ } & DataProviderPluginTypes>;
12
+ export type DataProviderPlugin<BaseDataProvider extends GenericDataProviderImplementation, DataProviderPluginTypes, ContextPluginProps, ContextPluginTypes, UIPluginProps, UIPluginTypes> = <BaseDataProviderT extends BaseDataProvider>(baseDataProviderClass: BaseDataProviderT) => DataProviderImplementationWithPlugin<BaseDataProviderT, DataProviderPluginTypes, ContextPluginProps, ContextPluginTypes, UIPluginProps, UIPluginTypes>;
13
+ export default function createPlugin<BaseDataProvider extends GenericDataProviderImplementation, DataProviderPluginTypes = unknown, ContextPluginProps = unknown, ContextPluginTypes = unknown, UIPluginProps = unknown, UIPluginTypes = unknown>(plugin: (baseDataProviderClass: PluginBaseDataProvider<BaseDataProvider>) => PluginExtendedDataProvider<BaseDataProvider, DataProviderPluginTypes>): DataProviderPlugin<BaseDataProvider, DataProviderPluginTypes, ContextPluginProps, ContextPluginTypes, UIPluginProps, UIPluginTypes>;
14
+ export {};
package/dist/main.d.ts CHANGED
@@ -8,7 +8,7 @@ export type { ConfigContextValue } from './context';
8
8
  export { default as createPlugin } from './createPlugin';
9
9
  export type { DataProviderImplementationWithPlugin, DataProviderPlugin, } from './createPlugin';
10
10
  export { default as DataProvider, isDataProvider } from './DataProvider';
11
- export type { ContextPlugin, ContinuousGet, DataProviderImplementation, GenericDataProvider, GenericDataProviderImplementation, GetCallback, InferItem, InferMetaType, InferOptions, InferResponse, InferQuery, Persistence, RequestDetails, ResourceBaseContext, ResourceContextValue, UIPlugin, } from './DataProvider';
11
+ export type { ContextPlugin, ContinuousGet, DataProviderImplementation, GenericDataProvider, GenericDataProviderImplementation, GetCallback, InferContextPluginProps, InferContextPluginTypes, InferItem, InferMetaType, InferOptions, InferQuery, InferResponse, InferUIPluginProps, InferUIPluginTypes, Persistence, RequestDetails, ResourceBaseContext, ResourceContextValue, UIPlugin, } from './DataProvider';
12
12
  export { default as Meta } from './Meta';
13
13
  export type { InferInstance, InferSchema, MetaLike } from './Meta';
14
14
  export { default as Notifier } from './Notifier';