inibase 1.0.0-rc.126 → 1.0.0-rc.128

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.d.ts CHANGED
@@ -132,36 +132,37 @@ export default class Inibase {
132
132
  * @param {boolean} [onlyLinesNumbers]
133
133
  * @return {*} {(Promise<Data | number | (Data | number)[] | null>)}
134
134
  */
135
- get(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: true, onlyLinesNumbers?: false): Promise<Data | null>;
136
- get(tableName: string, where: string | number, options?: Options, onlyOne?: boolean, onlyLinesNumbers?: false): Promise<Data | null>;
137
- get(tableName: string, where?: string | number | (string | number)[] | Criteria, options?: Options, onlyOne?: boolean, onlyLinesNumbers?: false): Promise<Data[] | null>;
138
- get(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: false | undefined, onlyLinesNumbers: true): Promise<number[] | null>;
139
- get(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: true, onlyLinesNumbers: true): Promise<number | null>;
135
+ get<TData extends Record<string, any> & Partial<Data>>(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: true, onlyLinesNumbers?: false): Promise<(Data & TData) | null>;
136
+ get<TData extends Record<string, any> & Partial<Data>>(tableName: string, where: string | number, options?: Options, onlyOne?: boolean, onlyLinesNumbers?: false): Promise<(Data & TData) | null>;
137
+ get<TData extends Record<string, any> & Partial<Data>>(tableName: string, where?: string | number | (string | number)[] | Criteria, options?: Options, onlyOne?: boolean, onlyLinesNumbers?: false): Promise<(Data & TData)[] | null>;
138
+ get<TData extends Record<string, any> & Partial<Data>>(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: false | undefined, onlyLinesNumbers: true): Promise<number[] | null>;
139
+ get<TData extends Record<string, any> & Partial<Data>>(tableName: string, where: string | number | (string | number)[] | Criteria | undefined, options: Options | undefined, onlyOne: true, onlyLinesNumbers: true): Promise<number | null>;
140
140
  /**
141
141
  * Create new item(s) in a table
142
142
  *
143
143
  * @param {string} tableName
144
- * @param {(Data | Data[])} data Can be array of objects or a single object
144
+ * @param {((Data & TData) | (Data & TData)[])} data Can be array of objects or a single object
145
145
  * @param {Options} [options] Pagination options, useful when the returnPostedData param is true
146
146
  * @param {boolean} [returnPostedData] By default function returns void, if you want to get the posted data, set this param to true
147
147
  * @return {*} {Promise<Data | Data[] | null | void>}
148
148
  */
149
- post(tableName: string, data: Data | Data[], options?: Options, returnPostedData?: boolean): Promise<void>;
150
- post(tableName: string, data: Data, options: Options | undefined, returnPostedData: true): Promise<Data | null>;
151
- post(tableName: string, data: Data[], options: Options | undefined, returnPostedData: true): Promise<Data[] | null>;
149
+ post<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: (Data & TData) | (Data & TData)[], options?: Options, returnPostedData?: boolean): Promise<void>;
150
+ post<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: Data & TData, options: Options | undefined, returnPostedData: true): Promise<(Data & TData) | null>;
151
+ post<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: (Data & TData)[], options: Options | undefined, returnPostedData: true): Promise<(Data & TData)[] | null>;
152
152
  /**
153
153
  * Update item(s) in a table
154
154
  *
155
155
  * @param {string} tableName
156
- * @param {(Data | Data[])} data
156
+ * @param {(Data & TData) | (Data & TData[])} data
157
157
  * @param {(number | string | (number | string)[] | Criteria)} [where]
158
158
  * @param {Options} [options]
159
- * @param {false} [returnUpdatedData]
159
+ * @param {boolean} [returnUpdatedData]
160
160
  * @return {*} {Promise<Data | Data[] | null | undefined | void>}
161
161
  */
