@aiao/rxdb-angular 0.0.15 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,29 @@
1
- # rxdb-angular
1
+ # @aiao/rxdb-angular
2
+
3
+ Angular 框架集成库,为 Angular 应用提供 RxDB 支持。基于 Angular Signals 实现响应式数据流。
4
+
5
+ ## 功能特性
6
+
7
+ - **Angular Signals 集成**: 使用 Angular Signals 管理响应式状态
8
+ - **组件与指令**: 提供数据展示、编辑、表单等常用组件
9
+ - **依赖注入**: 完全基于 Angular 依赖注入系统
10
+
11
+ ## 安装
12
+
13
+ ```bash
14
+ npm install @aiao/rxdb @aiao/rxdb-angular
15
+ # 或
16
+ pnpm add @aiao/rxdb @aiao/rxdb-angular
17
+ ```
18
+
19
+ ## 使用
20
+
21
+ ```typescript
22
+ import { provideRxdb } from '@aiao/rxdb-angular';
23
+
24
+ @NgModule({
25
+ providers: [provideRxdb()]
26
+ })
27
+ export class AppModule {}
28
+ ```
29
+
@@ -9,8 +9,8 @@ import { getEntityStatus, RxDB } from '@aiao/rxdb';
9
9
  const useRepositoryQuery = (EntityType, method, defaultValue, options) => {
10
10
  let _observer;
11
11
  let sub;
12
- const _has_sub = signal(false, ...(ngDevMode ? [{ debugName: "_has_sub" }] : []));
13
- const _refresh = signal(0, ...(ngDevMode ? [{ debugName: "_refresh" }] : []));
12
+ const _has_sub = signal(false, ...(ngDevMode ? [{ debugName: "_has_sub" }] : /* istanbul ignore next */ []));
13
+ const _refresh = signal(0, ...(ngDevMode ? [{ debugName: "_refresh" }] : /* istanbul ignore next */ []));
14
14
  const _eff = effect(() => {
15
15
  if (_has_sub() === false)
16
16
  return;
@@ -53,7 +53,7 @@ const useRepositoryQuery = (EntityType, method, defaultValue, options) => {
53
53
  isLoading.set(false);
54
54
  }
55
55
  });
56
- }, ...(ngDevMode ? [{ debugName: "_eff" }] : []));
56
+ }, ...(ngDevMode ? [{ debugName: "_eff" }] : /* istanbul ignore next */ []));
57
57
  const ob = new Observable(observer => {
58
58
  _has_sub.set(true);
59
59
  _observer = observer;
@@ -66,10 +66,10 @@ const useRepositoryQuery = (EntityType, method, defaultValue, options) => {
66
66
  const value = toLazySignal(ob, {
67
67
  initialValue: defaultValue
68
68
  });
69
- const error = signal(undefined, ...(ngDevMode ? [{ debugName: "error" }] : []));
70
- const isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
71
- const hasValue = signal(false, ...(ngDevMode ? [{ debugName: "hasValue" }] : []));
72
- const isEmpty = signal(undefined, ...(ngDevMode ? [{ debugName: "isEmpty" }] : []));
69
+ const error = signal(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
70
+ const isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
71
+ const hasValue = signal(false, ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
72
+ const isEmpty = signal(undefined, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
73
73
  return {
74
74
  value,
75
75
  error,
@@ -230,16 +230,16 @@ class InfiniteScrollingList {
230
230
  rxdb;
231
231
  EntityType;
232
232
  options;
233
- #values = signal([], ...(ngDevMode ? [{ debugName: "#values" }] : []));
233
+ #values = signal([], ...(ngDevMode ? [{ debugName: "#values" }] : /* istanbul ignore next */ []));
234
234
  #destroy_ref = inject(DestroyRef);
235
235
  #options_eff;
236
236
  #is_initialized = false;
237
- error = signal(undefined, ...(ngDevMode ? [{ debugName: "error" }] : []));
238
- isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
239
- hasMore = signal(true, ...(ngDevMode ? [{ debugName: "hasMore" }] : []));
240
- value = computed(() => this.#values().flat(), ...(ngDevMode ? [{ debugName: "value" }] : []));
241
- hasValue = computed(() => this.value().length > 0, ...(ngDevMode ? [{ debugName: "hasValue" }] : []));
242
- isEmpty = computed(() => !this.isLoading() && !this.hasValue() && this.#is_initialized, ...(ngDevMode ? [{ debugName: "isEmpty" }] : []));
237
+ error = signal(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
238
+ isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
239
+ hasMore = signal(true, ...(ngDevMode ? [{ debugName: "hasMore" }] : /* istanbul ignore next */ []));
240
+ value = computed(() => this.#values().flat(), ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
241
+ hasValue = computed(() => this.value().length > 0, ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
242
+ isEmpty = computed(() => !this.isLoading() && !this.hasValue() && this.#is_initialized, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
243
243
  constructor(rxdb, EntityType, options) {
244
244
  this.rxdb = rxdb;
245
245
  this.EntityType = EntityType;
@@ -254,7 +254,7 @@ class InfiniteScrollingList {
254
254
  return;
255
255
  }
256
256
  untracked(() => this.#reset());
257
- }, ...(ngDevMode ? [{ debugName: "#options_eff" }] : []));
257
+ }, ...(ngDevMode ? [{ debugName: "#options_eff" }] : /* istanbul ignore next */ []));
258
258
  this.#destroy_ref.onDestroy(() => {
259
259
  this.#options_eff.destroy();
260
260
  });
@@ -267,7 +267,8 @@ class InfiniteScrollingList {
267
267
  this.error.set(undefined);
268
268
  const last_entity = this.#get_last_entity();
269
269
  const opt = isFunction(this.options) ? this.options() : this.options;
270
- const options = structuredClone(opt);
270
+ const options = { ...opt };
271
+ options.limit = options.limit || 100;
271
272
  if (last_entity) {
272
273
  options.after = last_entity;
273
274
  }
@@ -284,7 +285,7 @@ class InfiniteScrollingList {
284
285
  updated[current_index] = result;
285
286
  return updated;
286
287
  });
287
- if (result.length < (options.limit || 100)) {
288
+ if (result.length < options.limit) {
288
289
  this.hasMore.set(false);
289
290
  }
290
291
  },
@@ -340,9 +341,9 @@ class RxDBEntityChangeDirective {
340
341
  #destroyRef = inject(DestroyRef);
341
342
  #changeDetectorRef = inject(ChangeDetectorRef);
342
343
  #sub;
343
- rxdbChangeDetector = input(...(ngDevMode ? [undefined, { debugName: "rxdbChangeDetector" }] : []));
344
- debounceTime = input(0, ...(ngDevMode ? [{ debugName: "debounceTime" }] : []));
345
- auditTime = input(0, ...(ngDevMode ? [{ debugName: "auditTime" }] : []));
344
+ rxdbChangeDetector = input(...(ngDevMode ? [undefined, { debugName: "rxdbChangeDetector" }] : /* istanbul ignore next */ []));
345
+ debounceTime = input(0, ...(ngDevMode ? [{ debugName: "debounceTime" }] : /* istanbul ignore next */ []));
346
+ auditTime = input(0, ...(ngDevMode ? [{ debugName: "auditTime" }] : /* istanbul ignore next */ []));
346
347
  constructor() {
347
348
  effect(() => {
348
349
  const rxdbChange = this.rxdbChangeDetector();
@@ -355,10 +356,10 @@ class RxDBEntityChangeDirective {
355
356
  .subscribe(() => this.#changeDetectorRef.markForCheck());
356
357
  });
357
358
  }
358
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: RxDBEntityChangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
359
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: RxDBEntityChangeDirective, isStandalone: true, selector: "[rxdbChangeDetector]", inputs: { rxdbChangeDetector: { classPropertyName: "rxdbChangeDetector", publicName: "rxdbChangeDetector", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, auditTime: { classPropertyName: "auditTime", publicName: "auditTime", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
359
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: RxDBEntityChangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
360
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.5", type: RxDBEntityChangeDirective, isStandalone: true, selector: "[rxdbChangeDetector]", inputs: { rxdbChangeDetector: { classPropertyName: "rxdbChangeDetector", publicName: "rxdbChangeDetector", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, auditTime: { classPropertyName: "auditTime", publicName: "auditTime", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
360
361
  }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: RxDBEntityChangeDirective, decorators: [{
362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: RxDBEntityChangeDirective, decorators: [{
362
363
  type: Directive,
363
364
  args: [{ selector: '[rxdbChangeDetector]' }]
364
365
  }], ctorParameters: () => [], propDecorators: { rxdbChangeDetector: [{ type: i0.Input, args: [{ isSignal: true, alias: "rxdbChangeDetector", required: false }] }], debounceTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounceTime", required: false }] }], auditTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "auditTime", required: false }] }] } });
@@ -374,7 +375,7 @@ const provideRxDB = (useFactory) => makeEnvironmentProviders([
374
375
  ]);
375
376
 
376
377
  const action = (promiseFn) => {
377
- const isPending = signal(false, ...(ngDevMode ? [{ debugName: "isPending" }] : []));
378
+ const isPending = signal(false, ...(ngDevMode ? [{ debugName: "isPending" }] : /* istanbul ignore next */ []));
378
379
  return {
379
380
  isPending,
380
381
  execute: async (options) => {
@@ -1 +1 @@
1
- {"version":3,"file":"aiao-rxdb-angular.mjs","sources":["../../../../packages/rxdb-angular/src/hooks.ts","../../../../packages/rxdb-angular/src/InfiniteScrollingList.ts","../../../../packages/rxdb-angular/src/rxdb-change-detector.directive.ts","../../../../packages/rxdb-angular/src/rxdb.provider.ts","../../../../packages/rxdb-angular/src/use-action.ts","../../../../packages/rxdb-angular/src/use-state.ts","../../../../packages/rxdb-angular/src/aiao-rxdb-angular.ts"],"sourcesContent":["import { EntityStaticType, EntityType, TreeEntityType } from '@aiao/rxdb';\nimport { GraphEntityType } from '@aiao/rxdb-plugin-graph';\nimport { isFunction } from '@aiao/utils';\nimport { effect, Signal, signal } from '@angular/core';\nimport { toLazySignal } from 'ngxtension/to-lazy-signal';\nimport { Observable, Subscriber, Subscription } from 'rxjs';\n\ntype UseOptions<T> = T | (() => T);\n\nexport interface RxDBResource<T> {\n /**\n * 资源的值\n */\n readonly value: Signal<T>;\n /**\n * 资源的错误\n */\n readonly error: Signal<Error | undefined>;\n /**\n * 资源的加载状态\n */\n readonly isLoading: Signal<boolean>;\n /**\n * 资源是否为空\n */\n readonly isEmpty: Signal<boolean | undefined>;\n /**\n * 资源是否有值\n */\n readonly hasValue: Signal<boolean>;\n}\n\nexport const useRepositoryQuery = <T extends EntityType, RT>(\n EntityType: T,\n method: string,\n defaultValue: any,\n options: UseOptions<any>\n): RxDBResource<RT> => {\n let _observer: Subscriber<any>;\n let sub: Subscription;\n\n const _has_sub = signal<boolean>(false);\n const _refresh = signal<number>(0);\n\n const _eff = effect(() => {\n if (_has_sub() === false) return;\n // re-run when refresh is called or options change\n _refresh();\n const opt = isFunction(options) ? options() : options;\n if (sub) sub.unsubscribe();\n // reset state for a new request\n isLoading.set(true);\n error.set(undefined);\n hasValue.set(false);\n isEmpty.set(undefined);\n // 优化:使用 Record<string, any> 替代 any,以提高类型安全性\n const func = (EntityType as unknown as Record<string, any>)[method];\n sub =\n func &&\n func(opt).subscribe({\n next: (d: any) => {\n isLoading.set(false);\n hasValue.set(true);\n if (Array.isArray(d)) {\n isEmpty.set(d.length === 0);\n } else if (d == null) {\n // null/undefined treated as empty\n isEmpty.set(true);\n } else {\n isEmpty.set(false);\n }\n _observer.next(d);\n },\n error: (e: any) => {\n isLoading.set(false);\n error.set(e);\n },\n complete: () => {\n // ensure loading is false even if observable completes without next\n isLoading.set(false);\n }\n });\n });\n const ob = new Observable<RT>(observer => {\n _has_sub.set(true);\n _observer = observer;\n _observer.next(defaultValue);\n return () => {\n _eff.destroy();\n sub?.unsubscribe();\n };\n });\n\n const value = toLazySignal<RT>(ob, {\n initialValue: defaultValue\n }) as Signal<RT>;\n const error = signal<Error | undefined>(undefined);\n const isLoading = signal<boolean>(false);\n const hasValue = signal<boolean>(false);\n const isEmpty = signal<boolean | undefined>(undefined);\n return {\n value,\n error,\n isLoading,\n isEmpty,\n hasValue\n };\n};\n\n/*\n * Repository\n */\n\n/**\n * 通过 ID 获取单个实体\n *\n * @param EntityType 实体类\n * @param options 实体 ID 或查询参数对象\n * @returns 返回包含实体的资源 signal\n *\n * @example\n * ```typescript\n * const user = useGet(User, 'user-1');\n * ```\n */\nexport const useGet = <T extends EntityType>(EntityType: T, options: UseOptions<EntityStaticType<T, 'getOptions'>>) =>\n useRepositoryQuery<T, InstanceType<T>>(EntityType, 'get', undefined, options);\n\n/**\n * 查找第一个匹配条件的实体\n *\n * @param EntityType 实体类\n * @param options 查询参数(where、排序等)\n * @returns 返回包含实体的资源 signal\n */\nexport const useFindOne = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findOneOptions'>>\n) => useRepositoryQuery<T, InstanceType<T> | undefined>(EntityType, 'findOne', undefined, options);\n\n/**\n * 查找匹配的实体,未找到则抛出错误\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含实体的资源 signal\n */\nexport const useFindOneOrFail = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findOneOrFailOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>>(EntityType, 'findOneOrFail', undefined, options);\n\n/**\n * 查找符合条件的多个实体\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含实体数组的资源 signal\n */\nexport const useFind = <T extends EntityType>(EntityType: T, options: UseOptions<EntityStaticType<T, 'findOptions'>>) =>\n useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'find', [], options);\n\n/**\n * 使用游标分页查找实体\n *\n * @param EntityType 实体类\n * @param options 游标参数\n * @returns 返回包含实体数组的资源 signal\n */\nexport const useFindByCursor = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findByCursorOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findByCursor', [], options);\n\n/**\n * 查找全部实体\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含全部实体的资源 signal\n */\nexport const useFindAll = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findAllOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findAll', [], options);\n\n/**\n * 统计满足条件的实体数量\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCount = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'countOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'count', undefined, options);\n\n/*\n * TreeRepository\n */\n\n/**\n * 查找树结构中的所有子孙实体\n *\n * @param EntityType 实体类\n * @param options 树查询参数(entityId、深度等)\n * @returns 返回包含子孙实体的资源 signal\n */\nexport const useFindDescendants = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findDescendants', [], options);\n\n/**\n * 统计树结构中的子孙数量\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountDescendants = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countDescendants', undefined, options);\n\n/**\n * 查找树结构中的所有祖先实体\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含祖先实体的资源 signal\n */\nexport const useFindAncestors = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findAncestors', [], options);\n\n/**\n * 统计树结构中的祖先数量\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountAncestors = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countAncestors', undefined, options);\n\n/*\n * GraphRepository\n */\n\n/**\n * 查找图结构中的邻接实体\n *\n * @param EntityType 实体类\n * @param options 图查询参数(entityId、方向、层级等)\n * @returns 返回包含邻居实体的资源 signal\n *\n * @example\n * ```typescript\n * const friends = useGraphNeighbors(User, {\n * entityId: 'user-1',\n * direction: 'out',\n * level: 1\n * });\n * ```\n */\nexport const useGraphNeighbors = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findNeighborsOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findNeighbors', [], options);\n\n/**\n * 统计图结构中的邻接数量\n *\n * @param EntityType 实体类\n * @param options 图查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountNeighbors = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findNeighborsOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countNeighbors', 0, options);\n\n/**\n * 查找图结构中两个实体之间的路径\n *\n * @param EntityType 实体类\n * @param options 路径查询参数(fromId、toId、最大深度等)\n * @returns 返回包含路径的资源 signal\n *\n * @example\n * ```typescript\n * const paths = useGraphPaths(User, {\n * fromId: 'user-1',\n * toId: 'user-2',\n * maxDepth: 5\n * });\n * ```\n */\nexport const useGraphPaths = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findPathsOptions'>>\n) => useRepositoryQuery<T, any[]>(EntityType, 'findPaths', [], options);\n","import { EntityType, FindByCursorOptions, RxDB } from '@aiao/rxdb';\nimport { isFunction, nextMicroTask } from '@aiao/utils';\nimport { computed, DestroyRef, effect, EffectRef, inject, Signal, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype OptionsInput<T extends EntityType> = FindByCursorOptions<T> | Signal<FindByCursorOptions<T>>;\n\n/**\n * 无限滚动的列表\n */\nexport class InfiniteScrollingList<T extends EntityType> {\n readonly #values = signal<InstanceType<T>[][]>([]);\n readonly #destroy_ref = inject(DestroyRef);\n readonly #options_eff: EffectRef;\n\n #is_initialized = false;\n\n readonly error = signal<Error | undefined>(undefined);\n readonly isLoading = signal<boolean>(false);\n readonly hasMore = signal<boolean>(true);\n readonly value = computed<InstanceType<T>[]>(() => this.#values().flat());\n readonly hasValue = computed<boolean>(() => this.value().length > 0);\n readonly isEmpty = computed<boolean>(() => !this.isLoading() && !this.hasValue() && this.#is_initialized);\n\n constructor(\n private readonly rxdb: RxDB,\n private readonly EntityType: T,\n private readonly options: OptionsInput<T>\n ) {\n this.#options_eff = effect(() => {\n if (isFunction(this.options)) {\n this.options();\n }\n if (!this.#is_initialized) {\n this.#is_initialized = true;\n nextMicroTask(() => this.loadMore());\n return;\n }\n untracked(() => this.#reset());\n });\n\n this.#destroy_ref.onDestroy(() => {\n this.#options_eff.destroy();\n });\n }\n\n loadMore(): void {\n if (this.isLoading() || !this.hasMore()) {\n return;\n }\n\n this.isLoading.set(true);\n this.error.set(undefined);\n\n const last_entity = this.#get_last_entity();\n const opt = isFunction(this.options) ? this.options() : this.options;\n const options = structuredClone(opt);\n\n if (last_entity) {\n options.after = last_entity;\n }\n\n const current_index = this.#values().length;\n\n this.rxdb.entityManager\n .getRepository(this.EntityType)\n .findByCursor(options)\n .pipe(takeUntilDestroyed(this.#destroy_ref))\n .subscribe({\n next: result => {\n this.isLoading.set(false);\n this.#values.update(values => {\n const updated = [...values];\n updated[current_index] = result;\n return updated;\n });\n\n if (result.length < (options.limit || 100)) {\n this.hasMore.set(false);\n }\n },\n error: error => {\n this.isLoading.set(false);\n this.error.set(error);\n },\n complete: () => {\n this.hasMore.set(false);\n this.isLoading.set(false);\n }\n });\n }\n\n /**\n * 刷新列表数据\n */\n refresh(): void {\n // 强制重置状态,即使正在加载中\n this.#values.set([]);\n this.error.set(undefined);\n this.isLoading.set(false); // 强制设置为 false,允许新的 loadMore\n this.hasMore.set(true);\n\n // 立即开始加载\n this.loadMore();\n }\n #reset(): void {\n this.#values.set([]);\n this.error.set(undefined);\n this.isLoading.set(false);\n this.hasMore.set(true);\n nextMicroTask(() => this.loadMore());\n }\n\n #get_last_entity(): InstanceType<T> | undefined {\n const values = this.#values();\n if (values.length === 0) return undefined;\n\n const last_page = values[values.length - 1];\n if (last_page.length === 0) return undefined;\n\n return last_page[last_page.length - 1];\n }\n}\n","import { EntityType, getEntityStatus } from '@aiao/rxdb';\nimport { ChangeDetectorRef, DestroyRef, Directive, effect, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { auditTime, debounceTime, Subscription } from 'rxjs';\n\n/**\n * RxDB 实体变化指令\n * 如果你使用了 `changeDetection: ChangeDetectionStrategy.OnPush`\n * 那么正在输入的变化不会触发 angular 渲染机制,使用这个指令可以实现实时渲染\n *\n * @example\n * 当修改实体时,需要在多个地方预览修改变化时,可以使用这个指令\n */\n@Directive({ selector: '[rxdbChangeDetector]' })\nexport class RxDBEntityChangeDirective {\n #destroyRef = inject(DestroyRef);\n #changeDetectorRef = inject(ChangeDetectorRef);\n #sub?: Subscription;\n public readonly rxdbChangeDetector = input<InstanceType<EntityType>>();\n public readonly debounceTime = input<number>(0);\n public readonly auditTime = input<number>(0);\n\n constructor() {\n effect(() => {\n const rxdbChange = this.rxdbChangeDetector();\n const dt = this.debounceTime();\n const at = this.auditTime();\n const status = getEntityStatus(rxdbChange);\n this.#sub?.unsubscribe();\n this.#sub = status.patches$\n .pipe(takeUntilDestroyed(this.#destroyRef), debounceTime(dt), auditTime(at))\n .subscribe(() => this.#changeDetectorRef.markForCheck());\n });\n }\n}\n","import { RxDB } from '@aiao/rxdb';\nimport { makeEnvironmentProviders } from '@angular/core';\n\n/**\n * RxDB 配置\n */\nexport const provideRxDB = (useFactory?: () => RxDB) =>\n makeEnvironmentProviders([\n {\n provide: RxDB,\n useFactory\n }\n ]);\n","import { signal } from '@angular/core';\n\nconst action = <Options = any, RT = any>(promiseFn: (options?: Options) => Promise<RT>) => {\n const isPending = signal<boolean>(false);\n return {\n isPending,\n execute: async (options?: Options) => {\n isPending.set(true);\n try {\n const d = await promiseFn(options);\n return d;\n } finally {\n isPending.set(false);\n }\n }\n };\n};\n\nexport const useAction = <Options = any, RT = any>(promiseFn: (options?: Options) => Promise<RT>) =>\n action<Options, RT>(promiseFn);\n","import { IS_BROWSER } from '@aiao/utils';\nimport { CreateSignalOptions, effect, signal as ngSignal, WritableSignal } from '@angular/core';\n\nfunction state(namespace: string) {\n return (name: string) => {\n const signal = <T>(initialValue: T, options?: CreateSignalOptions<T>): WritableSignal<T> => {\n if (IS_BROWSER) {\n const value = localStorage.getItem(`${namespace}:${name}`);\n if (value) {\n initialValue = JSON.parse(value);\n }\n }\n const a = ngSignal<T>(initialValue, options);\n effect(() => {\n if (IS_BROWSER) {\n localStorage.setItem(`${namespace}:${name}`, JSON.stringify(a()));\n }\n });\n return a;\n };\n\n return {\n signal\n };\n };\n}\n\nexport const useState = (namespace: string) => state(namespace);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["signal","ngSignal"],"mappings":";;;;;;;;AAgCO,MAAM,kBAAkB,GAAG,CAChC,UAAa,EACb,MAAc,EACd,YAAiB,EACjB,OAAwB,KACJ;AACpB,IAAA,IAAI,SAA0B;AAC9B,IAAA,IAAI,GAAiB;AAErB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAU,KAAK,oDAAC;AACvC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAS,CAAC,oDAAC;AAElC,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAK;QACvB,IAAI,QAAQ,EAAE,KAAK,KAAK;YAAE;;AAE1B,QAAA,QAAQ,EAAE;AACV,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO;AACrD,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,WAAW,EAAE;;AAE1B,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACpB,QAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEtB,QAAA,MAAM,IAAI,GAAI,UAA6C,CAAC,MAAM,CAAC;QACnE,GAAG;YACD,IAAI;AACJ,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAClB,oBAAA,IAAI,EAAE,CAAC,CAAM,KAAI;AACf,wBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,wBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAClB,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;wBAC7B;AAAO,6BAAA,IAAI,CAAC,IAAI,IAAI,EAAE;;AAEpB,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;wBACnB;6BAAO;AACL,4BAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;wBACpB;AACA,wBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnB,CAAC;AACD,oBAAA,KAAK,EAAE,CAAC,CAAM,KAAI;AAChB,wBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,wBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBACd,CAAC;oBACD,QAAQ,EAAE,MAAK;;AAEb,wBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBACtB;AACD,iBAAA,CAAC;AACN,IAAA,CAAC,gDAAC;AACF,IAAA,MAAM,EAAE,GAAG,IAAI,UAAU,CAAK,QAAQ,IAAG;AACvC,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAClB,SAAS,GAAG,QAAQ;AACpB,QAAA,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5B,QAAA,OAAO,MAAK;YACV,IAAI,CAAC,OAAO,EAAE;YACd,GAAG,EAAE,WAAW,EAAE;AACpB,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,KAAK,GAAG,YAAY,CAAK,EAAE,EAAE;AACjC,QAAA,YAAY,EAAE;AACf,KAAA,CAAe;AAChB,IAAA,MAAM,KAAK,GAAG,MAAM,CAAoB,SAAS,iDAAC;AAClD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AACxC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAU,KAAK,oDAAC;AACvC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAsB,SAAS,mDAAC;IACtD,OAAO;QACL,KAAK;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP;KACD;AACH;AAEA;;AAEG;AAEH;;;;;;;;;;;AAWG;MACU,MAAM,GAAG,CAAuB,UAAa,EAAE,OAAsD,KAChH,kBAAkB,CAAqB,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO;AAE9E;;;;;;AAMG;MACU,UAAU,GAAG,CACxB,UAAa,EACb,OAA0D,KACvD,kBAAkB,CAAiC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO;AAEjG;;;;;;AAMG;MACU,gBAAgB,GAAG,CAC9B,UAAa,EACb,OAAgE,KAC7D,kBAAkB,CAAqB,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO;AAE3F;;;;;;AAMG;MACU,OAAO,GAAG,CAAuB,UAAa,EAAE,OAAuD,KAClH,kBAAkB,CAAuB,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO;AAE1E;;;;;;AAMG;MACU,eAAe,GAAG,CAC7B,UAAa,EACb,OAA+D,KAC5D,kBAAkB,CAAuB,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO;AAErF;;;;;;AAMG;MACU,UAAU,GAAG,CACxB,UAAa,EACb,OAA0D,KACvD,kBAAkB,CAAuB,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO;AAEhF;;;;;;AAMG;MACU,QAAQ,GAAG,CACtB,UAAa,EACb,OAAwD,KACrD,kBAAkB,CAAY,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AAE1E;;AAEG;AAEH;;;;;;AAMG;MACU,kBAAkB,GAAG,CAChC,UAAa,EACb,OAA2D,KACxD,kBAAkB,CAAuB,UAAU,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO;AAExF;;;;;;AAMG;MACU,mBAAmB,GAAG,CACjC,UAAa,EACb,OAA2D,KACxD,kBAAkB,CAAY,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO;AAErF;;;;;;AAMG;MACU,gBAAgB,GAAG,CAC9B,UAAa,EACb,OAA2D,KACxD,kBAAkB,CAAuB,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO;AAEtF;;;;;;AAMG;MACU,iBAAiB,GAAG,CAC/B,UAAa,EACb,OAA2D,KACxD,kBAAkB,CAAY,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO;AAEnF;;AAEG;AAEH;;;;;;;;;;;;;;;AAeG;MACU,iBAAiB,GAAG,CAC/B,UAAa,EACb,OAAgE,KAC7D,kBAAkB,CAAuB,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO;AAEtF;;;;;;AAMG;MACU,iBAAiB,GAAG,CAC/B,UAAa,EACb,OAAgE,KAC7D,kBAAkB,CAAY,UAAU,EAAE,gBAAgB,EAAE,CAAC,EAAE,OAAO;AAE3E;;;;;;;;;;;;;;;AAeG;MACU,aAAa,GAAG,CAC3B,UAAa,EACb,OAA4D,KACzD,kBAAkB,CAAW,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO;;AC3StE;;AAEG;MACU,qBAAqB,CAAA;AAeb,IAAA,IAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AAhBV,IAAA,OAAO,GAAG,MAAM,CAAsB,EAAE,mDAAC;AACzC,IAAA,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC;AACjC,IAAA,YAAY;IAErB,eAAe,GAAG,KAAK;AAEd,IAAA,KAAK,GAAG,MAAM,CAAoB,SAAS,iDAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAU,IAAI,mDAAC;AAC/B,IAAA,KAAK,GAAG,QAAQ,CAAoB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,iDAAC;AAChE,IAAA,QAAQ,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;IAC3D,OAAO,GAAG,QAAQ,CAAU,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,eAAe,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEzG,IAAA,WAAA,CACmB,IAAU,EACV,UAAa,EACb,OAAwB,EAAA;QAFxB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,OAAO,GAAP,OAAO;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAK;AAC9B,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC5B,IAAI,CAAC,OAAO,EAAE;YAChB;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;gBAC3B,aAAa,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC;YACF;YACA,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC,QAAA,CAAC,wDAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACvC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AAEzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO;AACpE,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC;QAEpC,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,GAAG,WAAW;QAC7B;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;QAE3C,IAAI,CAAC,IAAI,CAAC;AACP,aAAA,aAAa,CAAC,IAAI,CAAC,UAAU;aAC7B,YAAY,CAAC,OAAO;AACpB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAM,IAAG;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;AAC3B,oBAAA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC;AAC3B,oBAAA,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM;AAC/B,oBAAA,OAAO,OAAO;AAChB,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzB;YACF,CAAC;YACD,KAAK,EAAE,KAAK,IAAG;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B;AACD,SAAA,CAAC;IACN;AAEA;;AAEG;IACH,OAAO,GAAA;;AAEL,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;QAGtB,IAAI,CAAC,QAAQ,EAAE;IACjB;IACA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,aAAa,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACtC;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;QAEzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;QAE5C,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC;AACD;;ACrHD;;;;;;;AAOG;MAEU,yBAAyB,CAAA;AACpC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,IAAA,IAAI;IACY,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA4B;AACtD,IAAA,YAAY,GAAG,KAAK,CAAS,CAAC,wDAAC;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,qDAAC;AAE5C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC5C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AAChB,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC1E,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC5D,QAAA,CAAC,CAAC;IACJ;uGAnBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;;;ACV/C;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,UAAuB,KACjD,wBAAwB,CAAC;AACvB,IAAA;AACE,QAAA,OAAO,EAAE,IAAI;QACb;AACD;AACF,CAAA;;ACVH,MAAM,MAAM,GAAG,CAA0B,SAA6C,KAAI;AACxF,IAAA,MAAM,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;IACxC,OAAO;QACL,SAAS;AACT,QAAA,OAAO,EAAE,OAAO,OAAiB,KAAI;AACnC,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI;AACF,gBAAA,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC;AAClC,gBAAA,OAAO,CAAC;YACV;oBAAU;AACR,gBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB;QACF;KACD;AACH,CAAC;AAEM,MAAM,SAAS,GAAG,CAA0B,SAA6C,KAC9F,MAAM,CAAc,SAAS;;AChB/B,SAAS,KAAK,CAAC,SAAiB,EAAA;IAC9B,OAAO,CAAC,IAAY,KAAI;AACtB,QAAA,MAAMA,QAAM,GAAG,CAAI,YAAe,EAAE,OAAgC,KAAuB;YACzF,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;gBAC1D,IAAI,KAAK,EAAE;AACT,oBAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC;YACF;YACA,MAAM,CAAC,GAAGC,MAAQ,CAAI,YAAY,EAAE,OAAO,CAAC;YAC5C,MAAM,CAAC,MAAK;gBACV,IAAI,UAAU,EAAE;AACd,oBAAA,YAAY,CAAC,OAAO,CAAC,CAAA,EAAG,SAAS,IAAI,IAAI,CAAA,CAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnE;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;QAED,OAAO;oBACLD;SACD;AACH,IAAA,CAAC;AACH;AAEO,MAAM,QAAQ,GAAG,CAAC,SAAiB,KAAK,KAAK,CAAC,SAAS;;AC3B9D;;AAEG;;;;"}
1
+ {"version":3,"file":"aiao-rxdb-angular.mjs","sources":["../../../../packages/rxdb-angular/src/hooks.ts","../../../../packages/rxdb-angular/src/InfiniteScrollingList.ts","../../../../packages/rxdb-angular/src/rxdb-change-detector.directive.ts","../../../../packages/rxdb-angular/src/rxdb.provider.ts","../../../../packages/rxdb-angular/src/use-action.ts","../../../../packages/rxdb-angular/src/use-state.ts","../../../../packages/rxdb-angular/src/aiao-rxdb-angular.ts"],"sourcesContent":["import { EntityStaticType, EntityType, TreeEntityType } from '@aiao/rxdb';\nimport { GraphEntityType } from '@aiao/rxdb-plugin-graph';\nimport { isFunction } from '@aiao/utils';\nimport { effect, Signal, signal } from '@angular/core';\nimport { toLazySignal } from 'ngxtension/to-lazy-signal';\nimport { Observable, Subscriber, Subscription } from 'rxjs';\n\ntype UseOptions<T> = T | (() => T);\n\nexport interface RxDBResource<T> {\n /**\n * 资源的值\n */\n readonly value: Signal<T>;\n /**\n * 资源的错误\n */\n readonly error: Signal<Error | undefined>;\n /**\n * 资源的加载状态\n */\n readonly isLoading: Signal<boolean>;\n /**\n * 资源是否为空\n */\n readonly isEmpty: Signal<boolean | undefined>;\n /**\n * 资源是否有值\n */\n readonly hasValue: Signal<boolean>;\n}\n\nexport const useRepositoryQuery = <T extends EntityType, RT>(\n EntityType: T,\n method: string,\n defaultValue: any,\n options: UseOptions<any>\n): RxDBResource<RT> => {\n let _observer: Subscriber<any>;\n let sub: Subscription;\n\n const _has_sub = signal<boolean>(false);\n const _refresh = signal<number>(0);\n\n const _eff = effect(() => {\n if (_has_sub() === false) return;\n // re-run when refresh is called or options change\n _refresh();\n const opt = isFunction(options) ? options() : options;\n if (sub) sub.unsubscribe();\n // reset state for a new request\n isLoading.set(true);\n error.set(undefined);\n hasValue.set(false);\n isEmpty.set(undefined);\n // 优化:使用 Record<string, any> 替代 any,以提高类型安全性\n const func = (EntityType as unknown as Record<string, any>)[method];\n sub =\n func &&\n func(opt).subscribe({\n next: (d: any) => {\n isLoading.set(false);\n hasValue.set(true);\n if (Array.isArray(d)) {\n isEmpty.set(d.length === 0);\n } else if (d == null) {\n // null/undefined treated as empty\n isEmpty.set(true);\n } else {\n isEmpty.set(false);\n }\n _observer.next(d);\n },\n error: (e: any) => {\n isLoading.set(false);\n error.set(e);\n },\n complete: () => {\n // ensure loading is false even if observable completes without next\n isLoading.set(false);\n }\n });\n });\n const ob = new Observable<RT>(observer => {\n _has_sub.set(true);\n _observer = observer;\n _observer.next(defaultValue);\n return () => {\n _eff.destroy();\n sub?.unsubscribe();\n };\n });\n\n const value = toLazySignal<RT>(ob, {\n initialValue: defaultValue\n }) as Signal<RT>;\n const error = signal<Error | undefined>(undefined);\n const isLoading = signal<boolean>(false);\n const hasValue = signal<boolean>(false);\n const isEmpty = signal<boolean | undefined>(undefined);\n return {\n value,\n error,\n isLoading,\n isEmpty,\n hasValue\n };\n};\n\n/*\n * Repository\n */\n\n/**\n * 通过 ID 获取单个实体\n *\n * @param EntityType 实体类\n * @param options 实体 ID 或查询参数对象\n * @returns 返回包含实体的资源 signal\n *\n * @example\n * ```typescript\n * const user = useGet(User, 'user-1');\n * ```\n */\nexport const useGet = <T extends EntityType>(EntityType: T, options: UseOptions<EntityStaticType<T, 'getOptions'>>) =>\n useRepositoryQuery<T, InstanceType<T>>(EntityType, 'get', undefined, options);\n\n/**\n * 查找第一个匹配条件的实体\n *\n * @param EntityType 实体类\n * @param options 查询参数(where、排序等)\n * @returns 返回包含实体的资源 signal\n */\nexport const useFindOne = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findOneOptions'>>\n) => useRepositoryQuery<T, InstanceType<T> | undefined>(EntityType, 'findOne', undefined, options);\n\n/**\n * 查找匹配的实体,未找到则抛出错误\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含实体的资源 signal\n */\nexport const useFindOneOrFail = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findOneOrFailOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>>(EntityType, 'findOneOrFail', undefined, options);\n\n/**\n * 查找符合条件的多个实体\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含实体数组的资源 signal\n */\nexport const useFind = <T extends EntityType>(EntityType: T, options: UseOptions<EntityStaticType<T, 'findOptions'>>) =>\n useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'find', [], options);\n\n/**\n * 使用游标分页查找实体\n *\n * @param EntityType 实体类\n * @param options 游标参数\n * @returns 返回包含实体数组的资源 signal\n */\nexport const useFindByCursor = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findByCursorOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findByCursor', [], options);\n\n/**\n * 查找全部实体\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含全部实体的资源 signal\n */\nexport const useFindAll = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findAllOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findAll', [], options);\n\n/**\n * 统计满足条件的实体数量\n *\n * @param EntityType 实体类\n * @param options 查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCount = <T extends EntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'countOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'count', undefined, options);\n\n/*\n * TreeRepository\n */\n\n/**\n * 查找树结构中的所有子孙实体\n *\n * @param EntityType 实体类\n * @param options 树查询参数(entityId、深度等)\n * @returns 返回包含子孙实体的资源 signal\n */\nexport const useFindDescendants = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findDescendants', [], options);\n\n/**\n * 统计树结构中的子孙数量\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountDescendants = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countDescendants', undefined, options);\n\n/**\n * 查找树结构中的所有祖先实体\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含祖先实体的资源 signal\n */\nexport const useFindAncestors = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findAncestors', [], options);\n\n/**\n * 统计树结构中的祖先数量\n *\n * @param EntityType 实体类\n * @param options 树查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountAncestors = <T extends TreeEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findTreeOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countAncestors', undefined, options);\n\n/*\n * GraphRepository\n */\n\n/**\n * 查找图结构中的邻接实体\n *\n * @param EntityType 实体类\n * @param options 图查询参数(entityId、方向、层级等)\n * @returns 返回包含邻居实体的资源 signal\n *\n * @example\n * ```typescript\n * const friends = useGraphNeighbors(User, {\n * entityId: 'user-1',\n * direction: 'out',\n * level: 1\n * });\n * ```\n */\nexport const useGraphNeighbors = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findNeighborsOptions'>>\n) => useRepositoryQuery<T, InstanceType<T>[]>(EntityType, 'findNeighbors', [], options);\n\n/**\n * 统计图结构中的邻接数量\n *\n * @param EntityType 实体类\n * @param options 图查询参数\n * @returns 返回包含数量的资源 signal\n */\nexport const useCountNeighbors = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findNeighborsOptions'>>\n) => useRepositoryQuery<T, number>(EntityType, 'countNeighbors', 0, options);\n\n/**\n * 查找图结构中两个实体之间的路径\n *\n * @param EntityType 实体类\n * @param options 路径查询参数(fromId、toId、最大深度等)\n * @returns 返回包含路径的资源 signal\n *\n * @example\n * ```typescript\n * const paths = useGraphPaths(User, {\n * fromId: 'user-1',\n * toId: 'user-2',\n * maxDepth: 5\n * });\n * ```\n */\nexport const useGraphPaths = <T extends GraphEntityType>(\n EntityType: T,\n options: UseOptions<EntityStaticType<T, 'findPathsOptions'>>\n) => useRepositoryQuery<T, any[]>(EntityType, 'findPaths', [], options);\n","import { EntityType, FindByCursorOptions, RxDB } from '@aiao/rxdb';\nimport { isFunction, nextMicroTask } from '@aiao/utils';\nimport { computed, DestroyRef, effect, EffectRef, inject, Signal, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype OptionsInput<T extends EntityType> = FindByCursorOptions<T> | Signal<FindByCursorOptions<T>>;\n\n/**\n * 无限滚动的列表\n */\nexport class InfiniteScrollingList<T extends EntityType> {\n readonly #values = signal<InstanceType<T>[][]>([]);\n readonly #destroy_ref = inject(DestroyRef);\n readonly #options_eff: EffectRef;\n\n #is_initialized = false;\n\n readonly error = signal<Error | undefined>(undefined);\n readonly isLoading = signal<boolean>(false);\n readonly hasMore = signal<boolean>(true);\n readonly value = computed<InstanceType<T>[]>(() => this.#values().flat());\n readonly hasValue = computed<boolean>(() => this.value().length > 0);\n readonly isEmpty = computed<boolean>(() => !this.isLoading() && !this.hasValue() && this.#is_initialized);\n\n constructor(\n private readonly rxdb: RxDB,\n private readonly EntityType: T,\n private readonly options: OptionsInput<T>\n ) {\n this.#options_eff = effect(() => {\n if (isFunction(this.options)) {\n this.options();\n }\n if (!this.#is_initialized) {\n this.#is_initialized = true;\n nextMicroTask(() => this.loadMore());\n return;\n }\n untracked(() => this.#reset());\n });\n\n this.#destroy_ref.onDestroy(() => {\n this.#options_eff.destroy();\n });\n }\n\n loadMore(): void {\n if (this.isLoading() || !this.hasMore()) {\n return;\n }\n\n this.isLoading.set(true);\n this.error.set(undefined);\n\n const last_entity = this.#get_last_entity();\n const opt = isFunction(this.options) ? this.options() : this.options;\n const options: FindByCursorOptions<T> = { ...opt };\n options.limit = options.limit || 100;\n if (last_entity) {\n options.after = last_entity;\n }\n\n const current_index = this.#values().length;\n this.rxdb.entityManager\n .getRepository(this.EntityType)\n .findByCursor(options)\n .pipe(takeUntilDestroyed(this.#destroy_ref))\n .subscribe({\n next: result => {\n this.isLoading.set(false);\n this.#values.update(values => {\n const updated = [...values];\n updated[current_index] = result;\n return updated;\n });\n\n if (result.length < options.limit!) {\n this.hasMore.set(false);\n }\n },\n error: error => {\n this.isLoading.set(false);\n this.error.set(error);\n },\n complete: () => {\n this.hasMore.set(false);\n this.isLoading.set(false);\n }\n });\n }\n\n /**\n * 刷新列表数据\n */\n refresh(): void {\n // 强制重置状态,即使正在加载中\n this.#values.set([]);\n this.error.set(undefined);\n this.isLoading.set(false); // 强制设置为 false,允许新的 loadMore\n this.hasMore.set(true);\n\n // 立即开始加载\n this.loadMore();\n }\n #reset(): void {\n this.#values.set([]);\n this.error.set(undefined);\n this.isLoading.set(false);\n this.hasMore.set(true);\n nextMicroTask(() => this.loadMore());\n }\n\n #get_last_entity(): InstanceType<T> | undefined {\n const values = this.#values();\n if (values.length === 0) return undefined;\n\n const last_page = values[values.length - 1];\n if (last_page.length === 0) return undefined;\n\n return last_page[last_page.length - 1];\n }\n}\n","import { EntityType, getEntityStatus } from '@aiao/rxdb';\nimport { ChangeDetectorRef, DestroyRef, Directive, effect, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { auditTime, debounceTime, Subscription } from 'rxjs';\n\n/**\n * RxDB 实体变化指令\n * 如果你使用了 `changeDetection: ChangeDetectionStrategy.OnPush`\n * 那么正在输入的变化不会触发 angular 渲染机制,使用这个指令可以实现实时渲染\n *\n * @example\n * 当修改实体时,需要在多个地方预览修改变化时,可以使用这个指令\n */\n@Directive({ selector: '[rxdbChangeDetector]' })\nexport class RxDBEntityChangeDirective {\n #destroyRef = inject(DestroyRef);\n #changeDetectorRef = inject(ChangeDetectorRef);\n #sub?: Subscription;\n public readonly rxdbChangeDetector = input<InstanceType<EntityType>>();\n public readonly debounceTime = input<number>(0);\n public readonly auditTime = input<number>(0);\n\n constructor() {\n effect(() => {\n const rxdbChange = this.rxdbChangeDetector();\n const dt = this.debounceTime();\n const at = this.auditTime();\n const status = getEntityStatus(rxdbChange);\n this.#sub?.unsubscribe();\n this.#sub = status.patches$\n .pipe(takeUntilDestroyed(this.#destroyRef), debounceTime(dt), auditTime(at))\n .subscribe(() => this.#changeDetectorRef.markForCheck());\n });\n }\n}\n","import { RxDB } from '@aiao/rxdb';\nimport { makeEnvironmentProviders } from '@angular/core';\n\n/**\n * RxDB 配置\n */\nexport const provideRxDB = (useFactory?: () => RxDB) =>\n makeEnvironmentProviders([\n {\n provide: RxDB,\n useFactory\n }\n ]);\n","import { signal } from '@angular/core';\n\nconst action = <Options = any, RT = any>(promiseFn: (options?: Options) => Promise<RT>) => {\n const isPending = signal<boolean>(false);\n return {\n isPending,\n execute: async (options?: Options) => {\n isPending.set(true);\n try {\n const d = await promiseFn(options);\n return d;\n } finally {\n isPending.set(false);\n }\n }\n };\n};\n\nexport const useAction = <Options = any, RT = any>(promiseFn: (options?: Options) => Promise<RT>) =>\n action<Options, RT>(promiseFn);\n","import { IS_BROWSER } from '@aiao/utils';\nimport { CreateSignalOptions, effect, signal as ngSignal, WritableSignal } from '@angular/core';\n\nfunction state(namespace: string) {\n return (name: string) => {\n const signal = <T>(initialValue: T, options?: CreateSignalOptions<T>): WritableSignal<T> => {\n if (IS_BROWSER) {\n const value = localStorage.getItem(`${namespace}:${name}`);\n if (value) {\n initialValue = JSON.parse(value);\n }\n }\n const a = ngSignal<T>(initialValue, options);\n effect(() => {\n if (IS_BROWSER) {\n localStorage.setItem(`${namespace}:${name}`, JSON.stringify(a()));\n }\n });\n return a;\n };\n\n return {\n signal\n };\n };\n}\n\nexport const useState = (namespace: string) => state(namespace);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["signal","ngSignal"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "name": "@aiao/rxdb-angular",
3
+ "version": "0.0.19",
4
+ "type": "module",
3
5
  "peerDependencies": {
4
6
  "@aiao/rxdb": "*",
5
7
  "@aiao/rxdb-plugin-graph": "*",
@@ -12,7 +14,6 @@
12
14
  "access": "public"
13
15
  },
14
16
  "sideEffects": false,
15
- "version": "0.0.15",
16
17
  "module": "fesm2022/aiao-rxdb-angular.mjs",
17
18
  "typings": "types/aiao-rxdb-angular.d.ts",
18
19
  "exports": {
@@ -27,4 +28,4 @@
27
28
  "dependencies": {
28
29
  "tslib": "^2.3.0"
29
30
  }
30
- }
31
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Aiao Team
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.