@syntropix/database 0.2.4 → 0.2.6

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,7 +725,7 @@ 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
731
  var PATH_KEY = Symbol("path");
@@ -759,6 +759,24 @@ function Description(description) {
759
759
  };
760
760
  }
761
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");
762
780
  function ForeignKey(tableName, columnName, options = {}) {
763
781
  return function(target, propertyKey) {
764
782
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -808,7 +826,7 @@ var BaseModel = class {
808
826
  return this.name.toLowerCase();
809
827
  }
810
828
  static getDisplayName() {
811
- const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);
829
+ const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);
812
830
  if (displayName) return displayName;
813
831
  if ("displayName" in this && typeof this.displayName === "string") {
814
832
  return this.displayName;
@@ -824,10 +842,20 @@ var BaseModel = class {
824
842
  return "";
825
843
  }
826
844
  static getIndexes() {
827
- 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 [];
828
851
  }
829
852
  static getPath() {
830
- return Reflect.getMetadata(PATH_KEY, this) || "";
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;
831
859
  }
832
860
  static getFields() {
833
861
  const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};
@@ -1125,7 +1153,7 @@ var BaseModel = class {
1125
1153
  ],
1126
1154
  aggregate: [
1127
1155
  {
1128
- column: "id",
1156
+ columnName: "id",
1129
1157
  function: AggregateFunction.Count,
1130
1158
  alias: "count"
1131
1159
  }
@@ -1187,6 +1215,7 @@ exports.DateField = DateField;
1187
1215
  exports.DateTimeField = DateTimeField;
1188
1216
  exports.DecimalField = DecimalField;
1189
1217
  exports.Description = Description;
1218
+ exports.DisplayName = DisplayName;
1190
1219
  exports.DoubleField = DoubleField;
1191
1220
  exports.EQ = EQ;
1192
1221
  exports.EQ_COL = EQ_COL;
@@ -1207,6 +1236,7 @@ exports.IS_NOT_NULL = IS_NOT_NULL;
1207
1236
  exports.IS_NULL = IS_NULL;
1208
1237
  exports.I_LIKE = I_LIKE;
1209
1238
  exports.IndexType = IndexType;
1239
+ exports.Indexes = Indexes;
1210
1240
  exports.IntegerField = IntegerField;
1211
1241
  exports.JsonField = JsonField;
1212
1242
  exports.LIKE = LIKE;
@@ -1223,6 +1253,7 @@ exports.NOT_I_LIKE = NOT_I_LIKE;
1223
1253
  exports.NOT_LIKE = NOT_LIKE;
1224
1254
  exports.OR = OR;
1225
1255
  exports.OVERLAP = OVERLAP;
1256
+ exports.Path = Path;
1226
1257
  exports.SIMILARITY = SIMILARITY;
1227
1258
  exports.SIMILARITY_DISTANCE = SIMILARITY_DISTANCE;
1228
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","PATH_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","getPath","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');\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\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 getPath(): string {\n return Reflect.getMetadata(PATH_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 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"]}
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","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 tableName: string;\n onColumnName: string;\n}\n\nexport interface Aggregate {\n columnName: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n columnName: 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 columnName: '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
@@ -14,11 +14,11 @@ declare enum AggregateFunction {
14
14
  CountDistinct = "CountDistinct"
15
15
  }
16
16
  interface Join {
17
- table: string;
18
- on: any;
17
+ tableName: string;
18
+ onColumnName: string;
19
19
  }
20
20
  interface Aggregate {
21
- column: string;
21
+ columnName: string;
22
22
  function: AggregateFunction;
23
23
  alias: string;
24
24
  }
@@ -26,7 +26,7 @@ interface GroupBy {
26
26
  columns: string[];
27
27
  }
28
28
  interface Sort {
29
- column: string;
29
+ columnName: string;
30
30
  direction: SortType;
31
31
  }
32
32
  interface SimilarityOptions {
@@ -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,7 +490,7 @@ declare class BaseModel {
487
490
  protected static getDisplayName(): string | null;
488
491
  static getDescription(): string;
489
492
  protected static getIndexes(): SyntropixDBIndex[];
490
- protected static getPath(): string;
493
+ protected static getPath(): string | undefined;
491
494
  protected static getFields(): Record<string, Field>;
492
495
  protected static getPrimaryKeyName(): string;
493
496
  protected static getAssociations(): ForeignKeyField[];
@@ -601,4 +604,4 @@ declare const COSINE_DISTANCE: (field: string, value: any, options: SimilarityOp
601
604
  declare const Value: (value: any) => any;
602
605
  declare function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined;
603
606
 
604
- 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
@@ -14,11 +14,11 @@ declare enum AggregateFunction {
14
14
  CountDistinct = "CountDistinct"
15
15
  }
16
16
  interface Join {
17
- table: string;
18
- on: any;
17
+ tableName: string;
18
+ onColumnName: string;
19
19
  }
20
20
  interface Aggregate {
21
- column: string;
21
+ columnName: string;
22
22
  function: AggregateFunction;
23
23
  alias: string;
24
24
  }
@@ -26,7 +26,7 @@ interface GroupBy {
26
26
  columns: string[];
27
27
  }
28
28
  interface Sort {
29
- column: string;
29
+ columnName: string;
30
30
  direction: SortType;
31
31
  }
32
32
  interface SimilarityOptions {
@@ -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,7 +490,7 @@ declare class BaseModel {
487
490
  protected static getDisplayName(): string | null;
488
491
  static getDescription(): string;
489
492
  protected static getIndexes(): SyntropixDBIndex[];
490
- protected static getPath(): string;
493
+ protected static getPath(): string | undefined;
491
494
  protected static getFields(): Record<string, Field>;
492
495
  protected static getPrimaryKeyName(): string;
493
496
  protected static getAssociations(): ForeignKeyField[];
@@ -601,4 +604,4 @@ declare const COSINE_DISTANCE: (field: string, value: any, options: SimilarityOp
601
604
  declare const Value: (value: any) => any;
602
605
  declare function FilterWrapper(filter: Filter | FilterGroup | FilterItem | undefined): Filter | undefined;
603
606
 
604
- 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,7 +719,7 @@ 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
725
  var PATH_KEY = Symbol("path");
@@ -753,6 +753,24 @@ function Description(description) {
753
753
  };
754
754
  }
755
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");
756
774
  function ForeignKey(tableName, columnName, options = {}) {
757
775
  return function(target, propertyKey) {
758
776
  const fields = Reflect.getMetadata(FIELDS_KEY, target.constructor) || {};
@@ -802,7 +820,7 @@ var BaseModel = class {
802
820
  return this.name.toLowerCase();
803
821
  }
804
822
  static getDisplayName() {
805
- const displayName = Reflect.getMetadata(TABLE_DISPLAY_NAME_KEY, this);
823
+ const displayName = Reflect.getMetadata(DISPLAY_NAME_KEY, this);
806
824
  if (displayName) return displayName;
807
825
  if ("displayName" in this && typeof this.displayName === "string") {
808
826
  return this.displayName;
@@ -818,10 +836,20 @@ var BaseModel = class {
818
836
  return "";
819
837
  }
820
838
  static getIndexes() {
821
- 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 [];
822
845
  }
823
846
  static getPath() {
824
- return Reflect.getMetadata(PATH_KEY, this) || "";
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;
825
853
  }
826
854
  static getFields() {
827
855
  const fields = Reflect.getMetadata(FIELDS_KEY, this) || {};
@@ -1119,7 +1147,7 @@ var BaseModel = class {
1119
1147
  ],
1120
1148
  aggregate: [
1121
1149
  {
1122
- column: "id",
1150
+ columnName: "id",
1123
1151
  function: AggregateFunction.Count,
1124
1152
  alias: "count"
1125
1153
  }
@@ -1162,6 +1190,6 @@ var BaseModel = class {
1162
1190
  }
1163
1191
  };
1164
1192
 
1165
- 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 };
1166
1194
  //# sourceMappingURL=index.js.map
1167
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","PATH_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","getPath","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.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');\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\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 getPath(): string {\n return Reflect.getMetadata(PATH_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 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"]}
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","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 tableName: string;\n onColumnName: string;\n}\n\nexport interface Aggregate {\n columnName: string;\n function: AggregateFunction;\n alias: string;\n}\n\nexport interface GroupBy {\n columns: string[];\n}\n\nexport interface Sort {\n columnName: 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 columnName: '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.4",
3
+ "version": "0.2.6",
4
4
  "type": "module",
5
5
  "description": "TypeScript SDK for database operations with ORM support",
6
6
  "main": "dist/index.js",