gs-idb-pro 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -607,17 +607,22 @@ class DataWriter extends DataReader {
607
607
  return this.batchWrite((w) => returns ? gsBase.asyncMap(records, (v) => w.addOrChange(v)) : gsBase.asyncForEach(records, (v) => w.addOrChange(v)), !0);
608
608
  }
609
609
  delete(pk, returns) {
610
+ const {
611
+ returns: getOld,
612
+ physical
613
+ } = gsBase.isBoolean(returns) ? { returns } : returns || {}, { storeSchema } = this, softDeletedField = storeSchema.softDeletedField, requiredOld = !!(!physical && softDeletedField?.name);
610
614
  return this.changeByPk({
611
615
  pk,
612
- getOld: returns,
616
+ getOld: requiredOld || getOld,
613
617
  fn: (store, pk2, newValue, oldValue) => {
614
- if (store.delete(pk2), !!returns)
618
+ if (requiredOld ? oldValue && (oldValue = checkUpdateValue(storeSchema, { [softDeletedField.name]: gsIdbBasic.Bool.True }, oldValue), store.put(oldValue)) : store.delete(pk2), !!getOld)
615
619
  return [oldValue, pk2];
616
620
  }
617
621
  });
618
622
  }
619
623
  deleteMany(keys, returns) {
620
- return this.batchWrite((w) => returns ? gsBase.asyncMap(keys, (v) => w.delete(v, !0)) : gsBase.asyncForEach(keys, (v) => w.delete(v)), !0);
624
+ const { returns: hasRtn } = gsBase.isBoolean(returns) ? { returns } : returns || {};
625
+ return this.batchWrite((w) => hasRtn ? gsBase.asyncMap(keys, (v) => w.delete(v, !0)) : gsBase.asyncForEach(keys, (v) => w.delete(v)), !0);
621
626
  }
622
627
  deleteRange(query, returns) {
623
628
  const {
@@ -1041,6 +1046,16 @@ async function upgradeDb(dbSchema, database, e, request) {
1041
1046
  }
1042
1047
  }
1043
1048
  function validateDataOperationSchema(schema, dbSchema) {
1049
+ return Object.isFrozen(dbSchema) ? frozenValidate(schema) : initValidate(schema, dbSchema);
1050
+ }
1051
+ function frozenValidate(schema, dbSchema) {
1052
+ let { store, index } = schema;
1053
+ const target = { store: gsBase.isString(store) ? store : store.name };
1054
+ return index && (target.index = gsBase.isString(index) ? index : index.name), {
1055
+ target
1056
+ };
1057
+ }
1058
+ function initValidate(schema, dbSchema) {
1044
1059
  let { store, index } = schema;
1045
1060
  const { storeTemplate } = dbSchema, { storeSchemas = [] } = dbSchema, storeName = gsBase.isString(store) ? store : store.name, storeIndex = storeSchemas.findIndex((s) => s === storeName || s.name === storeName), existStore = storeIndex > -1 && storeSchemas[storeIndex];
1046
1061
  let tmp;
@@ -1253,5 +1268,8 @@ function generateRoot(db, specialFields) {
1253
1268
  }
1254
1269
  });
1255
1270
  }
1256
- var generateDbSchema$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, generateDbSchema });
1271
+ var generateDbSchema$1 = /* @__PURE__ */ Object.freeze({
1272
+ __proto__: null,
1273
+ generateDbSchema
1274
+ });
1257
1275
  exports.Break = Break, exports.Continue = Continue, exports.ContinueKey = ContinueKey, exports.ContinuePrimaryKey = ContinuePrimaryKey, exports.DataOperationBase = DataOperationBase, exports.DataOperators = DataOperators, exports.DataReader = DataReader, exports.DataWriter = DataWriter, exports.DbIterator = DbIterator, exports.DbIteratorParsers = DbIteratorParsers, exports.DbMap = DbMap, exports.Delete = Delete, exports.Finished = Finished, exports.IDbPro = IDbPro, exports.NextKey = NextKey, exports.NextPrimaryKey = NextPrimaryKey, exports.Save = Save, exports.StoreUpgradeable = StoreUpgradeable, exports.UpgradeContext = UpgradeContext, exports.dbMap = dbMap, exports.dbStore = dbStore, exports.dbStores = dbStores, exports.defaultSpecialFields = defaultSpecialFields, exports.defaultStoreSchemaTemplate = defaultStoreSchemaTemplate, exports.generateDbSchema = generateDbSchema, exports.isIDbQuery = isIDbQuery, exports.isNativeTarget = isNativeTarget, exports.parseDbNoneKeyPathRecord = parseDbNoneKeyPathRecord, exports.parseIDbQuery = parseIDbQuery, exports.releaseDefaultDB = releaseDefaultDB, exports.validateSchemaWithDefaults = validateSchemaWithDefaults, exports.versionDiffValidate = versionDiffValidate, exports.versionSameValidate = versionSameValidate;
