@donotdev/crud 0.0.13 → 0.0.15

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.
Files changed (138) hide show
  1. package/README.md +27 -19
  2. package/dist/CrudService.d.ts +84 -11
  3. package/dist/CrudService.d.ts.map +1 -1
  4. package/dist/CrudService.js +9 -1
  5. package/dist/CrudStore.d.ts.map +1 -1
  6. package/dist/CrudStore.js +1 -1
  7. package/dist/FieldRegistry.d.ts +40 -13
  8. package/dist/FieldRegistry.d.ts.map +1 -1
  9. package/dist/FieldRegistry.js +1 -1
  10. package/dist/adapters/FunctionsAdapter.d.ts +20 -26
  11. package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
  12. package/dist/adapters/FunctionsAdapter.js +1 -1
  13. package/dist/adapters/index.d.ts +0 -1
  14. package/dist/adapters/index.d.ts.map +1 -1
  15. package/dist/adapters/index.js +1 -1
  16. package/dist/components/CrudCard.d.ts +8 -0
  17. package/dist/components/CrudCard.d.ts.map +1 -0
  18. package/dist/components/CrudCard.js +1 -0
  19. package/dist/components/DateFilter.d.ts +30 -0
  20. package/dist/components/DateFilter.d.ts.map +1 -0
  21. package/dist/components/DateFilter.js +1 -0
  22. package/dist/components/DisplayThumbnail.d.ts +29 -0
  23. package/dist/components/DisplayThumbnail.d.ts.map +1 -0
  24. package/dist/components/DisplayThumbnail.js +1 -0
  25. package/dist/components/EntityFilters.d.ts +28 -15
  26. package/dist/components/EntityFilters.d.ts.map +1 -1
  27. package/dist/components/EntityFilters.js +1 -1
  28. package/dist/components/FormLayout.d.ts.map +1 -1
  29. package/dist/components/FormLayout.js +1 -1
  30. package/dist/components/__tests__/EntityFilters.test.d.ts +2 -0
  31. package/dist/components/__tests__/EntityFilters.test.d.ts.map +1 -0
  32. package/dist/components/__tests__/EntityFilters.test.js +1 -0
  33. package/dist/components/__tests__/FormFieldRenderer.test.d.ts +2 -0
  34. package/dist/components/__tests__/FormFieldRenderer.test.d.ts.map +1 -0
  35. package/dist/components/__tests__/FormFieldRenderer.test.js +1 -0
  36. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
  37. package/dist/components/fields/display/FileFieldDisplay.js +1 -1
  38. package/dist/components/fields/display/MultiDropdownDisplay.js +1 -1
  39. package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -1
  40. package/dist/components/fields/display/PasswordFieldDisplay.js +1 -1
  41. package/dist/components/fields/display/RichTextDisplay.d.ts.map +1 -1
  42. package/dist/components/fields/display/RichTextDisplay.js +2 -2
  43. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  44. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  45. package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
  46. package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
  47. package/dist/components/form/fields/DocumentFieldComponent.js +1 -1
  48. package/dist/components/form/fields/DurationFieldComponent.d.ts.map +1 -1
  49. package/dist/components/form/fields/DurationFieldComponent.js +1 -1
  50. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  51. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  52. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  53. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  54. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  55. package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
  56. package/dist/components/form/fields/PriceFieldComponent.js +1 -1
  57. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
  58. package/dist/components/form/fields/SwitchFieldComponent.js +1 -1
  59. package/dist/components/form/fields/internal/TiptapEditor.d.ts +4 -2
  60. package/dist/components/form/fields/internal/TiptapEditor.d.ts.map +1 -1
  61. package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
  62. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -1
  63. package/dist/components/form/internal/ImageViewerDialog.js +1 -1
  64. package/dist/components/index.d.ts +2 -0
  65. package/dist/components/index.d.ts.map +1 -1
  66. package/dist/components/index.js +1 -1
  67. package/dist/fieldTypeRegistry.d.ts +3 -0
  68. package/dist/fieldTypeRegistry.d.ts.map +1 -1
  69. package/dist/fieldTypeRegistry.js +1 -1
  70. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  71. package/dist/forms/hooks/useEntityForm.js +1 -1
  72. package/dist/forms/utils/getFieldsForOperation.d.ts.map +1 -1
  73. package/dist/forms/utils/translateFieldLabel.d.ts.map +1 -1
  74. package/dist/hooks/index.d.ts +2 -0
  75. package/dist/hooks/index.d.ts.map +1 -1
  76. package/dist/hooks/index.js +1 -1
  77. package/dist/hooks/useCrudFilters.d.ts +17 -0
  78. package/dist/hooks/useCrudFilters.d.ts.map +1 -0
  79. package/dist/hooks/useCrudFilters.js +1 -0
  80. package/dist/hooks/useFileUpload.d.ts.map +1 -1
  81. package/dist/hooks/useFileUpload.js +1 -1
  82. package/dist/hooks/useFormNavigationGuard.d.ts.map +1 -1
  83. package/dist/hooks/useFormNavigationGuard.js +1 -1
  84. package/dist/hooks/useRelatedItems.d.ts +1 -2
  85. package/dist/hooks/useRelatedItems.d.ts.map +1 -1
  86. package/dist/hooks/useRelatedItems.js +1 -1
  87. package/dist/index.d.ts +6 -4
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/registerBuiltinFieldTypes.d.ts.map +1 -1
  91. package/dist/registerBuiltinFieldTypes.js +1 -1
  92. package/dist/stores/FormStore.d.ts.map +1 -1
  93. package/dist/stores/FormStore.js +1 -1
  94. package/dist/stores/UploadStore.d.ts.map +1 -1
  95. package/dist/stores/UploadStore.js +1 -1
  96. package/dist/tsconfig.tsbuildinfo +1 -1
  97. package/dist/types.d.ts +26 -20
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/types.js +1 -0
  100. package/dist/useBaseCrudList.d.ts +1 -4
  101. package/dist/useBaseCrudList.d.ts.map +1 -1
  102. package/dist/useBaseCrudList.js +1 -1
  103. package/dist/useCrud.d.ts +1 -2
  104. package/dist/useCrud.d.ts.map +1 -1
  105. package/dist/useCrud.js +1 -1
  106. package/dist/useCrudCardList.d.ts +1 -2
  107. package/dist/useCrudCardList.d.ts.map +1 -1
  108. package/dist/useCrudCardList.js +1 -1
  109. package/dist/useCrudList.d.ts +1 -1
  110. package/dist/useCrudList.d.ts.map +1 -1
  111. package/dist/useCrudList.js +1 -1
  112. package/dist/utils/fileStorage.d.ts +10 -5
  113. package/dist/utils/fileStorage.d.ts.map +1 -1
  114. package/dist/utils/fileStorage.js +1 -1
  115. package/dist/utils/imageStorage.d.ts +9 -4
  116. package/dist/utils/imageStorage.d.ts.map +1 -1
  117. package/dist/utils/imageStorage.js +1 -1
  118. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
  119. package/dist/utils/mergeWithOptimistic.js +1 -1
  120. package/dist/utils/sanitizeHtml.d.ts +6 -0
  121. package/dist/utils/sanitizeHtml.d.ts.map +1 -0
  122. package/dist/utils/sanitizeHtml.js +1 -0
  123. package/dist/utils/scopeUtils.d.ts +1 -2
  124. package/dist/utils/scopeUtils.d.ts.map +1 -1
  125. package/dist/utils/scopeUtils.js +1 -1
  126. package/dist/utils/uploadValidation.d.ts +5 -4
  127. package/dist/utils/uploadValidation.d.ts.map +1 -1
  128. package/dist/utils/uploadValidation.js +1 -1
  129. package/package.json +12 -6
  130. package/dist/adapters/FirestoreAdapter.d.ts +0 -65
  131. package/dist/adapters/FirestoreAdapter.d.ts.map +0 -1
  132. package/dist/adapters/FirestoreAdapter.js +0 -1
  133. package/dist/components/EntityDisplayRenderer.d.ts +0 -43
  134. package/dist/components/EntityDisplayRenderer.d.ts.map +0 -1
  135. package/dist/components/EntityDisplayRenderer.js +0 -1
  136. package/dist/components/EntityFormRenderer.d.ts +0 -86
  137. package/dist/components/EntityFormRenderer.d.ts.map +0 -1
  138. package/dist/components/EntityFormRenderer.js +0 -1
