proto.io 0.0.217 → 0.0.219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/adapters/file/aliyun-oss.d.ts +3 -3
  2. package/dist/adapters/file/database.d.ts +2 -2
  3. package/dist/adapters/file/database.js +2 -2
  4. package/dist/adapters/file/database.mjs +2 -2
  5. package/dist/adapters/file/filesystem.d.ts +3 -3
  6. package/dist/adapters/file/google-cloud-storage.d.ts +3 -3
  7. package/dist/adapters/storage/progres.d.ts +1 -1
  8. package/dist/adapters/storage/progres.js +38 -38
  9. package/dist/adapters/storage/progres.js.map +1 -1
  10. package/dist/adapters/storage/progres.mjs +38 -38
  11. package/dist/adapters/storage/progres.mjs.map +1 -1
  12. package/dist/client.d.ts +3 -3
  13. package/dist/client.js +2 -2
  14. package/dist/client.mjs +3 -3
  15. package/dist/index.d.ts +3 -3
  16. package/dist/index.js +27 -27
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +28 -28
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/internals/{base-CWnOBKD5.d.ts → base-C1uAg1dD.d.ts} +2 -2
  21. package/dist/internals/base-C1uAg1dD.d.ts.map +1 -0
  22. package/dist/internals/{chunk-CNNSQpRF.d.ts → chunk-CpgqvFNO.d.ts} +3 -3
  23. package/dist/internals/chunk-CpgqvFNO.d.ts.map +1 -0
  24. package/dist/internals/{index-Bs8n7Q8f.d.ts → index-82GLvDiN.d.ts} +18 -18
  25. package/dist/internals/index-82GLvDiN.d.ts.map +1 -0
  26. package/dist/internals/{index-B8TESzd9.js → index-CLKTEIj0.js} +2 -2
  27. package/dist/internals/index-CLKTEIj0.js.map +1 -0
  28. package/dist/internals/{index-BRIlS3mY.d.ts → index-CWhqANZM.d.ts} +3 -3
  29. package/dist/internals/index-CWhqANZM.d.ts.map +1 -0
  30. package/dist/internals/{index-DfqABzjr.mjs → index-CZ5fKgiJ.mjs} +26 -26
  31. package/dist/internals/index-CZ5fKgiJ.mjs.map +1 -0
  32. package/dist/internals/{index-BzDsTt4R.mjs → index-gWcE22mf.mjs} +2 -2
  33. package/dist/internals/index-gWcE22mf.mjs.map +1 -0
  34. package/dist/internals/{index-DylUjD_1.js → index-xHeu-AjT.js} +26 -26
  35. package/dist/internals/index-xHeu-AjT.js.map +1 -0
  36. package/dist/internals/{validator-mcBCJP4P.js → validator-B5yHpyvb.js} +10 -10
  37. package/dist/internals/validator-B5yHpyvb.js.map +1 -0
  38. package/dist/internals/{validator-CEcBF4Cn.mjs → validator-DX2nXeQo.mjs} +10 -10
  39. package/dist/internals/validator-DX2nXeQo.mjs.map +1 -0
  40. package/package.json +2 -2
  41. package/dist/internals/base-CWnOBKD5.d.ts.map +0 -1
  42. package/dist/internals/chunk-CNNSQpRF.d.ts.map +0 -1
  43. package/dist/internals/index-B8TESzd9.js.map +0 -1
  44. package/dist/internals/index-BRIlS3mY.d.ts.map +0 -1
  45. package/dist/internals/index-Bs8n7Q8f.d.ts.map +0 -1
  46. package/dist/internals/index-BzDsTt4R.mjs.map +0 -1
  47. package/dist/internals/index-DfqABzjr.mjs.map +0 -1
  48. package/dist/internals/index-DylUjD_1.js.map +0 -1
  49. package/dist/internals/validator-CEcBF4Cn.mjs.map +0 -1
  50. package/dist/internals/validator-mcBCJP4P.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CZ5fKgiJ.mjs","sources":["../../../src/internals/query/base.ts","../../../src/internals/query/index.ts","../../../src/internals/liveQuery/index.ts","../../../src/internals/object/user.ts","../../../src/internals/object/role.ts","../../../src/internals/object/file.ts","../../../src/internals/object/job.ts","../../../src/internals/object/types.ts","../../../src/internals/utils.ts","../../../src/internals/codec.ts","../../../src/internals/object/methods.ts","../../../src/internals/proto/index.ts","../../../src/client/query.ts","../../../src/client/request.ts","../../../src/client/proto/internal.ts","../../../src/client/proto/index.ts"],"sourcesContent":["//\n// base.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { PathName, PathNameMap, PathNames } from './types';\nimport { TQuerySelector } from './types/selectors';\nimport { TValueWithUndefined } from '../types';\nimport { PVK } from '../private';\nimport { TExpression } from './types/expressions';\nimport { TQueryAccumulator } from './types/accumulators';\n\n/**\n * Options for a query filter.\n */\ninterface TQueryFilterBaseOptions {\n /**\n * The filter(s) to apply to the query.\n */\n filter?: TQuerySelector | TQuerySelector[];\n};\n\n/**\n * Sort option for a query.\n */\nexport type TSortOption = {\n /**\n * The expression to sort by.\n */\n expr: TExpression;\n /**\n * The order of sorting, 1 for ascending and -1 for descending.\n */\n order: 1 | -1;\n};\n\n/**\n * Base options for a query.\n */\nexport interface TQueryBaseOptions extends TQueryFilterBaseOptions {\n /**\n * The sorting options for the query.\n */\n sort?: Record<string, 1 | -1> | TSortOption[];\n /**\n * The number of results to skip.\n */\n skip?: number;\n /**\n * The limit on the number of results.\n */\n limit?: number;\n /**\n * Nested query options for matching specific fields.\n */\n matches?: Record<string, TQueryBaseOptions>;\n /**\n * Groups the query results by the specified key and applies the provided accumulators.\n */\n groupMatches?: Record<string, Record<string, TQueryAccumulator>>;\n};\n\nconst mergeOpts = (lhs: TQueryBaseOptions, rhs: TQueryBaseOptions): TQueryBaseOptions => {\n return {\n ...lhs,\n ...rhs,\n filter: [\n ..._.castArray<TQuerySelector>(lhs.filter),\n ..._.castArray<TQuerySelector>(rhs.filter)\n ],\n matches: {\n ...lhs.matches,\n ..._.mapValues(rhs.matches, (opts, key) => lhs.matches?.[key] ? mergeOpts(lhs.matches[key], opts) : opts),\n },\n groupMatches: {\n ...lhs.groupMatches ?? {},\n ...rhs.groupMatches ?? {},\n },\n };\n}\n\n/**\n * Base class for query filters.\n */\nclass TQueryFilterBase {\n\n /** @internal */\n [PVK]: { options: TQueryFilterBaseOptions; } = { options: {} };\n\n /**\n * Applies a filter to the query.\n * @param filter - The filter to apply.\n * @returns The current instance for chaining.\n */\n filter(filter: TQuerySelector) {\n if (_.isNil(this[PVK].options.filter)) {\n this[PVK].options.filter = filter;\n } else if (_.isArray(this[PVK].options.filter)) {\n this[PVK].options.filter = [...this[PVK].options.filter, filter];\n } else {\n this[PVK].options.filter = [this[PVK].options.filter, filter];\n }\n return this;\n }\n\n /**\n * Applies an equality filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n equalTo<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $eq: value ?? null } });\n }\n\n /**\n * Applies a not equal filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n notEqualTo<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $ne: value ?? null } });\n }\n\n /**\n * Applies a less than filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n lessThan<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $lt: value ?? null } });\n }\n\n /**\n * Applies a greater than filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n greaterThan<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $gt: value ?? null } });\n }\n\n /**\n * Applies a less than or equal to filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n lessThanOrEqualTo<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $lte: value ?? null } });\n }\n\n /**\n * Applies a greater than or equal to filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n greaterThanOrEqualTo<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\n return this.filter({ [key]: { $gte: value ?? null } });\n }\n\n /**\n * Applies a pattern filter to the query.\n * @param key - The key to filter.\n * @param value - The pattern to filter.\n * @returns The current instance for chaining.\n */\n pattern<T extends string>(key: PathName<T>, value: RegExp | string) {\n return this.filter({ [key]: { $pattern: value ?? null } });\n }\n\n /**\n * Applies a starts with filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n startsWith<T extends string>(key: PathName<T>, value: string) {\n return this.filter({ [key]: { $starts: value ?? null } });\n }\n\n /**\n * Applies an ends with filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n endsWith<T extends string>(key: PathName<T>, value: string) {\n return this.filter({ [key]: { $ends: value ?? null } });\n }\n\n /**\n * Applies a size filter to the query.\n * @param key - The key to filter.\n * @param value - The value to filter.\n * @returns The current instance for chaining.\n */\n size<T extends string>(key: PathName<T>, value: number) {\n return this.filter({ [key]: { $size: value } });\n }\n\n /**\n * Applies an empty filter to the query.\n * @param key - The key to filter.\n * @returns The current instance for chaining.\n */\n empty<T extends string>(key: PathName<T>) {\n return this.filter({ [key]: { $empty: true } });\n }\n\n /**\n * Applies a not empty filter to the query.\n * @param key - The key to filter.\n * @returns The current instance for chaining.\n */\n notEmpty<T extends string>(key: PathName<T>) {\n return this.filter({ [key]: { $empty: false } });\n }\n\n /**\n * Filters the query to include only documents where the specified key contains any of the specified values.\n * @param key - The key to check for values.\n * @param value - The array of values to check for.\n * @returns The current instance for chaining.\n */\n containedIn<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $in: value } });\n }\n\n /**\n * Filters the query to exclude documents where the specified key contains any of the specified values.\n * @param key - The key to check for values.\n * @param value - The array of values to exclude.\n * @returns The current instance for chaining.\n */\n notContainedIn<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $nin: value } });\n }\n\n /**\n * Filters the query to include only documents where the specified key contains all of the specified values.\n * @param key - The key to check for containing values.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n containedBy<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $superset: value } });\n }\n\n /**\n * Filters the query to exclude documents where the specified key contains all of the specified values.\n * @param key - The key to check for superset.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n notContainedBy<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $not: { $superset: value } } });\n }\n\n /**\n * Filters the query to include only documents where the specified key is a subset of the specified values.\n * @param key - The key to check for subset.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n isSubset<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $subset: value } });\n }\n\n /**\n * Filters the query to include only documents where the specified key is a superset of the specified values.\n * @param key - The key to check for superset.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n isSuperset<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $superset: value } });\n }\n\n /**\n * Filters the query to include only documents where the specified key is disjoint from the specified values.\n * @param key - The key to check for disjoint.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n isDisjoint<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $not: { $intersect: value } } });\n }\n\n /**\n * Filters the query to include only documents where the specified key intersects with the specified values.\n * @param key - The key to check for intersection.\n * @param value - The array of values to check against.\n * @returns The current instance for chaining.\n */\n isIntersect<T extends string>(key: PathName<T>, value: TValueWithUndefined[]) {\n return this.filter({ [key]: { $intersect: value } });\n }\n\n /**\n * Filters the query to include only documents where every element of the specified key matches the provided callback query.\n * @param key - The key to check for every element.\n * @param callback - The callback query to apply to each element.\n * @returns The current instance for chaining.\n */\n every<T extends string>(key: PathName<T>, callback: (query: TQueryFilterBase) => void) {\n const query = new TQueryFilterBase();\n callback(query);\n return this.filter({ [key]: { $every: { $and: _.castArray<TQuerySelector>(query[PVK].options.filter) } } });\n }\n\n /**\n * Filters the query to include only documents where some elements of the specified key match the provided callback query.\n * @param key - The key to check for some elements.\n * @param callback - The callback query to apply to each element.\n * @returns The current instance for chaining.\n */\n some<T extends string>(key: PathName<T>, callback: (query: TQueryFilterBase) => void) {\n const query = new TQueryFilterBase();\n callback(query);\n return this.filter({ [key]: { $some: { $and: _.castArray<TQuerySelector>(query[PVK].options.filter) } } });\n }\n\n /**\n * Filters the query to include only documents that match all of the provided callback queries.\n * @param callbacks - The callback queries to apply.\n * @returns The current instance for chaining.\n */\n and(...callbacks: _.Many<(query: TQueryFilterBase) => void>[]) {\n return this.filter({\n $and: _.flatMap(_.flatten(callbacks), callback => {\n const query = new TQueryFilterBase();\n callback(query);\n return _.castArray<TQuerySelector>(query[PVK].options.filter);\n }),\n });\n }\n\n /**\n * Filters the query to include only documents that match any of the provided callback queries.\n * @param callbacks - The callback queries to apply.\n * @returns The current instance for chaining.\n */\n or(...callbacks: _.Many<(query: TQueryFilterBase) => void>[]) {\n return this.filter({\n $or: _.map(_.flatten(callbacks), callback => {\n const query = new TQueryFilterBase();\n callback(query);\n return {\n $and: _.castArray<TQuerySelector>(query[PVK].options.filter),\n };\n }),\n });\n }\n\n /**\n * Filters the query to include only documents that do not match any of the provided callback queries.\n * @param callbacks - The callback queries to apply.\n * @returns The current instance for chaining.\n */\n nor(...callbacks: _.Many<(query: TQueryFilterBase) => void>[]) {\n return this.filter({\n $nor: _.map(_.flatten(callbacks), callback => {\n const query = new TQueryFilterBase();\n callback(query);\n return {\n $and: _.castArray<TQuerySelector>(query[PVK].options.filter),\n };\n }),\n });\n }\n}\n\nexport class TQueryBase extends TQueryFilterBase {\n\n /** @internal */\n [PVK]: { options: TQueryBaseOptions; } = { options: {} };\n\n /**\n * Sorts the query results.\n * @param sort - The sorting criteria.\n * @returns The current instance for chaining.\n */\n sort<T extends Record<string, 1 | -1>>(sort: PathNameMap<T> | TSortOption[]) {\n this[PVK].options.sort = sort;\n return this;\n }\n\n /**\n * Skips the specified number of results.\n * @param skip - The number of results to skip.\n * @returns The current instance for chaining.\n */\n skip(skip: number) {\n if (!_.isSafeInteger(skip) || skip < 0) throw Error('Invalid skip number');\n this[PVK].options.skip = skip;\n return this;\n }\n\n /**\n * Limits the number of results.\n * @param limit - The maximum number of results to return.\n * @returns The current instance for chaining.\n */\n limit(limit: number) {\n if (!_.isSafeInteger(limit) || limit < 0) throw Error('Invalid limit number');\n this[PVK].options.limit = limit;\n return this;\n }\n\n /**\n * Performs a nested query on a specific key.\n * @param key - The key to match.\n * @param callback - The callback function to execute.\n * @returns The current instance for chaining.\n */\n match<T extends string>(key: PathName<T>, callback: (query: TQueryBase) => void) {\n const query = new TQueryBase();\n callback(query);\n if (_.isNil(this[PVK].options.matches)) {\n this[PVK].options.matches = { [key]: query[PVK].options };\n } else if (_.isNil(this[PVK].options.matches[key])) {\n this[PVK].options.matches = { ...this[PVK].options.matches };\n this[PVK].options.matches[key] = query[PVK].options;\n } else {\n this[PVK].options.matches = { ...this[PVK].options.matches };\n this[PVK].options.matches[key] = mergeOpts(this[PVK].options.matches[key], query[PVK].options);\n }\n return this;\n }\n\n /**\n * Groups the query results by the specified key and applies the provided accumulators.\n * @param key - The key to group by.\n * @param accumulators - The accumulators to apply.\n * @returns The current instance for chaining.\n */\n groupMatches<T extends string>(key: PathName<T>, accumulators: Record<string, TQueryAccumulator>) {\n if (_.isNil(this[PVK].options.groupMatches)) {\n this[PVK].options.groupMatches = { [key]: accumulators };\n } else {\n this[PVK].options.groupMatches = { ...this[PVK].options.groupMatches };\n this[PVK].options.groupMatches[key] = accumulators;\n }\n return this;\n }\n}\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { IncludePaths } from './types';\nimport { TValueWithUndefined } from '../types';\nimport { PVK } from '../private';\nimport { TObjectType } from '../object/types';\nimport { TQueryBase, TQueryBaseOptions } from './base';\nimport { TUpdateOp } from '../object/types';\nimport { ExtraOptions } from '../options';\nimport { asyncStream, Awaitable, EventIterator } from '@o2ter/utils-js';\nimport { LiveQuerySubscription } from '../liveQuery';\nimport { TExpression } from './types/expressions';\n\n/**\n * Options for a query.\n */\nexport interface TQueryOptions extends TQueryBaseOptions {\n /**\n * Fields to include in the query.\n */\n includes?: string[];\n};\n\n/**\n * Options for a random query.\n */\nexport interface TQueryRandomOptions {\n /**\n * Field to use for weighting the random selection.\n */\n weight?: TExpression;\n};\n\n/**\n * Abstract base class for queries.\n */\nexport abstract class TQuery<T extends string, Ext, M extends boolean> extends TQueryBase {\n\n /** @internal */\n [PVK]: { options: TQueryOptions; } = { options: {} };\n\n /**\n * Clones the query with optional new options.\n * @param options - The new options for the query.\n * @returns A new query instance.\n */\n abstract clone(options?: TQueryOptions): TQuery<T, Ext, M>;\n\n /**\n * Explains the query execution plan.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the explanation.\n */\n abstract explain(options?: ExtraOptions<M>): PromiseLike<any>;\n\n /**\n * Counts the number of results for the query.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the count.\n */\n abstract count(options?: ExtraOptions<M>): PromiseLike<number>;\n\n /**\n * Finds the results for the query.\n * @param options - Extra options for the query.\n * @returns A stream of the results.\n */\n abstract find(options?: ExtraOptions<M>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;\n\n /**\n * Selects a random result for the query.\n * @param opts - Options for the random selection.\n * @param options - Extra options for the query.\n * @returns A stream of the random result.\n */\n abstract random(\n opts?: TQueryRandomOptions,\n options?: ExtraOptions<M>\n ): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;\n\n /**\n * Finds non-reference results for the query.\n * @param options - Extra options for the query.\n * @returns A stream of the non-reference results.\n */\n abstract nonrefs(options?: ExtraOptions<M>): ReturnType<typeof asyncStream<TObjectType<T, Ext>>>;\n\n /**\n * Inserts a new record.\n * @param attrs - The attributes of the new record.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the inserted record.\n */\n async insert(\n attrs: Record<string, TValueWithUndefined>,\n options?: ExtraOptions<M>\n ) {\n const result = _.first(await this.clone().insertMany([attrs], options));\n if (!result) throw Error('Unable to insert document');\n return result;\n }\n\n /**\n * Inserts multiple new records.\n * @param values - The attributes of the new records.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the inserted records.\n */\n abstract insertMany(\n values: Record<string, TValueWithUndefined>[],\n options?: ExtraOptions<M>\n ): PromiseLike<TObjectType<T, Ext>[]>;\n\n /**\n * Updates a single record.\n * @param update - The update operations.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the updated record or undefined.\n */\n async updateOne(\n update: Record<string, TUpdateOp>,\n options?: ExtraOptions<M>\n ) {\n return _.first(await this.clone().limit(1).updateMany(update, options));\n }\n\n /**\n * Updates multiple records.\n * @param update - The update operations.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the updated records.\n */\n abstract updateMany(\n update: Record<string, TUpdateOp>,\n options?: ExtraOptions<M>\n ): PromiseLike<TObjectType<T, Ext>[]>;\n\n /**\n * Upserts a single record.\n * @param update - The update operations.\n * @param setOnInsert - The attributes to set on insert.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the upserted record.\n */\n async upsertOne(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: ExtraOptions<M>\n ) {\n const result = _.first(await this.clone().limit(1).upsertMany(update, setOnInsert, options));\n if (!result) throw Error('Unable to upsert document');\n return result;\n }\n\n\n /**\n * Upserts multiple records.\n * @param update - The update operations.\n * @param setOnInsert - The attributes to set on insert.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the upserted records.\n */\n abstract upsertMany(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: ExtraOptions<M>\n ): PromiseLike<TObjectType<T, Ext>[]>;\n\n /**\n * Deletes a single record.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the deleted record or undefined.\n */\n async deleteOne(options?: ExtraOptions<M>) {\n return _.first(await this.clone().limit(1).deleteMany(options));\n }\n\n /**\n * Deletes multiple records.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the deleted records.\n */\n abstract deleteMany(options?: ExtraOptions<M>): PromiseLike<TObjectType<T, Ext>[]>;\n\n abstract subscribe(): LiveQuerySubscription<T, Ext>;\n\n /**\n * Adds fields to include in the query.\n * @param includes - The fields to include.\n * @returns The query instance.\n */\n includes<T extends _.RecursiveArray<string>>(...includes: IncludePaths<T>) {\n const keys = this[PVK].options.includes ? [...this[PVK].options.includes, ..._.flattenDeep(includes)] : _.flattenDeep(includes);\n this[PVK].options.includes = _.uniq(keys);\n return this;\n }\n\n /**\n * Gets a record by its ID.\n * @param id - The ID of the record.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the record or undefined.\n */\n async get(id: string, options?: ExtraOptions<M>) {\n return _.first(await this.clone().equalTo('_id', id).limit(1).find(options));\n }\n\n /**\n * Gets the first record.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the first record or undefined.\n */\n async first(options?: ExtraOptions<M>) {\n return _.first(await this.clone().limit(1).find(options));\n }\n\n /**\n * Gets a random record.\n * @param opts - Options for the random selection.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to the random record or undefined.\n */\n async randomOne(opts?: TQueryRandomOptions, options?: ExtraOptions<M>) {\n return _.first(await this.clone().limit(1).random(opts, options));\n }\n\n /**\n * Checks if any records exist.\n * @param options - Extra options for the query.\n * @returns A promise that resolves to a boolean indicating if any records exist.\n */\n async exists(options?: ExtraOptions<M>) {\n const query = this.clone();\n this[PVK].options.includes = [];\n return !_.isNil(await query.limit(1).find(options));\n }\n\n /**\n * Iterates over each batch of records.\n * @param callback - The callback to execute for each batch.\n * @param options - Extra options for the query.\n */\n async eachBatch(\n callback: (batch: TObjectType<T, Ext>[]) => Awaitable<void>,\n options?: ExtraOptions<M> & { batchSize?: number; },\n ) {\n const sorting = this[PVK].options.sort as Record<string, 1 | -1> ?? {};\n const batchSize = options?.batchSize ?? 100;\n if (!_.isPlainObject(sorting)) throw Error('Unsupported sort method');\n const is_asc = _.every(sorting, v => v === 1);\n const is_desc = _.every(sorting, v => v === -1);\n if (!is_asc && !is_desc) throw Error('Unsupported sort method');\n if (_.isNil(sorting._id)) sorting._id = is_asc ? 1 : -1;\n const query = this.clone().sort(sorting).limit(batchSize);\n const keys = _.keys(sorting);\n let batch: TObjectType<T, Ext>[] = [];\n while (true) {\n options?.abortSignal?.throwIfAborted();\n const q = _.isEmpty(batch) ? query : query.clone()\n .filter(keys.length > 1 ? {\n $expr: {\n [is_asc ? '$gt' : '$lt']: [\n { $array: _.map(keys, k => ({ $key: k })) },\n { $array: _.map(keys, k => ({ $value: _.last(batch)!.get(k) })) },\n ],\n },\n } : {\n [keys[0]]: { [is_asc ? '$gt' : '$lt']: _.last(batch)!.get(keys[0]) },\n });\n batch = await q.find(options);\n if (_.isEmpty(batch)) return;\n await callback(batch);\n }\n }\n\n /**\n * Iterates over each record.\n * @param callback - The callback to execute for each record.\n * @param options - Extra options for the query.\n */\n async each(\n callback: (object: TObjectType<T, Ext>) => Awaitable<void>,\n options?: ExtraOptions<M> & { batchSize?: number; },\n ) {\n await this.eachBatch(async (batch) => {\n for (const object of batch) {\n await callback(object);\n }\n }, options);\n }\n\n /**\n * Finds all records matching the query.\n * @param options - Extra options for the query.\n * @returns An iterator for the records.\n */\n findAll(options?: ExtraOptions<M> & { batchSize?: number; }) {\n return EventIterator<TObjectType<T, Ext>>(async (push, stop) => {\n await this.each(item => push(item), options);\n stop();\n });\n }\n};\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TQuerySelector } from '../query/types/selectors';\nimport { ProtoType } from '../proto';\nimport { TObjectType } from '../object/types';\nimport { PVK } from '../private';\n\nexport class LiveQuerySubscription<T extends string, E> {\n\n private _className: T;\n private _proto: ProtoType<E>;\n private _filter: TQuerySelector[];\n\n constructor(className: T, proto: ProtoType<E>, filter: TQuerySelector | TQuerySelector[]) {\n this._className = className;\n this._proto = proto;\n this._filter = _.isArray(filter) ? filter : [filter];\n }\n\n get className(): T {\n return this._className;\n }\n\n on(\n event: 'create' | 'update' | 'delete',\n callback: (object: TObjectType<T, E>) => void,\n ) {\n return this._proto[PVK].liveQuery(\n this._proto,\n event,\n this.className,\n this._filter,\n (object) => callback(object as TObjectType<T, E>),\n );\n }\n}","//\n// user.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './index';\nimport { TValue } from '../types';\n\nexport class TUser extends TObject {\n\n constructor(\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n super('User', attributes);\n }\n}","//\n// role.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './index';\nimport { TValue } from '../types';\nimport { TUser } from './user';\n\n/**\n * Class representing a Role.\n * @extends TObject\n */\nexport class TRole extends TObject {\n\n constructor(\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n super('Role', attributes);\n }\n\n /**\n * Get the name of the role.\n * @return {string | undefined} The name of the role.\n */\n get name(): string | undefined {\n return this.get('name');\n }\n\n /**\n * Get the users associated with the role.\n * @return {TUser[]} The users associated with the role.\n */\n get users(): TUser[] {\n return this.get('users') ?? [];\n }\n\n /**\n * Set the users associated with the role.\n * @param {TUser[]} value - The users to associate with the role.\n */\n set users(value: TUser[]) {\n this.set('users', value);\n }\n\n /**\n * Get the roles associated with the role.\n * @return {TRole[]} The roles associated with the role.\n */\n get roles(): TRole[] {\n return this.get('roles') ?? [];\n }\n\n /**\n * Set the roles associated with the role.\n * @param {TRole[]} value - The roles to associate with the role.\n */\n set roles(value: TRole[]) {\n this.set('roles', value);\n }\n}","//\n// file.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './index';\nimport { ExtraOptions } from '../options';\nimport { FileStream } from '../buffer';\nimport { TValue } from '../types';\n\n/**\n * Interface representing a file.\n */\nexport interface TFile {\n /**\n * URL of the file.\n */\n url: string | undefined;\n\n /**\n * Retrieves the file data.\n * @param options - Optional extra options.\n * @returns A FileStream containing the file data.\n */\n fileData(options?: ExtraOptions<boolean>): FileStream;\n\n /**\n * Saves the file.\n * @param options - Optional extra options including cascadeSave and uploadToken.\n * @returns A promise that resolves to the current instance.\n */\n save(options?: ExtraOptions<boolean> & {\n cascadeSave?: boolean;\n uploadToken?: string;\n }): PromiseLike<this>;\n}\n\n/**\n * Class representing a file.\n */\nexport class TFile extends TObject {\n\n constructor(\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n super('File', attributes);\n }\n\n /**\n * Gets the filename of the file.\n * @returns The filename.\n */\n get filename(): string | undefined {\n return this.get('filename');\n }\n\n /**\n * Gets the size of the file.\n * @returns The size of the file.\n */\n get size(): number | undefined {\n return this.get('size');\n }\n\n /**\n * Gets the type of the file.\n * @returns The type of the file.\n */\n get type(): string | undefined {\n return this.get('type');\n }\n\n /**\n * Gets the token of the file.\n * @returns The token of the file.\n */\n get token(): string | undefined {\n return this.get('token');\n }\n\n}\n","//\n// job.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './index';\nimport { TValue } from '../types';\nimport { TUser } from './user';\n\n/**\n * Class representing a Job.\n * @extends TObject\n */\nexport class TJob extends TObject {\n\n constructor(\n attributes?: Record<string, TValue> | ((self: TObject) => Record<string, TValue>),\n ) {\n super('_Job', attributes);\n }\n\n /**\n * Get the name of the job.\n * @return {string} The name of the job.\n */\n get name(): string {\n return this.get('name');\n }\n\n /**\n * Get the data of the job.\n * @return {TValue | undefined} The data of the job.\n */\n get data(): TValue | undefined {\n return this.get('data');\n }\n\n /**\n * Get the user associated with the job.\n * @return {TUser | undefined} The user associated with the job.\n */\n get user(): TUser | undefined {\n return this.get('user');\n }\n\n /**\n * Get the error of the job.\n * @return {TValue | undefined} The error of the job.\n */\n get error(): TValue | undefined {\n return this.get('error');\n }\n\n /**\n * Get the start time of the job.\n * @return {Date | undefined} The start time of the job.\n */\n get startedAt(): Date | undefined {\n return this.get('startedAt');\n }\n\n /**\n * Get the completion time of the job.\n * @return {Date | undefined} The completion time of the job.\n */\n get completedAt(): Date | undefined {\n return this.get('completedAt');\n }\n}","//\n// types.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './index';\nimport { TUser } from './user';\nimport { TRole } from './role';\nimport { TFile } from './file';\nimport { TValueWithUndefined } from '../types';\nimport { ExactOneProp } from '../types';\nimport { TJob } from './job';\n\nexport const TObjectTypes = {\n 'User': TUser,\n 'Role': TRole,\n 'File': TFile,\n '_Job': TJob,\n};\n\ntype _TObjectType<K> = K extends keyof typeof TObjectTypes ? InstanceType<(typeof TObjectTypes)[K]> : TObject;\n\ntype PickBy<T, C> = {\n [P in keyof T as T[P] extends C ? P : never]: T[P];\n}\n\ntype PropertyDescriptor<T> = {\n enumerable?: boolean;\n get: () => T;\n set?: (value: T) => void;\n};\ntype ReadOnlyProperty<T> = Pick<PropertyDescriptor<T>, 'get'>;\ntype ReadWriteProperty<T> = Required<Pick<PropertyDescriptor<T>, 'get' | 'set'>>;\n\ntype PropertyMapToMethods<T> = PickBy<T, Function>\n & { [P in keyof PickBy<T, ReadWriteProperty<any>>]: T[P] extends PropertyDescriptor<infer V> ? V : never; }\n & { readonly [P in keyof PickBy<T, ReadOnlyProperty<any>>]: T[P] extends PropertyDescriptor<infer V> ? V : never; }\ntype Property<T> = T extends Function ? T | PropertyDescriptor<T> : PropertyDescriptor<T>;\ntype PropertyMap<T, O, A> = {\n [K in keyof T]: T[K] extends Property<any> ? T[K] : never;\n} & ThisType<O & PropertyMapToMethods<T> & PropertyMapToMethods<A>>;\n\nexport type TExtensions<E> = {\n [K in keyof E]: PropertyMap<E[K], _TObjectType<K>, '*' extends keyof E ? Omit<E['*'], keyof E[K]> : {}>;\n};\n\ntype _TMethods<K, E> = K extends keyof E\n ? '*' extends keyof E ? PropertyMapToMethods<Omit<E['*'], keyof E[K]> & E[K]> : PropertyMapToMethods<E[K]>\n : {};\n\ntype IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;\ntype TMethods<K, E> = IfAny<E, {}, _TMethods<K, E>>;\n\nexport type TObjectType<K, E> = _TObjectType<K> & TMethods<K, E>;\n\nexport const TUpdateOpKeys = [\n '$set',\n '$inc',\n '$dec',\n '$mul',\n '$div',\n '$max',\n '$min',\n '$addToSet',\n '$push',\n '$removeAll',\n '$popFirst',\n '$popLast',\n] as const;\n\nexport type TUpdateOp = ExactOneProp<Record<(typeof TUpdateOpKeys)[number], TValueWithUndefined>>;\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject } from './object';\nimport { TFile } from './object/file';\nimport { TJob } from './object/job';\nimport { TRole } from './object/role';\nimport { TExtensions } from './object/types';\nimport { TUser } from './object/user';\nimport { TQuery } from './query';\n\nexport const isObjKey = <T extends object>(key: PropertyKey, obj: T): key is keyof T => key in obj;\n\nexport const classExtends = <E = {}>(x: TExtensions<E>) => x;\n\nexport const isQuery = (x: any): x is TQuery<any, any, any> => {\n return x instanceof TQuery;\n}\n\nexport const isObject = (x: any): x is TObject => {\n return x instanceof TObject;\n}\n\nexport const isUser = (x: any): x is TUser => {\n return x instanceof TUser;\n}\n\nexport const isRole = (x: any): x is TRole => {\n return x instanceof TRole;\n}\n\nexport const isFile = (x: any): x is TFile => {\n return x instanceof TFile;\n}\n\nexport const isJob = (x: any): x is TJob => {\n return x instanceof TJob;\n}\n","//\n// codec.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { Decimal } from 'decimal.js';\nimport { TObject } from './object';\nimport { TObjectTypes } from './object/types';\nimport { isObjKey } from './utils';\nimport { _TContainer, TValue } from './types';\nimport { prototypes } from '@o2ter/utils-js';\n\nexport { Decimal };\nexport type TNumber = number | Decimal | BigInt;\ntype TPrimitive = RegExp | Date | string | TNumber | boolean | null | undefined;\nexport type TSerializable = _TContainer<TPrimitive | TObject>;\n\nexport type SerializeOptions = {\n space?: string | number;\n objAttrs?: string[];\n};\n\nexport type DeserializeOptions = {\n objAttrs?: string[];\n};\n\nconst encodeEJSON = (\n x: TSerializable,\n stack: any[],\n options: SerializeOptions,\n): any => {\n if (_.isNil(x) || _.isNumber(x) || _.isBoolean(x) || _.isString(x)) return x ?? null;\n if (_.isDate(x)) return { $date: x.valueOf() };\n if (_.isRegExp(x)) return { $regex: x.source, $options: x.flags };\n if (x instanceof BigInt) return { $integer: x.toString() };\n if (x instanceof Decimal) return { $decimal: x.toString() };\n\n const found = _.indexOf(stack, x);\n if (found !== -1) return { $ref: found };\n\n if (_.isArray(x)) return x.map(v => encodeEJSON(v, [...stack, x], options));\n if (x instanceof TObject) {\n const attributes = options.objAttrs ? _.pick(x.attributes, ...options.objAttrs) : x.attributes;\n return {\n $object: {\n className: x.className,\n attributes: _.mapValues(attributes, v => encodeEJSON(v, [...stack, x], options)),\n }\n };\n }\n\n const props = _.uniq(_.flatMap([x, ...prototypes(x)], x => Object.getOwnPropertyNames(x)));\n return _.transform(\n _.pick(x, props),\n (r, v, k) => {\n if (_.isFunction(v)) return;\n r[k.startsWith('$') ? `$${k}` : k] = encodeEJSON(v, [...stack, x], options);\n },\n {} as { [x: string]: TSerializable },\n );\n}\n\nconst decodeEJSON = (\n x: any,\n stack: any[],\n options: DeserializeOptions,\n): TSerializable => {\n if (_.isNil(x) || _.isNumber(x) || _.isBoolean(x) || _.isString(x)) return x ?? null;\n if (_.isArray(x)) {\n return _.transform(x, (r, v) => {\n r.push(decodeEJSON(v, [...stack, r], options));\n }, [] as TSerializable[]);\n }\n if (!_.isNil(x.$date)) return new Date(x.$date);\n if (!_.isNil(x.$regex)) return new RegExp(x.$regex, x.$options || '');\n if (!_.isNil(x.$integer)) return BigInt(x.$integer);\n if (!_.isNil(x.$decimal)) return new Decimal(x.$decimal);\n if (!_.isNil(x.$ref)) return stack[x.$ref];\n if (!_.isNil(x.$object)) {\n const { className, attributes } = x.$object;\n const _attributes = (self: TObject) => _.mapValues(\n options.objAttrs ? _.pick(attributes, ...options.objAttrs) : attributes,\n v => decodeEJSON(v, [...stack, self], options),\n ) as Record<string, TValue>;\n return isObjKey(className, TObjectTypes) ? new TObjectTypes[className](_attributes) : new TObject(className, _attributes);\n }\n return _.transform(x, (r, v, k) => {\n if (_.isString(k)) r[k.startsWith('$') ? k.substring(1) : k] = decodeEJSON(v, [...stack, r], options);\n }, {} as { [x: string]: TSerializable });\n}\n\nexport const serialize = (\n x: TSerializable,\n options?: SerializeOptions,\n) => JSON.stringify(encodeEJSON(x, [], options ?? {}), undefined, options?.space);\n\nexport const deserialize = (\n buffer: string,\n options?: DeserializeOptions,\n) => decodeEJSON(JSON.parse(buffer), [], options ?? {});\n","//\n// methods.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TObject, decodeUpdateOp } from './index';\nimport { PVK } from '../private';\nimport { ExtraOptions } from '../options';\nimport { TExtensions, TObjectType, TObjectTypes } from './types';\nimport { ProtoType } from '../proto';\nimport { TSerializable } from '../codec';\nimport { PathName } from './../query/types';\nimport { TFile } from './file';\nimport { isObjKey } from '../utils';\n\nexport type TExtended<U, T extends string, E> = U extends TObject ?\n TObjectType<T, E> : U extends (infer U)[] ?\n TExtended<U, T, E>[] : U;\n\nexport const applyObjectMethods = <T extends TSerializable, E>(\n object: T,\n proto: ProtoType<E>,\n): T => {\n\n if (!(object instanceof TObject)) {\n if (_.isArray(object)) return _.map(object, x => applyObjectMethods(x, proto)) as T;\n if (_.isPlainObject(object)) return _.mapValues(object as any, x => applyObjectMethods(x, proto));\n return object;\n }\n\n object[PVK].attributes = _.mapValues(object[PVK].attributes, x => applyObjectMethods(x, proto));\n\n const className = object.className;\n const _class = isObjKey(className, TObjectTypes) ? TObjectTypes[className] : undefined;\n if (_class && Object.getPrototypeOf(object) !== _class.prototype) {\n Object.setPrototypeOf(object, _class.prototype);\n }\n\n const classExtends = proto[PVK].options.classExtends ?? {} as TExtensions<E>;\n const extensions = {\n ...classExtends['*' as keyof E] ?? {},\n ...classExtends[className as keyof E] ?? {},\n };\n const query = () => proto.Query(className);\n\n const typedMethods: Record<string, PropertyDescriptorMap & ThisType<TObject>> = {\n 'File': {\n save: {\n value(options?: ExtraOptions<boolean>) {\n return proto[PVK].saveFile(proto, this as TFile, options);\n },\n },\n destroy: {\n value(options?: ExtraOptions<boolean>) {\n return proto[PVK].deleteFile(proto, this as TFile, options);\n },\n },\n url: {\n get() {\n const filename = (this as TFile).filename;\n if (_.isNil(this.id) || _.isNil(filename)) return;\n const endpoint = proto[PVK].options.endpoint;\n const path = `files/${this.id}/${encodeURIComponent(filename)}`;\n return endpoint.endsWith('/') ? `${endpoint}${path}` : `${endpoint}/${path}`;\n }\n },\n fileData: {\n value(options?: ExtraOptions<boolean>) {\n return proto[PVK].fileData(proto, this as TFile, options);\n },\n },\n },\n };\n\n const props: PropertyDescriptorMap & ThisType<TObject> = {\n clone: {\n value() {\n const clone = proto.Object(this.className);\n clone[PVK].attributes = { ...this[PVK].attributes };\n clone[PVK].mutated = { ...this[PVK].mutated };\n clone[PVK].extra = { ...this[PVK].extra };\n return clone;\n }\n },\n relation: {\n value<T extends string>(key: PathName<T>) {\n return proto.Relation(this, key);\n }\n },\n fetchWithInclude: {\n async value(keys: _.RecursiveArray<string>, options?: ExtraOptions<boolean>) {\n const fetched = await query().equalTo('_id', this.id).includes(keys).first(options);\n if (!fetched) throw Error('Unable to fetch document');\n this[PVK].attributes = fetched.attributes;\n return this;\n },\n },\n save: {\n async value(options?: ExtraOptions<boolean> & { cascadeSave?: boolean }) {\n const mutated = _.values(this[PVK].mutated);\n if (options?.cascadeSave !== false) {\n for (const update of _.values(mutated)) {\n const [, value] = decodeUpdateOp(update);\n if (value instanceof TObject && (_.isNil(value.id) || value.isDirty)) await value.save(options);\n }\n }\n if (this.id) {\n const updated = await query()\n .equalTo('_id', this.id)\n .includes(...this.keys())\n .updateOne(this[PVK].mutated, options);\n if (!updated) throw Error('Unable to save document');\n this[PVK].attributes = updated.attributes;\n this[PVK].mutated = {};\n } else {\n const created = await query()\n .includes(...this.keys())\n .insert(_.fromPairs([...this._set_entries()]), options);\n this[PVK].attributes = created.attributes;\n this[PVK].mutated = {};\n }\n return this;\n },\n },\n destroy: {\n async value(options?: ExtraOptions<boolean>) {\n const deleted = await query()\n .equalTo('_id', this.id)\n .includes(...this.keys())\n .deleteOne(options);\n if (!deleted) throw Error('Unable to destroy document');\n this[PVK].attributes = deleted.attributes;\n this[PVK].mutated = {};\n return this;\n },\n },\n ...typedMethods[className] ?? {},\n ..._.mapValues(extensions, value => _.isFunction(value) ? { value } : value),\n };\n\n const _props = _.pickBy(props, (_v, k) => !Object.hasOwn(object, k)) as typeof props;\n return Object.defineProperties(object, _props);\n};\n","//\n// proto.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 axios from 'axios';\nimport { PVK } from '../private';\nimport type jwt from 'jsonwebtoken';\nimport type { CookieOptions, Request } from '@o2ter/server-js';\nimport type { SignOptions } from 'jsonwebtoken';\nimport { ExtraOptions } from '../options';\nimport { TQuery } from '../query';\nimport { TExtensions, TObjectType, TObjectTypes } from '../object/types';\nimport { TFile } from '../object/file';\nimport { FileData, FileStream } from '../buffer';\nimport { isObjKey } from '../utils';\nimport { applyObjectMethods } from '../object/methods';\nimport { TValue, TValueWithoutObject } from '../types';\nimport { TObject } from '../object';\nimport { TSerializable } from '../codec';\nimport { TUser } from '../object/user';\nimport { ProtoFunction, ProtoFunctionOptions, ProtoJobFunction, ProtoJobFunctionOptions, ProtoTriggerFunction } from './types';\nimport { Socket } from 'socket.io-client';\nimport { Session } from '../../server/proto/session';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { PathName } from '../query/types';\nimport { TRole } from '../object/role';\nimport { TJob } from '../object/job';\nimport { isFile, isJob, isObject, isQuery, isRole, isUser } from '../utils';\nimport { TQuerySelector } from '../query/types/selectors';\n\nexport const _logLevels = ['error', 'warn', 'info', 'debug', 'trace'] as const;\ntype _Logger = {\n [x in typeof _logLevels[number]]: (...args: any[]) => void;\n};\nexport type Logger = _Logger & {\n loggerLevel: keyof _Logger | 'all' | 'none';\n};\n\n/**\n * The mode of the transaction.\n */\nexport type TransactionMode = 'default' | 'committed' | 'repeatable' | 'serializable';\n\n/**\n * Options for configuring a transaction.\n */\nexport type TransactionOptions = {\n /**\n * The mode of the transaction.\n */\n mode?: TransactionMode;\n\n /**\n * The number of retries or a boolean indicating whether to retry.\n */\n retry?: number | boolean;\n};\n\n/**\n * Represents event data with additional metadata.\n */\nexport type EventData = Record<string, TValueWithoutObject> & {\n /**\n * The unique identifier for the event.\n */\n _id: string;\n\n /**\n * The creation date of the event.\n */\n _created_at: Date;\n\n /**\n * The read permissions for the event.\n */\n _rperm: string[];\n};\n\nexport interface ProtoInternalType<Ext, P extends ProtoType<any>> {\n\n options: {\n endpoint: string;\n classExtends?: TExtensions<Ext>;\n };\n\n saveFile(proto: P, object: TFile, options?: ExtraOptions<boolean>): Promise<TFile>;\n deleteFile(proto: P, object: TFile, options?: ExtraOptions<boolean>): Promise<TFile>;\n fileData(proto: P, object: TFile, options?: ExtraOptions<boolean>): FileStream;\n\n liveQuery(\n proto: P,\n event: string,\n className: string,\n filter: TQuerySelector[],\n callback: (object: TObject) => void,\n ): {\n remove: VoidFunction;\n socket?: Socket;\n };\n}\n\nexport abstract class ProtoType<Ext> {\n\n isQuery = isQuery;\n isObject = isObject;\n isUser = isUser;\n isRole = isRole;\n isFile = isFile;\n isJob = isJob;\n\n /** @internal */\n abstract [PVK]: ProtoInternalType<Ext, this>;\n\n /**\n * Gets the endpoint URL.\n * @returns The endpoint URL as a string.\n */\n get endpoint() {\n return this[PVK].options.endpoint;\n }\n\n /**\n * Retrieves the configuration.\n * @param options - Optional settings for retrieving the configuration.\n * @returns A promise that resolves to the configuration.\n */\n abstract config(options?: { master?: boolean; }): Promise<Record<string, TValueWithoutObject>>;\n\n /**\n * Retrieves the ACL of configuration.\n * @param options - Settings for retrieving the ACL of configuration.\n * @returns A promise that resolves to the ACL of configuration.\n */\n abstract configAcl(options: { master: true; }): PromiseLike<Record<string, string[]>>;\n\n /**\n * Sets the configuration.\n * @param values - The configuration values to set.\n * @param options - Settings for setting the configuration.\n * @returns A promise that resolves when the configuration is set.\n */\n abstract setConfig(values: Record<string, TValueWithoutObject>, options: { master: true; acl?: string[]; }): Promise<void>;\n\n /**\n * Runs a function.\n * @param name - The name of the function to run.\n * @param data - The data to pass to the function.\n * @param options - Additional options for running the function.\n * @returns A promise that resolves to the result of the function.\n */\n abstract run<R extends TSerializable | void = any>(\n name: string,\n data?: TSerializable,\n options?: ExtraOptions<boolean>\n ): Promise<R>;\n\n /**\n * Schedules a job.\n * @param name - The name of the job to schedule.\n * @param params - The parameters to pass to the job.\n * @param options - Additional options for scheduling the job.\n * @returns A promise that resolves when the job is scheduled.\n */\n abstract scheduleJob(name: string, params?: TValueWithoutObject, options?: ExtraOptions<boolean>): Promise<TJob>;\n\n /**\n * Creates a query.\n * @param className - The name of the class to query.\n * @returns A query instance.\n */\n abstract Query<T extends string>(className: T): TQuery<T, Ext, boolean>;\n\n /**\n * Creates a relation query.\n * @param object - The object to create the relation for.\n * @param key - The key of the relation.\n * @returns A relation query instance.\n */\n abstract Relation<T extends string>(object: TObject, key: PathName<T>): TQuery<string, Ext, boolean>;\n\n /**\n * Get all references to an object.\n * @param object - The object to get references for.\n * @param options - Additional options for getting references.\n * @returns A stream of references.\n */\n abstract refs(object: TObject, options?: ExtraOptions<boolean>): ReturnType<typeof asyncStream<TObjectType<string, Ext>>>;\n\n /**\n * Checks if the server is online.\n * @returns A promise that resolves to a boolean indicating if the server is online.\n */\n async online() {\n try {\n const res = await axios({\n method: 'get',\n baseURL: this[PVK].options.endpoint,\n url: 'health',\n });\n return res.status === 200;\n } catch {\n return false;\n }\n }\n\n /**\n * Rebinds an object to the proto instance.\n * @param object - The object to rebind.\n * @returns The rebinded object.\n */\n rebind<T extends TSerializable | undefined>(object: T): T {\n return applyObjectMethods(object, this);\n }\n\n /**\n * Creates a new object.\n * @param className - The name of the class to create.\n * @param id - The ID of the object to create.\n * @returns The created object.\n */\n Object<T extends string>(className: T, id?: string): TObjectType<T, Ext> {\n const attrs: Record<string, TValue> = id ? { _id: id } : {};\n const obj = isObjKey(className, TObjectTypes) ? new TObjectTypes[className](attrs) : new TObject(className, attrs);\n return this.rebind(obj as TObjectType<T, Ext>);\n }\n\n /**\n * Creates a new file object.\n * @param filename - The name of the file.\n * @param data - The file data.\n * @param type - The type of the file.\n * @returns The created file object.\n */\n File(filename: string, data: FileData, type?: string) {\n const file = this.Object('File');\n file.set('filename', filename);\n file.set('type', type);\n file[PVK].extra.data = data;\n return file;\n }\n\n /**\n * Notifies an event.\n * @param data - The data to notify.\n * @param options - Additional options for notifying the event.\n */\n abstract notify(\n data: Record<string, TValueWithoutObject> & { _rperm?: string[]; },\n options?: ExtraOptions<boolean>\n ): Promise<void>\n\n /**\n * Listens for events.\n * @param callback - The callback to call when an event occurs.\n * @returns An object with a remove function to stop listening.\n */\n abstract listen(\n callback: (data: EventData) => void,\n selector?: TQuerySelector\n ): {\n remove: VoidFunction;\n socket?: Socket;\n }\n};\n\nexport interface ProtoType<Ext> {\n\n get logger(): Logger;\n\n /**\n * Connects a request with optional attributes.\n * @param req - The request to connect.\n * @param attrs - Optional attributes or a function returning attributes.\n * @returns The instance with the request and attributes.\n */\n connect<R extends Request, T extends object>(\n req: R,\n attrs?: T | ((x: this & { req: R; }) => T)\n ): this & { req: R; } & T;\n\n /**\n * Connects using a session token with optional attributes.\n * @param token - The session token.\n * @param attrs - Optional attributes or a function returning attributes.\n * @returns A promise resolving to the instance with the session and attributes.\n */\n connectWithSessionToken<T extends object>(\n token: string,\n attrs?: T | ((x: this & { session?: Session; }) => T)\n ): Promise<this & { session?: Session; } & T>\n\n /**\n * Sets the session token.\n * @param token - The session token.\n */\n setSessionToken(token?: string): void\n\n /**\n * Retrieves the roles of a user.\n * @param user - The user whose roles are to be retrieved.\n * @returns A promise resolving to an array of roles.\n */\n userRoles(user: TUser): Promise<TRole[]>;\n\n /**\n * Becomes a specified user.\n * @param req - The request.\n * @param user - The user to become.\n * @param options - Optional cookie and JWT sign options.\n * @returns A promise resolving to void.\n */\n becomeUser(\n req: Request,\n user: TUser,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: SignOptions | undefined;\n }\n ): Promise<void>;\n\n /**\n * Logs out a user.\n * @param req - The request.\n * @param options - Optional cookie and JWT sign options.\n * @returns A promise resolving to void.\n */\n logoutUser(\n req: Request,\n options?: {\n cookieOptions?: CookieOptions | undefined;\n jwtSignOptions?: SignOptions | undefined;\n }\n ): Promise<void>;\n\n /**\n * Verifies a user's password.\n * @param user - The user whose password is to be verified.\n * @param password - The password to verify.\n * @param options - Extra options.\n * @returns A promise resolving to a boolean indicating if the password is correct.\n */\n varifyPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<boolean>;\n\n /**\n * Sets a user's password.\n * @param user - The user whose password is to be set.\n * @param password - The new password.\n * @param options - Extra options.\n * @returns A promise resolving to void.\n */\n setPassword(user: TUser, password: string, options: ExtraOptions<true>): Promise<void>;\n\n /**\n * Unsets a user's password.\n * @param user - The user whose password is to be unset.\n * @param options - Extra options.\n * @returns A promise resolving to void.\n */\n unsetPassword(user: TUser, options: ExtraOptions<true>): Promise<void>;\n\n /**\n * Defines a new function.\n * @param name - The name of the function.\n * @param callback - The function callback.\n * @param options - Optional function options excluding the callback.\n */\n define<P extends TSerializable = any, R extends TSerializable | void = any>(\n name: string,\n callback: ProtoFunction<Ext, P, R>,\n options?: Omit<ProtoFunctionOptions<Ext>, 'callback'>,\n ): void;\n\n /**\n * Registers a callback to be executed after an object is created.\n * @param className - The name of the class.\n * @param callback - The callback function.\n */\n afterCreate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ): void;\n\n /**\n * Registers a callback to be executed after an object is updated.\n * @param className - The name of the class.\n * @param callback - The callback function.\n */\n afterUpdate<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ): void;\n\n /**\n * Registers a callback to be executed after an object is deleted.\n * @param className - The name of the class.\n * @param callback - The callback function.\n */\n afterDelete<T extends string>(\n className: string,\n callback: ProtoTriggerFunction<T, Ext>,\n ): void;\n\n /**\n * Defines a new job function.\n * @param name - The name of the job function.\n * @param callback - The job function callback.\n * @param options - Optional job function options excluding the callback.\n */\n defineJob<P extends TValueWithoutObject = any>(\n name: string,\n callback: ProtoJobFunction<Ext, P>,\n options?: Omit<ProtoJobFunctionOptions<Ext>, 'callback'>,\n ): void;\n\n /**\n * Locks a table for updates.\n * @param className - The name of the class or an array of class names.\n * @param update - Whether to lock for update.\n */\n lockTable(className: string | string[], update: boolean): void;\n\n /**\n * Executes a callback within a transaction.\n * @param callback - The callback to execute.\n * @param options - Optional transaction options.\n */\n withTransaction<T>(\n callback: (connection: ProtoType<Ext>) => PromiseLike<T>,\n options?: TransactionOptions,\n ): void;\n\n /**\n * Generates an upload token.\n * @param options - Optional settings for the upload token.\n * @returns The generated upload token.\n */\n generateUploadToken(\n options?: { maxUploadSize?: number; }\n ): string;\n\n /**\n * Signs a JWT.\n * @param payload - The payload to sign.\n * @param options - Options for signing the JWT.\n * @returns The signed JWT.\n */\n jwtSign(payload: any, options: jwt.SignOptions): string;\n\n /**\n * Verifies a JWT.\n * @param token - The token to verify.\n * @param options - Options for verifying the JWT.\n * @returns The decoded JWT payload or undefined if verification fails.\n */\n jwtVarify(token: string, options?: jwt.VerifyOptions): jwt.JwtPayload | undefined;\n};\n","//\n// query.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { ProtoClient } from './proto';\nimport { RequestOptions } from './options';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { PVK } from '../internals/private';\nimport { TQuery, TQueryOptions, TQueryRandomOptions } from '../internals/query';\nimport { TObject } from '../internals/object';\nimport { TObjectType, TUpdateOp } from '../internals/object/types';\nimport { TValue, TValueWithUndefined } from '../internals/types';\nimport { LiveQuerySubscription } from '../internals/liveQuery';\n\ntype _QueryOptions = {\n relatedBy?: {\n className: string;\n id: string;\n key: string;\n };\n};\n\nabstract class _ProtoClientQuery<T extends string, E> extends TQuery<T, E, boolean> {\n\n protected _proto: ProtoClient<E>;\n protected _opts: _QueryOptions;\n\n constructor(proto: ProtoClient<E>, opts: _QueryOptions) {\n super();\n this._proto = proto;\n this._opts = opts;\n }\n\n abstract get url(): string;\n abstract get className(): T | undefined;\n\n private _queryOptions({\n silent,\n }: RequestOptions<boolean> = {}) {\n return {\n className: this.className,\n relatedBy: this._opts.relatedBy,\n silent,\n ...this[PVK].options,\n } as any;\n }\n\n private _requestOpt({\n silent,\n ...opts\n }: RequestOptions<boolean> = {}) {\n return {\n method: 'post',\n url: this.url,\n serializeOpts: {\n objAttrs: TObject.defaultReadonlyKeys,\n },\n ...opts,\n };\n }\n\n explain(options?: RequestOptions<boolean>) {\n return this._proto[PVK].request(this._proto, {\n operation: 'explain',\n ...this._queryOptions(options),\n }, this._requestOpt(options));\n }\n\n count(options?: RequestOptions<boolean>) {\n return this._proto[PVK].request(this._proto, {\n operation: 'count',\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n find(options?: RequestOptions<boolean>) {\n const request = () => this._proto[PVK].request(this._proto, {\n operation: 'find',\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as Promise<TObjectType<T, E>[]>;\n return asyncStream(request);\n }\n\n random(\n opts?: TQueryRandomOptions,\n options?: RequestOptions<boolean>\n ) {\n const request = () => this._proto[PVK].request(this._proto, {\n operation: 'random',\n random: opts,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as Promise<TObjectType<T, E>[]>;\n return asyncStream(request);\n }\n\n nonrefs(options?: RequestOptions<boolean>) {\n const request = () => this._proto[PVK].request(this._proto, {\n operation: 'nonrefs',\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as Promise<TObjectType<T, E>[]>;\n return asyncStream(request);\n }\n\n insert(\n attrs: Record<string, TValueWithUndefined>,\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'insert',\n attributes: attrs,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n insertMany(\n values: Record<string, TValueWithUndefined>[],\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'insertMany',\n attributes: values,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n updateOne(\n update: Record<string, TUpdateOp>,\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'updateOne',\n update,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n updateMany(\n update: Record<string, TUpdateOp>,\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'updateMany',\n update,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n upsertOne(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'upsertOne',\n update,\n setOnInsert,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n upsertMany(\n update: Record<string, TUpdateOp>,\n setOnInsert: Record<string, TValueWithUndefined>,\n options?: RequestOptions<boolean>\n ) {\n return this._proto[PVK].request(this._proto, {\n operation: 'upsertMany',\n update,\n setOnInsert,\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n deleteOne(options?: RequestOptions<boolean>) {\n return this._proto[PVK].request(this._proto, {\n operation: 'deleteOne',\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n deleteMany(options?: RequestOptions<boolean>) {\n return this._proto[PVK].request(this._proto, {\n operation: 'deleteMany',\n ...this._queryOptions(options),\n }, this._requestOpt(options)) as any;\n }\n\n}\n\nexport class ProtoClientQuery<T extends string, E> extends _ProtoClientQuery<T, E> {\n\n private _className: T;\n\n constructor(className: T, proto: ProtoClient<E>, opts: _QueryOptions) {\n super(proto, opts);\n this._className = className;\n }\n\n get url(): string {\n return `classes/${encodeURIComponent(this.className)}`;\n }\n get className(): T {\n return this._className;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoClientQuery(this.className, this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe() {\n return new LiveQuerySubscription<T, E>(\n this.className,\n this._proto,\n this[PVK].options.filter ?? [],\n );\n }\n}\nexport class ProtoClientRelationQuery<E> extends _ProtoClientQuery<string, E> {\n\n constructor(proto: ProtoClient<E>, opts: _QueryOptions) {\n super(proto, opts);\n }\n\n get url(): string {\n return `relation`;\n }\n get className(): undefined {\n return undefined;\n }\n\n clone(options?: TQueryOptions) {\n const clone = new ProtoClientRelationQuery(this._proto, this._opts);\n clone[PVK].options = options ?? { ...this[PVK].options };\n return clone;\n }\n\n subscribe(): LiveQuerySubscription<string, E> {\n throw Error('Unable to subscribe to relationship query');\n }\n}","//\n// request.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport {\n AUTH_COOKIE_KEY,\n MASTER_PASS_HEADER_NAME,\n MASTER_USER_HEADER_NAME,\n} from '../internals/const';\nimport { RequestOptions } from './options';\nimport { ProtoClientInternal } from './proto/internal';\nimport { ProtoType } from '../internals/proto';\nimport { AxiosOptions } from './proto/types';\nimport { XSRF_COOKIE_NAME, XSRF_HEADER_NAME } from '@o2ter/server-js/dist/const';\nimport { io, Socket } from 'socket.io-client';\nimport { TQuerySelector } from '../internals/query/types/selectors';\nimport { randomUUID } from '@o2ter/crypto-js';\nimport { deserialize } from '../internals/codec';\nimport { TObject } from '../internals/object';\n\nexport default class Service<Ext, P extends ProtoType<any>> {\n\n proto: ProtoClientInternal<Ext, P>;\n service: AxiosInstance;\n\n private token?: string;\n private sockets: Socket[] = [];\n\n private retryLimit?: number;\n\n constructor(proto: ProtoClientInternal<Ext, P>, { retryLimit, ...options }: AxiosOptions = {}) {\n this.proto = proto;\n this.service = axios.create({\n xsrfCookieName: XSRF_COOKIE_NAME,\n xsrfHeaderName: XSRF_HEADER_NAME,\n withCredentials: true,\n validateStatus: status => status >= 200 && status < 500,\n ...options,\n });\n this.retryLimit = retryLimit;\n }\n\n setSessionToken(token?: string) {\n this.token = token;\n if (typeof window === 'undefined') {\n this.service.defaults.headers.Cookie = token ? `${AUTH_COOKIE_KEY}=${token}` : null;\n }\n for (const socket of this.sockets) {\n socket.emit('auth', token);\n }\n }\n\n async _request<T extends unknown = any, D extends unknown = any>(config: RequestOptions<boolean> & AxiosRequestConfig<D>, retry = 0): Promise<AxiosResponse<T, D>> {\n\n const { master, abortSignal, serializeOpts, headers, ...opts } = config ?? {};\n\n const res = await this.service.request({\n signal: abortSignal,\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n ...master ? {\n [MASTER_USER_HEADER_NAME]: this.proto.options.masterUser?.user,\n [MASTER_PASS_HEADER_NAME]: this.proto.options.masterUser?.pass,\n } : {},\n ...headers,\n },\n ...opts,\n });\n\n if (res.headers['set-cookie']) {\n const cookies = res.headers['set-cookie'];\n const pattern = `${AUTH_COOKIE_KEY}=`;\n const token = _.findLast(_.flatMap(cookies, x => x.split(';')), x => _.startsWith(x.trim(), pattern));\n this.setSessionToken(token?.trim().slice(pattern.length));\n }\n\n if (\n (this.retryLimit ? retry < this.retryLimit : true) &&\n _.includes([412, 429], res.status)\n ) {\n return this._request(config, retry + 1);\n }\n\n if (res.status !== 200) {\n let error: Error\n try {\n const _error = JSON.parse(res.data);\n error = new Error(_error.message, { cause: _error });\n } catch {\n error = new Error(res.data);\n }\n throw error;\n }\n\n return res;\n }\n\n async request<T extends unknown = any, D extends unknown = any>(config: RequestOptions<boolean> & AxiosRequestConfig<D>) {\n return this._request<T, D>(config);\n }\n\n socket() {\n const endpoint = this.proto.options.socketEndpoint;\n const options = { auth: { token: this.token } };\n const socket = endpoint ? io(endpoint, options) : io(options);\n\n this.sockets.push(socket);\n\n type QueryOpts = {\n event: string;\n className: string;\n filter: TQuerySelector[];\n };\n\n let events: Record<string, {\n callback: (payload: any) => void;\n selector?: TQuerySelector;\n }> = {};\n let queries: Record<string, {\n callback: (payload: any) => void;\n options: QueryOpts;\n }> = {};\n let destroyCallbacks: VoidFunction[] = [];\n\n const register_event = () => {\n socket.emit('EV_NOTIFY', _.mapValues(events, x => x.selector ?? true));\n };\n\n const register_query = () => {\n socket.emit('EV_LIVEQUERY', _.mapValues(queries, x => x.options));\n };\n\n const register = () => {\n register_event();\n register_query();\n };\n\n socket.on('ON_EV_NOTIFY', ({ ids, data }: any) => {\n const payload = deserialize(JSON.stringify(data));\n for (const [id, { callback }] of _.entries(events)) {\n if (_.includes(ids, id)) callback(payload);\n }\n });\n\n socket.on('ON_EV_LIVEQUERY', ({ ids, data }: any) => {\n const objects = deserialize(JSON.stringify(data)) as TObject[];\n for (const [id, { callback }] of _.entries(queries)) {\n const keys = _.keys(_.pickBy(ids, v => _.includes(v, id)));\n callback(_.filter(objects, x => _.includes(keys, x.id)));\n }\n });\n\n socket.on('connect', register);\n socket.on('reconnect', register);\n\n const destroy = () => {\n this.sockets = this.sockets.filter(x => x !== socket);\n socket.disconnect();\n for (const callback of destroyCallbacks) {\n callback();\n }\n };\n const destroyIfNeed = () => {\n if (!_.isEmpty(events)) return;\n if (!_.isEmpty(queries)) return;\n destroy();\n };\n\n return {\n socket,\n listen: (callback: (payload: any) => void, selector?: TQuerySelector) => {\n const id = randomUUID();\n events[id] = { callback, selector };\n register_event();\n return () => {\n events = _.omit(events, id);\n register_event();\n destroyIfNeed();\n };\n },\n liveQuery: (callback: (payload: any) => void, options: QueryOpts) => {\n const id = randomUUID();\n queries[id] = { callback, options };\n register_query();\n return () => {\n queries = _.omit(queries, id);\n register_query();\n destroyIfNeed();\n };\n },\n onDestroy: (callback: VoidFunction) => {\n destroyCallbacks.push(callback);\n },\n };\n }\n};\n","//\n// internal.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 Service from '../request';\nimport { RequestOptions } from '../options';\nimport { ProtoOptions } from './types';\nimport { TSchema } from '../../internals/schema';\nimport { asyncStream, base64ToBuffer, isBinaryData, isBlob, isReadableStream, iterableToStream } from '@o2ter/utils-js';\nimport { TSerializable, deserialize, serialize } from '../../internals/codec';\nimport { EventData, ProtoInternalType, ProtoType } from '../../internals/proto';\nimport { TObjectType } from '../../internals/object/types';\nimport { TUser } from '../../internals/object/user';\nimport { TValueWithoutObject } from '../../internals/types';\nimport { TFile } from '../../internals/object/file';\nimport { PVK } from '../../internals/private';\nimport { FileData } from '../../internals/buffer';\nimport { ExtraOptions } from '../../internals/options';\nimport { UPLOAD_TOKEN_HEADER_NAME } from '../../internals/const';\nimport { TObject } from '../../internals/object';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\n\nexport class ProtoClientInternal<Ext, P extends ProtoType<any>> implements ProtoInternalType<Ext, P> {\n\n options: ProtoOptions<Ext>;\n service: Service<Ext, P>;\n\n socket?: ReturnType<Service<Ext, P>['socket']>;\n\n constructor(options: ProtoOptions<Ext>) {\n this.options = options;\n this.service = new Service(this, options.axiosOptions);\n }\n\n async request(\n proto: P,\n data?: TSerializable,\n options?: Parameters<Service<Ext, P>['request']>[0]\n ) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n baseURL: this.options.endpoint,\n data: serialize(data, serializeOpts),\n responseType: 'text',\n ...opts,\n });\n\n return proto.rebind(deserialize(res.data));\n }\n\n setSessionToken(proto: P, token?: string) {\n this.service.setSessionToken(token);\n }\n\n async sessionInfo(\n proto: P,\n options?: RequestOptions<boolean>\n ) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: 'sessionInfo',\n responseType: 'text',\n ...opts,\n });\n\n return proto.rebind(deserialize(res.data));\n }\n\n async currentUser(\n proto: P,\n options?: RequestOptions<boolean>\n ): Promise<TObjectType<'User', Ext> | undefined> {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: 'user/me',\n responseType: 'text',\n ...opts,\n });\n\n const user = proto.rebind(deserialize(res.data)) as TObjectType<'User', Ext>;\n if (!_.isNil(user) && !(user instanceof TUser)) throw Error('Unknown error');\n\n return user ?? undefined;\n }\n\n async config(options?: RequestOptions<boolean>) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: 'config',\n responseType: 'text',\n ...opts,\n });\n\n return deserialize(res.data) as Record<string, TValueWithoutObject>;\n }\n async configAcl(options: RequestOptions<boolean>) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: 'configAcl',\n responseType: 'text',\n ...opts,\n });\n\n return deserialize(res.data) as Record<string, string[]>;\n }\n async setConfig(values: Record<string, TValueWithoutObject>, options: RequestOptions<boolean> & { acl?: string[]; }) {\n\n const { serializeOpts, acl, ...opts } = options ?? {};\n\n await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: 'config',\n data: serialize({ values, acl }, serializeOpts),\n responseType: 'text',\n ...opts,\n });\n }\n\n async logout(options?: RequestOptions<boolean>) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: 'user/logout',\n responseType: 'text',\n ...opts,\n });\n }\n\n async setPassword(user: TUser, password: string, options: RequestOptions<true>) {\n\n if (!user.id) throw Error('Invalid user');\n if (_.isEmpty(password)) throw Error('Invalid password');\n\n const { serializeOpts, ...opts } = options ?? {};\n\n await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: `user/${user.id}/password`,\n data: serialize({ password }, serializeOpts),\n responseType: 'text',\n ...opts,\n });\n }\n\n async unsetPassword(user: TUser, options: RequestOptions<true>) {\n\n if (!user.id) throw Error('Invalid user');\n\n const { serializeOpts, ...opts } = options ?? {};\n\n await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: `user/${user.id}/password`,\n responseType: 'text',\n ...opts,\n });\n }\n\n async schema(options: RequestOptions<true>): Promise<Record<string, TSchema>> {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: 'schema',\n responseType: 'text',\n ...opts,\n });\n\n return deserialize(res.data) as any;\n }\n\n async updateFile(proto: P, object: TFile, options?: RequestOptions<boolean>) {\n\n const updated = await proto.Query(object.className)\n .equalTo('_id', object.id)\n .includes(...object.keys())\n .updateOne(object[PVK].mutated, options);\n\n if (updated) {\n object[PVK].attributes = updated.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n }\n\n async createFile(proto: P, object: TFile, options?: RequestOptions<boolean> & { uploadToken?: string; }) {\n\n const { serializeOpts, uploadToken, ...opts } = options ?? {};\n const { data } = object[PVK].extra;\n if (_.isNil(data)) throw Error('Invalid file object');\n\n let buffer: FileData;\n\n if (_.isString(data) || isBinaryData(data) || isReadableStream(data) || isBlob(data)) {\n buffer = data;\n } else if ('base64' in data) {\n buffer = base64ToBuffer(data.base64);\n } else {\n throw Error('Invalid file object');\n }\n\n const res = await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: 'files',\n responseType: 'text',\n data: {\n attributes: serialize(_.fromPairs([...object._set_entries()]), serializeOpts),\n file: buffer,\n },\n headers: {\n 'Content-Type': 'multipart/form-data',\n [UPLOAD_TOKEN_HEADER_NAME]: uploadToken,\n },\n ...opts,\n });\n\n const created = deserialize(res.data);\n if (!_.isNil(created) && !(created instanceof TFile)) throw Error('Unknown error');\n\n if (created) {\n object[PVK].attributes = created.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n }\n\n async saveFile(proto: P, object: TFile, options?: RequestOptions<boolean>) {\n return object.id ? this.updateFile(proto, object, options) : this.createFile(proto, object, options);\n }\n\n async deleteFile(proto: P, object: TFile, options?: ExtraOptions<boolean>) {\n\n const deleted = await proto.Query(object.className)\n .equalTo('_id', object.id)\n .deleteOne(options);\n\n if (deleted) {\n object[PVK].attributes = deleted.attributes;\n object[PVK].mutated = {};\n object[PVK].extra = {};\n }\n\n return object;\n }\n\n fileData(proto: P, object: TFile, options?: RequestOptions<boolean>) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n const filename = object.filename;\n if (_.isNil(filename)) throw Error('Invalid filename');\n\n return iterableToStream(async () => {\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: `files/${object.id}/${encodeURIComponent(filename)}`,\n responseType: 'stream',\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n ...opts,\n });\n\n if (Symbol.asyncIterator in res.data) {\n return res.data;\n } else {\n throw Error('Unknown stream type');\n }\n });\n }\n\n async notify(\n proto: P,\n data: Record<string, TValueWithoutObject> & { _rperm?: string[]; },\n options?: RequestOptions<boolean>\n ) {\n\n const { serializeOpts, ...opts } = options ?? {};\n\n await this.service.request({\n method: 'post',\n baseURL: this.options.endpoint,\n url: 'notify',\n data: serialize(data, serializeOpts),\n responseType: 'text',\n ...opts,\n });\n }\n\n listen(proto: P, callback: (data: EventData) => void, selector?: TQuerySelector) {\n const _socket = this.socket ?? this.service.socket();\n const { socket, listen, onDestroy } = _socket;\n if (_.isNil(this.socket)) {\n this.socket = _socket;\n onDestroy(() => { this.socket = undefined; });\n }\n return {\n socket,\n remove: listen((payload) => {\n callback(payload);\n }, selector),\n };\n }\n\n liveQuery(\n proto: P,\n event: string,\n className: string,\n filter: TQuerySelector[],\n callback: (object: TObject) => void,\n ) {\n const _socket = this.socket ?? this.service.socket();\n const { socket, liveQuery, onDestroy } = _socket;\n if (_.isNil(this.socket)) {\n this.socket = _socket;\n onDestroy(() => { this.socket = undefined; });\n }\n return {\n socket,\n remove: liveQuery((objects) => {\n for (const object of proto.rebind(objects)) {\n (async () => {\n try {\n await callback(object);\n } catch (e) {\n proto.logger.error(e);\n }\n })();\n }\n }, { event, className, filter }),\n };\n }\n\n refs(proto: P, object: TObject, options?: RequestOptions<boolean>) {\n if (!object.id) throw Error('Invalid object');\n const request = async () => {\n const { serializeOpts, ...opts } = options ?? {};\n const res = await this.service.request({\n method: 'get',\n baseURL: this.options.endpoint,\n url: `classes/${encodeURIComponent(object.className)}/${object.id}/refs`,\n serializeOpts: {\n objAttrs: TObject.defaultReadonlyKeys,\n },\n responseType: 'text',\n ...opts,\n });\n return proto.rebind(deserialize(res.data)) as TObjectType<string, Ext>[];\n }\n return asyncStream(request);\n }\n}\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { ProtoClientQuery, ProtoClientRelationQuery } from '../query';\nimport { RequestOptions } from '../options';\nimport { ProtoClientInternal } from './internal';\nimport { ProtoOptions } from './types';\nimport { TSerializable } from '../../internals/codec';\nimport { EventData, ProtoType } from '../../internals/proto';\nimport { TQuery } from '../../internals/query';\nimport { PVK } from '../../internals/private';\nimport { TValueWithoutObject } from '../../internals/types';\nimport { TUser } from '../../internals/object/user';\nimport { TObject } from '../../internals/object';\nimport { PathName } from '../../internals/query/types';\nimport { TQuerySelector } from '../../internals/query/types/selectors';\n\nexport class ProtoClient<Ext = any> extends ProtoType<Ext> {\n\n /** @internal */\n [PVK]: ProtoClientInternal<Ext, this>;\n\n constructor(options: ProtoOptions<Ext>) {\n super();\n this[PVK] = new ProtoClientInternal({ ...options });\n }\n\n Query<T extends string>(className: T): TQuery<T, Ext, boolean> {\n return new ProtoClientQuery<T, Ext>(className, this, {});\n }\n\n Relation<T extends string>(object: TObject, key: PathName<T>): TQuery<string, Ext, boolean> {\n const id = object.id;\n if (!id) throw Error('Invalid object');\n return new ProtoClientRelationQuery<Ext>(this, {\n relatedBy: {\n className: object.className,\n id,\n key,\n },\n });\n }\n\n config(options?: RequestOptions<boolean>): Promise<Record<string, TValueWithoutObject>> {\n return this[PVK].config(options);\n }\n configAcl(options: RequestOptions<true>) {\n if (options.master !== true) throw Error('No permission');\n return this[PVK].configAcl(options);\n }\n async setConfig(values: Record<string, TValueWithoutObject>, options: RequestOptions<true> & { acl?: string[]; }) {\n if (options.master !== true) throw Error('No permission');\n await this[PVK].setConfig(values, options);\n }\n\n run<R extends TSerializable | void = any>(\n name: string,\n data?: TSerializable,\n options?: RequestOptions<boolean>\n ) {\n return this[PVK].request(this, data, {\n method: 'post',\n url: `functions/${encodeURIComponent(name)}`,\n ...(options ?? {})\n }) as Promise<R>;\n }\n\n scheduleJob(\n name: string,\n data?: TValueWithoutObject,\n options?: RequestOptions<boolean>\n ) {\n return this[PVK].request(this, data, {\n method: 'post',\n url: `jobs/${encodeURIComponent(name)}`,\n ...(options ?? {})\n }) as any;\n }\n\n setSessionToken(token?: string) {\n this[PVK].setSessionToken(this, token);\n }\n\n sessionInfo(options?: RequestOptions<boolean>) {\n return this[PVK].sessionInfo(this, options);\n }\n\n currentUser(options?: RequestOptions<boolean>) {\n return this[PVK].currentUser(this, options);\n }\n\n logout(options?: RequestOptions<boolean>) {\n return this[PVK].logout(options);\n }\n\n setPassword(user: TUser, password: string, options: RequestOptions<true>) {\n return this[PVK].setPassword(user, password, options);\n }\n\n unsetPassword(user: TUser, options: RequestOptions<true>) {\n return this[PVK].unsetPassword(user, options);\n }\n\n schema(options: RequestOptions<true>) {\n return this[PVK].schema(options);\n }\n\n notify(data: Record<string, TValueWithoutObject> & { _rperm?: string[]; }, options?: RequestOptions<boolean>) {\n return this[PVK].notify(this, data, options);\n }\n\n listen(\n callback: (data: EventData) => void,\n selector?: TQuerySelector\n ) {\n return this[PVK].listen(this, callback, selector);\n }\n\n refs(object: TObject, options?: RequestOptions<boolean>) {\n return this[PVK].refs(this, object, options);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -167,7 +167,7 @@ class TObject {
