コード例 #1
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
  // Chains through place ID.
  starPage(url, session, action, now = microtime.now()) {
    const result = datascript.core.transact_BANG_(this.conn, vector(
      vector(DB_ADD, -1, 'page/url', url)
    ));

    // TODO

    return datascript.core.resolve_tempid(result.tempids, -1);
  }
コード例 #2
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
  async startSession(scope, ancestor, now = microtime.now(), reason = SessionStartReason.newTab) {
    const result = datascript.core.transact_BANG_(this.conn, vector(
      vector(DB_ADD, -1, 'session/startedInScope', `${scope}`),
      vector(DB_ADD, -1, 'session/startedFromAncestor', ancestor),
      vector(DB_ADD, -1, 'session/startReason', reason),
      vector(DB_ADD, -1, 'session/startTime', now)
    ));

    return datascript.core.resolve_tempid(result.tempids, -1);
  }
コード例 #3
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
  /**
   * Record a visit to a URL.
   * @param url the visited URL.
   * @param title (optional) a known title for the page.
   * @param now (optional) microsecond timestamp.
   * @returns {Promise} a promise that resolves to the place ID.
   */
  visit(url, session, title, now = microtime.now()) {
    const result = datascript.core.transact_BANG_(this.conn, vector(
      vector(DB_ADD, -1, 'page/url', url),
      vector(DB_ADD, -1, 'page/title', title),    // TODO: handle no title.
      vector(DB_ADD, -1, 'event/visit', -2),
      vector(DB_ADD, -2, 'visit/instant', now)
    ));

    // TODO: session.

    return datascript.core.resolve_tempid(result.tempids, -1);
  }
コード例 #4
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
  someStuff() {
    datascript.core.transact_BANG_(this.conn, vector(
      vector(DB_ADD, -1, 'page/url', 'http://foo.com/'),
      vector(DB_ADD, -1, 'page/title', 'Foo.com')
    ));

    const query = parse(`
    [:find ?title :in $ ?url :where [?x "page/url" ?url] [?x "page/title" ?title]]
    `);
    let results = datascript.core.q(query, datascript.js.db(this.conn), 'http://foo.com/');
    console.log(results);

    datascript.core.transact_BANG_(this.conn, vector(
      vector(DB_ADD, -1, 'page/url', 'http://foo.com/'),
      vector(DB_ADD, -1, 'page/title', 'Foo.com Again')
    ));

    results = datascript.core.q(query, datascript.js.db(this.conn), 'http://foo.com/');
    console.log(results);
    return results;
  }
コード例 #5
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
 async getStarredWithOrderByAndLimit(newestFirst, limit) {
   const starredQuery = parse(`
   [:find (max ?timestampMicros) (pull ?page ["page/url" "page/title"]) ?page
    :in $
    :where
    [?page "page/starred" true ?t]
    [?t ":db/txInstant" ?timestampMicros]
   ]`);
   const results = datascript.core.q(starredQuery, this.getDB());
   const sorted = newestFirst ? mori.sortBy(mori.first, compareDescending, results) : results;
   const limited = limit ? mori.take(limit, sorted) : sorted;
   return mori.map(this.pageResultToJSON, limited);
 }
コード例 #6
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
  constructor(dir) {
    this.dir = dir;
    const schema = this.createSchema();
    this.conn = datascript.core.create_conn(schema);
    this.schema = schema;

    this.pageDetailsQuery = parse(`
    [:find (max ?timestamp) (pull ?page ["page/url" "page/title"]) ?page
     :in $ ?visits
     :where
     [(ground ?visits) [[?ev]]]
     [?page "event/visit" ?ev]
     [?ev _ ?timestamp]]
    `);
  }
コード例 #7
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
 constructor(dir) {
   this.dir = dir;
   const schema = this.createSchema();
   this.conn = datascript.core.create_conn(schema);
   this.schema = schema;
 }
コード例 #8
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
 getVisits(since = null) {
   const db = datascript.core.db(this.conn);
   return datascript.core.index_range(db, 'visit/instant', since, null);
 }
コード例 #9
0
ファイル: datomstore.js プロジェクト: l3dlp-forks/tofino
 async endSession(session, now = microtime.now(), reason = SessionEndReason.tabClosed) {
   return datascript.core.transact_BANG_(this.conn, vector(
     vector(DB_ADD, session, 'session/endReason', reason),
     vector(DB_ADD, session, 'session/endTime', now)
   ));
 }
コード例 #10
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
 getPageDetails(visits) {
   const query = this.pageDetailsQuery;
   const results = datascript.core.q(query, this.getDB(), visits);
   const sorted = mori.sortBy(mori.first, compareDescending, results);
   return mori.map(this.pageResultToJSON, sorted);
 }
コード例 #11
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
 getVisits(since = null) {
   return mori.reverse(
     datascript.core.index_range(
       this.getDB(), 'visit/instant', since, null));
 }
コード例 #12
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
 transact(assertions) {
   return datascript.core.transact_BANG_(this.conn, assertions);
 }
コード例 #13
0
ファイル: datomstore.js プロジェクト: jbhoosreddy/tofino
 getDB() {
   return datascript.core.db(this.conn);
 }