162
- put(tableName: string, data: Data | Data[], where?: number | string | (number | string)[] | Criteria, options?: Options, returnUpdatedData?: false): Promise<void>;
163
- put(tableName: string, data: Data, where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: true): Promise<Data | null>;
164
- put(tableName: string, data: Data[], where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: true): Promise<Data[] | null>;
162
+ put<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: (Data & TData) | (Data & TData)[], where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: false): Promise<void>;
163
+ put<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: Data & TData, where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: true | boolean): Promise<(Data & TData) | null>;
164
+ put<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: (Data & TData)[], where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: true | boolean): Promise<(Data & TData)[] | null>;
165
+ put<TData extends Record<string, any> & Partial<Data>>(tableName: string, data: (Data & TData) | (Data & TData)[], where: number | string | (number | string)[] | Criteria | undefined, options: Options | undefined, returnUpdatedData: true | boolean): Promise<(Data & TData) | (Data & TData)[] | null>;
165
166
  /**
166
167
  * Delete item(s) in a table
167
168
  *
package/dist/index.js CHANGED
@@ -390,7 +390,7 @@ export default class Inibase {
390
390
  if (!Array.isArray(value))
391
391
  value = [value];
392
392
  if (Utils.isArrayOfObjects(fieldChildrenType))
393
- return this.formatData(value, fieldChildrenType);
393
+ return this.formatData(value, fieldChildrenType, _formatOnlyAvailiableKeys);
394
394
  if (!value.length)
395
395
  return null;
396
396
  return value.map((_value) => this.formatField(_value, fieldChildrenType));
@@ -1143,20 +1143,19 @@ export default class Inibase {
1143
1143
  .slice((options.page - 1) * options.perPage, options.page * options.perPage)
1144
1144
  .map(Number), options, onlyOne);
1145
1145
  }
1146
- let linesNumbers = null;
1147
- [RETURN, linesNumbers] = await this.applyCriteria(tableName, schema, options, where);
1148
- if (RETURN && linesNumbers?.size) {
1146
+ const [LineNumberDataMap, linesNumbers] = await this.applyCriteria(tableName, schema, options, where);
1147
+ if (LineNumberDataMap && linesNumbers?.size) {
1149
1148
  if (!this.totalItems.has(`${tableName}-*`))
1150
1149
  this.totalItems.set(`${tableName}-*`, linesNumbers.size);
1151
1150
  if (onlyLinesNumbers)
1152
1151
  return onlyOne
1153
1152
  ? linesNumbers.values().next().value
1154
1153
  : Array.from(linesNumbers);
1155
- const alreadyExistsColumns = Object.keys(Object.values(RETURN)[0]), alreadyExistsColumnsIDs = Utils.flattenSchema(schema)
1154
+ const alreadyExistsColumns = Object.keys(Object.values(LineNumberDataMap)[0]), alreadyExistsColumnsIDs = Utils.flattenSchema(schema)
1156
1155
  .filter(({ key }) => alreadyExistsColumns.includes(key))
1157
1156
  .map(({ id }) => id);
1158
- RETURN = Object.values(Utils.deepMerge(RETURN, await this.processSchemaData(tableName, Utils.filterSchema(schema, ({ id, type, children }) => !alreadyExistsColumnsIDs.includes(id) ||
1159
- Utils.isFieldType("table", type, children)), Object.keys(RETURN).map(Number), options)));
1157
+ RETURN = Object.values(Utils.deepMerge(LineNumberDataMap, await this.processSchemaData(tableName, Utils.filterSchema(schema, ({ id, type, children }) => !alreadyExistsColumnsIDs.includes(id) ||
1158
+ Utils.isFieldType("table", type, children)), Object.keys(LineNumberDataMap).map(Number), options)));
1160
1159
  if (this.tablesMap.get(tableName).config.cache)
1161
1160
  await writeFile(cachedFilePath, Array.from(linesNumbers).join(","));
1162
1161
  }
@@ -1215,7 +1214,7 @@ export default class Inibase {
1215
1214
  clonedData.createdAt = Date.now();
1216
1215
  clonedData.updatedAt = undefined;
1217
1216
  }
1218
- clonedData = this.formatData(clonedData, this.tablesMap.get(tableName).schema, true);
1217
+ clonedData = this.formatData(clonedData, this.tablesMap.get(tableName).schema, false);
1219
1218
  const pathesContents = this.joinPathesContents(tableName, this.tablesMap.get(tableName).config.prepend
1220
1219
  ? Array.isArray(clonedData)
1221
1220
  ? clonedData.toReversed()
@@ -1261,12 +1260,12 @@ export default class Inibase {
1261
1260
  if (Utils.isArrayOfObjects(clonedData)) {
1262
1261
  if (!clonedData.every((item) => Object.hasOwn(item, "id") && Utils.isValidID(item.id)))
1263
1262
  throw this.createError("INVALID_ID");
1264
- return this.put(tableName, clonedData, clonedData.map(({ id }) => id), options, returnUpdatedData || undefined);
1263
+ return this.put(tableName, clonedData, clonedData.map(({ id }) => id), options, returnUpdatedData);
1265
1264
  }
1266
- if (Object.hasOwn(data, "id")) {
1265
+ if (Object.hasOwn(clonedData, "id")) {
1267
1266
  if (!Utils.isValidID(clonedData.id))
1268
1267
  throw this.createError("INVALID_ID", clonedData.id);
1269
- return this.put(tableName, data, clonedData.id, options, returnUpdatedData || undefined);
1268
+ return this.put(tableName, clonedData, clonedData.id, options, returnUpdatedData);
1270
1269
  }
1271
1270
  await this.validateData(tableName, clonedData, true);
1272
1271
  clonedData = this.formatData(clonedData, this.tablesMap.get(tableName).schema, true);
@@ -1298,7 +1297,7 @@ export default class Inibase {
1298
1297
  else if ((Array.isArray(where) && where.every(Utils.isValidID)) ||
1299
1298
  Utils.isValidID(where)) {
1300
1299
  const lineNumbers = await this.get(tableName, where, undefined, undefined, true);
1301
- return this.put(tableName, clonedData, lineNumbers, options, returnUpdatedData || undefined);
1300
+ return this.put(tableName, clonedData, lineNumbers, options, false);
1302
1301
  }
1303
1302
  else if ((Array.isArray(where) && where.every(Utils.isNumber)) ||
1304
1303
  Utils.isNumber(where)) {
@@ -1339,7 +1338,7 @@ export default class Inibase {
1339
1338
  else if (Utils.isObject(where)) {
1340
1339
  const lineNumbers = await this.get(tableName, where, undefined, undefined, true);
1341
1340
  if (lineNumbers)
1342
- return this.put(tableName, clonedData, lineNumbers, options, returnUpdatedData || undefined);
1341
+ return this.put(tableName, clonedData, lineNumbers, options, returnUpdatedData);
1343
1342
  }
1344
1343
  else
1345
1344
  throw this.createError("INVALID_PARAMETERS");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inibase",
3
- "version": "1.0.0-rc.126",
3
+ "version": "1.0.0-rc.128",
4
4
  "type": "module",
5
5
  "author": {
6
6
  "name": "Karim Amahtil",