@syntropix/database 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -725,9 +725,10 @@ var DoubleField = class extends Field {
725
725
  // src/core/base-model.ts
726
726
  var FIELDS_KEY = Symbol("fields");
727
727
  var TABLE_NAME_KEY = Symbol("tableName");
728
- var TABLE_DISPLAY_NAME_KEY = Symbol("displayTableName");
728
+ var DISPLAY_NAME_KEY = Symbol("displayName");
729
729
  var DESCRIPTION_KEY = Symbol("description");
730
730
  var INDEXES_KEY = Symbol("indexes");
731
+ var PATH_KEY = Symbol("path");
731
732
  function Column(options = {}) {
732
733
  return function(target, propertyKey) {
733
734
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -758,6 +759,24 @@ function Description(description) {
758
759
  };
759
760
  }
760
761
  __name(Description, "Description");
762
+ function DisplayName(displayName) {
763
+ return function(target) {
764
+ Reflect.defineMetadata(DISPLAY_NAME_KEY, displayName, target);
765
+ };
766
+ }
767
+ __name(DisplayName, "DisplayName");
768
+ function Path(path) {
769
+ return function(target) {
770
+ Reflect.defineMetadata(PATH_KEY, path, target);
771
+ };
772
+ }
773
+ __name(Path, "Path");
774
+ function Indexes(indexes) {
775
+ return function(target) {
776
+ Reflect.defineMetadata(INDEXES_KEY, indexes, target);
777
+ };
778
+ }
779
+ __name(Indexes, "Indexes");
761
780
  function ForeignKey(tableName, columnName, options = {}) {
762
781
  return function(target, propertyKey) {
763
782
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -807,7 +826,7 @@ var BaseModel = class {
807
826
  return this.name.toLowerCase();
808
827
  }
809
828
  static getDisplayName() {
810
- const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);
829
+ const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);
811
830
  if (displayName) return displayName;
812
831
  if ("displayName" in this && typeof this.displayName === "string") {
813
832
  return this.displayName;
@@ -823,7 +842,20 @@ var BaseModel = class {
823
842
  return "";
824
843
  }
825
844
  static getIndexes() {
826
- return Reflect.getMetadata(INDEXES_KEY, this) || [];
845
+ const indexes = Reflect.getMetadata(INDEXES_KEY, this);
846
+ if (indexes) return indexes;
847
+ if ("indexes" in this && Array.isArray(this.indexes)) {
848
+ return this.indexes;
849
+ }
850
+ return [];
851
+ }
852
+ static getPath() {
853
+ const path = Reflect.getMetadata(PATH_KEY, this);
854
+ if (path) return path;
855
+ if ("path" in this && typeof this.path === "string") {
856
+ return this.path;
857
+ }
858
+ return void 0;
827
859
  }
828
860
  static getFields() {
829
861
  const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};
@@ -901,13 +933,15 @@ var BaseModel = class {
901
933
  onUpdate: f.onUpdate
902
934
  }));
903
935
  const indexes = this.getIndexes();
936
+ const path = this.getPath();
904
937
  return await client.table.createTable({
905
938
  name: this.getTableName(),
906
939
  displayName: this.getDisplayName() || void 0,
907
940
  description: this.getDescription() || "",
908
941
  columns,
909
942
  foreignKeys,
910
- indexes
943
+ indexes,
944
+ path
911
945
  });
912
946
  }
913
947
  static async dropTable(client = new SyntropixClient()) {
@@ -1181,6 +1215,7 @@ exports.DateField = DateField;
1181
1215
  exports.DateTimeField = DateTimeField;
1182
1216
  exports.DecimalField = DecimalField;
1183
1217
  exports.Description = Description;
1218
+ exports.DisplayName = DisplayName;
1184
1219
  exports.DoubleField = DoubleField;
1185
1220
  exports.EQ = EQ;
1186
1221
  exports.EQ_COL = EQ_COL;
@@ -1201,6 +1236,7 @@ exports.IS_NOT_NULL = IS_NOT_NULL;
1201
1236
  exports.IS_NULL = IS_NULL;
1202
1237
  exports.I_LIKE = I_LIKE;
1203
1238
  exports.IndexType = IndexType;
1239
+ exports.Indexes = Indexes;
1204
1240
  exports.IntegerField = IntegerField;
1205
1241
  exports.JsonField = JsonField;
1206
1242
  exports.LIKE = LIKE;
@@ -1217,6 +1253,7 @@ exports.NOT_I_LIKE = NOT_I_LIKE;
1217
1253
  exports.NOT_LIKE = NOT_LIKE;
1218
1254
  exports.OR = OR;
1219
1255
  exports.OVERLAP = OVERLAP;
1256
+ exports.Path = Path;
1220
1257
  exports.SIMILARITY = SIMILARITY;
1221
1258
  exports.SIMILARITY_DISTANCE = SIMILARITY_DISTANCE;
1222
1259
  exports.STRICT_WORD_SIMILARITY = STRICT_WORD_SIMILARITY;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/model/access.ts","../src/types/model/db-index.ts","../src/types/model/filter.ts","../src/types/model/foreign-key.ts","../src/core/client/base-client.ts","../src/core/config.ts","../src/core/filter-builder.ts","../src/core/client/data-client.ts","../src/core/client/table-client.ts","../src/core/client/syntropix-client.ts","../src/core/data-type.ts","../src/core/field.ts","../src/core/base-model.ts"],"names":["AccessType","None","Read","Write","Admin","IndexType","Gin","GinTrgmOps","IvfflatL2Ops","InfflatCosineOps","InfflatIpOps","SortType","Descending","Ascending","AggregateFunction","FilterOperation","ForeignKeyAction","Cascade","Restrict","SetNull","NoAction","SetDefault","handleError","error","axiosErr","response","data","status","Error","message","BaseClient","config","headers","Authorization","apiKey","url","path","startsWith","slice","baseUrl","get","axios","params","content","EJSON","parse","JSON","stringify","isAxiosError","console","post","ClientConfig","timeout","retries","process","env","SYNTROPIX_API_KEY","SYNTROPIX_API_URL","SYNTROPIX_API_TIMEOUT","SYNTROPIX_API_RETRIES","endsWith","AND","conditions","OR","EQ","field","value","columnName","operator","staticValue","NE","NEQ","GT","GTE","LT","LTE","IN","values","In","CONTAINS","Contains","OVERLAP","Overlap","I_LIKE","pattern","ILike","NOT_I_LIKE","NotILike","NOT_IN","NotIn","LIKE","Like","NOT_LIKE","NotLike","IS_NULL","IsNull","IS_NOT_NULL","IsNotNull","BETWEEN","min","max","Between","EQ_COL","otherField","columnValue","NE_COL","GT_COL","GTE_COL","LT_COL","LTE_COL","SIMILARITY","options","Similarity","simiarityOptions","SIMILARITY_DISTANCE","SimilarityDistance","WORD_SIMILARITY","WordSimilarity","WORD_SIMILARITY_DISTANCE","WordSimilarityDistance","STRICT_WORD_SIMILARITY","StrictWordSimilarity","STRICT_WORD_SIMILARITY_DISTANCE","StrictWordSimilarityDistance","EUCLIDEAN_DISTANCE","EuclideanDistance","NEGATIVE_INNER_PRODUCT","NegativeInnerProduct","COSINE_DISTANCE","CosineDistance","Value","FilterWrapper","filter","undefined","Array","isArray","every","item","DataClient","client","insertData","insertOne","updateByPrimaryKey","pk","queryOne","model","query","One","queryMany","Many","map","updateData","deleteData","TableClient","createTable","dropTable","renameTable","truncateTable","addColumn","dropColumn","modifyColumn","getTableSchema","getTableList","SyntropixClient","_tableClient","_dataClient","table","ArrayDataType","String","maxLength","Decimal","precision","scale","Text","Integer","BigInteger","Double","DateTime","Timestamp","Date","Boolean","Money","Uuid","Enum","name","variants","Json","ColumnDataType","Vector","dimensions","dataType","Field","displayName","description","columnType","isPrimaryKey","isNullable","autoIncrement","default","defaultAccess","toLowerCase","intoColumnCreateDto","ForeignKeyField","tableName","onDelete","onUpdate","StringField","TextField","IntegerField","BooleanField","DateTimeField","TimestampField","DateField","JsonField","UuidField","VectorField","ArrayField","EnumField","MoneyField","DecimalField","DoubleField","FIELDS_KEY","Symbol","TABLE_NAME_KEY","TABLE_DISPLAY_NAME_KEY","DESCRIPTION_KEY","INDEXES_KEY","Column","target","propertyKey","fields","Reflect","getMetadata","fieldName","type","primary","nullable","defineMetadata","Description","ForeignKey","BaseModel","_client","_extra","getFields","columnToPropertyMap","propertyName","Object","entries","key","getTableName","getDisplayName","getDescription","metadataDescription","getIndexes","hasPrimaryKey","getPrimaryKeyName","getAssociations","f","getPrimaryKey","columns","foreignKeys","fromTableName","fromColumnName","toTableName","toColumnName","indexes","newName","newTableName","create","push","save","pkValue","payload","remove","finalFilter","bulkCreate","datas","batchSize","length","cnt","Math","keys","columnsSet","Set","col","size","c","update","delete","select","limit","sort","aggregate","join","offset","groupBy","count","column","function","Count","alias","toString","toJSON"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Filter } from './filter';\n\nexport const AccessType = {\n None: 'None',\n Read: 'Read',\n Write: 'Write',\n Admin: 'Admin',\n} as const;\n\nexport type AccessType = (typeof AccessType)[keyof typeof AccessType];\n\nexport interface SyntropixDBRowAccess {\n read?: Filter;\n write?: Filter;\n}\n\nexport interface SyntropixDBAccess {\n tableAccess: AccessType;\n rowAccess?: Record<string, SyntropixDBRowAccess>;\n columnAccess: Record<string, AccessType>;\n createdAt: Date;\n updatedAt: Date;\n}\n","export const IndexType = {\n Gin: 'Gin',\n GinTrgmOps: 'GinTrgmOps',\n IvfflatL2Ops: 'IvfflatL2Ops',\n InfflatCosineOps: 'InfflatCosineOps',\n InfflatIpOps: 'InfflatIpOps',\n} as const;\n\nexport type IndexType = (typeof IndexType)[keyof typeof IndexType];\n\nexport interface SyntropixDBIndex {\n name?: string;\n unique: boolean;\n nullsNotDistinct: boolean;\n columns: string[];\n indexType: IndexType;\n}\n","export const SortType = {\n Descending: 'Descending',\n Ascending: 'Ascending',\n} as const;\n\nexport type SortType = (typeof SortType)[keyof typeof SortType];\n\nexport enum AggregateFunction {\n Count = 'Count',\n Sum = 'Sum',\n Avg = 'Avg',\n Min = 'Min',\n Max = 'Max',\n CountDistinct = 'CountDistinct',\n}\n\nexport interface Join {\n table: string;\n on: any;\n}\n\nexport interface Aggregate {\n column: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n column: string;\n direction: SortType;\n}\n\nexport interface SimilarityOptions {\n threshold: number;\n order?: SortType;\n alias?: string;\n}\n\nexport enum FilterOperation {\n LT = 'LT',\n LTE = 'LTE',\n GT = 'GT',\n GTE = 'GTE',\n EQ = 'EQ',\n NEQ = 'NEQ',\n Between = 'Between',\n In = 'In',\n Contains = 'Contains',\n Overlap = 'Overlap',\n NotIn = 'NotIn',\n Like = 'Like',\n NotLike = 'NotLike',\n ILike = 'ILike',\n NotILike = 'NotILike',\n IsNull = 'IsNull',\n IsNotNull = 'IsNotNull',\n Similarity = 'Similarity',\n SimilarityDistance = 'SimilarityDistance',\n WordSimilarity = 'WordSimilarity',\n WordSimilarityDistance = 'WordSimilarityDistance',\n StrictWordSimilarity = 'StrictWordSimilarity',\n StrictWordSimilarityDistance = 'StrictWordSimilarityDistance',\n EuclideanDistance = 'EuclideanDistance',\n NegativeInnerProduct = 'NegativeInnerProduct',\n CosineDistance = 'CosineDistance',\n}\n\nexport interface FilterItem {\n columnName: string;\n operator: FilterOperation;\n staticValue?: any;\n columnValue?: string;\n simiarityOptions?: SimilarityOptions;\n}\n\nexport type FilterGroup = FilterItem[];\n\nexport type Filter = FilterGroup[];\n","export const ForeignKeyAction = {\n Cascade: 'Cascade',\n Restrict: 'Restrict',\n SetNull: 'SetNull',\n NoAction: 'NoAction',\n SetDefault: 'SetDefault',\n} as const;\n\nexport type ForeignKeyAction = (typeof ForeignKeyAction)[keyof typeof ForeignKeyAction];\n\nexport interface SyntropixDBForeignKey {\n name?: string;\n fromTableName: string;\n fromColumnName: string;\n toTableName: string;\n toColumnName: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n}\n","import { ClientConfig } from '@/core/config';\nimport { SyntropixResponse } from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { EJSON } from 'bson';\n\nfunction handleError(error: AxiosError) {\n const axiosErr = error as AxiosError<SyntropixResponse<any>>;\n if (axiosErr.response?.data?.status === 'error') {\n throw new Error(axiosErr.response.data.message);\n }\n throw new Error(axiosErr.message);\n}\n\nexport class BaseClient {\n protected config: ClientConfig;\n\n constructor(config: ClientConfig) {\n this.config = config;\n }\n\n private headers() {\n return {\n 'Content-Type': 'application/json',\n Authorization: this.config.apiKey || '',\n };\n }\n\n private url(path: string) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n public async get<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.get(this.url(path), {\n headers: this.headers(),\n params: data,\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message as string);\n }\n return content.data as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to get data: Unknown error');\n }\n }\n\n public async post<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.post(this.url(path), data, {\n headers: this.headers(),\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message);\n }\n return content.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to post data: Unknown error');\n }\n }\n}\n","export class ClientConfig {\n public apiKey?: string;\n public baseUrl?: string;\n public timeout?: number;\n public retries?: number;\n\n constructor(config?: any) {\n this.apiKey = config?.apiKey || process.env.SYNTROPIX_API_KEY;\n this.baseUrl = config?.baseUrl || process.env.SYNTROPIX_API_URL;\n this.timeout = config?.timeout || process.env.SYNTROPIX_API_TIMEOUT;\n this.retries = config?.retries || process.env.SYNTROPIX_API_RETRIES;\n\n if (!this.apiKey || !this.baseUrl) {\n throw new Error('API key and base URL are required');\n }\n\n if (!this.timeout) {\n this.timeout = 10000;\n }\n\n if (!this.retries) {\n this.retries = 3;\n }\n\n if (!this.baseUrl.endsWith('/')) {\n this.baseUrl += '/';\n }\n }\n}\n","import { Filter, FilterGroup, FilterItem, FilterOperation, SimilarityOptions } from '@/types';\n\nexport const AND = (...conditions: FilterItem[]): FilterGroup => conditions;\n\nexport const OR = (...conditions: FilterGroup[]): Filter => conditions;\n\nexport const EQ = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n staticValue: value,\n});\n\nexport const NE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n staticValue: value,\n});\n\nexport const GT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n staticValue: value,\n});\n\nexport const GTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n staticValue: value,\n});\n\nexport const LT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n staticValue: value,\n});\n\nexport const LTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n staticValue: value,\n});\n\nexport const IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.In,\n staticValue: values,\n});\n\nexport const CONTAINS = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Contains,\n staticValue: value,\n});\n\nexport const OVERLAP = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Overlap,\n staticValue: value,\n});\n\nexport const I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.ILike,\n staticValue: pattern,\n});\n\nexport const NOT_I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotILike,\n staticValue: pattern,\n});\n\nexport const NOT_IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotIn,\n staticValue: values,\n});\n\nexport const LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Like,\n staticValue: pattern,\n});\n\nexport const NOT_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotLike,\n staticValue: pattern,\n});\n\nexport const IS_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNull,\n});\n\nexport const IS_NOT_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNotNull,\n});\n\nexport const BETWEEN = (field: string, min: any, max: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Between,\n staticValue: [min, max],\n});\n\n// Column comparison (compare two columns)\nexport const EQ_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n columnValue: otherField,\n});\n\nexport const NE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n columnValue: otherField,\n});\n\nexport const GT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n columnValue: otherField,\n});\n\nexport const GTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n columnValue: otherField,\n});\n\nexport const LT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n columnValue: otherField,\n});\n\nexport const LTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n columnValue: otherField,\n});\n\n// Similarity operations\nexport const SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Similarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.SimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const EUCLIDEAN_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EuclideanDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const NEGATIVE_INNER_PRODUCT = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NegativeInnerProduct,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const COSINE_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.CosineDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\n// Helper function for values (backward compatibility)\nexport const Value = (value: any) => value;\n\n// Helper function for wrapping filter\nexport function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined {\n if (filter === undefined) {\n return undefined;\n }\n if (!Array.isArray(filter)) {\n return OR(AND(filter));\n } else if (!filter.every((item) => Array.isArray(item))) {\n return OR(filter);\n } else {\n return filter;\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { FilterWrapper } from '@/core/filter-builder';\nimport { DeleteDataDto, InsertDto, QueryDto, UpdateDto } from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class DataClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async insertData(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert', data);\n }\n\n async insertOne(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert/one', data);\n }\n\n async updateByPrimaryKey(pk: string, data: UpdateDto): Promise<any> {\n return await this.client.post<any>(`/update/${pk}`, data);\n }\n\n async queryOne(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any>('/query', { One: data });\n if (model !== undefined) {\n return new model(response);\n }\n return response;\n }\n\n async queryMany(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any[]>('/query', { Many: data });\n if (model !== undefined) {\n // In TypeScript, we would typically use a validation library or manual validation\n // For now, we'll return the data as-is, but in a real implementation you might want to use\n // a library like class-validator or zod for validation\n return response.map((item: any) => new model(item));\n }\n return response;\n }\n\n async updateData(data: UpdateDto): Promise<any> {\n return await this.client.post<any>('/update', data);\n }\n\n async deleteData(data: DeleteDataDto): Promise<any> {\n return await this.client.post<any>('/delete', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport {\n TableAddColumnDto,\n TableCreateDto,\n TableCreateResponse,\n TableDropColumnDto,\n TableDropDto,\n TableGetListDto,\n TableGetSchemaDto,\n TableListResponse,\n TableModifyColumnDto,\n TableRenameDto,\n TableSchemaResponse,\n TableTruncateDto,\n} from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class TableClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async createTable(data: TableCreateDto): Promise<TableCreateResponse> {\n return await this.client.post<TableCreateResponse>('/table/create', data);\n }\n\n async dropTable(data: TableDropDto): Promise<any> {\n return await this.client.post<any>('/table/drop', data);\n }\n\n async renameTable(data: TableRenameDto): Promise<any> {\n return await this.client.post<any>('/table/rename', data);\n }\n\n async truncateTable(data: TableTruncateDto): Promise<any> {\n return await this.client.post<any>('/table/truncate', data);\n }\n\n async addColumn(data: TableAddColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/add', data);\n }\n\n async dropColumn(data: TableDropColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/drop', data);\n }\n\n async modifyColumn(data: TableModifyColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/modify', data);\n }\n\n async getTableSchema(data: TableGetSchemaDto): Promise<TableSchemaResponse> {\n return await this.client.get<TableSchemaResponse>('/table/schema', data);\n }\n\n async getTableList(data: TableGetListDto): Promise<TableListResponse> {\n return await this.client.get<TableListResponse>('/table/list', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { DataClient } from './data-client';\nimport { TableClient } from './table-client';\n\nexport class SyntropixClient {\n private config: ClientConfig;\n private _tableClient?: TableClient;\n private _dataClient?: DataClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.config = config;\n }\n\n get table(): TableClient {\n if (!this._tableClient) {\n this._tableClient = new TableClient(this.config);\n }\n return this._tableClient;\n }\n\n get data(): DataClient {\n if (!this._dataClient) {\n this._dataClient = new DataClient(this.config);\n }\n return this._dataClient;\n }\n}\n","import { ArrayDataTypeSchema, ArrayType, DecimalType, EnumType, MoneyType, StringType, VectorType } from '@/types';\n\nexport const ArrayDataType = {\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n Text: 'Text',\n Integer: 'Integer',\n BigInteger: 'BigInteger',\n Double: 'Double',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Boolean: 'Boolean',\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Uuid: 'Uuid',\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Json: 'Json',\n} as const;\n\nexport const ColumnDataType = {\n Integer: 'Integer',\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Text: 'Text',\n Boolean: 'Boolean',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Json: 'Json',\n Uuid: 'Uuid',\n Double: 'Double',\n\n Vector: (dimensions: number): VectorType => ({ Vector: dimensions }),\n Array: (dataType: ArrayDataTypeSchema): ArrayType => ({ Array: dataType }),\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n} as const;\n","import {\n AccessType,\n ArrayDataTypeSchema,\n ColumnCreateDto,\n ColumnDataTypeSchema,\n FieldOptions,\n ForeignKeyAction,\n ForeignKeyFieldOptions,\n} from '@/types';\nimport { ColumnDataType } from './data-type';\n\nexport abstract class Field {\n name: string = '';\n displayName: string = '';\n description: string = '';\n columnType: ColumnDataTypeSchema;\n isPrimaryKey: boolean = false;\n isNullable: boolean = false;\n autoIncrement: boolean = false;\n default?: any;\n defaultAccess?: AccessType;\n\n constructor(columnType: ColumnDataTypeSchema, options: FieldOptions = {}) {\n this.columnType = columnType;\n this.name = options.name?.toLowerCase() || '';\n this.displayName = options.displayName || '';\n this.description = options.description || '';\n this.isPrimaryKey = options.isPrimaryKey || false;\n this.isNullable = options.isNullable || false;\n this.autoIncrement = options.autoIncrement || false;\n this.default = options.default;\n this.defaultAccess = options.defaultAccess;\n }\n\n intoColumnCreateDto(): ColumnCreateDto {\n return {\n name: this.name,\n displayName: this.displayName,\n columnType: this.columnType,\n description: this.description,\n isPrimaryKey: this.isPrimaryKey,\n isNullable: this.isNullable,\n autoIncrement: this.autoIncrement,\n default: this.default,\n defaultAccess: this.defaultAccess,\n };\n }\n}\n\nexport class ForeignKeyField extends Field {\n tableName: string;\n columnName: string;\n onDelete: ForeignKeyAction;\n onUpdate: ForeignKeyAction;\n\n constructor(\n columnType: ColumnDataTypeSchema,\n tableName: string,\n columnName: string,\n options: ForeignKeyFieldOptions = {},\n ) {\n super(columnType, options);\n this.tableName = tableName;\n this.columnName = columnName;\n this.onDelete = options.onDelete || ForeignKeyAction.Cascade;\n this.onUpdate = options.onUpdate || ForeignKeyAction.Cascade;\n }\n}\n\nexport class StringField extends Field {\n constructor(maxLength: number, options: FieldOptions = {}) {\n super(ColumnDataType.String(maxLength), options);\n }\n}\n\nexport class TextField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Text, options);\n }\n}\n\nexport class IntegerField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Integer, options);\n }\n}\n\nexport class BooleanField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Boolean, options);\n }\n}\n\nexport class DateTimeField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.DateTime, options);\n }\n}\n\nexport class TimestampField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Timestamp, options);\n }\n}\n\nexport class DateField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Date, options);\n }\n}\n\nexport class JsonField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Json, options);\n }\n}\n\nexport class UuidField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Uuid, options);\n }\n}\n\nexport class VectorField extends Field {\n constructor(dimensions: number, options: FieldOptions = {}) {\n super(ColumnDataType.Vector(dimensions), options);\n }\n}\n\nexport class ArrayField extends Field {\n constructor(dataType: ArrayDataTypeSchema, options: FieldOptions = {}) {\n super(ColumnDataType.Array(dataType), options);\n }\n}\n\nexport class EnumField extends Field {\n constructor(name: string, variants: string[], options: FieldOptions = {}) {\n super(ColumnDataType.Enum(name, variants), options);\n }\n}\n\nexport class MoneyField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Money(precision, scale), options);\n }\n}\n\nexport class DecimalField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Decimal(precision, scale), options);\n }\n}\n\nexport class DoubleField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Double, options);\n }\n}\n","import {\n Aggregate,\n AggregateFunction,\n ColumnCreateOptions,\n ColumnDataTypeSchema,\n Filter,\n ForeignKeyAction,\n GroupBy,\n Join,\n Sort,\n SyntropixDBForeignKey,\n SyntropixDBIndex,\n TableCreateResponse,\n TableSchemaResponse,\n} from '@/types';\nimport 'reflect-metadata';\nimport { SyntropixClient } from './client';\nimport { ColumnDataType } from './data-type';\nimport { Field, ForeignKeyField, IntegerField } from './field';\nimport { AND, EQ, GTE, OR, Value } from './filter-builder';\n\n// Metadata keys\nconst FIELDS_KEY = Symbol('fields');\nconst TABLE_NAME_KEY = Symbol('tableName');\nconst TABLE_DISPLAY_NAME_KEY = Symbol('displayTableName');\nconst DESCRIPTION_KEY = Symbol('description');\nconst INDEXES_KEY = Symbol('indexes');\n\n// Column decorator\nexport function Column(options: ColumnCreateOptions = {}) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const fieldName = options.name || propertyKey.toLowerCase();\n const columnType = options.type || ColumnDataType.Text;\n\n const field = new (class extends Field {\n constructor() {\n super(columnType, {\n name: fieldName,\n displayName: options.displayName,\n description: options.description,\n isPrimaryKey: options.primary,\n isNullable: options.nullable,\n autoIncrement: options.autoIncrement,\n default: options.default,\n defaultAccess: options.defaultAccess,\n });\n }\n })();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\n// Description decorator\nexport function Description(description: string) {\n return function (target: any) {\n Reflect.defineMetadata(DESCRIPTION_KEY, description, target);\n };\n}\n\n// ForeignKey decorator\nexport function ForeignKey(\n tableName: string,\n columnName: string,\n options: {\n type?: ColumnDataTypeSchema;\n displayName?: string;\n name?: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n description?: string;\n nullable?: boolean;\n default?: any;\n } = {},\n) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const field = new ForeignKeyField(options.type || ColumnDataType.Integer, tableName, columnName, {\n displayName: options.displayName,\n description: options.description,\n isNullable: options.nullable,\n default: options.default,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n });\n field.name = options.name || propertyKey.toLowerCase();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\nexport class BaseModel {\n private _client?: SyntropixClient;\n private _extra: Record<string, any> = {};\n\n constructor(data: Record<string, any> = {}) {\n const fields = this.getFields();\n\n // Create a mapping from column names to property names\n const columnToPropertyMap: Record<string, string> = {};\n for (const [propertyName, field] of Object.entries(fields)) {\n columnToPropertyMap[field.name] = propertyName;\n }\n\n for (const [key, value] of Object.entries(data)) {\n // Check if key is a property name\n if (key in fields) {\n (this as any)[key] = value;\n }\n // Check if key is a column name\n else if (key in columnToPropertyMap) {\n (this as any)[columnToPropertyMap[key]] = value;\n }\n // Otherwise, store in _extra\n else {\n this._extra[key] = value;\n }\n }\n }\n\n // Static metadata getters\n protected static getTableName(): string {\n const tableName = Reflect.getMetadata(TABLE_NAME_KEY, this);\n if (tableName) return tableName;\n\n // Check for static tableName property\n if ('tableName' in this && typeof (this as any).tableName === 'string') {\n return (this as any).tableName;\n }\n\n return this.name.toLowerCase();\n }\n\n protected static getDisplayName(): string | null {\n const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);\n if (displayName) return displayName;\n\n // Check for static displayName property\n if ('displayName' in this && typeof (this as any).displayName === 'string') {\n return (this as any).displayName;\n }\n\n return null;\n }\n\n public static getDescription(): string {\n const metadataDescription = Reflect.getMetadata(DESCRIPTION_KEY, this);\n if (metadataDescription) return metadataDescription;\n\n // Check for static description property as fallback\n if ('description' in this && typeof (this as any).description === 'string') {\n return (this as any).description;\n }\n\n return '';\n }\n\n protected static getIndexes(): SyntropixDBIndex[] {\n return Reflect.getMetadata(INDEXES_KEY, this) || [];\n }\n\n protected static getFields(): Record<string, Field> {\n const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};\n\n // Check if there's a primary key\n let hasPrimaryKey = false;\n for (const field of Object.values(fields) as Field[]) {\n if (field.isPrimaryKey) {\n hasPrimaryKey = true;\n field.isNullable = false;\n break;\n }\n }\n\n // If no primary key, add default 'id' field\n if (!hasPrimaryKey && !('id' in fields)) {\n fields['id'] = new IntegerField({\n isPrimaryKey: true,\n isNullable: false,\n autoIncrement: true,\n description: 'Primary key',\n });\n fields['id'].name = 'id';\n }\n\n return fields;\n }\n\n protected static getPrimaryKeyName(): string {\n const fields = this.getFields();\n for (const [key, field] of Object.entries(fields)) {\n if (field.isPrimaryKey) {\n return field.name;\n }\n }\n return 'id';\n }\n\n protected static getAssociations(): ForeignKeyField[] {\n const fields = this.getFields();\n return Object.values(fields).filter((f) => f instanceof ForeignKeyField) as ForeignKeyField[];\n }\n\n // Instance metadata getters\n protected getFields(): Record<string, Field> {\n return (this.constructor as typeof BaseModel).getFields();\n }\n\n protected getTableName(): string {\n return (this.constructor as typeof BaseModel).getTableName();\n }\n\n protected getDisplayName(): string | null {\n return (this.constructor as typeof BaseModel).getDisplayName();\n }\n\n protected getPrimaryKeyName(): string {\n return (this.constructor as typeof BaseModel).getPrimaryKeyName();\n }\n\n protected getPrimaryKey(): Field | undefined {\n const fields = this.getFields();\n for (const field of Object.values(fields)) {\n if (field.isPrimaryKey) {\n return field;\n }\n }\n return undefined;\n }\n\n // Client getter\n protected get client(): SyntropixClient {\n if (!this._client) {\n this._client = new SyntropixClient();\n }\n return this._client;\n }\n\n // Table operations\n static async createTable(client: SyntropixClient = new SyntropixClient()): Promise<TableCreateResponse> {\n const fields = this.getFields();\n const columns = Object.values(fields).map((f) => f.intoColumnCreateDto());\n const foreignKeys: SyntropixDBForeignKey[] = this.getAssociations().map((f) => ({\n fromTableName: this.getTableName(),\n fromColumnName: f.name,\n toTableName: f.tableName,\n toColumnName: f.columnName,\n onDelete: f.onDelete,\n onUpdate: f.onUpdate,\n }));\n const indexes = this.getIndexes();\n\n return await client.table.createTable({\n name: this.getTableName(),\n displayName: this.getDisplayName() || undefined,\n description: this.getDescription() || '',\n columns,\n foreignKeys,\n indexes,\n });\n }\n\n static async dropTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.dropTable({ tableName: this.getTableName() });\n }\n\n static async renameTable(newName: string, client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.renameTable({\n tableName: this.getTableName(),\n newTableName: newName,\n });\n }\n\n static async truncateTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.truncateTable({ tableName: this.getTableName() });\n }\n\n static async getTableSchema(client: SyntropixClient = new SyntropixClient()): Promise<TableSchemaResponse> {\n return await client.table.getTableSchema({ tableName: this.getTableName() });\n }\n\n // Data operations\n static async create<T extends BaseModel>(\n this: new (data?: any) => T,\n data: Record<string, any>,\n client: SyntropixClient = new SyntropixClient(),\n ): Promise<any> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns: string[] = [];\n const values: any[] = [];\n\n for (const [key, value] of Object.entries(data)) {\n if (key in fields) {\n columns.push(fields[key].name);\n values.push(value);\n } else {\n throw new Error(`Invalid field: ${key}`);\n }\n }\n\n return client.data.insertOne({\n tableName: model.getTableName(),\n data: {\n columns,\n values: [values],\n },\n });\n }\n\n async save(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const fields = this.getFields();\n\n if (pkValue === null || pkValue === undefined) {\n const data: Record<string, any> = {};\n for (const [key, field] of Object.entries(fields)) {\n data[key] = (this as any)[key];\n }\n return (this.constructor as typeof BaseModel).create(data, client);\n }\n\n const columns: string[] = [];\n const values: any[] = [];\n for (const [key, field] of Object.entries(fields)) {\n if (field.name !== pk?.name) {\n columns.push(field.name);\n values.push((this as any)[key]);\n }\n }\n\n return (\n client ||\n this.client.data.updateByPrimaryKey(pkValue, {\n tableName: this.getTableName(),\n payload: {\n filter: [[]],\n columns,\n values,\n },\n })\n );\n }\n\n async remove(filter?: Filter, _client?: SyntropixClient | null): Promise<number> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const finalFilter = filter || OR(AND(EQ(pk?.name || 'id', pkValue)));\n\n return (\n _client ||\n this.client.data.deleteData({\n tableName: this.getTableName(),\n payload: {\n filter: finalFilter,\n },\n })\n );\n }\n\n static async bulkCreate<T extends BaseModel>(\n this: new (data?: any) => T,\n datas: Record<string, any>[],\n batchSize: number = 32,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n if (!datas.length) return 0;\n if (batchSize <= 0) throw new Error('Batch size must be greater than 0');\n\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n let cnt = 0;\n batchSize = Math.min(batchSize, 128);\n\n const columns = Object.keys(datas[0]);\n const columnsSet = new Set(columns);\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n let values: any[][] = [];\n const client = _client || new SyntropixClient();\n\n for (const data of datas) {\n if (columnsSet.size !== new Set(Object.keys(data)).size || !columns.every((c) => c in data)) {\n throw new Error('All data must have the same columns');\n }\n\n values.push(columns.map((c) => data[c]));\n\n if (values.length === batchSize) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n values = [];\n }\n }\n\n if (values.length > 0) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n }\n\n return cnt;\n }\n\n static async update<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n data: Record<string, any>,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns = Object.keys(data);\n\n if (!columns.length) {\n throw new Error('No columns to update');\n }\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n const values = columns.map((c) => data[c]);\n const client = _client || new SyntropixClient();\n\n return client.data.updateData({\n tableName: model.getTableName(),\n payload: {\n filter,\n columns: columns.map((c) => fields[c].name),\n values,\n },\n });\n }\n\n static async delete<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = _client || new SyntropixClient();\n\n return client.data.deleteData({\n tableName: model.getTableName(),\n payload: { filter },\n });\n }\n\n static async get<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n select?: string[],\n _client?: SyntropixClient | null,\n ): Promise<T> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const client = _client || new SyntropixClient();\n\n const data = await client.data.queryOne({\n tableName: model.getTableName(),\n query: {\n filter,\n select: select || Object.values(fields).map((f) => f.name),\n limit: 1,\n },\n });\n\n return new this(data);\n }\n\n static async filter<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter: Filter;\n sort?: Sort[];\n aggregate?: Aggregate[];\n join?: Join;\n limit?: number;\n offset?: number;\n groupBy?: GroupBy;\n select?: string[];\n _client?: SyntropixClient | null;\n },\n ): Promise<T[]> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter,\n sort: options.sort,\n aggregate: options.aggregate,\n join: options.join ? [options.join] : undefined,\n limit: options.limit,\n offset: options.offset,\n groupBy: options.groupBy,\n select: options.select,\n },\n });\n\n return data.map((item: any) => new this(item));\n }\n\n static async count<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter?: Filter;\n join?: Join;\n groupBy?: GroupBy;\n _client?: SyntropixClient | null;\n } = {},\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter || [[GTE('id', Value(0))]],\n aggregate: [\n {\n column: 'id',\n function: AggregateFunction.Count,\n alias: 'count',\n },\n ],\n join: options.join ? [options.join] : undefined,\n limit: 1,\n offset: 0,\n groupBy: options.groupBy,\n select: ['count'],\n },\n });\n\n return data.length > 0 ? data[0].count : 0;\n }\n\n toString(): string {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n const value = (this as any)[key];\n if (!(value instanceof Field)) {\n data[key] = value;\n }\n }\n\n data._extra = this._extra;\n return `${this.constructor.name}(${JSON.stringify(data).slice(1, -1)})`;\n }\n\n toJSON(): Record<string, any> {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n data[key] = (this as any)[key];\n }\n\n return { ...data, ...this._extra };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/types/model/access.ts","../src/types/model/db-index.ts","../src/types/model/filter.ts","../src/types/model/foreign-key.ts","../src/core/client/base-client.ts","../src/core/config.ts","../src/core/filter-builder.ts","../src/core/client/data-client.ts","../src/core/client/table-client.ts","../src/core/client/syntropix-client.ts","../src/core/data-type.ts","../src/core/field.ts","../src/core/base-model.ts"],"names":["AccessType","None","Read","Write","Admin","IndexType","Gin","GinTrgmOps","IvfflatL2Ops","InfflatCosineOps","InfflatIpOps","SortType","Descending","Ascending","AggregateFunction","FilterOperation","ForeignKeyAction","Cascade","Restrict","SetNull","NoAction","SetDefault","handleError","error","axiosErr","response","data","status","Error","message","BaseClient","config","headers","Authorization","apiKey","url","path","startsWith","slice","baseUrl","get","axios","params","content","EJSON","parse","JSON","stringify","isAxiosError","console","post","ClientConfig","timeout","retries","process","env","SYNTROPIX_API_KEY","SYNTROPIX_API_URL","SYNTROPIX_API_TIMEOUT","SYNTROPIX_API_RETRIES","endsWith","AND","conditions","OR","EQ","field","value","columnName","operator","staticValue","NE","NEQ","GT","GTE","LT","LTE","IN","values","In","CONTAINS","Contains","OVERLAP","Overlap","I_LIKE","pattern","ILike","NOT_I_LIKE","NotILike","NOT_IN","NotIn","LIKE","Like","NOT_LIKE","NotLike","IS_NULL","IsNull","IS_NOT_NULL","IsNotNull","BETWEEN","min","max","Between","EQ_COL","otherField","columnValue","NE_COL","GT_COL","GTE_COL","LT_COL","LTE_COL","SIMILARITY","options","Similarity","simiarityOptions","SIMILARITY_DISTANCE","SimilarityDistance","WORD_SIMILARITY","WordSimilarity","WORD_SIMILARITY_DISTANCE","WordSimilarityDistance","STRICT_WORD_SIMILARITY","StrictWordSimilarity","STRICT_WORD_SIMILARITY_DISTANCE","StrictWordSimilarityDistance","EUCLIDEAN_DISTANCE","EuclideanDistance","NEGATIVE_INNER_PRODUCT","NegativeInnerProduct","COSINE_DISTANCE","CosineDistance","Value","FilterWrapper","filter","undefined","Array","isArray","every","item","DataClient","client","insertData","insertOne","updateByPrimaryKey","pk","queryOne","model","query","One","queryMany","Many","map","updateData","deleteData","TableClient","createTable","dropTable","renameTable","truncateTable","addColumn","dropColumn","modifyColumn","getTableSchema","getTableList","SyntropixClient","_tableClient","_dataClient","table","ArrayDataType","String","maxLength","Decimal","precision","scale","Text","Integer","BigInteger","Double","DateTime","Timestamp","Date","Boolean","Money","Uuid","Enum","name","variants","Json","ColumnDataType","Vector","dimensions","dataType","Field","displayName","description","columnType","isPrimaryKey","isNullable","autoIncrement","default","defaultAccess","toLowerCase","intoColumnCreateDto","ForeignKeyField","tableName","onDelete","onUpdate","StringField","TextField","IntegerField","BooleanField","DateTimeField","TimestampField","DateField","JsonField","UuidField","VectorField","ArrayField","EnumField","MoneyField","DecimalField","DoubleField","FIELDS_KEY","Symbol","TABLE_NAME_KEY","DISPLAY_NAME_KEY","DESCRIPTION_KEY","INDEXES_KEY","PATH_KEY","Column","target","propertyKey","fields","Reflect","getMetadata","fieldName","type","primary","nullable","defineMetadata","Description","DisplayName","Path","Indexes","indexes","ForeignKey","BaseModel","_client","_extra","getFields","columnToPropertyMap","propertyName","Object","entries","key","getTableName","getDisplayName","getDescription","metadataDescription","getIndexes","getPath","hasPrimaryKey","getPrimaryKeyName","getAssociations","f","getPrimaryKey","columns","foreignKeys","fromTableName","fromColumnName","toTableName","toColumnName","newName","newTableName","create","push","save","pkValue","payload","remove","finalFilter","bulkCreate","datas","batchSize","length","cnt","Math","keys","columnsSet","Set","col","size","c","update","delete","select","limit","sort","aggregate","join","offset","groupBy","count","column","function","Count","alias","toString","toJSON"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Filter } from './filter';\n\nexport const AccessType = {\n None: 'None',\n Read: 'Read',\n Write: 'Write',\n Admin: 'Admin',\n} as const;\n\nexport type AccessType = (typeof AccessType)[keyof typeof AccessType];\n\nexport interface SyntropixDBRowAccess {\n read?: Filter;\n write?: Filter;\n}\n\nexport interface SyntropixDBAccess {\n tableAccess: AccessType;\n rowAccess?: Record<string, SyntropixDBRowAccess>;\n columnAccess: Record<string, AccessType>;\n createdAt: Date;\n updatedAt: Date;\n}\n","export const IndexType = {\n Gin: 'Gin',\n GinTrgmOps: 'GinTrgmOps',\n IvfflatL2Ops: 'IvfflatL2Ops',\n InfflatCosineOps: 'InfflatCosineOps',\n InfflatIpOps: 'InfflatIpOps',\n} as const;\n\nexport type IndexType = (typeof IndexType)[keyof typeof IndexType];\n\nexport interface SyntropixDBIndex {\n name?: string;\n unique: boolean;\n nullsNotDistinct: boolean;\n columns: string[];\n indexType: IndexType;\n}\n","export const SortType = {\n Descending: 'Descending',\n Ascending: 'Ascending',\n} as const;\n\nexport type SortType = (typeof SortType)[keyof typeof SortType];\n\nexport enum AggregateFunction {\n Count = 'Count',\n Sum = 'Sum',\n Avg = 'Avg',\n Min = 'Min',\n Max = 'Max',\n CountDistinct = 'CountDistinct',\n}\n\nexport interface Join {\n table: string;\n on: any;\n}\n\nexport interface Aggregate {\n column: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n column: string;\n direction: SortType;\n}\n\nexport interface SimilarityOptions {\n threshold: number;\n order?: SortType;\n alias?: string;\n}\n\nexport enum FilterOperation {\n LT = 'LT',\n LTE = 'LTE',\n GT = 'GT',\n GTE = 'GTE',\n EQ = 'EQ',\n NEQ = 'NEQ',\n Between = 'Between',\n In = 'In',\n Contains = 'Contains',\n Overlap = 'Overlap',\n NotIn = 'NotIn',\n Like = 'Like',\n NotLike = 'NotLike',\n ILike = 'ILike',\n NotILike = 'NotILike',\n IsNull = 'IsNull',\n IsNotNull = 'IsNotNull',\n Similarity = 'Similarity',\n SimilarityDistance = 'SimilarityDistance',\n WordSimilarity = 'WordSimilarity',\n WordSimilarityDistance = 'WordSimilarityDistance',\n StrictWordSimilarity = 'StrictWordSimilarity',\n StrictWordSimilarityDistance = 'StrictWordSimilarityDistance',\n EuclideanDistance = 'EuclideanDistance',\n NegativeInnerProduct = 'NegativeInnerProduct',\n CosineDistance = 'CosineDistance',\n}\n\nexport interface FilterItem {\n columnName: string;\n operator: FilterOperation;\n staticValue?: any;\n columnValue?: string;\n simiarityOptions?: SimilarityOptions;\n}\n\nexport type FilterGroup = FilterItem[];\n\nexport type Filter = FilterGroup[];\n","export const ForeignKeyAction = {\n Cascade: 'Cascade',\n Restrict: 'Restrict',\n SetNull: 'SetNull',\n NoAction: 'NoAction',\n SetDefault: 'SetDefault',\n} as const;\n\nexport type ForeignKeyAction = (typeof ForeignKeyAction)[keyof typeof ForeignKeyAction];\n\nexport interface SyntropixDBForeignKey {\n name?: string;\n fromTableName: string;\n fromColumnName: string;\n toTableName: string;\n toColumnName: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n}\n","import { ClientConfig } from '@/core/config';\nimport { SyntropixResponse } from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { EJSON } from 'bson';\n\nfunction handleError(error: AxiosError) {\n const axiosErr = error as AxiosError<SyntropixResponse<any>>;\n if (axiosErr.response?.data?.status === 'error') {\n throw new Error(axiosErr.response.data.message);\n }\n throw new Error(axiosErr.message);\n}\n\nexport class BaseClient {\n protected config: ClientConfig;\n\n constructor(config: ClientConfig) {\n this.config = config;\n }\n\n private headers() {\n return {\n 'Content-Type': 'application/json',\n Authorization: this.config.apiKey || '',\n };\n }\n\n private url(path: string) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n public async get<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.get(this.url(path), {\n headers: this.headers(),\n params: data,\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message as string);\n }\n return content.data as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to get data: Unknown error');\n }\n }\n\n public async post<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.post(this.url(path), data, {\n headers: this.headers(),\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message);\n }\n return content.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to post data: Unknown error');\n }\n }\n}\n","export class ClientConfig {\n public apiKey?: string;\n public baseUrl?: string;\n public timeout?: number;\n public retries?: number;\n\n constructor(config?: any) {\n this.apiKey = config?.apiKey || process.env.SYNTROPIX_API_KEY;\n this.baseUrl = config?.baseUrl || process.env.SYNTROPIX_API_URL;\n this.timeout = config?.timeout || process.env.SYNTROPIX_API_TIMEOUT;\n this.retries = config?.retries || process.env.SYNTROPIX_API_RETRIES;\n\n if (!this.apiKey || !this.baseUrl) {\n throw new Error('API key and base URL are required');\n }\n\n if (!this.timeout) {\n this.timeout = 10000;\n }\n\n if (!this.retries) {\n this.retries = 3;\n }\n\n if (!this.baseUrl.endsWith('/')) {\n this.baseUrl += '/';\n }\n }\n}\n","import { Filter, FilterGroup, FilterItem, FilterOperation, SimilarityOptions } from '@/types';\n\nexport const AND = (...conditions: FilterItem[]): FilterGroup => conditions;\n\nexport const OR = (...conditions: FilterGroup[]): Filter => conditions;\n\nexport const EQ = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n staticValue: value,\n});\n\nexport const NE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n staticValue: value,\n});\n\nexport const GT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n staticValue: value,\n});\n\nexport const GTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n staticValue: value,\n});\n\nexport const LT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n staticValue: value,\n});\n\nexport const LTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n staticValue: value,\n});\n\nexport const IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.In,\n staticValue: values,\n});\n\nexport const CONTAINS = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Contains,\n staticValue: value,\n});\n\nexport const OVERLAP = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Overlap,\n staticValue: value,\n});\n\nexport const I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.ILike,\n staticValue: pattern,\n});\n\nexport const NOT_I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotILike,\n staticValue: pattern,\n});\n\nexport const NOT_IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotIn,\n staticValue: values,\n});\n\nexport const LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Like,\n staticValue: pattern,\n});\n\nexport const NOT_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotLike,\n staticValue: pattern,\n});\n\nexport const IS_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNull,\n});\n\nexport const IS_NOT_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNotNull,\n});\n\nexport const BETWEEN = (field: string, min: any, max: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Between,\n staticValue: [min, max],\n});\n\n// Column comparison (compare two columns)\nexport const EQ_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n columnValue: otherField,\n});\n\nexport const NE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n columnValue: otherField,\n});\n\nexport const GT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n columnValue: otherField,\n});\n\nexport const GTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n columnValue: otherField,\n});\n\nexport const LT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n columnValue: otherField,\n});\n\nexport const LTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n columnValue: otherField,\n});\n\n// Similarity operations\nexport const SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Similarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.SimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const EUCLIDEAN_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EuclideanDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const NEGATIVE_INNER_PRODUCT = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NegativeInnerProduct,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const COSINE_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.CosineDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\n// Helper function for values (backward compatibility)\nexport const Value = (value: any) => value;\n\n// Helper function for wrapping filter\nexport function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined {\n if (filter === undefined) {\n return undefined;\n }\n if (!Array.isArray(filter)) {\n return OR(AND(filter));\n } else if (!filter.every((item) => Array.isArray(item))) {\n return OR(filter);\n } else {\n return filter;\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { FilterWrapper } from '@/core/filter-builder';\nimport { DeleteDataDto, InsertDto, QueryDto, UpdateDto } from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class DataClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async insertData(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert', data);\n }\n\n async insertOne(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert/one', data);\n }\n\n async updateByPrimaryKey(pk: string, data: UpdateDto): Promise<any> {\n return await this.client.post<any>(`/update/${pk}`, data);\n }\n\n async queryOne(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any>('/query', { One: data });\n if (model !== undefined) {\n return new model(response);\n }\n return response;\n }\n\n async queryMany(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any[]>('/query', { Many: data });\n if (model !== undefined) {\n // In TypeScript, we would typically use a validation library or manual validation\n // For now, we'll return the data as-is, but in a real implementation you might want to use\n // a library like class-validator or zod for validation\n return response.map((item: any) => new model(item));\n }\n return response;\n }\n\n async updateData(data: UpdateDto): Promise<any> {\n return await this.client.post<any>('/update', data);\n }\n\n async deleteData(data: DeleteDataDto): Promise<any> {\n return await this.client.post<any>('/delete', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport {\n TableAddColumnDto,\n TableCreateDto,\n TableCreateResponse,\n TableDropColumnDto,\n TableDropDto,\n TableGetListDto,\n TableGetSchemaDto,\n TableListResponse,\n TableModifyColumnDto,\n TableRenameDto,\n TableSchemaResponse,\n TableTruncateDto,\n} from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class TableClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async createTable(data: TableCreateDto): Promise<TableCreateResponse> {\n return await this.client.post<TableCreateResponse>('/table/create', data);\n }\n\n async dropTable(data: TableDropDto): Promise<any> {\n return await this.client.post<any>('/table/drop', data);\n }\n\n async renameTable(data: TableRenameDto): Promise<any> {\n return await this.client.post<any>('/table/rename', data);\n }\n\n async truncateTable(data: TableTruncateDto): Promise<any> {\n return await this.client.post<any>('/table/truncate', data);\n }\n\n async addColumn(data: TableAddColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/add', data);\n }\n\n async dropColumn(data: TableDropColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/drop', data);\n }\n\n async modifyColumn(data: TableModifyColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/modify', data);\n }\n\n async getTableSchema(data: TableGetSchemaDto): Promise<TableSchemaResponse> {\n return await this.client.get<TableSchemaResponse>('/table/schema', data);\n }\n\n async getTableList(data: TableGetListDto): Promise<TableListResponse> {\n return await this.client.get<TableListResponse>('/table/list', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { DataClient } from './data-client';\nimport { TableClient } from './table-client';\n\nexport class SyntropixClient {\n private config: ClientConfig;\n private _tableClient?: TableClient;\n private _dataClient?: DataClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.config = config;\n }\n\n get table(): TableClient {\n if (!this._tableClient) {\n this._tableClient = new TableClient(this.config);\n }\n return this._tableClient;\n }\n\n get data(): DataClient {\n if (!this._dataClient) {\n this._dataClient = new DataClient(this.config);\n }\n return this._dataClient;\n }\n}\n","import { ArrayDataTypeSchema, ArrayType, DecimalType, EnumType, MoneyType, StringType, VectorType } from '@/types';\n\nexport const ArrayDataType = {\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n Text: 'Text',\n Integer: 'Integer',\n BigInteger: 'BigInteger',\n Double: 'Double',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Boolean: 'Boolean',\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Uuid: 'Uuid',\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Json: 'Json',\n} as const;\n\nexport const ColumnDataType = {\n Integer: 'Integer',\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Text: 'Text',\n Boolean: 'Boolean',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Json: 'Json',\n Uuid: 'Uuid',\n Double: 'Double',\n\n Vector: (dimensions: number): VectorType => ({ Vector: dimensions }),\n Array: (dataType: ArrayDataTypeSchema): ArrayType => ({ Array: dataType }),\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n} as const;\n","import {\n AccessType,\n ArrayDataTypeSchema,\n ColumnCreateDto,\n ColumnDataTypeSchema,\n FieldOptions,\n ForeignKeyAction,\n ForeignKeyFieldOptions,\n} from '@/types';\nimport { ColumnDataType } from './data-type';\n\nexport abstract class Field {\n name: string = '';\n displayName: string = '';\n description: string = '';\n columnType: ColumnDataTypeSchema;\n isPrimaryKey: boolean = false;\n isNullable: boolean = false;\n autoIncrement: boolean = false;\n default?: any;\n defaultAccess?: AccessType;\n\n constructor(columnType: ColumnDataTypeSchema, options: FieldOptions = {}) {\n this.columnType = columnType;\n this.name = options.name?.toLowerCase() || '';\n this.displayName = options.displayName || '';\n this.description = options.description || '';\n this.isPrimaryKey = options.isPrimaryKey || false;\n this.isNullable = options.isNullable || false;\n this.autoIncrement = options.autoIncrement || false;\n this.default = options.default;\n this.defaultAccess = options.defaultAccess;\n }\n\n intoColumnCreateDto(): ColumnCreateDto {\n return {\n name: this.name,\n displayName: this.displayName,\n columnType: this.columnType,\n description: this.description,\n isPrimaryKey: this.isPrimaryKey,\n isNullable: this.isNullable,\n autoIncrement: this.autoIncrement,\n default: this.default,\n defaultAccess: this.defaultAccess,\n };\n }\n}\n\nexport class ForeignKeyField extends Field {\n tableName: string;\n columnName: string;\n onDelete: ForeignKeyAction;\n onUpdate: ForeignKeyAction;\n\n constructor(\n columnType: ColumnDataTypeSchema,\n tableName: string,\n columnName: string,\n options: ForeignKeyFieldOptions = {},\n ) {\n super(columnType, options);\n this.tableName = tableName;\n this.columnName = columnName;\n this.onDelete = options.onDelete || ForeignKeyAction.Cascade;\n this.onUpdate = options.onUpdate || ForeignKeyAction.Cascade;\n }\n}\n\nexport class StringField extends Field {\n constructor(maxLength: number, options: FieldOptions = {}) {\n super(ColumnDataType.String(maxLength), options);\n }\n}\n\nexport class TextField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Text, options);\n }\n}\n\nexport class IntegerField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Integer, options);\n }\n}\n\nexport class BooleanField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Boolean, options);\n }\n}\n\nexport class DateTimeField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.DateTime, options);\n }\n}\n\nexport class TimestampField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Timestamp, options);\n }\n}\n\nexport class DateField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Date, options);\n }\n}\n\nexport class JsonField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Json, options);\n }\n}\n\nexport class UuidField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Uuid, options);\n }\n}\n\nexport class VectorField extends Field {\n constructor(dimensions: number, options: FieldOptions = {}) {\n super(ColumnDataType.Vector(dimensions), options);\n }\n}\n\nexport class ArrayField extends Field {\n constructor(dataType: ArrayDataTypeSchema, options: FieldOptions = {}) {\n super(ColumnDataType.Array(dataType), options);\n }\n}\n\nexport class EnumField extends Field {\n constructor(name: string, variants: string[], options: FieldOptions = {}) {\n super(ColumnDataType.Enum(name, variants), options);\n }\n}\n\nexport class MoneyField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Money(precision, scale), options);\n }\n}\n\nexport class DecimalField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Decimal(precision, scale), options);\n }\n}\n\nexport class DoubleField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Double, options);\n }\n}\n","import {\n Aggregate,\n AggregateFunction,\n ColumnCreateOptions,\n ColumnDataTypeSchema,\n Filter,\n ForeignKeyAction,\n GroupBy,\n Join,\n Sort,\n SyntropixDBForeignKey,\n SyntropixDBIndex,\n TableCreateResponse,\n TableSchemaResponse,\n} from '@/types';\nimport 'reflect-metadata';\nimport { SyntropixClient } from './client';\nimport { ColumnDataType } from './data-type';\nimport { Field, ForeignKeyField, IntegerField } from './field';\nimport { AND, EQ, GTE, OR, Value } from './filter-builder';\n\n// Metadata keys\nconst FIELDS_KEY = Symbol('fields');\nconst TABLE_NAME_KEY = Symbol('tableName');\nconst DISPLAY_NAME_KEY = Symbol('displayName');\nconst DESCRIPTION_KEY = Symbol('description');\nconst INDEXES_KEY = Symbol('indexes');\nconst PATH_KEY = Symbol('path');\n\n// Column decorator\nexport function Column(options: ColumnCreateOptions = {}) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const fieldName = options.name || propertyKey.toLowerCase();\n const columnType = options.type || ColumnDataType.Text;\n\n const field = new (class extends Field {\n constructor() {\n super(columnType, {\n name: fieldName,\n displayName: options.displayName,\n description: options.description,\n isPrimaryKey: options.primary,\n isNullable: options.nullable,\n autoIncrement: options.autoIncrement,\n default: options.default,\n defaultAccess: options.defaultAccess,\n });\n }\n })();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\n// Description decorator\nexport function Description(description: string) {\n return function (target: any) {\n Reflect.defineMetadata(DESCRIPTION_KEY, description, target);\n };\n}\n\nexport function DisplayName(displayName: string) {\n return function (target: any) {\n Reflect.defineMetadata(DISPLAY_NAME_KEY, displayName, target);\n };\n}\n\nexport function Path(path: string) {\n return function (target: any) {\n Reflect.defineMetadata(PATH_KEY, path, target);\n };\n}\n\nexport function Indexes(indexes: SyntropixDBIndex[]) {\n return function (target: any) {\n Reflect.defineMetadata(INDEXES_KEY, indexes, target);\n };\n}\n\n// ForeignKey decorator\nexport function ForeignKey(\n tableName: string,\n columnName: string,\n options: {\n type?: ColumnDataTypeSchema;\n displayName?: string;\n name?: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n description?: string;\n nullable?: boolean;\n default?: any;\n } = {},\n) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const field = new ForeignKeyField(options.type || ColumnDataType.Integer, tableName, columnName, {\n displayName: options.displayName,\n description: options.description,\n isNullable: options.nullable,\n default: options.default,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n });\n field.name = options.name || propertyKey.toLowerCase();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\nexport class BaseModel {\n private _client?: SyntropixClient;\n private _extra: Record<string, any> = {};\n\n constructor(data: Record<string, any> = {}) {\n const fields = this.getFields();\n\n // Create a mapping from column names to property names\n const columnToPropertyMap: Record<string, string> = {};\n for (const [propertyName, field] of Object.entries(fields)) {\n columnToPropertyMap[field.name] = propertyName;\n }\n\n for (const [key, value] of Object.entries(data)) {\n // Check if key is a property name\n if (key in fields) {\n (this as any)[key] = value;\n }\n // Check if key is a column name\n else if (key in columnToPropertyMap) {\n (this as any)[columnToPropertyMap[key]] = value;\n }\n // Otherwise, store in _extra\n else {\n this._extra[key] = value;\n }\n }\n }\n\n // Static metadata getters\n protected static getTableName(): string {\n const tableName = Reflect.getMetadata(TABLE_NAME_KEY, this);\n if (tableName) return tableName;\n\n // Check for static tableName property\n if ('tableName' in this && typeof (this as any).tableName === 'string') {\n return (this as any).tableName;\n }\n\n return this.name.toLowerCase();\n }\n\n protected static getDisplayName(): string | null {\n const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);\n if (displayName) return displayName;\n\n // Check for static displayName property\n if ('displayName' in this && typeof (this as any).displayName === 'string') {\n return (this as any).displayName;\n }\n\n return null;\n }\n\n public static getDescription(): string {\n const metadataDescription = Reflect.getMetadata(DESCRIPTION_KEY, this);\n if (metadataDescription) return metadataDescription;\n\n // Check for static description property as fallback\n if ('description' in this && typeof (this as any).description === 'string') {\n return (this as any).description;\n }\n\n return '';\n }\n\n protected static getIndexes(): SyntropixDBIndex[] {\n const indexes = Reflect.getMetadata(INDEXES_KEY, this);\n if (indexes) return indexes;\n\n if ('indexes' in this && Array.isArray((this as any).indexes)) {\n return (this as any).indexes;\n }\n\n return [];\n }\n\n protected static getPath(): string | undefined {\n const path = Reflect.getMetadata(PATH_KEY, this);\n if (path) return path;\n\n if ('path' in this && typeof (this as any).path === 'string') {\n return (this as any).path;\n }\n\n return undefined;\n }\n\n protected static getFields(): Record<string, Field> {\n const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};\n\n // Check if there's a primary key\n let hasPrimaryKey = false;\n for (const field of Object.values(fields) as Field[]) {\n if (field.isPrimaryKey) {\n hasPrimaryKey = true;\n field.isNullable = false;\n break;\n }\n }\n\n // If no primary key, add default 'id' field\n if (!hasPrimaryKey && !('id' in fields)) {\n fields['id'] = new IntegerField({\n isPrimaryKey: true,\n isNullable: false,\n autoIncrement: true,\n description: 'Primary key',\n });\n fields['id'].name = 'id';\n }\n\n return fields;\n }\n\n protected static getPrimaryKeyName(): string {\n const fields = this.getFields();\n for (const [key, field] of Object.entries(fields)) {\n if (field.isPrimaryKey) {\n return field.name;\n }\n }\n return 'id';\n }\n\n protected static getAssociations(): ForeignKeyField[] {\n const fields = this.getFields();\n return Object.values(fields).filter((f) => f instanceof ForeignKeyField) as ForeignKeyField[];\n }\n\n // Instance metadata getters\n protected getFields(): Record<string, Field> {\n return (this.constructor as typeof BaseModel).getFields();\n }\n\n protected getTableName(): string {\n return (this.constructor as typeof BaseModel).getTableName();\n }\n\n protected getDisplayName(): string | null {\n return (this.constructor as typeof BaseModel).getDisplayName();\n }\n\n protected getPrimaryKeyName(): string {\n return (this.constructor as typeof BaseModel).getPrimaryKeyName();\n }\n\n protected getPrimaryKey(): Field | undefined {\n const fields = this.getFields();\n for (const field of Object.values(fields)) {\n if (field.isPrimaryKey) {\n return field;\n }\n }\n return undefined;\n }\n\n // Client getter\n protected get client(): SyntropixClient {\n if (!this._client) {\n this._client = new SyntropixClient();\n }\n return this._client;\n }\n\n // Table operations\n static async createTable(client: SyntropixClient = new SyntropixClient()): Promise<TableCreateResponse> {\n const fields = this.getFields();\n const columns = Object.values(fields).map((f) => f.intoColumnCreateDto());\n const foreignKeys: SyntropixDBForeignKey[] = this.getAssociations().map((f) => ({\n fromTableName: this.getTableName(),\n fromColumnName: f.name,\n toTableName: f.tableName,\n toColumnName: f.columnName,\n onDelete: f.onDelete,\n onUpdate: f.onUpdate,\n }));\n const indexes = this.getIndexes();\n const path = this.getPath();\n return await client.table.createTable({\n name: this.getTableName(),\n displayName: this.getDisplayName() || undefined,\n description: this.getDescription() || '',\n columns,\n foreignKeys,\n indexes,\n path,\n });\n }\n\n static async dropTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.dropTable({ tableName: this.getTableName() });\n }\n\n static async renameTable(newName: string, client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.renameTable({\n tableName: this.getTableName(),\n newTableName: newName,\n });\n }\n\n static async truncateTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.truncateTable({ tableName: this.getTableName() });\n }\n\n static async getTableSchema(client: SyntropixClient = new SyntropixClient()): Promise<TableSchemaResponse> {\n return await client.table.getTableSchema({ tableName: this.getTableName() });\n }\n\n // Data operations\n static async create<T extends BaseModel>(\n this: new (data?: any) => T,\n data: Record<string, any>,\n client: SyntropixClient = new SyntropixClient(),\n ): Promise<any> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns: string[] = [];\n const values: any[] = [];\n\n for (const [key, value] of Object.entries(data)) {\n if (key in fields) {\n columns.push(fields[key].name);\n values.push(value);\n } else {\n throw new Error(`Invalid field: ${key}`);\n }\n }\n\n return client.data.insertOne({\n tableName: model.getTableName(),\n data: {\n columns,\n values: [values],\n },\n });\n }\n\n async save(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const fields = this.getFields();\n\n if (pkValue === null || pkValue === undefined) {\n const data: Record<string, any> = {};\n for (const [key, field] of Object.entries(fields)) {\n data[key] = (this as any)[key];\n }\n return (this.constructor as typeof BaseModel).create(data, client);\n }\n\n const columns: string[] = [];\n const values: any[] = [];\n for (const [key, field] of Object.entries(fields)) {\n if (field.name !== pk?.name) {\n columns.push(field.name);\n values.push((this as any)[key]);\n }\n }\n\n return (\n client ||\n this.client.data.updateByPrimaryKey(pkValue, {\n tableName: this.getTableName(),\n payload: {\n filter: [[]],\n columns,\n values,\n },\n })\n );\n }\n\n async remove(filter?: Filter, _client?: SyntropixClient | null): Promise<number> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const finalFilter = filter || OR(AND(EQ(pk?.name || 'id', pkValue)));\n\n return (\n _client ||\n this.client.data.deleteData({\n tableName: this.getTableName(),\n payload: {\n filter: finalFilter,\n },\n })\n );\n }\n\n static async bulkCreate<T extends BaseModel>(\n this: new (data?: any) => T,\n datas: Record<string, any>[],\n batchSize: number = 32,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n if (!datas.length) return 0;\n if (batchSize <= 0) throw new Error('Batch size must be greater than 0');\n\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n let cnt = 0;\n batchSize = Math.min(batchSize, 128);\n\n const columns = Object.keys(datas[0]);\n const columnsSet = new Set(columns);\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n let values: any[][] = [];\n const client = _client || new SyntropixClient();\n\n for (const data of datas) {\n if (columnsSet.size !== new Set(Object.keys(data)).size || !columns.every((c) => c in data)) {\n throw new Error('All data must have the same columns');\n }\n\n values.push(columns.map((c) => data[c]));\n\n if (values.length === batchSize) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n values = [];\n }\n }\n\n if (values.length > 0) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n }\n\n return cnt;\n }\n\n static async update<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n data: Record<string, any>,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns = Object.keys(data);\n\n if (!columns.length) {\n throw new Error('No columns to update');\n }\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n const values = columns.map((c) => data[c]);\n const client = _client || new SyntropixClient();\n\n return client.data.updateData({\n tableName: model.getTableName(),\n payload: {\n filter,\n columns: columns.map((c) => fields[c].name),\n values,\n },\n });\n }\n\n static async delete<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = _client || new SyntropixClient();\n\n return client.data.deleteData({\n tableName: model.getTableName(),\n payload: { filter },\n });\n }\n\n static async get<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n select?: string[],\n _client?: SyntropixClient | null,\n ): Promise<T> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const client = _client || new SyntropixClient();\n\n const data = await client.data.queryOne({\n tableName: model.getTableName(),\n query: {\n filter,\n select: select || Object.values(fields).map((f) => f.name),\n limit: 1,\n },\n });\n\n return new this(data);\n }\n\n static async filter<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter: Filter;\n sort?: Sort[];\n aggregate?: Aggregate[];\n join?: Join;\n limit?: number;\n offset?: number;\n groupBy?: GroupBy;\n select?: string[];\n _client?: SyntropixClient | null;\n },\n ): Promise<T[]> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter,\n sort: options.sort,\n aggregate: options.aggregate,\n join: options.join ? [options.join] : undefined,\n limit: options.limit,\n offset: options.offset,\n groupBy: options.groupBy,\n select: options.select,\n },\n });\n\n return data.map((item: any) => new this(item));\n }\n\n static async count<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter?: Filter;\n join?: Join;\n groupBy?: GroupBy;\n _client?: SyntropixClient | null;\n } = {},\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter || [[GTE('id', Value(0))]],\n aggregate: [\n {\n column: 'id',\n function: AggregateFunction.Count,\n alias: 'count',\n },\n ],\n join: options.join ? [options.join] : undefined,\n limit: 1,\n offset: 0,\n groupBy: options.groupBy,\n select: ['count'],\n },\n });\n\n return data.length > 0 ? data[0].count : 0;\n }\n\n toString(): string {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n const value = (this as any)[key];\n if (!(value instanceof Field)) {\n data[key] = value;\n }\n }\n\n data._extra = this._extra;\n return `${this.constructor.name}(${JSON.stringify(data).slice(1, -1)})`;\n }\n\n toJSON(): Record<string, any> {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n data[key] = (this as any)[key];\n }\n\n return { ...data, ...this._extra };\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -469,6 +469,9 @@ declare class DoubleField extends Field {
