copy bloatless-react
This commit is contained in:
Vendored
+9
@@ -488,6 +488,15 @@ body[showing-chat] #chat-page-wrapper {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.modal.task-settings:not([full-description]) :is(#fullscreen-exit, #fullscreen-main) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.modal.task-settings[full-description] :is(#controls, #standard-main) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.modal.task-settings[full-description] > div {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
/* src/View/ChatPages/taskPage.css */
|
/* src/View/ChatPages/taskPage.css */
|
||||||
#chat-page > div > #main > #task-page > .pane-wrapper > .pane > .main-content {
|
#chat-page > div > #main > #task-page > .pane-wrapper > .pane > .main-content {
|
||||||
|
|||||||
Vendored
+61
-16
@@ -311,6 +311,7 @@
|
|||||||
cancelButton: "Cancel",
|
cancelButton: "Cancel",
|
||||||
closeButton: "Close",
|
closeButton: "Close",
|
||||||
deleteButton: "Delete",
|
deleteButton: "Delete",
|
||||||
|
exitButton: "Exit",
|
||||||
continueButton: "Continue",
|
continueButton: "Continue",
|
||||||
confirmButton: "Confirm",
|
confirmButton: "Confirm",
|
||||||
saveButton: "Save",
|
saveButton: "Save",
|
||||||
@@ -508,6 +509,7 @@
|
|||||||
taskStatusLabel: "Status",
|
taskStatusLabel: "Status",
|
||||||
taskPriorityLabel: "Priority",
|
taskPriorityLabel: "Priority",
|
||||||
taskDescriptionLabel: "Description",
|
taskDescriptionLabel: "Description",
|
||||||
|
taskDescriptionExpandButton: "Fullscreen",
|
||||||
taskDateLabel: "Date",
|
taskDateLabel: "Date",
|
||||||
taskTimeLabel: "Time",
|
taskTimeLabel: "Time",
|
||||||
deleteTaskButton: "Delete task",
|
deleteTaskButton: "Delete task",
|
||||||
@@ -1274,7 +1276,7 @@
|
|||||||
this.connectionModel = connectionModel2;
|
this.connectionModel = connectionModel2;
|
||||||
this.chatListModel = chatListModel2;
|
this.chatListModel = chatListModel2;
|
||||||
this.fileTransferModel = fileTransferModel2;
|
this.fileTransferModel = fileTransferModel2;
|
||||||
this.BUILD = "Build 26.09.22.A";
|
this.BUILD = "Build 26.09.22.B";
|
||||||
// CONTEXT
|
// CONTEXT
|
||||||
this.contextStack = /* @__PURE__ */ new Map();
|
this.contextStack = /* @__PURE__ */ new Map();
|
||||||
this.closeContext = (contextId, fromHistoryEvent = false) => {
|
this.closeContext = (contextId, fromHistoryEvent = false) => {
|
||||||
@@ -2808,6 +2810,7 @@
|
|||||||
this.time = new State("");
|
this.time = new State("");
|
||||||
this.selectedVersionId = new State("");
|
this.selectedVersionId = new State("");
|
||||||
this.versionIds = new ListState();
|
this.versionIds = new ListState();
|
||||||
|
this.isPresentingFullScreenDescription = new State(false);
|
||||||
// methods
|
// methods
|
||||||
this.dragStart = (event) => {
|
this.dragStart = (event) => {
|
||||||
ViewController.allowDrag(event);
|
ViewController.allowDrag(event);
|
||||||
@@ -2839,6 +2842,12 @@
|
|||||||
this.close();
|
this.close();
|
||||||
this.save();
|
this.save();
|
||||||
};
|
};
|
||||||
|
this.openFullscreenDecription = () => {
|
||||||
|
this.isPresentingFullScreenDescription.value = true;
|
||||||
|
};
|
||||||
|
this.closeFullscreenDecription = () => {
|
||||||
|
this.isPresentingFullScreenDescription.value = false;
|
||||||
|
};
|
||||||
this.updateIndex = () => {
|
this.updateIndex = () => {
|
||||||
const index = this.containingViewModel.taskIndexManager.getIndex(this);
|
const index = this.containingViewModel.taskIndexManager.getIndex(this);
|
||||||
this.index.value = index;
|
this.index.value = index;
|
||||||
@@ -5420,11 +5429,10 @@
|
|||||||
const isSelected = entry[0] == taskViewModel.task.boardId;
|
const isSelected = entry[0] == taskViewModel.task.boardId;
|
||||||
return Option(entry[1], entry[0], isSelected);
|
return Option(entry[1], entry[0], isSelected);
|
||||||
};
|
};
|
||||||
return /* @__PURE__ */ createElement("div", { class: "modal task-settings", open: true }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.chatPage.task.taskSettingsHeadline), /* @__PURE__ */ createElement("div", { class: "column-wrapper" }, /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "label"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskNameLabel), /* @__PURE__ */ createElement(
|
return /* @__PURE__ */ createElement("div", { class: "modal task-settings", open: true, "toggle:full-description": taskViewModel.isPresentingFullScreenDescription }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", { id: "standard-main" }, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.chatPage.task.taskSettingsHeadline), /* @__PURE__ */ createElement("div", { class: "column-wrapper" }, /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "label"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskNameLabel), /* @__PURE__ */ createElement(
|
||||||
"input",
|
"input",
|
||||||
{
|
{
|
||||||
"bind:value": taskViewModel.name,
|
"bind:value": taskViewModel.name
|
||||||
id: "focused"
|
|
||||||
}
|
}
|
||||||
))), /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "category"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskBoardLabel), /* @__PURE__ */ createElement(
|
))), /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "category"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskBoardLabel), /* @__PURE__ */ createElement(
|
||||||
"select",
|
"select",
|
||||||
@@ -5441,7 +5449,15 @@
|
|||||||
rows: "10",
|
rows: "10",
|
||||||
"bind:value": taskViewModel.description
|
"bind:value": taskViewModel.description
|
||||||
}
|
}
|
||||||
)))), /* @__PURE__ */ createElement("hr", { class: "mobile-only" }), /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "category"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskCategoryLabel), /* @__PURE__ */ createElement(
|
))), /* @__PURE__ */ createElement("div", { class: "flex-row justify-end" }, /* @__PURE__ */ createElement(
|
||||||
|
"button",
|
||||||
|
{
|
||||||
|
class: "width-50",
|
||||||
|
"on:click": taskViewModel.openFullscreenDecription
|
||||||
|
},
|
||||||
|
coreViewModel2.translations.chatPage.task.taskDescriptionExpandButton,
|
||||||
|
/* @__PURE__ */ createElement("span", { class: "icon" }, "fullscreen")
|
||||||
|
))), /* @__PURE__ */ createElement("hr", { class: "mobile-only" }), /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile flex-no" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "category"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, coreViewModel2.translations.chatPage.task.taskCategoryLabel), /* @__PURE__ */ createElement(
|
||||||
"input",
|
"input",
|
||||||
{
|
{
|
||||||
"bind:value": taskViewModel.category,
|
"bind:value": taskViewModel.category,
|
||||||
@@ -5505,22 +5521,51 @@
|
|||||||
coreViewModel2.translations.chatPage.task.deleteTaskButton,
|
coreViewModel2.translations.chatPage.task.deleteTaskButton,
|
||||||
"delete_forever",
|
"delete_forever",
|
||||||
taskViewModel.deleteTask
|
taskViewModel.deleteTask
|
||||||
))), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement(
|
))), /* @__PURE__ */ createElement("main", { id: "fullscreen-main" }, /* @__PURE__ */ createElement(
|
||||||
"button",
|
"textarea",
|
||||||
{
|
{
|
||||||
class: "flex",
|
style: "height: 100%; width: 100%; max-width: unset",
|
||||||
"on:click": taskViewModel.closeAndDiscard
|
"bind:value": taskViewModel.description
|
||||||
|
}
|
||||||
|
)), /* @__PURE__ */ createElement(
|
||||||
|
"div",
|
||||||
|
{
|
||||||
|
class: "flex-row width-100",
|
||||||
|
id: "fullscreen-exit"
|
||||||
},
|
},
|
||||||
coreViewModel2.translations.general.closeButton
|
/* @__PURE__ */ createElement(
|
||||||
|
"button",
|
||||||
|
{
|
||||||
|
class: "flex",
|
||||||
|
"on:click": taskViewModel.closeFullscreenDecription
|
||||||
|
},
|
||||||
|
coreViewModel2.translations.general.exitButton,
|
||||||
|
/* @__PURE__ */ createElement("span", { class: "icon" }, "fullscreen_exit")
|
||||||
|
)
|
||||||
), /* @__PURE__ */ createElement(
|
), /* @__PURE__ */ createElement(
|
||||||
"button",
|
"div",
|
||||||
{
|
{
|
||||||
class: "flex primary",
|
class: "flex-row width-100",
|
||||||
"on:click": taskViewModel.closeAndSave
|
id: "controls"
|
||||||
},
|
},
|
||||||
coreViewModel2.translations.general.saveButton,
|
/* @__PURE__ */ createElement(
|
||||||
/* @__PURE__ */ createElement("span", { class: "icon" }, "save")
|
"button",
|
||||||
))));
|
{
|
||||||
|
class: "flex",
|
||||||
|
"on:click": taskViewModel.closeAndDiscard
|
||||||
|
},
|
||||||
|
coreViewModel2.translations.general.closeButton
|
||||||
|
),
|
||||||
|
/* @__PURE__ */ createElement(
|
||||||
|
"button",
|
||||||
|
{
|
||||||
|
class: "flex primary",
|
||||||
|
"on:click": taskViewModel.closeAndSave
|
||||||
|
},
|
||||||
|
coreViewModel2.translations.general.saveButton,
|
||||||
|
/* @__PURE__ */ createElement("span", { class: "icon" }, "save")
|
||||||
|
)
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/View/Modals/searchModal.tsx
|
// src/View/Modals/searchModal.tsx
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
../uuid/dist/bin/uuid
|
../uuid/dist-node/bin/uuid
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../../bloatless-react
|
|
||||||
-292
@@ -1,292 +0,0 @@
|
|||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
||||||
|
|
||||||
## [10.0.0](https://github.com/uuidjs/uuid/compare/v9.0.0...v10.0.0) (2024-06-07)
|
|
||||||
|
|
||||||
### ⚠ BREAKING CHANGES
|
|
||||||
|
|
||||||
- update node support (drop node@12, node@14, add node@20) (#750)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- support support rfc9562 MAX uuid (new in RFC9562) ([#714](https://github.com/uuidjs/uuid/issues/714)) ([0385cd3](https://github.com/uuidjs/uuid/commit/0385cd3f18ae9920678b2849932fa7a9d9aee7d0))
|
|
||||||
- support rfc9562 v6 uuids ([#754](https://github.com/uuidjs/uuid/issues/754)) ([c4ed13e](https://github.com/uuidjs/uuid/commit/c4ed13e7159d87c9e42a349bdd9dc955f1af46b6))
|
|
||||||
- support rfc9562 v7 uuids ([#681](https://github.com/uuidjs/uuid/issues/681)) ([db76a12](https://github.com/uuidjs/uuid/commit/db76a1284760c441438f50a57924b322dae08891))
|
|
||||||
- update node support matrix (only support node 16-20) ([#750](https://github.com/uuidjs/uuid/issues/750)) ([883b163](https://github.com/uuidjs/uuid/commit/883b163b9ab9d6655bfbd8a35e61a3c71674dfe1))
|
|
||||||
- support rfc9562 v8 uuids ([#759](https://github.com/uuidjs/uuid/issues/759)) ([35a5342](https://github.com/uuidjs/uuid/commit/35a53428202657e402e6b4aa68f56c08194541bf))
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- revert "perf: remove superfluous call to toLowerCase ([#677](https://github.com/uuidjs/uuid/issues/677))" ([#738](https://github.com/uuidjs/uuid/issues/738)) ([e267b90](https://github.com/uuidjs/uuid/commit/e267b9073df1d0ce119ee53c0487fe76acb2be37))
|
|
||||||
|
|
||||||
## [9.0.1](https://github.com/uuidjs/uuid/compare/v9.0.0...v9.0.1) (2023-09-12)
|
|
||||||
|
|
||||||
### build
|
|
||||||
|
|
||||||
- Fix CI to work with Node.js 20.x
|
|
||||||
|
|
||||||
## [9.0.0](https://github.com/uuidjs/uuid/compare/v8.3.2...v9.0.0) (2022-09-05)
|
|
||||||
|
|
||||||
### ⚠ BREAKING CHANGES
|
|
||||||
|
|
||||||
- Drop Node.js 10.x support. This library always aims at supporting one EOLed LTS release which by this time now is 12.x which has reached EOL 30 Apr 2022.
|
|
||||||
|
|
||||||
- Remove the minified UMD build from the package.
|
|
||||||
|
|
||||||
Minified code is hard to audit and since this is a widely used library it seems more appropriate nowadays to optimize for auditability than to ship a legacy module format that, at best, serves educational purposes nowadays.
|
|
||||||
|
|
||||||
For production browser use cases, users should be using a bundler. For educational purposes, today's online sandboxes like replit.com offer convenient ways to load npm modules, so the use case for UMD through repos like UNPKG or jsDelivr has largely vanished.
|
|
||||||
|
|
||||||
- Drop IE 11 and Safari 10 support. Drop support for browsers that don't correctly implement const/let and default arguments, and no longer transpile the browser build to ES2015.
|
|
||||||
|
|
||||||
This also removes the fallback on msCrypto instead of the crypto API.
|
|
||||||
|
|
||||||
Browser tests are run in the first supported version of each supported browser and in the latest (as of this commit) version available on Browserstack.
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- optimize uuid.v1 by 1.3x uuid.v4 by 4.3x (430%) ([#597](https://github.com/uuidjs/uuid/issues/597)) ([3a033f6](https://github.com/uuidjs/uuid/commit/3a033f6bab6bb3780ece6d645b902548043280bc))
|
|
||||||
- remove UMD build ([#645](https://github.com/uuidjs/uuid/issues/645)) ([e948a0f](https://github.com/uuidjs/uuid/commit/e948a0f22bf22f4619b27bd913885e478e20fe6f)), closes [#620](https://github.com/uuidjs/uuid/issues/620)
|
|
||||||
- use native crypto.randomUUID when available ([#600](https://github.com/uuidjs/uuid/issues/600)) ([c9e076c](https://github.com/uuidjs/uuid/commit/c9e076c852edad7e9a06baaa1d148cf4eda6c6c4))
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- add Jest/jsdom compatibility ([#642](https://github.com/uuidjs/uuid/issues/642)) ([16f9c46](https://github.com/uuidjs/uuid/commit/16f9c469edf46f0786164cdf4dc980743984a6fd))
|
|
||||||
- change default export to named function ([#545](https://github.com/uuidjs/uuid/issues/545)) ([c57bc5a](https://github.com/uuidjs/uuid/commit/c57bc5a9a0653273aa639cda9177ce52efabe42a))
|
|
||||||
- handle error when parameter is not set in v3 and v5 ([#622](https://github.com/uuidjs/uuid/issues/622)) ([fcd7388](https://github.com/uuidjs/uuid/commit/fcd73881692d9fabb63872576ba28e30ff852091))
|
|
||||||
- run npm audit fix ([#644](https://github.com/uuidjs/uuid/issues/644)) ([04686f5](https://github.com/uuidjs/uuid/commit/04686f54c5fed2cfffc1b619f4970c4bb8532353))
|
|
||||||
- upgrading from uuid3 broken link ([#568](https://github.com/uuidjs/uuid/issues/568)) ([1c849da](https://github.com/uuidjs/uuid/commit/1c849da6e164259e72e18636726345b13a7eddd6))
|
|
||||||
|
|
||||||
### build
|
|
||||||
|
|
||||||
- drop Node.js 8.x from babel transpile target ([#603](https://github.com/uuidjs/uuid/issues/603)) ([aa11485](https://github.com/uuidjs/uuid/commit/aa114858260402107ec8a1e1a825dea0a259bcb5))
|
|
||||||
- drop support for legacy browsers (IE11, Safari 10) ([#604](https://github.com/uuidjs/uuid/issues/604)) ([0f433e5](https://github.com/uuidjs/uuid/commit/0f433e5ec444edacd53016de67db021102f36148))
|
|
||||||
|
|
||||||
- drop node 10.x to upgrade dev dependencies ([#653](https://github.com/uuidjs/uuid/issues/653)) ([28a5712](https://github.com/uuidjs/uuid/commit/28a571283f8abda6b9d85e689f95b7d3ee9e282e)), closes [#643](https://github.com/uuidjs/uuid/issues/643)
|
|
||||||
|
|
||||||
### [8.3.2](https://github.com/uuidjs/uuid/compare/v8.3.1...v8.3.2) (2020-12-08)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- lazy load getRandomValues ([#537](https://github.com/uuidjs/uuid/issues/537)) ([16c8f6d](https://github.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)), closes [#536](https://github.com/uuidjs/uuid/issues/536)
|
|
||||||
|
|
||||||
### [8.3.1](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) (2020-10-04)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- support expo>=39.0.0 ([#515](https://github.com/uuidjs/uuid/issues/515)) ([c65a0f3](https://github.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)), closes [#375](https://github.com/uuidjs/uuid/issues/375)
|
|
||||||
|
|
||||||
## [8.3.0](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.0) (2020-07-27)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- add parse/stringify/validate/version/NIL APIs ([#479](https://github.com/uuidjs/uuid/issues/479)) ([0e6c10b](https://github.com/uuidjs/uuid/commit/0e6c10ba1bf9517796ff23c052fc0468eedfd5f4)), closes [#475](https://github.com/uuidjs/uuid/issues/475) [#478](https://github.com/uuidjs/uuid/issues/478) [#480](https://github.com/uuidjs/uuid/issues/480) [#481](https://github.com/uuidjs/uuid/issues/481) [#180](https://github.com/uuidjs/uuid/issues/180)
|
|
||||||
|
|
||||||
## [8.2.0](https://github.com/uuidjs/uuid/compare/v8.1.0...v8.2.0) (2020-06-23)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- improve performance of v1 string representation ([#453](https://github.com/uuidjs/uuid/issues/453)) ([0ee0b67](https://github.com/uuidjs/uuid/commit/0ee0b67c37846529c66089880414d29f3ae132d5))
|
|
||||||
- remove deprecated v4 string parameter ([#454](https://github.com/uuidjs/uuid/issues/454)) ([88ce3ca](https://github.com/uuidjs/uuid/commit/88ce3ca0ba046f60856de62c7ce03f7ba98ba46c)), closes [#437](https://github.com/uuidjs/uuid/issues/437)
|
|
||||||
- support jspm ([#473](https://github.com/uuidjs/uuid/issues/473)) ([e9f2587](https://github.com/uuidjs/uuid/commit/e9f2587a92575cac31bc1d4ae944e17c09756659))
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- prepare package exports for webpack 5 ([#468](https://github.com/uuidjs/uuid/issues/468)) ([8d6e6a5](https://github.com/uuidjs/uuid/commit/8d6e6a5f8965ca9575eb4d92e99a43435f4a58a8))
|
|
||||||
|
|
||||||
## [8.1.0](https://github.com/uuidjs/uuid/compare/v8.0.0...v8.1.0) (2020-05-20)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- improve v4 performance by reusing random number array ([#435](https://github.com/uuidjs/uuid/issues/435)) ([bf4af0d](https://github.com/uuidjs/uuid/commit/bf4af0d711b4d2ed03d1f74fd12ad0baa87dc79d))
|
|
||||||
- optimize V8 performance of bytesToUuid ([#434](https://github.com/uuidjs/uuid/issues/434)) ([e156415](https://github.com/uuidjs/uuid/commit/e156415448ec1af2351fa0b6660cfb22581971f2))
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- export package.json required by react-native and bundlers ([#449](https://github.com/uuidjs/uuid/issues/449)) ([be1c8fe](https://github.com/uuidjs/uuid/commit/be1c8fe9a3206c358e0059b52fafd7213aa48a52)), closes [ai/nanoevents#44](https://github.com/ai/nanoevents/issues/44#issuecomment-602010343) [#444](https://github.com/uuidjs/uuid/issues/444)
|
|
||||||
|
|
||||||
## [8.0.0](https://github.com/uuidjs/uuid/compare/v7.0.3...v8.0.0) (2020-04-29)
|
|
||||||
|
|
||||||
### ⚠ BREAKING CHANGES
|
|
||||||
|
|
||||||
- For native ECMAScript Module (ESM) usage in Node.js only named exports are exposed, there is no more default export.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
-import uuid from 'uuid';
|
|
||||||
-console.log(uuid.v4()); // -> 'cd6c3b08-0adc-4f4b-a6ef-36087a1c9869'
|
|
||||||
+import { v4 as uuidv4 } from 'uuid';
|
|
||||||
+uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
|
|
||||||
```
|
|
||||||
|
|
||||||
- Deep requiring specific algorithms of this library like `require('uuid/v4')`, which has been deprecated in `uuid@7`, is no longer supported.
|
|
||||||
|
|
||||||
Instead use the named exports that this module exports.
|
|
||||||
|
|
||||||
For ECMAScript Modules (ESM):
|
|
||||||
|
|
||||||
```diff
|
|
||||||
-import uuidv4 from 'uuid/v4';
|
|
||||||
+import { v4 as uuidv4 } from 'uuid';
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
For CommonJS:
|
|
||||||
|
|
||||||
```diff
|
|
||||||
-const uuidv4 = require('uuid/v4');
|
|
||||||
+const { v4: uuidv4 } = require('uuid');
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- native Node.js ES Modules (wrapper approach) ([#423](https://github.com/uuidjs/uuid/issues/423)) ([2d9f590](https://github.com/uuidjs/uuid/commit/2d9f590ad9701d692625c07ed62f0a0f91227991)), closes [#245](https://github.com/uuidjs/uuid/issues/245) [#419](https://github.com/uuidjs/uuid/issues/419) [#342](https://github.com/uuidjs/uuid/issues/342)
|
|
||||||
- remove deep requires ([#426](https://github.com/uuidjs/uuid/issues/426)) ([daf72b8](https://github.com/uuidjs/uuid/commit/daf72b84ceb20272a81bb5fbddb05dd95922cbba))
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- add CommonJS syntax example to README quickstart section ([#417](https://github.com/uuidjs/uuid/issues/417)) ([e0ec840](https://github.com/uuidjs/uuid/commit/e0ec8402c7ad44b7ef0453036c612f5db513fda0))
|
|
||||||
|
|
||||||
### [7.0.3](https://github.com/uuidjs/uuid/compare/v7.0.2...v7.0.3) (2020-03-31)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- make deep require deprecation warning work in browsers ([#409](https://github.com/uuidjs/uuid/issues/409)) ([4b71107](https://github.com/uuidjs/uuid/commit/4b71107d8c0d2ef56861ede6403fc9dc35a1e6bf)), closes [#408](https://github.com/uuidjs/uuid/issues/408)
|
|
||||||
|
|
||||||
### [7.0.2](https://github.com/uuidjs/uuid/compare/v7.0.1...v7.0.2) (2020-03-04)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- make access to msCrypto consistent ([#393](https://github.com/uuidjs/uuid/issues/393)) ([8bf2a20](https://github.com/uuidjs/uuid/commit/8bf2a20f3565df743da7215eebdbada9d2df118c))
|
|
||||||
- simplify link in deprecation warning ([#391](https://github.com/uuidjs/uuid/issues/391)) ([bb2c8e4](https://github.com/uuidjs/uuid/commit/bb2c8e4e9f4c5f9c1eaaf3ea59710c633cd90cb7))
|
|
||||||
- update links to match content in readme ([#386](https://github.com/uuidjs/uuid/issues/386)) ([44f2f86](https://github.com/uuidjs/uuid/commit/44f2f86e9d2bbf14ee5f0f00f72a3db1292666d4))
|
|
||||||
|
|
||||||
### [7.0.1](https://github.com/uuidjs/uuid/compare/v7.0.0...v7.0.1) (2020-02-25)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- clean up esm builds for node and browser ([#383](https://github.com/uuidjs/uuid/issues/383)) ([59e6a49](https://github.com/uuidjs/uuid/commit/59e6a49e7ce7b3e8fb0f3ee52b9daae72af467dc))
|
|
||||||
- provide browser versions independent from module system ([#380](https://github.com/uuidjs/uuid/issues/380)) ([4344a22](https://github.com/uuidjs/uuid/commit/4344a22e7aed33be8627eeaaf05360f256a21753)), closes [#378](https://github.com/uuidjs/uuid/issues/378)
|
|
||||||
|
|
||||||
## [7.0.0](https://github.com/uuidjs/uuid/compare/v3.4.0...v7.0.0) (2020-02-24)
|
|
||||||
|
|
||||||
### ⚠ BREAKING CHANGES
|
|
||||||
|
|
||||||
- The default export, which used to be the v4() method but which was already discouraged in v3.x of this library, has been removed.
|
|
||||||
- Explicitly note that deep imports of the different uuid version functions are deprecated and no longer encouraged and that ECMAScript module named imports should be used instead. Emit a deprecation warning for people who deep-require the different algorithm variants.
|
|
||||||
- Remove builtin support for insecure random number generators in the browser. Users who want that will have to supply their own random number generator function.
|
|
||||||
- Remove support for generating v3 and v5 UUIDs in Node.js<4.x
|
|
||||||
- Convert code base to ECMAScript Modules (ESM) and release CommonJS build for node and ESM build for browser bundlers.
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- add UMD build to npm package ([#357](https://github.com/uuidjs/uuid/issues/357)) ([4e75adf](https://github.com/uuidjs/uuid/commit/4e75adf435196f28e3fbbe0185d654b5ded7ca2c)), closes [#345](https://github.com/uuidjs/uuid/issues/345)
|
|
||||||
- add various es module and CommonJS examples ([b238510](https://github.com/uuidjs/uuid/commit/b238510bf352463521f74bab175a3af9b7a42555))
|
|
||||||
- ensure that docs are up-to-date in CI ([ee5e77d](https://github.com/uuidjs/uuid/commit/ee5e77db547474f5a8f23d6c857a6d399209986b))
|
|
||||||
- hybrid CommonJS & ECMAScript modules build ([a3f078f](https://github.com/uuidjs/uuid/commit/a3f078faa0baff69ab41aed08e041f8f9c8993d0))
|
|
||||||
- remove insecure fallback random number generator ([3a5842b](https://github.com/uuidjs/uuid/commit/3a5842b141a6e5de0ae338f391661e6b84b167c9)), closes [#173](https://github.com/uuidjs/uuid/issues/173)
|
|
||||||
- remove support for pre Node.js v4 Buffer API ([#356](https://github.com/uuidjs/uuid/issues/356)) ([b59b5c5](https://github.com/uuidjs/uuid/commit/b59b5c5ecad271c5453f1a156f011671f6d35627))
|
|
||||||
- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([c37a518](https://github.com/uuidjs/uuid/commit/c37a518e367ac4b6d0aa62dba1bc6ce9e85020f7)), closes [#338](https://github.com/uuidjs/uuid/issues/338)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- add deep-require proxies for local testing and adjust tests ([#365](https://github.com/uuidjs/uuid/issues/365)) ([7fedc79](https://github.com/uuidjs/uuid/commit/7fedc79ac8fda4bfd1c566c7f05ef4ac13b2db48))
|
|
||||||
- add note about removal of default export ([#372](https://github.com/uuidjs/uuid/issues/372)) ([12749b7](https://github.com/uuidjs/uuid/commit/12749b700eb49db8a9759fd306d8be05dbfbd58c)), closes [#370](https://github.com/uuidjs/uuid/issues/370)
|
|
||||||
- deprecated deep requiring of the different algorithm versions ([#361](https://github.com/uuidjs/uuid/issues/361)) ([c0bdf15](https://github.com/uuidjs/uuid/commit/c0bdf15e417639b1aeb0b247b2fb11f7a0a26b23))
|
|
||||||
|
|
||||||
## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338)
|
|
||||||
|
|
||||||
## [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- no longer run ci tests on node v4
|
|
||||||
- upgrade dependencies
|
|
||||||
|
|
||||||
## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877))
|
|
||||||
|
|
||||||
## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2))
|
|
||||||
|
|
||||||
# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc))
|
|
||||||
- fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4))
|
|
||||||
- Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331))
|
|
||||||
- mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c))
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182))
|
|
||||||
|
|
||||||
## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b))
|
|
||||||
|
|
||||||
# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824))
|
|
||||||
- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b))
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726))
|
|
||||||
|
|
||||||
# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183)
|
|
||||||
- Fix typo (#178)
|
|
||||||
- Simple typo fix (#165)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- v5 support in CLI (#197)
|
|
||||||
- V5 support (#188)
|
|
||||||
|
|
||||||
# 3.0.1 (2016-11-28)
|
|
||||||
|
|
||||||
- split uuid versions into separate files
|
|
||||||
|
|
||||||
# 3.0.0 (2016-11-17)
|
|
||||||
|
|
||||||
- remove .parse and .unparse
|
|
||||||
|
|
||||||
# 2.0.0
|
|
||||||
|
|
||||||
- Removed uuid.BufferClass
|
|
||||||
|
|
||||||
# 1.4.0
|
|
||||||
|
|
||||||
- Improved module context detection
|
|
||||||
- Removed public RNG functions
|
|
||||||
|
|
||||||
# 1.3.2
|
|
||||||
|
|
||||||
- Improve tests and handling of v1() options (Issue #24)
|
|
||||||
- Expose RNG option to allow for perf testing with different generators
|
|
||||||
|
|
||||||
# 1.3.0
|
|
||||||
|
|
||||||
- Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
|
|
||||||
- Support for node.js crypto API
|
|
||||||
- De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
# Contributing
|
|
||||||
|
|
||||||
Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library!
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
```shell
|
|
||||||
npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
## Releasing
|
|
||||||
|
|
||||||
Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
npm run release -- --dry-run # verify output manually
|
|
||||||
npm run release # follow the instructions from the output of this command
|
|
||||||
```
|
|
||||||
+102
-195
@@ -2,75 +2,62 @@
|
|||||||
-- This file is auto-generated from README_js.md. Changes should be made there.
|
-- This file is auto-generated from README_js.md. Changes should be made there.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
# uuid [](https://github.com/uuidjs/uuid/actions?query=workflow%3ACI) [](https://github.com/uuidjs/uuid/actions/workflows/browser.yml)
|
||||||
|
|
||||||
# uuid [](https://github.com/uuidjs/uuid/actions?query=workflow%3ACI) [](https://github.com/uuidjs/uuid/actions?query=workflow%3ABrowser)
|
For the creation of [RFC9562](https://www.rfc-editor.org/rfc/rfc9562.html) (formerly [RFC4122](https://www.rfc-editor.org/rfc/rfc4122.html)) UUIDs
|
||||||
|
|
||||||
For the creation of [RFC9562](https://www.rfc-editor.org/rfc/rfc9562.html) (formally [RFC4122](https://www.rfc-editor.org/rfc/rfc4122.html)) UUIDs
|
- **Complete** - Support for all RFC9562 UUID versions
|
||||||
|
- **Cross-platform** - Support for...
|
||||||
- **Complete** - Support for all RFC9562 (nee RFC4122) UUID versions
|
- [Typescript](#support)
|
||||||
- **Cross-platform** - Support for ...
|
- [Chrome, Safari, Firefox, and Edge](#support)
|
||||||
- CommonJS, [ECMAScript Modules](#ecmascript-modules) and [CDN builds](#cdn-builds)
|
- [NodeJS](#support)
|
||||||
- NodeJS 16+ ([LTS releases](https://github.com/nodejs/Release))
|
|
||||||
- Chrome, Safari, Firefox, Edge browsers
|
|
||||||
- Webpack and rollup.js module bundlers
|
|
||||||
- [React Native / Expo](#react-native--expo)
|
- [React Native / Expo](#react-native--expo)
|
||||||
- **Secure** - Cryptographically-strong random values
|
- **Secure** - Uses modern `crypto` API for random values
|
||||||
- **Small** - Zero-dependency, small footprint, plays nice with "tree shaking" packagers
|
- **Compact** - Zero-dependency, [tree-shakable](https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking)
|
||||||
- **CLI** - Includes the [`uuid` command line](#command-line) utility
|
- **CLI** - [`uuid` command line](#command-line) utility
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
<!-- prettier-ignore -->
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Upgrading from `uuid@3`? Your code is probably okay, but check out [Upgrading From `uuid@3`](#upgrading-from-uuid3) for details.
|
>
|
||||||
|
> Starting with `uuid@12` CommonJS is no longer supported. See [implications](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and [motivation](https://github.com/uuidjs/uuid/issues/881) for details.
|
||||||
<!-- prettier-ignore -->
|
|
||||||
> [!NOTE]
|
|
||||||
> Only interested in creating a version 4 UUID? You might be able to use [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID), eliminating the need to install this library.
|
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
To create a random UUID...
|
|
||||||
|
|
||||||
**1. Install**
|
**1. Install**
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
npm install uuid
|
npm install uuid
|
||||||
```
|
```
|
||||||
|
|
||||||
**2. Create a UUID** (ES6 module syntax)
|
**2. Create a UUID**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
|
|
||||||
```
|
|
||||||
|
|
||||||
... or using CommonJS syntax:
|
uuidv4(); // ⇨ 'b18794e8-5d0d-417c-b361-ba38e78411b4'
|
||||||
|
|
||||||
```javascript
|
|
||||||
const { v4: uuidv4 } = require('uuid');
|
|
||||||
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
For timestamp UUIDs, namespace UUIDs, and other options read on ...
|
For timestamp UUIDs, namespace UUIDs, and other options read on ...
|
||||||
|
|
||||||
## API Summary
|
## API Summary
|
||||||
|
|
||||||
| | | |
|
| | |
|
||||||
| --- | --- | --- |
|
| --- | --- |
|
||||||
| [`uuid.NIL`](#uuidnil) | The nil UUID string (all zeros) | New in `uuid@8.3` |
|
| [`uuid.NIL`](#uuidnil) | The nil UUID string (all zeros) |
|
||||||
| [`uuid.MAX`](#uuidmax) | The max UUID string (all ones) | New in `uuid@9.1` |
|
| [`uuid.MAX`](#uuidmax) | The max UUID string (all ones) |
|
||||||
| [`uuid.parse()`](#uuidparsestr) | Convert UUID string to array of bytes | New in `uuid@8.3` |
|
| [`uuid.parse()`](#uuidparsestr) | Convert UUID string to array of bytes |
|
||||||
| [`uuid.stringify()`](#uuidstringifyarr-offset) | Convert array of bytes to UUID string | New in `uuid@8.3` |
|
| [`uuid.stringify()`](#uuidstringifyarr-offset) | Convert array of bytes to UUID string |
|
||||||
| [`uuid.v1()`](#uuidv1options-buffer-offset) | Create a version 1 (timestamp) UUID | |
|
| [`uuid.v1()`](#uuidv1options-buffer-offset) | Generate a version 1 (timestamp) UUID |
|
||||||
| [`uuid.v1ToV6()`](#uuidv1tov6uuid) | Create a version 6 UUID from a version 1 UUID | New in `uuid@10` |
|
| [`uuid.v1ToV6()`](#uuidv1tov6uuid) | Convert a version 1 UUID to version 6 |
|
||||||
| [`uuid.v3()`](#uuidv3name-namespace-buffer-offset) | Create a version 3 (namespace w/ MD5) UUID | |
|
| [`uuid.v3()`](#uuidv3name-namespace-buffer-offset) | Generate a version 3 (namespace w/ MD5) UUID |
|
||||||
| [`uuid.v4()`](#uuidv4options-buffer-offset) | Create a version 4 (random) UUID | |
|
| [`uuid.v4()`](#uuidv4options-buffer-offset) | Generate a version 4 (random) UUID |
|
||||||
| [`uuid.v5()`](#uuidv5name-namespace-buffer-offset) | Create a version 5 (namespace w/ SHA-1) UUID | |
|
| [`uuid.v5()`](#uuidv5name-namespace-buffer-offset) | Generate a version 5 (namespace w/ SHA-1) UUID |
|
||||||
| [`uuid.v6()`](#uuidv6options-buffer-offset) | Create a version 6 (timestamp, reordered) UUID | New in `uuid@10` |
|
| [`uuid.v6()`](#uuidv6options-buffer-offset) | Generate a version 6 (timestamp, reordered) UUID |
|
||||||
| [`uuid.v6ToV1()`](#uuidv6tov1uuid) | Create a version 1 UUID from a version 6 UUID | New in `uuid@10` |
|
| [`uuid.v6ToV1()`](#uuidv6tov1uuid) | Convert a version 6 UUID to version 1 |
|
||||||
| [`uuid.v7()`](#uuidv7options-buffer-offset) | Create a version 7 (Unix Epoch time-based) UUID | New in `uuid@10` |
|
| [`uuid.v7()`](#uuidv7options-buffer-offset) | Generate a version 7 (Unix Epoch time-based) UUID |
|
||||||
| ~~[`uuid.v8()`](#uuidv8)~~ | "Intentionally left blank" | |
|
| ~~[`uuid.v8()`](#uuidv8)~~ | "Intentionally left blank" |
|
||||||
| [`uuid.validate()`](#uuidvalidatestr) | Test a string to see if it is a valid UUID | New in `uuid@8.3` |
|
| [`uuid.validate()`](#uuidvalidatestr) | Test a string to see if it is a valid UUID |
|
||||||
| [`uuid.version()`](#uuidversionstr) | Detect RFC version of a UUID | New in `uuid@8.3` |
|
| [`uuid.version()`](#uuidversionstr) | Detect RFC version of a UUID |
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
@@ -118,16 +105,13 @@ Example:
|
|||||||
import { parse as uuidParse } from 'uuid';
|
import { parse as uuidParse } from 'uuid';
|
||||||
|
|
||||||
// Parse a UUID
|
// Parse a UUID
|
||||||
const bytes = uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b');
|
uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨
|
||||||
|
// Uint8Array(16) [
|
||||||
// Convert to hex strings to show byte order (for documentation purposes)
|
// 110, 192, 189, 127, 17,
|
||||||
[...bytes].map((v) => v.toString(16).padStart(2, '0')); // ⇨
|
// 192, 67, 218, 151, 94,
|
||||||
// [
|
// 42, 138, 217, 235, 174,
|
||||||
// '6e', 'c0', 'bd', '7f',
|
// 11
|
||||||
// '11', 'c0', '43', 'da',
|
// ]
|
||||||
// '97', '5e', '2a', '8a',
|
|
||||||
// 'd9', 'eb', 'ae', '0b'
|
|
||||||
// ]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### uuid.stringify(arr[, offset])
|
### uuid.stringify(arr[, offset])
|
||||||
@@ -150,9 +134,24 @@ Example:
|
|||||||
```javascript
|
```javascript
|
||||||
import { stringify as uuidStringify } from 'uuid';
|
import { stringify as uuidStringify } from 'uuid';
|
||||||
|
|
||||||
const uuidBytes = [
|
const uuidBytes = Uint8Array.of(
|
||||||
0x6e, 0xc0, 0xbd, 0x7f, 0x11, 0xc0, 0x43, 0xda, 0x97, 0x5e, 0x2a, 0x8a, 0xd9, 0xeb, 0xae, 0x0b,
|
0x6e,
|
||||||
];
|
0xc0,
|
||||||
|
0xbd,
|
||||||
|
0x7f,
|
||||||
|
0x11,
|
||||||
|
0xc0,
|
||||||
|
0x43,
|
||||||
|
0xda,
|
||||||
|
0x97,
|
||||||
|
0x5e,
|
||||||
|
0x2a,
|
||||||
|
0x8a,
|
||||||
|
0xd9,
|
||||||
|
0xeb,
|
||||||
|
0xae,
|
||||||
|
0x0b
|
||||||
|
);
|
||||||
|
|
||||||
uuidStringify(uuidBytes); // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
|
uuidStringify(uuidBytes); // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
|
||||||
```
|
```
|
||||||
@@ -164,31 +163,23 @@ Create an RFC version 1 (timestamp) UUID
|
|||||||
| | |
|
| | |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [`options`] | `Object` with one or more of the following properties: |
|
| [`options`] | `Object` with one or more of the following properties: |
|
||||||
| [`options.node` ] | RFC "node" field as an `Array[6]` of byte values (per 4.1.6) |
|
| [`options.node = (random)` ] | RFC "node" field as an `Array[6]` of byte values (per 4.1.6) |
|
||||||
| [`options.clockseq`] | RFC "clock sequence" as a `Number` between 0 - 0x3fff |
|
| [`options.clockseq = (random)`] | RFC "clock sequence" as a `Number` between 0 - 0x3fff |
|
||||||
| [`options.msecs`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
|
| [`options.msecs = (current time)`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
|
||||||
| [`options.nsecs`] | RFC "timestamp" field (`Number` of nanoseconds to add to `msecs`, should be 0-10,000) |
|
| [`options.nsecs = 0`] | RFC "timestamp" field (`Number` of nanoseconds to add to `msecs`, should be 0-10,000) |
|
||||||
| [`options.random`] | `Array` of 16 random bytes (0-255) |
|
| [`options.random = (random)`] | `Array` of 16 random bytes (0-255) used to generate other fields, above |
|
||||||
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
||||||
| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` |
|
| [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
|
||||||
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
||||||
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
||||||
| _throws_ | `Error` if more than 10M UUIDs/sec are requested |
|
| _throws_ | `Error` if more than 10M UUIDs/sec are requested |
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
> [!NOTE]
|
|
||||||
> The default [node id](https://datatracker.ietf.org/doc/html/rfc9562#section-5.1) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
> [!NOTE]
|
|
||||||
> `options.random` and `options.rng` are only meaningful on the very first call to `v1()`, where they may be passed to initialize the internal `node` and `clockseq` fields.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
import { v1 as uuidv1 } from 'uuid';
|
import { v1 as uuidv1 } from 'uuid';
|
||||||
|
|
||||||
uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d'
|
uuidv1(); // ⇨ '57fd0000-c7d3-11ef-841d-514d2167fc5b'
|
||||||
```
|
```
|
||||||
|
|
||||||
Example using `options`:
|
Example using `options`:
|
||||||
@@ -197,7 +188,7 @@ Example using `options`:
|
|||||||
import { v1 as uuidv1 } from 'uuid';
|
import { v1 as uuidv1 } from 'uuid';
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
|
node: Uint8Array.of(0x01, 0x23, 0x45, 0x67, 0x89, 0xab),
|
||||||
clockseq: 0x1234,
|
clockseq: 0x1234,
|
||||||
msecs: new Date('2011-11-01').getTime(),
|
msecs: new Date('2011-11-01').getTime(),
|
||||||
nsecs: 5678,
|
nsecs: 5678,
|
||||||
@@ -234,7 +225,7 @@ Create an RFC version 4 (random) UUID
|
|||||||
| [`options`] | `Object` with one or more of the following properties: |
|
| [`options`] | `Object` with one or more of the following properties: |
|
||||||
| [`options.random`] | `Array` of 16 random bytes (0-255) |
|
| [`options.random`] | `Array` of 16 random bytes (0-255) |
|
||||||
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
||||||
| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` |
|
| [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
|
||||||
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
||||||
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
||||||
|
|
||||||
@@ -243,7 +234,7 @@ Example:
|
|||||||
```javascript
|
```javascript
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
|
uuidv4(); // ⇨ 'b18794e8-5d0d-417c-b361-ba38e78411b4'
|
||||||
```
|
```
|
||||||
|
|
||||||
Example using predefined `random` values:
|
Example using predefined `random` values:
|
||||||
@@ -252,9 +243,24 @@ Example using predefined `random` values:
|
|||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
const v4options = {
|
const v4options = {
|
||||||
random: [
|
random: Uint8Array.of(
|
||||||
0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36,
|
0x10,
|
||||||
],
|
0x91,
|
||||||
|
0x56,
|
||||||
|
0xbe,
|
||||||
|
0xc4,
|
||||||
|
0xfb,
|
||||||
|
0xc1,
|
||||||
|
0xea,
|
||||||
|
0x71,
|
||||||
|
0xb4,
|
||||||
|
0xef,
|
||||||
|
0xe1,
|
||||||
|
0x67,
|
||||||
|
0x1c,
|
||||||
|
0x58,
|
||||||
|
0x36
|
||||||
|
),
|
||||||
};
|
};
|
||||||
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
|
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
|
||||||
```
|
```
|
||||||
@@ -267,7 +273,7 @@ Create an RFC version 5 (namespace w/ SHA-1) UUID
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `name` | `String \| Array` |
|
| `name` | `String \| Array` |
|
||||||
| `namespace` | `String \| Array[16]` Namespace UUID |
|
| `namespace` | `String \| Array[16]` Namespace UUID |
|
||||||
| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` |
|
| [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
|
||||||
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
||||||
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
||||||
|
|
||||||
@@ -304,7 +310,7 @@ This method takes the same arguments as uuid.v1().
|
|||||||
```javascript
|
```javascript
|
||||||
import { v6 as uuidv6 } from 'uuid';
|
import { v6 as uuidv6 } from 'uuid';
|
||||||
|
|
||||||
uuidv6(); // ⇨ '1e940672-c5ea-64c0-8bad-9b1deb4d3b7d'
|
uuidv6(); // ⇨ '1efc7d35-7fd0-6000-841d-504d2167fc5b'
|
||||||
```
|
```
|
||||||
|
|
||||||
Example using `options`:
|
Example using `options`:
|
||||||
@@ -338,11 +344,11 @@ Create an RFC version 7 (random) UUID
|
|||||||
| | |
|
| | |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [`options`] | `Object` with one or more of the following properties: |
|
| [`options`] | `Object` with one or more of the following properties: |
|
||||||
| [`options.msecs`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
|
| [`options.msecs = (current time)`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
|
||||||
| [`options.random`] | `Array` of 16 random bytes (0-255) |
|
| [`options.random = (random)`] | `Array` of 16 random bytes (0-255) used to generate other fields, above |
|
||||||
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
|
||||||
| [`options.seq`] | 31 bit monotonic sequence counter as `Number` between 0 - 0x7fffffff |
|
| [`options.seq = (random)`] | 32-bit sequence `Number` between 0 - 0xffffffff. This may be provided to help ensure uniqueness for UUIDs generated within the same millisecond time interval. Default = random value. |
|
||||||
| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` |
|
| [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
|
||||||
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
|
||||||
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
|
||||||
|
|
||||||
@@ -351,7 +357,7 @@ Example:
|
|||||||
```javascript
|
```javascript
|
||||||
import { v7 as uuidv7 } from 'uuid';
|
import { v7 as uuidv7 } from 'uuid';
|
||||||
|
|
||||||
uuidv7(); // ⇨ '01695553-c90c-722d-9b5d-b38dfbbd4bed'
|
uuidv7(); // ⇨ '01941f29-7c00-73e4-a310-744d2167fc5b'
|
||||||
```
|
```
|
||||||
|
|
||||||
### ~~uuid.v8()~~
|
### ~~uuid.v8()~~
|
||||||
@@ -447,54 +453,30 @@ Note: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs
|
|||||||
defined by RFC9562
|
defined by RFC9562
|
||||||
```
|
```
|
||||||
|
|
||||||
## ECMAScript Modules
|
## `options` Handling for Timestamp UUIDs
|
||||||
|
|
||||||
This library comes with [ECMAScript Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) support for Node.js versions that support it ([example](./examples/node-esmodules/)) as well as bundlers like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking) ([example](./examples/browser-rollup/)) and [webpack](https://webpack.js.org/guides/tree-shaking/) ([example](./examples/browser-webpack/)) (targeting both, Node.js and browser environments).
|
Prior to `uuid@11`, it was possible for `options` state to interfere with the internal state used to ensure uniqueness of timestamp-based UUIDs (the `v1()`, `v6()`, and `v7()` methods). Starting with `uuid@11`, this issue has been addressed by using the presence of the `options` argument as a flag to select between two possible behaviors:
|
||||||
|
|
||||||
```javascript
|
- Without `options`: Internal state is utilized to improve UUID uniqueness.
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
- With `options`: Internal state is **NOT** used and, instead, appropriate defaults are applied as needed.
|
||||||
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
|
|
||||||
```
|
|
||||||
|
|
||||||
To run the examples you must first create a dist build of this library in the module root:
|
## Support
|
||||||
|
|
||||||
```shell
|
**Browsers**: `uuid` [builds are tested](/uuidjs/uuid/blob/main/wdio.conf.js) against the latest version of desktop Chrome, Safari, Firefox, and Edge. Mobile versions of these same browsers are expected to work but aren't currently tested.
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
## CDN Builds
|
**Node**: `uuid` [builds are tested](https://github.com/uuidjs/uuid/blob/main/.github/workflows/ci.yml#L31) against node ([LTS releases](https://github.com/nodejs/Release)), plus one prior. E.g. At the time of this writing `node@20` is the "maintenance" release and `node@24` is the "current" release, so `uuid` supports `node@20`-`node@24`.
|
||||||
|
|
||||||
### ECMAScript Modules
|
**Typescript**: TS versions released within the past two years are supported. [source](https://github.com/microsoft/TypeScript/issues/49088#issuecomment-2468723715)
|
||||||
|
|
||||||
To load this module directly into modern browsers that [support loading ECMAScript Modules](https://caniuse.com/#feat=es6-module) you can make use of [jspm](https://jspm.org/):
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script type="module">
|
|
||||||
import { v4 as uuidv4 } from 'https://jspm.dev/uuid';
|
|
||||||
console.log(uuidv4()); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
### UMD
|
|
||||||
|
|
||||||
As of `uuid@9` [UMD (Universal Module Definition)](https://github.com/umdjs/umd) builds are no longer shipped with this library.
|
|
||||||
|
|
||||||
If you need a UMD build of this library, use a bundler like Webpack or Rollup. Alternatively, refer to the documentation of [`uuid@8.3.2`](https://github.com/uuidjs/uuid/blob/v8.3.2/README.md#umd) which was the last version that shipped UMD builds.
|
|
||||||
|
|
||||||
## Known issues
|
## Known issues
|
||||||
|
|
||||||
### Duplicate UUIDs (Googlebot)
|
<!-- This header is referenced as an anchor in src/rng.ts -->
|
||||||
|
|
||||||
This module may generate duplicate UUIDs when run in clients with _deterministic_ random number generators, such as [Googlebot crawlers](https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers). This can cause problems for apps that expect client-generated UUIDs to always be unique. Developers should be prepared for this and have a strategy for dealing with possible collisions, such as:
|
|
||||||
|
|
||||||
- Check for duplicate UUIDs, fail gracefully
|
|
||||||
- Disable write operations for Googlebot clients
|
|
||||||
|
|
||||||
### "getRandomValues() not supported"
|
### "getRandomValues() not supported"
|
||||||
|
|
||||||
This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill:
|
This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill:
|
||||||
|
|
||||||
### React Native / Expo
|
#### React Native / Expo
|
||||||
|
|
||||||
1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme)
|
1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme)
|
||||||
1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point:
|
1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point:
|
||||||
@@ -504,81 +486,6 @@ import 'react-native-get-random-values';
|
|||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
> [!NOTE]
|
|
||||||
> If you are using Expo, you must be using at least `react-native-get-random-values@1.5.0` and `expo@39.0.0`.
|
|
||||||
|
|
||||||
### Web Workers / Service Workers (Edge <= 18)
|
|
||||||
|
|
||||||
[In Edge <= 18, Web Crypto is not supported in Web Workers or Service Workers](https://caniuse.com/#feat=cryptography) and we are not aware of a polyfill (let us know if you find one, please).
|
|
||||||
|
|
||||||
### IE 11 (Internet Explorer)
|
|
||||||
|
|
||||||
Support for IE11 and other legacy browsers has been dropped as of `uuid@9`. If you need to support legacy browsers, you can always transpile the uuid module source yourself (e.g. using [Babel](https://babeljs.io/)).
|
|
||||||
|
|
||||||
## Upgrading From `uuid@7`
|
|
||||||
|
|
||||||
### Only Named Exports Supported When Using with Node.js ESM
|
|
||||||
|
|
||||||
`uuid@7` did not come with native ECMAScript Module (ESM) support for Node.js. Importing it in Node.js ESM consequently imported the CommonJS source with a default export. This library now comes with true Node.js ESM support and only provides named exports.
|
|
||||||
|
|
||||||
Instead of doing:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import uuid from 'uuid';
|
|
||||||
uuid.v4();
|
|
||||||
```
|
|
||||||
|
|
||||||
you will now have to use the named exports:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Deep Requires No Longer Supported
|
|
||||||
|
|
||||||
Deep requires like `require('uuid/v4')` [which have been deprecated in `uuid@7`](#deep-requires-now-deprecated) are no longer supported.
|
|
||||||
|
|
||||||
## Upgrading From `uuid@3`
|
|
||||||
|
|
||||||
"_Wait... what happened to `uuid@4` thru `uuid@6`?!?_"
|
|
||||||
|
|
||||||
In order to avoid confusion with RFC [version 4](#uuidv4options-buffer-offset) and [version 5](#uuidv5name-namespace-buffer-offset) UUIDs, and a possible [version 6](http://gh.peabody.io/uuidv6/), releases 4 thru 6 of this module have been skipped.
|
|
||||||
|
|
||||||
### Deep Requires Now Deprecated
|
|
||||||
|
|
||||||
`uuid@3` encouraged the use of deep requires to minimize the bundle size of browser builds:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const uuidv4 = require('uuid/v4'); // <== NOW DEPRECATED!
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
As of `uuid@7` this library now provides ECMAScript modules builds, which allow packagers like Webpack and Rollup to do "tree-shaking" to remove dead code. Instead, use the `import` syntax:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
... or for CommonJS:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const { v4: uuidv4 } = require('uuid');
|
|
||||||
uuidv4();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Default Export Removed
|
|
||||||
|
|
||||||
`uuid@3` was exporting the Version 4 UUID method as a default export:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const uuid = require('uuid'); // <== REMOVED!
|
|
||||||
```
|
|
||||||
|
|
||||||
This usage pattern was already discouraged in `uuid@3` and has been removed in `uuid@7`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Markdown generated from [README_js.md](README_js.md) by <a href="https://github.com/broofa/runmd"><image height="12px" src="https://camo.githubusercontent.com/5c7c603cd1e6a43370b0a5063d457e0dabb74cf317adc7baba183acb686ee8d0/687474703a2f2f692e696d6775722e636f6d2f634a4b6f3662552e706e67" /></a>
|
Generated from [README_js.md](README_js.md) by [`runmd`](https://github.com/broofa/runmd)
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
import '../uuid-bin.js';
|
||||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
import { createHash } from 'node:crypto';
|
||||||
|
function md5(bytes) {
|
||||||
|
if (Array.isArray(bytes)) {
|
||||||
|
bytes = Buffer.from(bytes);
|
||||||
|
}
|
||||||
|
else if (typeof bytes === 'string') {
|
||||||
|
bytes = Buffer.from(bytes, 'utf8');
|
||||||
|
}
|
||||||
|
return createHash('md5').update(bytes).digest();
|
||||||
|
}
|
||||||
|
export default md5;
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
export default '00000000-0000-0000-0000-000000000000';
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
import validate from './validate.js';
|
||||||
|
function parse(uuid) {
|
||||||
|
if (!validate(uuid)) {
|
||||||
|
throw TypeError('Invalid UUID');
|
||||||
|
}
|
||||||
|
let v;
|
||||||
|
return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);
|
||||||
|
}
|
||||||
|
export default parse;
|
||||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
const rnds8 = new Uint8Array(16);
|
||||||
|
export default function rng() {
|
||||||
|
return crypto.getRandomValues(rnds8);
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
import { createHash } from 'node:crypto';
|
||||||
|
function sha1(bytes) {
|
||||||
|
if (Array.isArray(bytes)) {
|
||||||
|
bytes = Buffer.from(bytes);
|
||||||
|
}
|
||||||
|
else if (typeof bytes === 'string') {
|
||||||
|
bytes = Buffer.from(bytes, 'utf8');
|
||||||
|
}
|
||||||
|
return createHash('sha1').update(bytes).digest();
|
||||||
|
}
|
||||||
|
export default sha1;
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
import validate from './validate.js';
|
||||||
|
const byteToHex = [];
|
||||||
|
for (let i = 0; i < 256; ++i) {
|
||||||
|
byteToHex.push((i + 0x100).toString(16).slice(1));
|
||||||
|
}
|
||||||
|
export function unsafeStringify(arr, offset = 0) {
|
||||||
|
return (byteToHex[arr[offset + 0]] +
|
||||||
|
byteToHex[arr[offset + 1]] +
|
||||||
|
byteToHex[arr[offset + 2]] +
|
||||||
|
byteToHex[arr[offset + 3]] +
|
||||||
|
'-' +
|
||||||
|
byteToHex[arr[offset + 4]] +
|
||||||
|
byteToHex[arr[offset + 5]] +
|
||||||
|
'-' +
|
||||||
|
byteToHex[arr[offset + 6]] +
|
||||||
|
byteToHex[arr[offset + 7]] +
|
||||||
|
'-' +
|
||||||
|
byteToHex[arr[offset + 8]] +
|
||||||
|
byteToHex[arr[offset + 9]] +
|
||||||
|
'-' +
|
||||||
|
byteToHex[arr[offset + 10]] +
|
||||||
|
byteToHex[arr[offset + 11]] +
|
||||||
|
byteToHex[arr[offset + 12]] +
|
||||||
|
byteToHex[arr[offset + 13]] +
|
||||||
|
byteToHex[arr[offset + 14]] +
|
||||||
|
byteToHex[arr[offset + 15]]).toLowerCase();
|
||||||
|
}
|
||||||
|
function stringify(arr, offset = 0) {
|
||||||
|
const uuid = unsafeStringify(arr, offset);
|
||||||
|
if (!validate(uuid)) {
|
||||||
|
throw TypeError('Stringified UUID is invalid');
|
||||||
|
}
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
export default stringify;
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
export {};
|
||||||
+70
@@ -0,0 +1,70 @@
|
|||||||
|
import * as assert from 'node:assert/strict';
|
||||||
|
import v1 from './v1.js';
|
||||||
|
import v3 from './v3.js';
|
||||||
|
import v4 from './v4.js';
|
||||||
|
import v5 from './v5.js';
|
||||||
|
import v6 from './v6.js';
|
||||||
|
import v7 from './v7.js';
|
||||||
|
function usage() {
|
||||||
|
console.log('Usage:');
|
||||||
|
console.log(' uuid');
|
||||||
|
console.log(' uuid v1');
|
||||||
|
console.log(' uuid v3 <name> <namespace uuid>');
|
||||||
|
console.log(' uuid v4');
|
||||||
|
console.log(' uuid v5 <name> <namespace uuid>');
|
||||||
|
console.log(' uuid v6');
|
||||||
|
console.log(' uuid v7');
|
||||||
|
console.log(' uuid --help');
|
||||||
|
console.log('\nNote: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC9562');
|
||||||
|
}
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
if (args.indexOf('--help') >= 0) {
|
||||||
|
usage();
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
const version = args.shift() || 'v4';
|
||||||
|
switch (version) {
|
||||||
|
case 'v1':
|
||||||
|
console.log(v1());
|
||||||
|
break;
|
||||||
|
case 'v3': {
|
||||||
|
const name = args.shift();
|
||||||
|
let namespace = args.shift();
|
||||||
|
assert.ok(name != null, 'v3 name not specified');
|
||||||
|
assert.ok(namespace != null, 'v3 namespace not specified');
|
||||||
|
if (namespace === 'URL') {
|
||||||
|
namespace = v3.URL;
|
||||||
|
}
|
||||||
|
if (namespace === 'DNS') {
|
||||||
|
namespace = v3.DNS;
|
||||||
|
}
|
||||||
|
console.log(v3(name, namespace));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'v4':
|
||||||
|
console.log(v4());
|
||||||
|
break;
|
||||||
|
case 'v5': {
|
||||||
|
const name = args.shift();
|
||||||
|
let namespace = args.shift();
|
||||||
|
assert.ok(name != null, 'v5 name not specified');
|
||||||
|
assert.ok(namespace != null, 'v5 namespace not specified');
|
||||||
|
if (namespace === 'URL') {
|
||||||
|
namespace = v5.URL;
|
||||||
|
}
|
||||||
|
if (namespace === 'DNS') {
|
||||||
|
namespace = v5.DNS;
|
||||||
|
}
|
||||||
|
console.log(v5(name, namespace));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'v6':
|
||||||
|
console.log(v6());
|
||||||
|
break;
|
||||||
|
case 'v7':
|
||||||
|
console.log(v7());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
+87
@@ -0,0 +1,87 @@
|
|||||||
|
import rng from './rng.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
const _state = {};
|
||||||
|
function v1(options, buf, offset) {
|
||||||
|
let bytes;
|
||||||
|
const isV6 = options?._v6 ?? false;
|
||||||
|
if (options) {
|
||||||
|
const optionsKeys = Object.keys(options);
|
||||||
|
if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {
|
||||||
|
options = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (options) {
|
||||||
|
bytes = v1Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const now = Date.now();
|
||||||
|
const rnds = rng();
|
||||||
|
updateV1State(_state, now, rnds);
|
||||||
|
bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);
|
||||||
|
}
|
||||||
|
return buf ?? unsafeStringify(bytes);
|
||||||
|
}
|
||||||
|
export function updateV1State(state, now, rnds) {
|
||||||
|
state.msecs ??= -Infinity;
|
||||||
|
state.nsecs ??= 0;
|
||||||
|
if (now === state.msecs) {
|
||||||
|
state.nsecs++;
|
||||||
|
if (state.nsecs >= 10000) {
|
||||||
|
state.node = undefined;
|
||||||
|
state.nsecs = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (now > state.msecs) {
|
||||||
|
state.nsecs = 0;
|
||||||
|
}
|
||||||
|
else if (now < state.msecs) {
|
||||||
|
state.node = undefined;
|
||||||
|
}
|
||||||
|
if (!state.node) {
|
||||||
|
state.node = rnds.slice(10, 16);
|
||||||
|
state.node[0] |= 0x01;
|
||||||
|
state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;
|
||||||
|
}
|
||||||
|
state.msecs = now;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
function v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {
|
||||||
|
if (rnds.length < 16) {
|
||||||
|
throw new Error('Random bytes length must be >= 16');
|
||||||
|
}
|
||||||
|
if (!buf) {
|
||||||
|
buf = new Uint8Array(16);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (offset < 0 || offset + 16 > buf.length) {
|
||||||
|
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msecs ??= Date.now();
|
||||||
|
nsecs ??= 0;
|
||||||
|
clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;
|
||||||
|
if (node == null) {
|
||||||
|
node = rnds.slice(10, 16);
|
||||||
|
node[0] |= 0x01;
|
||||||
|
}
|
||||||
|
msecs += 12219292800000;
|
||||||
|
const t = (msecs & 0xfffffff) * 10000 + nsecs;
|
||||||
|
const tl = t >>> 0;
|
||||||
|
buf[offset++] = (tl >>> 24) & 0xff;
|
||||||
|
buf[offset++] = (tl >>> 16) & 0xff;
|
||||||
|
buf[offset++] = (tl >>> 8) & 0xff;
|
||||||
|
buf[offset++] = tl & 0xff;
|
||||||
|
const tmh = (((msecs / 0x10000000) | 0) * 625 + ((t / 0x100000000) | 0)) & 0xfffffff;
|
||||||
|
buf[offset++] = (tmh >>> 8) & 0xff;
|
||||||
|
buf[offset++] = tmh & 0xff;
|
||||||
|
buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;
|
||||||
|
buf[offset++] = (tmh >>> 16) & 0xff;
|
||||||
|
buf[offset++] = (clockseq >>> 8) | 0x80;
|
||||||
|
buf[offset++] = clockseq & 0xff;
|
||||||
|
for (let n = 0; n < 6; ++n) {
|
||||||
|
buf[offset++] = node[n];
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
export default v1;
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
import parse from './parse.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
export default function v1ToV6(uuid) {
|
||||||
|
const v1Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
||||||
|
const v6Bytes = _v1ToV6(v1Bytes);
|
||||||
|
return typeof uuid === 'string' ? unsafeStringify(v6Bytes) : v6Bytes;
|
||||||
|
}
|
||||||
|
function _v1ToV6(v1Bytes) {
|
||||||
|
return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
import md5 from './md5.js';
|
||||||
|
import v35, { DNS, URL } from './v35.js';
|
||||||
|
export { DNS, URL } from './v35.js';
|
||||||
|
function v3(value, namespace, buf, offset) {
|
||||||
|
return v35(0x30, md5, value, namespace, buf, offset);
|
||||||
|
}
|
||||||
|
v3.DNS = DNS;
|
||||||
|
v3.URL = URL;
|
||||||
|
export default v3;
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
import parse from './parse.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
export function stringToBytes(str) {
|
||||||
|
str = unescape(encodeURIComponent(str));
|
||||||
|
const bytes = new Uint8Array(str.length);
|
||||||
|
for (let i = 0; i < str.length; ++i) {
|
||||||
|
bytes[i] = str.charCodeAt(i);
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
||||||
|
export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
||||||
|
export default function v35(version, hash, value, namespace, buf, offset) {
|
||||||
|
const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;
|
||||||
|
const namespaceBytes = typeof namespace === 'string' ? parse(namespace) : namespace;
|
||||||
|
if (typeof namespace === 'string') {
|
||||||
|
namespace = parse(namespace);
|
||||||
|
}
|
||||||
|
if (namespace?.length !== 16) {
|
||||||
|
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
||||||
|
}
|
||||||
|
let bytes = new Uint8Array(16 + valueBytes.length);
|
||||||
|
bytes.set(namespaceBytes);
|
||||||
|
bytes.set(valueBytes, namespaceBytes.length);
|
||||||
|
bytes = hash(bytes);
|
||||||
|
bytes[6] = (bytes[6] & 0x0f) | version;
|
||||||
|
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
||||||
|
if (buf) {
|
||||||
|
offset ??= 0;
|
||||||
|
if (offset < 0 || offset + 16 > buf.length) {
|
||||||
|
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 16; ++i) {
|
||||||
|
buf[offset + i] = bytes[i];
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return unsafeStringify(bytes);
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
import rng from './rng.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
function v4(options, buf, offset) {
|
||||||
|
if (!buf && !options && crypto.randomUUID) {
|
||||||
|
return crypto.randomUUID();
|
||||||
|
}
|
||||||
|
return _v4(options, buf, offset);
|
||||||
|
}
|
||||||
|
function _v4(options, buf, offset) {
|
||||||
|
options = options || {};
|
||||||
|
const rnds = options.random ?? options.rng?.() ?? rng();
|
||||||
|
if (rnds.length < 16) {
|
||||||
|
throw new Error('Random bytes length must be >= 16');
|
||||||
|
}
|
||||||
|
rnds[6] = (rnds[6] & 0x0f) | 0x40;
|
||||||
|
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
||||||
|
if (buf) {
|
||||||
|
offset = offset || 0;
|
||||||
|
if (offset < 0 || offset + 16 > buf.length) {
|
||||||
|
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 16; ++i) {
|
||||||
|
buf[offset + i] = rnds[i];
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return unsafeStringify(rnds);
|
||||||
|
}
|
||||||
|
export default v4;
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
import sha1 from './sha1.js';
|
||||||
|
import v35, { DNS, URL } from './v35.js';
|
||||||
|
export { DNS, URL } from './v35.js';
|
||||||
|
function v5(value, namespace, buf, offset) {
|
||||||
|
return v35(0x50, sha1, value, namespace, buf, offset);
|
||||||
|
}
|
||||||
|
v5.DNS = DNS;
|
||||||
|
v5.URL = URL;
|
||||||
|
export default v5;
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
import v1 from './v1.js';
|
||||||
|
import v1ToV6 from './v1ToV6.js';
|
||||||
|
function v6(options, buf, offset) {
|
||||||
|
options ??= {};
|
||||||
|
offset ??= 0;
|
||||||
|
let bytes = v1({ ...options, _v6: true }, new Uint8Array(16));
|
||||||
|
bytes = v1ToV6(bytes);
|
||||||
|
if (buf) {
|
||||||
|
if (offset < 0 || offset + 16 > buf.length) {
|
||||||
|
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 16; i++) {
|
||||||
|
buf[offset + i] = bytes[i];
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return unsafeStringify(bytes);
|
||||||
|
}
|
||||||
|
export default v6;
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
import parse from './parse.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
export default function v6ToV1(uuid) {
|
||||||
|
const v6Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
||||||
|
const v1Bytes = _v6ToV1(v6Bytes);
|
||||||
|
return typeof uuid === 'string' ? unsafeStringify(v1Bytes) : v1Bytes;
|
||||||
|
}
|
||||||
|
function _v6ToV1(v6Bytes) {
|
||||||
|
return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);
|
||||||
|
}
|
||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
import rng from './rng.js';
|
||||||
|
import { unsafeStringify } from './stringify.js';
|
||||||
|
const _state = {};
|
||||||
|
function v7(options, buf, offset) {
|
||||||
|
let bytes;
|
||||||
|
if (options) {
|
||||||
|
bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const now = Date.now();
|
||||||
|
const rnds = rng();
|
||||||
|
updateV7State(_state, now, rnds);
|
||||||
|
bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);
|
||||||
|
}
|
||||||
|
return buf ?? unsafeStringify(bytes);
|
||||||
|
}
|
||||||
|
export function updateV7State(state, now, rnds) {
|
||||||
|
state.msecs ??= -Infinity;
|
||||||
|
state.seq ??= 0;
|
||||||
|
if (now > state.msecs) {
|
||||||
|
state.seq = v7Sequence(rnds);
|
||||||
|
state.msecs = now;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state.seq = (state.seq + 1) | 0;
|
||||||
|
if (state.seq === 0) {
|
||||||
|
state.msecs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
function v7Bytes(rnds, msecs, seq, buf, offset = 0) {
|
||||||
|
if (rnds.length < 16) {
|
||||||
|
throw new Error('Random bytes length must be >= 16');
|
||||||
|
}
|
||||||
|
if (!buf) {
|
||||||
|
buf = new Uint8Array(16);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (offset < 0 || offset + 16 > buf.length) {
|
||||||
|
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msecs ??= Date.now();
|
||||||
|
seq ??= v7Sequence(rnds);
|
||||||
|
buf[offset++] = (msecs / 0x10000000000) & 0xff;
|
||||||
|
buf[offset++] = (msecs / 0x100000000) & 0xff;
|
||||||
|
buf[offset++] = (msecs / 0x1000000) & 0xff;
|
||||||
|
buf[offset++] = (msecs / 0x10000) & 0xff;
|
||||||
|
buf[offset++] = (msecs / 0x100) & 0xff;
|
||||||
|
buf[offset++] = msecs & 0xff;
|
||||||
|
buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);
|
||||||
|
buf[offset++] = (seq >>> 20) & 0xff;
|
||||||
|
buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);
|
||||||
|
buf[offset++] = (seq >>> 6) & 0xff;
|
||||||
|
buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);
|
||||||
|
buf[offset++] = rnds[11];
|
||||||
|
buf[offset++] = rnds[12];
|
||||||
|
buf[offset++] = rnds[13];
|
||||||
|
buf[offset++] = rnds[14];
|
||||||
|
buf[offset++] = rnds[15];
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
function v7Sequence(rnds) {
|
||||||
|
return ((rnds[6] & 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];
|
||||||
|
}
|
||||||
|
export default v7;
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
import REGEX from './regex.js';
|
||||||
|
function validate(uuid) {
|
||||||
|
return typeof uuid === 'string' && REGEX.test(uuid);
|
||||||
|
}
|
||||||
|
export default validate;
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
import validate from './validate.js';
|
||||||
|
function version(uuid) {
|
||||||
|
if (!validate(uuid)) {
|
||||||
|
throw TypeError('Invalid UUID');
|
||||||
|
}
|
||||||
|
return parseInt(uuid.slice(14, 15), 16);
|
||||||
|
}
|
||||||
|
export default version;
|
||||||
-2
@@ -1,2 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
require('../uuid-bin');
|
|
||||||
-104
@@ -1,104 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "MAX", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _max.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "NIL", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _nil.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "parse", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _parse.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "stringify", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _stringify.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v1", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v1ToV6", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v1ToV.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v3", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v2.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v4", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v3.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v5", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v4.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v6", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v5.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v6ToV1", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v6ToV.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v7", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _v6.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "validate", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _validate.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "version", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function get() {
|
|
||||||
return _version.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var _max = _interopRequireDefault(require("./max.js"));
|
|
||||||
var _nil = _interopRequireDefault(require("./nil.js"));
|
|
||||||
var _parse = _interopRequireDefault(require("./parse.js"));
|
|
||||||
var _stringify = _interopRequireDefault(require("./stringify.js"));
|
|
||||||
var _v = _interopRequireDefault(require("./v1.js"));
|
|
||||||
var _v1ToV = _interopRequireDefault(require("./v1ToV6.js"));
|
|
||||||
var _v2 = _interopRequireDefault(require("./v3.js"));
|
|
||||||
var _v3 = _interopRequireDefault(require("./v4.js"));
|
|
||||||
var _v4 = _interopRequireDefault(require("./v5.js"));
|
|
||||||
var _v5 = _interopRequireDefault(require("./v6.js"));
|
|
||||||
var _v6ToV = _interopRequireDefault(require("./v6ToV1.js"));
|
|
||||||
var _v6 = _interopRequireDefault(require("./v7.js"));
|
|
||||||
var _validate = _interopRequireDefault(require("./validate.js"));
|
|
||||||
var _version = _interopRequireDefault(require("./version.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _default = exports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
|
||||||
-200
@@ -1,200 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
/*
|
|
||||||
* Browser-compatible JavaScript MD5
|
|
||||||
*
|
|
||||||
* Modification of JavaScript MD5
|
|
||||||
* https://github.com/blueimp/JavaScript-MD5
|
|
||||||
*
|
|
||||||
* Copyright 2011, Sebastian Tschan
|
|
||||||
* https://blueimp.net
|
|
||||||
*
|
|
||||||
* Licensed under the MIT license:
|
|
||||||
* https://opensource.org/licenses/MIT
|
|
||||||
*
|
|
||||||
* Based on
|
|
||||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
|
||||||
* Digest Algorithm, as defined in RFC 1321.
|
|
||||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
|
||||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
|
||||||
* Distributed under the BSD License
|
|
||||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
|
||||||
*/
|
|
||||||
function md5(bytes) {
|
|
||||||
if (typeof bytes === 'string') {
|
|
||||||
var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
|
|
||||||
|
|
||||||
bytes = new Uint8Array(msg.length);
|
|
||||||
for (var i = 0; i < msg.length; ++i) {
|
|
||||||
bytes[i] = msg.charCodeAt(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array of little-endian words to an array of bytes
|
|
||||||
*/
|
|
||||||
function md5ToHexEncodedArray(input) {
|
|
||||||
var output = [];
|
|
||||||
var length32 = input.length * 32;
|
|
||||||
var hexTab = '0123456789abcdef';
|
|
||||||
for (var i = 0; i < length32; i += 8) {
|
|
||||||
var x = input[i >> 5] >>> i % 32 & 0xff;
|
|
||||||
var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
|
|
||||||
output.push(hex);
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate output length with padding and bit length
|
|
||||||
*/
|
|
||||||
function getOutputLength(inputLength8) {
|
|
||||||
return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
|
||||||
*/
|
|
||||||
function wordsToMd5(x, len) {
|
|
||||||
/* append padding */
|
|
||||||
x[len >> 5] |= 0x80 << len % 32;
|
|
||||||
x[getOutputLength(len) - 1] = len;
|
|
||||||
var a = 1732584193;
|
|
||||||
var b = -271733879;
|
|
||||||
var c = -1732584194;
|
|
||||||
var d = 271733878;
|
|
||||||
for (var i = 0; i < x.length; i += 16) {
|
|
||||||
var olda = a;
|
|
||||||
var oldb = b;
|
|
||||||
var oldc = c;
|
|
||||||
var oldd = d;
|
|
||||||
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
||||||
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
||||||
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
||||||
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
||||||
a = safeAdd(a, olda);
|
|
||||||
b = safeAdd(b, oldb);
|
|
||||||
c = safeAdd(c, oldc);
|
|
||||||
d = safeAdd(d, oldd);
|
|
||||||
}
|
|
||||||
return [a, b, c, d];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array bytes to an array of little-endian words
|
|
||||||
* Characters >255 have their high-byte silently ignored.
|
|
||||||
*/
|
|
||||||
function bytesToWords(input) {
|
|
||||||
if (input.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
var length8 = input.length * 8;
|
|
||||||
var output = new Uint32Array(getOutputLength(length8));
|
|
||||||
for (var i = 0; i < length8; i += 8) {
|
|
||||||
output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
|
||||||
* to work around bugs in some JS interpreters.
|
|
||||||
*/
|
|
||||||
function safeAdd(x, y) {
|
|
||||||
var lsw = (x & 0xffff) + (y & 0xffff);
|
|
||||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
||||||
return msw << 16 | lsw & 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bitwise rotate a 32-bit number to the left.
|
|
||||||
*/
|
|
||||||
function bitRotateLeft(num, cnt) {
|
|
||||||
return num << cnt | num >>> 32 - cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These functions implement the four basic operations the algorithm uses.
|
|
||||||
*/
|
|
||||||
function md5cmn(q, a, b, x, s, t) {
|
|
||||||
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
|
||||||
}
|
|
||||||
function md5ff(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & c | ~b & d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5gg(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & d | c & ~d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5hh(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5ii(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
||||||
}
|
|
||||||
var _default = exports.default = md5;
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
||||||
var _default = exports.default = {
|
|
||||||
randomUUID
|
|
||||||
};
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _default = exports.default = '00000000-0000-0000-0000-000000000000';
|
|
||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _validate = _interopRequireDefault(require("./validate.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function parse(uuid) {
|
|
||||||
if (!(0, _validate.default)(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
var v;
|
|
||||||
var arr = new Uint8Array(16);
|
|
||||||
|
|
||||||
// Parse ########-....-....-....-............
|
|
||||||
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
||||||
arr[1] = v >>> 16 & 0xff;
|
|
||||||
arr[2] = v >>> 8 & 0xff;
|
|
||||||
arr[3] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-####-....-....-............
|
|
||||||
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
||||||
arr[5] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-####-....-............
|
|
||||||
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
||||||
arr[7] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-####-............
|
|
||||||
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
||||||
arr[9] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-....-############
|
|
||||||
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
||||||
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
||||||
arr[11] = v / 0x100000000 & 0xff;
|
|
||||||
arr[12] = v >>> 24 & 0xff;
|
|
||||||
arr[13] = v >>> 16 & 0xff;
|
|
||||||
arr[14] = v >>> 8 & 0xff;
|
|
||||||
arr[15] = v & 0xff;
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
var _default = exports.default = parse;
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _default = exports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = rng;
|
|
||||||
// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
||||||
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
||||||
// generators (like Math.random()).
|
|
||||||
|
|
||||||
var getRandomValues;
|
|
||||||
var rnds8 = new Uint8Array(16);
|
|
||||||
function rng() {
|
|
||||||
// lazy load so that environments that need to polyfill have a chance to do so
|
|
||||||
if (!getRandomValues) {
|
|
||||||
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
|
|
||||||
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
|
|
||||||
if (!getRandomValues) {
|
|
||||||
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return getRandomValues(rnds8);
|
|
||||||
}
|
|
||||||
-82
@@ -1,82 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
// Adapted from Chris Veness' SHA1 code at
|
|
||||||
// http://www.movable-type.co.uk/scripts/sha1.html
|
|
||||||
function f(s, x, y, z) {
|
|
||||||
switch (s) {
|
|
||||||
case 0:
|
|
||||||
return x & y ^ ~x & z;
|
|
||||||
case 1:
|
|
||||||
return x ^ y ^ z;
|
|
||||||
case 2:
|
|
||||||
return x & y ^ x & z ^ y & z;
|
|
||||||
case 3:
|
|
||||||
return x ^ y ^ z;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function ROTL(x, n) {
|
|
||||||
return x << n | x >>> 32 - n;
|
|
||||||
}
|
|
||||||
function sha1(bytes) {
|
|
||||||
var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
|
|
||||||
var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
|
|
||||||
if (typeof bytes === 'string') {
|
|
||||||
var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
|
|
||||||
|
|
||||||
bytes = [];
|
|
||||||
for (var i = 0; i < msg.length; ++i) {
|
|
||||||
bytes.push(msg.charCodeAt(i));
|
|
||||||
}
|
|
||||||
} else if (!Array.isArray(bytes)) {
|
|
||||||
// Convert Array-like to Array
|
|
||||||
bytes = Array.prototype.slice.call(bytes);
|
|
||||||
}
|
|
||||||
bytes.push(0x80);
|
|
||||||
var l = bytes.length / 4 + 2;
|
|
||||||
var N = Math.ceil(l / 16);
|
|
||||||
var M = new Array(N);
|
|
||||||
for (var _i = 0; _i < N; ++_i) {
|
|
||||||
var arr = new Uint32Array(16);
|
|
||||||
for (var j = 0; j < 16; ++j) {
|
|
||||||
arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];
|
|
||||||
}
|
|
||||||
M[_i] = arr;
|
|
||||||
}
|
|
||||||
M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
|
|
||||||
M[N - 1][14] = Math.floor(M[N - 1][14]);
|
|
||||||
M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;
|
|
||||||
for (var _i2 = 0; _i2 < N; ++_i2) {
|
|
||||||
var W = new Uint32Array(80);
|
|
||||||
for (var t = 0; t < 16; ++t) {
|
|
||||||
W[t] = M[_i2][t];
|
|
||||||
}
|
|
||||||
for (var _t = 16; _t < 80; ++_t) {
|
|
||||||
W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);
|
|
||||||
}
|
|
||||||
var a = H[0];
|
|
||||||
var b = H[1];
|
|
||||||
var c = H[2];
|
|
||||||
var d = H[3];
|
|
||||||
var e = H[4];
|
|
||||||
for (var _t2 = 0; _t2 < 80; ++_t2) {
|
|
||||||
var s = Math.floor(_t2 / 20);
|
|
||||||
var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;
|
|
||||||
e = d;
|
|
||||||
d = c;
|
|
||||||
c = ROTL(b, 30) >>> 0;
|
|
||||||
b = a;
|
|
||||||
a = T;
|
|
||||||
}
|
|
||||||
H[0] = H[0] + a >>> 0;
|
|
||||||
H[1] = H[1] + b >>> 0;
|
|
||||||
H[2] = H[2] + c >>> 0;
|
|
||||||
H[3] = H[3] + d >>> 0;
|
|
||||||
H[4] = H[4] + e >>> 0;
|
|
||||||
}
|
|
||||||
return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
|
|
||||||
}
|
|
||||||
var _default = exports.default = sha1;
|
|
||||||
-38
@@ -1,38 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
exports.unsafeStringify = unsafeStringify;
|
|
||||||
var _validate = _interopRequireDefault(require("./validate.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* Convert array of 16 byte values to UUID string format of the form:
|
|
||||||
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
||||||
*/
|
|
||||||
var byteToHex = [];
|
|
||||||
for (var i = 0; i < 256; ++i) {
|
|
||||||
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
||||||
}
|
|
||||||
function unsafeStringify(arr, offset = 0) {
|
|
||||||
// Note: Be careful editing this code! It's been tuned for performance
|
|
||||||
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
||||||
//
|
|
||||||
// Note to future-self: No, you can't remove the `toLowerCase()` call.
|
|
||||||
// REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
|
|
||||||
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
||||||
}
|
|
||||||
function stringify(arr, offset = 0) {
|
|
||||||
var uuid = unsafeStringify(arr, offset);
|
|
||||||
// Consistency check for valid UUID. If this throws, it's likely due to one
|
|
||||||
// of the following:
|
|
||||||
// - One or more input array values don't map to a hex octet (leading to
|
|
||||||
// "undefined" in the uuid)
|
|
||||||
// - Invalid input values for the RFC `version` or `variant` fields
|
|
||||||
if (!(0, _validate.default)(uuid)) {
|
|
||||||
throw TypeError('Stringified UUID is invalid');
|
|
||||||
}
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
var _default = exports.default = stringify;
|
|
||||||
-131
@@ -1,131 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _rng = _interopRequireDefault(require("./rng.js"));
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
// **`v1()` - Generate time-based UUID**
|
|
||||||
//
|
|
||||||
// Inspired by https://github.com/LiosK/UUID.js
|
|
||||||
// and http://docs.python.org/library/uuid.html
|
|
||||||
|
|
||||||
var _nodeId;
|
|
||||||
var _clockseq;
|
|
||||||
|
|
||||||
// Previous uuid creation time
|
|
||||||
var _lastMSecs = 0;
|
|
||||||
var _lastNSecs = 0;
|
|
||||||
|
|
||||||
// See https://github.com/uuidjs/uuid for API details
|
|
||||||
function v1(options, buf, offset) {
|
|
||||||
var i = buf && offset || 0;
|
|
||||||
var b = buf || new Array(16);
|
|
||||||
options = options || {};
|
|
||||||
var node = options.node;
|
|
||||||
var clockseq = options.clockseq;
|
|
||||||
|
|
||||||
// v1 only: Use cached `node` and `clockseq` values
|
|
||||||
if (!options._v6) {
|
|
||||||
if (!node) {
|
|
||||||
node = _nodeId;
|
|
||||||
}
|
|
||||||
if (clockseq == null) {
|
|
||||||
clockseq = _clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle cases where we need entropy. We do this lazily to minimize issues
|
|
||||||
// related to insufficient system entropy. See #189
|
|
||||||
if (node == null || clockseq == null) {
|
|
||||||
var seedBytes = options.random || (options.rng || _rng.default)();
|
|
||||||
|
|
||||||
// Randomize node
|
|
||||||
if (node == null) {
|
|
||||||
node = [seedBytes[0], seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
||||||
|
|
||||||
// v1 only: cache node value for reuse
|
|
||||||
if (!_nodeId && !options._v6) {
|
|
||||||
// per RFC4122 4.5: Set MAC multicast bit (v1 only)
|
|
||||||
node[0] |= 0x01; // Set multicast bit
|
|
||||||
|
|
||||||
_nodeId = node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Randomize clockseq
|
|
||||||
if (clockseq == null) {
|
|
||||||
// Per 4.2.2, randomize (14 bit) clockseq
|
|
||||||
clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
||||||
if (_clockseq === undefined && !options._v6) {
|
|
||||||
_clockseq = clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// v1 & v6 timestamps are 100 nano-second units since the Gregorian epoch,
|
|
||||||
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so time is
|
|
||||||
// handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
||||||
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
||||||
var msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
||||||
// cycle to simulate higher resolution clock
|
|
||||||
var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
|
|
||||||
|
|
||||||
// Time since last uuid creation (in msecs)
|
|
||||||
var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
|
|
||||||
|
|
||||||
// Per 4.2.1.2, Bump clockseq on clock regression
|
|
||||||
if (dt < 0 && options.clockseq === undefined) {
|
|
||||||
clockseq = clockseq + 1 & 0x3fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
||||||
// time interval
|
|
||||||
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
||||||
nsecs = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Per 4.2.1.2 Throw error if too many uuids are requested
|
|
||||||
if (nsecs >= 10000) {
|
|
||||||
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
||||||
}
|
|
||||||
_lastMSecs = msecs;
|
|
||||||
_lastNSecs = nsecs;
|
|
||||||
_clockseq = clockseq;
|
|
||||||
|
|
||||||
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
||||||
msecs += 12219292800000;
|
|
||||||
|
|
||||||
// `time_low`
|
|
||||||
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
||||||
b[i++] = tl >>> 24 & 0xff;
|
|
||||||
b[i++] = tl >>> 16 & 0xff;
|
|
||||||
b[i++] = tl >>> 8 & 0xff;
|
|
||||||
b[i++] = tl & 0xff;
|
|
||||||
|
|
||||||
// `time_mid`
|
|
||||||
var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
||||||
b[i++] = tmh >>> 8 & 0xff;
|
|
||||||
b[i++] = tmh & 0xff;
|
|
||||||
|
|
||||||
// `time_high_and_version`
|
|
||||||
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
||||||
b[i++] = tmh >>> 16 & 0xff;
|
|
||||||
|
|
||||||
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
||||||
b[i++] = clockseq >>> 8 | 0x80;
|
|
||||||
|
|
||||||
// `clock_seq_low`
|
|
||||||
b[i++] = clockseq & 0xff;
|
|
||||||
|
|
||||||
// `node`
|
|
||||||
for (var n = 0; n < 6; ++n) {
|
|
||||||
b[i + n] = node[n];
|
|
||||||
}
|
|
||||||
return buf || (0, _stringify.unsafeStringify)(b);
|
|
||||||
}
|
|
||||||
var _default = exports.default = v1;
|
|
||||||
-26
@@ -1,26 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = v1ToV6;
|
|
||||||
var _parse = _interopRequireDefault(require("./parse.js"));
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* Convert a v1 UUID to a v6 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v1 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v6 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
function v1ToV6(uuid) {
|
|
||||||
var v1Bytes = typeof uuid === 'string' ? (0, _parse.default)(uuid) : uuid;
|
|
||||||
var v6Bytes = _v1ToV6(v1Bytes);
|
|
||||||
return typeof uuid === 'string' ? (0, _stringify.unsafeStringify)(v6Bytes) : v6Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v1 -> v6
|
|
||||||
function _v1ToV6(v1Bytes, randomize = false) {
|
|
||||||
return Uint8Array.of((v1Bytes[6] & 0x0f) << 4 | v1Bytes[7] >> 4 & 0x0f, (v1Bytes[7] & 0x0f) << 4 | (v1Bytes[4] & 0xf0) >> 4, (v1Bytes[4] & 0x0f) << 4 | (v1Bytes[5] & 0xf0) >> 4, (v1Bytes[5] & 0x0f) << 4 | (v1Bytes[0] & 0xf0) >> 4, (v1Bytes[0] & 0x0f) << 4 | (v1Bytes[1] & 0xf0) >> 4, (v1Bytes[1] & 0x0f) << 4 | (v1Bytes[2] & 0xf0) >> 4, 0x60 | v1Bytes[2] & 0x0f, v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);
|
|
||||||
}
|
|
||||||
-11
@@ -1,11 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _v = _interopRequireDefault(require("./v35.js"));
|
|
||||||
var _md = _interopRequireDefault(require("./md5.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
var v3 = (0, _v.default)('v3', 0x30, _md.default);
|
|
||||||
var _default = exports.default = v3;
|
|
||||||
-63
@@ -1,63 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.URL = exports.DNS = void 0;
|
|
||||||
exports.default = v35;
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
var _parse = _interopRequireDefault(require("./parse.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function stringToBytes(str) {
|
|
||||||
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
||||||
|
|
||||||
var bytes = [];
|
|
||||||
for (var i = 0; i < str.length; ++i) {
|
|
||||||
bytes.push(str.charCodeAt(i));
|
|
||||||
}
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
var DNS = exports.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
var URL = exports.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
function v35(name, version, hashfunc) {
|
|
||||||
function generateUUID(value, namespace, buf, offset) {
|
|
||||||
var _namespace;
|
|
||||||
if (typeof value === 'string') {
|
|
||||||
value = stringToBytes(value);
|
|
||||||
}
|
|
||||||
if (typeof namespace === 'string') {
|
|
||||||
namespace = (0, _parse.default)(namespace);
|
|
||||||
}
|
|
||||||
if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
|
|
||||||
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute hash of namespace and value, Per 4.3
|
|
||||||
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
||||||
// hashfunc([...namespace, ... value])`
|
|
||||||
var bytes = new Uint8Array(16 + value.length);
|
|
||||||
bytes.set(namespace);
|
|
||||||
bytes.set(value, namespace.length);
|
|
||||||
bytes = hashfunc(bytes);
|
|
||||||
bytes[6] = bytes[6] & 0x0f | version;
|
|
||||||
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (var i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return (0, _stringify.unsafeStringify)(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function#name is not settable on some platforms (#270)
|
|
||||||
try {
|
|
||||||
generateUUID.name = name;
|
|
||||||
} catch (err) {}
|
|
||||||
|
|
||||||
// For CommonJS default export support
|
|
||||||
generateUUID.DNS = DNS;
|
|
||||||
generateUUID.URL = URL;
|
|
||||||
return generateUUID;
|
|
||||||
}
|
|
||||||
-32
@@ -1,32 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _native = _interopRequireDefault(require("./native.js"));
|
|
||||||
var _rng = _interopRequireDefault(require("./rng.js"));
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function v4(options, buf, offset) {
|
|
||||||
if (_native.default.randomUUID && !buf && !options) {
|
|
||||||
return _native.default.randomUUID();
|
|
||||||
}
|
|
||||||
options = options || {};
|
|
||||||
var rnds = options.random || (options.rng || _rng.default)();
|
|
||||||
|
|
||||||
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
||||||
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
||||||
rnds[8] = rnds[8] & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// Copy bytes to buffer, if provided
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (var i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = rnds[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return (0, _stringify.unsafeStringify)(rnds);
|
|
||||||
}
|
|
||||||
var _default = exports.default = v4;
|
|
||||||
-11
@@ -1,11 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _v = _interopRequireDefault(require("./v35.js"));
|
|
||||||
var _sha = _interopRequireDefault(require("./sha1.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
var v5 = (0, _v.default)('v5', 0x50, _sha.default);
|
|
||||||
var _default = exports.default = v5;
|
|
||||||
-42
@@ -1,42 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = v6;
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
var _v = _interopRequireDefault(require("./v1.js"));
|
|
||||||
var _v1ToV = _interopRequireDefault(require("./v1ToV6.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
||||||
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
||||||
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
||||||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
||||||
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {object} options
|
|
||||||
* @param {Uint8Array=} buf
|
|
||||||
* @param {number=} offset
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
function v6(options = {}, buf, offset = 0) {
|
|
||||||
// v6 is v1 with different field layout, so we start with a v1 UUID, albeit
|
|
||||||
// with slightly different behavior around how the clock_seq and node fields
|
|
||||||
// are randomized, which is why we call v1 with _v6: true.
|
|
||||||
var bytes = (0, _v.default)(_objectSpread(_objectSpread({}, options), {}, {
|
|
||||||
_v6: true
|
|
||||||
}), new Uint8Array(16));
|
|
||||||
|
|
||||||
// Reorder the fields to v6 layout.
|
|
||||||
bytes = (0, _v1ToV.default)(bytes);
|
|
||||||
|
|
||||||
// Return as a byte array if requested
|
|
||||||
if (buf) {
|
|
||||||
for (var i = 0; i < 16; i++) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return (0, _stringify.unsafeStringify)(bytes);
|
|
||||||
}
|
|
||||||
-26
@@ -1,26 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = v6ToV1;
|
|
||||||
var _parse = _interopRequireDefault(require("./parse.js"));
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* Convert a v6 UUID to a v1 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v6 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v1 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
function v6ToV1(uuid) {
|
|
||||||
var v6Bytes = typeof uuid === 'string' ? (0, _parse.default)(uuid) : uuid;
|
|
||||||
var v1Bytes = _v6ToV1(v6Bytes);
|
|
||||||
return typeof uuid === 'string' ? (0, _stringify.unsafeStringify)(v1Bytes) : v1Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v6 -> v1
|
|
||||||
function _v6ToV1(v6Bytes) {
|
|
||||||
return Uint8Array.of((v6Bytes[3] & 0x0f) << 4 | v6Bytes[4] >> 4 & 0x0f, (v6Bytes[4] & 0x0f) << 4 | (v6Bytes[5] & 0xf0) >> 4, (v6Bytes[5] & 0x0f) << 4 | v6Bytes[6] & 0x0f, v6Bytes[7], (v6Bytes[1] & 0x0f) << 4 | (v6Bytes[2] & 0xf0) >> 4, (v6Bytes[2] & 0x0f) << 4 | (v6Bytes[3] & 0xf0) >> 4, 0x10 | (v6Bytes[0] & 0xf0) >> 4, (v6Bytes[0] & 0x0f) << 4 | (v6Bytes[1] & 0xf0) >> 4, v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);
|
|
||||||
}
|
|
||||||
-152
@@ -1,152 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _rng = _interopRequireDefault(require("./rng.js"));
|
|
||||||
var _stringify = require("./stringify.js");
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* UUID V7 - Unix Epoch time-based UUID
|
|
||||||
*
|
|
||||||
* The IETF has published RFC9562, introducing 3 new UUID versions (6,7,8). This
|
|
||||||
* implementation of V7 is based on the accepted, though not yet approved,
|
|
||||||
* revisions.
|
|
||||||
*
|
|
||||||
* RFC 9562:https://www.rfc-editor.org/rfc/rfc9562.html Universally Unique
|
|
||||||
* IDentifiers (UUIDs)
|
|
||||||
|
|
||||||
*
|
|
||||||
* Sample V7 value:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#name-example-of-a-uuidv7-value
|
|
||||||
*
|
|
||||||
* Monotonic Bit Layout: RFC rfc9562.6.2 Method 1, Dedicated Counter Bits ref:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-5.1
|
|
||||||
*
|
|
||||||
* 0 1 2 3 0 1 2 3 4 5 6
|
|
||||||
* 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms | ver | seq_hi |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* |var| seq_low | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
*
|
|
||||||
* seq is a 31 bit serialized counter; comprised of 12 bit seq_hi and 19 bit
|
|
||||||
* seq_low, and randomly initialized upon timestamp change. 31 bit counter size
|
|
||||||
* was selected as any bitwise operations in node are done as _signed_ 32 bit
|
|
||||||
* ints. we exclude the sign bit.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var _seqLow = null;
|
|
||||||
var _seqHigh = null;
|
|
||||||
var _msecs = 0;
|
|
||||||
function v7(options, buf, offset) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// initialize buffer and pointer
|
|
||||||
var i = buf && offset || 0;
|
|
||||||
var b = buf || new Uint8Array(16);
|
|
||||||
|
|
||||||
// rnds is Uint8Array(16) filled with random bytes
|
|
||||||
var rnds = options.random || (options.rng || _rng.default)();
|
|
||||||
|
|
||||||
// milliseconds since unix epoch, 1970-01-01 00:00
|
|
||||||
var msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// seq is user provided 31 bit counter
|
|
||||||
var seq = options.seq !== undefined ? options.seq : null;
|
|
||||||
|
|
||||||
// initialize local seq high/low parts
|
|
||||||
var seqHigh = _seqHigh;
|
|
||||||
var seqLow = _seqLow;
|
|
||||||
|
|
||||||
// check if clock has advanced and user has not provided msecs
|
|
||||||
if (msecs > _msecs && options.msecs === undefined) {
|
|
||||||
_msecs = msecs;
|
|
||||||
|
|
||||||
// unless user provided seq, reset seq parts
|
|
||||||
if (seq !== null) {
|
|
||||||
seqHigh = null;
|
|
||||||
seqLow = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we have a user provided seq
|
|
||||||
if (seq !== null) {
|
|
||||||
// trim provided seq to 31 bits of value, avoiding overflow
|
|
||||||
if (seq > 0x7fffffff) {
|
|
||||||
seq = 0x7fffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// split provided seq into high/low parts
|
|
||||||
seqHigh = seq >>> 19 & 0xfff;
|
|
||||||
seqLow = seq & 0x7ffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// randomly initialize seq
|
|
||||||
if (seqHigh === null || seqLow === null) {
|
|
||||||
seqHigh = rnds[6] & 0x7f;
|
|
||||||
seqHigh = seqHigh << 8 | rnds[7];
|
|
||||||
seqLow = rnds[8] & 0x3f; // pad for var
|
|
||||||
seqLow = seqLow << 8 | rnds[9];
|
|
||||||
seqLow = seqLow << 5 | rnds[10] >>> 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// increment seq if within msecs window
|
|
||||||
if (msecs + 10000 > _msecs && seq === null) {
|
|
||||||
if (++seqLow > 0x7ffff) {
|
|
||||||
seqLow = 0;
|
|
||||||
if (++seqHigh > 0xfff) {
|
|
||||||
seqHigh = 0;
|
|
||||||
|
|
||||||
// increment internal _msecs. this allows us to continue incrementing
|
|
||||||
// while staying monotonic. Note, once we hit 10k milliseconds beyond system
|
|
||||||
// clock, we will reset breaking monotonicity (after (2^31)*10000 generations)
|
|
||||||
_msecs++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// resetting; we have advanced more than
|
|
||||||
// 10k milliseconds beyond system clock
|
|
||||||
_msecs = msecs;
|
|
||||||
}
|
|
||||||
_seqHigh = seqHigh;
|
|
||||||
_seqLow = seqLow;
|
|
||||||
|
|
||||||
// [bytes 0-5] 48 bits of local timestamp
|
|
||||||
b[i++] = _msecs / 0x10000000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x1000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x10000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100 & 0xff;
|
|
||||||
b[i++] = _msecs & 0xff;
|
|
||||||
|
|
||||||
// [byte 6] - set 4 bits of version (7) with first 4 bits seq_hi
|
|
||||||
b[i++] = seqHigh >>> 4 & 0x0f | 0x70;
|
|
||||||
|
|
||||||
// [byte 7] remaining 8 bits of seq_hi
|
|
||||||
b[i++] = seqHigh & 0xff;
|
|
||||||
|
|
||||||
// [byte 8] - variant (2 bits), first 6 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 13 & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// [byte 9] 8 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 5 & 0xff;
|
|
||||||
|
|
||||||
// [byte 10] remaining 5 bits seq_low, 3 bits random
|
|
||||||
b[i++] = seqLow << 3 & 0xff | rnds[10] & 0x07;
|
|
||||||
|
|
||||||
// [bytes 11-15] always random
|
|
||||||
b[i++] = rnds[11];
|
|
||||||
b[i++] = rnds[12];
|
|
||||||
b[i++] = rnds[13];
|
|
||||||
b[i++] = rnds[14];
|
|
||||||
b[i++] = rnds[15];
|
|
||||||
return buf || (0, _stringify.unsafeStringify)(b);
|
|
||||||
}
|
|
||||||
var _default = exports.default = v7;
|
|
||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _regex = _interopRequireDefault(require("./regex.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function validate(uuid) {
|
|
||||||
return typeof uuid === 'string' && _regex.default.test(uuid);
|
|
||||||
}
|
|
||||||
var _default = exports.default = validate;
|
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _validate = _interopRequireDefault(require("./validate.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function version(uuid) {
|
|
||||||
if (!(0, _validate.default)(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
return parseInt(uuid.slice(14, 15), 16);
|
|
||||||
}
|
|
||||||
var _default = exports.default = version;
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
|
||||||
-194
@@ -1,194 +0,0 @@
|
|||||||
/*
|
|
||||||
* Browser-compatible JavaScript MD5
|
|
||||||
*
|
|
||||||
* Modification of JavaScript MD5
|
|
||||||
* https://github.com/blueimp/JavaScript-MD5
|
|
||||||
*
|
|
||||||
* Copyright 2011, Sebastian Tschan
|
|
||||||
* https://blueimp.net
|
|
||||||
*
|
|
||||||
* Licensed under the MIT license:
|
|
||||||
* https://opensource.org/licenses/MIT
|
|
||||||
*
|
|
||||||
* Based on
|
|
||||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
|
||||||
* Digest Algorithm, as defined in RFC 1321.
|
|
||||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
|
||||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
|
||||||
* Distributed under the BSD License
|
|
||||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
|
||||||
*/
|
|
||||||
function md5(bytes) {
|
|
||||||
if (typeof bytes === 'string') {
|
|
||||||
var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
|
|
||||||
|
|
||||||
bytes = new Uint8Array(msg.length);
|
|
||||||
for (var i = 0; i < msg.length; ++i) {
|
|
||||||
bytes[i] = msg.charCodeAt(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array of little-endian words to an array of bytes
|
|
||||||
*/
|
|
||||||
function md5ToHexEncodedArray(input) {
|
|
||||||
var output = [];
|
|
||||||
var length32 = input.length * 32;
|
|
||||||
var hexTab = '0123456789abcdef';
|
|
||||||
for (var i = 0; i < length32; i += 8) {
|
|
||||||
var x = input[i >> 5] >>> i % 32 & 0xff;
|
|
||||||
var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
|
|
||||||
output.push(hex);
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate output length with padding and bit length
|
|
||||||
*/
|
|
||||||
function getOutputLength(inputLength8) {
|
|
||||||
return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
|
||||||
*/
|
|
||||||
function wordsToMd5(x, len) {
|
|
||||||
/* append padding */
|
|
||||||
x[len >> 5] |= 0x80 << len % 32;
|
|
||||||
x[getOutputLength(len) - 1] = len;
|
|
||||||
var a = 1732584193;
|
|
||||||
var b = -271733879;
|
|
||||||
var c = -1732584194;
|
|
||||||
var d = 271733878;
|
|
||||||
for (var i = 0; i < x.length; i += 16) {
|
|
||||||
var olda = a;
|
|
||||||
var oldb = b;
|
|
||||||
var oldc = c;
|
|
||||||
var oldd = d;
|
|
||||||
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
||||||
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
||||||
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
||||||
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
||||||
a = safeAdd(a, olda);
|
|
||||||
b = safeAdd(b, oldb);
|
|
||||||
c = safeAdd(c, oldc);
|
|
||||||
d = safeAdd(d, oldd);
|
|
||||||
}
|
|
||||||
return [a, b, c, d];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array bytes to an array of little-endian words
|
|
||||||
* Characters >255 have their high-byte silently ignored.
|
|
||||||
*/
|
|
||||||
function bytesToWords(input) {
|
|
||||||
if (input.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
var length8 = input.length * 8;
|
|
||||||
var output = new Uint32Array(getOutputLength(length8));
|
|
||||||
for (var i = 0; i < length8; i += 8) {
|
|
||||||
output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
|
||||||
* to work around bugs in some JS interpreters.
|
|
||||||
*/
|
|
||||||
function safeAdd(x, y) {
|
|
||||||
var lsw = (x & 0xffff) + (y & 0xffff);
|
|
||||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
||||||
return msw << 16 | lsw & 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bitwise rotate a 32-bit number to the left.
|
|
||||||
*/
|
|
||||||
function bitRotateLeft(num, cnt) {
|
|
||||||
return num << cnt | num >>> 32 - cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These functions implement the four basic operations the algorithm uses.
|
|
||||||
*/
|
|
||||||
function md5cmn(q, a, b, x, s, t) {
|
|
||||||
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
|
||||||
}
|
|
||||||
function md5ff(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & c | ~b & d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5gg(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & d | c & ~d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5hh(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5ii(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
||||||
}
|
|
||||||
export default md5;
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
||||||
export default {
|
|
||||||
randomUUID
|
|
||||||
};
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
export default '00000000-0000-0000-0000-000000000000';
|
|
||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
function parse(uuid) {
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
var v;
|
|
||||||
var arr = new Uint8Array(16);
|
|
||||||
|
|
||||||
// Parse ########-....-....-....-............
|
|
||||||
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
||||||
arr[1] = v >>> 16 & 0xff;
|
|
||||||
arr[2] = v >>> 8 & 0xff;
|
|
||||||
arr[3] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-####-....-....-............
|
|
||||||
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
||||||
arr[5] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-####-....-............
|
|
||||||
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
||||||
arr[7] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-####-............
|
|
||||||
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
||||||
arr[9] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-....-############
|
|
||||||
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
||||||
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
||||||
arr[11] = v / 0x100000000 & 0xff;
|
|
||||||
arr[12] = v >>> 24 & 0xff;
|
|
||||||
arr[13] = v >>> 16 & 0xff;
|
|
||||||
arr[14] = v >>> 8 & 0xff;
|
|
||||||
arr[15] = v & 0xff;
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
export default parse;
|
|
||||||
-17
@@ -1,17 +0,0 @@
|
|||||||
// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
||||||
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
||||||
// generators (like Math.random()).
|
|
||||||
|
|
||||||
var getRandomValues;
|
|
||||||
var rnds8 = new Uint8Array(16);
|
|
||||||
export default function rng() {
|
|
||||||
// lazy load so that environments that need to polyfill have a chance to do so
|
|
||||||
if (!getRandomValues) {
|
|
||||||
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
|
|
||||||
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
|
|
||||||
if (!getRandomValues) {
|
|
||||||
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return getRandomValues(rnds8);
|
|
||||||
}
|
|
||||||
-76
@@ -1,76 +0,0 @@
|
|||||||
// Adapted from Chris Veness' SHA1 code at
|
|
||||||
// http://www.movable-type.co.uk/scripts/sha1.html
|
|
||||||
function f(s, x, y, z) {
|
|
||||||
switch (s) {
|
|
||||||
case 0:
|
|
||||||
return x & y ^ ~x & z;
|
|
||||||
case 1:
|
|
||||||
return x ^ y ^ z;
|
|
||||||
case 2:
|
|
||||||
return x & y ^ x & z ^ y & z;
|
|
||||||
case 3:
|
|
||||||
return x ^ y ^ z;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function ROTL(x, n) {
|
|
||||||
return x << n | x >>> 32 - n;
|
|
||||||
}
|
|
||||||
function sha1(bytes) {
|
|
||||||
var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
|
|
||||||
var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];
|
|
||||||
if (typeof bytes === 'string') {
|
|
||||||
var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
|
|
||||||
|
|
||||||
bytes = [];
|
|
||||||
for (var i = 0; i < msg.length; ++i) {
|
|
||||||
bytes.push(msg.charCodeAt(i));
|
|
||||||
}
|
|
||||||
} else if (!Array.isArray(bytes)) {
|
|
||||||
// Convert Array-like to Array
|
|
||||||
bytes = Array.prototype.slice.call(bytes);
|
|
||||||
}
|
|
||||||
bytes.push(0x80);
|
|
||||||
var l = bytes.length / 4 + 2;
|
|
||||||
var N = Math.ceil(l / 16);
|
|
||||||
var M = new Array(N);
|
|
||||||
for (var _i = 0; _i < N; ++_i) {
|
|
||||||
var arr = new Uint32Array(16);
|
|
||||||
for (var j = 0; j < 16; ++j) {
|
|
||||||
arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];
|
|
||||||
}
|
|
||||||
M[_i] = arr;
|
|
||||||
}
|
|
||||||
M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
|
|
||||||
M[N - 1][14] = Math.floor(M[N - 1][14]);
|
|
||||||
M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;
|
|
||||||
for (var _i2 = 0; _i2 < N; ++_i2) {
|
|
||||||
var W = new Uint32Array(80);
|
|
||||||
for (var t = 0; t < 16; ++t) {
|
|
||||||
W[t] = M[_i2][t];
|
|
||||||
}
|
|
||||||
for (var _t = 16; _t < 80; ++_t) {
|
|
||||||
W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);
|
|
||||||
}
|
|
||||||
var a = H[0];
|
|
||||||
var b = H[1];
|
|
||||||
var c = H[2];
|
|
||||||
var d = H[3];
|
|
||||||
var e = H[4];
|
|
||||||
for (var _t2 = 0; _t2 < 80; ++_t2) {
|
|
||||||
var s = Math.floor(_t2 / 20);
|
|
||||||
var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;
|
|
||||||
e = d;
|
|
||||||
d = c;
|
|
||||||
c = ROTL(b, 30) >>> 0;
|
|
||||||
b = a;
|
|
||||||
a = T;
|
|
||||||
}
|
|
||||||
H[0] = H[0] + a >>> 0;
|
|
||||||
H[1] = H[1] + b >>> 0;
|
|
||||||
H[2] = H[2] + c >>> 0;
|
|
||||||
H[3] = H[3] + d >>> 0;
|
|
||||||
H[4] = H[4] + e >>> 0;
|
|
||||||
}
|
|
||||||
return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
|
|
||||||
}
|
|
||||||
export default sha1;
|
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert array of 16 byte values to UUID string format of the form:
|
|
||||||
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
||||||
*/
|
|
||||||
var byteToHex = [];
|
|
||||||
for (var i = 0; i < 256; ++i) {
|
|
||||||
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
||||||
}
|
|
||||||
export function unsafeStringify(arr, offset = 0) {
|
|
||||||
// Note: Be careful editing this code! It's been tuned for performance
|
|
||||||
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
||||||
//
|
|
||||||
// Note to future-self: No, you can't remove the `toLowerCase()` call.
|
|
||||||
// REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
|
|
||||||
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
||||||
}
|
|
||||||
function stringify(arr, offset = 0) {
|
|
||||||
var uuid = unsafeStringify(arr, offset);
|
|
||||||
// Consistency check for valid UUID. If this throws, it's likely due to one
|
|
||||||
// of the following:
|
|
||||||
// - One or more input array values don't map to a hex octet (leading to
|
|
||||||
// "undefined" in the uuid)
|
|
||||||
// - Invalid input values for the RFC `version` or `variant` fields
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Stringified UUID is invalid');
|
|
||||||
}
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
export default stringify;
|
|
||||||
-125
@@ -1,125 +0,0 @@
|
|||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
// **`v1()` - Generate time-based UUID**
|
|
||||||
//
|
|
||||||
// Inspired by https://github.com/LiosK/UUID.js
|
|
||||||
// and http://docs.python.org/library/uuid.html
|
|
||||||
|
|
||||||
var _nodeId;
|
|
||||||
var _clockseq;
|
|
||||||
|
|
||||||
// Previous uuid creation time
|
|
||||||
var _lastMSecs = 0;
|
|
||||||
var _lastNSecs = 0;
|
|
||||||
|
|
||||||
// See https://github.com/uuidjs/uuid for API details
|
|
||||||
function v1(options, buf, offset) {
|
|
||||||
var i = buf && offset || 0;
|
|
||||||
var b = buf || new Array(16);
|
|
||||||
options = options || {};
|
|
||||||
var node = options.node;
|
|
||||||
var clockseq = options.clockseq;
|
|
||||||
|
|
||||||
// v1 only: Use cached `node` and `clockseq` values
|
|
||||||
if (!options._v6) {
|
|
||||||
if (!node) {
|
|
||||||
node = _nodeId;
|
|
||||||
}
|
|
||||||
if (clockseq == null) {
|
|
||||||
clockseq = _clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle cases where we need entropy. We do this lazily to minimize issues
|
|
||||||
// related to insufficient system entropy. See #189
|
|
||||||
if (node == null || clockseq == null) {
|
|
||||||
var seedBytes = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// Randomize node
|
|
||||||
if (node == null) {
|
|
||||||
node = [seedBytes[0], seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
||||||
|
|
||||||
// v1 only: cache node value for reuse
|
|
||||||
if (!_nodeId && !options._v6) {
|
|
||||||
// per RFC4122 4.5: Set MAC multicast bit (v1 only)
|
|
||||||
node[0] |= 0x01; // Set multicast bit
|
|
||||||
|
|
||||||
_nodeId = node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Randomize clockseq
|
|
||||||
if (clockseq == null) {
|
|
||||||
// Per 4.2.2, randomize (14 bit) clockseq
|
|
||||||
clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
||||||
if (_clockseq === undefined && !options._v6) {
|
|
||||||
_clockseq = clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// v1 & v6 timestamps are 100 nano-second units since the Gregorian epoch,
|
|
||||||
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so time is
|
|
||||||
// handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
||||||
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
||||||
var msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
||||||
// cycle to simulate higher resolution clock
|
|
||||||
var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
|
|
||||||
|
|
||||||
// Time since last uuid creation (in msecs)
|
|
||||||
var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
|
|
||||||
|
|
||||||
// Per 4.2.1.2, Bump clockseq on clock regression
|
|
||||||
if (dt < 0 && options.clockseq === undefined) {
|
|
||||||
clockseq = clockseq + 1 & 0x3fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
||||||
// time interval
|
|
||||||
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
||||||
nsecs = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Per 4.2.1.2 Throw error if too many uuids are requested
|
|
||||||
if (nsecs >= 10000) {
|
|
||||||
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
||||||
}
|
|
||||||
_lastMSecs = msecs;
|
|
||||||
_lastNSecs = nsecs;
|
|
||||||
_clockseq = clockseq;
|
|
||||||
|
|
||||||
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
||||||
msecs += 12219292800000;
|
|
||||||
|
|
||||||
// `time_low`
|
|
||||||
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
||||||
b[i++] = tl >>> 24 & 0xff;
|
|
||||||
b[i++] = tl >>> 16 & 0xff;
|
|
||||||
b[i++] = tl >>> 8 & 0xff;
|
|
||||||
b[i++] = tl & 0xff;
|
|
||||||
|
|
||||||
// `time_mid`
|
|
||||||
var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
||||||
b[i++] = tmh >>> 8 & 0xff;
|
|
||||||
b[i++] = tmh & 0xff;
|
|
||||||
|
|
||||||
// `time_high_and_version`
|
|
||||||
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
||||||
b[i++] = tmh >>> 16 & 0xff;
|
|
||||||
|
|
||||||
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
||||||
b[i++] = clockseq >>> 8 | 0x80;
|
|
||||||
|
|
||||||
// `clock_seq_low`
|
|
||||||
b[i++] = clockseq & 0xff;
|
|
||||||
|
|
||||||
// `node`
|
|
||||||
for (var n = 0; n < 6; ++n) {
|
|
||||||
b[i + n] = node[n];
|
|
||||||
}
|
|
||||||
return buf || unsafeStringify(b);
|
|
||||||
}
|
|
||||||
export default v1;
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
import parse from './parse.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a v1 UUID to a v6 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v1 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v6 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
export default function v1ToV6(uuid) {
|
|
||||||
var v1Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
|
||||||
var v6Bytes = _v1ToV6(v1Bytes);
|
|
||||||
return typeof uuid === 'string' ? unsafeStringify(v6Bytes) : v6Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v1 -> v6
|
|
||||||
function _v1ToV6(v1Bytes, randomize = false) {
|
|
||||||
return Uint8Array.of((v1Bytes[6] & 0x0f) << 4 | v1Bytes[7] >> 4 & 0x0f, (v1Bytes[7] & 0x0f) << 4 | (v1Bytes[4] & 0xf0) >> 4, (v1Bytes[4] & 0x0f) << 4 | (v1Bytes[5] & 0xf0) >> 4, (v1Bytes[5] & 0x0f) << 4 | (v1Bytes[0] & 0xf0) >> 4, (v1Bytes[0] & 0x0f) << 4 | (v1Bytes[1] & 0xf0) >> 4, (v1Bytes[1] & 0x0f) << 4 | (v1Bytes[2] & 0xf0) >> 4, 0x60 | v1Bytes[2] & 0x0f, v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);
|
|
||||||
}
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
import v35 from './v35.js';
|
|
||||||
import md5 from './md5.js';
|
|
||||||
var v3 = v35('v3', 0x30, md5);
|
|
||||||
export default v3;
|
|
||||||
-55
@@ -1,55 +0,0 @@
|
|||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
import parse from './parse.js';
|
|
||||||
function stringToBytes(str) {
|
|
||||||
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
||||||
|
|
||||||
var bytes = [];
|
|
||||||
for (var i = 0; i < str.length; ++i) {
|
|
||||||
bytes.push(str.charCodeAt(i));
|
|
||||||
}
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
export var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
export var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
export default function v35(name, version, hashfunc) {
|
|
||||||
function generateUUID(value, namespace, buf, offset) {
|
|
||||||
var _namespace;
|
|
||||||
if (typeof value === 'string') {
|
|
||||||
value = stringToBytes(value);
|
|
||||||
}
|
|
||||||
if (typeof namespace === 'string') {
|
|
||||||
namespace = parse(namespace);
|
|
||||||
}
|
|
||||||
if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
|
|
||||||
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute hash of namespace and value, Per 4.3
|
|
||||||
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
||||||
// hashfunc([...namespace, ... value])`
|
|
||||||
var bytes = new Uint8Array(16 + value.length);
|
|
||||||
bytes.set(namespace);
|
|
||||||
bytes.set(value, namespace.length);
|
|
||||||
bytes = hashfunc(bytes);
|
|
||||||
bytes[6] = bytes[6] & 0x0f | version;
|
|
||||||
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (var i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function#name is not settable on some platforms (#270)
|
|
||||||
try {
|
|
||||||
generateUUID.name = name;
|
|
||||||
} catch (err) {}
|
|
||||||
|
|
||||||
// For CommonJS default export support
|
|
||||||
generateUUID.DNS = DNS;
|
|
||||||
generateUUID.URL = URL;
|
|
||||||
return generateUUID;
|
|
||||||
}
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
import native from './native.js';
|
|
||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
function v4(options, buf, offset) {
|
|
||||||
if (native.randomUUID && !buf && !options) {
|
|
||||||
return native.randomUUID();
|
|
||||||
}
|
|
||||||
options = options || {};
|
|
||||||
var rnds = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
||||||
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
||||||
rnds[8] = rnds[8] & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// Copy bytes to buffer, if provided
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (var i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = rnds[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(rnds);
|
|
||||||
}
|
|
||||||
export default v4;
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
import v35 from './v35.js';
|
|
||||||
import sha1 from './sha1.js';
|
|
||||||
var v5 = v35('v5', 0x50, sha1);
|
|
||||||
export default v5;
|
|
||||||
-36
@@ -1,36 +0,0 @@
|
|||||||
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
||||||
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
||||||
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
||||||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
||||||
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
import v1 from './v1.js';
|
|
||||||
import v1ToV6 from './v1ToV6.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {object} options
|
|
||||||
* @param {Uint8Array=} buf
|
|
||||||
* @param {number=} offset
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export default function v6(options = {}, buf, offset = 0) {
|
|
||||||
// v6 is v1 with different field layout, so we start with a v1 UUID, albeit
|
|
||||||
// with slightly different behavior around how the clock_seq and node fields
|
|
||||||
// are randomized, which is why we call v1 with _v6: true.
|
|
||||||
var bytes = v1(_objectSpread(_objectSpread({}, options), {}, {
|
|
||||||
_v6: true
|
|
||||||
}), new Uint8Array(16));
|
|
||||||
|
|
||||||
// Reorder the fields to v6 layout.
|
|
||||||
bytes = v1ToV6(bytes);
|
|
||||||
|
|
||||||
// Return as a byte array if requested
|
|
||||||
if (buf) {
|
|
||||||
for (var i = 0; i < 16; i++) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(bytes);
|
|
||||||
}
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
import parse from './parse.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a v6 UUID to a v1 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v6 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v1 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
export default function v6ToV1(uuid) {
|
|
||||||
var v6Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
|
||||||
var v1Bytes = _v6ToV1(v6Bytes);
|
|
||||||
return typeof uuid === 'string' ? unsafeStringify(v1Bytes) : v1Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v6 -> v1
|
|
||||||
function _v6ToV1(v6Bytes) {
|
|
||||||
return Uint8Array.of((v6Bytes[3] & 0x0f) << 4 | v6Bytes[4] >> 4 & 0x0f, (v6Bytes[4] & 0x0f) << 4 | (v6Bytes[5] & 0xf0) >> 4, (v6Bytes[5] & 0x0f) << 4 | v6Bytes[6] & 0x0f, v6Bytes[7], (v6Bytes[1] & 0x0f) << 4 | (v6Bytes[2] & 0xf0) >> 4, (v6Bytes[2] & 0x0f) << 4 | (v6Bytes[3] & 0xf0) >> 4, 0x10 | (v6Bytes[0] & 0xf0) >> 4, (v6Bytes[0] & 0x0f) << 4 | (v6Bytes[1] & 0xf0) >> 4, v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);
|
|
||||||
}
|
|
||||||
-146
@@ -1,146 +0,0 @@
|
|||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UUID V7 - Unix Epoch time-based UUID
|
|
||||||
*
|
|
||||||
* The IETF has published RFC9562, introducing 3 new UUID versions (6,7,8). This
|
|
||||||
* implementation of V7 is based on the accepted, though not yet approved,
|
|
||||||
* revisions.
|
|
||||||
*
|
|
||||||
* RFC 9562:https://www.rfc-editor.org/rfc/rfc9562.html Universally Unique
|
|
||||||
* IDentifiers (UUIDs)
|
|
||||||
|
|
||||||
*
|
|
||||||
* Sample V7 value:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#name-example-of-a-uuidv7-value
|
|
||||||
*
|
|
||||||
* Monotonic Bit Layout: RFC rfc9562.6.2 Method 1, Dedicated Counter Bits ref:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-5.1
|
|
||||||
*
|
|
||||||
* 0 1 2 3 0 1 2 3 4 5 6
|
|
||||||
* 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms | ver | seq_hi |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* |var| seq_low | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
*
|
|
||||||
* seq is a 31 bit serialized counter; comprised of 12 bit seq_hi and 19 bit
|
|
||||||
* seq_low, and randomly initialized upon timestamp change. 31 bit counter size
|
|
||||||
* was selected as any bitwise operations in node are done as _signed_ 32 bit
|
|
||||||
* ints. we exclude the sign bit.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var _seqLow = null;
|
|
||||||
var _seqHigh = null;
|
|
||||||
var _msecs = 0;
|
|
||||||
function v7(options, buf, offset) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// initialize buffer and pointer
|
|
||||||
var i = buf && offset || 0;
|
|
||||||
var b = buf || new Uint8Array(16);
|
|
||||||
|
|
||||||
// rnds is Uint8Array(16) filled with random bytes
|
|
||||||
var rnds = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// milliseconds since unix epoch, 1970-01-01 00:00
|
|
||||||
var msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// seq is user provided 31 bit counter
|
|
||||||
var seq = options.seq !== undefined ? options.seq : null;
|
|
||||||
|
|
||||||
// initialize local seq high/low parts
|
|
||||||
var seqHigh = _seqHigh;
|
|
||||||
var seqLow = _seqLow;
|
|
||||||
|
|
||||||
// check if clock has advanced and user has not provided msecs
|
|
||||||
if (msecs > _msecs && options.msecs === undefined) {
|
|
||||||
_msecs = msecs;
|
|
||||||
|
|
||||||
// unless user provided seq, reset seq parts
|
|
||||||
if (seq !== null) {
|
|
||||||
seqHigh = null;
|
|
||||||
seqLow = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we have a user provided seq
|
|
||||||
if (seq !== null) {
|
|
||||||
// trim provided seq to 31 bits of value, avoiding overflow
|
|
||||||
if (seq > 0x7fffffff) {
|
|
||||||
seq = 0x7fffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// split provided seq into high/low parts
|
|
||||||
seqHigh = seq >>> 19 & 0xfff;
|
|
||||||
seqLow = seq & 0x7ffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// randomly initialize seq
|
|
||||||
if (seqHigh === null || seqLow === null) {
|
|
||||||
seqHigh = rnds[6] & 0x7f;
|
|
||||||
seqHigh = seqHigh << 8 | rnds[7];
|
|
||||||
seqLow = rnds[8] & 0x3f; // pad for var
|
|
||||||
seqLow = seqLow << 8 | rnds[9];
|
|
||||||
seqLow = seqLow << 5 | rnds[10] >>> 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// increment seq if within msecs window
|
|
||||||
if (msecs + 10000 > _msecs && seq === null) {
|
|
||||||
if (++seqLow > 0x7ffff) {
|
|
||||||
seqLow = 0;
|
|
||||||
if (++seqHigh > 0xfff) {
|
|
||||||
seqHigh = 0;
|
|
||||||
|
|
||||||
// increment internal _msecs. this allows us to continue incrementing
|
|
||||||
// while staying monotonic. Note, once we hit 10k milliseconds beyond system
|
|
||||||
// clock, we will reset breaking monotonicity (after (2^31)*10000 generations)
|
|
||||||
_msecs++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// resetting; we have advanced more than
|
|
||||||
// 10k milliseconds beyond system clock
|
|
||||||
_msecs = msecs;
|
|
||||||
}
|
|
||||||
_seqHigh = seqHigh;
|
|
||||||
_seqLow = seqLow;
|
|
||||||
|
|
||||||
// [bytes 0-5] 48 bits of local timestamp
|
|
||||||
b[i++] = _msecs / 0x10000000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x1000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x10000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100 & 0xff;
|
|
||||||
b[i++] = _msecs & 0xff;
|
|
||||||
|
|
||||||
// [byte 6] - set 4 bits of version (7) with first 4 bits seq_hi
|
|
||||||
b[i++] = seqHigh >>> 4 & 0x0f | 0x70;
|
|
||||||
|
|
||||||
// [byte 7] remaining 8 bits of seq_hi
|
|
||||||
b[i++] = seqHigh & 0xff;
|
|
||||||
|
|
||||||
// [byte 8] - variant (2 bits), first 6 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 13 & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// [byte 9] 8 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 5 & 0xff;
|
|
||||||
|
|
||||||
// [byte 10] remaining 5 bits seq_low, 3 bits random
|
|
||||||
b[i++] = seqLow << 3 & 0xff | rnds[10] & 0x07;
|
|
||||||
|
|
||||||
// [bytes 11-15] always random
|
|
||||||
b[i++] = rnds[11];
|
|
||||||
b[i++] = rnds[12];
|
|
||||||
b[i++] = rnds[13];
|
|
||||||
b[i++] = rnds[14];
|
|
||||||
b[i++] = rnds[15];
|
|
||||||
return buf || unsafeStringify(b);
|
|
||||||
}
|
|
||||||
export default v7;
|
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
import REGEX from './regex.js';
|
|
||||||
function validate(uuid) {
|
|
||||||
return typeof uuid === 'string' && REGEX.test(uuid);
|
|
||||||
}
|
|
||||||
export default validate;
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
function version(uuid) {
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
return parseInt(uuid.slice(14, 15), 16);
|
|
||||||
}
|
|
||||||
export default version;
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
import crypto from 'node:crypto';
|
|
||||||
function md5(bytes) {
|
|
||||||
if (Array.isArray(bytes)) {
|
|
||||||
bytes = Buffer.from(bytes);
|
|
||||||
} else if (typeof bytes === 'string') {
|
|
||||||
bytes = Buffer.from(bytes, 'utf8');
|
|
||||||
}
|
|
||||||
return crypto.createHash('md5').update(bytes).digest();
|
|
||||||
}
|
|
||||||
export default md5;
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
import crypto from 'node:crypto';
|
|
||||||
export default {
|
|
||||||
randomUUID: crypto.randomUUID
|
|
||||||
};
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
export default '00000000-0000-0000-0000-000000000000';
|
|
||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
function parse(uuid) {
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
let v;
|
|
||||||
const arr = new Uint8Array(16);
|
|
||||||
|
|
||||||
// Parse ########-....-....-....-............
|
|
||||||
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
||||||
arr[1] = v >>> 16 & 0xff;
|
|
||||||
arr[2] = v >>> 8 & 0xff;
|
|
||||||
arr[3] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-####-....-....-............
|
|
||||||
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
||||||
arr[5] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-####-....-............
|
|
||||||
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
||||||
arr[7] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-####-............
|
|
||||||
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
||||||
arr[9] = v & 0xff;
|
|
||||||
|
|
||||||
// Parse ........-....-....-....-############
|
|
||||||
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
||||||
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
||||||
arr[11] = v / 0x100000000 & 0xff;
|
|
||||||
arr[12] = v >>> 24 & 0xff;
|
|
||||||
arr[13] = v >>> 16 & 0xff;
|
|
||||||
arr[14] = v >>> 8 & 0xff;
|
|
||||||
arr[15] = v & 0xff;
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
export default parse;
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
import crypto from 'node:crypto';
|
|
||||||
const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
|
|
||||||
let poolPtr = rnds8Pool.length;
|
|
||||||
export default function rng() {
|
|
||||||
if (poolPtr > rnds8Pool.length - 16) {
|
|
||||||
crypto.randomFillSync(rnds8Pool);
|
|
||||||
poolPtr = 0;
|
|
||||||
}
|
|
||||||
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
||||||
}
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
import crypto from 'node:crypto';
|
|
||||||
function sha1(bytes) {
|
|
||||||
if (Array.isArray(bytes)) {
|
|
||||||
bytes = Buffer.from(bytes);
|
|
||||||
} else if (typeof bytes === 'string') {
|
|
||||||
bytes = Buffer.from(bytes, 'utf8');
|
|
||||||
}
|
|
||||||
return crypto.createHash('sha1').update(bytes).digest();
|
|
||||||
}
|
|
||||||
export default sha1;
|
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert array of 16 byte values to UUID string format of the form:
|
|
||||||
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
||||||
*/
|
|
||||||
const byteToHex = [];
|
|
||||||
for (let i = 0; i < 256; ++i) {
|
|
||||||
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
||||||
}
|
|
||||||
export function unsafeStringify(arr, offset = 0) {
|
|
||||||
// Note: Be careful editing this code! It's been tuned for performance
|
|
||||||
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
||||||
//
|
|
||||||
// Note to future-self: No, you can't remove the `toLowerCase()` call.
|
|
||||||
// REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
|
|
||||||
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
||||||
}
|
|
||||||
function stringify(arr, offset = 0) {
|
|
||||||
const uuid = unsafeStringify(arr, offset);
|
|
||||||
// Consistency check for valid UUID. If this throws, it's likely due to one
|
|
||||||
// of the following:
|
|
||||||
// - One or more input array values don't map to a hex octet (leading to
|
|
||||||
// "undefined" in the uuid)
|
|
||||||
// - Invalid input values for the RFC `version` or `variant` fields
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Stringified UUID is invalid');
|
|
||||||
}
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
export default stringify;
|
|
||||||
-125
@@ -1,125 +0,0 @@
|
|||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
// **`v1()` - Generate time-based UUID**
|
|
||||||
//
|
|
||||||
// Inspired by https://github.com/LiosK/UUID.js
|
|
||||||
// and http://docs.python.org/library/uuid.html
|
|
||||||
|
|
||||||
let _nodeId;
|
|
||||||
let _clockseq;
|
|
||||||
|
|
||||||
// Previous uuid creation time
|
|
||||||
let _lastMSecs = 0;
|
|
||||||
let _lastNSecs = 0;
|
|
||||||
|
|
||||||
// See https://github.com/uuidjs/uuid for API details
|
|
||||||
function v1(options, buf, offset) {
|
|
||||||
let i = buf && offset || 0;
|
|
||||||
const b = buf || new Array(16);
|
|
||||||
options = options || {};
|
|
||||||
let node = options.node;
|
|
||||||
let clockseq = options.clockseq;
|
|
||||||
|
|
||||||
// v1 only: Use cached `node` and `clockseq` values
|
|
||||||
if (!options._v6) {
|
|
||||||
if (!node) {
|
|
||||||
node = _nodeId;
|
|
||||||
}
|
|
||||||
if (clockseq == null) {
|
|
||||||
clockseq = _clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle cases where we need entropy. We do this lazily to minimize issues
|
|
||||||
// related to insufficient system entropy. See #189
|
|
||||||
if (node == null || clockseq == null) {
|
|
||||||
const seedBytes = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// Randomize node
|
|
||||||
if (node == null) {
|
|
||||||
node = [seedBytes[0], seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
||||||
|
|
||||||
// v1 only: cache node value for reuse
|
|
||||||
if (!_nodeId && !options._v6) {
|
|
||||||
// per RFC4122 4.5: Set MAC multicast bit (v1 only)
|
|
||||||
node[0] |= 0x01; // Set multicast bit
|
|
||||||
|
|
||||||
_nodeId = node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Randomize clockseq
|
|
||||||
if (clockseq == null) {
|
|
||||||
// Per 4.2.2, randomize (14 bit) clockseq
|
|
||||||
clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
||||||
if (_clockseq === undefined && !options._v6) {
|
|
||||||
_clockseq = clockseq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// v1 & v6 timestamps are 100 nano-second units since the Gregorian epoch,
|
|
||||||
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so time is
|
|
||||||
// handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
||||||
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
||||||
let msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
||||||
// cycle to simulate higher resolution clock
|
|
||||||
let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
|
|
||||||
|
|
||||||
// Time since last uuid creation (in msecs)
|
|
||||||
const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
|
|
||||||
|
|
||||||
// Per 4.2.1.2, Bump clockseq on clock regression
|
|
||||||
if (dt < 0 && options.clockseq === undefined) {
|
|
||||||
clockseq = clockseq + 1 & 0x3fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
||||||
// time interval
|
|
||||||
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
||||||
nsecs = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Per 4.2.1.2 Throw error if too many uuids are requested
|
|
||||||
if (nsecs >= 10000) {
|
|
||||||
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
||||||
}
|
|
||||||
_lastMSecs = msecs;
|
|
||||||
_lastNSecs = nsecs;
|
|
||||||
_clockseq = clockseq;
|
|
||||||
|
|
||||||
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
||||||
msecs += 12219292800000;
|
|
||||||
|
|
||||||
// `time_low`
|
|
||||||
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
||||||
b[i++] = tl >>> 24 & 0xff;
|
|
||||||
b[i++] = tl >>> 16 & 0xff;
|
|
||||||
b[i++] = tl >>> 8 & 0xff;
|
|
||||||
b[i++] = tl & 0xff;
|
|
||||||
|
|
||||||
// `time_mid`
|
|
||||||
const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
||||||
b[i++] = tmh >>> 8 & 0xff;
|
|
||||||
b[i++] = tmh & 0xff;
|
|
||||||
|
|
||||||
// `time_high_and_version`
|
|
||||||
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
||||||
b[i++] = tmh >>> 16 & 0xff;
|
|
||||||
|
|
||||||
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
||||||
b[i++] = clockseq >>> 8 | 0x80;
|
|
||||||
|
|
||||||
// `clock_seq_low`
|
|
||||||
b[i++] = clockseq & 0xff;
|
|
||||||
|
|
||||||
// `node`
|
|
||||||
for (let n = 0; n < 6; ++n) {
|
|
||||||
b[i + n] = node[n];
|
|
||||||
}
|
|
||||||
return buf || unsafeStringify(b);
|
|
||||||
}
|
|
||||||
export default v1;
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
import parse from './parse.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a v1 UUID to a v6 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v1 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v6 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
export default function v1ToV6(uuid) {
|
|
||||||
const v1Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
|
||||||
const v6Bytes = _v1ToV6(v1Bytes);
|
|
||||||
return typeof uuid === 'string' ? unsafeStringify(v6Bytes) : v6Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v1 -> v6
|
|
||||||
function _v1ToV6(v1Bytes, randomize = false) {
|
|
||||||
return Uint8Array.of((v1Bytes[6] & 0x0f) << 4 | v1Bytes[7] >> 4 & 0x0f, (v1Bytes[7] & 0x0f) << 4 | (v1Bytes[4] & 0xf0) >> 4, (v1Bytes[4] & 0x0f) << 4 | (v1Bytes[5] & 0xf0) >> 4, (v1Bytes[5] & 0x0f) << 4 | (v1Bytes[0] & 0xf0) >> 4, (v1Bytes[0] & 0x0f) << 4 | (v1Bytes[1] & 0xf0) >> 4, (v1Bytes[1] & 0x0f) << 4 | (v1Bytes[2] & 0xf0) >> 4, 0x60 | v1Bytes[2] & 0x0f, v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);
|
|
||||||
}
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
import v35 from './v35.js';
|
|
||||||
import md5 from './md5.js';
|
|
||||||
const v3 = v35('v3', 0x30, md5);
|
|
||||||
export default v3;
|
|
||||||
-55
@@ -1,55 +0,0 @@
|
|||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
import parse from './parse.js';
|
|
||||||
function stringToBytes(str) {
|
|
||||||
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
||||||
|
|
||||||
const bytes = [];
|
|
||||||
for (let i = 0; i < str.length; ++i) {
|
|
||||||
bytes.push(str.charCodeAt(i));
|
|
||||||
}
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
||||||
export default function v35(name, version, hashfunc) {
|
|
||||||
function generateUUID(value, namespace, buf, offset) {
|
|
||||||
var _namespace;
|
|
||||||
if (typeof value === 'string') {
|
|
||||||
value = stringToBytes(value);
|
|
||||||
}
|
|
||||||
if (typeof namespace === 'string') {
|
|
||||||
namespace = parse(namespace);
|
|
||||||
}
|
|
||||||
if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
|
|
||||||
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute hash of namespace and value, Per 4.3
|
|
||||||
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
||||||
// hashfunc([...namespace, ... value])`
|
|
||||||
let bytes = new Uint8Array(16 + value.length);
|
|
||||||
bytes.set(namespace);
|
|
||||||
bytes.set(value, namespace.length);
|
|
||||||
bytes = hashfunc(bytes);
|
|
||||||
bytes[6] = bytes[6] & 0x0f | version;
|
|
||||||
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (let i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function#name is not settable on some platforms (#270)
|
|
||||||
try {
|
|
||||||
generateUUID.name = name;
|
|
||||||
} catch (err) {}
|
|
||||||
|
|
||||||
// For CommonJS default export support
|
|
||||||
generateUUID.DNS = DNS;
|
|
||||||
generateUUID.URL = URL;
|
|
||||||
return generateUUID;
|
|
||||||
}
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
import native from './native.js';
|
|
||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
function v4(options, buf, offset) {
|
|
||||||
if (native.randomUUID && !buf && !options) {
|
|
||||||
return native.randomUUID();
|
|
||||||
}
|
|
||||||
options = options || {};
|
|
||||||
const rnds = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
||||||
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
||||||
rnds[8] = rnds[8] & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// Copy bytes to buffer, if provided
|
|
||||||
if (buf) {
|
|
||||||
offset = offset || 0;
|
|
||||||
for (let i = 0; i < 16; ++i) {
|
|
||||||
buf[offset + i] = rnds[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(rnds);
|
|
||||||
}
|
|
||||||
export default v4;
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
import v35 from './v35.js';
|
|
||||||
import sha1 from './sha1.js';
|
|
||||||
const v5 = v35('v5', 0x50, sha1);
|
|
||||||
export default v5;
|
|
||||||
-32
@@ -1,32 +0,0 @@
|
|||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
import v1 from './v1.js';
|
|
||||||
import v1ToV6 from './v1ToV6.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {object} options
|
|
||||||
* @param {Uint8Array=} buf
|
|
||||||
* @param {number=} offset
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export default function v6(options = {}, buf, offset = 0) {
|
|
||||||
// v6 is v1 with different field layout, so we start with a v1 UUID, albeit
|
|
||||||
// with slightly different behavior around how the clock_seq and node fields
|
|
||||||
// are randomized, which is why we call v1 with _v6: true.
|
|
||||||
let bytes = v1({
|
|
||||||
...options,
|
|
||||||
_v6: true
|
|
||||||
}, new Uint8Array(16));
|
|
||||||
|
|
||||||
// Reorder the fields to v6 layout.
|
|
||||||
bytes = v1ToV6(bytes);
|
|
||||||
|
|
||||||
// Return as a byte array if requested
|
|
||||||
if (buf) {
|
|
||||||
for (let i = 0; i < 16; i++) {
|
|
||||||
buf[offset + i] = bytes[i];
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
return unsafeStringify(bytes);
|
|
||||||
}
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
import parse from './parse.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a v6 UUID to a v1 UUID
|
|
||||||
*
|
|
||||||
* @param {string|Uint8Array} uuid - The v6 UUID to convert to v6
|
|
||||||
* @returns {string|Uint8Array} The v1 UUID as the same type as the `uuid` arg
|
|
||||||
* (string or Uint8Array)
|
|
||||||
*/
|
|
||||||
export default function v6ToV1(uuid) {
|
|
||||||
const v6Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;
|
|
||||||
const v1Bytes = _v6ToV1(v6Bytes);
|
|
||||||
return typeof uuid === 'string' ? unsafeStringify(v1Bytes) : v1Bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the field transformation needed for v6 -> v1
|
|
||||||
function _v6ToV1(v6Bytes) {
|
|
||||||
return Uint8Array.of((v6Bytes[3] & 0x0f) << 4 | v6Bytes[4] >> 4 & 0x0f, (v6Bytes[4] & 0x0f) << 4 | (v6Bytes[5] & 0xf0) >> 4, (v6Bytes[5] & 0x0f) << 4 | v6Bytes[6] & 0x0f, v6Bytes[7], (v6Bytes[1] & 0x0f) << 4 | (v6Bytes[2] & 0xf0) >> 4, (v6Bytes[2] & 0x0f) << 4 | (v6Bytes[3] & 0xf0) >> 4, 0x10 | (v6Bytes[0] & 0xf0) >> 4, (v6Bytes[0] & 0x0f) << 4 | (v6Bytes[1] & 0xf0) >> 4, v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);
|
|
||||||
}
|
|
||||||
-146
@@ -1,146 +0,0 @@
|
|||||||
import rng from './rng.js';
|
|
||||||
import { unsafeStringify } from './stringify.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UUID V7 - Unix Epoch time-based UUID
|
|
||||||
*
|
|
||||||
* The IETF has published RFC9562, introducing 3 new UUID versions (6,7,8). This
|
|
||||||
* implementation of V7 is based on the accepted, though not yet approved,
|
|
||||||
* revisions.
|
|
||||||
*
|
|
||||||
* RFC 9562:https://www.rfc-editor.org/rfc/rfc9562.html Universally Unique
|
|
||||||
* IDentifiers (UUIDs)
|
|
||||||
|
|
||||||
*
|
|
||||||
* Sample V7 value:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#name-example-of-a-uuidv7-value
|
|
||||||
*
|
|
||||||
* Monotonic Bit Layout: RFC rfc9562.6.2 Method 1, Dedicated Counter Bits ref:
|
|
||||||
* https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-5.1
|
|
||||||
*
|
|
||||||
* 0 1 2 3 0 1 2 3 4 5 6
|
|
||||||
* 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | unix_ts_ms | ver | seq_hi |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* |var| seq_low | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | rand |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
*
|
|
||||||
* seq is a 31 bit serialized counter; comprised of 12 bit seq_hi and 19 bit
|
|
||||||
* seq_low, and randomly initialized upon timestamp change. 31 bit counter size
|
|
||||||
* was selected as any bitwise operations in node are done as _signed_ 32 bit
|
|
||||||
* ints. we exclude the sign bit.
|
|
||||||
*/
|
|
||||||
|
|
||||||
let _seqLow = null;
|
|
||||||
let _seqHigh = null;
|
|
||||||
let _msecs = 0;
|
|
||||||
function v7(options, buf, offset) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// initialize buffer and pointer
|
|
||||||
let i = buf && offset || 0;
|
|
||||||
const b = buf || new Uint8Array(16);
|
|
||||||
|
|
||||||
// rnds is Uint8Array(16) filled with random bytes
|
|
||||||
const rnds = options.random || (options.rng || rng)();
|
|
||||||
|
|
||||||
// milliseconds since unix epoch, 1970-01-01 00:00
|
|
||||||
const msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
||||||
|
|
||||||
// seq is user provided 31 bit counter
|
|
||||||
let seq = options.seq !== undefined ? options.seq : null;
|
|
||||||
|
|
||||||
// initialize local seq high/low parts
|
|
||||||
let seqHigh = _seqHigh;
|
|
||||||
let seqLow = _seqLow;
|
|
||||||
|
|
||||||
// check if clock has advanced and user has not provided msecs
|
|
||||||
if (msecs > _msecs && options.msecs === undefined) {
|
|
||||||
_msecs = msecs;
|
|
||||||
|
|
||||||
// unless user provided seq, reset seq parts
|
|
||||||
if (seq !== null) {
|
|
||||||
seqHigh = null;
|
|
||||||
seqLow = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we have a user provided seq
|
|
||||||
if (seq !== null) {
|
|
||||||
// trim provided seq to 31 bits of value, avoiding overflow
|
|
||||||
if (seq > 0x7fffffff) {
|
|
||||||
seq = 0x7fffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// split provided seq into high/low parts
|
|
||||||
seqHigh = seq >>> 19 & 0xfff;
|
|
||||||
seqLow = seq & 0x7ffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
// randomly initialize seq
|
|
||||||
if (seqHigh === null || seqLow === null) {
|
|
||||||
seqHigh = rnds[6] & 0x7f;
|
|
||||||
seqHigh = seqHigh << 8 | rnds[7];
|
|
||||||
seqLow = rnds[8] & 0x3f; // pad for var
|
|
||||||
seqLow = seqLow << 8 | rnds[9];
|
|
||||||
seqLow = seqLow << 5 | rnds[10] >>> 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// increment seq if within msecs window
|
|
||||||
if (msecs + 10000 > _msecs && seq === null) {
|
|
||||||
if (++seqLow > 0x7ffff) {
|
|
||||||
seqLow = 0;
|
|
||||||
if (++seqHigh > 0xfff) {
|
|
||||||
seqHigh = 0;
|
|
||||||
|
|
||||||
// increment internal _msecs. this allows us to continue incrementing
|
|
||||||
// while staying monotonic. Note, once we hit 10k milliseconds beyond system
|
|
||||||
// clock, we will reset breaking monotonicity (after (2^31)*10000 generations)
|
|
||||||
_msecs++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// resetting; we have advanced more than
|
|
||||||
// 10k milliseconds beyond system clock
|
|
||||||
_msecs = msecs;
|
|
||||||
}
|
|
||||||
_seqHigh = seqHigh;
|
|
||||||
_seqLow = seqLow;
|
|
||||||
|
|
||||||
// [bytes 0-5] 48 bits of local timestamp
|
|
||||||
b[i++] = _msecs / 0x10000000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x1000000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x10000 & 0xff;
|
|
||||||
b[i++] = _msecs / 0x100 & 0xff;
|
|
||||||
b[i++] = _msecs & 0xff;
|
|
||||||
|
|
||||||
// [byte 6] - set 4 bits of version (7) with first 4 bits seq_hi
|
|
||||||
b[i++] = seqHigh >>> 4 & 0x0f | 0x70;
|
|
||||||
|
|
||||||
// [byte 7] remaining 8 bits of seq_hi
|
|
||||||
b[i++] = seqHigh & 0xff;
|
|
||||||
|
|
||||||
// [byte 8] - variant (2 bits), first 6 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 13 & 0x3f | 0x80;
|
|
||||||
|
|
||||||
// [byte 9] 8 bits seq_low
|
|
||||||
b[i++] = seqLow >>> 5 & 0xff;
|
|
||||||
|
|
||||||
// [byte 10] remaining 5 bits seq_low, 3 bits random
|
|
||||||
b[i++] = seqLow << 3 & 0xff | rnds[10] & 0x07;
|
|
||||||
|
|
||||||
// [bytes 11-15] always random
|
|
||||||
b[i++] = rnds[11];
|
|
||||||
b[i++] = rnds[12];
|
|
||||||
b[i++] = rnds[13];
|
|
||||||
b[i++] = rnds[14];
|
|
||||||
b[i++] = rnds[15];
|
|
||||||
return buf || unsafeStringify(b);
|
|
||||||
}
|
|
||||||
export default v7;
|
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
import REGEX from './regex.js';
|
|
||||||
function validate(uuid) {
|
|
||||||
return typeof uuid === 'string' && REGEX.test(uuid);
|
|
||||||
}
|
|
||||||
export default validate;
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
import validate from './validate.js';
|
|
||||||
function version(uuid) {
|
|
||||||
if (!validate(uuid)) {
|
|
||||||
throw TypeError('Invalid UUID');
|
|
||||||
}
|
|
||||||
return parseInt(uuid.slice(14, 15), 16);
|
|
||||||
}
|
|
||||||
export default version;
|
|
||||||
+1
@@ -2,6 +2,7 @@ export { default as MAX } from './max.js';
|
|||||||
export { default as NIL } from './nil.js';
|
export { default as NIL } from './nil.js';
|
||||||
export { default as parse } from './parse.js';
|
export { default as parse } from './parse.js';
|
||||||
export { default as stringify } from './stringify.js';
|
export { default as stringify } from './stringify.js';
|
||||||
|
export type * from './types.js';
|
||||||
export { default as v1 } from './v1.js';
|
export { default as v1 } from './v1.js';
|
||||||
export { default as v1ToV6 } from './v1ToV6.js';
|
export { default as v1ToV6 } from './v1ToV6.js';
|
||||||
export { default as v3 } from './v3.js';
|
export { default as v3 } from './v3.js';
|
||||||
+14
-104
@@ -1,104 +1,14 @@
|
|||||||
"use strict";
|
export { default as MAX } from './max.js';
|
||||||
|
export { default as NIL } from './nil.js';
|
||||||
Object.defineProperty(exports, "__esModule", {
|
export { default as parse } from './parse.js';
|
||||||
value: true
|
export { default as stringify } from './stringify.js';
|
||||||
});
|
export { default as v1 } from './v1.js';
|
||||||
Object.defineProperty(exports, "MAX", {
|
export { default as v1ToV6 } from './v1ToV6.js';
|
||||||
enumerable: true,
|
export { default as v3 } from './v3.js';
|
||||||
get: function () {
|
export { default as v4 } from './v4.js';
|
||||||
return _max.default;
|
export { default as v5 } from './v5.js';
|
||||||
}
|
export { default as v6 } from './v6.js';
|
||||||
});
|
export { default as v6ToV1 } from './v6ToV1.js';
|
||||||
Object.defineProperty(exports, "NIL", {
|
export { default as v7 } from './v7.js';
|
||||||
enumerable: true,
|
export { default as validate } from './validate.js';
|
||||||
get: function () {
|
export { default as version } from './version.js';
|
||||||
return _nil.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "parse", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _parse.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "stringify", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _stringify.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v1", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v1ToV6", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v1ToV.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v3", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v2.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v4", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v3.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v5", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v4.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v6", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v5.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v6ToV1", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v6ToV.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "v7", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _v6.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "validate", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _validate.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "version", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _version.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var _max = _interopRequireDefault(require("./max.js"));
|
|
||||||
var _nil = _interopRequireDefault(require("./nil.js"));
|
|
||||||
var _parse = _interopRequireDefault(require("./parse.js"));
|
|
||||||
var _stringify = _interopRequireDefault(require("./stringify.js"));
|
|
||||||
var _v = _interopRequireDefault(require("./v1.js"));
|
|
||||||
var _v1ToV = _interopRequireDefault(require("./v1ToV6.js"));
|
|
||||||
var _v2 = _interopRequireDefault(require("./v3.js"));
|
|
||||||
var _v3 = _interopRequireDefault(require("./v4.js"));
|
|
||||||
var _v4 = _interopRequireDefault(require("./v5.js"));
|
|
||||||
var _v5 = _interopRequireDefault(require("./v6.js"));
|
|
||||||
var _v6ToV = _interopRequireDefault(require("./v6ToV1.js"));
|
|
||||||
var _v6 = _interopRequireDefault(require("./v7.js"));
|
|
||||||
var _validate = _interopRequireDefault(require("./validate.js"));
|
|
||||||
var _version = _interopRequireDefault(require("./version.js"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
declare const _default: "ffffffff-ffff-ffff-ffff-ffffffffffff";
|
||||||
|
export default _default;
|
||||||
+1
-7
@@ -1,7 +1 @@
|
|||||||
"use strict";
|
export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _default = exports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';
|
|
||||||
|
|||||||
-200
@@ -1,200 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
/*
|
|
||||||
* Browser-compatible JavaScript MD5
|
|
||||||
*
|
|
||||||
* Modification of JavaScript MD5
|
|
||||||
* https://github.com/blueimp/JavaScript-MD5
|
|
||||||
*
|
|
||||||
* Copyright 2011, Sebastian Tschan
|
|
||||||
* https://blueimp.net
|
|
||||||
*
|
|
||||||
* Licensed under the MIT license:
|
|
||||||
* https://opensource.org/licenses/MIT
|
|
||||||
*
|
|
||||||
* Based on
|
|
||||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
|
||||||
* Digest Algorithm, as defined in RFC 1321.
|
|
||||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
|
||||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
|
||||||
* Distributed under the BSD License
|
|
||||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
|
||||||
*/
|
|
||||||
function md5(bytes) {
|
|
||||||
if (typeof bytes === 'string') {
|
|
||||||
const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape
|
|
||||||
|
|
||||||
bytes = new Uint8Array(msg.length);
|
|
||||||
for (let i = 0; i < msg.length; ++i) {
|
|
||||||
bytes[i] = msg.charCodeAt(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array of little-endian words to an array of bytes
|
|
||||||
*/
|
|
||||||
function md5ToHexEncodedArray(input) {
|
|
||||||
const output = [];
|
|
||||||
const length32 = input.length * 32;
|
|
||||||
const hexTab = '0123456789abcdef';
|
|
||||||
for (let i = 0; i < length32; i += 8) {
|
|
||||||
const x = input[i >> 5] >>> i % 32 & 0xff;
|
|
||||||
const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
|
|
||||||
output.push(hex);
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate output length with padding and bit length
|
|
||||||
*/
|
|
||||||
function getOutputLength(inputLength8) {
|
|
||||||
return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
|
||||||
*/
|
|
||||||
function wordsToMd5(x, len) {
|
|
||||||
/* append padding */
|
|
||||||
x[len >> 5] |= 0x80 << len % 32;
|
|
||||||
x[getOutputLength(len) - 1] = len;
|
|
||||||
let a = 1732584193;
|
|
||||||
let b = -271733879;
|
|
||||||
let c = -1732584194;
|
|
||||||
let d = 271733878;
|
|
||||||
for (let i = 0; i < x.length; i += 16) {
|
|
||||||
const olda = a;
|
|
||||||
const oldb = b;
|
|
||||||
const oldc = c;
|
|
||||||
const oldd = d;
|
|
||||||
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
||||||
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
||||||
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
||||||
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
||||||
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
||||||
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
||||||
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
||||||
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
||||||
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
||||||
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
||||||
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
||||||
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
||||||
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
||||||
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
||||||
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
||||||
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
||||||
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
||||||
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
||||||
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
||||||
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
||||||
a = safeAdd(a, olda);
|
|
||||||
b = safeAdd(b, oldb);
|
|
||||||
c = safeAdd(c, oldc);
|
|
||||||
d = safeAdd(d, oldd);
|
|
||||||
}
|
|
||||||
return [a, b, c, d];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert an array bytes to an array of little-endian words
|
|
||||||
* Characters >255 have their high-byte silently ignored.
|
|
||||||
*/
|
|
||||||
function bytesToWords(input) {
|
|
||||||
if (input.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
const length8 = input.length * 8;
|
|
||||||
const output = new Uint32Array(getOutputLength(length8));
|
|
||||||
for (let i = 0; i < length8; i += 8) {
|
|
||||||
output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
|
||||||
* to work around bugs in some JS interpreters.
|
|
||||||
*/
|
|
||||||
function safeAdd(x, y) {
|
|
||||||
const lsw = (x & 0xffff) + (y & 0xffff);
|
|
||||||
const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
||||||
return msw << 16 | lsw & 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bitwise rotate a 32-bit number to the left.
|
|
||||||
*/
|
|
||||||
function bitRotateLeft(num, cnt) {
|
|
||||||
return num << cnt | num >>> 32 - cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These functions implement the four basic operations the algorithm uses.
|
|
||||||
*/
|
|
||||||
function md5cmn(q, a, b, x, s, t) {
|
|
||||||
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
|
||||||
}
|
|
||||||
function md5ff(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & c | ~b & d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5gg(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b & d | c & ~d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5hh(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
|
||||||
}
|
|
||||||
function md5ii(a, b, c, d, x, s, t) {
|
|
||||||
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
|
||||||
}
|
|
||||||
var _default = exports.default = md5;
|
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
declare function md5(bytes: Uint8Array): Uint8Array;
|
||||||
|
export default md5;
|
||||||
+133
-15
@@ -1,17 +1,135 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _nodeCrypto = _interopRequireDefault(require("node:crypto"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
function md5(bytes) {
|
function md5(bytes) {
|
||||||
if (Array.isArray(bytes)) {
|
const words = uint8ToUint32(bytes);
|
||||||
bytes = Buffer.from(bytes);
|
const md5Bytes = wordsToMd5(words, bytes.length * 8);
|
||||||
} else if (typeof bytes === 'string') {
|
return uint32ToUint8(md5Bytes);
|
||||||
bytes = Buffer.from(bytes, 'utf8');
|
|
||||||
}
|
|
||||||
return _nodeCrypto.default.createHash('md5').update(bytes).digest();
|
|
||||||
}
|
}
|
||||||
var _default = exports.default = md5;
|
function uint32ToUint8(input) {
|
||||||
|
const bytes = new Uint8Array(input.length * 4);
|
||||||
|
for (let i = 0; i < input.length * 4; i++) {
|
||||||
|
bytes[i] = (input[i >> 2] >>> ((i % 4) * 8)) & 0xff;
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
function getOutputLength(inputLength8) {
|
||||||
|
return (((inputLength8 + 64) >>> 9) << 4) + 14 + 1;
|
||||||
|
}
|
||||||
|
function wordsToMd5(x, len) {
|
||||||
|
const xpad = new Uint32Array(getOutputLength(len)).fill(0);
|
||||||
|
xpad.set(x);
|
||||||
|
xpad[len >> 5] |= 0x80 << (len % 32);
|
||||||
|
xpad[xpad.length - 1] = len;
|
||||||
|
x = xpad;
|
||||||
|
let a = 1732584193;
|
||||||
|
let b = -271733879;
|
||||||
|
let c = -1732584194;
|
||||||
|
let d = 271733878;
|
||||||
|
for (let i = 0; i < x.length; i += 16) {
|
||||||
|
const olda = a;
|
||||||
|
const oldb = b;
|
||||||
|
const oldc = c;
|
||||||
|
const oldd = d;
|
||||||
|
a = md5ff(a, b, c, d, x[i], 7, -680876936);
|
||||||
|
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||||
|
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||||
|
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||||
|
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||||
|
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||||
|
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||||
|
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||||
|
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||||
|
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||||
|
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||||
|
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||||
|
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||||
|
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||||
|
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||||
|
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||||
|
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||||
|
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||||
|
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||||
|
b = md5gg(b, c, d, a, x[i], 20, -373897302);
|
||||||
|
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||||
|
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||||
|
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||||
|
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||||
|
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||||
|
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||||
|
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||||
|
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||||
|
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||||
|
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||||
|
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||||
|
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||||
|
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||||
|
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||||
|
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||||
|
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||||
|
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||||
|
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||||
|
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||||
|
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||||
|
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||||
|
d = md5hh(d, a, b, c, x[i], 11, -358537222);
|
||||||
|
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||||
|
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||||
|
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||||
|
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||||
|
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||||
|
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||||
|
a = md5ii(a, b, c, d, x[i], 6, -198630844);
|
||||||
|
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||||
|
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||||
|
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||||
|
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||||
|
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||||
|
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||||
|
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||||
|
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||||
|
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||||
|
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||||
|
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||||
|
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||||
|
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||||
|
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||||
|
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||||
|
a = safeAdd(a, olda);
|
||||||
|
b = safeAdd(b, oldb);
|
||||||
|
c = safeAdd(c, oldc);
|
||||||
|
d = safeAdd(d, oldd);
|
||||||
|
}
|
||||||
|
return Uint32Array.of(a, b, c, d);
|
||||||
|
}
|
||||||
|
function uint8ToUint32(input) {
|
||||||
|
if (input.length === 0) {
|
||||||
|
return new Uint32Array();
|
||||||
|
}
|
||||||
|
const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);
|
||||||
|
for (let i = 0; i < input.length; i++) {
|
||||||
|
output[i >> 2] |= (input[i] & 0xff) << ((i % 4) * 8);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
function safeAdd(x, y) {
|
||||||
|
const lsw = (x & 0xffff) + (y & 0xffff);
|
||||||
|
const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||||
|
return (msw << 16) | (lsw & 0xffff);
|
||||||
|
}
|
||||||
|
function bitRotateLeft(num, cnt) {
|
||||||
|
return (num << cnt) | (num >>> (32 - cnt));
|
||||||
|
}
|
||||||
|
function md5cmn(q, a, b, x, s, t) {
|
||||||
|
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
|
||||||
|
}
|
||||||
|
function md5ff(a, b, c, d, x, s, t) {
|
||||||
|
return md5cmn((b & c) | (~b & d), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5gg(a, b, c, d, x, s, t) {
|
||||||
|
return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5hh(a, b, c, d, x, s, t) {
|
||||||
|
return md5cmn(b ^ c ^ d, a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5ii(a, b, c, d, x, s, t) {
|
||||||
|
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
export default md5;
|
||||||
|
|||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
||||||
var _default = exports.default = {
|
|
||||||
randomUUID
|
|
||||||
};
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user