167
167
  /**
168
168
  * Gets the object ID.
169
169
  */
170
- get objectId() {
170
+ get id() {
171
171
  return this[PVK].attributes._id;
172
172
  }
173
173
  /**
@@ -481,4 +481,4 @@ class TObject {
481
481
  }
482
482
 
483
483
  export { TObject as T, _encodeValue as _, isRelation as a, isShape as b, isPrimitive as c, defaultObjectKeyTypes as d, decodeUpdateOp as e, dimensionOf as f, _decodeValue as g, _typeof as h, isPointer as i, isVector as j, _isTypeof as k, isPrimitiveValue as l, isValue as m, shapePaths as s };
484
- //# sourceMappingURL=index-BzDsTt4R.mjs.map
484
+ //# sourceMappingURL=index-gWcE22mf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-gWcE22mf.mjs","sources":["../../../src/internals/schema.ts","../../../src/internals/object/index.ts"],"sourcesContent":["//\n// schema.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 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 { TValueWithoutObject } from './types';\n\nexport namespace TSchema {\n /**\n * Access Control List represented as an array of strings.\n */\n export type ACL = string[];\n\n /**\n * Access Control Lists for read and update operations.\n */\n export type ACLs = { \n /**\n * ACL for read operation.\n */\n read: TSchema.ACL; \n\n /**\n * ACL for update operation.\n */\n update: TSchema.ACL; \n };\n\n /**\n * Primitive data types.\n */\n export type Primitive = 'boolean' | 'number' | 'decimal' | 'string' | 'string[]' | 'date' | 'object' | 'array';\n\n /**\n * Primitive type with an optional default value.\n */\n export type PrimitiveType = Primitive | { \n /**\n * The type of the primitive.\n */\n type: Primitive; \n\n /**\n * Optional default value.\n */\n default?: TValueWithoutObject; \n };\n\n /**\n * Vector type with a specified dimension and an optional default value.\n */\n export type VectorType = { \n /**\n * The type of the vector.\n */\n type: 'vector'; \n\n /**\n * The dimension of the vector.\n */\n dimension: number; \n\n /**\n * Optional default value.\n */\n default?: number[]; \n };\n\n /**\n * Shape type with a specified shape.\n */\n export type ShapeType = { \n /**\n * The type of the shape.\n */\n type: 'shape'; \n\n /**\n * The shape definition.\n */\n shape: Record<string, DataType>; \n };\n\n /**\n * Pointer type with a target.\n */\n export type PointerType = { \n /**\n * The type of the pointer.\n */\n type: 'pointer'; \n\n /**\n * The target class of the pointer.\n */\n target: string; \n };\n\n /**\n * Relation type with a target and an optional foreign field.\n */\n export type RelationType = { \n /**\n * The type of the relation.\n */\n type: 'relation'; \n\n /**\n * The target class of the relation.\n */\n target: string; \n\n /**\n * Optional foreign field.\n */\n foreignField?: string; \n };\n\n /**\n * Data type which can be a primitive, vector, shape, pointer, or relation type.\n */\n export type DataType = PrimitiveType | VectorType | ShapeType | PointerType | RelationType;\n\n /**\n * Class Level Permissions.\n */\n export type CLPs = {\n /**\n * ACL for get operation.\n */\n get?: TSchema.ACL;\n\n /**\n * ACL for find operation.\n */\n find?: TSchema.ACL;\n\n /**\n * ACL for count operation.\n */\n count?: TSchema.ACL;\n\n /**\n * ACL for create operation.\n */\n create?: TSchema.ACL;\n\n /**\n * ACL for update operation.\n */\n update?: TSchema.ACL;\n\n /**\n * ACL for delete operation.\n */\n delete?: TSchema.ACL;\n };\n\n /**\n * Field Level Permissions.\n */\n export type FLPs = {\n /**\n * ACL for read operation.\n */\n read?: TSchema.ACL;\n\n /**\n * ACL for create operation.\n */\n create?: TSchema.ACL;\n\n /**\n * ACL for update operation.\n */\n update?: TSchema.ACL;\n };\n\n /**\n * Indexes for the schema.\n */\n export type Indexes = {\n /**\n * Type of the index, default is 'basic'.\n */\n type?: 'basic';\n\n /**\n * Keys for the index.\n */\n keys: Record<string, 1 | -1>;\n\n /**\n * Whether the index is unique.\n */\n unique?: boolean;\n } | {\n /**\n * Type of the index, must be 'vector'.\n */\n type: 'vector';\n\n /**\n * Keys for the vector index.\n */\n keys: string | string[];\n\n /**\n * Method for the vector index.\n */\n method?: 'hnsw' | 'ivfflat';\n };\n}\n\nexport const _isTypeof = (x: TSchema.DataType, types: string | string[]) => {\n if (_.isString(x)) return _.includes(_.castArray(types), x);\n return _.includes(_.castArray(types), x.type);\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 /**\n * Fields of the schema, where each field is a data type.\n */\n fields: Record<string, TSchema.DataType>;\n\n /**\n * Class level permissions for the schema.\n */\n classLevelPermissions?: TSchema.CLPs;\n\n /**\n * Additional object permissions for the schema.\n */\n additionalObjectPermissions?: TSchema.ACLs;\n\n /**\n * Field level permissions for the schema, where each field can have its own permissions.\n */\n fieldLevelPermissions?: Record<string, TSchema.FLPs>;\n\n /**\n * Secure fields in the schema.\n */\n secureFields?: string[];\n\n /**\n * Indexes for the schema.\n */\n indexes?: TSchema.Indexes[];\n\n /**\n * Indicates if live query is enabled for the schema.\n */\n liveQuery?: boolean;\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: 'string[]',\n _wperm: 'string[]',\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 - 2025 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, TValueWithoutObject, TValueWithUndefined } from '../types';\nimport { TSchema, defaultObjectKeys, defaultObjectReadonlyKeys } from '../schema';\nimport { IncludePaths, PathName } from '../query/types';\nimport { TUpdateOp, TUpdateOpKeys } from './types';\nimport { TQuery } from '../query';\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: TValueWithoutObject): TValueWithoutObject => {\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: TValueWithUndefined): TValueWithoutObject => {\n if (_.isNil(value)) return value ?? null;\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\n/**\n * Interface representing a object.\n */\nexport interface TObject {\n /**\n * Clones the object.\n * @returns A clone of the object.\n */\n clone(): TObject;\n\n /**\n * Gets a relation query for the specified key.\n * @param key - The key of the relation.\n * @returns A query object for the relation.\n */\n relation<T extends string>(key: PathName<T>): TQuery<string, any, boolean>;\n\n /**\n * Fetches the object with the specified keys included.\n * @param keys - The keys to include.\n * @param options - Additional options for the fetch operation.\n * @returns A promise that resolves to the fetched object.\n */\n fetchWithInclude<T extends _.RecursiveArray<string>>(keys: IncludePaths<T>, options?: ExtraOptions<boolean>): PromiseLike<this>;\n\n /**\n * Saves the object.\n * @param options - Additional options for the save operation.\n * @returns A promise that resolves to the saved object.\n */\n save(options?: ExtraOptions<boolean> & { cascadeSave?: boolean }): PromiseLike<this>;\n\n /**\n * Destroys the object.\n * @param options - Additional options for the destroy operation.\n * @returns A promise that resolves to the destroyed object.\n */\n destroy(options?: ExtraOptions<boolean>): PromiseLike<this>;\n}\n\n/**\n * Class representing a object.\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 /**\n * Gets the class name of the object.\n */\n get className(): string {\n return this[PVK].className;\n }\n\n /**\n * Gets the attributes of the object.\n */\n get attributes(): Record<string, TValue> {\n return cloneValue(this[PVK].attributes);\n }\n\n /**\n * Gets the object ID.\n */\n get id(): string | undefined {\n return this[PVK].attributes._id as string;\n }\n\n /**\n * Gets the creation date of the object.\n */\n get createdAt(): Date | undefined {\n return this[PVK].attributes._created_at as Date;\n }\n\n /**\n * Gets the last updated date of the object.\n */\n get updatedAt(): Date | undefined {\n return this[PVK].attributes._updated_at as Date;\n }\n\n /**\n * Gets the version number of the object.\n */\n get __v(): number {\n return this[PVK].attributes.__v as number;\n }\n\n /**\n * Gets the sequence number of the object.\n */\n get __i(): number {\n return this[PVK].attributes.__i as number;\n }\n\n /**\n * Gets the expiration date of the object.\n */\n get expiredAt(): Date | undefined {\n return this.get('_expired_at');\n }\n\n /**\n * Sets the expiration date of the object.\n * @param value - The expiration date.\n */\n set expiredAt(value: Date | undefined) {\n this.set('_expired_at', value);\n }\n\n /**\n * Gets the access control list (ACL) of the object.\n * @returns The ACL of the object.\n */\n acl(): TSchema.ACLs {\n return {\n read: this.get('_rperm') ?? ['*'],\n update: this.get('_wperm') ?? ['*'],\n };\n }\n\n /**\n * Sets the access control list (ACL) of the object.\n * @param value - The ACL to set.\n */\n setAcl(value: Partial<TSchema.ACLs>) {\n this.set('_rperm', value.read ?? ['*']);\n this.set('_wperm', value.update ?? ['*']);\n }\n\n /**\n * Sets the read access control list (ACL) of the object.\n * @param value - The read ACL to set.\n */\n setReadAcl(value: TSchema.ACL) {\n this.set('_rperm', value);\n }\n\n /**\n * Sets the write access control list (ACL) of the object.\n * @param value - The write ACL to set.\n */\n setWriteAcl(value: TSchema.ACL) {\n this.set('_wperm', value);\n }\n\n /**\n * Gets the keys of the object's attributes and mutated attributes.\n * @returns An array of keys.\n */\n keys(): string[] {\n return _.uniq([..._.keys(this[PVK].attributes), ..._.compact(_.map(_.keys(this[PVK].mutated), x => _.first(_.toPath(x))))]);\n }\n\n /**\n * Gets an iterator for the entries of the object's attributes.\n * @returns An iterator for the entries.\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 /**\n * Converts the object to a plain object.\n * @param replacer - An optional function to replace values during the conversion.\n * @returns The plain object representation of the object.\n */\n toObject(replacer?: (value: TObject) => any): any {\n const toObject = (value: TValue): any => {\n if (isPrimitiveValue(value)) return value;\n if (value instanceof TObject) return replacer?.(value) ?? value.toObject(replacer);\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 /**\n * Get the value of the attribute.\n * @param key - The key of the attribute.\n * @returns The value of the attribute.\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 /**\n * Set the value of the attribute.\n * @param key - The key of the attribute.\n * @param value - The value to set.\n */\n set<T extends string>(key: PathName<T>, value: TValueWithUndefined) {\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 /**\n * Is the object dirty.\n */\n get isDirty(): boolean {\n return !_.isEmpty(this[PVK].mutated);\n }\n\n /**\n * Increment the value of the attribute.\n * @param key - The key to increment.\n * @param value - The value to increment by.\n */\n increment<T extends string>(key: PathName<T>, value: number | Decimal) {\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 /**\n * Decrement the value of the attribute.\n * @param key - The key to decrement.\n * @param value - The value to decrement by.\n */\n decrement<T extends string>(key: PathName<T>, value: number | Decimal) {\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 /**\n * Multiplies the value of the specified attribute.\n * @param key - The key of the attribute to multiply.\n * @param value - The multiplier value.\n */\n multiply<T extends string>(key: PathName<T>, value: number | Decimal) {\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 /**\n * Divides the value of the specified attribute.\n * @param key - The key of the attribute to divide.\n * @param value - The divisor value.\n */\n divide<T extends string>(key: PathName<T>, value: number | Decimal) {\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 /**\n * Sets the value of the specified attribute to the maximum of the current value and the provided value.\n * @param key - The key of the attribute to compare.\n * @param value - The value to compare against.\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 /**\n * Sets the value of the specified attribute to the minimum of the current value and the provided value.\n * @param key - The key of the attribute to compare.\n * @param value - The value to compare against.\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 /**\n * Adds the specified values to the set of the specified attribute.\n * @param key - The key of the attribute.\n * @param values - The values to add to the set.\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 /**\n * Adds the values to the array of the attribute.\n * @param key - The key of the attribute.\n * @param values - The values to add.\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 /**\n * Removes the values from the array of the attribute.\n * @param key - The key of the attribute.\n * @param values - The values to remove.\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 /**\n * Removes the first elements from the array of the attribute.\n * @param key - The key of the attribute.\n * @param count - The number of elements to remove. Defaults to 1.\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 /**\n * Removes the last elements from the array of the attribute.\n * @param key - The key of the attribute.\n * @param count - The number of elements to remove. Defaults to 1.\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 /**\n * Fetches the object data.\n * @param options - Additional options for the fetch operation.\n * @returns A promise that resolves to the fetched object.\n */\n async fetch(options?: ExtraOptions<boolean>) {\n return this.fetchWithInclude(_.keys(this[PVK].attributes), options);\n }\n\n /**\n * Fetches the object data if needed.\n * @param keys - The keys of the attributes to fetch.\n * @param options - Additional options for the fetch operation.\n * @returns A promise that resolves to the fetched object.\n */\n async fetchIfNeeded<T extends _.RecursiveArray<string>>(keys: IncludePaths<T>, options?: ExtraOptions<boolean>) {\n const current = _.keys(this[PVK].attributes);\n if (_.every(keys, k => _.includes(current, k))) return this;\n return this.fetchWithInclude([current, keys], options);\n }\n\n}\n"],"names":[],"mappings":"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"}