@donotdev/crud 0.0.14 → 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 (111) 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.map +1 -1
  20. package/dist/components/DisplayThumbnail.d.ts +29 -0
  21. package/dist/components/DisplayThumbnail.d.ts.map +1 -0
  22. package/dist/components/DisplayThumbnail.js +1 -0
  23. package/dist/components/EntityFilters.d.ts.map +1 -1
  24. package/dist/components/EntityFilters.js +1 -1
  25. package/dist/components/FormLayout.d.ts.map +1 -1
  26. package/dist/components/__tests__/EntityFilters.test.d.ts +2 -0
  27. package/dist/components/__tests__/EntityFilters.test.d.ts.map +1 -0
  28. package/dist/components/__tests__/EntityFilters.test.js +1 -0
  29. package/dist/components/__tests__/FormFieldRenderer.test.d.ts +2 -0
  30. package/dist/components/__tests__/FormFieldRenderer.test.d.ts.map +1 -0
  31. package/dist/components/__tests__/FormFieldRenderer.test.js +1 -0
  32. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
  33. package/dist/components/fields/display/RichTextDisplay.d.ts.map +1 -1
  34. package/dist/components/fields/display/RichTextDisplay.js +2 -2
  35. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  36. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  37. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
  38. package/dist/components/form/fields/internal/TiptapEditor.d.ts +4 -2
  39. package/dist/components/form/fields/internal/TiptapEditor.d.ts.map +1 -1
  40. package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
  41. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -1
  42. package/dist/components/index.d.ts +2 -0
  43. package/dist/components/index.d.ts.map +1 -1
  44. package/dist/components/index.js +1 -1
  45. package/dist/fieldTypeRegistry.d.ts +3 -0
  46. package/dist/fieldTypeRegistry.d.ts.map +1 -1
  47. package/dist/fieldTypeRegistry.js +1 -1
  48. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  49. package/dist/forms/hooks/useEntityForm.js +1 -1
  50. package/dist/hooks/useCrudFilters.d.ts +0 -15
  51. package/dist/hooks/useCrudFilters.d.ts.map +1 -1
  52. package/dist/hooks/useCrudFilters.js +1 -1
  53. package/dist/hooks/useFileUpload.d.ts.map +1 -1
  54. package/dist/hooks/useFileUpload.js +1 -1
  55. package/dist/hooks/useFormNavigationGuard.d.ts.map +1 -1
  56. package/dist/hooks/useFormNavigationGuard.js +1 -1
  57. package/dist/hooks/useRelatedItems.d.ts +1 -2
  58. package/dist/hooks/useRelatedItems.d.ts.map +1 -1
  59. package/dist/hooks/useRelatedItems.js +1 -1
  60. package/dist/index.d.ts +4 -2
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +1 -1
  63. package/dist/registerBuiltinFieldTypes.d.ts.map +1 -1
  64. package/dist/registerBuiltinFieldTypes.js +1 -1
  65. package/dist/stores/FormStore.d.ts.map +1 -1
  66. package/dist/stores/FormStore.js +1 -1
  67. package/dist/stores/UploadStore.d.ts.map +1 -1
  68. package/dist/stores/UploadStore.js +1 -1
  69. package/dist/tsconfig.tsbuildinfo +1 -1
  70. package/dist/types.d.ts +22 -19
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/types.js +1 -0
  73. package/dist/useBaseCrudList.d.ts +1 -4
  74. package/dist/useBaseCrudList.d.ts.map +1 -1
  75. package/dist/useBaseCrudList.js +1 -1
  76. package/dist/useCrud.d.ts +1 -2
  77. package/dist/useCrud.d.ts.map +1 -1
  78. package/dist/useCrud.js +1 -1
  79. package/dist/useCrudCardList.d.ts +1 -2
  80. package/dist/useCrudCardList.d.ts.map +1 -1
  81. package/dist/useCrudCardList.js +1 -1
  82. package/dist/useCrudList.d.ts +1 -1
  83. package/dist/useCrudList.d.ts.map +1 -1
  84. package/dist/useCrudList.js +1 -1
  85. package/dist/utils/fileStorage.d.ts +10 -5
  86. package/dist/utils/fileStorage.d.ts.map +1 -1
  87. package/dist/utils/fileStorage.js +1 -1
  88. package/dist/utils/imageStorage.d.ts +9 -4
  89. package/dist/utils/imageStorage.d.ts.map +1 -1
  90. package/dist/utils/imageStorage.js +1 -1
  91. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
  92. package/dist/utils/mergeWithOptimistic.js +1 -1
  93. package/dist/utils/sanitizeHtml.d.ts +6 -0
  94. package/dist/utils/sanitizeHtml.d.ts.map +1 -0
  95. package/dist/utils/sanitizeHtml.js +1 -0
  96. package/dist/utils/scopeUtils.d.ts +1 -2
  97. package/dist/utils/scopeUtils.d.ts.map +1 -1
  98. package/dist/utils/scopeUtils.js +1 -1
  99. package/dist/utils/uploadValidation.d.ts +5 -4
  100. package/dist/utils/uploadValidation.d.ts.map +1 -1
  101. package/dist/utils/uploadValidation.js +1 -1
  102. package/package.json +12 -6
  103. package/dist/adapters/FirestoreAdapter.d.ts +0 -65
  104. package/dist/adapters/FirestoreAdapter.d.ts.map +0 -1
  105. package/dist/adapters/FirestoreAdapter.js +0 -1
  106. package/dist/components/EntityDisplayRenderer.d.ts +0 -43
  107. package/dist/components/EntityDisplayRenderer.d.ts.map +0 -1
  108. package/dist/components/EntityDisplayRenderer.js +0 -1
  109. package/dist/components/EntityFormRenderer.d.ts +0 -86
  110. package/dist/components/EntityFormRenderer.d.ts.map +0 -1
  111. 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,7 +40,7 @@ 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
