mirror of
https://github.com/cupcakearmy/ora.git
synced 2025-01-02 21:36:27 +00:00
move to dexie es nedb does not support multiple isntances
This commit is contained in:
parent
56cd2a3e7c
commit
3f77bcf1e0
@ -13,10 +13,9 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"d3": "^6.1.1",
|
"d3": "^6.1.1",
|
||||||
"dayjs": "^1.8.36",
|
"dayjs": "^1.8.36",
|
||||||
|
"dexie": "^3.0.2",
|
||||||
"faker": "^5.1.0",
|
"faker": "^5.1.0",
|
||||||
"lodash": "^4.17.20",
|
"lodash": "^4.17.20",
|
||||||
"nedb": "^1.8.0",
|
|
||||||
"nedb-promises": "^4.0.4",
|
|
||||||
"spectre.css": "^0.5.9",
|
"spectre.css": "^0.5.9",
|
||||||
"svelte-spa-router": "^2.2.0",
|
"svelte-spa-router": "^2.2.0",
|
||||||
"tailwindcss": "^1.8.10",
|
"tailwindcss": "^1.8.10",
|
||||||
|
@ -39,7 +39,6 @@ setInterval(() => {
|
|||||||
getAllTabs()
|
getAllTabs()
|
||||||
}, frequency)
|
}, frequency)
|
||||||
|
|
||||||
browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
|
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||||
// await Limits.
|
|
||||||
return getUsageForHost(message).then((percentages) => percentagesToBool(percentages))
|
return getUsageForHost(message).then((percentages) => percentagesToBool(percentages))
|
||||||
})
|
})
|
||||||
|
@ -34,7 +34,6 @@ function init() {
|
|||||||
|
|
||||||
async function check() {
|
async function check() {
|
||||||
if (window.document.hidden) return
|
if (window.document.hidden) return
|
||||||
console.log('Checking')
|
|
||||||
const isBlocked = await browser.runtime.sendMessage(window.location.host)
|
const isBlocked = await browser.runtime.sendMessage(window.location.host)
|
||||||
wrapper.style.display = isBlocked ? 'initial' : 'none'
|
wrapper.style.display = isBlocked ? 'initial' : 'none'
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
import day from 'dayjs'
|
import day from 'dayjs'
|
||||||
import { range, random } from 'lodash'
|
import { range, random } from 'lodash'
|
||||||
|
|
||||||
import { insertLog, normalizeTimestamp, clear as clearDB } from '../../shared/db'
|
import { insertLog, normalizeTimestamp, DB } from '../../shared/db'
|
||||||
|
|
||||||
let loading = false
|
let loading = false
|
||||||
|
|
||||||
@ -29,7 +29,8 @@
|
|||||||
async function clear() {
|
async function clear() {
|
||||||
try {
|
try {
|
||||||
loading = true
|
loading = true
|
||||||
await clearDB()
|
await DB.limits.clear()
|
||||||
|
await DB.logs.clear()
|
||||||
} finally {
|
} finally {
|
||||||
loading = false
|
loading = false
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { createEventDispatcher } from 'svelte'
|
import { createEventDispatcher } from 'svelte'
|
||||||
import { cloneDeep } from 'lodash'
|
import { cloneDeep } from 'lodash'
|
||||||
|
|
||||||
import { Limits } from '../../shared/db'
|
import { DB } from '../../shared/db'
|
||||||
|
|
||||||
const dispatch = createEventDispatcher()
|
const dispatch = createEventDispatcher()
|
||||||
const init = { limit: ['1', 'h'], every: [1, 'd'] }
|
const init = { limit: ['1', 'h'], every: [1, 'd'] }
|
||||||
@ -23,8 +23,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function save() {
|
async function save() {
|
||||||
const { _id, ...rest } = limit
|
await DB.limits.put(limit)
|
||||||
await Limits.update({ _id }, rest, { upsert: true })
|
|
||||||
dispatch('update')
|
dispatch('update')
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
@ -41,7 +40,8 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
{#if limit}
|
{#if limit}
|
||||||
<label class="form-label">
|
<label class="form-label">
|
||||||
Host <input type="text" class="form-input" placeholder="google.com" bind:value={limit.host} />
|
Host
|
||||||
|
<input type="text" class="form-input" placeholder="google.com" bind:value={limit.host} />
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div class="form-label">Rules</div>
|
<div class="form-label">Rules</div>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import RulesEditor from '../components/RulesEditor.svelte'
|
import RulesEditor from '../components/RulesEditor.svelte'
|
||||||
import Rules from '../components/Rules.svelte'
|
import Rules from '../components/Rules.svelte'
|
||||||
|
|
||||||
import { Limits } from '../../shared/db.js'
|
import { DB } from '../../shared/db.js'
|
||||||
import { longPress } from '../../shared/lib'
|
import { longPress } from '../../shared/lib'
|
||||||
|
|
||||||
let limits = null
|
let limits = null
|
||||||
@ -15,15 +15,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function edit(id) {
|
function edit(id) {
|
||||||
limit = limits.find((limit) => limit._id === id)
|
limit = limits.find((limit) => limit.id === id)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function load() {
|
async function load() {
|
||||||
limits = await Limits.find()
|
limits = await DB.limits.toArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
async function del(id) {
|
async function del(id) {
|
||||||
await Limits.remove({ _id: id })
|
await DB.limits.delete(id)
|
||||||
await load()
|
await load()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<th>Rules</th>
|
<th>Rules</th>
|
||||||
<th class="text-right w-32">Actions</th>
|
<th class="text-right w-32">Actions</th>
|
||||||
</tr>
|
</tr>
|
||||||
{#each limits as { host, rules, _id }}
|
{#each limits as { host, rules, id }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{host}</td>
|
<td>{host}</td>
|
||||||
<td>
|
<td>
|
||||||
@ -58,8 +58,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn btn-sm btn-primary" on:click={() => edit(_id)}>Edit</button>
|
<button class="btn btn-sm btn-primary" on:click={() => edit(id)}>Edit</button>
|
||||||
<button class="btn btn-sm btn-error tooltip" data-tooltip="Hold to delete" use:longPress={() => del(_id)}>
|
<button class="btn btn-sm btn-error tooltip" data-tooltip="Hold to delete" use:longPress={() => del(id)}>
|
||||||
Delete
|
Delete
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,25 +1,17 @@
|
|||||||
import NeDB from 'nedb-promises'
|
|
||||||
import dj from 'dayjs'
|
import dj from 'dayjs'
|
||||||
|
import Dexie from 'dexie'
|
||||||
import RelativeTime from 'dayjs/plugin/relativeTime'
|
import RelativeTime from 'dayjs/plugin/relativeTime'
|
||||||
import Duration from 'dayjs/plugin/duration'
|
import Duration from 'dayjs/plugin/duration'
|
||||||
|
|
||||||
dj.extend(Duration)
|
dj.extend(Duration)
|
||||||
dj.extend(RelativeTime)
|
dj.extend(RelativeTime)
|
||||||
|
|
||||||
export const Logs = NeDB.create({
|
export const DB = new Dexie('ora')
|
||||||
filename: 'logs.db',
|
DB.version(2).stores({
|
||||||
autoload: true,
|
logs: `++id, host, timestamp`,
|
||||||
|
limits: `++id, host`,
|
||||||
})
|
})
|
||||||
|
|
||||||
export const Limits = NeDB.create({
|
|
||||||
filename: 'limits.db',
|
|
||||||
autoload: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
export function clear() {
|
|
||||||
return Promise.all([Logs.remove({}, { multi: true }), Limits.remove({}, { multi: true })])
|
|
||||||
}
|
|
||||||
|
|
||||||
export function normalizeTimestamp(timestamp) {
|
export function normalizeTimestamp(timestamp) {
|
||||||
// Normalize every dato to 15 minutes
|
// Normalize every dato to 15 minutes
|
||||||
const t = dj(timestamp)
|
const t = dj(timestamp)
|
||||||
@ -32,12 +24,8 @@ export function normalizeTimestamp(timestamp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function insertLog({ timestamp, host, seconds }) {
|
export async function insertLog({ timestamp, host, seconds }) {
|
||||||
Logs.update(
|
const saved = await DB.logs.where({ host, timestamp }).first()
|
||||||
{
|
const data = Object.assign({ host, timestamp, seconds: 0 }, saved)
|
||||||
host,
|
data.seconds += seconds
|
||||||
timestamp,
|
await DB.logs.put(data)
|
||||||
},
|
|
||||||
{ $inc: { seconds } },
|
|
||||||
{ upsert: true }
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { groupBy, orderBy, sum } from 'lodash'
|
import { groupBy, orderBy, sum } from 'lodash'
|
||||||
import dj from 'dayjs'
|
import dj from 'dayjs'
|
||||||
|
|
||||||
import { Limits, Logs } from './db.js'
|
import { DB } from './db.js'
|
||||||
|
|
||||||
export async function data({ start, end }) {
|
export async function data({ start, end }) {
|
||||||
const logs = await getLogsBetweenDates({ start, end })
|
const logs = await getLogsBetweenDates({ start, end })
|
||||||
@ -9,11 +9,9 @@ export async function data({ start, end }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getLogsBetweenDates({ start, end, host }) {
|
export async function getLogsBetweenDates({ start, end, host }) {
|
||||||
const where = {
|
let query = DB.logs.where('timestamp').inAnyRange([[start, end]])
|
||||||
$and: [{ timestamp: { $gt: start } }, { timestamp: { $lt: end } }],
|
if (host) query = query.filter((x) => x.host === host)
|
||||||
}
|
return await query.toArray()
|
||||||
if (host) where.host = host
|
|
||||||
return await Logs.find(where)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function countInGroup(grouped) {
|
export function countInGroup(grouped) {
|
||||||
@ -53,12 +51,11 @@ export function getUsageForRules(host, rules) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getUsageForHost(host) {
|
export async function getUsageForHost(host) {
|
||||||
const limit = await Limits.findOne({ host })
|
const limit = await DB.limits.where({ host }).first()
|
||||||
return await Promise.all(getUsageForRules(host, limit.rules))
|
return await Promise.all(getUsageForRules(host, limit.rules))
|
||||||
}
|
}
|
||||||
|
|
||||||
export function percentagesToBool(percentages) {
|
export function percentagesToBool(percentages) {
|
||||||
const blocked = percentages.map((p) => p >= 100).includes(true)
|
const blocked = percentages.map((p) => p >= 100).includes(true)
|
||||||
console.log(percentages, blocked)
|
|
||||||
return blocked
|
return blocked
|
||||||
}
|
}
|
||||||
|
64
yarn.lock
64
yarn.lock
@ -1392,11 +1392,6 @@ async-limiter@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
|
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
|
||||||
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
|
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
|
||||||
|
|
||||||
async@0.2.10, async@~0.2.9:
|
|
||||||
version "0.2.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
|
|
||||||
integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
|
|
||||||
|
|
||||||
async@^1.5.2:
|
async@^1.5.2:
|
||||||
version "1.5.2"
|
version "1.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
|
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
|
||||||
@ -1409,6 +1404,11 @@ async@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.17.14"
|
lodash "^4.17.14"
|
||||||
|
|
||||||
|
async@~0.2.9:
|
||||||
|
version "0.2.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
|
||||||
|
integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
|
||||||
|
|
||||||
async@~2.5.0:
|
async@~2.5.0:
|
||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
|
resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
|
||||||
@ -1538,13 +1538,6 @@ binary-extensions@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
|
||||||
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
|
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
|
||||||
|
|
||||||
binary-search-tree@0.2.5:
|
|
||||||
version "0.2.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/binary-search-tree/-/binary-search-tree-0.2.5.tgz#7dbb3b210fdca082450dad2334c304af39bdc784"
|
|
||||||
integrity sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=
|
|
||||||
dependencies:
|
|
||||||
underscore "~1.4.4"
|
|
||||||
|
|
||||||
bindings@^1.5.0:
|
bindings@^1.5.0:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
|
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
|
||||||
@ -2950,6 +2943,11 @@ detective@^5.2.0:
|
|||||||
defined "^1.0.0"
|
defined "^1.0.0"
|
||||||
minimist "^1.1.1"
|
minimist "^1.1.1"
|
||||||
|
|
||||||
|
dexie@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.0.2.tgz#4b979904d739e0530b68352005f175a82633a075"
|
||||||
|
integrity sha512-go4FnIoAhcUiCdxutfIZRxnSaSyDgfEq+GH7N0I8nTCJbC2FmeBj+0FrETa3ln5ix+VQMOPsFeYHlgE/8SZWwQ==
|
||||||
|
|
||||||
diffie-hellman@^5.0.0:
|
diffie-hellman@^5.0.0:
|
||||||
version "5.0.3"
|
version "5.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
|
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
|
||||||
@ -4137,11 +4135,6 @@ ignore@^4.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||||
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
|
||||||
|
|
||||||
immediate@~3.0.5:
|
|
||||||
version "3.0.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
|
|
||||||
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
|
|
||||||
|
|
||||||
import-fresh@3.2.1, import-fresh@^3.0.0:
|
import-fresh@3.2.1, import-fresh@^3.0.0:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
|
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
|
||||||
@ -4839,13 +4832,6 @@ levn@~0.3.0:
|
|||||||
prelude-ls "~1.1.2"
|
prelude-ls "~1.1.2"
|
||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
|
|
||||||
lie@3.1.1:
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
|
|
||||||
integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
|
|
||||||
dependencies:
|
|
||||||
immediate "~3.0.5"
|
|
||||||
|
|
||||||
lighthouse-logger@^1.0.0:
|
lighthouse-logger@^1.0.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz#b76d56935e9c137e86a04741f6bb9b2776e886ca"
|
resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz#b76d56935e9c137e86a04741f6bb9b2776e886ca"
|
||||||
@ -4859,13 +4845,6 @@ lines-and-columns@^1.1.6:
|
|||||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
||||||
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
|
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
|
||||||
|
|
||||||
localforage@^1.3.0:
|
|
||||||
version "1.9.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1"
|
|
||||||
integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==
|
|
||||||
dependencies:
|
|
||||||
lie "3.1.1"
|
|
||||||
|
|
||||||
locate-path@^5.0.0:
|
locate-path@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||||
@ -5239,24 +5218,6 @@ ncp@~2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
|
resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
|
||||||
integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
|
integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
|
||||||
|
|
||||||
nedb-promises@^4.0.4:
|
|
||||||
version "4.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/nedb-promises/-/nedb-promises-4.0.4.tgz#51aa3f43ae98269c9c9d512288ff67de890b7f7f"
|
|
||||||
integrity sha512-+z5kzrNOW0rDA1FiCfAtPGR7ZW3mnaOrYZytGAT0TbL6EqoEJUCxAuu9VME4+B1yZNG1gBx61F0c0jcacq1EsQ==
|
|
||||||
dependencies:
|
|
||||||
nedb "^1.8.0"
|
|
||||||
|
|
||||||
nedb@^1.8.0:
|
|
||||||
version "1.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/nedb/-/nedb-1.8.0.tgz#0e3502cd82c004d5355a43c9e55577bd7bd91d88"
|
|
||||||
integrity sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=
|
|
||||||
dependencies:
|
|
||||||
async "0.2.10"
|
|
||||||
binary-search-tree "0.2.5"
|
|
||||||
localforage "^1.3.0"
|
|
||||||
mkdirp "~0.5.1"
|
|
||||||
underscore "~1.4.4"
|
|
||||||
|
|
||||||
neo-async@^2.5.0:
|
neo-async@^2.5.0:
|
||||||
version "2.6.2"
|
version "2.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
@ -7663,11 +7624,6 @@ uncss@^0.17.3:
|
|||||||
postcss-selector-parser "6.0.2"
|
postcss-selector-parser "6.0.2"
|
||||||
request "^2.88.0"
|
request "^2.88.0"
|
||||||
|
|
||||||
underscore@~1.4.4:
|
|
||||||
version "1.4.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
|
|
||||||
integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ=
|
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@^1.0.4:
|
unicode-canonical-property-names-ecmascript@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
||||||
|
Loading…
Reference in New Issue
Block a user