package/dist/types.d.ts CHANGED
@@ -11,21 +11,25 @@
11
11
  * @since 0.0.1
12
12
  * @author AMBROISE PARK Consulting
13
13
  */
14
- import type { dndevSchema, QueryClient } from '@donotdev/core';
15
- import type { QueryOptions } from './adapters/FirestoreAdapter';
16
- import type { PaginatedQueryResult } from './adapters/FunctionsAdapter';
17
- /**
18
- * Backend type for CRUD operations
19
- *
20
- * @version 0.0.1
21
- * @since 0.0.1
22
- * @author AMBROISE PARK Consulting
23
- */
24
- export type BackendType = 'functions' | 'firestore';
14
+ import type { dndevSchema, QueryClient, QueryOptions, PaginatedQueryResult, ListSchemaType } from '@donotdev/core';
25
15
  /**
26
16
  * Optimistic operation status
27
17
  */
28
- export type OptimisticStatus = 'pending' | 'confirmed' | 'failed';
18
+ export declare const OPTIMISTIC_STATUSES: {
19
+ readonly PENDING: "pending";
20
+ readonly CONFIRMED: "confirmed";
21
+ readonly FAILED: "failed";
22
+ };
23
+ export type OptimisticStatus = (typeof OPTIMISTIC_STATUSES)[keyof typeof OPTIMISTIC_STATUSES];
24
+ /** Optimistic mutation operation kind */
25
+ export declare const CRUD_OPERATION: {
26
+ readonly ADD: "add";
27
+ readonly UPDATE: "update";
28
+ /** Full document replacement (set/upsert) — cache replaces, not merges */
29
+ readonly SET: "set";
30
+ readonly DELETE: "delete";
31
+ };
32
+ export type CrudOperation = (typeof CRUD_OPERATION)[keyof typeof CRUD_OPERATION];
29
33
  /**
30
34
  * Optimistic operation metadata
31
35
  * Contains both original data (for rollback) and current data (for display)
@@ -36,13 +40,16 @@ export interface OptimisticMeta {
36
40
  /** Current optimistic data to display (the new/updated value) */
37
41
  optimisticData: unknown;
38
42
  status: OptimisticStatus;
39
- operation: 'add' | 'update' | 'delete';
43
+ operation: CrudOperation;
40
44
  }
41
45
  /**
42
46
  * Filter state type for list views
43
47
  * Persists across navigation within CrudStore
48
+ * - string: single value filter (text, select)
49
+ * - string[]: multi-select filter (multiple values)
50
+ * - { min?: string; max?: string }: range filter (number, date)
44
51
  */