@@ -66,7 +70,6 @@ export interface CollectionUIState {
66
70
  * @author AMBROISE PARK Consulting
67
71
  */
68
72
  export interface CrudState {
69
- backend: BackendType | null;
70
73
  crudService: CrudServiceInterface | null;
71
74
  /** Global flag to hide success toasts (set from app config) */
72
75
  hideSuccessToasts: boolean;
@@ -90,7 +93,6 @@ export interface CrudState {
90
93
  */
91
94
  export interface CrudActions {
92
95
  setCrudService: (service: CrudServiceInterface) => void;
93
- setBackend: (backend: BackendType) => void;
94
96
  /** Set global flag to hide success toasts (called from app bootstrap) */
95
97
  setHideSuccessToasts: (hide: boolean) => void;
96
98
  setLoading: (collection: string, loading: boolean) => void;
@@ -165,10 +167,11 @@ export interface MutationOptions {
165
167
  * @author AMBROISE PARK Consulting
166
168
  */
167
169
  export interface CrudServiceInterface {
168
- initialize(backend: BackendType): Promise<void>;
170
+ /** Initialize the CRUD adapter from the provider registry. Call configureProviders() first. */
171
+ initialize(): Promise<void>;
169
172
  setStore(store: CrudStoreApi): void;
170
173
  /** Schema accepts unknown since OperationSchemas stores dndevSchema<unknown>. T is for return type. */
171
- 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): {
172
175
  queryKey: readonly string[];
173
176
  queryFn: () => Promise<PaginatedQueryResult<T>>;
174
177
  staleTime: number;
@@ -180,9 +183,9 @@ export interface CrudServiceInterface {
180
183
  staleTime: number;
181
184
  };
182
185
  get<T>(collection: string, id: string, schema: dndevSchema<T>, options?: CacheOptions): Promise<T | null>;
183
- 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>>;
184
187
  set<T>(collection: string, id: string, data: T, schema: dndevSchema<T>, options?: MutationOptions): Promise<void>;
185
- 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>;
186
189
  delete(collection: string, id: string, options?: MutationOptions): Promise<void>;
187
190
  add<T>(collection: string, data: T, schema: dndevSchema<T>, options?: MutationOptions): Promise<string>;
188
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.14",
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.17",
57
- "@donotdev/core": "^0.0.23",
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
  }
@@ -1,65 +0,0 @@
1
- import type { dndevSchema } from '@donotdev/core';
2
- import { type Unsubscribe, type FirestoreError } from '@donotdev/firebase';
3
- import type { PaginatedQueryResult } from './FunctionsAdapter';
4
- /**
5
- * Firestore query operators
6
- */
7
- export type FirestoreOperator = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'array-contains' | 'in' | 'not-in';
8
- /**
9
- * Query options for Firestore queries
10
- *
11
- * @version 0.0.1
12
- * @since 0.0.1
13
- * @author AMBROISE PARK Consulting
14
- */
15
- export interface QueryOptions {
16
- where?: Array<{
17
- field: string;
18
- operator: FirestoreOperator;
19
- value: unknown;
20
- }>;
21
- orderBy?: Array<{
22
- field: string;
23
- direction?: 'asc' | 'desc';
24
- }>;
25
- limit?: number;
26
- startAfterId?: string;
27
- }
28
- /**
29
- * Subscription callback for document subscriptions
30
- *
31
- * @version 0.0.1
32
- * @since 0.0.1
33
- * @author AMBROISE PARK Consulting
34
- */
35
- export type SubscriptionCallback<T> = (data: T | null, error?: FirestoreError) => void;
36
- /**
37
- * Subscription callback for collection subscriptions
38
- *
39
- * @version 0.0.1
40
- * @since 0.0.1
41
- * @author AMBROISE PARK Consulting
42
- */
43
- export type CollectionSubscriptionCallback<T> = (data: T[], error?: FirestoreError) => void;
44
- /**
45
- * Firestore backend adapter
46
- * Works with any collection dynamically (collection name passed per operation)
47
- *
48
- * @version 0.0.1
49
- * @since 0.0.1
50
- * @author AMBROISE PARK Consulting
51
- */
52
- export declare class FirestoreAdapter {
53
- private firestore;
54
- private ensureFirestore;
55
- private getCollectionRef;
56
- get<T>(collectionName: string, id: string, schema: dndevSchema<unknown>): Promise<T | null>;
57
- set<T>(collectionName: string, id: string, data: T, schema: dndevSchema<T>): Promise<void>;
58
- update<T>(collectionName: string, id: string, data: Partial<T>): Promise<void>;
59
- delete(collectionName: string, id: string): Promise<void>;
60
- add<T>(collectionName: string, data: T, schema: dndevSchema<T>): Promise<string>;
61
- query<T>(collectionName: string, options: QueryOptions, schema: dndevSchema<unknown>, _schemaType?: 'list' | 'listCard'): Promise<PaginatedQueryResult<T>>;
62
- subscribe<T>(collectionName: string, id: string, callback: SubscriptionCallback<T>, schema: dndevSchema<unknown>): Unsubscribe;
63
- subscribeToCollection<T>(collectionName: string, options: QueryOptions, callback: CollectionSubscriptionCallback<T>, schema: dndevSchema<unknown>): Unsubscribe;
64
- }
65
- //# sourceMappingURL=FirestoreAdapter.d.ts.map