Versions
- Open: VersionChanges 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 ⦚ - Open: VersionChanges from v3 to v7+42-33import { 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 = TableNamethis._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}, 0WHERE NOT EXISTS (SELECT 1 FROM ${TableName})`)return Tracker - Open: VersionChanges 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 ⦚ - Open: VersionChanges 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 ⦚ - Open: VersionChanges from v0 to v1+93-0import { 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 = TableNamethis._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(
- Open: Version+0-0
Updated: January 29, 2025