45
- export type FilterState = Record<string, string | {
52
+ export type FilterState = Record<string, string | string[] | {
46
53
  min?: string;
47
54
  max?: string;
48
55
  }>;
@@ -63,7 +70,6 @@ export interface CollectionUIState {
63
70
  * @author AMBROISE PARK Consulting
64
71
  */
65
72
  export interface CrudState {
66
- backend: BackendType | null;
67
73
  crudService: CrudServiceInterface | null;
68
74
  /** Global flag to hide success toasts (set from app config) */
69
75
  hideSuccessToasts: boolean;
@@ -87,7 +93,6 @@ export interface CrudState {
87
93
  */
88
94
  export interface CrudActions {
89
95
  setCrudService: (service: CrudServiceInterface) => void;
90
- setBackend: (backend: BackendType) => void;
91
96
  /** Set global flag to hide success toasts (called from app bootstrap) */
92
97
  setHideSuccessToasts: (hide: boolean) => void;
93
98
  setLoading: (collection: string, loading: boolean) => void;
@@ -162,10 +167,11 @@ export interface MutationOptions {
162
167
  * @author AMBROISE PARK Consulting
163
168
  */
164
169
  export interface CrudServiceInterface {
165
- initialize(backend: BackendType): Promise<void>;
170
+ /** Initialize the CRUD adapter from the provider registry. Call configureProviders() first. */
171
+ initialize(): Promise<void>;
166
172
  setStore(store: CrudStoreApi): void;
167
173
  /** Schema accepts unknown since OperationSchemas stores dndevSchema<unknown>. T is for return type. */
168
- getListQueryOptions<T>(collection: string, queryOptions: QueryOptions, schema: dndevSchema<unknown>, cacheOptions?: CacheOptions, schemaType?: 'list' | 'listCard'): {
174
+ getListQueryOptions<T>(collection: string, queryOptions: QueryOptions, schema: dndevSchema<unknown>, cacheOptions?: CacheOptions, schemaType?: ListSchemaType): {
169
175
  queryKey: readonly string[];
170
176
  queryFn: () => Promise<PaginatedQueryResult<T>>;
171
177
  staleTime: number;
@@ -177,9 +183,9 @@ export interface CrudServiceInterface {
177
183
  staleTime: number;
178
184
  };
179
185
  get<T>(collection: string, id: string, schema: dndevSchema<T>, options?: CacheOptions): Promise<T | null>;
180
- query<T>(collection: string, options: QueryOptions, schema: dndevSchema<T>, cacheOptions?: CacheOptions, schemaType?: 'list' | 'listCard'): Promise<PaginatedQueryResult<T>>;
186
+ query<T>(collection: string, options: QueryOptions, schema: dndevSchema<T>, cacheOptions?: CacheOptions, schemaType?: ListSchemaType): Promise<PaginatedQueryResult<T>>;
181
187
  set<T>(collection: string, id: string, data: T, schema: dndevSchema<T>, options?: MutationOptions): Promise<void>;
182
- update<T>(collection: string, id: string, data: Partial<T>, options?: MutationOptions): Promise<void>;
188
+ update<T>(collection: string, id: string, data: Partial<T>, schema?: dndevSchema<T>, options?: MutationOptions): Promise<void>;
183
189
  delete(collection: string, id: string, options?: MutationOptions): Promise<void>;
184
190
  add<T>(collection: string, data: T, schema: dndevSchema<T>, options?: MutationOptions): Promise<string>;
185
191
  subscribe<T>(collection: string, id: string, callback: (data: T | null, error?: Error) => void, schema: dndevSchema<T>): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -0,0 +1 @@
1
+ const e={PENDING:"pending",CONFIRMED:"confirmed",FAILED:"failed"},E={ADD:"add",UPDATE:"update",SET:"set",DELETE:"delete"};export{E as CRUD_OPERATION,e as OPTIMISTIC_STATUSES};
@@ -1,8 +1,5 @@
1
- import type { Entity, FeatureStatus } from '@donotdev/core';
2
- import type { QueryOptions } from './CrudService';
1
+ import type { Entity, FeatureStatus, ListSchemaType, QueryOptions } from '@donotdev/core';
3
2
  import type { UseCrudOptions } from './useCrud';
4
- /** Schema type determines which schema to use */
5
- export type ListSchemaType = 'list' | 'listCard';
6
3
  /** Pagination configuration */
7
4
  export interface PaginationConfig {
8
5
  /** Pagination mode: 'client' fetches all, 'server' fetches per page */
@@ -1 +1 @@
1
- {"version":3,"file":"useBaseCrudList.d.ts","sourceRoot":"","sources":["../src/useBaseCrudList.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAOzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjD,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,sCAAsC;AACtC,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CAwO1B"}
1
+ {"version":3,"file":"useBaseCrudList.d.ts","sourceRoot":"","sources":["../src/useBaseCrudList.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,sCAAsC;AACtC,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,gBAAgB,GAAG,IAAI,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CAwO1B"}
@@ -1 +1 @@
1
- import{useMemo as _,useCallback as J,useRef as z}from"react";import{useQuery as N}from"@donotdev/core";import{useCrudStore as U}from"./CrudStore";import{useCrud as D,getCrudServiceInstance as X,EMPTY_OPTIMISTIC as Z}from"./useCrud";import{mergeWithOptimistic as $}from"./utils/mergeWithOptimistic";import{injectScopeFilter as ee,getCurrentScopeValue as te}from"./utils/scopeUtils";function le(V,m,t,p={}){const j=p.enabled??!0,I=D("status"),c=I==="ready",E=D(V,p),{error:P,invalidate:M,_collection:a,_schemas:g,_cacheOptions:y,_scope:S}=E,q=U(e=>e.collections[a]?.optimistic||Z),v=z(new Map([[1,null]])),b=z(0),R=te(S),O=_(()=>{if(!c||!g)return null;const e=X();if(!e)return null;const f=m==="listCard"?g.listCard:g.list,u=ee(p.queryOptions,S);if(!t||t.mode==="client")return e.getListQueryOptions(a,u,f,y,m);const i=v.current,n=b.current,{page:d,pageSize:h}=t;let s,r;if(i.has(d))s=i.get(d)??void 0,r=h;else if(d>n&&i.has(n)){const o=d-n;s=i.get(n)??void 0,r=o*h}else s=void 0,r=d*h;return e.getListQueryOptions(a,{...u,limit:r,startAfterId:s},f,y,m)},[c,a,y,g?"hasSchema":"noSchema",m,t?.mode,t?.page,t?.pageSize,p.queryOptions,S?.provider,R]),{data:l,isLoading:K,isFetching:k,error:B,refetch:L}=N({queryKey:O?.queryKey??["crud",a,"disabled"],queryFn:O?.queryFn??(()=>Promise.resolve({items:[]})),staleTime:O?.staleTime,enabled:j&&!!O}),T=_(()=>{if(!l||!c)return{items:[],total:void 0};let e=l.items;if(t?.mode==="server"&&e.length>0){const s=v.current,r=b.current,{page:o,pageSize:C}=t,Y=e.length;if(Math.ceil(Y/C)>1||o>r){const A=s.has(o)?o:r+1;for(let F=A;F<=o;F++){const Q=(F-A+1)*C-1;if(Q<e.length){const H=e[Q];s.set(F+1,H.id)}}}l.lastVisible&&s.set(o+1,l.lastVisible),b.current=Math.max(r,o);const x=s.has(o)?0:(o-r-1)*C,G=x+C;e=e.slice(x,G)}const f=$(e,q),u=new Set(e.map(s=>s.id));let i=0,n=0;for(const[s,r]of Object.entries(q))r.operation==="add"&&!u.has(s)?i++:r.operation==="delete"&&u.has(s)&&n++;const h=(l.total??e.length)+i-n;return{items:f,total:t?h:void 0}},[l,q,c,t?.mode,t?.page,t?.pageSize]),w=J(async()=>{c&&(t?.mode==="server"&&(v.current=new Map([[1,null]]),b.current=0),await M(),await L())},[M,L,c,t?.mode]);if(!c){const e=async()=>{};return{status:I,data:{items:[],total:void 0},items:[],loading:!1,fetching:!1,error:P,mutate:e,refresh:e,isAvailable:!1}}const W=T?.items??[];return{status:I,data:T,items:W,loading:K,fetching:k,error:B??P,mutate:w,refresh:w,isAvailable:!0}}export{le as useBaseCrudList};
1
+ import{useMemo as w,useCallback as H,useRef as x}from"react";import{useQuery as J}from"@donotdev/core";import{useCrudStore as X}from"./CrudStore";import{useCrud as Q,getCrudServiceInstance as Z,EMPTY_OPTIMISTIC as $}from"./useCrud";import{mergeWithOptimistic as ee}from"./utils/mergeWithOptimistic";import{injectScopeFilter as te,getCurrentScopeValue as se}from"./utils/scopeUtils";import{CRUD_OPERATION as R}from"./types";function de(z,m,t,p={}){const V=p.enabled??!0,I=Q("status"),c=I==="ready",j=Q(z,p),{error:P,invalidate:D,_collection:a,_schemas:g,_cacheOptions:y,_scope:S}=j,q=X(e=>e.collections[a]?.optimistic||$),v=x(new Map([[1,null]])),O=x(0),K=se(S),b=w(()=>{if(!c||!g)return null;const e=Z();if(!e)return null;const f=m==="listCard"?g.listCard:g.list,u=te(p.queryOptions,S);if(!t||t.mode==="client")return e.getListQueryOptions(a,u,f,y,m);const i=v.current,n=O.current,{page:d,pageSize:h}=t;let s,r;if(i.has(d))s=i.get(d)??void 0,r=h;else if(d>n&&i.has(n)){const o=d-n;s=i.get(n)??void 0,r=o*h}else s=void 0,r=d*h;return e.getListQueryOptions(a,{...u,limit:r,startAfter:s},f,y,m)},[c,a,y,g?"hasSchema":"noSchema",m,t?.mode,t?.page,t?.pageSize,p.queryOptions,S?.provider,K]),{data:l,isLoading:k,isFetching:B,error:N,refetch:T}=J({queryKey:b?.queryKey??["crud",a,"disabled"],queryFn:b?.queryFn??(()=>Promise.resolve({items:[]})),staleTime:b?.staleTime,enabled:V&&!!b}),A=w(()=>{if(!l||!c)return{items:[],total:void 0};let e=l.items;if(t?.mode==="server"&&e.length>0){const s=v.current,r=O.current,{page:o,pageSize:C}=t,W=e.length;if(Math.ceil(W/C)>1||o>r){const M=s.has(o)?o:r+1;for(let F=M;F<=o;F++){const _=(F-M+1)*C-1;if(_<e.length){const G=e[_];s.set(F+1,G.id)}}}l.lastVisible&&s.set(o+1,l.lastVisible),O.current=Math.max(r,o);const L=s.has(o)?0:(o-r-1)*C,Y=L+C;e=e.slice(L,Y)}const f=ee(e,q),u=new Set(e.map(s=>s.id));let i=0,n=0;for(const[s,r]of Object.entries(q))r.operation===R.ADD&&!u.has(s)?i++:r.operation===R.DELETE&&u.has(s)&&n++;const h=(l.total??e.length)+i-n;return{items:f,total:t?h:void 0}},[l,q,c,t?.mode,t?.page,t?.pageSize]),E=H(async()=>{c&&(t?.mode==="server"&&(v.current=new Map([[1,null]]),O.current=0),await D(),await T())},[D,T,c,t?.mode]);if(!c){const e=async()=>{};return{status:I,data:{items:[],total:void 0},items:[],loading:!1,fetching:!1,error:P,mutate:e,refresh:e,isAvailable:!1}}const U=A?.items??[];return{status:I,data:A,items:U,loading:k,fetching:B,error:N??P,mutate:E,refresh:E,isAvailable:!0}}export{de as useBaseCrudList};
package/dist/useCrud.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { dndevSchema, Entity, FeatureStatus, OperationSchemas, CrudAPI, ScopeConfig } from '@donotdev/core';
2
- import type { CrudServiceInterface, CacheOptions, BackendType } from './types';
2
+ import type { CrudServiceInterface, CacheOptions } from './types';
3
3
  export declare const EMPTY_DATA: Record<string, unknown>;
4
4
  export declare const EMPTY_OPTIMISTIC: Record<string, unknown>;
5
5
  /**
@@ -7,7 +7,6 @@ export declare const EMPTY_OPTIMISTIC: Record<string, unknown>;
7
7
  */
8
8
  export declare function getCrudServiceInstance(): CrudServiceInterface | null;
9
9
  export interface UseCrudOptions<T> {
10
- backend?: BackendType;
11
10
  schema?: dndevSchema<T>;
12
11
  /** Entity definition - auto-generates schema if schema not provided */
13
12
  entity?: Entity;
@@ -1 +1 @@
1
- {"version":3,"file":"useCrud.d.ts","sourceRoot":"","sources":["../src/useCrud.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,WAAW,EAEZ,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AAM5D;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAMD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAElD,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,8BAA8B;IAC9B,aAAa,EAAE,YAAY,CAAC;IAC5B,wDAAwD;IACxD,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAAC;AACtD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC;AACpB,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"useCrud.d.ts","sourceRoot":"","sources":["../src/useCrud.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AAKxB,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EAEb,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AAM5D;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAMD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAElD,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,8BAA8B;IAC9B,aAAa,EAAE,YAAY,CAAC;IAC5B,wDAAwD;IACxD,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAAC;AACtD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC;AACpB,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC"}
package/dist/useCrud.js CHANGED
@@ -1 +1 @@
1
- "use client";import{useEffect as Q,useMemo as w,useCallback as a}from"react";import{useFeatureConsent as V,FRAMEWORK_FEATURES as W,FEATURE_STATUS as h,handleError as Z,isClient as $,createSchemas as H,DEGRADED_CRUD_API as J}from"@donotdev/core";import{getCrudService as X}from"./CrudService";import{useCrudStore as l}from"./CrudStore";import{injectScope as F,injectScopeFilter as O}from"./utils/scopeUtils";const re={},ne={};let P=null,E=null,g=!1;function o(){return P}function ae(d,u={}){const S=V(W.CRUD),k=l(e=>e.crudService),T=S&&!k,p=S?T?h.INITIALIZING:h.READY:h.DEGRADED;if(d==="status")return p;const v=typeof d=="object"?d:u.entity,t=typeof d=="string"?d:d.collection,i=v?.scope,m=u.backend||"functions",b=u.noCache??!1,A=u.staleTime,f=w(()=>({noCache:b,staleTime:A}),[b,A]),s=w(()=>{if(u.schema){const e=u.schema;return{create:e,draft:e,update:e,get:e,list:e,listCard:e,delete:e}}if(v)return H(v)},[u.schema?"custom":v?.name,t]),x=l(e=>e.collections[t]?.loading||!1),C=l(e=>e.collections[t]?.error||null),M=null;Q(()=>{if(!$()||!S||!s)return;const{crudService:e,backend:r}=l.getState();e&&r===m||E||(E=(async()=>{try{const c=X();P=c,c.setStore(l),await c.initialize(m),g=!1,l.getState().setBackend(m),l.getState().setCrudService(c)}catch(c){g||(Z(c,{userMessage:"Failed to initialize CRUD service.",context:{backend:m,collection:t},severity:"error"}),g=!0)}finally{E=null}})())},[S,m,t,s?"hasSchema":"noSchema"]);const _=T||x,N=p===h.READY,z=a(async e=>{const r=o();return!r||!s?null:r.get(t,e,s.get,f)},[t,s?"hasSchema":"noSchema",f]),Y=a(async(e,r,c)=>{const n=o();if(!n||!s)return;const D=F(r,i),L=D?.status==="draft"?s.draft:s.create;await n.set(t,e,D,L,c)},[t,s?"hasSchema":"noSchema",i?.provider]),j=a(async(e,r,c)=>{const n=o();n&&await n.update(t,e,r,c)},[t]),q=a(async(e,r)=>{const c=o();c&&await c.delete(t,e,r)},[t]),G=a(async(e,r)=>{const c=o();if(!c||!s)return"";const n=F(e,i),U=n?.status==="draft"?s.draft:s.create;return c.add(t,n,U,r)},[t,s?"hasSchema":"noSchema",i?.provider]),B=a(async e=>{const r=o();if(!r||!s)return[];const c=O(e,i);return(await r.query(t,c,s.list,f)).items},[t,s?"hasSchema":"noSchema",f,i?.provider]),I=a((e,r)=>{const c=o();return!c||!s?()=>{}:c.subscribe(t,e,r,s.get)},[t,s?"hasSchema":"noSchema"]),R=a((e,r)=>{const c=o();return!c||!s?()=>{}:c.subscribeToCollection(t,e,r,s.list)},[t,s?"hasSchema":"noSchema"]),y=a(async()=>{const e=o();e&&await e.invalidateCollection(t)},[t]);return N?{status:h.READY,data:M,loading:_,error:C,get:z,set:Y,update:j,delete:q,add:G,query:B,subscribe:I,subscribeToCollection:R,invalidate:y,isAvailable:!0,_collection:t,_schemas:s,_cacheOptions:f,_scope:i}:{...J,status:p,loading:_,error:C,subscribe:I,subscribeToCollection:R,invalidate:y,_collection:t,_schemas:s,_cacheOptions:f,_scope:i}}export{re as EMPTY_DATA,ne as EMPTY_OPTIMISTIC,o as getCrudServiceInstance,ae as useCrud};
1
+ "use client";import{useEffect as Q,useMemo as w,useCallback as a}from"react";import{useFeatureConsent as V,FRAMEWORK_FEATURES as W,FEATURE_STATUS as m,handleError as Z,isClient as $,createSchemas as B,DEGRADED_CRUD_API as H}from"@donotdev/core";import{getCrudService as J}from"./CrudService";import{useCrudStore as u}from"./CrudStore";import{injectScope as F,injectScopeFilter as X}from"./utils/scopeUtils";const ce={},re={};let p=null,E=null,g=!1;function o(){return p}function ne(l,d={}){const h=V(W.CRUD),P=u(e=>e.crudService),T=h&&!P,v=h?T?m.INITIALIZING:m.READY:m.DEGRADED;if(l==="status")return v;const S=typeof l=="object"?l:d.entity,s=typeof l=="string"?l:l.collection,i=S?.scope,A=d.noCache??!1,C=d.staleTime,f=w(()=>({noCache:A,staleTime:C}),[A,C]),t=w(()=>{if(d.schema){const e=d.schema;return{create:e,draft:e,update:e,get:e,list:e,listCard:e,delete:e}}if(S)return B(S)},[d.schema,S?.name,s]),x=u(e=>e.collections[s]?.loading||!1),_=u(e=>e.collections[s]?.error||null),M=null;Q(()=>{if(!$()||!h||!t)return;const{crudService:e}=u.getState();e||p||E||(E=(async()=>{try{if(p||u.getState().crudService)return;const c=J();p=c,c.setStore(u),await c.initialize(),g=!1,u.getState().setCrudService(c)}catch(c){g||(Z(c,{userMessage:"Failed to initialize CRUD service.",context:{collection:s},severity:"error"}),g=!0)}finally{E=null}})())},[h,s,t?"hasSchema":"noSchema"]);const b=T||x,N=v===m.READY,z=a(async e=>{const c=o();return!c||!t?null:c.get(s,e,t.get,f)},[s,t?"hasSchema":"noSchema",f]),Y=a(async(e,c,r)=>{const n=o();if(!n||!t)return;const D=F(c,i),k=D?.status==="draft"?t.draft:t.create;await n.set(s,e,D,k,r)},[s,t?"hasSchema":"noSchema",i?.provider]),j=a(async(e,c,r)=>{const n=o();n&&await n.update(s,e,c,t?.update,r)},[s,t]),q=a(async(e,c)=>{const r=o();r&&await r.delete(s,e,c)},[s]),G=a(async(e,c)=>{const r=o();if(!r||!t)return"";const n=F(e,i),U=n?.status==="draft"?t.draft:t.create;return r.add(s,n,U,c)},[s,t?"hasSchema":"noSchema",i?.provider]),L=a(async e=>{const c=o();if(!c||!t)return[];const r=X(e,i);return(await c.query(s,r,t.list,f)).items},[s,t?"hasSchema":"noSchema",f,i?.provider]),I=a((e,c)=>{const r=o();return!r||!t?()=>{}:r.subscribe(s,e,c,t.get)},[s,t?"hasSchema":"noSchema"]),R=a((e,c)=>{const r=o();return!r||!t?()=>{}:r.subscribeToCollection(s,e,c,t.list)},[s,t?"hasSchema":"noSchema"]),y=a(async()=>{const e=o();e&&await e.invalidateCollection(s)},[s]);return N?{status:m.READY,data:M,loading:b,error:_,get:z,set:Y,update:j,delete:q,add:G,query:L,subscribe:I,subscribeToCollection:R,invalidate:y,isAvailable:!0,_collection:s,_schemas:t,_cacheOptions:f,_scope:i}:{...H,status:v,loading:b,error:_,subscribe:I,subscribeToCollection:R,invalidate:y,_collection:s,_schemas:t,_cacheOptions:f,_scope:i}}export{ce as EMPTY_DATA,re as EMPTY_OPTIMISTIC,o as getCrudServiceInstance,ne as useCrud};
@@ -7,8 +7,7 @@
7
7
  * @since 0.0.1
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
10
- import type { Entity, FeatureStatus } from '@donotdev/core';
11
- import type { QueryOptions } from './CrudService';
10
+ import type { Entity, FeatureStatus, QueryOptions } from '@donotdev/core';
12
11
  import type { UseCrudOptions } from './useCrud';
13
12
  export interface UseCrudCardListOptions<T> extends UseCrudOptions<T> {
14
13
  /** Automatically fetch data on mount (default: true) */
@@ -1 +1 @@
1
- {"version":3,"file":"useCrudCardList.d.ts","sourceRoot":"","sources":["../src/useCrudCardList.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CAgC1B"}
1
+ {"version":3,"file":"useCrudCardList.d.ts","sourceRoot":"","sources":["../src/useCrudCardList.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CA+B1B"}
@@ -1 +1 @@
1
- import{useBaseCrudList as r}from"./useBaseCrudList";function l(t,a={}){const s={enabled:a.enabled,queryOptions:a.queryOptions,backend:a.backend,schema:a.schema,entity:a.entity,staleTime:a.staleTime,noCache:a.noCache},e=r(t,"listCard",null,s);return{status:e.status,data:e.data?{items:e.data.items}:null,items:e.items,loading:e.loading,fetching:e.fetching,error:e.error,mutate:e.mutate,refresh:e.refresh,isAvailable:e.isAvailable}}export{l as useCrudCardList};
1
+ import{useBaseCrudList as r}from"./useBaseCrudList";function l(a,t={}){const s={enabled:t.enabled,queryOptions:t.queryOptions,schema:t.schema,entity:t.entity,staleTime:t.staleTime,noCache:t.noCache},e=r(a,"listCard",null,s);return{status:e.status,data:e.data?{items:e.data.items}:null,items:e.items,loading:e.loading,fetching:e.fetching,error:e.error,mutate:e.mutate,refresh:e.refresh,isAvailable:e.isAvailable}}export{l as useCrudCardList};
@@ -8,7 +8,7 @@
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
10
10
  import type { Entity, FeatureStatus } from '@donotdev/core';
11
- import type { QueryOptions } from './CrudService';
11
+ import type { QueryOptions } from '@donotdev/core';
12
12
  import type { UseCrudOptions } from './useCrud';
13
13
  export interface UseCrudListOptions<T> extends UseCrudOptions<T> {
14
14
  /** Automatically fetch data on mount (default: true) */
@@ -1 +1 @@
1
- {"version":3,"file":"useCrudList.d.ts","sourceRoot":"","sources":["../src/useCrudList.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC9D,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iFAAiF;IACjF,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACnE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,kBAAkB,CAAC,CAAC,CAAM,GAClC,iBAAiB,CAAC,CAAC,CAAC,CA6BtB"}
1
+ {"version":3,"file":"useCrudList.d.ts","sourceRoot":"","sources":["../src/useCrudList.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC9D,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iFAAiF;IACjF,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACnE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,kBAAkB,CAAC,CAAC,CAAM,GAClC,iBAAiB,CAAC,CAAC,CAAC,CA4BtB"}
@@ -1 +1 @@
1
- import{useBaseCrudList as r}from"./useBaseCrudList";function u(a,e={}){const n=e.pagination??"client",t=e.page??1,c=e.pageSize??10,i={mode:n,page:t,pageSize:c},s={enabled:e.enabled,queryOptions:e.queryOptions,backend:e.backend,schema:e.schema,entity:e.entity,staleTime:e.staleTime,noCache:e.noCache};return r(a,"list",i,s)}export{u as useCrudList};
1
+ import{useBaseCrudList as r}from"./useBaseCrudList";function g(a,e={}){const t=e.pagination??"client",n=e.page??1,i=e.pageSize??10,c={mode:t,page:n,pageSize:i},s={enabled:e.enabled,queryOptions:e.queryOptions,schema:e.schema,entity:e.entity,staleTime:e.staleTime,noCache:e.noCache};return r(a,"list",c,s)}export{g as useCrudList};
@@ -1,5 +1,10 @@
1
- import type { UploadProgressCallback } from '@donotdev/firebase';
2
1
  import type { FileAsset } from '@donotdev/core';
2
+ /** Progress callback for upload operations (local definition to avoid static Firebase import) */
3
+ type UploadProgressCallback = (progress: {
4
+ bytesTransferred: number;
5
+ totalBytes: number;
6
+ progress: number;
7
+ }) => void;
3
8
  export type { FileAsset };
4
9
  export interface UploadProgress {
5
10
  bytesTransferred: number;
@@ -15,16 +20,16 @@ export interface UploadFileOptions {
15
20
  onProgress?: UploadProgressCallback;
16
21
  }
17
22
  /**
18
- * Upload a file to Firebase Storage with progress tracking
19
- * Generic version for any file type (documents, PDFs, etc.)
23
+ * Upload a file to storage with progress tracking.
24
+ * Uses configured storage provider, or Firebase as default fallback.
20
25
  */
21
26
  export declare function uploadFile(file: File, options?: UploadFileOptions): Promise<FileAsset>;
22
27
  /**
23
- * Upload multiple files to Firebase Storage
28
+ * Upload multiple files to storage
24
29
  */
25
30
  export declare function uploadFiles(files: File[], options?: UploadFileOptions): Promise<FileAsset[]>;
26
31
  /**
27
- * Delete a file from Firebase Storage
32
+ * Delete a file from storage
28
33
  */
29
34
  export declare function deleteFile(asset: FileAsset): Promise<void>;
30
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fileStorage.d.ts","sourceRoot":"","sources":["../../src/utils/fileStorage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAkCpB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
1
+ {"version":3,"file":"fileStorage.d.ts","sourceRoot":"","sources":["../../src/utils/fileStorage.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,iGAAiG;AACjG,KAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,IAAI,CAAC;AAEX,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAkDpB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
@@ -1 +1 @@
1
- "use client";import{handleError as p}from"@donotdev/core";import{uploadFileResumable as u,deleteFileByUrl as d}from"@donotdev/firebase";function f(e){return e.replace(/[^a-zA-Z0-9.-]/g,"_").replace(/_{2,}/g,"_").toLowerCase()}async function x(e,t={}){const{storagePath:r="uploads/files",filename:n,onProgress:a}=t,o=Date.now(),i=f(e.name),c=n||`${o}_${i}`,l=`${r}/${c}`;try{const{promise:s}=u(e,{basePath:r,filename:c,onProgress:a,metadata:{contentType:e.type}});return{url:(await s).url,filename:e.name,size:e.size,mimeType:e.type,uploadedAt:new Date().toISOString()}}catch(s){throw p(s,{userMessage:"Failed to upload file",severity:"error",context:{filename:e.name,fileSize:e.size}})}}async function v(e,t={}){const r=[],n=e.reduce((o,i)=>o+i.size,0);let a=0;for(const o of e){const i=t.onProgress?l=>{const s=l.bytesTransferred/l.totalBytes*o.size;t.onProgress({bytesTransferred:a+s,totalBytes:n,progress:(a+s)/n*100})}:void 0,c=await x(o,{...t,onProgress:i});r.push(c),a+=o.size}return r}async function M(e){try{await d(e.url)}catch(t){throw p(t,{userMessage:"Failed to delete file",severity:"error",context:{url:e.url,filename:e.filename}}),t}}function S(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(e){const t=e.split(".");return t.length>1?t.pop().toLowerCase():""}function P(e,t){const r=t?m(t):"";if(e){if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e==="application/pdf")return"pdf";if(e.includes("word")||e.includes("document"))return"doc";if(e.includes("excel")||e.includes("spreadsheet"))return"xls";if(e.includes("powerpoint")||e.includes("presentation"))return"ppt"}switch(r){case"pdf":return"pdf";case"doc":case"docx":return"doc";case"xls":case"xlsx":case"csv":return"xls";case"ppt":case"pptx":return"ppt";case"md":case"txt":return"text";case"html":case"htm":return"html";case"zip":case"rar":case"7z":return"archive";default:return"file"}}function B(e){if(e===0)return"0 B";const t=1024,r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,n)).toFixed(1))} ${r[n]}`}const h=["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","text/plain","text/markdown","text/html","text/csv"],g=[".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".html",".csv"];function E(){return[...h,...g].join(",")}export{g as DOCUMENT_EXTENSIONS,h as DOCUMENT_MIME_TYPES,M as deleteFile,B as formatFileSize,S as generateFileId,E as getDocumentAcceptString,m as getFileExtension,P as getFileIcon,x as uploadFile,v as uploadFiles};
1
+ "use client";import{handleError as d,hasProvider as f,getProvider as x}from"@donotdev/core";function m(e){return e.replace(/[^a-zA-Z0-9.-]/g,"_").replace(/_{2,}/g,"_").toLowerCase()}async function g(e,t={}){const{storagePath:r="uploads/files",filename:n,onProgress:s}=t,a=Date.now(),i=m(e.name),c=n||`${a}_${i}`,l=`${r}/${c}`;try{let o;if(f("storage"))o=(await x("storage").upload(e,{storagePath:r,filename:c,onProgress:s?u=>s({bytesTransferred:0,totalBytes:0,progress:u}):void 0})).url;else{const{uploadFileResumable:p}=await import("@donotdev/firebase"),{promise:u}=p(e,{basePath:r,filename:c,onProgress:s,metadata:{contentType:e.type}});o=(await u).url}return{url:o,filename:e.name,size:e.size,mimeType:e.type,uploadedAt:new Date().toISOString()}}catch(o){throw d(o,{userMessage:"Failed to upload file",severity:"error",context:{filename:e.name,fileSize:e.size}})}}async function P(e,t={}){const r=[],n=e.reduce((a,i)=>a+i.size,0);let s=0;for(const a of e){const i=t.onProgress?l=>{const o=l.bytesTransferred/l.totalBytes*a.size;t.onProgress({bytesTransferred:s+o,totalBytes:n,progress:(s+o)/n*100})}:void 0,c=await g(a,{...t,onProgress:i});r.push(c),s+=a.size}return r}async function M(e){try{if(f("storage"))await x("storage").delete(e.url);else{const{deleteFileByUrl:t}=await import("@donotdev/firebase");await t(e.url)}}catch(t){throw d(t,{userMessage:"Failed to delete file",severity:"error",context:{url:e.url,filename:e.filename}}),t}}function S(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function h(e){const t=e.split(".");return t.length>1?t.pop().toLowerCase():""}function B(e,t){const r=t?h(t):"";if(e){if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";if(e==="application/pdf")return"pdf";if(e.includes("word")||e.includes("document"))return"doc";if(e.includes("excel")||e.includes("spreadsheet"))return"xls";if(e.includes("powerpoint")||e.includes("presentation"))return"ppt"}switch(r){case"pdf":return"pdf";case"doc":case"docx":return"doc";case"xls":case"xlsx":case"csv":return"xls";case"ppt":case"pptx":return"ppt";case"md":case"txt":return"text";case"html":case"htm":return"html";case"zip":case"rar":case"7z":return"archive";default:return"file"}}function E(e){if(e===0)return"0 B";const t=1024,r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,n)).toFixed(1))} ${r[n]}`}const w=["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","text/plain","text/markdown","text/html","text/csv"],z=[".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".html",".csv"];function $(){return[...w,...z].join(",")}export{z as DOCUMENT_EXTENSIONS,w as DOCUMENT_MIME_TYPES,M as deleteFile,E as formatFileSize,S as generateFileId,$ as getDocumentAcceptString,h as getFileExtension,B as getFileIcon,g as uploadFile,P as uploadFiles};
@@ -1,5 +1,10 @@
1
- import type { UploadProgressCallback } from '@donotdev/firebase';
2
1
  import type { Picture } from '@donotdev/core';
2
+ /** Progress callback for upload operations (local definition to avoid static Firebase import) */
3
+ type UploadProgressCallback = (progress: {
4
+ bytesTransferred: number;
5
+ totalBytes: number;
6
+ progress: number;
7
+ }) => void;
3
8
  export type { Picture };
4
9
  export interface UploadProgress {
5
10
  bytesTransferred: number;
@@ -15,12 +20,12 @@ export interface UploadImageOptions {
15
20
  onProgress?: UploadProgressCallback;
16
21
  }
17
22
  /**
18
- * Upload full and thumbnail images to Firebase Storage with progress tracking
19
- * Uses @donotdev/firebase uploadFileResumable for progress callbacks
23
+ * Upload full and thumbnail images to storage with progress tracking.
24
+ * Uses configured storage provider, or Firebase as default fallback.
20
25
  */
21
26
  export declare function uploadImage(fullBlob: Blob, thumbBlob: Blob, originalFilename: string, options?: UploadImageOptions): Promise<Picture>;
22
27
  /**
23
- * Delete image from Firebase Storage using @donotdev/firebase utilities
28
+ * Delete image from storage. Uses configured provider, or Firebase as default fallback.
24
29
  */
25
30
  export declare function deleteImage(picture: Picture): Promise<void>;
26
31
  //# sourceMappingURL=imageStorage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"imageStorage.d.ts","sourceRoot":"","sources":["../../src/utils/imageStorage.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAmFlB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjE"}
1
+ {"version":3,"file":"imageStorage.d.ts","sourceRoot":"","sources":["../../src/utils/imageStorage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,iGAAiG;AACjG,KAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,IAAI,CAAC;AAEX,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CA6GlB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE"}
@@ -1 +1 @@
1
- import{handleError as _}from"@donotdev/core";import{uploadFileResumable as c,deleteFileByUrl as i,getFileUrl as m}from"@donotdev/firebase";function F(e){return e.replace(/[^a-zA-Z0-9.-]/g,"_").replace(/_{2,}/g,"_").toLowerCase()}async function N(e,l,b,h={}){const{storagePath:r="uploads/images",filename:f,onProgress:s}=h,p=Date.now(),t=(f||`${p}_${F(b)}`).replace(/\.[^/.]+$/,""),w=`${r}/${t}_full.webp`,g=`${r}/${t}_thumb.webp`;try{const u=s?a=>{s({bytesTransferred:a.bytesTransferred,totalBytes:a.totalBytes*2,progress:a.progress*.5})}:void 0,o=new File([e],`${t}_full.webp`,{type:"image/webp"}),{promise:n}=c(o,{basePath:r,filename:`${t}_full.webp`,onProgress:u,metadata:{contentType:"image/webp"}}),d=(await n).url,y=s?a=>{s({bytesTransferred:a.bytesTransferred+e.size,totalBytes:e.size+l.size,progress:50+a.progress*.5})}:void 0,P=new File([l],`${t}_thumb.webp`,{type:"image/webp"}),{promise:U}=c(P,{basePath:r,filename:`${t}_thumb.webp`,onProgress:y,metadata:{contentType:"image/webp"}}),$=(await U).url;return{fullUrl:d,thumbUrl:$}}catch(u){try{const o=await m(w).catch(()=>null),n=await m(g).catch(()=>null);o&&await i(o).catch(()=>{}),n&&await i(n).catch(()=>{})}catch{}throw u}}async function k(e){try{await Promise.all([i(e.fullUrl),i(e.thumbUrl)])}catch(l){throw _(l,{userMessage:"Failed to delete image",severity:"error",context:{fullUrl:e.fullUrl,thumbUrl:e.thumbUrl}}),l}}export{k as deleteImage,N as uploadImage};
1
+ import{handleError as F,hasProvider as b,getProvider as f}from"@donotdev/core";function R(e){return e.replace(/[^a-zA-Z0-9.-]/g,"_").replace(/_{2,}/g,"_").toLowerCase()}async function B(e,t,p,y={}){const{storagePath:o="uploads/images",filename:P,onProgress:a}=y,U=Date.now(),l=(P||`${U}_${R(p)}`).replace(/\.[^/.]+$/,""),h=`${o}/${l}_full.webp`,d=`${o}/${l}_thumb.webp`;try{const c=new File([e],`${l}_full.webp`,{type:"image/webp"}),s=new File([t],`${l}_thumb.webp`,{type:"image/webp"});let n,i;if(b("storage")){const r=f("storage");n=(await r.upload(c,{storagePath:o,filename:`${l}_full.webp`,onProgress:a?m=>a({bytesTransferred:0,totalBytes:0,progress:m*.5}):void 0})).url,i=(await r.upload(s,{storagePath:o,filename:`${l}_thumb.webp`,onProgress:a?m=>a({bytesTransferred:0,totalBytes:0,progress:50+m*.5}):void 0})).url}else{const{uploadFileResumable:r}=await import("@donotdev/firebase"),g=a?u=>{a({bytesTransferred:u.bytesTransferred,totalBytes:u.totalBytes*2,progress:u.progress*.5})}:void 0,{promise:w}=r(c,{basePath:o,filename:`${l}_full.webp`,onProgress:g,metadata:{contentType:"image/webp"}});n=(await w).url;const $=a?u=>{a({bytesTransferred:u.bytesTransferred+e.size,totalBytes:e.size+t.size,progress:50+u.progress*.5})}:void 0,{promise:_}=r(s,{basePath:o,filename:`${l}_thumb.webp`,onProgress:$,metadata:{contentType:"image/webp"}});i=(await _).url}return{fullUrl:n,thumbUrl:i}}catch(c){try{if(b("storage")){const s=f("storage");await s.delete(h).catch(()=>{}),await s.delete(d).catch(()=>{})}else{const{getFileUrl:s,deleteFileByUrl:n}=await import("@donotdev/firebase"),i=await s(h).catch(()=>null),r=await s(d).catch(()=>null);i&&await n(i).catch(()=>{}),r&&await n(r).catch(()=>{})}}catch{}throw c}}async function v(e){try{if(b("storage")){const t=f("storage");await Promise.all([t.delete(e.fullUrl),t.delete(e.thumbUrl)])}else{const{deleteFileByUrl:t}=await import("@donotdev/firebase");await Promise.all([t(e.fullUrl),t(e.thumbUrl)])}}catch(t){throw F(t,{userMessage:"Failed to delete image",severity:"error",context:{fullUrl:e.fullUrl,thumbUrl:e.thumbUrl}}),t}}export{v as deleteImage,B as uploadImage};
@@ -1 +1 @@
1
- {"version":3,"file":"mergeWithOptimistic.d.ts","sourceRoot":"","sources":["../../src/utils/mergeWithOptimistic.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,SAAS,EAAE,CAAC,EAAE,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,CAAC,EAAE,CA4BL"}
1
+ {"version":3,"file":"mergeWithOptimistic.d.ts","sourceRoot":"","sources":["../../src/utils/mergeWithOptimistic.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,SAAS,EAAE,CAAC,EAAE,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,CAAC,EAAE,CA4BL"}
@@ -1 +1 @@
1
- function n(a,o){const e=[],s=new Set;for(const i of a){const t=o[i.id];t?.operation!=="delete"&&(t?.operation==="update"&&t.optimisticData?e.push(t.optimisticData):e.push(i),s.add(i.id))}for(const[i,t]of Object.entries(o))t.operation==="add"&&!s.has(i)&&t.optimisticData&&e.push(t.optimisticData);return e}export{n as mergeWithOptimistic};
1
+ import{CRUD_OPERATION as e}from"../types";function r(a,s){const o=[],n=new Set;for(const i of a){const t=s[i.id];t?.operation!==e.DELETE&&(t?.operation===e.UPDATE&&t.optimisticData?o.push(t.optimisticData):o.push(i),n.add(i.id))}for(const[i,t]of Object.entries(s))t.operation===e.ADD&&!n.has(i)&&t.optimisticData&&o.push(t.optimisticData);return o}export{r as mergeWithOptimistic};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Sanitize HTML by stripping script tags, event handlers, and javascript: URIs.
3
+ * Lightweight alternative to DOMPurify for trusted-but-verify scenarios.
4
+ */
5
+ export declare function sanitizeHtml(html: string): string;
6
+ //# sourceMappingURL=sanitizeHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeHtml.d.ts","sourceRoot":"","sources":["../../src/utils/sanitizeHtml.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1 @@
1
+ const c=/<script[\s\S]*?<\/script>/gi,r=/\s+on\w+\s*=\s*["'][^"']*["']/gi,t=/\s+(?:xlink:)?href\s*=\s*["']\s*javascript:[^"']*["']/gi,e=/\s+src\s*=\s*["']\s*javascript:[^"']*["']/gi;function i(s){return s.replace(c,"").replace(r,"").replace(t,"").replace(e,"")}export{i as sanitizeHtml};
@@ -1,5 +1,4 @@
1
- import type { ScopeConfig } from '@donotdev/core';
2
- import type { QueryOptions } from '../CrudService';
1
+ import type { ScopeConfig, QueryOptions } from '@donotdev/core';
3
2
  /**
4
3
  * Injects scope value into data object for create/update operations
5
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"scopeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/scopeUtils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,CAAC,CAkBzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,YAAY,CA4Bd;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,MAAM,GAAG,IAAI,CAGf"}
1
+ {"version":3,"file":"scopeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/scopeUtils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,CAAC,CAgBzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,YAAY,CAmCd;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,MAAM,GAAG,IAAI,CAGf"}
@@ -1 +1 @@
1
- import{getScopeValue as n}from"@donotdev/core";function c(e,o){if(!o)return e;const r=n(o.provider);return r?{...e,[o.field]:r}:e}function l(e,o){const r=e??{};if(!o)return r;const t=n(o.provider);if(!t)return r;const i={field:o.field,operator:"==",value:t};return{...r,where:r.where?[...r.where,i]:[i]}}function u(e){return e?n(e.provider):null}export{u as getCurrentScopeValue,c as injectScope,l as injectScopeFilter};
1
+ import{getScopeValue as n,CRUD_OPERATORS as p}from"@donotdev/core";function l(r,o){if(!o)return r;const e=n(o.provider);return e?{...r,[o.field]:e}:r}function u(r,o){const e=r??{};if(!o||typeof o.field!="string")return e;const t=n(o.provider);if(!t)return e;const i={field:o.field,operator:p.EQ,value:t};return{...e,where:e.where?[...e.where,i]:[i]}}function f(r){return r?n(r.provider):null}export{f as getCurrentScopeValue,l as injectScope,u as injectScopeFilter};
@@ -15,9 +15,10 @@ import type { Picture } from '@donotdev/core';
15
15
  */
16
16
  export declare function isStorageUrl(url: string): boolean;
17
17
  /**
18
- * Validate that a Picture object has valid storage URLs
18
+ * Validate that a Picture object has valid storage URLs.
19
+ * `thumbUrl` is optional — only validated when present (W9: false positive fix).
19
20
  * @param picture - Picture object to validate
20
- * @returns true if both fullUrl and thumbUrl are valid storage URLs
21
+ * @returns true if fullUrl is a valid storage URL (and thumbUrl, when present, is also valid)
21
22
  */
22
23
  export declare function validatePicture(picture: Picture): boolean;
23
24
  /**
@@ -27,11 +28,11 @@ export declare function validatePicture(picture: Picture): boolean;
27
28
  * @param path - Current path in the data structure (for error messages)
28
29
  * @returns Array of paths where blob URLs were found
29
30
  */
30
- export declare function checkForBlobUrls(data: any, path?: string): string[];
31
+ export declare function checkForBlobUrls(data: unknown, path?: string): string[];
31
32
  /**
32
33
  * Check if form data contains any blob URLs
33
34
  * @param data - Form data to check
34
35
  * @returns true if any blob URLs found, false otherwise
35
36
  */
36
- export declare function hasBlobUrls(data: any): boolean;
37
+ export declare function hasBlobUrls(data: unknown): boolean;
37
38
  //# sourceMappingURL=uploadValidation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploadValidation.d.ts","sourceRoot":"","sources":["../../src/utils/uploadValidation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CA2C/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAE9C"}
1
+ {"version":3,"file":"uploadValidation.d.ts","sourceRoot":"","sources":["../../src/utils/uploadValidation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAMzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CA+CnE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAElD"}
@@ -1 +1 @@
1
- "use client";function l(r){return!r||typeof r!="string"?!1:r.startsWith("https://")&&!r.startsWith("blob:")}function i(r){return!r||typeof r!="object"?!1:l(r.fullUrl)&&l(r.thumbUrl)}function f(r,n=""){const e=[];if(r==null)return e;if(typeof r=="string")return r.startsWith("blob:")&&e.push(n||"root"),e;if(typeof r!="object")return e;if(Array.isArray(r))r.forEach((t,o)=>{const s=n?`${n}[${o}]`:`[${o}]`;e.push(...f(t,s))});else if(r.fullUrl!==void 0&&r.thumbUrl!==void 0){if(!l(r.fullUrl)||!l(r.thumbUrl)){const t=n||"root";e.push(`${t}.fullUrl or ${t}.thumbUrl contains blob URL`)}}else Object.entries(r).forEach(([t,o])=>{const s=n?`${n}.${t}`:t;e.push(...f(o,s))});return e}function u(r){return f(r).length>0}export{f as checkForBlobUrls,u as hasBlobUrls,l as isStorageUrl,i as validatePicture};
1
+ "use client";function l(r){return!r||typeof r!="string"?!1:r.startsWith("https://")&&!r.startsWith("blob:")}function u(r){return!(!r||typeof r!="object"||!l(r.fullUrl)||r.thumbUrl&&!l(r.thumbUrl))}function f(r,o=""){const t=[];if(r==null)return t;if(typeof r=="string")return r.startsWith("blob:")&&t.push(o||"root"),t;if(typeof r!="object")return t;if(Array.isArray(r))r.forEach((n,e)=>{const s=o?`${o}[${e}]`:`[${e}]`;t.push(...f(n,s))});else{const n=r;if(n.fullUrl!==void 0&&n.thumbUrl!==void 0){if(!l(String(n.fullUrl))||!l(String(n.thumbUrl))){const e=o||"root";t.push(`${e}.fullUrl or ${e}.thumbUrl contains blob URL`)}}else Object.entries(n).forEach(([e,s])=>{const i=o?`${o}.${e}`:e;t.push(...f(s,i))})}return t}function b(r){return f(r).length>0}export{f as checkForBlobUrls,b as hasBlobUrls,l as isStorageUrl,u as validatePicture};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@donotdev/crud",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -53,25 +53,28 @@
53
53
  "@dnd-kit/core": "^6.3.1",
54
54
  "@dnd-kit/sortable": "^10.0.0",
55
55
  "@dnd-kit/utilities": "^3.2.2",
56
- "@donotdev/components": "^0.0.16",
57
- "@donotdev/core": "^0.0.22",
56
+ "@donotdev/components": "^0.0.18",
57
+ "@donotdev/core": "^0.0.24",
58
58
  "@hookform/resolvers": "^5.2.2",
59
59
  "react-easy-crop": "^5.5.6"
60
60
  },
61
61
  "peerDependencies": {
62
- "@donotdev/firebase": "^0.0.9",
62
+ "@donotdev/firebase": "^0.0.10",
63
63
  "@tiptap/extension-placeholder": "^3.19.0",
64
64
  "@tiptap/pm": "^3.19.0",
65
65
  "@tiptap/react": "^3.19.0",
66
66
  "@tiptap/starter-kit": "^3.19.0",
67
- "firebase": "^12.8.0",
68
- "lucide-react": "^0.563.0",
67
+ "firebase": "^12.9.0",
68
+ "lucide-react": "^0.574.0",
69
69
  "react": "^19.2.4",
70
70
  "react-dom": "^19.2.4",
71
71
  "react-hook-form": "^7.71.1",
72
72
  "valibot": "^1.2.0"
73
73
  },
74
74
  "peerDependenciesMeta": {
75
+ "@donotdev/firebase": {
76
+ "optional": true
77
+ },
75
78
  "@tiptap/extension-placeholder": {
76
79
  "optional": true
77
80
  },
@@ -84,6 +87,9 @@
84
87
  "@tiptap/starter-kit": {
85
88
  "optional": true
86
89
  },
90
+ "firebase": {
91
+ "optional": true
92
+ },
87
93
  "tiptap": {
88
94
  "optional": true
89
95
  }