proto.io 0.0.156 → 0.0.157

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.
@@ -60,8 +60,8 @@ type FileData = string | Blob | BinaryData | FileStream | {
60
60
 
61
61
  interface TFile {
62
62
  url: string | undefined;
63
- fileData(options?: ExtraOptions<boolean, ProtoType<any>>): FileStream;
64
- save(options?: ExtraOptions<boolean, ProtoType<any>> & {
63
+ fileData(options?: ExtraOptions<boolean>): FileStream;
64
+ save(options?: ExtraOptions<boolean> & {
65
65
  cascadeSave?: boolean;
66
66
  uploadToken?: string;
67
67
  }): PromiseLike<this>;
@@ -220,30 +220,30 @@ interface TQueryOptions extends TQueryBaseOptions {
220
220
  interface TQueryRandomOptions {
221
221
  weight?: string;
222
222
  }
223
- declare abstract class TQuery<T extends string, Ext, M extends boolean, P extends ProtoType<any>> extends TQueryBase {
223
+ declare abstract class TQuery<T extends string, Ext, M extends boolean> extends TQueryBase {
224
224
  constructor(className: T, options?: TQueryOptions);
225
225
  get className(): T;
226
- abstract clone(options?: TQueryOptions): TQuery<T, Ext, M, P>;
227
- abstract explain(options?: ExtraOptions<M, P>): PromiseLike<any>;
228
- abstract count(options?: ExtraOptions<M, P>): PromiseLike<number>;
229
- abstract find(options?: ExtraOptions<M, P>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
230
- abstract random(opts?: TQueryRandomOptions, options?: ExtraOptions<M, P>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
231
- abstract nonrefs(options?: ExtraOptions<M, P>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
232
- abstract insert(attrs: Record<string, TValue>, options?: ExtraOptions<M, P>): PromiseLike<TObjectType<T, Ext>>;
233
- abstract insertMany(values: Record<string, TValue>[], options?: ExtraOptions<M, P>): PromiseLike<number>;
234
- abstract updateOne(update: Record<string, TUpdateOp>, options?: ExtraOptions<M, P>): PromiseLike<TObjectType<T, Ext> | undefined>;
235
- abstract upsertOne(update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValue>, options?: ExtraOptions<M, P>): PromiseLike<TObjectType<T, Ext>>;
236
- abstract deleteOne(options?: ExtraOptions<M, P>): PromiseLike<TObjectType<T, Ext> | undefined>;
237
- abstract deleteMany(options?: ExtraOptions<M, P>): PromiseLike<number>;
226
+ abstract clone(options?: TQueryOptions): TQuery<T, Ext, M>;
227
+ abstract explain(options?: ExtraOptions<M>): PromiseLike<any>;
228
+ abstract count(options?: ExtraOptions<M>): PromiseLike<number>;
229
+ abstract find(options?: ExtraOptions<M>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
230
+ abstract random(opts?: TQueryRandomOptions, options?: ExtraOptions<M>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
231
+ abstract nonrefs(options?: ExtraOptions<M>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;
232
+ abstract insert(attrs: Record<string, TValue>, options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext>>;
233
+ abstract insertMany(values: Record<string, TValue>[], options?: ExtraOptions<M>): PromiseLike<number>;
234
+ abstract updateOne(update: Record<string, TUpdateOp>, options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext> | undefined>;
235
+ abstract upsertOne(update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValue>, options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext>>;
236
+ abstract deleteOne(options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext> | undefined>;
237
+ abstract deleteMany(options?: ExtraOptions<M>): PromiseLike<number>;
238
238
  includes<T extends string[]>(...includes: IncludePaths<T>): this;
239
- get(id: string, options?: ExtraOptions<M, P>): Promise<TObjectType<T, Ext> | undefined>;
240
- first(options?: ExtraOptions<M, P>): Promise<TObjectType<T, Ext> | undefined>;
241
- randomOne(opts?: TQueryRandomOptions, options?: ExtraOptions<M, P>): Promise<TObjectType<T, Ext> | undefined>;
242
- exists(options?: ExtraOptions<M, P>): Promise<boolean>;
243
- eachBatch(callback: (batch: TObjectType<T, Ext>[]) => Awaitable<void>, options?: ExtraOptions<M, P> & {
239
+ get(id: string, options?: ExtraOptions<M>): Promise<TObjectType<T, Ext> | undefined>;
240
+ first(options?: ExtraOptions<M>): Promise<TObjectType<T, Ext> | undefined>;
241
+ randomOne(opts?: TQueryRandomOptions, options?: ExtraOptions<M>): Promise<TObjectType<T, Ext> | undefined>;
242
+ exists(options?: ExtraOptions<M>): Promise<boolean>;
243
+ eachBatch(callback: (batch: TObjectType<T, Ext>[]) => Awaitable<void>, options?: ExtraOptions<M> & {
244
244
  batchSize?: number;
245
245
  }): Promise<void>;
246
- each(callback: (object: TObjectType<T, Ext>) => Awaitable<void>, options?: ExtraOptions<M, P> & {
246
+ each(callback: (object: TObjectType<T, Ext>) => Awaitable<void>, options?: ExtraOptions<M> & {
247
247
  batchSize?: number;
248
248
  }): Promise<void>;
249
249
  }
@@ -294,10 +294,10 @@ declare abstract class ProtoType<Ext> {
294
294
  master: true;
295
295
  acl?: string[];
296
296
  }): Promise<void>;
297
- abstract run(name: string, data?: TSerializable, options?: ExtraOptions<boolean, this>): Promise<void | TSerializable>;
298
- abstract Query<T extends string>(className: T): TQuery<T, Ext, boolean, this>;
299
- abstract Relation<T extends string>(className: T, object: TObject, key: string): TQuery<T, Ext, boolean, this>;
300
- abstract refs(object: TObject, options?: ExtraOptions<boolean, this>): ReturnType<typeof asyncStream<TObjectType<string, Ext>>>;
297
+ abstract run(name: string, data?: TSerializable, options?: ExtraOptions<boolean>): Promise<void | TSerializable>;
298
+ abstract Query<T extends string>(className: T): TQuery<T, Ext, boolean>;
299
+ abstract Relation<T extends string>(className: T, object: TObject, key: string): TQuery<T, Ext, boolean>;
300
+ abstract refs(object: TObject, options?: ExtraOptions<boolean>): ReturnType<typeof asyncStream<TObjectType<string, Ext>>>;
301
301
  online(): Promise<boolean>;
302
302
  rebind<T extends TSerializable | undefined>(object: T): T;
303
303
  Object<T extends string>(className: T, objectId?: string): TObjectType<T, Ext>;
@@ -305,7 +305,7 @@ declare abstract class ProtoType<Ext> {
305
305
  userRoles(user: TUser): Promise<TObjectType<"Role", Ext>[]>;
306
306
  abstract notify(data: Record<string, _TValue> & {
307
307
  _rperm?: string[];
308
- }, options?: ExtraOptions<boolean, this>): Promise<void>;
308
+ }, options?: ExtraOptions<boolean>): Promise<void>;
309
309
  abstract listen(callback: (data: EventData) => void): {
310
310
  remove: VoidFunction;
311
311
  socket?: Socket;
@@ -331,9 +331,9 @@ interface ProtoType<Ext> {
331
331
  cookieOptions?: CookieOptions | undefined;
332
332
  jwtSignOptions?: SignOptions | undefined;
333
333
  }): Promise<void>;
334
- varifyPassword(user: TUser, password: string, options: ExtraOptions<true, this>): Promise<boolean>;
335
- setPassword(user: TUser, password: string, options: ExtraOptions<true, this>): Promise<void>;
336
- unsetPassword(user: TUser, options: ExtraOptions<true, this>): Promise<void>;
334
+ varifyPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<boolean>;
335
+ setPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<void>;
336
+ unsetPassword(user: TUser, options: ExtraOptions<true>): Promise<void>;
337
337
  define(name: string, callback: ProtoFunction<Ext>, options?: Omit<ProtoFunctionOptions<Ext>, 'callback'>): void;
338
338
  beforeSave<T extends string>(name: T, callback: ProtoTrigger<T, Ext>): void;
339
339
  afterSave<T extends string>(name: T, callback: ProtoTrigger<T, Ext>): void;
@@ -349,21 +349,21 @@ interface ProtoType<Ext> {
349
349
  }
350
350
 
351
351
  type TriggerType = 'beforeSave' | 'afterSave' | 'beforeDelete' | 'afterDelete';
352
- type ExtraOptions<M extends boolean, P extends ProtoType<any>> = {
352
+ type ExtraOptions<M extends boolean> = {
353
353
  master?: M;
354
354
  context?: TSerializable;
355
355
  silent?: TriggerType | TriggerType[];
356
- session?: P;
356
+ session?: ProtoType<any>;
357
357
  abortSignal?: AbortSignal;
358
358
  };
359
359
 
360
360
  interface TObject {
361
361
  clone(): TObject;
362
- fetchWithInclude(keys: string[], options?: ExtraOptions<boolean, ProtoType<any>>): PromiseLike<this>;
363
- save(options?: ExtraOptions<boolean, ProtoType<any>> & {
362
+ fetchWithInclude(keys: string[], options?: ExtraOptions<boolean>): PromiseLike<this>;
363
+ save(options?: ExtraOptions<boolean> & {
364
364
  cascadeSave?: boolean;
365
365
  }): PromiseLike<this>;
366
- destroy(options?: ExtraOptions<boolean, ProtoType<any>>): PromiseLike<this>;
366
+ destroy(options?: ExtraOptions<boolean>): PromiseLike<this>;
367
367
  }
368
368
  declare class TObject {
369
369
  static defaultReadonlyKeys: string[];
@@ -400,8 +400,8 @@ declare class TObject {
400
400
  removeAll<T extends string>(key: PathName<T>, values: TValue[]): void;
401
401
  popFirst<T extends string>(key: PathName<T>, count?: number): void;
402
402
  popLast<T extends string>(key: PathName<T>, count?: number): void;
403
- fetch(options?: ExtraOptions<boolean, any>): Promise<this>;
404
- fetchIfNeeded(keys: string[], options?: ExtraOptions<boolean, any>): Promise<this>;
403
+ fetch(options?: ExtraOptions<boolean>): Promise<this>;
404
+ fetchIfNeeded(keys: string[], options?: ExtraOptions<boolean>): Promise<this>;
405
405
  }
406
406
 
407
407
  type TPrimitiveValue = boolean | number | Decimal$1 | string | Date | null;
@@ -626,7 +626,7 @@ type ProtoServiceKeyOptions = {
626
626
  }[];
627
627
  };
628
628
 
629
- declare class ProtoService<Ext> extends ProtoType<Ext> {
629
+ declare class ProtoService<Ext = any> extends ProtoType<Ext> {
630
630
  private _storage?;
631
631
  private _schedule;
632
632
  req?: Request;
@@ -634,9 +634,9 @@ declare class ProtoService<Ext> extends ProtoType<Ext> {
634
634
  constructor(options: ProtoServiceOptions<Ext> & ProtoServiceKeyOptions);
635
635
  shutdown(): Promise<void>;
636
636
  classes(): string[];
637
- Query<T extends string>(className: T): TQuery<T, Ext, boolean, this>;
638
- Relation<T extends string>(className: T, object: TObject, key: string): TQuery<T, Ext, boolean, this>;
639
- InsecureQuery<T extends string>(className: T): TQuery<T, Ext, true, this>;
637
+ Query<T extends string>(className: T): TQuery<T, Ext, boolean>;
638
+ Relation<T extends string>(className: T, object: TObject, key: string): TQuery<T, Ext, boolean>;
639
+ InsecureQuery<T extends string>(className: T): TQuery<T, Ext, true>;
640
640
  get sessionId(): string | undefined;
641
641
  sessionInfo(): Promise<Session | {
642
642
  loginedAt: Date | undefined;
@@ -675,9 +675,9 @@ declare class ProtoService<Ext> extends ProtoType<Ext> {
675
675
  cookieOptions?: CookieOptions | undefined;
676
676
  jwtSignOptions?: jwt.SignOptions | undefined;
677
677
  }): Promise<void>;
678
- varifyPassword(user: TUser, password: string, options: ExtraOptions<true, this>): Promise<boolean>;
679
- setPassword(user: TUser, password: string, options: ExtraOptions<true, this>): Promise<void>;
680
- unsetPassword(user: TUser, options: ExtraOptions<true, this>): Promise<void>;
678
+ varifyPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<boolean>;
679
+ setPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<void>;
680
+ unsetPassword(user: TUser, options: ExtraOptions<true>): Promise<void>;
681
681
  get schema(): ProtoServiceOptions<Ext>['schema'];
682
682
  get storage(): ProtoServiceOptions<Ext>['storage'];
683
683
  get fileStorage(): ProtoServiceOptions<Ext>['fileStorage'];
@@ -691,7 +691,7 @@ declare class ProtoService<Ext> extends ProtoType<Ext> {
691
691
  master: true;
692
692
  acl?: string[];
693
693
  }): Promise<void>;
694
- run(name: string, params?: TSerializable, options?: ExtraOptions<boolean, this>): Promise<void | TSerializable>;
694
+ run(name: string, params?: TSerializable, options?: ExtraOptions<boolean>): Promise<void | TSerializable>;
695
695
  define(name: string, callback: ProtoFunction<Ext>, options?: Omit<ProtoFunctionOptions<Ext>, 'callback'>): void;
696
696
  beforeSave<T extends string>(name: T, callback: ProtoTrigger<T, Ext>): void;
697
697
  afterSave<T extends string>(name: T, callback: ProtoTrigger<T, Ext>): void;
@@ -711,8 +711,8 @@ declare class ProtoService<Ext> extends ProtoType<Ext> {
711
711
  listen(callback: (data: EventData) => void): {
712
712
  remove: VoidFunction;
713
713
  };
714
- refs(object: TObject, options?: ExtraOptions<boolean, this>): _o2ter_utils_js.AsyncStream<TObjectType<string, Ext>>;
714
+ refs(object: TObject, options?: ExtraOptions<boolean>): _o2ter_utils_js.AsyncStream<TObjectType<string, Ext>>;
715
715
  }
716
716
 
717
717
  export { type TFileInfo as A, type DeserializeOptions as D, type ExtraOptions as E, type FindOptions as F, type InsertOptions as I, ProtoService as P, QuerySelector as Q, type RelationOptions as R, type SerializeOptions as S, TSchema as T, type _TValue as _, type ProtoServiceOptions as a, type ProtoServiceKeyOptions as b, type TFileStorage as c, type TSerializable as d, deserialize as e, type TExtensions as f, TQuery as g, TObject as h, TUser as i, TRole as j, TFile as k, ProtoType as l, type TObjectType as m, type EventData as n, type DecodedQuery as o, type DecodedSortOption as p, type TValue as q, type FindOneOptions as r, serialize as s, type TUpdateOp as t, FieldSelectorExpression as u, QueryExpression as v, type TStorage as w, type TransactionOptions as x, type TQueryRandomOptions as y, type TPubSub as z };
718
- //# sourceMappingURL=index-BLVOKfv3.d.ts.map
718
+ //# sourceMappingURL=index-Bb9jyfQC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Bb9jyfQC.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index-BmRuvHVZ.mjs","sources":["../../../src/internals/schema.ts","../../../src/internals/object/index.ts"],"sourcesContent":["//\n// schema.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _TValue } from './types';\n\nexport namespace TSchema {\n export type ACL = string[];\n export type ACLs = { read: TSchema.ACL; update: TSchema.ACL; };\n export type Primitive = 'boolean' | 'number' | 'decimal' | 'string' | 'date' | 'object' | 'array';\n export type PrimitiveType = Primitive | { type: Primitive; default?: _TValue; };\n export type VectorType = { type: 'vector'; dimension: number; default?: number[]; };\n export type ShapeType = { type: 'shape'; shape: Record<string, DataType>; };\n export type Relation = 'pointer' | 'relation';\n export type PointerType = { type: 'pointer'; target: string; };\n export type RelationType = { type: 'relation'; target: string; foreignField?: string; };\n export type DataType = PrimitiveType | VectorType | ShapeType | PointerType | RelationType;\n export type CLPs = {\n get?: TSchema.ACL;\n find?: TSchema.ACL;\n count?: TSchema.ACL;\n create?: TSchema.ACL;\n update?: TSchema.ACL;\n delete?: TSchema.ACL;\n };\n export type FLPs = {\n read?: TSchema.ACL;\n create?: TSchema.ACL;\n update?: TSchema.ACL;\n };\n export type Indexes = {\n type?: 'basic';\n keys: Record<string, 1 | -1>;\n unique?: boolean;\n } | {\n type: 'vector';\n keys: string | string[];\n method?: 'hnsw' | 'ivfflat';\n };\n}\n\nexport const isPrimitive = (x: TSchema.DataType): x is TSchema.PrimitiveType => _.isString(x) || (x.type !== 'pointer' && x.type !== 'relation' && x.type !== 'shape');\nexport const isVector = (x: TSchema.DataType): x is TSchema.VectorType => !_.isString(x) && x.type === 'vector';\nexport const dimensionOf = (x: TSchema.DataType) => isVector(x) ? x.dimension : 0;\nexport const isShape = (x: TSchema.DataType): x is TSchema.ShapeType => !_.isString(x) && x.type === 'shape';\nexport const isPointer = (x: TSchema.DataType): x is TSchema.PointerType => !_.isString(x) && x.type === 'pointer';\nexport const isRelation = (x: TSchema.DataType): x is TSchema.RelationType => !_.isString(x) && x.type === 'relation';\nexport const _typeof = (x: TSchema.DataType) => _.isString(x) ? x : x.type !== 'pointer' && x.type !== 'relation' ? x.type : x.target;\n\nexport const shapePaths = (x: TSchema.ShapeType): {\n path: string,\n type: Exclude<TSchema.DataType, TSchema.ShapeType>,\n}[] => _.flatMap(x.shape, (v, k) => (\n isShape(v) ? _.map(shapePaths(v), x => ({ path: `${k}.${x.path}`, type: x.type })) : { path: k, type: v }\n));\n\nexport interface TSchema {\n fields: Record<string, TSchema.DataType>;\n classLevelPermissions?: TSchema.CLPs;\n additionalObjectPermissions?: TSchema.ACLs;\n fieldLevelPermissions?: Record<string, TSchema.FLPs>;\n secureFields?: string[];\n indexes?: TSchema.Indexes[];\n}\n\nexport const defaultObjectKeyTypes: Record<string, TSchema.DataType> = {\n _id: 'string',\n __v: 'number',\n __i: 'number',\n _created_at: 'date',\n _updated_at: 'date',\n _expired_at: 'date',\n _rperm: 'array',\n _wperm: 'array',\n};\n\nexport const defaultObjectReadonlyKeys = ['_id', '__v', '__i', '_created_at', '_updated_at'];\nexport const defaultObjectKeys = [...defaultObjectReadonlyKeys, '_expired_at', '_rperm', '_wperm'];\n","//\n// object.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PVK } from '../private';\nimport { ExtraOptions } from '../options';\nimport { Decimal } from 'decimal.js';\nimport { TPrimitiveValue, TValue, _TValue } from '../types';\nimport { TSchema, defaultObjectKeys, defaultObjectReadonlyKeys } from '../schema';\nimport { PathName } from '../query/types';\nimport { TUpdateOp, TUpdateOpKeys } from './types';\nimport { ProtoType } from '../proto';\n\nexport const isPrimitiveValue = (x: any): x is TPrimitiveValue => {\n if (_.isNil(x) || _.isNumber(x) || _.isBoolean(x) || _.isString(x) || _.isDate(x)) return true;\n if (x instanceof Decimal) return true;\n return false;\n}\n\nexport const isValue = (x: any): x is TValue => {\n if (isPrimitiveValue(x) || x instanceof TObject) return true;\n if (_.isArray(x)) return _.every(x, v => isValue(v));\n if (_.isPlainObject(x)) return _.every(x, v => isValue(v));\n return false;\n}\n\nexport const cloneValue = <T extends TValue>(x: T): T => {\n if (isPrimitiveValue(x) || x instanceof TObject) return x;\n if (_.isArray(x)) return x.map(v => cloneValue(v)) as T;\n return _.mapValues(x, v => cloneValue(v)) as T;\n}\n\nexport const _decodeValue = (value: _TValue): _TValue => {\n if (isPrimitiveValue(value)) return value;\n if (_.isArray(value)) return _.map(value, x => _decodeValue(x));\n if (_.isString(value.$date)) return new Date(value.$date);\n if (_.isString(value.$decimal)) return new Decimal(value.$decimal);\n return _.transform(value, (r, v, k) => {\n r[k.startsWith('$') ? k.substring(1) : k] = _decodeValue(v);\n }, {} as any);\n};\n\nexport const _encodeValue = (value: TValue): _TValue => {\n if (value instanceof TObject) throw Error('Invalid data type');\n if (_.isDate(value)) return { $date: value.toISOString() };\n if (value instanceof Decimal) return { $decimal: value.toString() };\n if (isPrimitiveValue(value)) return value;\n if (_.isArray(value)) return _.map(value, x => _encodeValue(x));\n return _.transform(value, (r, v, k) => {\n r[k.startsWith('$') ? `$${k}` : k] = _encodeValue(v);\n }, {} as any);\n};\n\nexport const decodeUpdateOp = (update: TUpdateOp) => {\n const pairs = _.toPairs(update);\n if (pairs.length !== 1) throw Error('Invalid update operation');\n return pairs[0] as [typeof TUpdateOpKeys[number], TValue];\n}\n\nexport interface TObject {\n clone(): TObject;\n fetchWithInclude(keys: string[], options?: ExtraOptions<boolean, ProtoType<any>>): PromiseLike<this>;\n save(options?: ExtraOptions<boolean, ProtoType<any>> & { cascadeSave?: boolean }): PromiseLike<this>;\n destroy(options?: ExtraOptions<boolean, ProtoType<any>>): PromiseLike<this>;\n}\n\nexport class TObject {\n\n static defaultReadonlyKeys = defaultObjectReadonlyKeys;\n static defaultKeys = defaultObjectKeys;\n\n /** @internal */\n [PVK]: {\n className: string;\n attributes: Record<string, TValue>;\n mutated: Record<string, TUpdateOp>;\n extra: Record<string, any>;\n };\n\n constructor(\n className: string,\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n const _attributes = _.isFunction(attributes) ? attributes(this) : attributes ?? {};\n this[PVK] = {\n className,\n attributes: cloneValue(_attributes),\n mutated: {},\n extra: {},\n }\n }\n\n get className(): string {\n return this[PVK].className;\n }\n\n get attributes(): Record<string, TValue> {\n return cloneValue(this[PVK].attributes);\n }\n\n get objectId(): string | undefined {\n return this[PVK].attributes._id as string;\n }\n\n get createdAt(): Date | undefined {\n return this[PVK].attributes._created_at as Date;\n }\n\n get updatedAt(): Date | undefined {\n return this[PVK].attributes._updated_at as Date;\n }\n\n get __v(): number {\n return this[PVK].attributes.__v as number;\n }\n\n get __i(): number {\n return this[PVK].attributes.__i as number;\n }\n\n get expiredAt(): Date | undefined {\n return this.get('_expired_at');\n }\n\n set expiredAt(value: Date | undefined) {\n this.set('_expired_at', value);\n }\n\n acl(): TSchema.ACLs {\n return {\n read: this.get('_rperm') ?? ['*'],\n update: this.get('_wperm') ?? ['*'],\n };\n }\n\n setAcl(value: Partial<TSchema.ACLs>) {\n this.set('_rperm', value.read ?? ['*']);\n this.set('_wperm', value.update ?? ['*']);\n }\n\n setReadAcl(value: TSchema.ACL) {\n this.set('_rperm', value);\n }\n\n setWriteAcl(value: TSchema.ACL) {\n this.set('_wperm', value);\n }\n\n keys(): string[] {\n return _.uniq([..._.keys(this[PVK].attributes), ..._.compact(_.map(_.keys(this[PVK].mutated), x => _.first(_.toPath(x))))]);\n }\n\n *entries() {\n for (const key of this.keys()) {\n yield [key, this.get(key)] as [string, any];\n }\n }\n\n /** @internal */\n *_set_entries() {\n for (const [key, op] of _.entries(this[PVK].mutated)) {\n for (const [_op, value] of _.entries(op)) {\n if (_op === '$set') yield [key, value] as [string, any];\n }\n }\n }\n\n toObject() {\n const toObject = (value: TValue): _TValue => {\n if (isPrimitiveValue(value)) return value;\n if (value instanceof TObject) return value.toObject();\n if (_.isArray(value)) return _.map(value, toObject);\n return _.mapValues(value, toObject);\n }\n return _.fromPairs(_.map(this.keys(), k => [k, toObject(this.get(k))]));\n }\n\n private _value(key: string): TValue {\n let value: TValue = this[PVK].attributes;\n for (const k of _.toPath(key)) {\n if (isPrimitiveValue(value)) return null;\n if (value instanceof TObject) {\n value = value.get(k);\n } else {\n value = _.get(value, k);\n }\n }\n return cloneValue(value);\n }\n\n get<T extends string>(key: PathName<T>): any {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (_.isNil(this[PVK].mutated[key])) return this._value(key);\n const [op, value] = decodeUpdateOp(this[PVK].mutated[key]);\n return op === '$set' ? value : this._value(key);\n }\n\n set<T extends string>(key: PathName<T>, value: TValue | undefined) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $set: value ?? null };\n }\n\n get isDirty(): boolean {\n return !_.isEmpty(this[PVK].mutated);\n }\n\n increment<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $inc: value };\n }\n\n decrement<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $dec: value };\n }\n\n multiply<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $mul: value };\n }\n\n divide<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $div: value };\n }\n\n max<T extends string>(key: PathName<T>, value: TValue) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $max: value };\n }\n\n min<T extends string>(key: PathName<T>, value: TValue) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $min: value };\n }\n\n addToSet<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $addToSet: values };\n }\n\n push<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $push: values };\n }\n\n removeAll<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $removeAll: values };\n }\n\n popFirst<T extends string>(key: PathName<T>, count = 1) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $popFirst: count };\n }\n\n popLast<T extends string>(key: PathName<T>, count = 1) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $popLast: count };\n }\n\n async fetch(options?: ExtraOptions<boolean, any>) {\n return this.fetchWithInclude(_.keys(this[PVK].attributes), options);\n }\n\n async fetchIfNeeded(keys: string[], options?: ExtraOptions<boolean, any>) {\n const current = _.keys(this[PVK].attributes);\n if (_.every(keys, k => _.includes(current, k))) return this;\n return this.fetchWithInclude(_.uniq([...current, ...keys]), options);\n }\n\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-BmRuvHVZ.mjs","sources":["../../../src/internals/schema.ts","../../../src/internals/object/index.ts"],"sourcesContent":["//\n// schema.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _TValue } from './types';\n\nexport namespace TSchema {\n export type ACL = string[];\n export type ACLs = { read: TSchema.ACL; update: TSchema.ACL; };\n export type Primitive = 'boolean' | 'number' | 'decimal' | 'string' | 'date' | 'object' | 'array';\n export type PrimitiveType = Primitive | { type: Primitive; default?: _TValue; };\n export type VectorType = { type: 'vector'; dimension: number; default?: number[]; };\n export type ShapeType = { type: 'shape'; shape: Record<string, DataType>; };\n export type Relation = 'pointer' | 'relation';\n export type PointerType = { type: 'pointer'; target: string; };\n export type RelationType = { type: 'relation'; target: string; foreignField?: string; };\n export type DataType = PrimitiveType | VectorType | ShapeType | PointerType | RelationType;\n export type CLPs = {\n get?: TSchema.ACL;\n find?: TSchema.ACL;\n count?: TSchema.ACL;\n create?: TSchema.ACL;\n update?: TSchema.ACL;\n delete?: TSchema.ACL;\n };\n export type FLPs = {\n read?: TSchema.ACL;\n create?: TSchema.ACL;\n update?: TSchema.ACL;\n };\n export type Indexes = {\n type?: 'basic';\n keys: Record<string, 1 | -1>;\n unique?: boolean;\n } | {\n type: 'vector';\n keys: string | string[];\n method?: 'hnsw' | 'ivfflat';\n };\n}\n\nexport const isPrimitive = (x: TSchema.DataType): x is TSchema.PrimitiveType => _.isString(x) || (x.type !== 'pointer' && x.type !== 'relation' && x.type !== 'shape');\nexport const isVector = (x: TSchema.DataType): x is TSchema.VectorType => !_.isString(x) && x.type === 'vector';\nexport const dimensionOf = (x: TSchema.DataType) => isVector(x) ? x.dimension : 0;\nexport const isShape = (x: TSchema.DataType): x is TSchema.ShapeType => !_.isString(x) && x.type === 'shape';\nexport const isPointer = (x: TSchema.DataType): x is TSchema.PointerType => !_.isString(x) && x.type === 'pointer';\nexport const isRelation = (x: TSchema.DataType): x is TSchema.RelationType => !_.isString(x) && x.type === 'relation';\nexport const _typeof = (x: TSchema.DataType) => _.isString(x) ? x : x.type !== 'pointer' && x.type !== 'relation' ? x.type : x.target;\n\nexport const shapePaths = (x: TSchema.ShapeType): {\n path: string,\n type: Exclude<TSchema.DataType, TSchema.ShapeType>,\n}[] => _.flatMap(x.shape, (v, k) => (\n isShape(v) ? _.map(shapePaths(v), x => ({ path: `${k}.${x.path}`, type: x.type })) : { path: k, type: v }\n));\n\nexport interface TSchema {\n fields: Record<string, TSchema.DataType>;\n classLevelPermissions?: TSchema.CLPs;\n additionalObjectPermissions?: TSchema.ACLs;\n fieldLevelPermissions?: Record<string, TSchema.FLPs>;\n secureFields?: string[];\n indexes?: TSchema.Indexes[];\n}\n\nexport const defaultObjectKeyTypes: Record<string, TSchema.DataType> = {\n _id: 'string',\n __v: 'number',\n __i: 'number',\n _created_at: 'date',\n _updated_at: 'date',\n _expired_at: 'date',\n _rperm: 'array',\n _wperm: 'array',\n};\n\nexport const defaultObjectReadonlyKeys = ['_id', '__v', '__i', '_created_at', '_updated_at'];\nexport const defaultObjectKeys = [...defaultObjectReadonlyKeys, '_expired_at', '_rperm', '_wperm'];\n","//\n// object.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2024 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PVK } from '../private';\nimport { ExtraOptions } from '../options';\nimport { Decimal } from 'decimal.js';\nimport { TPrimitiveValue, TValue, _TValue } from '../types';\nimport { TSchema, defaultObjectKeys, defaultObjectReadonlyKeys } from '../schema';\nimport { PathName } from '../query/types';\nimport { TUpdateOp, TUpdateOpKeys } from './types';\nimport { ProtoType } from '../proto';\n\nexport const isPrimitiveValue = (x: any): x is TPrimitiveValue => {\n if (_.isNil(x) || _.isNumber(x) || _.isBoolean(x) || _.isString(x) || _.isDate(x)) return true;\n if (x instanceof Decimal) return true;\n return false;\n}\n\nexport const isValue = (x: any): x is TValue => {\n if (isPrimitiveValue(x) || x instanceof TObject) return true;\n if (_.isArray(x)) return _.every(x, v => isValue(v));\n if (_.isPlainObject(x)) return _.every(x, v => isValue(v));\n return false;\n}\n\nexport const cloneValue = <T extends TValue>(x: T): T => {\n if (isPrimitiveValue(x) || x instanceof TObject) return x;\n if (_.isArray(x)) return x.map(v => cloneValue(v)) as T;\n return _.mapValues(x, v => cloneValue(v)) as T;\n}\n\nexport const _decodeValue = (value: _TValue): _TValue => {\n if (isPrimitiveValue(value)) return value;\n if (_.isArray(value)) return _.map(value, x => _decodeValue(x));\n if (_.isString(value.$date)) return new Date(value.$date);\n if (_.isString(value.$decimal)) return new Decimal(value.$decimal);\n return _.transform(value, (r, v, k) => {\n r[k.startsWith('$') ? k.substring(1) : k] = _decodeValue(v);\n }, {} as any);\n};\n\nexport const _encodeValue = (value: TValue): _TValue => {\n if (value instanceof TObject) throw Error('Invalid data type');\n if (_.isDate(value)) return { $date: value.toISOString() };\n if (value instanceof Decimal) return { $decimal: value.toString() };\n if (isPrimitiveValue(value)) return value;\n if (_.isArray(value)) return _.map(value, x => _encodeValue(x));\n return _.transform(value, (r, v, k) => {\n r[k.startsWith('$') ? `$${k}` : k] = _encodeValue(v);\n }, {} as any);\n};\n\nexport const decodeUpdateOp = (update: TUpdateOp) => {\n const pairs = _.toPairs(update);\n if (pairs.length !== 1) throw Error('Invalid update operation');\n return pairs[0] as [typeof TUpdateOpKeys[number], TValue];\n}\n\nexport interface TObject {\n clone(): TObject;\n fetchWithInclude(keys: string[], options?: ExtraOptions<boolean>): PromiseLike<this>;\n save(options?: ExtraOptions<boolean> & { cascadeSave?: boolean }): PromiseLike<this>;\n destroy(options?: ExtraOptions<boolean>): PromiseLike<this>;\n}\n\nexport class TObject {\n\n static defaultReadonlyKeys = defaultObjectReadonlyKeys;\n static defaultKeys = defaultObjectKeys;\n\n /** @internal */\n [PVK]: {\n className: string;\n attributes: Record<string, TValue>;\n mutated: Record<string, TUpdateOp>;\n extra: Record<string, any>;\n };\n\n constructor(\n className: string,\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n const _attributes = _.isFunction(attributes) ? attributes(this) : attributes ?? {};\n this[PVK] = {\n className,\n attributes: cloneValue(_attributes),\n mutated: {},\n extra: {},\n }\n }\n\n get className(): string {\n return this[PVK].className;\n }\n\n get attributes(): Record<string, TValue> {\n return cloneValue(this[PVK].attributes);\n }\n\n get objectId(): string | undefined {\n return this[PVK].attributes._id as string;\n }\n\n get createdAt(): Date | undefined {\n return this[PVK].attributes._created_at as Date;\n }\n\n get updatedAt(): Date | undefined {\n return this[PVK].attributes._updated_at as Date;\n }\n\n get __v(): number {\n return this[PVK].attributes.__v as number;\n }\n\n get __i(): number {\n return this[PVK].attributes.__i as number;\n }\n\n get expiredAt(): Date | undefined {\n return this.get('_expired_at');\n }\n\n set expiredAt(value: Date | undefined) {\n this.set('_expired_at', value);\n }\n\n acl(): TSchema.ACLs {\n return {\n read: this.get('_rperm') ?? ['*'],\n update: this.get('_wperm') ?? ['*'],\n };\n }\n\n setAcl(value: Partial<TSchema.ACLs>) {\n this.set('_rperm', value.read ?? ['*']);\n this.set('_wperm', value.update ?? ['*']);\n }\n\n setReadAcl(value: TSchema.ACL) {\n this.set('_rperm', value);\n }\n\n setWriteAcl(value: TSchema.ACL) {\n this.set('_wperm', value);\n }\n\n keys(): string[] {\n return _.uniq([..._.keys(this[PVK].attributes), ..._.compact(_.map(_.keys(this[PVK].mutated), x => _.first(_.toPath(x))))]);\n }\n\n *entries() {\n for (const key of this.keys()) {\n yield [key, this.get(key)] as [string, any];\n }\n }\n\n /** @internal */\n *_set_entries() {\n for (const [key, op] of _.entries(this[PVK].mutated)) {\n for (const [_op, value] of _.entries(op)) {\n if (_op === '$set') yield [key, value] as [string, any];\n }\n }\n }\n\n toObject() {\n const toObject = (value: TValue): _TValue => {\n if (isPrimitiveValue(value)) return value;\n if (value instanceof TObject) return value.toObject();\n if (_.isArray(value)) return _.map(value, toObject);\n return _.mapValues(value, toObject);\n }\n return _.fromPairs(_.map(this.keys(), k => [k, toObject(this.get(k))]));\n }\n\n private _value(key: string): TValue {\n let value: TValue = this[PVK].attributes;\n for (const k of _.toPath(key)) {\n if (isPrimitiveValue(value)) return null;\n if (value instanceof TObject) {\n value = value.get(k);\n } else {\n value = _.get(value, k);\n }\n }\n return cloneValue(value);\n }\n\n get<T extends string>(key: PathName<T>): any {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (_.isNil(this[PVK].mutated[key])) return this._value(key);\n const [op, value] = decodeUpdateOp(this[PVK].mutated[key]);\n return op === '$set' ? value : this._value(key);\n }\n\n set<T extends string>(key: PathName<T>, value: TValue | undefined) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $set: value ?? null };\n }\n\n get isDirty(): boolean {\n return !_.isEmpty(this[PVK].mutated);\n }\n\n increment<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $inc: value };\n }\n\n decrement<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $dec: value };\n }\n\n multiply<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $mul: value };\n }\n\n divide<T extends string>(key: PathName<T>, value: number) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $div: value };\n }\n\n max<T extends string>(key: PathName<T>, value: TValue) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $max: value };\n }\n\n min<T extends string>(key: PathName<T>, value: TValue) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $min: value };\n }\n\n addToSet<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $addToSet: values };\n }\n\n push<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $push: values };\n }\n\n removeAll<T extends string>(key: PathName<T>, values: TValue[]) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $removeAll: values };\n }\n\n popFirst<T extends string>(key: PathName<T>, count = 1) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $popFirst: count };\n }\n\n popLast<T extends string>(key: PathName<T>, count = 1) {\n if (_.isEmpty(key)) throw Error('Invalid key');\n if (TObject.defaultReadonlyKeys.includes(_.first(_.toPath(key))!)) return;\n this[PVK].mutated[key] = { $popLast: count };\n }\n\n async fetch(options?: ExtraOptions<boolean>) {\n return this.fetchWithInclude(_.keys(this[PVK].attributes), options);\n }\n\n async fetchIfNeeded(keys: string[], options?: ExtraOptions<boolean>) {\n const current = _.keys(this[PVK].attributes);\n if (_.every(keys, k => _.includes(current, k))) return this;\n return this.fetchWithInclude(_.uniq([...current, ...keys]), options);\n }\n\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwCO,MAAM,WAAW,GAAG,CAAC,CAAmB,KAAiC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;MAC1J,QAAQ,GAAG,CAAC,CAAmB,KAA8B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;MACnG,WAAW,GAAG,CAAC,CAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE;MACrE,OAAO,GAAG,CAAC,CAAmB,KAA6B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;MAChG,SAAS,GAAG,CAAC,CAAmB,KAA+B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;MACtG,UAAU,GAAG,CAAC,CAAmB,KAAgC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;MACzG,OAAO,GAAG,CAAC,CAAmB,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO;AAEzH,MAAA,UAAU,GAAG,CAAC,CAAoB,KAGxC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAC7B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAG,EAAA,CAAC,IAAI,CAAC,CAAC,IAAI,CAAE,CAAA,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAC1G,EAAE;AAWU,MAAA,qBAAqB,GAAqC;AACrE,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,MAAM,EAAE,OAAO;EACf;AAEK,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACtF,MAAM,iBAAiB,GAAG,CAAC,GAAG,yBAAyB,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;;ACnGlG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYa,MAAA,gBAAgB,GAAG,CAAC,CAAM,KAA0B;AAC/D,IAAA,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;IAC/F,IAAI,CAAC,YAAY,OAAO;AAAE,QAAA,OAAO,IAAI,CAAC;AACtC,IAAA,OAAO,KAAK,CAAC;AACf,EAAC;AAEY,MAAA,OAAO,GAAG,CAAC,CAAM,KAAiB;AAC7C,IAAA,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,OAAO;AAAE,QAAA,OAAO,IAAI,CAAC;AAC7D,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,IAAA,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAA,OAAO,KAAK,CAAC;AACf,EAAC;AAEM,MAAM,UAAU,GAAG,CAAmB,CAAI,KAAO;AACtD,IAAA,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,OAAO;AAAE,QAAA,OAAO,CAAC,CAAC;AAC1D,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAM,CAAC;AACxD,IAAA,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAM,CAAC;AACjD,CAAC,CAAA;AAEY,MAAA,YAAY,GAAG,CAAC,KAAc,KAAa;IACtD,IAAI,gBAAgB,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AAC1C,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,IAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnE,IAAA,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;QACpC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;KAC7D,EAAE,EAAS,CAAC,CAAC;AAChB,EAAE;AAEW,MAAA,YAAY,GAAG,CAAC,KAAa,KAAa;IACrD,IAAI,KAAK,YAAY,OAAO;AAAE,QAAA,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC/D,IAAA,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3D,IAAI,KAAK,YAAY,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpE,IAAI,gBAAgB,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AAC1C,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,IAAA,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;QACpC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAE,CAAA,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;KACtD,EAAE,EAAS,CAAC,CAAC;AAChB,EAAE;AAEW,MAAA,cAAc,GAAG,CAAC,MAAiB,KAAI;IAClD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAChE,IAAA,OAAO,KAAK,CAAC,CAAC,CAA2C,CAAC;AAC5D,EAAC;MASY,OAAO,CAAA;AAElB,IAAA,OAAO,mBAAmB,GAAG,yBAAyB,CAAC;AACvD,IAAA,OAAO,WAAW,GAAG,iBAAiB,CAAC;;IAGvC,CAAC,GAAG,EAKF;IAEF,WACE,CAAA,SAAiB,EACjB,UAAiF,EAAA;QAEjF,MAAM,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,EAAE,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC,GAAG;YACV,SAAS;AACT,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC;AACnC,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE;SACV,CAAA;KACF;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;KAC5B;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;KACzC;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAa,CAAC;KAC3C;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,WAAmB,CAAC;KACjD;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,WAAmB,CAAC;KACjD;AAED,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAa,CAAC;KAC3C;AAED,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAa,CAAC;KAC3C;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;KAChC;IAED,IAAI,SAAS,CAAC,KAAuB,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;KAChC;IAED,GAAG,GAAA;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SACpC,CAAC;KACH;AAED,IAAA,MAAM,CAAC,KAA4B,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3C;AAED,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,KAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC3B;IAED,IAAI,GAAA;QACF,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7H;AAED,IAAA,CAAC,OAAO,GAAA;QACN,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAkB,CAAC;SAC7C;KACF;;AAGD,IAAA,CAAC,YAAY,GAAA;AACX,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;AACpD,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACxC,IAAI,GAAG,KAAK,MAAM;AAAE,oBAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAkB,CAAC;aACzD;SACF;KACF;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAa,KAAa;YAC1C,IAAI,gBAAgB,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;YAC1C,IAAI,KAAK,YAAY,OAAO;AAAE,gBAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,SAAC,CAAA;AACD,QAAA,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACzE;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,IAAI,KAAK,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,gBAAgB,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACzC,YAAA,IAAI,KAAK,YAAY,OAAO,EAAE;AAC5B,gBAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACtB;iBAAM;gBACL,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACzB;SACF;AACD,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED,IAAA,GAAG,CAAmB,GAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,OAAO,EAAE,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACjD;IAED,GAAG,CAAmB,GAAgB,EAAE,KAAyB,EAAA;AAC/D,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;KAClD;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;KACtC;IAED,SAAS,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACzD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,SAAS,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACzD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,QAAQ,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,MAAM,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACtD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,GAAG,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,GAAG,CAAmB,GAAgB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KAC1C;IAED,QAAQ,CAAmB,GAAgB,EAAE,MAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAChD;IAED,IAAI,CAAmB,GAAgB,EAAE,MAAgB,EAAA;AACvD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KAC5C;IAED,SAAS,CAAmB,GAAgB,EAAE,MAAgB,EAAA;AAC5D,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;KACjD;AAED,IAAA,QAAQ,CAAmB,GAAgB,EAAE,KAAK,GAAG,CAAC,EAAA;AACpD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;KAC/C;AAED,IAAA,OAAO,CAAmB,GAAgB,EAAE,KAAK,GAAG,CAAC,EAAA;AACnD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,OAAO;AAC1E,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KAC9C;IAED,MAAM,KAAK,CAAC,OAA+B,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;KACrE;AAED,IAAA,MAAM,aAAa,CAAC,IAAc,EAAE,OAA+B,EAAA;AACjE,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAC5D,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;KACtE;;;;;"}