mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-22 22:49:45 +01:00
fix: do not automatically delete empty notes
This commit is contained in:
@@ -87,7 +87,7 @@ test("note should get headline from content containing only lists", () =>
|
|||||||
},
|
},
|
||||||
}).then(async ({ db, id }) => {
|
}).then(async ({ db, id }) => {
|
||||||
let note = db.notes.note(id);
|
let note = db.notes.note(id);
|
||||||
expect(note.headline).toBe("Hello I won't be a headline :(Me too.Gold.");
|
expect(note.headline).toBe("Hello I won't be a headline :(Me too.");
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test("note title should allow trailing space", () =>
|
test("note title should allow trailing space", () =>
|
||||||
@@ -127,21 +127,6 @@ test("update note", () =>
|
|||||||
expect(note.data.favorite).toBe(true);
|
expect(note.data.favorite).toBe(true);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test("updating empty note should delete it", () =>
|
|
||||||
noteTest().then(async ({ db, id }) => {
|
|
||||||
id = await db.notes.add({
|
|
||||||
id,
|
|
||||||
title: "\n",
|
|
||||||
content: {
|
|
||||||
type: TEST_NOTE.content.type,
|
|
||||||
data: "<p><br></p>",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
expect(id).toBeUndefined();
|
|
||||||
let note = db.notes.note(id);
|
|
||||||
expect(note).toBeUndefined();
|
|
||||||
}));
|
|
||||||
|
|
||||||
test("get favorite notes", () =>
|
test("get favorite notes", () =>
|
||||||
noteTest({
|
noteTest({
|
||||||
...TEST_NOTE,
|
...TEST_NOTE,
|
||||||
|
|||||||
@@ -75,14 +75,6 @@ export default class Notes extends Collection {
|
|||||||
note.title = getNoteTitle(note, content);
|
note.title = getNoteTitle(note, content);
|
||||||
note.headline = getNoteHeadline(note, content);
|
note.headline = getNoteHeadline(note, content);
|
||||||
|
|
||||||
if (isNoteEmpty(note, content)) {
|
|
||||||
if (oldNote) {
|
|
||||||
EV.publish(EVENTS.noteRemoved, id);
|
|
||||||
await this.remove(id);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
note.contentId = await this._db.content.add({
|
note.contentId = await this._db.content.add({
|
||||||
noteId: id,
|
noteId: id,
|
||||||
id: note.contentId,
|
id: note.contentId,
|
||||||
@@ -277,12 +269,6 @@ export default class Notes extends Collection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isNoteEmpty(note, content) {
|
|
||||||
const { title, locked } = note;
|
|
||||||
const isTitleEmpty = !title || !title.trim().length;
|
|
||||||
return !locked && isTitleEmpty && content.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getNoteHeadline(note, content) {
|
function getNoteHeadline(note, content) {
|
||||||
if (note.locked) return "";
|
if (note.locked) return "";
|
||||||
return content.toHeadline();
|
return content.toHeadline();
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
import showdown from "showdown";
|
import showdown from "showdown/dist/showdown";
|
||||||
import { decode, DecodingMode, EntityLevel } from "entities";
|
|
||||||
import dataurl from "../utils/dataurl";
|
import dataurl from "../utils/dataurl";
|
||||||
import { parseHTML } from "../utils/html-parser";
|
import { getDummyDocument, parseHTML } from "../utils/html-parser";
|
||||||
|
|
||||||
var converter = new showdown.Converter();
|
var converter = new showdown.Converter();
|
||||||
converter.setFlavor("original");
|
converter.setFlavor("original");
|
||||||
|
|
||||||
const splitter = /\W+/gm;
|
const splitter = /\W+/gm;
|
||||||
|
|
||||||
class Tiny {
|
class Tiny {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.text;
|
this.text;
|
||||||
|
this.document = parseHTML(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
toHTML() {
|
toHTML() {
|
||||||
@@ -19,14 +18,13 @@ class Tiny {
|
|||||||
}
|
}
|
||||||
|
|
||||||
toTXT() {
|
toTXT() {
|
||||||
return decode(
|
return this.document.body
|
||||||
this.data.replace(/<br[^>]*>/gi, "\n").replace(/<[^>]+>/g, ""),
|
? this.document.body.innerText || this.document.body.textContent
|
||||||
{ level: EntityLevel.HTML, mode: DecodingMode.Strict }
|
: this.document.textContent;
|
||||||
).trim();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toMD() {
|
toMD() {
|
||||||
return converter.makeMarkdown(this.data);
|
return converter.makeMarkdown(this.data, getDummyDocument());
|
||||||
}
|
}
|
||||||
|
|
||||||
toTitle() {
|
toTitle() {
|
||||||
@@ -57,8 +55,7 @@ class Tiny {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async insertMedia(getData) {
|
async insertMedia(getData) {
|
||||||
let document = parseHTML(this.data);
|
const attachmentElements = this.document.querySelectorAll("img");
|
||||||
const attachmentElements = document.querySelectorAll("img");
|
|
||||||
for (var i = 0; i < attachmentElements.length; ++i) {
|
for (var i = 0; i < attachmentElements.length; ++i) {
|
||||||
const attachment = attachmentElements[i];
|
const attachment = attachmentElements[i];
|
||||||
switch (attachment.tagName) {
|
switch (attachment.tagName) {
|
||||||
@@ -76,14 +73,12 @@ class Tiny {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return document.outerHTML || document.body.innerHTML;
|
return this.document.outerHTML || this.document.body.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
async extractAttachments(store) {
|
async extractAttachments(store) {
|
||||||
const attachments = [];
|
const attachments = [];
|
||||||
let document = parseHTML(this.data);
|
const attachmentElements = this.document.querySelectorAll("img,span");
|
||||||
|
|
||||||
const attachmentElements = document.querySelectorAll("img,span");
|
|
||||||
|
|
||||||
for (var i = 0; i < attachmentElements.length; ++i) {
|
for (var i = 0; i < attachmentElements.length; ++i) {
|
||||||
const attachment = attachmentElements[i];
|
const attachment = attachmentElements[i];
|
||||||
@@ -134,7 +129,10 @@ class Tiny {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { data: document.outerHTML || document.body.innerHTML, attachments };
|
return {
|
||||||
|
data: this.document.outerHTML || this.document.body.innerHTML,
|
||||||
|
attachments,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export default Tiny;
|
export default Tiny;
|
||||||
@@ -142,13 +140,7 @@ export default Tiny;
|
|||||||
function getHeadlineFromText(text) {
|
function getHeadlineFromText(text) {
|
||||||
for (var i = 0; i < text.length; ++i) {
|
for (var i = 0; i < text.length; ++i) {
|
||||||
const char = text[i];
|
const char = text[i];
|
||||||
const nextChar = text[i + 1];
|
if (char === "\n" || char === "\t" || char === "\r" || char === ".") {
|
||||||
if (
|
|
||||||
char === "\n" ||
|
|
||||||
char === "\t" ||
|
|
||||||
char === "\r" ||
|
|
||||||
(char === "." && nextChar === " ")
|
|
||||||
) {
|
|
||||||
if (char === ".") ++i;
|
if (char === ".") ++i;
|
||||||
return text.substring(0, i);
|
return text.substring(0, i);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ module.exports = {
|
|||||||
// snapshotSerializers: [],
|
// snapshotSerializers: [],
|
||||||
|
|
||||||
// The test environment that will be used for testing
|
// The test environment that will be used for testing
|
||||||
// testEnvironment: "jest-environment-jsdom",
|
testEnvironment: "node",
|
||||||
|
|
||||||
// Options that will be passed to the testEnvironment
|
// Options that will be passed to the testEnvironment
|
||||||
// testEnvironmentOptions: {},
|
// testEnvironmentOptions: {},
|
||||||
|
|||||||
@@ -1,15 +1,6 @@
|
|||||||
var nodeCrypto = require("crypto");
|
var nodeCrypto = require("crypto");
|
||||||
var jsdom = require("jsdom");
|
|
||||||
var dotenv = require("dotenv");
|
var dotenv = require("dotenv");
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
const dom = new jsdom.JSDOM("", {});
|
|
||||||
global.window = dom.window;
|
|
||||||
global.document = dom.window.document;
|
|
||||||
global.crypto = nodeCrypto;
|
global.crypto = nodeCrypto;
|
||||||
|
|
||||||
global.HTMLParser = new dom.window.DOMParser().parseFromString(
|
|
||||||
"<body></body>",
|
|
||||||
"text/html"
|
|
||||||
);
|
|
||||||
|
|||||||
163
packages/core/package-lock.json
generated
163
packages/core/package-lock.json
generated
@@ -1,22 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "notes-core",
|
"name": "notes-core",
|
||||||
"version": "6.11.0",
|
"version": "6.13.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "notes-core",
|
"name": "notes-core",
|
||||||
"version": "6.11.0",
|
"version": "6.13.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@stablelib/blake2s": "^1.0.1",
|
"@stablelib/blake2s": "^1.0.1",
|
||||||
"async-mutex": "^0.3.2",
|
"async-mutex": "^0.3.2",
|
||||||
"dayjs": "^1.10.6",
|
"dayjs": "^1.10.6",
|
||||||
"entities": "^3.0.1",
|
|
||||||
"fast-sort": "^2.0.1",
|
"fast-sort": "^2.0.1",
|
||||||
"no-internet": "^1.5.2",
|
"node-html-parser": "github:thecodrr/node-html-parser",
|
||||||
"node-html-parser": "^5.1.0",
|
|
||||||
"qclone": "^1.0.4",
|
"qclone": "^1.0.4",
|
||||||
"showdown": "https://github.com/thecodrr/showdown",
|
"showdown": "github:thecodrr/showdown",
|
||||||
"spark-md5": "^3.0.1"
|
"spark-md5": "^3.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -36,6 +34,75 @@
|
|||||||
"jsdom": "^16.5.3"
|
"jsdom": "^16.5.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"../node-html-parser": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"extraneous": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"css-select": "^4.1.3",
|
||||||
|
"entities": "^3.0.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/entities": "latest",
|
||||||
|
"@types/he": "latest",
|
||||||
|
"@types/node": "latest",
|
||||||
|
"@typescript-eslint/eslint-plugin": "latest",
|
||||||
|
"@typescript-eslint/eslint-plugin-tslint": "latest",
|
||||||
|
"@typescript-eslint/parser": "latest",
|
||||||
|
"blanket": "latest",
|
||||||
|
"cheerio": "^1.0.0-rc.5",
|
||||||
|
"cross-env": "^7.0.3",
|
||||||
|
"eslint": "^7.32.0",
|
||||||
|
"eslint-config-prettier": "latest",
|
||||||
|
"eslint-plugin-import": "latest",
|
||||||
|
"high5": "^1.0.0",
|
||||||
|
"htmlparser": "^1.7.7",
|
||||||
|
"htmlparser-benchmark": "^1.1.3",
|
||||||
|
"htmlparser2": "^6.0.0",
|
||||||
|
"mocha": "latest",
|
||||||
|
"mocha-each": "^2.0.1",
|
||||||
|
"np": "latest",
|
||||||
|
"parse5": "^6.0.1",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"should": "latest",
|
||||||
|
"spec": "latest",
|
||||||
|
"standard-version": "^9.3.1",
|
||||||
|
"travis-cov": "latest",
|
||||||
|
"ts-node": "^10.2.1",
|
||||||
|
"typescript": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"../showdown": {
|
||||||
|
"version": "2.0.0-alpha1",
|
||||||
|
"extraneous": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"yargs": "14.2.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"showdown": "bin/showdown.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"chai": "^4.3.4",
|
||||||
|
"grunt": "^1.4.1",
|
||||||
|
"grunt-contrib-clean": "^2.0.0",
|
||||||
|
"grunt-contrib-concat": "^2.0.0",
|
||||||
|
"grunt-contrib-jshint": "^3.1.0",
|
||||||
|
"grunt-contrib-uglify": "^5.0.1",
|
||||||
|
"grunt-conventional-changelog": "^6.1.0",
|
||||||
|
"grunt-conventional-github-releaser": "^1.0.0",
|
||||||
|
"grunt-endline": "^0.7.0",
|
||||||
|
"grunt-eslint": "^24.0.0",
|
||||||
|
"grunt-simple-mocha": "^0.4.0",
|
||||||
|
"load-grunt-tasks": "^5.1.0",
|
||||||
|
"performance-now": "^2.1.0",
|
||||||
|
"quiet-grunt": "^0.2.0",
|
||||||
|
"semver": "^7.3.0",
|
||||||
|
"semver-sort": "^0.0.4",
|
||||||
|
"sinon": "^12.0.1",
|
||||||
|
"source-map-support": "^0.5.20"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
"version": "7.8.3",
|
"version": "7.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
|
||||||
@@ -3678,9 +3745,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/domhandler": {
|
"node_modules/domhandler": {
|
||||||
"version": "4.2.2",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
|
||||||
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
|
"integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"domelementtype": "^2.2.0"
|
"domelementtype": "^2.2.0"
|
||||||
},
|
},
|
||||||
@@ -4302,14 +4369,6 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/he": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
|
||||||
"bin": {
|
|
||||||
"he": "bin/he"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/home-or-tmp": {
|
"node_modules/home-or-tmp": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
|
||||||
@@ -6102,14 +6161,6 @@
|
|||||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/no-internet": {
|
|
||||||
"version": "1.5.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/no-internet/-/no-internet-1.5.2.tgz",
|
|
||||||
"integrity": "sha512-4GnJQsc/BCwcOG+8acwAsm9bYVdgh0V5ORQTAnB+7u9hoKdR4WqSqw6Bhjo3DO/tvhad4wbrw4l07/CG6C+wDg==",
|
|
||||||
"dependencies": {
|
|
||||||
"set-interval": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
||||||
@@ -6121,11 +6172,11 @@
|
|||||||
},
|
},
|
||||||
"node_modules/node-html-parser": {
|
"node_modules/node-html-parser": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.1.0.tgz",
|
"resolved": "git+ssh://git@github.com/thecodrr/node-html-parser.git#35d8d7b2965943b11e669e3e53438a681bbbdee2",
|
||||||
"integrity": "sha512-l6C1Gf1o7YuxeMGa17PypEez/rj+ii3q4/NZG37nRmWSLDjHyB0WNrlE4h2UW92D0JSfUSfu+lOvxThttVe7Jw==",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"css-select": "^4.1.3",
|
"css-select": "^4.1.3",
|
||||||
"he": "1.2.0"
|
"entities": "^3.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-int64": {
|
"node_modules/node-int64": {
|
||||||
@@ -7142,11 +7193,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||||
},
|
},
|
||||||
"node_modules/set-interval": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/set-interval/-/set-interval-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-Srlnjq2O84WQxv2DkTyf7S0nRebiNE+uD5nd2Iy4ISOtiZbxglSfup88vegIAYRpCn/ITS1rYmjCPuAhn/hdmg=="
|
|
||||||
},
|
|
||||||
"node_modules/set-value": {
|
"node_modules/set-value": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
||||||
@@ -7191,8 +7237,8 @@
|
|||||||
},
|
},
|
||||||
"node_modules/showdown": {
|
"node_modules/showdown": {
|
||||||
"version": "2.0.0-alpha1",
|
"version": "2.0.0-alpha1",
|
||||||
"resolved": "git+ssh://git@github.com/thecodrr/showdown.git#f34864e9bea3d3ca597c5b034aceb0573a89c3b0",
|
"resolved": "git+ssh://git@github.com/thecodrr/showdown.git#82545b8ff5f318b91a16f08f8a368f9d92eeafee",
|
||||||
"license": "BSD-3-Clause",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"yargs": "14.2.0"
|
"yargs": "14.2.0"
|
||||||
},
|
},
|
||||||
@@ -7219,9 +7265,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/showdown/node_modules/yargs-parser": {
|
"node_modules/showdown/node_modules/yargs-parser": {
|
||||||
"version": "15.0.1",
|
"version": "15.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz",
|
||||||
"integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
|
"integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"camelcase": "^5.0.0",
|
"camelcase": "^5.0.0",
|
||||||
"decamelize": "^1.2.0"
|
"decamelize": "^1.2.0"
|
||||||
@@ -11405,9 +11451,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"domhandler": {
|
"domhandler": {
|
||||||
"version": "4.2.2",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
|
||||||
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
|
"integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"domelementtype": "^2.2.0"
|
"domelementtype": "^2.2.0"
|
||||||
}
|
}
|
||||||
@@ -11884,11 +11930,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"he": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
|
|
||||||
},
|
|
||||||
"home-or-tmp": {
|
"home-or-tmp": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
|
||||||
@@ -13333,14 +13374,6 @@
|
|||||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"no-internet": {
|
|
||||||
"version": "1.5.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/no-internet/-/no-internet-1.5.2.tgz",
|
|
||||||
"integrity": "sha512-4GnJQsc/BCwcOG+8acwAsm9bYVdgh0V5ORQTAnB+7u9hoKdR4WqSqw6Bhjo3DO/tvhad4wbrw4l07/CG6C+wDg==",
|
|
||||||
"requires": {
|
|
||||||
"set-interval": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node-fetch": {
|
"node-fetch": {
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
||||||
@@ -13348,12 +13381,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node-html-parser": {
|
"node-html-parser": {
|
||||||
"version": "5.1.0",
|
"version": "git+ssh://git@github.com/thecodrr/node-html-parser.git#35d8d7b2965943b11e669e3e53438a681bbbdee2",
|
||||||
"resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.1.0.tgz",
|
"from": "node-html-parser@github:thecodrr/node-html-parser",
|
||||||
"integrity": "sha512-l6C1Gf1o7YuxeMGa17PypEez/rj+ii3q4/NZG37nRmWSLDjHyB0WNrlE4h2UW92D0JSfUSfu+lOvxThttVe7Jw==",
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"css-select": "^4.1.3",
|
"css-select": "^4.1.3",
|
||||||
"he": "1.2.0"
|
"entities": "^3.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-int64": {
|
"node-int64": {
|
||||||
@@ -14141,11 +14173,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||||
},
|
},
|
||||||
"set-interval": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/set-interval/-/set-interval-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-Srlnjq2O84WQxv2DkTyf7S0nRebiNE+uD5nd2Iy4ISOtiZbxglSfup88vegIAYRpCn/ITS1rYmjCPuAhn/hdmg=="
|
|
||||||
},
|
|
||||||
"set-value": {
|
"set-value": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
|
||||||
@@ -14180,8 +14207,8 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"showdown": {
|
"showdown": {
|
||||||
"version": "git+ssh://git@github.com/thecodrr/showdown.git#f34864e9bea3d3ca597c5b034aceb0573a89c3b0",
|
"version": "git+ssh://git@github.com/thecodrr/showdown.git#82545b8ff5f318b91a16f08f8a368f9d92eeafee",
|
||||||
"from": "showdown@https://github.com/thecodrr/showdown",
|
"from": "showdown@github:thecodrr/showdown",
|
||||||
"requires": {
|
"requires": {
|
||||||
"yargs": "14.2.0"
|
"yargs": "14.2.0"
|
||||||
},
|
},
|
||||||
@@ -14205,9 +14232,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yargs-parser": {
|
"yargs-parser": {
|
||||||
"version": "15.0.1",
|
"version": "15.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz",
|
||||||
"integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
|
"integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"camelcase": "^5.0.0",
|
"camelcase": "^5.0.0",
|
||||||
"decamelize": "^1.2.0"
|
"decamelize": "^1.2.0"
|
||||||
|
|||||||
@@ -26,12 +26,10 @@
|
|||||||
"@stablelib/blake2s": "^1.0.1",
|
"@stablelib/blake2s": "^1.0.1",
|
||||||
"async-mutex": "^0.3.2",
|
"async-mutex": "^0.3.2",
|
||||||
"dayjs": "^1.10.6",
|
"dayjs": "^1.10.6",
|
||||||
"entities": "^3.0.1",
|
|
||||||
"fast-sort": "^2.0.1",
|
"fast-sort": "^2.0.1",
|
||||||
"no-internet": "^1.5.2",
|
"node-html-parser": "github:thecodrr/node-html-parser",
|
||||||
"node-html-parser": "^5.1.0",
|
|
||||||
"qclone": "^1.0.4",
|
"qclone": "^1.0.4",
|
||||||
"showdown": "https://github.com/thecodrr/showdown",
|
"showdown": "github:thecodrr/showdown",
|
||||||
"spark-md5": "^3.0.1"
|
"spark-md5": "^3.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,3 +4,8 @@ export const parseHTML =
|
|||||||
typeof DOMParser === "undefined"
|
typeof DOMParser === "undefined"
|
||||||
? (input) => parse(input)
|
? (input) => parse(input)
|
||||||
: (input) => new DOMParser().parseFromString(input, "text/html");
|
: (input) => new DOMParser().parseFromString(input, "text/html");
|
||||||
|
|
||||||
|
export function getDummyDocument() {
|
||||||
|
const doc = parseHTML("<div></div>");
|
||||||
|
return typeof DOMParser === "undefined" ? doc : doc.body.firstElementChild;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { hash, SALT_LENGTH, PERSONALIZATION_LENGTH } from "@stablelib/blake2s";
|
import { hash, SALT_LENGTH } from "@stablelib/blake2s";
|
||||||
import SparkMD5 from "spark-md5";
|
import SparkMD5 from "spark-md5";
|
||||||
import { USER_PERSONALIZATION_HASH } from "../common";
|
import { USER_PERSONALIZATION_HASH } from "../common";
|
||||||
import ObjectID from "./object-id";
|
|
||||||
import { randomBytes } from "./random";
|
import { randomBytes } from "./random";
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
|
|||||||
@@ -1,343 +0,0 @@
|
|||||||
// Copied from https://github.com/williamkapke/bson-objectid
|
|
||||||
|
|
||||||
const { randomInt } = require("./random");
|
|
||||||
|
|
||||||
var MACHINE_ID = randomInt();
|
|
||||||
var index = (ObjectID.index = randomInt());
|
|
||||||
var pid =
|
|
||||||
(typeof process === "undefined" || typeof process.pid !== "number"
|
|
||||||
? randomInt()
|
|
||||||
: process.pid) % 0xffff;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if an object is Buffer
|
|
||||||
*
|
|
||||||
* Author: Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
|
||||||
* License: MIT
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
var isBuffer = function (obj) {
|
|
||||||
return !!(
|
|
||||||
obj != null &&
|
|
||||||
obj.constructor &&
|
|
||||||
typeof obj.constructor.isBuffer === "function" &&
|
|
||||||
obj.constructor.isBuffer(obj)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Precomputed hex table enables speedy hex string conversion
|
|
||||||
var hexTable = [];
|
|
||||||
for (var i = 0; i < 256; i++) {
|
|
||||||
hexTable[i] = (i <= 15 ? "0" : "") + i.toString(16);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Regular expression that checks for hex value
|
|
||||||
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
|
|
||||||
|
|
||||||
// Lookup tables
|
|
||||||
var decodeLookup = [];
|
|
||||||
i = 0;
|
|
||||||
while (i < 10) decodeLookup[0x30 + i] = i++;
|
|
||||||
while (i < 16) decodeLookup[0x41 - 10 + i] = decodeLookup[0x61 - 10 + i] = i++;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new immutable ObjectID instance
|
|
||||||
*
|
|
||||||
* @class Represents the BSON ObjectID type
|
|
||||||
* @param {String|Number} id Can be a 24 byte hex string, 12 byte binary string or a Number.
|
|
||||||
* @return {Object} instance of ObjectID.
|
|
||||||
*/
|
|
||||||
function ObjectID(id) {
|
|
||||||
if (!(this instanceof ObjectID)) return new ObjectID(id);
|
|
||||||
if (id && (id instanceof ObjectID || id._bsontype === "ObjectID")) return id;
|
|
||||||
|
|
||||||
this._bsontype = "ObjectID";
|
|
||||||
|
|
||||||
// The most common usecase (blank id, new objectId instance)
|
|
||||||
if (id == null || typeof id === "number") {
|
|
||||||
// Generate a new id
|
|
||||||
this.id = this.generate(id);
|
|
||||||
// Return the object
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the passed in id is valid
|
|
||||||
var valid = ObjectID.isValid(id);
|
|
||||||
|
|
||||||
// Throw an error if it's not a valid setup
|
|
||||||
if (!valid && id != null) {
|
|
||||||
throw new Error(
|
|
||||||
"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"
|
|
||||||
);
|
|
||||||
} else if (valid && typeof id === "string" && id.length === 24) {
|
|
||||||
return ObjectID.createFromHexString(id);
|
|
||||||
} else if (id != null && id.length === 12) {
|
|
||||||
// assume 12 byte string
|
|
||||||
this.id = id;
|
|
||||||
} else if (id != null && typeof id.toHexString === "function") {
|
|
||||||
// Duck-typing to support ObjectId from different npm packages
|
|
||||||
return id;
|
|
||||||
} else {
|
|
||||||
throw new Error(
|
|
||||||
"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
module.exports = ObjectID;
|
|
||||||
ObjectID.default = ObjectID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an ObjectID from a second based number, with the rest of the ObjectID zeroed out. Used for comparisons or sorting the ObjectID.
|
|
||||||
*
|
|
||||||
* @param {Number} time an integer number representing a number of seconds.
|
|
||||||
* @return {ObjectID} return the created ObjectID
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
ObjectID.createFromTime = function (time) {
|
|
||||||
time = parseInt(time, 10) % 0xffffffff;
|
|
||||||
return new ObjectID(hex(8, time) + "0000000000000000");
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an ObjectID from a hex string representation of an ObjectID.
|
|
||||||
*
|
|
||||||
* @param {String} hexString create a ObjectID from a passed in 24 byte hexstring.
|
|
||||||
* @return {ObjectID} return the created ObjectID
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
ObjectID.createFromHexString = function (hexString) {
|
|
||||||
// Throw an error if it's not a valid setup
|
|
||||||
if (
|
|
||||||
typeof hexString === "undefined" ||
|
|
||||||
(hexString != null && hexString.length !== 24)
|
|
||||||
) {
|
|
||||||
throw new Error(
|
|
||||||
"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate lengths
|
|
||||||
var data = "";
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
while (i < 24) {
|
|
||||||
data += String.fromCharCode(
|
|
||||||
(decodeLookup[hexString.charCodeAt(i++)] << 4) |
|
|
||||||
decodeLookup[hexString.charCodeAt(i++)]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ObjectID(data);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a value is a valid bson ObjectId
|
|
||||||
*
|
|
||||||
* @param {String} objectid Can be a 24 byte hex string or an instance of ObjectID.
|
|
||||||
* @return {Boolean} return true if the value is a valid bson ObjectID, return false otherwise.
|
|
||||||
* @api public
|
|
||||||
*
|
|
||||||
* THE NATIVE DOCUMENTATION ISN'T CLEAR ON THIS GUY!
|
|
||||||
* http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html#objectid-isvalid
|
|
||||||
*/
|
|
||||||
ObjectID.isValid = function (id) {
|
|
||||||
if (id == null) return false;
|
|
||||||
|
|
||||||
if (typeof id === "number") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof id === "string") {
|
|
||||||
return id.length === 12 || (id.length === 24 && checkForHexRegExp.test(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (id instanceof ObjectID) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isBuffer(id)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Duck-Typing detection of ObjectId like objects
|
|
||||||
if (
|
|
||||||
typeof id.toHexString === "function" &&
|
|
||||||
(id.id instanceof _Buffer || typeof id.id === "string")
|
|
||||||
) {
|
|
||||||
return (
|
|
||||||
id.id.length === 12 ||
|
|
||||||
(id.id.length === 24 && checkForHexRegExp.test(id.id))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
ObjectID.prototype = {
|
|
||||||
constructor: ObjectID,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the ObjectID id as a 24 byte hex string representation
|
|
||||||
*
|
|
||||||
* @return {String} return the 24 byte hex string representation.
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
toHexString: function () {
|
|
||||||
if (!this.id || !this.id.length) {
|
|
||||||
throw new Error(
|
|
||||||
"invalid ObjectId, ObjectId.id must be either a string or a Buffer, but is [" +
|
|
||||||
JSON.stringify(this.id) +
|
|
||||||
"]"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.id.length === 24) {
|
|
||||||
return this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isBuffer(this.id)) {
|
|
||||||
return this.id.toString("hex");
|
|
||||||
}
|
|
||||||
|
|
||||||
var hexString = "";
|
|
||||||
for (var i = 0; i < this.id.length; i++) {
|
|
||||||
hexString += hexTable[this.id.charCodeAt(i)];
|
|
||||||
}
|
|
||||||
|
|
||||||
return hexString;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares the equality of this ObjectID with `otherID`.
|
|
||||||
*
|
|
||||||
* @param {Object} otherId ObjectID instance to compare against.
|
|
||||||
* @return {Boolean} the result of comparing two ObjectID's
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
equals: function (otherId) {
|
|
||||||
if (otherId instanceof ObjectID) {
|
|
||||||
return this.toString() === otherId.toString();
|
|
||||||
} else if (
|
|
||||||
typeof otherId === "string" &&
|
|
||||||
ObjectID.isValid(otherId) &&
|
|
||||||
otherId.length === 12 &&
|
|
||||||
isBuffer(this.id)
|
|
||||||
) {
|
|
||||||
return otherId === this.id.toString("binary");
|
|
||||||
} else if (
|
|
||||||
typeof otherId === "string" &&
|
|
||||||
ObjectID.isValid(otherId) &&
|
|
||||||
otherId.length === 24
|
|
||||||
) {
|
|
||||||
return otherId.toLowerCase() === this.toHexString();
|
|
||||||
} else if (
|
|
||||||
typeof otherId === "string" &&
|
|
||||||
ObjectID.isValid(otherId) &&
|
|
||||||
otherId.length === 12
|
|
||||||
) {
|
|
||||||
return otherId === this.id;
|
|
||||||
} else if (
|
|
||||||
otherId != null &&
|
|
||||||
(otherId instanceof ObjectID || otherId.toHexString)
|
|
||||||
) {
|
|
||||||
return otherId.toHexString() === this.toHexString();
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the generation date (accurate up to the second) that this ID was generated.
|
|
||||||
*
|
|
||||||
* @return {Date} the generation date
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
getTimestamp: function () {
|
|
||||||
var timestamp = new Date();
|
|
||||||
var time;
|
|
||||||
if (isBuffer(this.id)) {
|
|
||||||
time =
|
|
||||||
this.id[3] |
|
|
||||||
(this.id[2] << 8) |
|
|
||||||
(this.id[1] << 16) |
|
|
||||||
(this.id[0] << 24);
|
|
||||||
} else {
|
|
||||||
time =
|
|
||||||
this.id.charCodeAt(3) |
|
|
||||||
(this.id.charCodeAt(2) << 8) |
|
|
||||||
(this.id.charCodeAt(1) << 16) |
|
|
||||||
(this.id.charCodeAt(0) << 24);
|
|
||||||
}
|
|
||||||
timestamp.setTime(Math.floor(time) * 1000);
|
|
||||||
return timestamp;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a 12 byte id buffer used in ObjectID's
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {number} [time] optional parameter allowing to pass in a second based timestamp.
|
|
||||||
* @return {string} return the 12 byte id buffer string.
|
|
||||||
*/
|
|
||||||
generate: function (time) {
|
|
||||||
if ("number" !== typeof time) {
|
|
||||||
time = ~~(Date.now() / 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
//keep it in the ring!
|
|
||||||
time = parseInt(time, 10) % 0xffffffff;
|
|
||||||
|
|
||||||
var inc = next();
|
|
||||||
|
|
||||||
return String.fromCharCode(
|
|
||||||
(time >> 24) & 0xff,
|
|
||||||
(time >> 16) & 0xff,
|
|
||||||
(time >> 8) & 0xff,
|
|
||||||
time & 0xff,
|
|
||||||
(MACHINE_ID >> 16) & 0xff,
|
|
||||||
(MACHINE_ID >> 8) & 0xff,
|
|
||||||
MACHINE_ID & 0xff,
|
|
||||||
(pid >> 8) & 0xff,
|
|
||||||
pid & 0xff,
|
|
||||||
(inc >> 16) & 0xff,
|
|
||||||
(inc >> 8) & 0xff,
|
|
||||||
inc & 0xff
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
function next() {
|
|
||||||
return (index = (index + 1) % 0xffffff);
|
|
||||||
}
|
|
||||||
|
|
||||||
function hex(length, n) {
|
|
||||||
n = n.toString(16);
|
|
||||||
return n.length === length ? n : "00000000".substring(n.length, length) + n;
|
|
||||||
}
|
|
||||||
|
|
||||||
function buffer(str) {
|
|
||||||
var i = 0,
|
|
||||||
out = [];
|
|
||||||
|
|
||||||
if (str.length === 24)
|
|
||||||
for (; i < 24; out.push(parseInt(str[i] + str[i + 1], 16)), i += 2);
|
|
||||||
else if (str.length === 12) for (; i < 12; out.push(str.charCodeAt(i)), i++);
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
var inspect =
|
|
||||||
(Symbol && Symbol.for && Symbol.for("nodejs.util.inspect.custom")) ||
|
|
||||||
"inspect";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts to a string representation of this Id.
|
|
||||||
*
|
|
||||||
* @return {String} return the 24 byte hex string representation.
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
ObjectID.prototype[inspect] = function () {
|
|
||||||
return "ObjectID(" + this + ")";
|
|
||||||
};
|
|
||||||
ObjectID.prototype.toJSON = ObjectID.prototype.toHexString;
|
|
||||||
ObjectID.prototype.toString = ObjectID.prototype.toHexString;
|
|
||||||
Reference in New Issue
Block a user