Skip to content

Commit

Permalink
Merge pull request #6 from MatrixAI/idprimitive
Browse files Browse the repository at this point in the history
Changing to Id derivative of Uint8Array in order to provide operator overloading
  • Loading branch information
CMCDragonkai authored Oct 17, 2021
2 parents e6bf8c8 + 297ebf8 commit 93f05da
Show file tree
Hide file tree
Showing 26 changed files with 3,031 additions and 262 deletions.
2 changes: 1 addition & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
"no-constant-condition": 0,
"no-useless-escape": 0,
"no-console": "error",
"eqeqeq": ["error", "smart"],
"capitalized-comments": [
"warn",
"always",
Expand Down Expand Up @@ -66,6 +65,7 @@
{
"selector": "parameter",
"format": ["camelCase"],
"leadingUnderscore": "allowSingleOrDouble",
"trailingUnderscore": "allowSingleOrDouble"
},
{
Expand Down
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,28 @@ const deteGen = new IdDeterministic({

const deteId1 = deteGen.get();
const deteId2 = deteGen.get('bar');
const deteId3 = deteGen.get('bar');

console.log(utils.toUUID(deteId1));
console.log(utils.toMultibase(deteId2, 'base58btc'));

// Will be cast to string index
const recordOfDeteIds = {};
recordOfDeteIds[deteId1] = 1;
recordOfDeteIds[deteId2] = 1;
console.log(recordOfDeteIds[deteId1]);

// Can be checked for equality
console.log(deteId2.toString() === deteId3.toString());

// Strictly monotonic sortable ids, equivalent to UUIDv7

let lastId = new Uint8Array(
[
0x06, 0x16, 0x3e, 0xf5, 0x6d, 0x8d, 0x70, 0x00,
0x87, 0xc4, 0x65, 0xd5, 0x21, 0x9b, 0x03, 0xd4,
]
).buffer;
);

const sortGen = new IdSortable({ lastId });

Expand All @@ -44,9 +54,9 @@ const sortId2 = sortGen.get();
const sortId3 = sortGen.get();

const sortIds = [
Buffer.from(sortId2),
Buffer.from(sortId3),
Buffer.from(sortId1),
utils.toBuffer(sortId2),
utils.toBuffer(sortId3),
utils.toBuffer(sortId1),
];

sortIds.sort(Buffer.compare);
Expand All @@ -55,6 +65,10 @@ console.log(sortIds);

// Save the last id to ensure strict monotonicity across process restarts
lastId = sortGen.lastId;

// Ids can also be compared in order
console.log(sortId1 < sortId2);
console.log(sortId2 < sortId3);
```

## Installation
Expand Down
2 changes: 1 addition & 1 deletion docs/assets/js/search.js

Large diffs are not rendered by default.

2,210 changes: 2,210 additions & 0 deletions docs/classes/Id.default.html

Large diffs are not rendered by default.

27 changes: 15 additions & 12 deletions docs/classes/IdDeterministic.default.html
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ <h3>Hierarchy</h3>
<section class="tsd-panel">
<h3>Implements</h3>
<ul class="tsd-hierarchy">
<li><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
<li><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
</section>
<section class="tsd-panel-group tsd-index-group">
Expand Down Expand Up @@ -133,7 +133,7 @@ <h3>constructor</h3>
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdDeterministic.ts#L14">IdDeterministic.ts:14</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdDeterministic.ts#L17">src/IdDeterministic.ts:17</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
Expand All @@ -160,7 +160,7 @@ <h3><span class="tsd-flag ts-flagProtected">Protected</span> namespace<wbr>Data<
<div class="tsd-signature tsd-kind-icon">namespace<wbr>Data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Uint8Array</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdDeterministic.ts#L12">IdDeterministic.ts:12</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdDeterministic.ts#L15">src/IdDeterministic.ts:15</a></li>
</ul>
</aside>
</section>
Expand All @@ -171,31 +171,31 @@ <h2>Methods</h2>
<a name="_iterator_" class="tsd-anchor"></a>
<h3>[iterator]</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">[iterator]<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">[iterator]<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<p>Implementation of IterableIterator.__@iterator@79</p>
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdDeterministic.ts#L37">IdDeterministic.ts:37</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdDeterministic.ts#L40">src/IdDeterministic.ts:40</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="get" class="tsd-anchor"></a>
<h3>get</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">(</span>name<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">ArrayBuffer</span></li>
<li class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">(</span>name<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdDeterministic.ts#L24">IdDeterministic.ts:24</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdDeterministic.ts#L27">src/IdDeterministic.ts:27</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
Expand All @@ -204,22 +204,22 @@ <h4 class="tsd-parameters-title">Parameters</h4>
<h5><span class="tsd-flag ts-flagOptional">Optional</span> name: <span class="tsd-signature-type">string</span></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">ArrayBuffer</span></h4>
<h4 class="tsd-returns-title">Returns <a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="next" class="tsd-anchor"></a>
<h3>next</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>name<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span>name<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<p>Implementation of IterableIterator.next</p>
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdDeterministic.ts#L28">IdDeterministic.ts:28</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdDeterministic.ts#L31">src/IdDeterministic.ts:31</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
Expand All @@ -228,7 +228,7 @@ <h4 class="tsd-parameters-title">Parameters</h4>
<h5>name: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> = &#x27;&#x27;</span></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</section>
Expand All @@ -240,6 +240,9 @@ <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorR
<li class=" ">
<a href="../modules.html">Modules</a>
</li>
<li class=" tsd-kind-module">
<a href="../modules/Id.html">Id</a>
</li>
<li class="current tsd-kind-module">
<a href="../modules/IdDeterministic.html">Id<wbr>Deterministic</a>
</li>
Expand Down
29 changes: 16 additions & 13 deletions docs/classes/IdRandom.default.html
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ <h3>Hierarchy</h3>
<section class="tsd-panel">
<h3>Implements</h3>
<ul class="tsd-hierarchy">
<li><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
<li><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
</section>
<section class="tsd-panel-group tsd-index-group">
Expand Down Expand Up @@ -121,7 +121,7 @@ <h3>constructor</h3>
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L7">IdRandom.ts:7</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L10">src/IdRandom.ts:10</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
Expand All @@ -138,7 +138,7 @@ <h5>random<wbr>Source<span class="tsd-signature-symbol">: </span>function</h5>
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L10">IdRandom.ts:10</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L13">src/IdRandom.ts:13</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
Expand Down Expand Up @@ -167,7 +167,7 @@ <h3><span class="tsd-flag ts-flagProtected">Protected</span> random<wbr>Source</
<div class="tsd-signature tsd-kind-icon">random<wbr>Source<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>size<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Uint8Array</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L5">IdRandom.ts:5</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L8">src/IdRandom.ts:8</a></li>
</ul>
</aside>
<div class="tsd-type-declaration">
Expand Down Expand Up @@ -199,52 +199,52 @@ <h2>Methods</h2>
<a name="_iterator_" class="tsd-anchor"></a>
<h3>[iterator]</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">[iterator]<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">[iterator]<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<p>Implementation of IterableIterator.__@iterator@79</p>
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L34">IdRandom.ts:34</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L37">src/IdRandom.ts:37</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IterableIterator</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="get" class="tsd-anchor"></a>
<h3>get</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">ArrayBuffer</span></li>
<li class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L15">IdRandom.ts:15</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L18">src/IdRandom.ts:18</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">ArrayBuffer</span></h4>
<h4 class="tsd-returns-title">Returns <a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="next" class="tsd-anchor"></a>
<h3>next</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon">next<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<p>Implementation of IterableIterator.next</p>
<ul>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/699ba29/src/IdRandom.ts#L19">IdRandom.ts:19</a></li>
<li>Defined in <a href="https://github.com/MatrixAI/js-id/blob/3d425fa/src/IdRandom.ts#L22">src/IdRandom.ts:22</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">ArrayBuffer</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorResult</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/Id.html#Id-1" class="tsd-signature-type" data-tsd-kind="Type alias">Id</a><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</section>
Expand All @@ -256,6 +256,9 @@ <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">IteratorR
<li class=" ">
<a href="../modules.html">Modules</a>
</li>
<li class=" tsd-kind-module">
<a href="../modules/Id.html">Id</a>
</li>
<li class=" tsd-kind-module">
<a href="../modules/IdDeterministic.html">Id<wbr>Deterministic</a>
</li>
Expand Down
Loading

0 comments on commit 93f05da

Please sign in to comment.