Comparing version 0.0.2 to 0.0.3
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
class Counter { | ||
class Sequence { | ||
constructor(factory) { | ||
@@ -32,18 +32,5 @@ Object.defineProperty(this, "factory", { | ||
} | ||
/** | ||
* Returns a sequence of auto-incrementing bigints. | ||
*/ | ||
function bigint() { | ||
return new Counter(function* () { | ||
for (let state = 1n;; state++) | ||
yield state; | ||
}); | ||
} | ||
exports.bigint = bigint; | ||
/** | ||
* Returns a sequence of auto-incrementing numbers. | ||
*/ | ||
function number() { | ||
function autoincr() { | ||
const ceiling = Number.MAX_SAFE_INTEGER; | ||
return new Counter(function* () { | ||
return new Sequence(function* () { | ||
for (let state = 1; state < ceiling; state++) | ||
@@ -55,2 +42,11 @@ yield state; | ||
} | ||
exports.number = number; | ||
function bigint() { | ||
return new Sequence(function* () { | ||
for (let state = 1n;; state++) | ||
yield state; | ||
}); | ||
} | ||
Object.defineProperty(autoincr, "bigint", { | ||
value: bigint, | ||
}); | ||
exports.default = autoincr; |
{ | ||
"name": "autoincr", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"author": "Zachary Golba <zachary.golba@postlight.com>", | ||
"license": "(Apache 2.0 OR MIT)", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/zacharygolba/autoincr.git" | ||
}, | ||
"main": "dist/lib.js", | ||
@@ -7,0 +11,0 @@ "module": "dist/lib.mjs", |
@@ -10,21 +10,22 @@ # autoincr | ||
```typescript | ||
import * as autoincr from "autoincr"; | ||
import assert from "assert"; | ||
import * as assert from "assert"; | ||
import autoincr from "autoincr"; | ||
const bigints = autoincr.bigint(); | ||
const numbers = autoincr.number(); | ||
const id = autoincr(); | ||
assert.eq(bigints.next(), 1n); | ||
assert.eq(bigints.next(), 2n); | ||
assert.eq(bigints.next(), 3n); | ||
assert.eq(id.next(), 1); | ||
assert.eq(id.next(), 2); | ||
assert.eq(id.next(), 3); | ||
bigints.reset(); | ||
assert.eq(bigints.next(), 1n); | ||
id.reset(); | ||
assert.eq(id.next(), 1); | ||
``` | ||
assert.eq(numbers.next(), 1); | ||
assert.eq(numbers.next(), 2); | ||
assert.eq(numbers.next(), 3); | ||
### BigInt Support | ||
numbers.reset(); | ||
assert.eq(numbers.next(), 1); | ||
The same API expressed in the example above can optionally return a `bigint` | ||
rather than a `number` by calling the `.bigint` method. | ||
```typescript | ||
const id = autoincr.bigint(); | ||
``` | ||
@@ -31,0 +32,0 @@ |
@@ -1,22 +0,22 @@ | ||
import { bigint, number, Counter } from "./lib"; | ||
import autoincr, { Sequence } from "./lib"; | ||
describe("bigint()", () => { | ||
let counter: Counter<bigint>; | ||
describe("autoincr()", () => { | ||
let sequence: Sequence<number>; | ||
beforeEach(() => { | ||
counter = bigint(); | ||
sequence = autoincr(); | ||
}); | ||
test("#next()", () => { | ||
expect(counter.next()).toBe(1n); | ||
expect(counter.next()).toBe(2n); | ||
expect(counter.next()).toBe(3n); | ||
expect(sequence.next()).toBe(1); | ||
expect(sequence.next()).toBe(2); | ||
expect(sequence.next()).toBe(3); | ||
}); | ||
test("#reset()", () => { | ||
expect(counter.next()).toBe(1n); | ||
expect(counter.next()).toBe(2n); | ||
expect(sequence.next()).toBe(1); | ||
expect(sequence.next()).toBe(2); | ||
counter.reset(); | ||
expect(counter.next()).toBe(1n); | ||
sequence.reset(); | ||
expect(sequence.next()).toBe(1); | ||
}); | ||
@@ -26,43 +26,43 @@ | ||
// @ts-ignore | ||
const next = jest.spyOn(counter.state, "next"); | ||
const next = jest.spyOn(sequence.state, "next"); | ||
for (const value of counter) { | ||
for (const value of sequence) { | ||
expect(next).toHaveBeenCalledTimes(1); | ||
expect(value).toBe(1n); | ||
expect(value).toBe(1); | ||
break; | ||
} | ||
}); | ||
}); | ||
describe("number()", () => { | ||
let counter: Counter<number>; | ||
describe(".bigint()", () => { | ||
let sequence: Sequence<bigint>; | ||
beforeEach(() => { | ||
counter = number(); | ||
}); | ||
beforeEach(() => { | ||
sequence = autoincr.bigint(); | ||
}); | ||
test("#next()", () => { | ||
expect(counter.next()).toBe(1); | ||
expect(counter.next()).toBe(2); | ||
expect(counter.next()).toBe(3); | ||
}); | ||
test("#next()", () => { | ||
expect(sequence.next()).toBe(1n); | ||
expect(sequence.next()).toBe(2n); | ||
expect(sequence.next()).toBe(3n); | ||
}); | ||
test("#reset()", () => { | ||
expect(counter.next()).toBe(1); | ||
expect(counter.next()).toBe(2); | ||
test("#reset()", () => { | ||
expect(sequence.next()).toBe(1n); | ||
expect(sequence.next()).toBe(2n); | ||
counter.reset(); | ||
expect(counter.next()).toBe(1); | ||
}); | ||
sequence.reset(); | ||
expect(sequence.next()).toBe(1n); | ||
}); | ||
test("#@@iterator()", () => { | ||
// @ts-ignore | ||
const next = jest.spyOn(counter.state, "next"); | ||
test("#@@iterator()", () => { | ||
// @ts-ignore | ||
const next = jest.spyOn(sequence.state, "next"); | ||
for (const value of counter) { | ||
expect(next).toHaveBeenCalledTimes(1); | ||
expect(value).toBe(1); | ||
break; | ||
} | ||
for (const value of sequence) { | ||
expect(next).toHaveBeenCalledTimes(1); | ||
expect(value).toBe(1n); | ||
break; | ||
} | ||
}); | ||
}); | ||
}); |
@@ -1,5 +0,14 @@ | ||
export { bigint, number }; | ||
export type { Counter }; | ||
interface AutoIncr { | ||
/** | ||
* Returns a sequence of auto-incrementing bigints. | ||
*/ | ||
bigint(): Sequence<bigint>; | ||
class Counter<T> { | ||
/** | ||
* Returns a sequence of auto-incrementing numbers. | ||
*/ | ||
(): Sequence<number>; | ||
} | ||
class Sequence<T> { | ||
private readonly factory!: () => Generator<T, never, void>; | ||
@@ -41,18 +50,6 @@ private state!: Generator<T, never, void>; | ||
/** | ||
* Returns a sequence of auto-incrementing bigints. | ||
*/ | ||
function bigint(): Counter<bigint> { | ||
return new Counter(function* () { | ||
for (let state = 1n; ; state++) yield state; | ||
}); | ||
} | ||
/** | ||
* Returns a sequence of auto-incrementing numbers. | ||
*/ | ||
function number(): Counter<number> { | ||
function autoincr(): Sequence<number> { | ||
const ceiling = Number.MAX_SAFE_INTEGER; | ||
return new Counter(function* () { | ||
return new Sequence(function* () { | ||
for (let state = 1; state < ceiling; state++) yield state; | ||
@@ -63,1 +60,14 @@ // istanbul ignore next | ||
} | ||
function bigint(): Sequence<bigint> { | ||
return new Sequence(function* () { | ||
for (let state = 1n; ; state++) yield state; | ||
}); | ||
} | ||
Object.defineProperty(autoincr, "bigint", { | ||
value: bigint, | ||
}); | ||
export type { Sequence }; | ||
export default autoincr as AutoIncr; |
@@ -9,3 +9,4 @@ { | ||
}, | ||
"exclude": ["src/lib.test.ts"] | ||
"exclude": ["src/*.test.ts"], | ||
"include": ["src/*.ts"] | ||
} |
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
18451
48
0
1
177