package/lib/index.d.ts CHANGED
@@ -365,7 +365,7 @@ interface IDbMap<K extends StrOrNum = StrOrNum, V = any, Tar extends OperationTa
365
365
  batch<R = any, T extends V = V>(fn: (map: IDbMap<K, T, NativeTarget>) => R | Promise<R>): Promise<R>;
366
366
  }
367
367
 
368
- interface IGetAllArgs<T> {
368
+ interface IGetAllArgs {
369
369
  query?: IDbQuery | null;
370
370
  direction?: IDBCursorDirection;
371
371
  /**
@@ -381,7 +381,7 @@ interface IDataReader<Row = any, Tar extends OperationTarget = OperationTarget>
381
381
  * @param limit 最多返回条数,默认值为1000
382
382
  */
383
383
  all(query?: IDbQuery, limit?: number): Promise<Row[]>;
384
- all(args?: IGetAllArgs<Row>): Promise<Row[]>;
384
+ all(args?: IGetAllArgs): Promise<Row[]>;
385
385
  /**
386
386
  * 返回满足条件的第一条数据
387
387
  * @param key
@@ -483,15 +483,21 @@ interface IChangeRangeArg<Row> {
483
483
  */
484
484
  direction?: IDBCursorDirection;
485
485
  }
486
+ interface IDeleteRangeOption<Rtn extends boolean | undefined> extends IDeleteOption<Rtn> {
487
+ /**
488
+ * 游标滚动方向,默认为`prev`
489
+ */
490
+ direction?: IDBCursorDirection;
491
+ }
486
492
  interface IRangeWriter<Row> {
487
493
  deleteRange(key: IDbQuery, returns?: false): Promise<void>;
488
494
  deleteRange(key: IDbQuery, returns: true): Promise<DbRecordResult<Row>[]>;
489
- deleteRange(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
490
- deleteRange(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>[]>;
495
+ deleteRange(key: IDbQuery, option: IDeleteRangeOption<false | undefined>): Promise<void>;
496
+ deleteRange(key: IDbQuery, option: IDeleteRangeOption<true>): Promise<DbRecordResult<Row>[]>;
491
497
  deleteRangeMany(keys: IDbQuery[], returns?: false): Promise<void>;
492
498
  deleteRangeMany(keys: IDbQuery[], returns: true): Promise<DbRecordResult<Row>[][]>;
493
- deleteRangeMany(keys: IDbQuery[], option: IDeleteOption<false | undefined>): Promise<void>;
494
- deleteRangeMany(keys: IDbQuery[], option: IDeleteOption<true>): Promise<DbRecordResult<Row>[][]>;
499
+ deleteRangeMany(keys: IDbQuery[], option: IDeleteRangeOption<false | undefined>): Promise<void>;
500
+ deleteRangeMany(keys: IDbQuery[], option: IDeleteRangeOption<true>): Promise<DbRecordResult<Row>[][]>;
495
501
  changeRange(arg: DbRecord<Partial<Row>> | IChangeRangeArg<Row>, returns?: false): Promise<void>;
496
502
  changeRange(arg: DbRecord<Partial<Row>> | IChangeRangeArg<Row>, returns: true): Promise<DbRecordResult<Row>[]>;
497
503
  changeRangeMany(args: DbRecord<Partial<Row>> | IChangeRangeArg<Row>[], returns?: false): Promise<void>;
@@ -503,10 +509,6 @@ interface IChangeManyOption<Rtn extends boolean | undefined> {
503
509
  returns?: Rtn;
504
510
  }
505
511
  interface IDeleteOption<Rtn extends boolean | undefined> {
506
- /**
507
- * 游标滚动方向,默认为`prev`
508
- */
509
- direction?: IDBCursorDirection;
510
512
  /**
511
513
  * 在设置了`softDeletedField`时,是否进行物理删除
512
514
  * - 如果值为`false`则仅使用`softDeletedField.name`进行标记
@@ -570,8 +572,12 @@ interface IDataWriter<Row = any, Tar extends OperationTarget = OperationTarget>
570
572
  */
571
573
  delete(key: IDbQuery, returns?: false): Promise<void>;
572
574
  delete(key: IDbQuery, returns: true): Promise<DbRecordResult<Row>>;
575
+ delete(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
576
+ delete(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>>;
573
577
  deleteMany(keys: IDbQuery[], returns?: false): Promise<void>;
574
578
  deleteMany(keys: IDbQuery[], returns: true): Promise<DbRecordResult<Row>[]>;
579
+ deleteMany(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
580
+ deleteMany(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>[]>;
575
581
  /**
576
582
  * 批量写入
577
583
  * @param fn
@@ -901,7 +907,7 @@ declare class DataOperators<S1 = any, S2 = any, S3 = any, S4 = any, S5 = any> im
901
907
 
902
908
  declare class DataReader<Row, Tar extends OperationTarget = OperationTarget> extends DataOperationBase implements IDataReader<Row, Tar> {
903
909
  all(query?: IDbQuery, limit?: number): Promise<Row[]>;
904
- all(args?: IGetAllArgs<Row>): Promise<Row[]>;
910
+ all(args?: IGetAllArgs): Promise<Row[]>;
905
911
  count(): Promise<number>;
906
912
  count(query: IDbQuery | FindFn<Row>, direction?: IDBCursorDirection): Promise<number>;
907
913
  count(query: IDbQuery, fn: FindFn<Row>, direction?: IDBCursorDirection): Promise<number>;
@@ -956,16 +962,20 @@ declare class DataWriter<Row, Tar extends OperationTarget = OperationTarget> ext
956
962
  addOrChangeMany(records: DbRecord<Partial<Row>>[], returns: true): Promise<DbRecordResult<Row>[]>;
957
963
  delete(key: IDbQuery, returns?: false): Promise<void>;
958
964
  delete(key: IDbQuery, returns: true): Promise<DbRecordResult<Row>>;
965
+ delete(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
966
+ delete(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>>;
959
967
  deleteMany(keys: IDbQuery[], returns?: false): Promise<void>;
960
968
  deleteMany(keys: IDbQuery[], returns: true): Promise<DbRecordResult<Row>[]>;
969
+ deleteMany(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
970
+ deleteMany(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>[]>;
961
971
  deleteRange(key: IDbQuery, returns?: false): Promise<void>;
962
972
  deleteRange(key: IDbQuery, returns: true): Promise<DbRecordResult<Row>[]>;
963
- deleteRange(key: IDbQuery, option: IDeleteOption<false | undefined>): Promise<void>;
964
- deleteRange(key: IDbQuery, option: IDeleteOption<true>): Promise<DbRecordResult<Row>[]>;
973
+ deleteRange(key: IDbQuery, option: IDeleteRangeOption<false | undefined>): Promise<void>;
974
+ deleteRange(key: IDbQuery, option: IDeleteRangeOption<true>): Promise<DbRecordResult<Row>[]>;
965
975
  deleteRangeMany(keys: IDbQuery[], returns?: false): Promise<void>;
966
976
  deleteRangeMany(keys: IDbQuery[], returns: true): Promise<DbRecordResult<Row>[][]>;
967
- deleteRangeMany(keys: IDbQuery[], option: IDeleteOption<false | undefined>): Promise<void>;
968
- deleteRangeMany(keys: IDbQuery[], option: IDeleteOption<true>): Promise<DbRecordResult<Row>[][]>;
977
+ deleteRangeMany(keys: IDbQuery[], option: IDeleteRangeOption<false | undefined>): Promise<void>;
978
+ deleteRangeMany(keys: IDbQuery[], option: IDeleteRangeOption<true>): Promise<DbRecordResult<Row>[][]>;
969
979
  changeRange(arg: DbRecord<Partial<Row>> | IChangeRangeArg<Row>, returns?: false): Promise<void>;
970
980
  changeRange(arg: DbRecord<Partial<Row>> | IChangeRangeArg<Row>, returns: true): Promise<DbRecordResult<Row>[]>;
971
981
  changeRangeMany(args: DbRecord<Partial<Row>> | IChangeRangeArg<Row>[], returns?: false): Promise<void>;
@@ -1116,4 +1126,4 @@ declare function generateDbSchema(db: string, option?: IGenerateOption<undefined
1116
1126
  declare function generateDbSchema(db: string, option: IGenerateOption<true | number>): Promise<string>;
1117
1127
 
1118
1128
  export { Break, Continue, ContinueKey, ContinuePrimaryKey, DataOperationBase, DataOperators, DataReader, DataWriter, DbIterator, DbIteratorParsers, DbMap, Delete, Finished, IDbPro, NextKey, NextPrimaryKey, Save, StoreUpgradeable, UpgradeContext, dbMap, dbStore, dbStores, defaultSpecialFields, defaultStoreSchemaTemplate, generateDbSchema, isIDbQuery, isNativeTarget, parseDbNoneKeyPathRecord, parseIDbQuery, releaseDefaultDB, validateSchemaWithDefaults, versionDiffValidate, versionSameValidate };
1119
- export type { ArrayDbRecord, DBSchema, DataOperationSchema, DbIteratorParsersKey, DbNoneKeyPathRecord, DbRecord, DbRecordResult, ExportDataTo, FindFn, GetRowMapper, IChangeManyOption, IChangeRangeArg, ICursorArg, ICursorOption, ICursorQueryable, ICursorReader, ICursorResultArg, ICursorRow, ICursorWriter, IDataOperationSchema, IDataOperatorFactory, IDataOperators, IDataReader, IDataWriter, IDbGtRange, IDbGteRange, IDbIterator, IDbIteratorArg, IDbIteratorOption, IDbIteratorParser, IDbLtGtRange, IDbLtGteRange, IDbLtRange, IDbLteGtRange, IDbLteGteRange, IDbLteRange, IDbMap, IDbNoneKeyPathRecord, IDbQuery, IDbRange, IDbSchema, IDbVersionBounds, IDeleteOption, IFilterArg, IFindArg, IFindMapArg, IForEachArg, IForEachResultArg, IForEachable, IGenerateOption, IGetAllArgs, IIDbPro, IIndexSchema, IInfoTarget, IModifyResult, IMultiBackup, INativeOperationResult, IOpenCursorArg, IPage, IPageArg, IPageInfo, IPageableQuery, IRangeWriter, ISpecialFieldSchema, ISpecialFields, IStoreSchema, IStoreSchemaTemplate, IStoreUpgradeable, IUpgradeContext, IUpgradeContextArgs, IValidDataOperationSchema, IValueResult, IVersionData, IVersionValidateContext, IVoidResult, ImportUse, IndexSchema, NativeReader, NativeTarget, NativeWriter, OperationTarget, ReadCallFn, RequiredDbNoneKeyPathRecord, SaveRowMapper, SpecialFieldSchema, StoreSchema, ValueCallFn, ValueControl, ValueModifyFn, VersionValidateFn, VoidCallFn, VoidControl, VoidModifyFn, VoidResult, WriteCallFn };
1129
+ export type { ArrayDbRecord, DBSchema, DataOperationSchema, DbIteratorParsersKey, DbNoneKeyPathRecord, DbRecord, DbRecordResult, ExportDataTo, FindFn, GetRowMapper, IChangeManyOption, IChangeRangeArg, ICursorArg, ICursorOption, ICursorQueryable, ICursorReader, ICursorResultArg, ICursorRow, ICursorWriter, IDataOperationSchema, IDataOperatorFactory, IDataOperators, IDataReader, IDataWriter, IDbGtRange, IDbGteRange, IDbIterator, IDbIteratorArg, IDbIteratorOption, IDbIteratorParser, IDbLtGtRange, IDbLtGteRange, IDbLtRange, IDbLteGtRange, IDbLteGteRange, IDbLteRange, IDbMap, IDbNoneKeyPathRecord, IDbQuery, IDbRange, IDbSchema, IDbVersionBounds, IDeleteOption, IDeleteRangeOption, IFilterArg, IFindArg, IFindMapArg, IForEachArg, IForEachResultArg, IForEachable, IGenerateOption, IGetAllArgs, IIDbPro, IIndexSchema, IInfoTarget, IModifyResult, IMultiBackup, INativeOperationResult, IOpenCursorArg, IPage, IPageArg, IPageInfo, IPageableQuery, IRangeWriter, ISpecialFieldSchema, ISpecialFields, IStoreSchema, IStoreSchemaTemplate, IStoreUpgradeable, IUpgradeContext, IUpgradeContextArgs, IValidDataOperationSchema, IValueResult, IVersionData, IVersionValidateContext, IVoidResult, ImportUse, IndexSchema, NativeReader, NativeTarget, NativeWriter, OperationTarget, ReadCallFn, RequiredDbNoneKeyPathRecord, SaveRowMapper, SpecialFieldSchema, StoreSchema, ValueCallFn, ValueControl, ValueModifyFn, VersionValidateFn, VoidCallFn, VoidControl, VoidModifyFn, VoidResult, WriteCallFn };
@@ -607,17 +607,22 @@ class DataWriter extends DataReader {
607
607
  return this.batchWrite((w) => returns ? asyncMap(records, (v) => w.addOrChange(v)) : asyncForEach(records, (v) => w.addOrChange(v)), !0);
608
608
  }
609
609
  delete(pk, returns) {
610
+ const {
611
+ returns: getOld,
612
+ physical
613
+ } = isBoolean(returns) ? { returns } : returns || {}, { storeSchema } = this, softDeletedField = storeSchema.softDeletedField, requiredOld = !!(!physical && softDeletedField?.name);
610
614
  return this.changeByPk({
611
615
  pk,
612
- getOld: returns,
616
+ getOld: requiredOld || getOld,
613
617
  fn: (store, pk2, newValue, oldValue) => {
614
- if (store.delete(pk2), !!returns)
618
+ if (requiredOld ? oldValue && (oldValue = checkUpdateValue(storeSchema, { [softDeletedField.name]: Bool.True }, oldValue), store.put(oldValue)) : store.delete(pk2), !!getOld)
615
619
  return [oldValue, pk2];
616
620
  }
617
621
  });
618
622
  }
619
623
  deleteMany(keys, returns) {
620
- return this.batchWrite((w) => returns ? asyncMap(keys, (v) => w.delete(v, !0)) : asyncForEach(keys, (v) => w.delete(v)), !0);
624
+ const { returns: hasRtn } = isBoolean(returns) ? { returns } : returns || {};
625
+ return this.batchWrite((w) => hasRtn ? asyncMap(keys, (v) => w.delete(v, !0)) : asyncForEach(keys, (v) => w.delete(v)), !0);
621
626
  }
622
627
  deleteRange(query, returns) {
623
628
  const {
@@ -1041,6 +1046,16 @@ async function upgradeDb(dbSchema, database, e, request) {
1041
1046
  }
1042
1047
  }
1043
1048
  function validateDataOperationSchema(schema, dbSchema) {
1049
+ return Object.isFrozen(dbSchema) ? frozenValidate(schema) : initValidate(schema, dbSchema);
1050
+ }
1051
+ function frozenValidate(schema, dbSchema) {
1052
+ let { store, index } = schema;
1053
+ const target = { store: isString(store) ? store : store.name };
1054
+ return index && (target.index = isString(index) ? index : index.name), {
1055
+ target
1056
+ };
1057
+ }
1058
+ function initValidate(schema, dbSchema) {
1044
1059
  let { store, index } = schema;
1045
1060
  const { storeTemplate } = dbSchema, { storeSchemas = [] } = dbSchema, storeName = isString(store) ? store : store.name, storeIndex = storeSchemas.findIndex((s) => s === storeName || s.name === storeName), existStore = storeIndex > -1 && storeSchemas[storeIndex];
1046
1061
  let tmp;
@@ -1253,7 +1268,10 @@ function generateRoot(db, specialFields) {
1253
1268
  }
1254
1269
  });
1255
1270
  }
1256
- var generateDbSchema$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, generateDbSchema });
1271
+ var generateDbSchema$1 = /* @__PURE__ */ Object.freeze({
1272
+ __proto__: null,
1273
+ generateDbSchema
1274
+ });
1257
1275
  export {
1258
1276
  Break,
1259
1277
  Continue,
package/package.json CHANGED
@@ -1,25 +1,23 @@
1
1
  {
2
2
  "name": "gs-idb-pro",
3
- "version": "0.1.3",
4
- "type": "module",
5
- "main": "lib/index.cjs",
6
- "module": "lib/index.js",
7
- "exports": {
8
- "import": "./lib/index.js",
9
- "require": "./lib/index.cjs"
10
- },
11
- "types": "lib/index.d.ts",
3
+ "version": "0.1.5",
12
4
  "license": "MIT",
5
+ "author": {
6
+ "name": "grain-sand"
7
+ },
13
8
  "dependencies": {
14
9
  "gs-base": "^0.1.20",
15
10
  "gs-idb-basic": "^0.1.7"
16
11
  },
17
- "keywords": [
18
- "indexedDB",
19
- "webSQL",
20
- "idb",
21
- "orm",
22
- "数据库",
23
- "浏览器数据库"
24
- ]
25
- }
12
+ "type": "module",
13
+ "types": "./lib/index.d.ts",
14
+ "main": "./lib/index.cjs",
15
+ "module": "./lib/index.mjs",
16
+ "exports": {
17
+ ".": {
18
+ "require": "./lib/index.cjs",
19
+ "import": "./lib/index.mjs",
20
+ "types": "./lib/index.d.ts"
21
+ }
22
+ }
23
+ }