0.0.3 • Published 5 years ago

chain-idb v0.0.3

Weekly downloads
3
License
-
Repository
-
Last release
5 years ago

浏览器端 indexed db 封装成更简洁易操作的接口, 数据库变化监控!

技术栈

  • rxjs 强大的异步管理库

demo

import { openIdb, IDbInstall } from "imeepos/idb";
async function bootstrap() {
  let update: IDbInstall = {
    [`0-1`]: {
      create: [
        {
          name: "member",
          autoIncrement: true,
          keyPath: "id",
          index: [
            {
              name: "openid",
              keyPath: "openid",
              unique: true
            }
          ]
        }
      ]
    }
  };
  let db = await IDB.open("imeepos", 1, update, true).toPromise();
  let obs = db
    .readonly("member")
    .count(true)
    .pipe(distinctUntilChanged())
    .subscribe(res => console.log(res));
  let id = 1;
  setInterval(() => {
    db.readwrite("member")
      .add({
        openid: `fromUser${++id}`
      })
      .subscribe();
  }, 1000);
}
bootstrap();

docs

IDB.open

export class IDB {
  static open(
    name: string = "imeepos",
    version: number = 1,
    install?: IDbInstall,
    listen?: boolean
  ): Observable<IDB>;
}

IDbInstall

// 改变数据库的操作
export type IDBChange = "add" | "delete" | "clear" | "put";
// 新建
interface IdbCreate extends IDBObjectStoreParameters {
  name: string;
  index: IdbIndex[];
}
// 索引
interface IdbIndex extends IDBIndexParameters {
  name: string;
  keyPath: string | string[];
}
export interface IDbInstall {
  [key: string]: {
    // 增
    create?: IdbCreate[];
    // 改
    update?: {
      [key: string]: {
        create: IdbIndex[];
        delete: string[];
      };
    };
    // 删
    delete?: string[];
  };
}

OpenIdbResult

// IDB.open返回结果
export class IDB {
  constructor(public db: IDBDatabase, public name: string);
  change(tableName: string, type: IDBChange): void;
  addListener(tableName, it: any): void;
  removeListener(tableName: string, item: any): void;
  transaction(
    storeNames: string | string[],
    mode?: IDBTransactionMode
  ): IDBTransaction;
  readonly(name: string): IDBReadonly;
  index(name: string): IDBIndexed;
  readwrite(name: string): IDBReadWrite;
}

IDBReadonly

export interface IDBReadonly {
  count(key?: IDBValidKey | IDBKeyRange): Observable<number>;
  get(query: IDBValidKey | IDBKeyRange): Observable<any | undefined>;
  getAllKeys(
    query?: IDBValidKey | IDBKeyRange,
    count?: number
  ): Observable<IDBValidKey[]>;
  getKey(query: IDBValidKey | IDBKeyRange): Observable<IDBValidKey | undefined>;
  openCursor(
    range?: IDBValidKey | IDBKeyRange,
    direction?: IDBCursorDirection
  ): Observable<IDBCursorWithValue | null>;
  openKeyCursor(
    query?: IDBValidKey | IDBKeyRange,
    direction?: IDBCursorDirection
  ): Observable<IDBCursor | null>;
}

IDBReadWrite

export interface IDBReadWrite extends IDBReadonly {
  add(value: any, key?: IDBValidKey | IDBKeyRange): Observable<IDBValidKey>;
  delete(key: IDBValidKey | IDBKeyRange): Observable<undefined>;
  clear(): Observable<undefined>;
  put(value: any, key?: IDBValidKey | IDBKeyRange): Observable<IDBValidKey>;
}

IDBIndexed

export class IDBIndexed extends IDBReadonly {}
0.0.3

5 years ago