469
469
 
470
470
  declare function Column(options?: ColumnCreateOptions): (target: any, propertyKey: string) => void;
471
471
  declare function Description(description: string): (target: any) => void;
472
+ declare function DisplayName(displayName: string): (target: any) => void;
473
+ declare function Path(path: string): (target: any) => void;
474
+ declare function Indexes(indexes: SyntropixDBIndex[]): (target: any) => void;
472
475
  declare function ForeignKey(tableName: string, columnName: string, options?: {
473
476
  type?: ColumnDataTypeSchema;
474
477
  displayName?: string;
@@ -487,6 +490,7 @@ declare class BaseModel {
487
490
  protected static getDisplayName(): string | null;
488
491
  static getDescription(): string;
489
492
  protected static getIndexes(): SyntropixDBIndex[];
493
+ protected static getPath(): string | undefined;
490
494
  protected static getFields(): Record<string, Field>;
491
495
  protected static getPrimaryKeyName(): string;
492
496
  protected static getAssociations(): ForeignKeyField[];
@@ -600,4 +604,4 @@ declare const COSINE_DISTANCE: (field: string, value: any, options: SimilarityOp
600
604
  declare const Value: (value: any) => any;
601
605
  declare function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined;
602
606
 
603
- export { AND, AccessType, type Aggregate, AggregateFunction, ArrayDataType, type ArrayDataTypeSchema, ArrayField, type ArrayType, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, type ColumnCreateDto, type ColumnCreateOptions, type ColumnCreateResponse, ColumnDataType, type ColumnDataTypeSchema, DataClient, DateField, DateTimeField, DecimalField, type DecimalType, type DeleteDataDto, type DeleteDataPayloadDto, Description, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, type EnumType, Field, type FieldOptions, type Filter, type FilterGroup, type FilterItem, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, type ForeignKeyFieldOptions, GT, GTE, GTE_COL, GT_COL, type GroupBy, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, type InsertDataDto, type InsertDto, IntegerField, type Join, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, type MoneyType, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, type QueryDto, type QueryPayloadDto, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, type SimilarityOptions, type Sort, SortType, StringField, type StringType, SyntropixClient, type SyntropixDBAccess, type SyntropixDBColumn, type SyntropixDBForeignKey, type SyntropixDBIndex, type SyntropixDBRowAccess, type SyntropixDBTable, type SyntropixDBTableListItem, type SyntropixDBTableSchema, type SyntropixErrorResponse, type SyntropixResponse, type SyntropixSuccessResponse, type TableAddColumnDto, TableClient, type TableCreateDto, type TableCreateResponse, type TableDropColumnDto, type TableDropDto, type TableGetListDto, type TableGetSchemaDto, type TableListResponse, type TableModifyColumnDto, type TableRenameDto, type TableSchemaResponse, type TableTruncateDto, TextField, TimestampField, type UpdateDto, type UpdatePayloadDto, UuidField, Value, VectorField, type VectorType, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
607
+ export { AND, AccessType, type Aggregate, AggregateFunction, ArrayDataType, type ArrayDataTypeSchema, ArrayField, type ArrayType, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, type ColumnCreateDto, type ColumnCreateOptions, type ColumnCreateResponse, ColumnDataType, type ColumnDataTypeSchema, DataClient, DateField, DateTimeField, DecimalField, type DecimalType, type DeleteDataDto, type DeleteDataPayloadDto, Description, DisplayName, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, type EnumType, Field, type FieldOptions, type Filter, type FilterGroup, type FilterItem, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, type ForeignKeyFieldOptions, GT, GTE, GTE_COL, GT_COL, type GroupBy, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, Indexes, type InsertDataDto, type InsertDto, IntegerField, type Join, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, type MoneyType, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, Path, type QueryDto, type QueryPayloadDto, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, type SimilarityOptions, type Sort, SortType, StringField, type StringType, SyntropixClient, type SyntropixDBAccess, type SyntropixDBColumn, type SyntropixDBForeignKey, type SyntropixDBIndex, type SyntropixDBRowAccess, type SyntropixDBTable, type SyntropixDBTableListItem, type SyntropixDBTableSchema, type SyntropixErrorResponse, type SyntropixResponse, type SyntropixSuccessResponse, type TableAddColumnDto, TableClient, type TableCreateDto, type TableCreateResponse, type TableDropColumnDto, type TableDropDto, type TableGetListDto, type TableGetSchemaDto, type TableListResponse, type TableModifyColumnDto, type TableRenameDto, type TableSchemaResponse, type TableTruncateDto, TextField, TimestampField, type UpdateDto, type UpdatePayloadDto, UuidField, Value, VectorField, type VectorType, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
package/dist/index.d.ts CHANGED
@@ -469,6 +469,9 @@ declare class DoubleField extends Field {
469
469
 
470
470
  declare function Column(options?: ColumnCreateOptions): (target: any, propertyKey: string) => void;
471
471
  declare function Description(description: string): (target: any) => void;
472
+ declare function DisplayName(displayName: string): (target: any) => void;
473
+ declare function Path(path: string): (target: any) => void;
474
+ declare function Indexes(indexes: SyntropixDBIndex[]): (target: any) => void;
472
475
  declare function ForeignKey(tableName: string, columnName: string, options?: {
473
476
  type?: ColumnDataTypeSchema;
474
477
  displayName?: string;
@@ -487,6 +490,7 @@ declare class BaseModel {
487
490
  protected static getDisplayName(): string | null;
488
491
  static getDescription(): string;
489
492
  protected static getIndexes(): SyntropixDBIndex[];
493
+ protected static getPath(): string | undefined;
490
494
  protected static getFields(): Record<string, Field>;
491
495
  protected static getPrimaryKeyName(): string;
492
496
  protected static getAssociations(): ForeignKeyField[];
@@ -600,4 +604,4 @@ declare const COSINE_DISTANCE: (field: string, value: any, options: SimilarityOp
600
604
  declare const Value: (value: any) => any;
601
605
  declare function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined;
602
606
 
603
- export { AND, AccessType, type Aggregate, AggregateFunction, ArrayDataType, type ArrayDataTypeSchema, ArrayField, type ArrayType, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, type ColumnCreateDto, type ColumnCreateOptions, type ColumnCreateResponse, ColumnDataType, type ColumnDataTypeSchema, DataClient, DateField, DateTimeField, DecimalField, type DecimalType, type DeleteDataDto, type DeleteDataPayloadDto, Description, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, type EnumType, Field, type FieldOptions, type Filter, type FilterGroup, type FilterItem, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, type ForeignKeyFieldOptions, GT, GTE, GTE_COL, GT_COL, type GroupBy, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, type InsertDataDto, type InsertDto, IntegerField, type Join, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, type MoneyType, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, type QueryDto, type QueryPayloadDto, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, type SimilarityOptions, type Sort, SortType, StringField, type StringType, SyntropixClient, type SyntropixDBAccess, type SyntropixDBColumn, type SyntropixDBForeignKey, type SyntropixDBIndex, type SyntropixDBRowAccess, type SyntropixDBTable, type SyntropixDBTableListItem, type SyntropixDBTableSchema, type SyntropixErrorResponse, type SyntropixResponse, type SyntropixSuccessResponse, type TableAddColumnDto, TableClient, type TableCreateDto, type TableCreateResponse, type TableDropColumnDto, type TableDropDto, type TableGetListDto, type TableGetSchemaDto, type TableListResponse, type TableModifyColumnDto, type TableRenameDto, type TableSchemaResponse, type TableTruncateDto, TextField, TimestampField, type UpdateDto, type UpdatePayloadDto, UuidField, Value, VectorField, type VectorType, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
607
+ export { AND, AccessType, type Aggregate, AggregateFunction, ArrayDataType, type ArrayDataTypeSchema, ArrayField, type ArrayType, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, type ColumnCreateDto, type ColumnCreateOptions, type ColumnCreateResponse, ColumnDataType, type ColumnDataTypeSchema, DataClient, DateField, DateTimeField, DecimalField, type DecimalType, type DeleteDataDto, type DeleteDataPayloadDto, Description, DisplayName, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, type EnumType, Field, type FieldOptions, type Filter, type FilterGroup, type FilterItem, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, type ForeignKeyFieldOptions, GT, GTE, GTE_COL, GT_COL, type GroupBy, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, Indexes, type InsertDataDto, type InsertDto, IntegerField, type Join, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, type MoneyType, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, Path, type QueryDto, type QueryPayloadDto, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, type SimilarityOptions, type Sort, SortType, StringField, type StringType, SyntropixClient, type SyntropixDBAccess, type SyntropixDBColumn, type SyntropixDBForeignKey, type SyntropixDBIndex, type SyntropixDBRowAccess, type SyntropixDBTable, type SyntropixDBTableListItem, type SyntropixDBTableSchema, type SyntropixErrorResponse, type SyntropixResponse, type SyntropixSuccessResponse, type TableAddColumnDto, TableClient, type TableCreateDto, type TableCreateResponse, type TableDropColumnDto, type TableDropDto, type TableGetListDto, type TableGetSchemaDto, type TableListResponse, type TableModifyColumnDto, type TableRenameDto, type TableSchemaResponse, type TableTruncateDto, TextField, TimestampField, type UpdateDto, type UpdatePayloadDto, UuidField, Value, VectorField, type VectorType, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
package/dist/index.js CHANGED
@@ -719,9 +719,10 @@ var DoubleField = class extends Field {
719
719
  // src/core/base-model.ts
720
720
  var FIELDS_KEY = Symbol("fields");
721
721
  var TABLE_NAME_KEY = Symbol("tableName");
722
- var TABLE_DISPLAY_NAME_KEY = Symbol("displayTableName");
722
+ var DISPLAY_NAME_KEY = Symbol("displayName");
723
723
  var DESCRIPTION_KEY = Symbol("description");
724
724
  var INDEXES_KEY = Symbol("indexes");
725
+ var PATH_KEY = Symbol("path");
725
726
  function Column(options = {}) {
726
727
  return function(target, propertyKey) {
727
728
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -752,6 +753,24 @@ function Description(description) {
752
753
  };
753
754
  }
754
755
  __name(Description, "Description");
756
+ function DisplayName(displayName) {
757
+ return function(target) {
758
+ Reflect.defineMetadata(DISPLAY_NAME_KEY, displayName, target);
759
+ };
760
+ }
761
+ __name(DisplayName, "DisplayName");
762
+ function Path(path) {
763
+ return function(target) {
764
+ Reflect.defineMetadata(PATH_KEY, path, target);
765
+ };
766
+ }
767
+ __name(Path, "Path");
768
+ function Indexes(indexes) {
769
+ return function(target) {
770
+ Reflect.defineMetadata(INDEXES_KEY, indexes, target);
771
+ };
772
+ }
773
+ __name(Indexes, "Indexes");
755
774
  function ForeignKey(tableName, columnName, options = {}) {
756
775
  return function(target, propertyKey) {
757
776
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -801,7 +820,7 @@ var BaseModel = class {
801
820
  return this.name.toLowerCase();
802
821
  }
803
822
  static getDisplayName() {
804
- const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);
823
+ const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);
805
824
  if (displayName) return displayName;
806
825
  if ("displayName" in this && typeof this.displayName === "string") {
807
826
  return this.displayName;
@@ -817,7 +836,20 @@ var BaseModel = class {
817
836
  return "";
818
837
  }
819
838
  static getIndexes() {
820
- return Reflect.getMetadata(INDEXES_KEY, this) || [];
839
+ const indexes = Reflect.getMetadata(INDEXES_KEY, this);
840
+ if (indexes) return indexes;
841
+ if ("indexes" in this && Array.isArray(this.indexes)) {
842
+ return this.indexes;
843
+ }
844
+ return [];
845
+ }
846
+ static getPath() {
847
+ const path = Reflect.getMetadata(PATH_KEY, this);
848
+ if (path) return path;
849
+ if ("path" in this && typeof this.path === "string") {
850
+ return this.path;
851
+ }
852
+ return void 0;
821
853
  }
822
854
  static getFields() {
823
855
  const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};
@@ -895,13 +927,15 @@ var BaseModel = class {
895
927
  onUpdate: f.onUpdate
896
928
  }));
897
929
  const indexes = this.getIndexes();
930
+ const path = this.getPath();
898
931
  return await client.table.createTable({
899
932
  name: this.getTableName(),
900
933
  displayName: this.getDisplayName() || void 0,
901
934
  description: this.getDescription() || "",
902
935
  columns,
903
936
  foreignKeys,
904
- indexes
937
+ indexes,
938
+ path
905
939
  });
906
940
  }
907
941
  static async dropTable(client = new SyntropixClient()) {
@@ -1156,6 +1190,6 @@ var BaseModel = class {
1156
1190
  }
1157
1191
  };
1158
1192
 
1159
- export { AND, AccessType, AggregateFunction, ArrayDataType, ArrayField, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, ColumnDataType, DataClient, DateField, DateTimeField, DecimalField, Description, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, Field, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, GT, GTE, GTE_COL, GT_COL, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, IntegerField, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, SortType, StringField, SyntropixClient, TableClient, TextField, TimestampField, UuidField, Value, VectorField, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
1193
+ export { AND, AccessType, AggregateFunction, ArrayDataType, ArrayField, BETWEEN, BaseClient, BaseModel, BooleanField, CONTAINS, COSINE_DISTANCE, ClientConfig, Column, ColumnDataType, DataClient, DateField, DateTimeField, DecimalField, Description, DisplayName, DoubleField, EQ, EQ_COL, EUCLIDEAN_DISTANCE, EnumField, Field, FilterOperation, FilterWrapper, ForeignKey, ForeignKeyAction, ForeignKeyField, GT, GTE, GTE_COL, GT_COL, IN, IS_NOT_NULL, IS_NULL, I_LIKE, IndexType, Indexes, IntegerField, JsonField, LIKE, LT, LTE, LTE_COL, LT_COL, MoneyField, NE, NEGATIVE_INNER_PRODUCT, NE_COL, NOT_IN, NOT_I_LIKE, NOT_LIKE, OR, OVERLAP, Path, SIMILARITY, SIMILARITY_DISTANCE, STRICT_WORD_SIMILARITY, STRICT_WORD_SIMILARITY_DISTANCE, SortType, StringField, SyntropixClient, TableClient, TextField, TimestampField, UuidField, Value, VectorField, WORD_SIMILARITY, WORD_SIMILARITY_DISTANCE };
1160
1194
  //# sourceMappingURL=index.js.map
1161
1195
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/model/access.ts","../src/types/model/db-index.ts","../src/types/model/filter.ts","../src/types/model/foreign-key.ts","../src/core/client/base-client.ts","../src/core/config.ts","../src/core/filter-builder.ts","../src/core/client/data-client.ts","../src/core/client/table-client.ts","../src/core/client/syntropix-client.ts","../src/core/data-type.ts","../src/core/field.ts","../src/core/base-model.ts"],"names":["AccessType","None","Read","Write","Admin","IndexType","Gin","GinTrgmOps","IvfflatL2Ops","InfflatCosineOps","InfflatIpOps","SortType","Descending","Ascending","AggregateFunction","FilterOperation","ForeignKeyAction","Cascade","Restrict","SetNull","NoAction","SetDefault","handleError","error","axiosErr","response","data","status","Error","message","BaseClient","config","headers","Authorization","apiKey","url","path","startsWith","slice","baseUrl","get","axios","params","content","EJSON","parse","JSON","stringify","isAxiosError","console","post","ClientConfig","timeout","retries","process","env","SYNTROPIX_API_KEY","SYNTROPIX_API_URL","SYNTROPIX_API_TIMEOUT","SYNTROPIX_API_RETRIES","endsWith","AND","conditions","OR","EQ","field","value","columnName","operator","staticValue","NE","NEQ","GT","GTE","LT","LTE","IN","values","In","CONTAINS","Contains","OVERLAP","Overlap","I_LIKE","pattern","ILike","NOT_I_LIKE","NotILike","NOT_IN","NotIn","LIKE","Like","NOT_LIKE","NotLike","IS_NULL","IsNull","IS_NOT_NULL","IsNotNull","BETWEEN","min","max","Between","EQ_COL","otherField","columnValue","NE_COL","GT_COL","GTE_COL","LT_COL","LTE_COL","SIMILARITY","options","Similarity","simiarityOptions","SIMILARITY_DISTANCE","SimilarityDistance","WORD_SIMILARITY","WordSimilarity","WORD_SIMILARITY_DISTANCE","WordSimilarityDistance","STRICT_WORD_SIMILARITY","StrictWordSimilarity","STRICT_WORD_SIMILARITY_DISTANCE","StrictWordSimilarityDistance","EUCLIDEAN_DISTANCE","EuclideanDistance","NEGATIVE_INNER_PRODUCT","NegativeInnerProduct","COSINE_DISTANCE","CosineDistance","Value","FilterWrapper","filter","undefined","Array","isArray","every","item","DataClient","client","insertData","insertOne","updateByPrimaryKey","pk","queryOne","model","query","One","queryMany","Many","map","updateData","deleteData","TableClient","createTable","dropTable","renameTable","truncateTable","addColumn","dropColumn","modifyColumn","getTableSchema","getTableList","SyntropixClient","_tableClient","_dataClient","table","ArrayDataType","String","maxLength","Decimal","precision","scale","Text","Integer","BigInteger","Double","DateTime","Timestamp","Date","Boolean","Money","Uuid","Enum","name","variants","Json","ColumnDataType","Vector","dimensions","dataType","Field","displayName","description","columnType","isPrimaryKey","isNullable","autoIncrement","default","defaultAccess","toLowerCase","intoColumnCreateDto","ForeignKeyField","tableName","onDelete","onUpdate","StringField","TextField","IntegerField","BooleanField","DateTimeField","TimestampField","DateField","JsonField","UuidField","VectorField","ArrayField","EnumField","MoneyField","DecimalField","DoubleField","FIELDS_KEY","Symbol","TABLE_NAME_KEY","TABLE_DISPLAY_NAME_KEY","DESCRIPTION_KEY","INDEXES_KEY","Column","target","propertyKey","fields","Reflect","getMetadata","fieldName","type","primary","nullable","defineMetadata","Description","ForeignKey","BaseModel","_client","_extra","getFields","columnToPropertyMap","propertyName","Object","entries","key","getTableName","getDisplayName","getDescription","metadataDescription","getIndexes","hasPrimaryKey","getPrimaryKeyName","getAssociations","f","getPrimaryKey","columns","foreignKeys","fromTableName","fromColumnName","toTableName","toColumnName","indexes","newName","newTableName","create","push","save","pkValue","payload","remove","finalFilter","bulkCreate","datas","batchSize","length","cnt","Math","keys","columnsSet","Set","col","size","c","update","delete","select","limit","sort","aggregate","join","offset","groupBy","count","column","function","Count","alias","toString","toJSON"],"mappings":";;;;;;;;AAEO,IAAMA,UAAAA,GAAa;EACxBC,IAAAA,EAAM,MAAA;EACNC,IAAAA,EAAM,MAAA;EACNC,KAAAA,EAAO,OAAA;EACPC,KAAAA,EAAO;AACT;;;ACPO,IAAMC,SAAAA,GAAY;EACvBC,GAAAA,EAAK,KAAA;EACLC,UAAAA,EAAY,YAAA;EACZC,YAAAA,EAAc,cAAA;EACdC,gBAAAA,EAAkB,kBAAA;EAClBC,YAAAA,EAAc;AAChB;;;ACNO,IAAMC,QAAAA,GAAW;EACtBC,UAAAA,EAAY,YAAA;EACZC,SAAAA,EAAW;AACb;AAIO,IAAKC,iBAAAA,6BAAAA,kBAAAA,EAAAA;;;;;;;AAAAA,EAAAA,OAAAA,kBAAAA;;AAmCL,IAAKC,eAAAA,6BAAAA,gBAAAA,EAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAA,EAAAA,OAAAA,gBAAAA;;;;AC1CL,IAAMC,gBAAAA,GAAmB;EAC9BC,OAAAA,EAAS,SAAA;EACTC,QAAAA,EAAU,UAAA;EACVC,OAAAA,EAAS,SAAA;EACTC,QAAAA,EAAU,UAAA;EACVC,UAAAA,EAAY;AACd;ACDA,SAASC,YAAYC,KAAAA,EAAiB;AACpC,EAAA,MAAMC,QAAAA,GAAWD,KAAAA;AACjB,EAAA,IAAIC,QAAAA,CAASC,QAAAA,EAAUC,IAAAA,EAAMC,MAAAA,KAAW,OAAA,EAAS;AAC/C,IAAA,MAAM,IAAIC,KAAAA,CAAMJ,QAAAA,CAASC,QAAAA,CAASC,KAAKG,OAAO,CAAA;AAChD,EAAA;AACA,EAAA,MAAM,IAAID,KAAAA,CAAMJ,QAAAA,CAASK,OAAO,CAAA;AAClC;AANSP,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAQF,IAAMQ,aAAN,MAAMA;EAXb;;;AAYYC,EAAAA,MAAAA;AAEV,EAAA,WAAA,CAAYA,MAAAA,EAAsB;AAChC,IAAA,IAAA,CAAKA,MAAAA,GAASA,MAAAA;AAChB,EAAA;EAEQC,OAAAA,GAAU;AAChB,IAAA,OAAO;MACL,cAAA,EAAgB,kBAAA;MAChBC,aAAAA,EAAe,IAAA,CAAKF,OAAOG,MAAAA,IAAU;AACvC,KAAA;AACF,EAAA;AAEQC,EAAAA,GAAAA,CAAIC,IAAAA,EAAc;AACxB,IAAA,IAAIA,IAAAA,CAAKC,UAAAA,CAAW,GAAA,CAAA,EAAM;AACxBD,MAAAA,IAAAA,GAAOA,IAAAA,CAAKE,MAAM,CAAA,CAAA;AACpB,IAAA;AACA,IAAA,OAAO,CAAA,EAAG,IAAA,CAAKP,MAAAA,CAAOQ,OAAO,GAAGH,IAAAA,CAAAA,CAAAA;AAClC,EAAA;AAEA,EAAA,MAAaI,GAAAA,CAAOJ,IAAAA,EAAcV,IAAAA,GAA4B,EAAC,EAAe;AAC5E,IAAA,IAAI;AACF,MAAA,MAAMD,WAAW,MAAMgB,KAAAA,CAAMD,IAAI,IAAA,CAAKL,GAAAA,CAAIC,IAAAA,CAAAA,EAAO;AAC/CJ,QAAAA,OAAAA,EAAS,KAAKA,OAAAA,EAAO;QACrBU,MAAAA,EAAQhB;OACV,CAAA;AACA,MAAA,MAAMiB,UAAUC,KAAAA,CAAMC,KAAAA,CAAMC,KAAKC,SAAAA,CAAUtB,QAAAA,CAASC,IAAI,CAAA,CAAA;AACxD,MAAA,IAAIiB,OAAAA,CAAQhB,WAAW,SAAA,EAAW;AAChC,QAAA,MAAM,IAAIC,KAAAA,CAAMe,OAAAA,CAAQd,OAAO,CAAA;AACjC,MAAA;AACA,MAAA,OAAOc,OAAAA,CAAQjB,IAAAA;AACjB,IAAA,CAAA,CAAA,OAASH,KAAAA,EAAO;AACd,MAAA,IAAIkB,KAAAA,CAAMO,YAAAA,CAAazB,KAAAA,CAAAA,EAAQ;AAC7BD,QAAAA,WAAAA,CAAYC,KAAAA,CAAAA;AACd,MAAA;AACA0B,MAAAA,OAAAA,CAAQ1B,MAAMA,KAAAA,CAAAA;AACd,MAAA,MAAM,IAAIK,MAAM,mCAAA,CAAA;AAClB,IAAA;AACF,EAAA;AAEA,EAAA,MAAasB,IAAAA,CAAQd,IAAAA,EAAcV,IAAAA,GAA4B,EAAC,EAAe;AAC7E,IAAA,IAAI;AACF,MAAA,MAAMD,QAAAA,GAAW,MAAMgB,KAAAA,CAAMS,IAAAA,CAAK,KAAKf,GAAAA,CAAIC,IAAAA,GAAOV,IAAAA,EAAM;AACtDM,QAAAA,OAAAA,EAAS,KAAKA,OAAAA;OAChB,CAAA;AACA,MAAA,MAAMW,UAAUC,KAAAA,CAAMC,KAAAA,CAAMC,KAAKC,SAAAA,CAAUtB,QAAAA,CAASC,IAAI,CAAA,CAAA;AACxD,MAAA,IAAIiB,OAAAA,CAAQhB,WAAW,SAAA,EAAW;AAChC,QAAA,MAAM,IAAIC,KAAAA,CAAMe,OAAAA,CAAQd,OAAO,CAAA;AACjC,MAAA;AACA,MAAA,OAAOc,OAAAA,CAAQjB,IAAAA;AACjB,IAAA,CAAA,CAAA,OAASH,KAAAA,EAAO;AACd,MAAA,IAAIkB,KAAAA,CAAMO,YAAAA,CAAazB,KAAAA,CAAAA,EAAQ;AAC7BD,QAAAA,WAAAA,CAAYC,KAAAA,CAAAA;AACd,MAAA;AACA0B,MAAAA,OAAAA,CAAQ1B,MAAMA,KAAAA,CAAAA;AACd,MAAA,MAAM,IAAIK,MAAM,oCAAA,CAAA;AAClB,IAAA;AACF,EAAA;AACF;;;ACxEO,IAAMuB,eAAN,MAAMA;EAAb;;;AACSjB,EAAAA,MAAAA;AACAK,EAAAA,OAAAA;AACAa,EAAAA,OAAAA;AACAC,EAAAA,OAAAA;AAEP,EAAA,WAAA,CAAYtB,MAAAA,EAAc;AACxB,IAAA,IAAA,CAAKG,MAAAA,GAASH,MAAAA,EAAQG,MAAAA,IAAUoB,OAAAA,CAAQC,GAAAA,CAAIC,iBAAAA;AAC5C,IAAA,IAAA,CAAKjB,OAAAA,GAAUR,MAAAA,EAAQQ,OAAAA,IAAWe,OAAAA,CAAQC,GAAAA,CAAIE,iBAAAA;AAC9C,IAAA,IAAA,CAAKL,OAAAA,GAAUrB,MAAAA,EAAQqB,OAAAA,IAAWE,OAAAA,CAAQC,GAAAA,CAAIG,qBAAAA;AAC9C,IAAA,IAAA,CAAKL,OAAAA,GAAUtB,MAAAA,EAAQsB,OAAAA,IAAWC,OAAAA,CAAQC,GAAAA,CAAII,qBAAAA;AAE9C,IAAA,IAAI,CAAC,IAAA,CAAKzB,MAAAA,IAAU,CAAC,KAAKK,OAAAA,EAAS;AACjC,MAAA,MAAM,IAAIX,MAAM,mCAAA,CAAA;AAClB,IAAA;AAEA,IAAA,IAAI,CAAC,KAAKwB,OAAAA,EAAS;AACjB,MAAA,IAAA,CAAKA,OAAAA,GAAU,GAAA;AACjB,IAAA;AAEA,IAAA,IAAI,CAAC,KAAKC,OAAAA,EAAS;AACjB,MAAA,IAAA,CAAKA,OAAAA,GAAU,CAAA;AACjB,IAAA;AAEA,IAAA,IAAI,CAAC,IAAA,CAAKd,OAAAA,CAAQqB,QAAAA,CAAS,GAAA,CAAA,EAAM;AAC/B,MAAA,IAAA,CAAKrB,OAAAA,IAAW,GAAA;AAClB,IAAA;AACF,EAAA;AACF;;;AC1BO,IAAMsB,GAAAA,mBAAM,MAAA,CAAA,CAAA,GAAIC,UAAAA,KAA0CA,UAAAA,EAA9C,KAAA;AAEZ,IAAMC,EAAAA,mBAAK,MAAA,CAAA,CAAA,GAAID,UAAAA,KAAsCA,UAAAA,EAA1C,IAAA;AAEX,IAAME,EAAAA,mBAAK,MAAA,CAAA,CAACC,KAAAA,EAAeC,KAAAA,MAA4B;EAC5DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBiD,EAAAA;EAC1BK,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJkB,IAAA;AAMX,IAAMI,EAAAA,mBAAK,MAAA,CAAA,CAACL,KAAAA,EAAeC,KAAAA,MAA4B;EAC5DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBwD,GAAAA;EAC1BF,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJkB,IAAA;AAMX,IAAMM,EAAAA,mBAAK,MAAA,CAAA,CAACP,KAAAA,EAAeC,KAAAA,MAA4B;EAC5DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgByD,EAAAA;EAC1BH,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJkB,IAAA;AAMX,IAAMO,GAAAA,mBAAM,MAAA,CAAA,CAACR,KAAAA,EAAeC,KAAAA,MAA4B;EAC7DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB0D,GAAAA;EAC1BJ,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJmB,KAAA;AAMZ,IAAMQ,EAAAA,mBAAK,MAAA,CAAA,CAACT,KAAAA,EAAeC,KAAAA,MAA4B;EAC5DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB2D,EAAAA;EAC1BL,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJkB,IAAA;AAMX,IAAMS,GAAAA,mBAAM,MAAA,CAAA,CAACV,KAAAA,EAAeC,KAAAA,MAA4B;EAC7DC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB4D,GAAAA;EAC1BN,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJmB,KAAA;AAMZ,IAAMU,EAAAA,mBAAK,MAAA,CAAA,CAACX,KAAAA,EAAeY,MAAAA,MAA+B;EAC/DV,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB+D,EAAAA;EAC1BT,WAAAA,EAAaQ;AACf,CAAA,CAAA,EAJkB,IAAA;AAMX,IAAME,QAAAA,mBAAW,MAAA,CAAA,CAACd,KAAAA,EAAeC,KAAAA,MAA4B;EAClEC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBiE,QAAAA;EAC1BX,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJwB,UAAA;AAMjB,IAAMe,OAAAA,mBAAU,MAAA,CAAA,CAAChB,KAAAA,EAAeC,KAAAA,MAA4B;EACjEC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBmE,OAAAA;EAC1Bb,WAAAA,EAAaH;AACf,CAAA,CAAA,EAJuB,SAAA;AAMhB,IAAMiB,MAAAA,mBAAS,MAAA,CAAA,CAAClB,KAAAA,EAAemB,OAAAA,MAAiC;EACrEjB,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBsE,KAAAA;EAC1BhB,WAAAA,EAAae;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAME,UAAAA,mBAAa,MAAA,CAAA,CAACrB,KAAAA,EAAemB,OAAAA,MAAiC;EACzEjB,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBwE,QAAAA;EAC1BlB,WAAAA,EAAae;AACf,CAAA,CAAA,EAJ0B,YAAA;AAMnB,IAAMI,MAAAA,mBAAS,MAAA,CAAA,CAACvB,KAAAA,EAAeY,MAAAA,MAA+B;EACnEV,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB0E,KAAAA;EAC1BpB,WAAAA,EAAaQ;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAMa,IAAAA,mBAAO,MAAA,CAAA,CAACzB,KAAAA,EAAemB,OAAAA,MAAiC;EACnEjB,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB4E,IAAAA;EAC1BtB,WAAAA,EAAae;AACf,CAAA,CAAA,EAJoB,MAAA;AAMb,IAAMQ,QAAAA,mBAAW,MAAA,CAAA,CAAC3B,KAAAA,EAAemB,OAAAA,MAAiC;EACvEjB,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB8E,OAAAA;EAC1BxB,WAAAA,EAAae;AACf,CAAA,CAAA,EAJwB,UAAA;AAMjB,IAAMU,OAAAA,2BAAW7B,KAAAA,MAA+B;EACrDE,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBgF;AAC5B,CAAA,CAAA,EAHuB,SAAA;AAKhB,IAAMC,WAAAA,2BAAe/B,KAAAA,MAA+B;EACzDE,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBkF;AAC5B,CAAA,CAAA,EAH2B,aAAA;AAKpB,IAAMC,OAAAA,mBAAU,MAAA,CAAA,CAACjC,KAAAA,EAAekC,GAAAA,EAAUC,GAAAA,MAA0B;EACzEjC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBsF,OAAAA;EAC1BhC,WAAAA,EAAa;AAAC8B,IAAAA,GAAAA;AAAKC,IAAAA;;AACrB,CAAA,CAAA,EAJuB,SAAA;AAOhB,IAAME,MAAAA,mBAAS,MAAA,CAAA,CAACrC,KAAAA,EAAesC,UAAAA,MAAoC;EACxEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBiD,EAAAA;EAC1BwC,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAME,MAAAA,mBAAS,MAAA,CAAA,CAACxC,KAAAA,EAAesC,UAAAA,MAAoC;EACxEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBwD,GAAAA;EAC1BiC,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAMG,MAAAA,mBAAS,MAAA,CAAA,CAACzC,KAAAA,EAAesC,UAAAA,MAAoC;EACxEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgByD,EAAAA;EAC1BgC,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAMI,OAAAA,mBAAU,MAAA,CAAA,CAAC1C,KAAAA,EAAesC,UAAAA,MAAoC;EACzEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB0D,GAAAA;EAC1B+B,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJuB,SAAA;AAMhB,IAAMK,MAAAA,mBAAS,MAAA,CAAA,CAAC3C,KAAAA,EAAesC,UAAAA,MAAoC;EACxEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB2D,EAAAA;EAC1B8B,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJsB,QAAA;AAMf,IAAMM,OAAAA,mBAAU,MAAA,CAAA,CAAC5C,KAAAA,EAAesC,UAAAA,MAAoC;EACzEpC,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB4D,GAAAA;EAC1B6B,WAAAA,EAAaD;AACf,CAAA,CAAA,EAJuB,SAAA;AAOhB,IAAMO,UAAAA,mBAAa,MAAA,CAAA,CAAC7C,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EAChG5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBiG,UAAAA;EAC1B3C,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EAL0B,YAAA;AAOnB,IAAMG,mBAAAA,mBAAsB,MAAA,CAAA,CAACjD,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EACzG5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBoG,kBAAAA;EAC1B9C,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EALmC,qBAAA;AAO5B,IAAMK,eAAAA,mBAAkB,MAAA,CAAA,CAACnD,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EACrG5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBsG,cAAAA;EAC1BhD,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EAL+B,iBAAA;AAOxB,IAAMO,wBAAAA,mBAA2B,MAAA,CAAA,CAACrD,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EAC9G5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBwG,sBAAAA;EAC1BlD,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EALwC,0BAAA;AAOjC,IAAMS,sBAAAA,mBAAyB,MAAA,CAAA,CAACvD,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EAC5G5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB0G,oBAAAA;EAC1BpD,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EALsC,wBAAA;AAO/B,IAAMW,+BAAAA,mBAAkC,MAAA,CAAA,CAACzD,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EACrH5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB4G,4BAAAA;EAC1BtD,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EAL+C,iCAAA;AAOxC,IAAMa,kBAAAA,mBAAqB,MAAA,CAAA,CAAC3D,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EACxG5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgB8G,iBAAAA;EAC1BxD,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EALkC,oBAAA;AAO3B,IAAMe,sBAAAA,mBAAyB,MAAA,CAAA,CAAC7D,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EAC5G5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBgH,oBAAAA;EAC1B1D,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EALsC,wBAAA;AAO/B,IAAMiB,eAAAA,mBAAkB,MAAA,CAAA,CAAC/D,KAAAA,EAAeC,KAAAA,EAAY6C,OAAAA,MAA4C;EACrG5C,UAAAA,EAAYF,KAAAA;AACZG,EAAAA,QAAAA,EAAUrD,eAAAA,CAAgBkH,cAAAA;EAC1B5D,WAAAA,EAAaH,KAAAA;EACb+C,gBAAAA,EAAkBF;AACpB,CAAA,CAAA,EAL+B,iBAAA;AAQxB,IAAMmB,KAAAA,mBAAQ,MAAA,CAAA,CAAChE,KAAAA,KAAeA,KAAAA,EAAhB,OAAA;AAGd,SAASiE,cAAcC,MAAAA,EAAqD;AACjF,EAAA,IAAIA,WAAWC,MAAAA,EAAW;AACxB,IAAA,OAAOA,MAAAA;AACT,EAAA;AACA,EAAA,IAAI,CAACC,KAAAA,CAAMC,OAAAA,CAAQH,MAAAA,CAAAA,EAAS;AAC1B,IAAA,OAAOrE,EAAAA,CAAGF,GAAAA,CAAIuE,MAAAA,CAAAA,CAAAA;EAChB,CAAA,MAAA,IAAW,CAACA,OAAOI,KAAAA,CAAM,CAACC,SAASH,KAAAA,CAAMC,OAAAA,CAAQE,IAAAA,CAAAA,CAAAA,EAAQ;AACvD,IAAA,OAAO1E,GAAGqE,MAAAA,CAAAA;EACZ,CAAA,MAAO;AACL,IAAA,OAAOA,MAAAA;AACT,EAAA;AACF;AAXgBD,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;;;AC9MT,IAAMO,aAAN,MAAMA;EALb;;;AAMUC,EAAAA,MAAAA;EAER,WAAA,CAAY5G,MAAAA,GAAuB,IAAIoB,YAAAA,EAAAA,EAAgB;AACrD,IAAA,IAAA,CAAKwF,MAAAA,GAAS,IAAI7G,UAAAA,CAAWC,MAAAA,CAAAA;AAC/B,EAAA;AAEA,EAAA,MAAM6G,WAAWlH,IAAAA,EAA+B;AAC9C,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,WAAWxB,IAAAA,CAAAA;AAChD,EAAA;AAEA,EAAA,MAAMmH,UAAUnH,IAAAA,EAA+B;AAC7C,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,eAAexB,IAAAA,CAAAA;AACpD,EAAA;EAEA,MAAMoH,kBAAAA,CAAmBC,IAAYrH,IAAAA,EAA+B;AAClE,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,KAAU,CAAA,QAAA,EAAW6F,EAAAA,IAAMrH,IAAAA,CAAAA;AACtD,EAAA;EAEA,MAAMsH,QAAAA,CAAStH,MAAgBuH,KAAAA,EAA2B;AACxDvH,IAAAA,IAAAA,CAAKwH,KAAAA,CAAMd,MAAAA,GAASD,aAAAA,CAAczG,IAAAA,CAAKwH,MAAMd,MAAM,CAAA;AACnD,IAAA,MAAM3G,QAAAA,GAAW,MAAM,IAAA,CAAKkH,MAAAA,CAAOzF,KAAU,QAAA,EAAU;MAAEiG,GAAAA,EAAKzH;KAAK,CAAA;AACnE,IAAA,IAAIuH,UAAUZ,MAAAA,EAAW;AACvB,MAAA,OAAO,IAAIY,MAAMxH,QAAAA,CAAAA;AACnB,IAAA;AACA,IAAA,OAAOA,QAAAA;AACT,EAAA;EAEA,MAAM2H,SAAAA,CAAU1H,MAAgBuH,KAAAA,EAA2B;AACzDvH,IAAAA,IAAAA,CAAKwH,KAAAA,CAAMd,MAAAA,GAASD,aAAAA,CAAczG,IAAAA,CAAKwH,MAAMd,MAAM,CAAA;AACnD,IAAA,MAAM3G,QAAAA,GAAW,MAAM,IAAA,CAAKkH,MAAAA,CAAOzF,KAAY,QAAA,EAAU;MAAEmG,IAAAA,EAAM3H;KAAK,CAAA;AACtE,IAAA,IAAIuH,UAAUZ,MAAAA,EAAW;AAIvB,MAAA,OAAO5G,SAAS6H,GAAAA,CAAI,CAACb,SAAc,IAAIQ,KAAAA,CAAMR,IAAAA,CAAAA,CAAAA;AAC/C,IAAA;AACA,IAAA,OAAOhH,QAAAA;AACT,EAAA;AAEA,EAAA,MAAM8H,WAAW7H,IAAAA,EAA+B;AAC9C,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,WAAWxB,IAAAA,CAAAA;AAChD,EAAA;AAEA,EAAA,MAAM8H,WAAW9H,IAAAA,EAAmC;AAClD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,WAAWxB,IAAAA,CAAAA;AAChD,EAAA;AACF;;;ACnCO,IAAM+H,cAAN,MAAMA;EAjBb;;;AAkBUd,EAAAA,MAAAA;EAER,WAAA,CAAY5G,MAAAA,GAAuB,IAAIoB,YAAAA,EAAAA,EAAgB;AACrD,IAAA,IAAA,CAAKwF,MAAAA,GAAS,IAAI7G,UAAAA,CAAWC,MAAAA,CAAAA;AAC/B,EAAA;AAEA,EAAA,MAAM2H,YAAYhI,IAAAA,EAAoD;AACpE,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAA0B,iBAAiBxB,IAAAA,CAAAA;AACtE,EAAA;AAEA,EAAA,MAAMiI,UAAUjI,IAAAA,EAAkC;AAChD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,eAAexB,IAAAA,CAAAA;AACpD,EAAA;AAEA,EAAA,MAAMkI,YAAYlI,IAAAA,EAAoC;AACpD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,iBAAiBxB,IAAAA,CAAAA;AACtD,EAAA;AAEA,EAAA,MAAMmI,cAAcnI,IAAAA,EAAsC;AACxD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,mBAAmBxB,IAAAA,CAAAA;AACxD,EAAA;AAEA,EAAA,MAAMoI,UAAUpI,IAAAA,EAAuC;AACrD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,qBAAqBxB,IAAAA,CAAAA;AAC1D,EAAA;AAEA,EAAA,MAAMqI,WAAWrI,IAAAA,EAAwC;AACvD,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,sBAAsBxB,IAAAA,CAAAA;AAC3D,EAAA;AAEA,EAAA,MAAMsI,aAAatI,IAAAA,EAA0C;AAC3D,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOzF,IAAAA,CAAU,wBAAwBxB,IAAAA,CAAAA;AAC7D,EAAA;AAEA,EAAA,MAAMuI,eAAevI,IAAAA,EAAuD;AAC1E,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOnG,GAAAA,CAAyB,iBAAiBd,IAAAA,CAAAA;AACrE,EAAA;AAEA,EAAA,MAAMwI,aAAaxI,IAAAA,EAAmD;AACpE,IAAA,OAAO,MAAM,IAAA,CAAKiH,MAAAA,CAAOnG,GAAAA,CAAuB,eAAed,IAAAA,CAAAA;AACjE,EAAA;AACF;;;ACvDO,IAAMyI,kBAAN,MAAMA;EAJb;;;AAKUpI,EAAAA,MAAAA;AACAqI,EAAAA,YAAAA;AACAC,EAAAA,WAAAA;EAER,WAAA,CAAYtI,MAAAA,GAAuB,IAAIoB,YAAAA,EAAAA,EAAgB;AACrD,IAAA,IAAA,CAAKpB,MAAAA,GAASA,MAAAA;AAChB,EAAA;AAEA,EAAA,IAAIuI,KAAAA,GAAqB;AACvB,IAAA,IAAI,CAAC,KAAKF,YAAAA,EAAc;AACtB,MAAA,IAAA,CAAKA,YAAAA,GAAe,IAAIX,WAAAA,CAAY,IAAA,CAAK1H,MAAM,CAAA;AACjD,IAAA;AACA,IAAA,OAAO,IAAA,CAAKqI,YAAAA;AACd,EAAA;AAEA,EAAA,IAAI1I,IAAAA,GAAmB;AACrB,IAAA,IAAI,CAAC,KAAK2I,WAAAA,EAAa;AACrB,MAAA,IAAA,CAAKA,WAAAA,GAAc,IAAI3B,UAAAA,CAAW,IAAA,CAAK3G,MAAM,CAAA;AAC/C,IAAA;AACA,IAAA,OAAO,IAAA,CAAKsI,WAAAA;AACd,EAAA;AACF;;;ACxBO,IAAME,aAAAA,GAAgB;AAC3BC,EAAAA,MAAAA,0BAASC,SAAAA,MAAmC;IAAED,MAAAA,EAAQC;GAAU,CAAA,EAAxD,QAAA,CAAA;EACRC,OAAAA,kBAAS,MAAA,CAAA,CAACC,WAAmBC,KAAAA,MAAgC;AAC3DF,IAAAA,OAAAA,EAASC,aAAaC,KAAAA,GAAQ;AAACD,MAAAA,SAAAA;AAAWC,MAAAA;AAAS,KAAA,GAAA;GACrD,CAAA,EAFS,SAAA,CAAA;EAGTC,IAAAA,EAAM,MAAA;EACNC,OAAAA,EAAS,SAAA;EACTC,UAAAA,EAAY,YAAA;EACZC,MAAAA,EAAQ,QAAA;EACRC,QAAAA,EAAU,UAAA;EACVC,SAAAA,EAAW,WAAA;EACXC,IAAAA,EAAM,MAAA;EACNC,OAAAA,EAAS,SAAA;EACTC,KAAAA,kBAAO,MAAA,CAAA,CAACV,WAAmBC,KAAAA,MAA8B;AAAES,IAAAA,KAAAA,EAAOV,aAAaC,KAAAA,GAAQ;AAACD,MAAAA,SAAAA;AAAWC,MAAAA;AAAS,KAAA,GAAA;GAAK,CAAA,EAA1G,OAAA,CAAA;EACPU,IAAAA,EAAM,MAAA;EACNC,IAAAA,kBAAM,MAAA,CAAA,CAACC,MAAcC,QAAAA,MAAkC;IAAEF,IAAAA,EAAM;AAAEC,MAAAA,IAAAA;AAAMC,MAAAA;AAAS;GAAE,CAAA,EAA5E,MAAA,CAAA;EACNC,IAAAA,EAAM;AACR;AAEO,IAAMC,cAAAA,GAAiB;EAC5Bb,OAAAA,EAAS,SAAA;AACTN,EAAAA,MAAAA,0BAASC,SAAAA,MAAmC;IAAED,MAAAA,EAAQC;GAAU,CAAA,EAAxD,QAAA,CAAA;EACRI,IAAAA,EAAM,MAAA;EACNO,OAAAA,EAAS,SAAA;EACTH,QAAAA,EAAU,UAAA;EACVC,SAAAA,EAAW,WAAA;EACXC,IAAAA,EAAM,MAAA;EACNO,IAAAA,EAAM,MAAA;EACNJ,IAAAA,EAAM,MAAA;EACNN,MAAAA,EAAQ,QAAA;AAERY,EAAAA,MAAAA,0BAASC,UAAAA,MAAoC;IAAED,MAAAA,EAAQC;GAAW,CAAA,EAA1D,QAAA,CAAA;AACRvD,EAAAA,KAAAA,0BAAQwD,QAAAA,MAA8C;IAAExD,KAAAA,EAAOwD;GAAS,CAAA,EAAjE,OAAA,CAAA;EACPP,IAAAA,kBAAM,MAAA,CAAA,CAACC,MAAcC,QAAAA,MAAkC;IAAEF,IAAAA,EAAM;AAAEC,MAAAA,IAAAA;AAAMC,MAAAA;AAAS;GAAE,CAAA,EAA5E,MAAA,CAAA;EACNJ,KAAAA,kBAAO,MAAA,CAAA,CAACV,WAAmBC,KAAAA,MAA8B;AAAES,IAAAA,KAAAA,EAAOV,aAAaC,KAAAA,GAAQ;AAACD,MAAAA,SAAAA;AAAWC,MAAAA;AAAS,KAAA,GAAA;GAAK,CAAA,EAA1G,OAAA,CAAA;EACPF,OAAAA,kBAAS,MAAA,CAAA,CAACC,WAAmBC,KAAAA,MAAgC;AAC3DF,IAAAA,OAAAA,EAASC,aAAaC,KAAAA,GAAQ;AAACD,MAAAA,SAAAA;AAAWC,MAAAA;AAAS,KAAA,GAAA;GACrD,CAAA,EAFS,SAAA;AAGX;;;AC7BO,IAAemB,QAAf,MAAeA;EAXtB;;;EAYEP,IAAAA,GAAe,EAAA;EACfQ,WAAAA,GAAsB,EAAA;EACtBC,WAAAA,GAAsB,EAAA;AACtBC,EAAAA,UAAAA;EACAC,YAAAA,GAAwB,KAAA;EACxBC,UAAAA,GAAsB,KAAA;EACtBC,aAAAA,GAAyB,KAAA;AACzBC,EAAAA,OAAAA;AACAC,EAAAA,aAAAA;EAEA,WAAA,CAAYL,UAAAA,EAAkCnF,OAAAA,GAAwB,EAAC,EAAG;AACxE,IAAA,IAAA,CAAKmF,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKV,IAAAA,GAAOzE,OAAAA,CAAQyE,IAAAA,EAAMgB,WAAAA,EAAAA,IAAiB,EAAA;AAC3C,IAAA,IAAA,CAAKR,WAAAA,GAAcjF,QAAQiF,WAAAA,IAAe,EAAA;AAC1C,IAAA,IAAA,CAAKC,WAAAA,GAAclF,QAAQkF,WAAAA,IAAe,EAAA;AAC1C,IAAA,IAAA,CAAKE,YAAAA,GAAepF,QAAQoF,YAAAA,IAAgB,KAAA;AAC5C,IAAA,IAAA,CAAKC,UAAAA,GAAarF,QAAQqF,UAAAA,IAAc,KAAA;AACxC,IAAA,IAAA,CAAKC,aAAAA,GAAgBtF,QAAQsF,aAAAA,IAAiB,KAAA;AAC9C,IAAA,IAAA,CAAKC,UAAUvF,OAAAA,CAAQuF,OAAAA;AACvB,IAAA,IAAA,CAAKC,gBAAgBxF,OAAAA,CAAQwF,aAAAA;AAC/B,EAAA;EAEAE,mBAAAA,GAAuC;AACrC,IAAA,OAAO;AACLjB,MAAAA,IAAAA,EAAM,IAAA,CAAKA,IAAAA;AACXQ,MAAAA,WAAAA,EAAa,IAAA,CAAKA,WAAAA;AAClBE,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBD,MAAAA,WAAAA,EAAa,IAAA,CAAKA,WAAAA;AAClBE,MAAAA,YAAAA,EAAc,IAAA,CAAKA,YAAAA;AACnBC,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBC,MAAAA,aAAAA,EAAe,IAAA,CAAKA,aAAAA;AACpBC,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;AACdC,MAAAA,aAAAA,EAAe,IAAA,CAAKA;AACtB,KAAA;AACF,EAAA;AACF;AAEO,IAAMG,eAAAA,GAAN,cAA8BX,KAAAA,CAAAA;EAjDrC;;;AAkDEY,EAAAA,SAAAA;AACAxI,EAAAA,UAAAA;AACAyI,EAAAA,QAAAA;AACAC,EAAAA,QAAAA;AAEA,EAAA,WAAA,CACEX,UAAAA,EACAS,SAAAA,EACAxI,UAAAA,EACA4C,OAAAA,GAAkC,EAAC,EACnC;AACA,IAAA,KAAA,CAAMmF,YAAYnF,OAAAA,CAAAA;AAClB,IAAA,IAAA,CAAK4F,SAAAA,GAAYA,SAAAA;AACjB,IAAA,IAAA,CAAKxI,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKyI,QAAAA,GAAW7F,OAAAA,CAAQ6F,QAAAA,IAAY5L,gBAAAA,CAAiBC,OAAAA;AACrD,IAAA,IAAA,CAAK4L,QAAAA,GAAW9F,OAAAA,CAAQ8F,QAAAA,IAAY7L,gBAAAA,CAAiBC,OAAAA;AACvD,EAAA;AACF;AAEO,IAAM6L,WAAAA,GAAN,cAA0Bf,KAAAA,CAAAA;EArEjC;;;EAsEE,WAAA,CAAYtB,SAAAA,EAAmB1D,OAAAA,GAAwB,EAAC,EAAG;AACzD,IAAA,KAAA,CAAM4E,cAAAA,CAAenB,MAAAA,CAAOC,SAAAA,CAAAA,EAAY1D,OAAAA,CAAAA;AAC1C,EAAA;AACF;AAEO,IAAMgG,SAAAA,GAAN,cAAwBhB,KAAAA,CAAAA;EA3E/B;;;EA4EE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAed,MAAM9D,OAAAA,CAAAA;AAC7B,EAAA;AACF;AAEO,IAAMiG,YAAAA,GAAN,cAA2BjB,KAAAA,CAAAA;EAjFlC;;;EAkFE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeb,SAAS/D,OAAAA,CAAAA;AAChC,EAAA;AACF;AAEO,IAAMkG,YAAAA,GAAN,cAA2BlB,KAAAA,CAAAA;EAvFlC;;;EAwFE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeP,SAASrE,OAAAA,CAAAA;AAChC,EAAA;AACF;AAEO,IAAMmG,aAAAA,GAAN,cAA4BnB,KAAAA,CAAAA;EA7FnC;;;EA8FE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeV,UAAUlE,OAAAA,CAAAA;AACjC,EAAA;AACF;AAEO,IAAMoG,cAAAA,GAAN,cAA6BpB,KAAAA,CAAAA;EAnGpC;;;EAoGE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeT,WAAWnE,OAAAA,CAAAA;AAClC,EAAA;AACF;AAEO,IAAMqG,SAAAA,GAAN,cAAwBrB,KAAAA,CAAAA;EAzG/B;;;EA0GE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeR,MAAMpE,OAAAA,CAAAA;AAC7B,EAAA;AACF;AAEO,IAAMsG,SAAAA,GAAN,cAAwBtB,KAAAA,CAAAA;EA/G/B;;;EAgHE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeD,MAAM3E,OAAAA,CAAAA;AAC7B,EAAA;AACF;AAEO,IAAMuG,SAAAA,GAAN,cAAwBvB,KAAAA,CAAAA;EArH/B;;;EAsHE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeL,MAAMvE,OAAAA,CAAAA;AAC7B,EAAA;AACF;AAEO,IAAMwG,WAAAA,GAAN,cAA0BxB,KAAAA,CAAAA;EA3HjC;;;EA4HE,WAAA,CAAYF,UAAAA,EAAoB9E,OAAAA,GAAwB,EAAC,EAAG;AAC1D,IAAA,KAAA,CAAM4E,cAAAA,CAAeC,MAAAA,CAAOC,UAAAA,CAAAA,EAAa9E,OAAAA,CAAAA;AAC3C,EAAA;AACF;AAEO,IAAMyG,UAAAA,GAAN,cAAyBzB,KAAAA,CAAAA;EAjIhC;;;EAkIE,WAAA,CAAYD,QAAAA,EAA+B/E,OAAAA,GAAwB,EAAC,EAAG;AACrE,IAAA,KAAA,CAAM4E,cAAAA,CAAerD,KAAAA,CAAMwD,QAAAA,CAAAA,EAAW/E,OAAAA,CAAAA;AACxC,EAAA;AACF;AAEO,IAAM0G,SAAAA,GAAN,cAAwB1B,KAAAA,CAAAA;EAvI/B;;;AAwIE,EAAA,WAAA,CAAYP,IAAAA,EAAcC,QAAAA,EAAoB1E,OAAAA,GAAwB,EAAC,EAAG;AACxE,IAAA,KAAA,CAAM4E,cAAAA,CAAeJ,IAAAA,CAAKC,IAAAA,EAAMC,QAAAA,GAAW1E,OAAAA,CAAAA;AAC7C,EAAA;AACF;AAEO,IAAM2G,UAAAA,GAAN,cAAyB3B,KAAAA,CAAAA;EA7IhC;;;AA8IE,EAAA,WAAA,CAAYpB,SAAAA,EAAmBC,KAAAA,EAAe7D,OAAAA,GAAwB,EAAC,EAAG;AACxE,IAAA,KAAA,CAAM4E,cAAAA,CAAeN,KAAAA,CAAMV,SAAAA,EAAWC,KAAAA,GAAQ7D,OAAAA,CAAAA;AAChD,EAAA;AACF;AAEO,IAAM4G,YAAAA,GAAN,cAA2B5B,KAAAA,CAAAA;EAnJlC;;;AAoJE,EAAA,WAAA,CAAYpB,SAAAA,EAAmBC,KAAAA,EAAe7D,OAAAA,GAAwB,EAAC,EAAG;AACxE,IAAA,KAAA,CAAM4E,cAAAA,CAAejB,OAAAA,CAAQC,SAAAA,EAAWC,KAAAA,GAAQ7D,OAAAA,CAAAA;AAClD,EAAA;AACF;AAEO,IAAM6G,WAAAA,GAAN,cAA0B7B,KAAAA,CAAAA;EAzJjC;;;EA0JE,WAAA,CAAYhF,OAAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM4E,cAAAA,CAAeX,QAAQjE,OAAAA,CAAAA;AAC/B,EAAA;AACF;;;ACvIA,IAAM8G,UAAAA,GAAaC,OAAO,QAAA,CAAA;AAC1B,IAAMC,cAAAA,GAAiBD,OAAO,WAAA,CAAA;AAC9B,IAAME,sBAAAA,GAAyBF,OAAO,kBAAA,CAAA;AACtC,IAAMG,eAAAA,GAAkBH,OAAO,aAAA,CAAA;AAC/B,IAAMI,WAAAA,GAAcJ,OAAO,SAAA,CAAA;AAGpB,SAASK,MAAAA,CAAOpH,OAAAA,GAA+B,EAAC,EAAC;AACtD,EAAA,OAAO,SAAUqH,QAAaC,WAAAA,EAAmB;AAC/C,IAAA,MAAMC,SAASC,OAAAA,CAAQC,WAAAA,CAAYX,YAAYO,MAAAA,CAAO,WAAW,KAAK,EAAC;AAEvE,IAAA,MAAMK,SAAAA,GAAY1H,OAAAA,CAAQyE,IAAAA,IAAQ6C,WAAAA,CAAY7B,WAAAA,EAAW;AACzD,IAAA,MAAMN,UAAAA,GAAanF,OAAAA,CAAQ2H,IAAAA,IAAQ/C,cAAAA,CAAed,IAAAA;AAElD,IAAA,MAAM5G,KAAAA,GAAQ,IAAK,cAAc8H,KAAAA,CAAAA;MAC/B,WAAA,GAAc;AACZ,QAAA,KAAA,CAAMG,UAAAA,EAAY;UAChBV,IAAAA,EAAMiD,SAAAA;AACNzC,UAAAA,WAAAA,EAAajF,OAAAA,CAAQiF,WAAAA;AACrBC,UAAAA,WAAAA,EAAalF,OAAAA,CAAQkF,WAAAA;AACrBE,UAAAA,YAAAA,EAAcpF,OAAAA,CAAQ4H,OAAAA;AACtBvC,UAAAA,UAAAA,EAAYrF,OAAAA,CAAQ6H,QAAAA;AACpBvC,UAAAA,aAAAA,EAAetF,OAAAA,CAAQsF,aAAAA;AACvBC,UAAAA,OAAAA,EAASvF,OAAAA,CAAQuF,OAAAA;AACjBC,UAAAA,aAAAA,EAAexF,OAAAA,CAAQwF;SACzB,CAAA;AACF,MAAA;KACF,EAAA;AAEA+B,IAAAA,MAAAA,CAAOD,WAAAA,CAAAA,GAAepK,KAAAA;AACtBsK,IAAAA,OAAAA,CAAQM,cAAAA,CAAehB,UAAAA,EAAYS,MAAAA,EAAQF,MAAAA,CAAO,WAAW,CAAA;AAC/D,EAAA,CAAA;AACF;AAzBgBD,MAAAA,CAAAA,MAAAA,EAAAA,QAAAA,CAAAA;AA4BT,SAASW,YAAY7C,WAAAA,EAAmB;AAC7C,EAAA,OAAO,SAAUmC,MAAAA,EAAW;AAC1BG,IAAAA,OAAAA,CAAQM,cAAAA,CAAeZ,eAAAA,EAAiBhC,WAAAA,EAAamC,MAAAA,CAAAA;AACvD,EAAA,CAAA;AACF;AAJgBU,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAOT,SAASC,UAAAA,CACdpC,SAAAA,EACAxI,UAAAA,EACA4C,OAAAA,GASI,EAAC,EAAC;AAEN,EAAA,OAAO,SAAUqH,QAAaC,WAAAA,EAAmB;AAC/C,IAAA,MAAMC,SAASC,OAAAA,CAAQC,WAAAA,CAAYX,YAAYO,MAAAA,CAAO,WAAW,KAAK,EAAC;AAEvE,IAAA,MAAMnK,KAAAA,GAAQ,IAAIyI,eAAAA,CAAgB3F,OAAAA,CAAQ2H,QAAQ/C,cAAAA,CAAeb,OAAAA,EAAS6B,WAAWxI,UAAAA,EAAY;AAC/F6H,MAAAA,WAAAA,EAAajF,OAAAA,CAAQiF,WAAAA;AACrBC,MAAAA,WAAAA,EAAalF,OAAAA,CAAQkF,WAAAA;AACrBG,MAAAA,UAAAA,EAAYrF,OAAAA,CAAQ6H,QAAAA;AACpBtC,MAAAA,OAAAA,EAASvF,OAAAA,CAAQuF,OAAAA;AACjBM,MAAAA,QAAAA,EAAU7F,OAAAA,CAAQ6F,QAAAA;AAClBC,MAAAA,QAAAA,EAAU9F,OAAAA,CAAQ8F;KACpB,CAAA;AACA5I,IAAAA,KAAAA,CAAMuH,IAAAA,GAAOzE,OAAAA,CAAQyE,IAAAA,IAAQ6C,WAAAA,CAAY7B,WAAAA,EAAW;AAEpD8B,IAAAA,MAAAA,CAAOD,WAAAA,CAAAA,GAAepK,KAAAA;AACtBsK,IAAAA,OAAAA,CAAQM,cAAAA,CAAehB,UAAAA,EAAYS,MAAAA,EAAQF,MAAAA,CAAO,WAAW,CAAA;AAC/D,EAAA,CAAA;AACF;AA9BgBW,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAgCT,IAAMC,YAAN,MAAMA;EAhGb;;;AAiGUC,EAAAA,OAAAA;AACAC,EAAAA,MAAAA,GAA8B,EAAC;EAEvC,WAAA,CAAYxN,IAAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,MAAM4M,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAG7B,IAAA,MAAMC,sBAA8C,EAAC;AACrD,IAAA,KAAA,MAAW,CAACC,YAAAA,EAAcpL,KAAAA,KAAUqL,MAAAA,CAAOC,OAAAA,CAAQjB,MAAAA,CAAAA,EAAS;AAC1Dc,MAAAA,mBAAAA,CAAoBnL,KAAAA,CAAMuH,IAAI,CAAA,GAAI6D,YAAAA;AACpC,IAAA;AAEA,IAAA,KAAA,MAAW,CAACG,GAAAA,EAAKtL,KAAAA,KAAUoL,MAAAA,CAAOC,OAAAA,CAAQ7N,IAAAA,CAAAA,EAAO;AAE/C,MAAA,IAAI8N,OAAOlB,MAAAA,EAAQ;AAChB,QAAA,IAAA,CAAakB,GAAAA,CAAAA,GAAOtL,KAAAA;AACvB,MAAA,CAAA,MAAA,IAESsL,OAAOJ,mBAAAA,EAAqB;AAClC,QAAA,IAAA,CAAaA,mBAAAA,CAAoBI,GAAAA,CAAI,CAAA,GAAItL,KAAAA;MAC5C,CAAA,MAEK;AACH,QAAA,IAAA,CAAKgL,MAAAA,CAAOM,GAAAA,CAAAA,GAAOtL,KAAAA;AACrB,MAAA;AACF,IAAA;AACF,EAAA;;AAGA,EAAA,OAAiBuL,YAAAA,GAAuB;AACtC,IAAA,MAAM9C,SAAAA,GAAY4B,OAAAA,CAAQC,WAAAA,CAAYT,cAAAA,EAAgB,IAAI,CAAA;AAC1D,IAAA,IAAIpB,WAAW,OAAOA,SAAAA;AAGtB,IAAA,IAAI,WAAA,IAAe,IAAA,IAAQ,OAAQ,IAAA,CAAaA,cAAc,QAAA,EAAU;AACtE,MAAA,OAAQ,IAAA,CAAaA,SAAAA;AACvB,IAAA;AAEA,IAAA,OAAO,IAAA,CAAKnB,KAAKgB,WAAAA,EAAW;AAC9B,EAAA;AAEA,EAAA,OAAiBkD,cAAAA,GAAgC;AAC/C,IAAA,MAAM1D,WAAAA,GAAcuC,OAAAA,CAAQC,WAAAA,CAAYR,sBAAAA,EAAwB,IAAI,CAAA;AACpE,IAAA,IAAIhC,aAAa,OAAOA,WAAAA;AAGxB,IAAA,IAAI,aAAA,IAAiB,IAAA,IAAQ,OAAQ,IAAA,CAAaA,gBAAgB,QAAA,EAAU;AAC1E,MAAA,OAAQ,IAAA,CAAaA,WAAAA;AACvB,IAAA;AAEA,IAAA,OAAO,IAAA;AACT,EAAA;AAEA,EAAA,OAAc2D,cAAAA,GAAyB;AACrC,IAAA,MAAMC,mBAAAA,GAAsBrB,OAAAA,CAAQC,WAAAA,CAAYP,eAAAA,EAAiB,IAAI,CAAA;AACrE,IAAA,IAAI2B,qBAAqB,OAAOA,mBAAAA;AAGhC,IAAA,IAAI,aAAA,IAAiB,IAAA,IAAQ,OAAQ,IAAA,CAAa3D,gBAAgB,QAAA,EAAU;AAC1E,MAAA,OAAQ,IAAA,CAAaA,WAAAA;AACvB,IAAA;AAEA,IAAA,OAAO,EAAA;AACT,EAAA;AAEA,EAAA,OAAiB4D,UAAAA,GAAiC;AAChD,IAAA,OAAOtB,OAAAA,CAAQC,WAAAA,CAAYN,WAAAA,EAAa,IAAI,KAAK,EAAA;AACnD,EAAA;AAEA,EAAA,OAAiBiB,SAAAA,GAAmC;AAClD,IAAA,MAAMb,SAASC,OAAAA,CAAQC,WAAAA,CAAYX,UAAAA,EAAY,IAAI,KAAK,EAAC;AAGzD,IAAA,IAAIiC,aAAAA,GAAgB,KAAA;AACpB,IAAA,KAAA,MAAW7L,KAAAA,IAASqL,MAAAA,CAAOzK,MAAAA,CAAOyJ,MAAAA,CAAAA,EAAoB;AACpD,MAAA,IAAIrK,MAAMkI,YAAAA,EAAc;AACtB2D,QAAAA,aAAAA,GAAgB,IAAA;AAChB7L,QAAAA,KAAAA,CAAMmI,UAAAA,GAAa,KAAA;AACnB,QAAA;AACF,MAAA;AACF,IAAA;AAGA,IAAA,IAAI,CAAC0D,aAAAA,IAAiB,EAAE,IAAA,IAAQxB,MAAAA,CAAAA,EAAS;AACvCA,MAAAA,MAAAA,CAAO,IAAA,CAAA,GAAQ,IAAItB,YAAAA,CAAa;QAC9Bb,YAAAA,EAAc,IAAA;QACdC,UAAAA,EAAY,KAAA;QACZC,aAAAA,EAAe,IAAA;QACfJ,WAAAA,EAAa;OACf,CAAA;AACAqC,MAAAA,MAAAA,CAAO,IAAA,EAAM9C,IAAAA,GAAO,IAAA;AACtB,IAAA;AAEA,IAAA,OAAO8C,MAAAA;AACT,EAAA;AAEA,EAAA,OAAiByB,iBAAAA,GAA4B;AAC3C,IAAA,MAAMzB,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,KAAA,MAAW,CAACK,GAAAA,EAAKvL,KAAAA,KAAUqL,MAAAA,CAAOC,OAAAA,CAAQjB,MAAAA,CAAAA,EAAS;AACjD,MAAA,IAAIrK,MAAMkI,YAAAA,EAAc;AACtB,QAAA,OAAOlI,KAAAA,CAAMuH,IAAAA;AACf,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAA;AACT,EAAA;AAEA,EAAA,OAAiBwE,eAAAA,GAAqC;AACpD,IAAA,MAAM1B,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,OAAOG,MAAAA,CAAOzK,OAAOyJ,MAAAA,CAAAA,CAAQlG,OAAO,CAAC6H,CAAAA,KAAMA,aAAavD,eAAAA,CAAAA;AAC1D,EAAA;;EAGUyC,SAAAA,GAAmC;AAC3C,IAAA,OAAQ,IAAA,CAAK,YAAiCA,SAAAA,EAAS;AACzD,EAAA;EAEUM,YAAAA,GAAuB;AAC/B,IAAA,OAAQ,IAAA,CAAK,YAAiCA,YAAAA,EAAY;AAC5D,EAAA;EAEUC,cAAAA,GAAgC;AACxC,IAAA,OAAQ,IAAA,CAAK,YAAiCA,cAAAA,EAAc;AAC9D,EAAA;EAEUK,iBAAAA,GAA4B;AACpC,IAAA,OAAQ,IAAA,CAAK,YAAiCA,iBAAAA,EAAiB;AACjE,EAAA;EAEUG,aAAAA,GAAmC;AAC3C,IAAA,MAAM5B,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,KAAA,MAAWlL,KAAAA,IAASqL,MAAAA,CAAOzK,MAAAA,CAAOyJ,MAAAA,CAAAA,EAAS;AACzC,MAAA,IAAIrK,MAAMkI,YAAAA,EAAc;AACtB,QAAA,OAAOlI,KAAAA;AACT,MAAA;AACF,IAAA;AACA,IAAA,OAAOoE,MAAAA;AACT,EAAA;;AAGA,EAAA,IAAcM,MAAAA,GAA0B;AACtC,IAAA,IAAI,CAAC,KAAKsG,OAAAA,EAAS;AACjB,MAAA,IAAA,CAAKA,OAAAA,GAAU,IAAI9E,eAAAA,EAAAA;AACrB,IAAA;AACA,IAAA,OAAO,IAAA,CAAK8E,OAAAA;AACd,EAAA;;AAGA,EAAA,aAAavF,WAAAA,CAAYf,MAAAA,GAA0B,IAAIwB,eAAAA,EAAAA,EAAiD;AACtG,IAAA,MAAMmE,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,MAAMgB,OAAAA,GAAUb,MAAAA,CAAOzK,MAAAA,CAAOyJ,MAAAA,CAAAA,CAAQhF,IAAI,CAAC2G,CAAAA,KAAMA,CAAAA,CAAExD,mBAAAA,EAAmB,CAAA;AACtE,IAAA,MAAM2D,cAAuC,IAAA,CAAKJ,eAAAA,EAAe,CAAG1G,GAAAA,CAAI,CAAC2G,CAAAA,MAAO;AAC9EI,MAAAA,aAAAA,EAAe,KAAKZ,YAAAA,EAAY;AAChCa,MAAAA,cAAAA,EAAgBL,CAAAA,CAAEzE,IAAAA;AAClB+E,MAAAA,WAAAA,EAAaN,CAAAA,CAAEtD,SAAAA;AACf6D,MAAAA,YAAAA,EAAcP,CAAAA,CAAE9L,UAAAA;AAChByI,MAAAA,QAAAA,EAAUqD,CAAAA,CAAErD,QAAAA;AACZC,MAAAA,QAAAA,EAAUoD,CAAAA,CAAEpD;KACd,CAAA,CAAA;AACA,IAAA,MAAM4D,OAAAA,GAAU,KAAKZ,UAAAA,EAAU;AAE/B,IAAA,OAAO,MAAMlH,MAAAA,CAAO2B,KAAAA,CAAMZ,WAAAA,CAAY;AACpC8B,MAAAA,IAAAA,EAAM,KAAKiE,YAAAA,EAAY;MACvBzD,WAAAA,EAAa,IAAA,CAAK0D,gBAAc,IAAMrH,MAAAA;MACtC4D,WAAAA,EAAa,IAAA,CAAK0D,gBAAc,IAAM,EAAA;AACtCQ,MAAAA,OAAAA;AACAC,MAAAA,WAAAA;AACAK,MAAAA;KACF,CAAA;AACF,EAAA;AAEA,EAAA,aAAa9G,SAAAA,CAAUhB,MAAAA,GAA0B,IAAIwB,eAAAA,EAAAA,EAAiC;AACpF,IAAA,OAAO,MAAMxB,MAAAA,CAAO2B,KAAAA,CAAMX,SAAAA,CAAU;AAAEgD,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA;KAAe,CAAA;AACvE,EAAA;AAEA,EAAA,aAAa7F,WAAAA,CAAY8G,OAAAA,EAAiB/H,MAAAA,GAA0B,IAAIwB,iBAAAA,EAAiC;AACvG,IAAA,OAAO,MAAMxB,MAAAA,CAAO2B,KAAAA,CAAMV,WAAAA,CAAY;AACpC+C,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA,EAAY;MAC5BkB,YAAAA,EAAcD;KAChB,CAAA;AACF,EAAA;AAEA,EAAA,aAAa7G,aAAAA,CAAclB,MAAAA,GAA0B,IAAIwB,eAAAA,EAAAA,EAAiC;AACxF,IAAA,OAAO,MAAMxB,MAAAA,CAAO2B,KAAAA,CAAMT,aAAAA,CAAc;AAAE8C,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA;KAAe,CAAA;AAC3E,EAAA;AAEA,EAAA,aAAaxF,cAAAA,CAAetB,MAAAA,GAA0B,IAAIwB,eAAAA,EAAAA,EAAiD;AACzG,IAAA,OAAO,MAAMxB,MAAAA,CAAO2B,KAAAA,CAAML,cAAAA,CAAe;AAAE0C,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA;KAAe,CAAA;AAC5E,EAAA;;AAGA,EAAA,aAAamB,MAAAA,CAEXlP,IAAAA,EACAiH,MAAAA,GAA0B,IAAIwB,iBAAAA,EAChB;AACd,IAAA,MAAMlB,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMqF,MAAAA,GAASrF,MAAMkG,SAAAA,EAAS;AAC9B,IAAA,MAAMgB,UAAoB,EAAA;AAC1B,IAAA,MAAMtL,SAAgB,EAAA;AAEtB,IAAA,KAAA,MAAW,CAAC2K,GAAAA,EAAKtL,KAAAA,KAAUoL,MAAAA,CAAOC,OAAAA,CAAQ7N,IAAAA,CAAAA,EAAO;AAC/C,MAAA,IAAI8N,OAAOlB,MAAAA,EAAQ;AACjB6B,QAAAA,OAAAA,CAAQU,IAAAA,CAAKvC,MAAAA,CAAOkB,GAAAA,CAAAA,CAAKhE,IAAI,CAAA;AAC7B3G,QAAAA,MAAAA,CAAOgM,KAAK3M,KAAAA,CAAAA;MACd,CAAA,MAAO;AACL,QAAA,MAAM,IAAItC,KAAAA,CAAM,CAAA,eAAA,EAAkB4N,GAAAA,CAAAA,CAAK,CAAA;AACzC,MAAA;AACF,IAAA;AAEA,IAAA,OAAO7G,MAAAA,CAAOjH,KAAKmH,SAAAA,CAAU;AAC3B8D,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7B/N,IAAAA,EAAM;AACJyO,QAAAA,OAAAA;QACAtL,MAAAA,EAAQ;AAACA,UAAAA;;AACX;KACF,CAAA;AACF,EAAA;AAEA,EAAA,MAAMiM,IAAAA,CAAKnI,MAAAA,GAA0B,IAAIwB,eAAAA,EAAAA,EAAiC;AACxE,IAAA,MAAMpB,EAAAA,GAAK,KAAKmH,aAAAA,EAAa;AAC7B,IAAA,MAAMa,OAAAA,GAAW,IAAA,CAAa,IAAA,CAAKhB,iBAAAA,EAAiB,CAAA;AACpD,IAAA,MAAMzB,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAE7B,IAAA,IAAI4B,OAAAA,KAAY,IAAA,IAAQA,OAAAA,KAAY1I,MAAAA,EAAW;AAC7C,MAAA,MAAM3G,OAA4B,EAAC;AACnC,MAAA,KAAA,MAAW,CAAC8N,GAAAA,EAAKvL,KAAAA,KAAUqL,MAAAA,CAAOC,OAAAA,CAAQjB,MAAAA,CAAAA,EAAS;AACjD5M,QAAAA,IAAAA,CAAK8N,GAAAA,CAAAA,GAAQ,IAAA,CAAaA,GAAAA,CAAAA;AAC5B,MAAA;AACA,MAAA,OAAQ,IAAA,CAAK,WAAA,CAAiCoB,MAAAA,CAAOlP,IAAAA,EAAMiH,MAAAA,CAAAA;AAC7D,IAAA;AAEA,IAAA,MAAMwH,UAAoB,EAAA;AAC1B,IAAA,MAAMtL,SAAgB,EAAA;AACtB,IAAA,KAAA,MAAW,CAAC2K,GAAAA,EAAKvL,KAAAA,KAAUqL,MAAAA,CAAOC,OAAAA,CAAQjB,MAAAA,CAAAA,EAAS;AACjD,MAAA,IAAIrK,KAAAA,CAAMuH,IAAAA,KAASzC,EAAAA,EAAIyC,IAAAA,EAAM;AAC3B2E,QAAAA,OAAAA,CAAQU,IAAAA,CAAK5M,MAAMuH,IAAI,CAAA;AACvB3G,QAAAA,MAAAA,CAAOgM,IAAAA,CAAM,IAAA,CAAarB,GAAAA,CAAI,CAAA;AAChC,MAAA;AACF,IAAA;AAEA,IAAA,OACE7G,MAAAA,IACA,IAAA,CAAKA,MAAAA,CAAOjH,IAAAA,CAAKoH,mBAAmBiI,OAAAA,EAAS;AAC3CpE,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA,EAAY;MAC5BuB,OAAAA,EAAS;QACP5I,MAAAA,EAAQ;UAAC;;AACT+H,QAAAA,OAAAA;AACAtL,QAAAA;AACF;KACF,CAAA;AAEJ,EAAA;EAEA,MAAMoM,MAAAA,CAAO7I,QAAiB6G,OAAAA,EAAmD;AAC/E,IAAA,MAAMlG,EAAAA,GAAK,KAAKmH,aAAAA,EAAa;AAC7B,IAAA,MAAMa,OAAAA,GAAW,IAAA,CAAa,IAAA,CAAKhB,iBAAAA,EAAiB,CAAA;AACpD,IAAA,MAAMmB,WAAAA,GAAc9I,MAAAA,IAAUrE,EAAAA,CAAGF,GAAAA,CAAIG,EAAAA,CAAG+E,IAAIyC,IAAAA,IAAQ,IAAA,EAAMuF,OAAAA,CAAAA,CAAAA,CAAAA;AAE1D,IAAA,OACE9B,OAAAA,IACA,IAAA,CAAKtG,MAAAA,CAAOjH,IAAAA,CAAK8H,UAAAA,CAAW;AAC1BmD,MAAAA,SAAAA,EAAW,KAAK8C,YAAAA,EAAY;MAC5BuB,OAAAA,EAAS;QACP5I,MAAAA,EAAQ8I;AACV;KACF,CAAA;AAEJ,EAAA;AAEA,EAAA,aAAaC,UAAAA,CAEXC,KAAAA,EACAC,SAAAA,GAAoB,EAAA,EACpBpC,OAAAA,EACiB;AACjB,IAAA,IAAI,CAACmC,KAAAA,CAAME,MAAAA,EAAQ,OAAO,CAAA;AAC1B,IAAA,IAAID,SAAAA,IAAa,CAAA,EAAG,MAAM,IAAIzP,MAAM,mCAAA,CAAA;AAEpC,IAAA,MAAMqH,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMqF,MAAAA,GAASrF,MAAMkG,SAAAA,EAAS;AAC9B,IAAA,IAAIoC,GAAAA,GAAM,CAAA;AACVF,IAAAA,SAAAA,GAAYG,IAAAA,CAAKrL,GAAAA,CAAIkL,SAAAA,EAAW,GAAA,CAAA;AAEhC,IAAA,MAAMlB,OAAAA,GAAUb,MAAAA,CAAOmC,IAAAA,CAAKL,KAAAA,CAAM,CAAA,CAAE,CAAA;AACpC,IAAA,MAAMM,UAAAA,GAAa,IAAIC,GAAAA,CAAIxB,OAAAA,CAAAA;AAE3B,IAAA,KAAA,MAAWyB,OAAOzB,OAAAA,EAAS;AACzB,MAAA,IAAI,EAAEyB,OAAOtD,MAAAA,CAAAA,EAAS;AACpB,QAAA,MAAM,IAAI1M,KAAAA,CAAM,CAAA,eAAA,EAAkBgQ,GAAAA,CAAAA,CAAK,CAAA;AACzC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI/M,SAAkB,EAAA;AACtB,IAAA,MAAM8D,MAAAA,GAASsG,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAE9B,IAAA,KAAA,MAAWzI,QAAQ0P,KAAAA,EAAO;AACxB,MAAA,IAAIM,WAAWG,IAAAA,KAAS,IAAIF,GAAAA,CAAIrC,MAAAA,CAAOmC,KAAK/P,IAAAA,CAAAA,CAAAA,CAAOmQ,IAAAA,IAAQ,CAAC1B,OAAAA,CAAQ3H,KAAAA,CAAM,CAACsJ,CAAAA,KAAMA,CAAAA,IAAKpQ,IAAAA,CAAAA,EAAO;AAC3F,QAAA,MAAM,IAAIE,MAAM,qCAAA,CAAA;AAClB,MAAA;AAEAiD,MAAAA,MAAAA,CAAOgM,IAAAA,CAAKV,QAAQ7G,GAAAA,CAAI,CAACwI,MAAMpQ,IAAAA,CAAKoQ,CAAAA,CAAE,CAAA,CAAA;AAEtC,MAAA,IAAIjN,MAAAA,CAAOyM,WAAWD,SAAAA,EAAW;AAC/BE,QAAAA,GAAAA,IAAO,MAAM5I,MAAAA,CAAOjH,IAAAA,CAAKkH,UAAAA,CAAW;AAClC+D,UAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;UAC7B/N,IAAAA,EAAM;AAAEyO,YAAAA,OAAAA,EAASA,QAAQ7G,GAAAA,CAAI,CAACwI,MAAMxD,MAAAA,CAAOwD,CAAAA,EAAGtG,IAAI,CAAA;AAAG3G,YAAAA;AAAO;SAC9D,CAAA;AACAA,QAAAA,MAAAA,GAAS,EAAA;AACX,MAAA;AACF,IAAA;AAEA,IAAA,IAAIA,MAAAA,CAAOyM,SAAS,CAAA,EAAG;AACrBC,MAAAA,GAAAA,IAAO,MAAM5I,MAAAA,CAAOjH,IAAAA,CAAKkH,UAAAA,CAAW;AAClC+D,QAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;QAC7B/N,IAAAA,EAAM;AAAEyO,UAAAA,OAAAA,EAASA,QAAQ7G,GAAAA,CAAI,CAACwI,MAAMxD,MAAAA,CAAOwD,CAAAA,EAAGtG,IAAI,CAAA;AAAG3G,UAAAA;AAAO;OAC9D,CAAA;AACF,IAAA;AAEA,IAAA,OAAO0M,GAAAA;AACT,EAAA;EAEA,aAAaQ,MAAAA,CAEX3J,MAAAA,EACA1G,IAAAA,EACAuN,OAAAA,EACiB;AACjB,IAAA,MAAMhG,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMqF,MAAAA,GAASrF,MAAMkG,SAAAA,EAAS;AAC9B,IAAA,MAAMgB,OAAAA,GAAUb,MAAAA,CAAOmC,IAAAA,CAAK/P,IAAAA,CAAAA;AAE5B,IAAA,IAAI,CAACyO,QAAQmB,MAAAA,EAAQ;AACnB,MAAA,MAAM,IAAI1P,MAAM,sBAAA,CAAA;AAClB,IAAA;AAEA,IAAA,KAAA,MAAWgQ,OAAOzB,OAAAA,EAAS;AACzB,MAAA,IAAI,EAAEyB,OAAOtD,MAAAA,CAAAA,EAAS;AACpB,QAAA,MAAM,IAAI1M,KAAAA,CAAM,CAAA,eAAA,EAAkBgQ,GAAAA,CAAAA,CAAK,CAAA;AACzC,MAAA;AACF,IAAA;AAEA,IAAA,MAAM/M,SAASsL,OAAAA,CAAQ7G,GAAAA,CAAI,CAACwI,CAAAA,KAAMpQ,IAAAA,CAAKoQ,CAAAA,CAAE,CAAA;AACzC,IAAA,MAAMnJ,MAAAA,GAASsG,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAE9B,IAAA,OAAOxB,MAAAA,CAAOjH,KAAK6H,UAAAA,CAAW;AAC5BoD,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7BuB,OAAAA,EAAS;AACP5I,QAAAA,MAAAA;AACA+H,QAAAA,OAAAA,EAASA,QAAQ7G,GAAAA,CAAI,CAACwI,MAAMxD,MAAAA,CAAOwD,CAAAA,EAAGtG,IAAI,CAAA;AAC1C3G,QAAAA;AACF;KACF,CAAA;AACF,EAAA;EAEA,aAAamN,MAAAA,CAEX5J,QACA6G,OAAAA,EACiB;AACjB,IAAA,MAAMhG,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMN,MAAAA,GAASsG,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAE9B,IAAA,OAAOxB,MAAAA,CAAOjH,KAAK8H,UAAAA,CAAW;AAC5BmD,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7BuB,OAAAA,EAAS;AAAE5I,QAAAA;AAAO;KACpB,CAAA;AACF,EAAA;EAEA,aAAa5F,GAAAA,CAEX4F,MAAAA,EACA6J,MAAAA,EACAhD,OAAAA,EACY;AACZ,IAAA,MAAMhG,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMqF,MAAAA,GAASrF,MAAMkG,SAAAA,EAAS;AAC9B,IAAA,MAAMxG,MAAAA,GAASsG,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAE9B,IAAA,MAAMzI,IAAAA,GAAO,MAAMiH,MAAAA,CAAOjH,IAAAA,CAAKsH,QAAAA,CAAS;AACtC2D,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7BvG,KAAAA,EAAO;AACLd,QAAAA,MAAAA;QACA6J,MAAAA,EAAQA,MAAAA,IAAU3C,OAAOzK,MAAAA,CAAOyJ,MAAAA,EAAQhF,GAAAA,CAAI,CAAC2G,CAAAA,KAAMA,CAAAA,CAAEzE,IAAI,CAAA;QACzD0G,KAAAA,EAAO;AACT;KACF,CAAA;AAEA,IAAA,OAAO,IAAI,KAAKxQ,IAAAA,CAAAA;AAClB,EAAA;AAEA,EAAA,aAAa0G,OAEXrB,OAAAA,EAWc;AACd,IAAA,MAAMkC,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMN,MAAAA,GAAS5B,OAAAA,CAAQkI,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAEtC,IAAA,MAAMzI,IAAAA,GAAO,MAAMiH,MAAAA,CAAOjH,IAAAA,CAAK0H,SAAAA,CAAU;AACvCuD,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7BvG,KAAAA,EAAO;AACLd,QAAAA,MAAAA,EAAQrB,OAAAA,CAAQqB,MAAAA;AAChB+J,QAAAA,IAAAA,EAAMpL,OAAAA,CAAQoL,IAAAA;AACdC,QAAAA,SAAAA,EAAWrL,OAAAA,CAAQqL,SAAAA;AACnBC,QAAAA,IAAAA,EAAMtL,QAAQsL,IAAAA,GAAO;UAACtL,OAAAA,CAAQsL;AAAQhK,SAAAA,GAAAA,MAAAA;AACtC6J,QAAAA,KAAAA,EAAOnL,OAAAA,CAAQmL,KAAAA;AACfI,QAAAA,MAAAA,EAAQvL,OAAAA,CAAQuL,MAAAA;AAChBC,QAAAA,OAAAA,EAASxL,OAAAA,CAAQwL,OAAAA;AACjBN,QAAAA,MAAAA,EAAQlL,OAAAA,CAAQkL;AAClB;KACF,CAAA;AAEA,IAAA,OAAOvQ,KAAK4H,GAAAA,CAAI,CAACb,SAAc,IAAI,IAAA,CAAKA,IAAAA,CAAAA,CAAAA;AAC1C,EAAA;EAEA,aAAa+J,KAAAA,CAEXzL,OAAAA,GAKI,EAAC,EACY;AACjB,IAAA,MAAMkC,KAAAA,GAAQ,IAAA;AACd,IAAA,MAAMN,MAAAA,GAAS5B,OAAAA,CAAQkI,OAAAA,IAAW,IAAI9E,eAAAA,EAAAA;AAEtC,IAAA,MAAMzI,IAAAA,GAAO,MAAMiH,MAAAA,CAAOjH,IAAAA,CAAK0H,SAAAA,CAAU;AACvCuD,MAAAA,SAAAA,EAAW1D,MAAMwG,YAAAA,EAAY;MAC7BvG,KAAAA,EAAO;AACLd,QAAAA,MAAAA,EAAQrB,QAAQqB,MAAAA,IAAU;AAAC,UAAA;YAAC3D,GAAAA,CAAI,IAAA,EAAMyD,KAAAA,CAAM,CAAA,CAAA;;;QAC5CkK,SAAAA,EAAW;AACT,UAAA;YACEK,MAAAA,EAAQ,IAAA;AACRC,YAAAA,QAAAA,EAAU5R,iBAAAA,CAAkB6R,KAAAA;YAC5BC,KAAAA,EAAO;AACT;;AAEFP,QAAAA,IAAAA,EAAMtL,QAAQsL,IAAAA,GAAO;UAACtL,OAAAA,CAAQsL;AAAQhK,SAAAA,GAAAA,MAAAA;QACtC6J,KAAAA,EAAO,CAAA;QACPI,MAAAA,EAAQ,CAAA;AACRC,QAAAA,OAAAA,EAASxL,OAAAA,CAAQwL,OAAAA;QACjBN,MAAAA,EAAQ;AAAC,UAAA;;AACX;KACF,CAAA;AAEA,IAAA,OAAOvQ,KAAK4P,MAAAA,GAAS,CAAA,GAAI5P,IAAAA,CAAK,CAAA,EAAG8Q,KAAAA,GAAQ,CAAA;AAC3C,EAAA;EAEAK,QAAAA,GAAmB;AACjB,IAAA,MAAMvE,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,MAAMzN,OAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW8N,GAAAA,IAAOF,MAAAA,CAAOmC,IAAAA,CAAKnD,MAAAA,CAAAA,EAAS;AACrC,MAAA,MAAMpK,KAAAA,GAAS,KAAasL,GAAAA,CAAAA;AAC5B,MAAA,IAAI,EAAEtL,iBAAiB6H,KAAAA,CAAAA,EAAQ;AAC7BrK,QAAAA,IAAAA,CAAK8N,GAAAA,CAAAA,GAAOtL,KAAAA;AACd,MAAA;AACF,IAAA;AAEAxC,IAAAA,IAAAA,CAAKwN,SAAS,IAAA,CAAKA,MAAAA;AACnB,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY1D,IAAI,CAAA,CAAA,EAAI1I,IAAAA,CAAKC,SAAAA,CAAUrB,IAAAA,CAAAA,CAAMY,KAAAA,CAAM,CAAA,EAAG,EAAC,CAAA,CAAA,CAAA,CAAA;AACpE,EAAA;EAEAwQ,MAAAA,GAA8B;AAC5B,IAAA,MAAMxE,MAAAA,GAAS,KAAKa,SAAAA,EAAS;AAC7B,IAAA,MAAMzN,OAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW8N,GAAAA,IAAOF,MAAAA,CAAOmC,IAAAA,CAAKnD,MAAAA,CAAAA,EAAS;AACrC5M,MAAAA,IAAAA,CAAK8N,GAAAA,CAAAA,GAAQ,IAAA,CAAaA,GAAAA,CAAAA;AAC5B,IAAA;AAEA,IAAA,OAAO;MAAE,GAAG9N,IAAAA;AAAM,MAAA,GAAG,IAAA,CAAKwN;AAAO,KAAA;AACnC,EAAA;AACF","file":"index.js","sourcesContent":["import { Filter } from './filter';\n\nexport const AccessType = {\n None: 'None',\n Read: 'Read',\n Write: 'Write',\n Admin: 'Admin',\n} as const;\n\nexport type AccessType = (typeof AccessType)[keyof typeof AccessType];\n\nexport interface SyntropixDBRowAccess {\n read?: Filter;\n write?: Filter;\n}\n\nexport interface SyntropixDBAccess {\n tableAccess: AccessType;\n rowAccess?: Record<string, SyntropixDBRowAccess>;\n columnAccess: Record<string, AccessType>;\n createdAt: Date;\n updatedAt: Date;\n}\n","export const IndexType = {\n Gin: 'Gin',\n GinTrgmOps: 'GinTrgmOps',\n IvfflatL2Ops: 'IvfflatL2Ops',\n InfflatCosineOps: 'InfflatCosineOps',\n InfflatIpOps: 'InfflatIpOps',\n} as const;\n\nexport type IndexType = (typeof IndexType)[keyof typeof IndexType];\n\nexport interface SyntropixDBIndex {\n name?: string;\n unique: boolean;\n nullsNotDistinct: boolean;\n columns: string[];\n indexType: IndexType;\n}\n","export const SortType = {\n Descending: 'Descending',\n Ascending: 'Ascending',\n} as const;\n\nexport type SortType = (typeof SortType)[keyof typeof SortType];\n\nexport enum AggregateFunction {\n Count = 'Count',\n Sum = 'Sum',\n Avg = 'Avg',\n Min = 'Min',\n Max = 'Max',\n CountDistinct = 'CountDistinct',\n}\n\nexport interface Join {\n table: string;\n on: any;\n}\n\nexport interface Aggregate {\n column: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n column: string;\n direction: SortType;\n}\n\nexport interface SimilarityOptions {\n threshold: number;\n order?: SortType;\n alias?: string;\n}\n\nexport enum FilterOperation {\n LT = 'LT',\n LTE = 'LTE',\n GT = 'GT',\n GTE = 'GTE',\n EQ = 'EQ',\n NEQ = 'NEQ',\n Between = 'Between',\n In = 'In',\n Contains = 'Contains',\n Overlap = 'Overlap',\n NotIn = 'NotIn',\n Like = 'Like',\n NotLike = 'NotLike',\n ILike = 'ILike',\n NotILike = 'NotILike',\n IsNull = 'IsNull',\n IsNotNull = 'IsNotNull',\n Similarity = 'Similarity',\n SimilarityDistance = 'SimilarityDistance',\n WordSimilarity = 'WordSimilarity',\n WordSimilarityDistance = 'WordSimilarityDistance',\n StrictWordSimilarity = 'StrictWordSimilarity',\n StrictWordSimilarityDistance = 'StrictWordSimilarityDistance',\n EuclideanDistance = 'EuclideanDistance',\n NegativeInnerProduct = 'NegativeInnerProduct',\n CosineDistance = 'CosineDistance',\n}\n\nexport interface FilterItem {\n columnName: string;\n operator: FilterOperation;\n staticValue?: any;\n columnValue?: string;\n simiarityOptions?: SimilarityOptions;\n}\n\nexport type FilterGroup = FilterItem[];\n\nexport type Filter = FilterGroup[];\n","export const ForeignKeyAction = {\n Cascade: 'Cascade',\n Restrict: 'Restrict',\n SetNull: 'SetNull',\n NoAction: 'NoAction',\n SetDefault: 'SetDefault',\n} as const;\n\nexport type ForeignKeyAction = (typeof ForeignKeyAction)[keyof typeof ForeignKeyAction];\n\nexport interface SyntropixDBForeignKey {\n name?: string;\n fromTableName: string;\n fromColumnName: string;\n toTableName: string;\n toColumnName: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n}\n","import { ClientConfig } from '@/core/config';\nimport { SyntropixResponse } from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { EJSON } from 'bson';\n\nfunction handleError(error: AxiosError) {\n const axiosErr = error as AxiosError<SyntropixResponse<any>>;\n if (axiosErr.response?.data?.status === 'error') {\n throw new Error(axiosErr.response.data.message);\n }\n throw new Error(axiosErr.message);\n}\n\nexport class BaseClient {\n protected config: ClientConfig;\n\n constructor(config: ClientConfig) {\n this.config = config;\n }\n\n private headers() {\n return {\n 'Content-Type': 'application/json',\n Authorization: this.config.apiKey || '',\n };\n }\n\n private url(path: string) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n public async get<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.get(this.url(path), {\n headers: this.headers(),\n params: data,\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message as string);\n }\n return content.data as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to get data: Unknown error');\n }\n }\n\n public async post<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.post(this.url(path), data, {\n headers: this.headers(),\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message);\n }\n return content.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to post data: Unknown error');\n }\n }\n}\n","export class ClientConfig {\n public apiKey?: string;\n public baseUrl?: string;\n public timeout?: number;\n public retries?: number;\n\n constructor(config?: any) {\n this.apiKey = config?.apiKey || process.env.SYNTROPIX_API_KEY;\n this.baseUrl = config?.baseUrl || process.env.SYNTROPIX_API_URL;\n this.timeout = config?.timeout || process.env.SYNTROPIX_API_TIMEOUT;\n this.retries = config?.retries || process.env.SYNTROPIX_API_RETRIES;\n\n if (!this.apiKey || !this.baseUrl) {\n throw new Error('API key and base URL are required');\n }\n\n if (!this.timeout) {\n this.timeout = 10000;\n }\n\n if (!this.retries) {\n this.retries = 3;\n }\n\n if (!this.baseUrl.endsWith('/')) {\n this.baseUrl += '/';\n }\n }\n}\n","import { Filter, FilterGroup, FilterItem, FilterOperation, SimilarityOptions } from '@/types';\n\nexport const AND = (...conditions: FilterItem[]): FilterGroup => conditions;\n\nexport const OR = (...conditions: FilterGroup[]): Filter => conditions;\n\nexport const EQ = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n staticValue: value,\n});\n\nexport const NE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n staticValue: value,\n});\n\nexport const GT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n staticValue: value,\n});\n\nexport const GTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n staticValue: value,\n});\n\nexport const LT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n staticValue: value,\n});\n\nexport const LTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n staticValue: value,\n});\n\nexport const IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.In,\n staticValue: values,\n});\n\nexport const CONTAINS = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Contains,\n staticValue: value,\n});\n\nexport const OVERLAP = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Overlap,\n staticValue: value,\n});\n\nexport const I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.ILike,\n staticValue: pattern,\n});\n\nexport const NOT_I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotILike,\n staticValue: pattern,\n});\n\nexport const NOT_IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotIn,\n staticValue: values,\n});\n\nexport const LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Like,\n staticValue: pattern,\n});\n\nexport const NOT_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotLike,\n staticValue: pattern,\n});\n\nexport const IS_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNull,\n});\n\nexport const IS_NOT_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNotNull,\n});\n\nexport const BETWEEN = (field: string, min: any, max: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Between,\n staticValue: [min, max],\n});\n\n// Column comparison (compare two columns)\nexport const EQ_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n columnValue: otherField,\n});\n\nexport const NE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n columnValue: otherField,\n});\n\nexport const GT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n columnValue: otherField,\n});\n\nexport const GTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n columnValue: otherField,\n});\n\nexport const LT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n columnValue: otherField,\n});\n\nexport const LTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n columnValue: otherField,\n});\n\n// Similarity operations\nexport const SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Similarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.SimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const EUCLIDEAN_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EuclideanDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const NEGATIVE_INNER_PRODUCT = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NegativeInnerProduct,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const COSINE_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.CosineDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\n// Helper function for values (backward compatibility)\nexport const Value = (value: any) => value;\n\n// Helper function for wrapping filter\nexport function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined {\n if (filter === undefined) {\n return undefined;\n }\n if (!Array.isArray(filter)) {\n return OR(AND(filter));\n } else if (!filter.every((item) => Array.isArray(item))) {\n return OR(filter);\n } else {\n return filter;\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { FilterWrapper } from '@/core/filter-builder';\nimport { DeleteDataDto, InsertDto, QueryDto, UpdateDto } from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class DataClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async insertData(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert', data);\n }\n\n async insertOne(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert/one', data);\n }\n\n async updateByPrimaryKey(pk: string, data: UpdateDto): Promise<any> {\n return await this.client.post<any>(`/update/${pk}`, data);\n }\n\n async queryOne(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any>('/query', { One: data });\n if (model !== undefined) {\n return new model(response);\n }\n return response;\n }\n\n async queryMany(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any[]>('/query', { Many: data });\n if (model !== undefined) {\n // In TypeScript, we would typically use a validation library or manual validation\n // For now, we'll return the data as-is, but in a real implementation you might want to use\n // a library like class-validator or zod for validation\n return response.map((item: any) => new model(item));\n }\n return response;\n }\n\n async updateData(data: UpdateDto): Promise<any> {\n return await this.client.post<any>('/update', data);\n }\n\n async deleteData(data: DeleteDataDto): Promise<any> {\n return await this.client.post<any>('/delete', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport {\n TableAddColumnDto,\n TableCreateDto,\n TableCreateResponse,\n TableDropColumnDto,\n TableDropDto,\n TableGetListDto,\n TableGetSchemaDto,\n TableListResponse,\n TableModifyColumnDto,\n TableRenameDto,\n TableSchemaResponse,\n TableTruncateDto,\n} from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class TableClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async createTable(data: TableCreateDto): Promise<TableCreateResponse> {\n return await this.client.post<TableCreateResponse>('/table/create', data);\n }\n\n async dropTable(data: TableDropDto): Promise<any> {\n return await this.client.post<any>('/table/drop', data);\n }\n\n async renameTable(data: TableRenameDto): Promise<any> {\n return await this.client.post<any>('/table/rename', data);\n }\n\n async truncateTable(data: TableTruncateDto): Promise<any> {\n return await this.client.post<any>('/table/truncate', data);\n }\n\n async addColumn(data: TableAddColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/add', data);\n }\n\n async dropColumn(data: TableDropColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/drop', data);\n }\n\n async modifyColumn(data: TableModifyColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/modify', data);\n }\n\n async getTableSchema(data: TableGetSchemaDto): Promise<TableSchemaResponse> {\n return await this.client.get<TableSchemaResponse>('/table/schema', data);\n }\n\n async getTableList(data: TableGetListDto): Promise<TableListResponse> {\n return await this.client.get<TableListResponse>('/table/list', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { DataClient } from './data-client';\nimport { TableClient } from './table-client';\n\nexport class SyntropixClient {\n private config: ClientConfig;\n private _tableClient?: TableClient;\n private _dataClient?: DataClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.config = config;\n }\n\n get table(): TableClient {\n if (!this._tableClient) {\n this._tableClient = new TableClient(this.config);\n }\n return this._tableClient;\n }\n\n get data(): DataClient {\n if (!this._dataClient) {\n this._dataClient = new DataClient(this.config);\n }\n return this._dataClient;\n }\n}\n","import { ArrayDataTypeSchema, ArrayType, DecimalType, EnumType, MoneyType, StringType, VectorType } from '@/types';\n\nexport const ArrayDataType = {\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n Text: 'Text',\n Integer: 'Integer',\n BigInteger: 'BigInteger',\n Double: 'Double',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Boolean: 'Boolean',\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Uuid: 'Uuid',\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Json: 'Json',\n} as const;\n\nexport const ColumnDataType = {\n Integer: 'Integer',\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Text: 'Text',\n Boolean: 'Boolean',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Json: 'Json',\n Uuid: 'Uuid',\n Double: 'Double',\n\n Vector: (dimensions: number): VectorType => ({ Vector: dimensions }),\n Array: (dataType: ArrayDataTypeSchema): ArrayType => ({ Array: dataType }),\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n} as const;\n","import {\n AccessType,\n ArrayDataTypeSchema,\n ColumnCreateDto,\n ColumnDataTypeSchema,\n FieldOptions,\n ForeignKeyAction,\n ForeignKeyFieldOptions,\n} from '@/types';\nimport { ColumnDataType } from './data-type';\n\nexport abstract class Field {\n name: string = '';\n displayName: string = '';\n description: string = '';\n columnType: ColumnDataTypeSchema;\n isPrimaryKey: boolean = false;\n isNullable: boolean = false;\n autoIncrement: boolean = false;\n default?: any;\n defaultAccess?: AccessType;\n\n constructor(columnType: ColumnDataTypeSchema, options: FieldOptions = {}) {\n this.columnType = columnType;\n this.name = options.name?.toLowerCase() || '';\n this.displayName = options.displayName || '';\n this.description = options.description || '';\n this.isPrimaryKey = options.isPrimaryKey || false;\n this.isNullable = options.isNullable || false;\n this.autoIncrement = options.autoIncrement || false;\n this.default = options.default;\n this.defaultAccess = options.defaultAccess;\n }\n\n intoColumnCreateDto(): ColumnCreateDto {\n return {\n name: this.name,\n displayName: this.displayName,\n columnType: this.columnType,\n description: this.description,\n isPrimaryKey: this.isPrimaryKey,\n isNullable: this.isNullable,\n autoIncrement: this.autoIncrement,\n default: this.default,\n defaultAccess: this.defaultAccess,\n };\n }\n}\n\nexport class ForeignKeyField extends Field {\n tableName: string;\n columnName: string;\n onDelete: ForeignKeyAction;\n onUpdate: ForeignKeyAction;\n\n constructor(\n columnType: ColumnDataTypeSchema,\n tableName: string,\n columnName: string,\n options: ForeignKeyFieldOptions = {},\n ) {\n super(columnType, options);\n this.tableName = tableName;\n this.columnName = columnName;\n this.onDelete = options.onDelete || ForeignKeyAction.Cascade;\n this.onUpdate = options.onUpdate || ForeignKeyAction.Cascade;\n }\n}\n\nexport class StringField extends Field {\n constructor(maxLength: number, options: FieldOptions = {}) {\n super(ColumnDataType.String(maxLength), options);\n }\n}\n\nexport class TextField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Text, options);\n }\n}\n\nexport class IntegerField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Integer, options);\n }\n}\n\nexport class BooleanField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Boolean, options);\n }\n}\n\nexport class DateTimeField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.DateTime, options);\n }\n}\n\nexport class TimestampField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Timestamp, options);\n }\n}\n\nexport class DateField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Date, options);\n }\n}\n\nexport class JsonField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Json, options);\n }\n}\n\nexport class UuidField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Uuid, options);\n }\n}\n\nexport class VectorField extends Field {\n constructor(dimensions: number, options: FieldOptions = {}) {\n super(ColumnDataType.Vector(dimensions), options);\n }\n}\n\nexport class ArrayField extends Field {\n constructor(dataType: ArrayDataTypeSchema, options: FieldOptions = {}) {\n super(ColumnDataType.Array(dataType), options);\n }\n}\n\nexport class EnumField extends Field {\n constructor(name: string, variants: string[], options: FieldOptions = {}) {\n super(ColumnDataType.Enum(name, variants), options);\n }\n}\n\nexport class MoneyField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Money(precision, scale), options);\n }\n}\n\nexport class DecimalField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Decimal(precision, scale), options);\n }\n}\n\nexport class DoubleField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Double, options);\n }\n}\n","import {\n Aggregate,\n AggregateFunction,\n ColumnCreateOptions,\n ColumnDataTypeSchema,\n Filter,\n ForeignKeyAction,\n GroupBy,\n Join,\n Sort,\n SyntropixDBForeignKey,\n SyntropixDBIndex,\n TableCreateResponse,\n TableSchemaResponse,\n} from '@/types';\nimport 'reflect-metadata';\nimport { SyntropixClient } from './client';\nimport { ColumnDataType } from './data-type';\nimport { Field, ForeignKeyField, IntegerField } from './field';\nimport { AND, EQ, GTE, OR, Value } from './filter-builder';\n\n// Metadata keys\nconst FIELDS_KEY = Symbol('fields');\nconst TABLE_NAME_KEY = Symbol('tableName');\nconst TABLE_DISPLAY_NAME_KEY = Symbol('displayTableName');\nconst DESCRIPTION_KEY = Symbol('description');\nconst INDEXES_KEY = Symbol('indexes');\n\n// Column decorator\nexport function Column(options: ColumnCreateOptions = {}) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const fieldName = options.name || propertyKey.toLowerCase();\n const columnType = options.type || ColumnDataType.Text;\n\n const field = new (class extends Field {\n constructor() {\n super(columnType, {\n name: fieldName,\n displayName: options.displayName,\n description: options.description,\n isPrimaryKey: options.primary,\n isNullable: options.nullable,\n autoIncrement: options.autoIncrement,\n default: options.default,\n defaultAccess: options.defaultAccess,\n });\n }\n })();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\n// Description decorator\nexport function Description(description: string) {\n return function (target: any) {\n Reflect.defineMetadata(DESCRIPTION_KEY, description, target);\n };\n}\n\n// ForeignKey decorator\nexport function ForeignKey(\n tableName: string,\n columnName: string,\n options: {\n type?: ColumnDataTypeSchema;\n displayName?: string;\n name?: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n description?: string;\n nullable?: boolean;\n default?: any;\n } = {},\n) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const field = new ForeignKeyField(options.type || ColumnDataType.Integer, tableName, columnName, {\n displayName: options.displayName,\n description: options.description,\n isNullable: options.nullable,\n default: options.default,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n });\n field.name = options.name || propertyKey.toLowerCase();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\nexport class BaseModel {\n private _client?: SyntropixClient;\n private _extra: Record<string, any> = {};\n\n constructor(data: Record<string, any> = {}) {\n const fields = this.getFields();\n\n // Create a mapping from column names to property names\n const columnToPropertyMap: Record<string, string> = {};\n for (const [propertyName, field] of Object.entries(fields)) {\n columnToPropertyMap[field.name] = propertyName;\n }\n\n for (const [key, value] of Object.entries(data)) {\n // Check if key is a property name\n if (key in fields) {\n (this as any)[key] = value;\n }\n // Check if key is a column name\n else if (key in columnToPropertyMap) {\n (this as any)[columnToPropertyMap[key]] = value;\n }\n // Otherwise, store in _extra\n else {\n this._extra[key] = value;\n }\n }\n }\n\n // Static metadata getters\n protected static getTableName(): string {\n const tableName = Reflect.getMetadata(TABLE_NAME_KEY, this);\n if (tableName) return tableName;\n\n // Check for static tableName property\n if ('tableName' in this && typeof (this as any).tableName === 'string') {\n return (this as any).tableName;\n }\n\n return this.name.toLowerCase();\n }\n\n protected static getDisplayName(): string | null {\n const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);\n if (displayName) return displayName;\n\n // Check for static displayName property\n if ('displayName' in this && typeof (this as any).displayName === 'string') {\n return (this as any).displayName;\n }\n\n return null;\n }\n\n public static getDescription(): string {\n const metadataDescription = Reflect.getMetadata(DESCRIPTION_KEY, this);\n if (metadataDescription) return metadataDescription;\n\n // Check for static description property as fallback\n if ('description' in this && typeof (this as any).description === 'string') {\n return (this as any).description;\n }\n\n return '';\n }\n\n protected static getIndexes(): SyntropixDBIndex[] {\n return Reflect.getMetadata(INDEXES_KEY, this) || [];\n }\n\n protected static getFields(): Record<string, Field> {\n const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};\n\n // Check if there's a primary key\n let hasPrimaryKey = false;\n for (const field of Object.values(fields) as Field[]) {\n if (field.isPrimaryKey) {\n hasPrimaryKey = true;\n field.isNullable = false;\n break;\n }\n }\n\n // If no primary key, add default 'id' field\n if (!hasPrimaryKey && !('id' in fields)) {\n fields['id'] = new IntegerField({\n isPrimaryKey: true,\n isNullable: false,\n autoIncrement: true,\n description: 'Primary key',\n });\n fields['id'].name = 'id';\n }\n\n return fields;\n }\n\n protected static getPrimaryKeyName(): string {\n const fields = this.getFields();\n for (const [key, field] of Object.entries(fields)) {\n if (field.isPrimaryKey) {\n return field.name;\n }\n }\n return 'id';\n }\n\n protected static getAssociations(): ForeignKeyField[] {\n const fields = this.getFields();\n return Object.values(fields).filter((f) => f instanceof ForeignKeyField) as ForeignKeyField[];\n }\n\n // Instance metadata getters\n protected getFields(): Record<string, Field> {\n return (this.constructor as typeof BaseModel).getFields();\n }\n\n protected getTableName(): string {\n return (this.constructor as typeof BaseModel).getTableName();\n }\n\n protected getDisplayName(): string | null {\n return (this.constructor as typeof BaseModel).getDisplayName();\n }\n\n protected getPrimaryKeyName(): string {\n return (this.constructor as typeof BaseModel).getPrimaryKeyName();\n }\n\n protected getPrimaryKey(): Field | undefined {\n const fields = this.getFields();\n for (const field of Object.values(fields)) {\n if (field.isPrimaryKey) {\n return field;\n }\n }\n return undefined;\n }\n\n // Client getter\n protected get client(): SyntropixClient {\n if (!this._client) {\n this._client = new SyntropixClient();\n }\n return this._client;\n }\n\n // Table operations\n static async createTable(client: SyntropixClient = new SyntropixClient()): Promise<TableCreateResponse> {\n const fields = this.getFields();\n const columns = Object.values(fields).map((f) => f.intoColumnCreateDto());\n const foreignKeys: SyntropixDBForeignKey[] = this.getAssociations().map((f) => ({\n fromTableName: this.getTableName(),\n fromColumnName: f.name,\n toTableName: f.tableName,\n toColumnName: f.columnName,\n onDelete: f.onDelete,\n onUpdate: f.onUpdate,\n }));\n const indexes = this.getIndexes();\n\n return await client.table.createTable({\n name: this.getTableName(),\n displayName: this.getDisplayName() || undefined,\n description: this.getDescription() || '',\n columns,\n foreignKeys,\n indexes,\n });\n }\n\n static async dropTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.dropTable({ tableName: this.getTableName() });\n }\n\n static async renameTable(newName: string, client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.renameTable({\n tableName: this.getTableName(),\n newTableName: newName,\n });\n }\n\n static async truncateTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.truncateTable({ tableName: this.getTableName() });\n }\n\n static async getTableSchema(client: SyntropixClient = new SyntropixClient()): Promise<TableSchemaResponse> {\n return await client.table.getTableSchema({ tableName: this.getTableName() });\n }\n\n // Data operations\n static async create<T extends BaseModel>(\n this: new (data?: any) => T,\n data: Record<string, any>,\n client: SyntropixClient = new SyntropixClient(),\n ): Promise<any> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns: string[] = [];\n const values: any[] = [];\n\n for (const [key, value] of Object.entries(data)) {\n if (key in fields) {\n columns.push(fields[key].name);\n values.push(value);\n } else {\n throw new Error(`Invalid field: ${key}`);\n }\n }\n\n return client.data.insertOne({\n tableName: model.getTableName(),\n data: {\n columns,\n values: [values],\n },\n });\n }\n\n async save(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const fields = this.getFields();\n\n if (pkValue === null || pkValue === undefined) {\n const data: Record<string, any> = {};\n for (const [key, field] of Object.entries(fields)) {\n data[key] = (this as any)[key];\n }\n return (this.constructor as typeof BaseModel).create(data, client);\n }\n\n const columns: string[] = [];\n const values: any[] = [];\n for (const [key, field] of Object.entries(fields)) {\n if (field.name !== pk?.name) {\n columns.push(field.name);\n values.push((this as any)[key]);\n }\n }\n\n return (\n client ||\n this.client.data.updateByPrimaryKey(pkValue, {\n tableName: this.getTableName(),\n payload: {\n filter: [[]],\n columns,\n values,\n },\n })\n );\n }\n\n async remove(filter?: Filter, _client?: SyntropixClient | null): Promise<number> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const finalFilter = filter || OR(AND(EQ(pk?.name || 'id', pkValue)));\n\n return (\n _client ||\n this.client.data.deleteData({\n tableName: this.getTableName(),\n payload: {\n filter: finalFilter,\n },\n })\n );\n }\n\n static async bulkCreate<T extends BaseModel>(\n this: new (data?: any) => T,\n datas: Record<string, any>[],\n batchSize: number = 32,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n if (!datas.length) return 0;\n if (batchSize <= 0) throw new Error('Batch size must be greater than 0');\n\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n let cnt = 0;\n batchSize = Math.min(batchSize, 128);\n\n const columns = Object.keys(datas[0]);\n const columnsSet = new Set(columns);\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n let values: any[][] = [];\n const client = _client || new SyntropixClient();\n\n for (const data of datas) {\n if (columnsSet.size !== new Set(Object.keys(data)).size || !columns.every((c) => c in data)) {\n throw new Error('All data must have the same columns');\n }\n\n values.push(columns.map((c) => data[c]));\n\n if (values.length === batchSize) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n values = [];\n }\n }\n\n if (values.length > 0) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n }\n\n return cnt;\n }\n\n static async update<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n data: Record<string, any>,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns = Object.keys(data);\n\n if (!columns.length) {\n throw new Error('No columns to update');\n }\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n const values = columns.map((c) => data[c]);\n const client = _client || new SyntropixClient();\n\n return client.data.updateData({\n tableName: model.getTableName(),\n payload: {\n filter,\n columns: columns.map((c) => fields[c].name),\n values,\n },\n });\n }\n\n static async delete<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = _client || new SyntropixClient();\n\n return client.data.deleteData({\n tableName: model.getTableName(),\n payload: { filter },\n });\n }\n\n static async get<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n select?: string[],\n _client?: SyntropixClient | null,\n ): Promise<T> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const client = _client || new SyntropixClient();\n\n const data = await client.data.queryOne({\n tableName: model.getTableName(),\n query: {\n filter,\n select: select || Object.values(fields).map((f) => f.name),\n limit: 1,\n },\n });\n\n return new this(data);\n }\n\n static async filter<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter: Filter;\n sort?: Sort[];\n aggregate?: Aggregate[];\n join?: Join;\n limit?: number;\n offset?: number;\n groupBy?: GroupBy;\n select?: string[];\n _client?: SyntropixClient | null;\n },\n ): Promise<T[]> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter,\n sort: options.sort,\n aggregate: options.aggregate,\n join: options.join ? [options.join] : undefined,\n limit: options.limit,\n offset: options.offset,\n groupBy: options.groupBy,\n select: options.select,\n },\n });\n\n return data.map((item: any) => new this(item));\n }\n\n static async count<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter?: Filter;\n join?: Join;\n groupBy?: GroupBy;\n _client?: SyntropixClient | null;\n } = {},\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter || [[GTE('id', Value(0))]],\n aggregate: [\n {\n column: 'id',\n function: AggregateFunction.Count,\n alias: 'count',\n },\n ],\n join: options.join ? [options.join] : undefined,\n limit: 1,\n offset: 0,\n groupBy: options.groupBy,\n select: ['count'],\n },\n });\n\n return data.length > 0 ? data[0].count : 0;\n }\n\n toString(): string {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n const value = (this as any)[key];\n if (!(value instanceof Field)) {\n data[key] = value;\n }\n }\n\n data._extra = this._extra;\n return `${this.constructor.name}(${JSON.stringify(data).slice(1, -1)})`;\n }\n\n toJSON(): Record<string, any> {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n data[key] = (this as any)[key];\n }\n\n return { ...data, ...this._extra };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/types/model/access.ts","../src/types/model/db-index.ts","../src/types/model/filter.ts","../src/types/model/foreign-key.ts","../src/core/client/base-client.ts","../src/core/config.ts","../src/core/filter-builder.ts","../src/core/client/data-client.ts","../src/core/client/table-client.ts","../src/core/client/syntropix-client.ts","../src/core/data-type.ts","../src/core/field.ts","../src/core/base-model.ts"],"names":["AccessType","None","Read","Write","Admin","IndexType","Gin","GinTrgmOps","IvfflatL2Ops","InfflatCosineOps","InfflatIpOps","SortType","Descending","Ascending","AggregateFunction","FilterOperation","ForeignKeyAction","Cascade","Restrict","SetNull","NoAction","SetDefault","handleError","error","axiosErr","response","data","status","Error","message","BaseClient","config","headers","Authorization","apiKey","url","path","startsWith","slice","baseUrl","get","axios","params","content","EJSON","parse","JSON","stringify","isAxiosError","console","post","ClientConfig","timeout","retries","process","env","SYNTROPIX_API_KEY","SYNTROPIX_API_URL","SYNTROPIX_API_TIMEOUT","SYNTROPIX_API_RETRIES","endsWith","AND","conditions","OR","EQ","field","value","columnName","operator","staticValue","NE","NEQ","GT","GTE","LT","LTE","IN","values","In","CONTAINS","Contains","OVERLAP","Overlap","I_LIKE","pattern","ILike","NOT_I_LIKE","NotILike","NOT_IN","NotIn","LIKE","Like","NOT_LIKE","NotLike","IS_NULL","IsNull","IS_NOT_NULL","IsNotNull","BETWEEN","min","max","Between","EQ_COL","otherField","columnValue","NE_COL","GT_COL","GTE_COL","LT_COL","LTE_COL","SIMILARITY","options","Similarity","simiarityOptions","SIMILARITY_DISTANCE","SimilarityDistance","WORD_SIMILARITY","WordSimilarity","WORD_SIMILARITY_DISTANCE","WordSimilarityDistance","STRICT_WORD_SIMILARITY","StrictWordSimilarity","STRICT_WORD_SIMILARITY_DISTANCE","StrictWordSimilarityDistance","EUCLIDEAN_DISTANCE","EuclideanDistance","NEGATIVE_INNER_PRODUCT","NegativeInnerProduct","COSINE_DISTANCE","CosineDistance","Value","FilterWrapper","filter","undefined","Array","isArray","every","item","DataClient","client","insertData","insertOne","updateByPrimaryKey","pk","queryOne","model","query","One","queryMany","Many","map","updateData","deleteData","TableClient","createTable","dropTable","renameTable","truncateTable","addColumn","dropColumn","modifyColumn","getTableSchema","getTableList","SyntropixClient","_tableClient","_dataClient","table","ArrayDataType","String","maxLength","Decimal","precision","scale","Text","Integer","BigInteger","Double","DateTime","Timestamp","Date","Boolean","Money","Uuid","Enum","name","variants","Json","ColumnDataType","Vector","dimensions","dataType","Field","displayName","description","columnType","isPrimaryKey","isNullable","autoIncrement","default","defaultAccess","toLowerCase","intoColumnCreateDto","ForeignKeyField","tableName","onDelete","onUpdate","StringField","TextField","IntegerField","BooleanField","DateTimeField","TimestampField","DateField","JsonField","UuidField","VectorField","ArrayField","EnumField","MoneyField","DecimalField","DoubleField","FIELDS_KEY","Symbol","TABLE_NAME_KEY","DISPLAY_NAME_KEY","DESCRIPTION_KEY","INDEXES_KEY","PATH_KEY","Column","target","propertyKey","fields","Reflect","getMetadata","fieldName","type","primary","nullable","defineMetadata","Description","DisplayName","Path","Indexes","indexes","ForeignKey","BaseModel","_client","_extra","getFields","columnToPropertyMap","propertyName","Object","entries","key","getTableName","getDisplayName","getDescription","metadataDescription","getIndexes","getPath","hasPrimaryKey","getPrimaryKeyName","getAssociations","f","getPrimaryKey","columns","foreignKeys","fromTableName","fromColumnName","toTableName","toColumnName","newName","newTableName","create","push","save","pkValue","payload","remove","finalFilter","bulkCreate","datas","batchSize","length","cnt","Math","keys","columnsSet","Set","col","size","c","update","delete","select","limit","sort","aggregate","join","offset","groupBy","count","column","function","Count","alias","toString","toJSON"],"mappings":"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","file":"index.js","sourcesContent":["import { Filter } from './filter';\n\nexport const AccessType = {\n None: 'None',\n Read: 'Read',\n Write: 'Write',\n Admin: 'Admin',\n} as const;\n\nexport type AccessType = (typeof AccessType)[keyof typeof AccessType];\n\nexport interface SyntropixDBRowAccess {\n read?: Filter;\n write?: Filter;\n}\n\nexport interface SyntropixDBAccess {\n tableAccess: AccessType;\n rowAccess?: Record<string, SyntropixDBRowAccess>;\n columnAccess: Record<string, AccessType>;\n createdAt: Date;\n updatedAt: Date;\n}\n","export const IndexType = {\n Gin: 'Gin',\n GinTrgmOps: 'GinTrgmOps',\n IvfflatL2Ops: 'IvfflatL2Ops',\n InfflatCosineOps: 'InfflatCosineOps',\n InfflatIpOps: 'InfflatIpOps',\n} as const;\n\nexport type IndexType = (typeof IndexType)[keyof typeof IndexType];\n\nexport interface SyntropixDBIndex {\n name?: string;\n unique: boolean;\n nullsNotDistinct: boolean;\n columns: string[];\n indexType: IndexType;\n}\n","export const SortType = {\n Descending: 'Descending',\n Ascending: 'Ascending',\n} as const;\n\nexport type SortType = (typeof SortType)[keyof typeof SortType];\n\nexport enum AggregateFunction {\n Count = 'Count',\n Sum = 'Sum',\n Avg = 'Avg',\n Min = 'Min',\n Max = 'Max',\n CountDistinct = 'CountDistinct',\n}\n\nexport interface Join {\n table: string;\n on: any;\n}\n\nexport interface Aggregate {\n column: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n column: string;\n direction: SortType;\n}\n\nexport interface SimilarityOptions {\n threshold: number;\n order?: SortType;\n alias?: string;\n}\n\nexport enum FilterOperation {\n LT = 'LT',\n LTE = 'LTE',\n GT = 'GT',\n GTE = 'GTE',\n EQ = 'EQ',\n NEQ = 'NEQ',\n Between = 'Between',\n In = 'In',\n Contains = 'Contains',\n Overlap = 'Overlap',\n NotIn = 'NotIn',\n Like = 'Like',\n NotLike = 'NotLike',\n ILike = 'ILike',\n NotILike = 'NotILike',\n IsNull = 'IsNull',\n IsNotNull = 'IsNotNull',\n Similarity = 'Similarity',\n SimilarityDistance = 'SimilarityDistance',\n WordSimilarity = 'WordSimilarity',\n WordSimilarityDistance = 'WordSimilarityDistance',\n StrictWordSimilarity = 'StrictWordSimilarity',\n StrictWordSimilarityDistance = 'StrictWordSimilarityDistance',\n EuclideanDistance = 'EuclideanDistance',\n NegativeInnerProduct = 'NegativeInnerProduct',\n CosineDistance = 'CosineDistance',\n}\n\nexport interface FilterItem {\n columnName: string;\n operator: FilterOperation;\n staticValue?: any;\n columnValue?: string;\n simiarityOptions?: SimilarityOptions;\n}\n\nexport type FilterGroup = FilterItem[];\n\nexport type Filter = FilterGroup[];\n","export const ForeignKeyAction = {\n Cascade: 'Cascade',\n Restrict: 'Restrict',\n SetNull: 'SetNull',\n NoAction: 'NoAction',\n SetDefault: 'SetDefault',\n} as const;\n\nexport type ForeignKeyAction = (typeof ForeignKeyAction)[keyof typeof ForeignKeyAction];\n\nexport interface SyntropixDBForeignKey {\n name?: string;\n fromTableName: string;\n fromColumnName: string;\n toTableName: string;\n toColumnName: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n}\n","import { ClientConfig } from '@/core/config';\nimport { SyntropixResponse } from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { EJSON } from 'bson';\n\nfunction handleError(error: AxiosError) {\n const axiosErr = error as AxiosError<SyntropixResponse<any>>;\n if (axiosErr.response?.data?.status === 'error') {\n throw new Error(axiosErr.response.data.message);\n }\n throw new Error(axiosErr.message);\n}\n\nexport class BaseClient {\n protected config: ClientConfig;\n\n constructor(config: ClientConfig) {\n this.config = config;\n }\n\n private headers() {\n return {\n 'Content-Type': 'application/json',\n Authorization: this.config.apiKey || '',\n };\n }\n\n private url(path: string) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n public async get<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.get(this.url(path), {\n headers: this.headers(),\n params: data,\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message as string);\n }\n return content.data as T;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to get data: Unknown error');\n }\n }\n\n public async post<T>(path: string, data: Record<string, any> = {}): Promise<T> {\n try {\n const response = await axios.post(this.url(path), data, {\n headers: this.headers(),\n });\n const content = EJSON.parse(JSON.stringify(response.data));\n if (content.status !== 'success') {\n throw new Error(content.message);\n }\n return content.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n handleError(error);\n }\n console.error(error);\n throw new Error('Failed to post data: Unknown error');\n }\n }\n}\n","export class ClientConfig {\n public apiKey?: string;\n public baseUrl?: string;\n public timeout?: number;\n public retries?: number;\n\n constructor(config?: any) {\n this.apiKey = config?.apiKey || process.env.SYNTROPIX_API_KEY;\n this.baseUrl = config?.baseUrl || process.env.SYNTROPIX_API_URL;\n this.timeout = config?.timeout || process.env.SYNTROPIX_API_TIMEOUT;\n this.retries = config?.retries || process.env.SYNTROPIX_API_RETRIES;\n\n if (!this.apiKey || !this.baseUrl) {\n throw new Error('API key and base URL are required');\n }\n\n if (!this.timeout) {\n this.timeout = 10000;\n }\n\n if (!this.retries) {\n this.retries = 3;\n }\n\n if (!this.baseUrl.endsWith('/')) {\n this.baseUrl += '/';\n }\n }\n}\n","import { Filter, FilterGroup, FilterItem, FilterOperation, SimilarityOptions } from '@/types';\n\nexport const AND = (...conditions: FilterItem[]): FilterGroup => conditions;\n\nexport const OR = (...conditions: FilterGroup[]): Filter => conditions;\n\nexport const EQ = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n staticValue: value,\n});\n\nexport const NE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n staticValue: value,\n});\n\nexport const GT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n staticValue: value,\n});\n\nexport const GTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n staticValue: value,\n});\n\nexport const LT = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n staticValue: value,\n});\n\nexport const LTE = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n staticValue: value,\n});\n\nexport const IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.In,\n staticValue: values,\n});\n\nexport const CONTAINS = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Contains,\n staticValue: value,\n});\n\nexport const OVERLAP = (field: string, value: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Overlap,\n staticValue: value,\n});\n\nexport const I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.ILike,\n staticValue: pattern,\n});\n\nexport const NOT_I_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotILike,\n staticValue: pattern,\n});\n\nexport const NOT_IN = (field: string, values: any[]): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotIn,\n staticValue: values,\n});\n\nexport const LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Like,\n staticValue: pattern,\n});\n\nexport const NOT_LIKE = (field: string, pattern: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NotLike,\n staticValue: pattern,\n});\n\nexport const IS_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNull,\n});\n\nexport const IS_NOT_NULL = (field: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.IsNotNull,\n});\n\nexport const BETWEEN = (field: string, min: any, max: any): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Between,\n staticValue: [min, max],\n});\n\n// Column comparison (compare two columns)\nexport const EQ_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EQ,\n columnValue: otherField,\n});\n\nexport const NE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NEQ,\n columnValue: otherField,\n});\n\nexport const GT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GT,\n columnValue: otherField,\n});\n\nexport const GTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.GTE,\n columnValue: otherField,\n});\n\nexport const LT_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LT,\n columnValue: otherField,\n});\n\nexport const LTE_COL = (field: string, otherField: string): FilterItem => ({\n columnName: field,\n operator: FilterOperation.LTE,\n columnValue: otherField,\n});\n\n// Similarity operations\nexport const SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.Similarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.SimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.WordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarity,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const STRICT_WORD_SIMILARITY_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.StrictWordSimilarityDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const EUCLIDEAN_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.EuclideanDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const NEGATIVE_INNER_PRODUCT = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.NegativeInnerProduct,\n staticValue: value,\n simiarityOptions: options,\n});\n\nexport const COSINE_DISTANCE = (field: string, value: any, options: SimilarityOptions): FilterItem => ({\n columnName: field,\n operator: FilterOperation.CosineDistance,\n staticValue: value,\n simiarityOptions: options,\n});\n\n// Helper function for values (backward compatibility)\nexport const Value = (value: any) => value;\n\n// Helper function for wrapping filter\nexport function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined {\n if (filter === undefined) {\n return undefined;\n }\n if (!Array.isArray(filter)) {\n return OR(AND(filter));\n } else if (!filter.every((item) => Array.isArray(item))) {\n return OR(filter);\n } else {\n return filter;\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { FilterWrapper } from '@/core/filter-builder';\nimport { DeleteDataDto, InsertDto, QueryDto, UpdateDto } from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class DataClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async insertData(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert', data);\n }\n\n async insertOne(data: InsertDto): Promise<any> {\n return await this.client.post<any>('/insert/one', data);\n }\n\n async updateByPrimaryKey(pk: string, data: UpdateDto): Promise<any> {\n return await this.client.post<any>(`/update/${pk}`, data);\n }\n\n async queryOne(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any>('/query', { One: data });\n if (model !== undefined) {\n return new model(response);\n }\n return response;\n }\n\n async queryMany(data: QueryDto, model?: any): Promise<any> {\n data.query.filter = FilterWrapper(data.query.filter);\n const response = await this.client.post<any[]>('/query', { Many: data });\n if (model !== undefined) {\n // In TypeScript, we would typically use a validation library or manual validation\n // For now, we'll return the data as-is, but in a real implementation you might want to use\n // a library like class-validator or zod for validation\n return response.map((item: any) => new model(item));\n }\n return response;\n }\n\n async updateData(data: UpdateDto): Promise<any> {\n return await this.client.post<any>('/update', data);\n }\n\n async deleteData(data: DeleteDataDto): Promise<any> {\n return await this.client.post<any>('/delete', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport {\n TableAddColumnDto,\n TableCreateDto,\n TableCreateResponse,\n TableDropColumnDto,\n TableDropDto,\n TableGetListDto,\n TableGetSchemaDto,\n TableListResponse,\n TableModifyColumnDto,\n TableRenameDto,\n TableSchemaResponse,\n TableTruncateDto,\n} from '@/types';\nimport { BaseClient } from './base-client';\n\nexport class TableClient {\n private client: BaseClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.client = new BaseClient(config);\n }\n\n async createTable(data: TableCreateDto): Promise<TableCreateResponse> {\n return await this.client.post<TableCreateResponse>('/table/create', data);\n }\n\n async dropTable(data: TableDropDto): Promise<any> {\n return await this.client.post<any>('/table/drop', data);\n }\n\n async renameTable(data: TableRenameDto): Promise<any> {\n return await this.client.post<any>('/table/rename', data);\n }\n\n async truncateTable(data: TableTruncateDto): Promise<any> {\n return await this.client.post<any>('/table/truncate', data);\n }\n\n async addColumn(data: TableAddColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/add', data);\n }\n\n async dropColumn(data: TableDropColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/drop', data);\n }\n\n async modifyColumn(data: TableModifyColumnDto): Promise<any> {\n return await this.client.post<any>('/table/column/modify', data);\n }\n\n async getTableSchema(data: TableGetSchemaDto): Promise<TableSchemaResponse> {\n return await this.client.get<TableSchemaResponse>('/table/schema', data);\n }\n\n async getTableList(data: TableGetListDto): Promise<TableListResponse> {\n return await this.client.get<TableListResponse>('/table/list', data);\n }\n}\n","import { ClientConfig } from '@/core/config';\nimport { DataClient } from './data-client';\nimport { TableClient } from './table-client';\n\nexport class SyntropixClient {\n private config: ClientConfig;\n private _tableClient?: TableClient;\n private _dataClient?: DataClient;\n\n constructor(config: ClientConfig = new ClientConfig()) {\n this.config = config;\n }\n\n get table(): TableClient {\n if (!this._tableClient) {\n this._tableClient = new TableClient(this.config);\n }\n return this._tableClient;\n }\n\n get data(): DataClient {\n if (!this._dataClient) {\n this._dataClient = new DataClient(this.config);\n }\n return this._dataClient;\n }\n}\n","import { ArrayDataTypeSchema, ArrayType, DecimalType, EnumType, MoneyType, StringType, VectorType } from '@/types';\n\nexport const ArrayDataType = {\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n Text: 'Text',\n Integer: 'Integer',\n BigInteger: 'BigInteger',\n Double: 'Double',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Boolean: 'Boolean',\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Uuid: 'Uuid',\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Json: 'Json',\n} as const;\n\nexport const ColumnDataType = {\n Integer: 'Integer',\n String: (maxLength: number): StringType => ({ String: maxLength }),\n Text: 'Text',\n Boolean: 'Boolean',\n DateTime: 'DateTime',\n Timestamp: 'Timestamp',\n Date: 'Date',\n Json: 'Json',\n Uuid: 'Uuid',\n Double: 'Double',\n\n Vector: (dimensions: number): VectorType => ({ Vector: dimensions }),\n Array: (dataType: ArrayDataTypeSchema): ArrayType => ({ Array: dataType }),\n Enum: (name: string, variants: string[]): EnumType => ({ Enum: { name, variants } }),\n Money: (precision: number, scale: number): MoneyType => ({ Money: precision && scale ? [precision, scale] : null }),\n Decimal: (precision: number, scale: number): DecimalType => ({\n Decimal: precision && scale ? [precision, scale] : null,\n }),\n} as const;\n","import {\n AccessType,\n ArrayDataTypeSchema,\n ColumnCreateDto,\n ColumnDataTypeSchema,\n FieldOptions,\n ForeignKeyAction,\n ForeignKeyFieldOptions,\n} from '@/types';\nimport { ColumnDataType } from './data-type';\n\nexport abstract class Field {\n name: string = '';\n displayName: string = '';\n description: string = '';\n columnType: ColumnDataTypeSchema;\n isPrimaryKey: boolean = false;\n isNullable: boolean = false;\n autoIncrement: boolean = false;\n default?: any;\n defaultAccess?: AccessType;\n\n constructor(columnType: ColumnDataTypeSchema, options: FieldOptions = {}) {\n this.columnType = columnType;\n this.name = options.name?.toLowerCase() || '';\n this.displayName = options.displayName || '';\n this.description = options.description || '';\n this.isPrimaryKey = options.isPrimaryKey || false;\n this.isNullable = options.isNullable || false;\n this.autoIncrement = options.autoIncrement || false;\n this.default = options.default;\n this.defaultAccess = options.defaultAccess;\n }\n\n intoColumnCreateDto(): ColumnCreateDto {\n return {\n name: this.name,\n displayName: this.displayName,\n columnType: this.columnType,\n description: this.description,\n isPrimaryKey: this.isPrimaryKey,\n isNullable: this.isNullable,\n autoIncrement: this.autoIncrement,\n default: this.default,\n defaultAccess: this.defaultAccess,\n };\n }\n}\n\nexport class ForeignKeyField extends Field {\n tableName: string;\n columnName: string;\n onDelete: ForeignKeyAction;\n onUpdate: ForeignKeyAction;\n\n constructor(\n columnType: ColumnDataTypeSchema,\n tableName: string,\n columnName: string,\n options: ForeignKeyFieldOptions = {},\n ) {\n super(columnType, options);\n this.tableName = tableName;\n this.columnName = columnName;\n this.onDelete = options.onDelete || ForeignKeyAction.Cascade;\n this.onUpdate = options.onUpdate || ForeignKeyAction.Cascade;\n }\n}\n\nexport class StringField extends Field {\n constructor(maxLength: number, options: FieldOptions = {}) {\n super(ColumnDataType.String(maxLength), options);\n }\n}\n\nexport class TextField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Text, options);\n }\n}\n\nexport class IntegerField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Integer, options);\n }\n}\n\nexport class BooleanField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Boolean, options);\n }\n}\n\nexport class DateTimeField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.DateTime, options);\n }\n}\n\nexport class TimestampField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Timestamp, options);\n }\n}\n\nexport class DateField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Date, options);\n }\n}\n\nexport class JsonField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Json, options);\n }\n}\n\nexport class UuidField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Uuid, options);\n }\n}\n\nexport class VectorField extends Field {\n constructor(dimensions: number, options: FieldOptions = {}) {\n super(ColumnDataType.Vector(dimensions), options);\n }\n}\n\nexport class ArrayField extends Field {\n constructor(dataType: ArrayDataTypeSchema, options: FieldOptions = {}) {\n super(ColumnDataType.Array(dataType), options);\n }\n}\n\nexport class EnumField extends Field {\n constructor(name: string, variants: string[], options: FieldOptions = {}) {\n super(ColumnDataType.Enum(name, variants), options);\n }\n}\n\nexport class MoneyField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Money(precision, scale), options);\n }\n}\n\nexport class DecimalField extends Field {\n constructor(precision: number, scale: number, options: FieldOptions = {}) {\n super(ColumnDataType.Decimal(precision, scale), options);\n }\n}\n\nexport class DoubleField extends Field {\n constructor(options: FieldOptions = {}) {\n super(ColumnDataType.Double, options);\n }\n}\n","import {\n Aggregate,\n AggregateFunction,\n ColumnCreateOptions,\n ColumnDataTypeSchema,\n Filter,\n ForeignKeyAction,\n GroupBy,\n Join,\n Sort,\n SyntropixDBForeignKey,\n SyntropixDBIndex,\n TableCreateResponse,\n TableSchemaResponse,\n} from '@/types';\nimport 'reflect-metadata';\nimport { SyntropixClient } from './client';\nimport { ColumnDataType } from './data-type';\nimport { Field, ForeignKeyField, IntegerField } from './field';\nimport { AND, EQ, GTE, OR, Value } from './filter-builder';\n\n// Metadata keys\nconst FIELDS_KEY = Symbol('fields');\nconst TABLE_NAME_KEY = Symbol('tableName');\nconst DISPLAY_NAME_KEY = Symbol('displayName');\nconst DESCRIPTION_KEY = Symbol('description');\nconst INDEXES_KEY = Symbol('indexes');\nconst PATH_KEY = Symbol('path');\n\n// Column decorator\nexport function Column(options: ColumnCreateOptions = {}) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const fieldName = options.name || propertyKey.toLowerCase();\n const columnType = options.type || ColumnDataType.Text;\n\n const field = new (class extends Field {\n constructor() {\n super(columnType, {\n name: fieldName,\n displayName: options.displayName,\n description: options.description,\n isPrimaryKey: options.primary,\n isNullable: options.nullable,\n autoIncrement: options.autoIncrement,\n default: options.default,\n defaultAccess: options.defaultAccess,\n });\n }\n })();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\n// Description decorator\nexport function Description(description: string) {\n return function (target: any) {\n Reflect.defineMetadata(DESCRIPTION_KEY, description, target);\n };\n}\n\nexport function DisplayName(displayName: string) {\n return function (target: any) {\n Reflect.defineMetadata(DISPLAY_NAME_KEY, displayName, target);\n };\n}\n\nexport function Path(path: string) {\n return function (target: any) {\n Reflect.defineMetadata(PATH_KEY, path, target);\n };\n}\n\nexport function Indexes(indexes: SyntropixDBIndex[]) {\n return function (target: any) {\n Reflect.defineMetadata(INDEXES_KEY, indexes, target);\n };\n}\n\n// ForeignKey decorator\nexport function ForeignKey(\n tableName: string,\n columnName: string,\n options: {\n type?: ColumnDataTypeSchema;\n displayName?: string;\n name?: string;\n onDelete?: ForeignKeyAction;\n onUpdate?: ForeignKeyAction;\n description?: string;\n nullable?: boolean;\n default?: any;\n } = {},\n) {\n return function (target: any, propertyKey: string) {\n const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};\n\n const field = new ForeignKeyField(options.type || ColumnDataType.Integer, tableName, columnName, {\n displayName: options.displayName,\n description: options.description,\n isNullable: options.nullable,\n default: options.default,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n });\n field.name = options.name || propertyKey.toLowerCase();\n\n fields[propertyKey] = field;\n Reflect.defineMetadata(FIELDS_KEY, fields, target.constructor);\n };\n}\n\nexport class BaseModel {\n private _client?: SyntropixClient;\n private _extra: Record<string, any> = {};\n\n constructor(data: Record<string, any> = {}) {\n const fields = this.getFields();\n\n // Create a mapping from column names to property names\n const columnToPropertyMap: Record<string, string> = {};\n for (const [propertyName, field] of Object.entries(fields)) {\n columnToPropertyMap[field.name] = propertyName;\n }\n\n for (const [key, value] of Object.entries(data)) {\n // Check if key is a property name\n if (key in fields) {\n (this as any)[key] = value;\n }\n // Check if key is a column name\n else if (key in columnToPropertyMap) {\n (this as any)[columnToPropertyMap[key]] = value;\n }\n // Otherwise, store in _extra\n else {\n this._extra[key] = value;\n }\n }\n }\n\n // Static metadata getters\n protected static getTableName(): string {\n const tableName = Reflect.getMetadata(TABLE_NAME_KEY, this);\n if (tableName) return tableName;\n\n // Check for static tableName property\n if ('tableName' in this && typeof (this as any).tableName === 'string') {\n return (this as any).tableName;\n }\n\n return this.name.toLowerCase();\n }\n\n protected static getDisplayName(): string | null {\n const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);\n if (displayName) return displayName;\n\n // Check for static displayName property\n if ('displayName' in this && typeof (this as any).displayName === 'string') {\n return (this as any).displayName;\n }\n\n return null;\n }\n\n public static getDescription(): string {\n const metadataDescription = Reflect.getMetadata(DESCRIPTION_KEY, this);\n if (metadataDescription) return metadataDescription;\n\n // Check for static description property as fallback\n if ('description' in this && typeof (this as any).description === 'string') {\n return (this as any).description;\n }\n\n return '';\n }\n\n protected static getIndexes(): SyntropixDBIndex[] {\n const indexes = Reflect.getMetadata(INDEXES_KEY, this);\n if (indexes) return indexes;\n\n if ('indexes' in this && Array.isArray((this as any).indexes)) {\n return (this as any).indexes;\n }\n\n return [];\n }\n\n protected static getPath(): string | undefined {\n const path = Reflect.getMetadata(PATH_KEY, this);\n if (path) return path;\n\n if ('path' in this && typeof (this as any).path === 'string') {\n return (this as any).path;\n }\n\n return undefined;\n }\n\n protected static getFields(): Record<string, Field> {\n const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};\n\n // Check if there's a primary key\n let hasPrimaryKey = false;\n for (const field of Object.values(fields) as Field[]) {\n if (field.isPrimaryKey) {\n hasPrimaryKey = true;\n field.isNullable = false;\n break;\n }\n }\n\n // If no primary key, add default 'id' field\n if (!hasPrimaryKey && !('id' in fields)) {\n fields['id'] = new IntegerField({\n isPrimaryKey: true,\n isNullable: false,\n autoIncrement: true,\n description: 'Primary key',\n });\n fields['id'].name = 'id';\n }\n\n return fields;\n }\n\n protected static getPrimaryKeyName(): string {\n const fields = this.getFields();\n for (const [key, field] of Object.entries(fields)) {\n if (field.isPrimaryKey) {\n return field.name;\n }\n }\n return 'id';\n }\n\n protected static getAssociations(): ForeignKeyField[] {\n const fields = this.getFields();\n return Object.values(fields).filter((f) => f instanceof ForeignKeyField) as ForeignKeyField[];\n }\n\n // Instance metadata getters\n protected getFields(): Record<string, Field> {\n return (this.constructor as typeof BaseModel).getFields();\n }\n\n protected getTableName(): string {\n return (this.constructor as typeof BaseModel).getTableName();\n }\n\n protected getDisplayName(): string | null {\n return (this.constructor as typeof BaseModel).getDisplayName();\n }\n\n protected getPrimaryKeyName(): string {\n return (this.constructor as typeof BaseModel).getPrimaryKeyName();\n }\n\n protected getPrimaryKey(): Field | undefined {\n const fields = this.getFields();\n for (const field of Object.values(fields)) {\n if (field.isPrimaryKey) {\n return field;\n }\n }\n return undefined;\n }\n\n // Client getter\n protected get client(): SyntropixClient {\n if (!this._client) {\n this._client = new SyntropixClient();\n }\n return this._client;\n }\n\n // Table operations\n static async createTable(client: SyntropixClient = new SyntropixClient()): Promise<TableCreateResponse> {\n const fields = this.getFields();\n const columns = Object.values(fields).map((f) => f.intoColumnCreateDto());\n const foreignKeys: SyntropixDBForeignKey[] = this.getAssociations().map((f) => ({\n fromTableName: this.getTableName(),\n fromColumnName: f.name,\n toTableName: f.tableName,\n toColumnName: f.columnName,\n onDelete: f.onDelete,\n onUpdate: f.onUpdate,\n }));\n const indexes = this.getIndexes();\n const path = this.getPath();\n return await client.table.createTable({\n name: this.getTableName(),\n displayName: this.getDisplayName() || undefined,\n description: this.getDescription() || '',\n columns,\n foreignKeys,\n indexes,\n path,\n });\n }\n\n static async dropTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.dropTable({ tableName: this.getTableName() });\n }\n\n static async renameTable(newName: string, client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.renameTable({\n tableName: this.getTableName(),\n newTableName: newName,\n });\n }\n\n static async truncateTable(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n return await client.table.truncateTable({ tableName: this.getTableName() });\n }\n\n static async getTableSchema(client: SyntropixClient = new SyntropixClient()): Promise<TableSchemaResponse> {\n return await client.table.getTableSchema({ tableName: this.getTableName() });\n }\n\n // Data operations\n static async create<T extends BaseModel>(\n this: new (data?: any) => T,\n data: Record<string, any>,\n client: SyntropixClient = new SyntropixClient(),\n ): Promise<any> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns: string[] = [];\n const values: any[] = [];\n\n for (const [key, value] of Object.entries(data)) {\n if (key in fields) {\n columns.push(fields[key].name);\n values.push(value);\n } else {\n throw new Error(`Invalid field: ${key}`);\n }\n }\n\n return client.data.insertOne({\n tableName: model.getTableName(),\n data: {\n columns,\n values: [values],\n },\n });\n }\n\n async save(client: SyntropixClient = new SyntropixClient()): Promise<any> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const fields = this.getFields();\n\n if (pkValue === null || pkValue === undefined) {\n const data: Record<string, any> = {};\n for (const [key, field] of Object.entries(fields)) {\n data[key] = (this as any)[key];\n }\n return (this.constructor as typeof BaseModel).create(data, client);\n }\n\n const columns: string[] = [];\n const values: any[] = [];\n for (const [key, field] of Object.entries(fields)) {\n if (field.name !== pk?.name) {\n columns.push(field.name);\n values.push((this as any)[key]);\n }\n }\n\n return (\n client ||\n this.client.data.updateByPrimaryKey(pkValue, {\n tableName: this.getTableName(),\n payload: {\n filter: [[]],\n columns,\n values,\n },\n })\n );\n }\n\n async remove(filter?: Filter, _client?: SyntropixClient | null): Promise<number> {\n const pk = this.getPrimaryKey();\n const pkValue = (this as any)[this.getPrimaryKeyName()];\n const finalFilter = filter || OR(AND(EQ(pk?.name || 'id', pkValue)));\n\n return (\n _client ||\n this.client.data.deleteData({\n tableName: this.getTableName(),\n payload: {\n filter: finalFilter,\n },\n })\n );\n }\n\n static async bulkCreate<T extends BaseModel>(\n this: new (data?: any) => T,\n datas: Record<string, any>[],\n batchSize: number = 32,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n if (!datas.length) return 0;\n if (batchSize <= 0) throw new Error('Batch size must be greater than 0');\n\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n let cnt = 0;\n batchSize = Math.min(batchSize, 128);\n\n const columns = Object.keys(datas[0]);\n const columnsSet = new Set(columns);\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n let values: any[][] = [];\n const client = _client || new SyntropixClient();\n\n for (const data of datas) {\n if (columnsSet.size !== new Set(Object.keys(data)).size || !columns.every((c) => c in data)) {\n throw new Error('All data must have the same columns');\n }\n\n values.push(columns.map((c) => data[c]));\n\n if (values.length === batchSize) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n values = [];\n }\n }\n\n if (values.length > 0) {\n cnt += await client.data.insertData({\n tableName: model.getTableName(),\n data: { columns: columns.map((c) => fields[c].name), values },\n });\n }\n\n return cnt;\n }\n\n static async update<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n data: Record<string, any>,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const columns = Object.keys(data);\n\n if (!columns.length) {\n throw new Error('No columns to update');\n }\n\n for (const col of columns) {\n if (!(col in fields)) {\n throw new Error(`Invalid field: ${col}`);\n }\n }\n\n const values = columns.map((c) => data[c]);\n const client = _client || new SyntropixClient();\n\n return client.data.updateData({\n tableName: model.getTableName(),\n payload: {\n filter,\n columns: columns.map((c) => fields[c].name),\n values,\n },\n });\n }\n\n static async delete<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n _client?: SyntropixClient | null,\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = _client || new SyntropixClient();\n\n return client.data.deleteData({\n tableName: model.getTableName(),\n payload: { filter },\n });\n }\n\n static async get<T extends BaseModel>(\n this: new (data?: any) => T,\n filter: Filter,\n select?: string[],\n _client?: SyntropixClient | null,\n ): Promise<T> {\n const model = this as any as typeof BaseModel;\n const fields = model.getFields();\n const client = _client || new SyntropixClient();\n\n const data = await client.data.queryOne({\n tableName: model.getTableName(),\n query: {\n filter,\n select: select || Object.values(fields).map((f) => f.name),\n limit: 1,\n },\n });\n\n return new this(data);\n }\n\n static async filter<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter: Filter;\n sort?: Sort[];\n aggregate?: Aggregate[];\n join?: Join;\n limit?: number;\n offset?: number;\n groupBy?: GroupBy;\n select?: string[];\n _client?: SyntropixClient | null;\n },\n ): Promise<T[]> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter,\n sort: options.sort,\n aggregate: options.aggregate,\n join: options.join ? [options.join] : undefined,\n limit: options.limit,\n offset: options.offset,\n groupBy: options.groupBy,\n select: options.select,\n },\n });\n\n return data.map((item: any) => new this(item));\n }\n\n static async count<T extends BaseModel>(\n this: new (data?: any) => T,\n options: {\n filter?: Filter;\n join?: Join;\n groupBy?: GroupBy;\n _client?: SyntropixClient | null;\n } = {},\n ): Promise<number> {\n const model = this as any as typeof BaseModel;\n const client = options._client || new SyntropixClient();\n\n const data = await client.data.queryMany({\n tableName: model.getTableName(),\n query: {\n filter: options.filter || [[GTE('id', Value(0))]],\n aggregate: [\n {\n column: 'id',\n function: AggregateFunction.Count,\n alias: 'count',\n },\n ],\n join: options.join ? [options.join] : undefined,\n limit: 1,\n offset: 0,\n groupBy: options.groupBy,\n select: ['count'],\n },\n });\n\n return data.length > 0 ? data[0].count : 0;\n }\n\n toString(): string {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n const value = (this as any)[key];\n if (!(value instanceof Field)) {\n data[key] = value;\n }\n }\n\n data._extra = this._extra;\n return `${this.constructor.name}(${JSON.stringify(data).slice(1, -1)})`;\n }\n\n toJSON(): Record<string, any> {\n const fields = this.getFields();\n const data: Record<string, any> = {};\n\n for (const key of Object.keys(fields)) {\n data[key] = (this as any)[key];\n }\n\n return { ...data, ...this._extra };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syntropix/database",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "description": "TypeScript SDK for database operations with ORM support",
6
6
  "main": "dist/index.js",