Versions

  • v8

    1/29/2025
    Open: Version
    Changes from v7 to v8
    +1
    -1
    ⦚ 17 unchanged lines ⦚
    TableName:string, Limit:number = 10
    ):Promise<resettableQuotaTracker> {
    expectStringMatching('table name',TableName, /^[a-z_]+$/i)
    expectCardinal ('usage limit',Limit)

    ⦚ 81 unchanged lines ⦚
    ⦚ 17 unchanged lines ⦚
    TableName:string, Limit:number = 10
    ):Promise<resettableQuotaTracker> {
    expectStringMatching('table name',TableName, /^[a-z_][0-9a-z_]+$/i)
    expectCardinal ('usage limit',Limit)

    ⦚ 81 unchanged lines ⦚
  • v7

    1/28/2025
    Open: Version
    Changes from v3 to v7
    +42
    -33
    import { sqlite } from 'https://esm.town/v/stevekrouse/sqlite'
    import {
    expectStringMatching, allowCardinal, expectedCardinal, throwError
    } from 'https://rozek.github.io/javascript-interface-library/dist/javascript-interface-library.esm.js'

    export class resettableQuotaTracker {
    private _TableName:string;
    private _isReady:Promise<boolean>

    constructor (TableName:string, Limit?:number) {
    expectStringMatching('table name',TableName, /^[a-z_]+$/i)
    allowCardinal ('usage limit',Limit)

    this._TableName = TableName
    this._isReady = new Promise((resolve,reject) => {
    sqlite.execute(
    `CREATE TABLE IF NOT EXISTS ${this._TableName} (
    UsageLimit INTEGER NOT NULL DEFAULT ${Limit || 10},
    Usage INTEGER NOT NULL DEFAULT 0
    )`
    )
    .then (() => resolve(true))
    .catch((Signal:any) => reject(Signal))
    })
    }

    /**** isReady ****/
    async isReady ():Promise<boolean> {
    return this._isReady
    }

    /**** reset ****/
    async reset ():Promise<void> {
    await sqlite.execute(
    import { sqlite } from 'https://esm.town/v/stevekrouse/sqlite'
    import {
    expectStringMatching, expectCardinal, expectedCardinal, throwError
    } from 'https://rozek.github.io/javascript-interface-library/dist/javascript-interface-library.esm.js'

    export class resettableQuotaTracker {
    private _TableName:string;

    /**** private constructor - i.e., don't use it! ****/

    private constructor (TableName:string) {
    this._TableName = TableName
    }

    /**** factory method: async resettableQuotaTracker.new(...) ****/

    static async new (
    TableName:string, Limit:number = 10
    ):Promise<resettableQuotaTracker> {
    expectStringMatching('table name',TableName, /^[a-z_]+$/i)
    expectCardinal ('usage limit',Limit)

    const Tracker = new resettableQuotaTracker(TableName)
    await sqlite.execute(`
    CREATE TABLE IF NOT EXISTS ${TableName} (
    UsageLimit INTEGER NOT NULL,
    Usage INTEGER NOT NULL DEFAULT 0
    )
    `)

    await sqlite.execute(`
    INSERT INTO ${TableName} (UsageLimit, Usage)
    SELECT ${Limit}, 0
    WHERE NOT EXISTS (SELECT 1 FROM ${TableName})
    `)
    return Tracker
  • v3

    1/27/2025
    Open: Version
    Changes from v2 to v3
    +1
    -1
    ⦚ 65 unchanged lines ⦚
    async LimitExceeded ():Promise<boolean> {
    return sqlite.execute(
    `SELECT Usage >= UsageLimit AS exceeded FROM ${this._TableName}`
    ).then((Result) => Result[0].exceeded === 1)
    }
    ⦚ 24 unchanged lines ⦚
    ⦚ 65 unchanged lines ⦚
    async LimitExceeded ():Promise<boolean> {
    return sqlite.execute(
    `SELECT Usage > UsageLimit AS exceeded FROM ${this._TableName}`
    ).then((Result) => Result[0].exceeded === 1)
    }
    ⦚ 24 unchanged lines ⦚
  • v2

    1/27/2025
    Open: Version
    Changes from v1 to v2
    +1
    -1
    ⦚ 3 unchanged lines ⦚
    } from 'https://rozek.github.io/javascript-interface-library/dist/javascript-interface-library.esm.js'

    export class resettableQuotaTracker {
    private _TableName:string;
    private _isReady:Promise<boolean>
    ⦚ 86 unchanged lines ⦚
    ⦚ 3 unchanged lines ⦚
    } from 'https://rozek.github.io/javascript-interface-library/dist/javascript-interface-library.esm.js'

    export class resettableQuotaTracker {
    private _TableName:string;
    private _isReady:Promise<boolean>
    ⦚ 86 unchanged lines ⦚
  • v1

    1/27/2025
    Open: Version
    Changes from v0 to v1
    +93
    -0

    import { sqlite } from 'https://esm.town/v/stevekrouse/sqlite'
    import {
    expectStringMatching, allowCardinal, expectedCardinal, throwError
    } from 'https://rozek.github.io/javascript-interface-library/dist/javascript-interface-library.esm.js'

    export class resettableQuotaTracker {
    private _TableName:string;
    private _isReady:Promise<boolean>

    constructor (TableName:string, Limit?:number) {
    expectStringMatching('table name',TableName, /^[a-z_]+$/i)
    allowCardinal ('usage limit',Limit)

    this._TableName = TableName
    this._isReady = new Promise((resolve,reject) => {
    sqlite.execute(
    `CREATE TABLE IF NOT EXISTS ${this._TableName} (
    UsageLimit INTEGER NOT NULL DEFAULT ${Limit || 10},
    Usage INTEGER NOT NULL DEFAULT 0
    )`
    )
    .then (() => resolve(true))
    .catch((Signal:any) => reject(Signal))
    })
    }

    /**** isReady ****/
    async isReady ():Promise<boolean> {
    return this._isReady
    }

    /**** reset ****/
    async reset ():Promise<void> {
    await sqlite.execute(
  • v0

    1/27/2025
    Open: Version
    +0
    -0


Updated: January 29, 2025