This commit is contained in:
Jean Ouina 2020-05-31 20:19:20 +02:00
parent abdc9efa15
commit 8f6664add2
11 changed files with 114 additions and 351 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -418,14 +418,33 @@ function applyBadges(id, user, chat){
distant.getBadges(user.id) distant.getBadges(user.id)
.then(badges => { .then(badges => {
badges.forEach(badge => { badges.forEach(badge => {
const props = {size: "16px", className: "bd-logo"} const props = {
svg: {
size: "16px",
className: "bd-logo",
width: "16px",
}
}
badge.scopes.forEach(scope => { badge.scopes.forEach(scope => {
// TODO: implement scope for badges (user, channel, etc) if(scope === "user"){// require user
props.user = user
}
}) })
if(!badge.href){
props.Anchor = Anchor
props.href = {
className: chat ? "bd-chat-badge" : "bd-member-badge",
title: badge.name,
target: "_blank"
}
}
const element = BDV2.React.createElement(TooltipWrap, {color: "black", side: "top", text: badge.name}, const element = BDV2.React.createElement(TooltipWrap, {color: "black", side: "top", text: badge.name},
BDV2.React.createElement(Anchor, {className: chat ? "bd-chat-badge" : "bd-member-badge", href: badge.href, title: badge.name, target: "_blank"}, badge.href ? BDV2.react.createElement(Anchor, {
BDV2.React.createElement(badge.component, props) href: badge.href,
) className: chat ? "bd-chat-badge" : "bd-member-badge",
title: badge.name,
target: "_blank"
}, BDV2.React.createElement(badge.component, props)) : BDV2.React.createElement(badge.component, props)
) )
const div2 = document.createElement("div") const div2 = document.createElement("div")
BDV2.reactDom.render(element, div2) BDV2.reactDom.render(element, div2)

View File

@ -1,4 +1,6 @@
import BugHunterBadge from "../svg/bug_hunter" import BugHunterBadge from "../svg/bug_hunter"
import LightcordUserBadge from "../svg/LightcordUser";
import nodeFetch from "node-fetch"
export function uuidv4() { // Generate UUID (No crypto rng) export function uuidv4() { // Generate UUID (No crypto rng)
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
@ -8,6 +10,7 @@ export function uuidv4() { // Generate UUID (No crypto rng)
} }
const awaitingBadgesPromises = {} const awaitingBadgesPromises = {}
let badgesToFetch = []
export default new class DistantServer { export default new class DistantServer {
constructor(){ constructor(){
@ -63,14 +66,30 @@ export default new class DistantServer {
if(badge.defaultUsers.includes(user))badges.push(badge) if(badge.defaultUsers.includes(user))badges.push(badge)
} }
const fetchedBadges = await new Promise((resolve) => { const fetchedBadges = await new Promise((resolve) => {
handleRequest(Routes.badges(user), "GET") badgesToFetch.push([user, resolve])
.then(async res => { setImmediate(() => {
if(res.status !== 200){// Couldn't fetch badges: server error let users = badgesToFetch
return resolve([]) // no badge fetched if(users.length === 0)return
} badgesToFetch = []
return resolve(await res.json()) handleRequest(Routes.badges, "POST", JSON.stringify(users.map(e => e[0])))
}).catch(() => {// Couldn't fetch badges: error .then(async res => {
return resolve([]) // no badge fetched if(res.status !== 200){// Couldn't fetch badges: server error
users.forEach(data => {
data[1]([])// resolve no badge fetched
})
}
const responseBody = await res.json()
console.log(responseBody)
for(let user of responseBody){
let promise = users.find(promise => promise[0] === user.user_id)
promise[1](user.badges)
}
}).catch((err) => {// Couldn't fetch badges: error
console.error(err)
users.forEach(data => {
data[1]([])// resolve no badge fetched
})
})
}) })
}) })
for(let badge of fetchedBadges){ for(let badge of fetchedBadges){
@ -91,13 +110,17 @@ export default new class DistantServer {
} }
} }
const handleRequest = function(route, method){ const handleRequest = function(route, method, data){
return fetch(`${Constants.SERVER_URL}/api/v1${route}`, { console.log(`Sending request on ${route} with method ${method} and body`, data)
return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, {
method, method,
headers: { headers: {
"CLIENT": "Lightcord", "CLIENT": "Lightcord",
"Authorization": window.Lightcord.Api.Authorization || "None::Anonymous" "Authorization": window.Lightcord.Api.Authorization || "None::Anonymous"
} },
...(data ? {
body: data
} : {})
}) })
} }
@ -107,20 +130,15 @@ export const Constants = {
{ {
name: "Lightcord User", name: "Lightcord User",
id: "01cfa7b0-7cdb-4b0e-8258-9c6a78235c93", id: "01cfa7b0-7cdb-4b0e-8258-9c6a78235c93",
defaultUsers: [ defaultUsers: [],
"696481194443014174"
],
scopes: [ scopes: [
"user" "user"
], ],
component: BugHunterBadge, component: LightcordUserBadge
href: "https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"
}, { }, {
name: "Lightcord Bug Hunter", name: "Lightcord Bug Hunter",
id: "f04698f5-816b-41e3-bd01-92291193d7a5", id: "f04698f5-816b-41e3-bd01-92291193d7a5",
defaultUsers: [ defaultUsers: [],
"696481194443014174"
],
scopes: [], scopes: [],
component: BugHunterBadge, component: BugHunterBadge,
href: "https://github.com/lightcord/lightcord/wiki/badges/bug_hunter" href: "https://github.com/lightcord/lightcord/wiki/badges/bug_hunter"
@ -129,6 +147,6 @@ export const Constants = {
} }
export const Routes = { export const Routes = {
badges: user => `/${user}/badges`, badges: `/users/badges`,
delete: `/delete` delete: `/delete`
} }

View File

@ -0,0 +1,26 @@
import BDV2 from "../modules/v2"
let profilModule = BDModules.get(e => e.default && e.default.open && e.default.fetchMutualFriends)[0]
export default class LightcordUserBadge extends React.Component {
render(){
const props = this.props
delete props.href.target
console.log(props)
return (
<props.Anchor href={"/users/"+props.user.id} {...props.href} onClick={(ev) => {
ev.preventDefault()
if(!profilModule)profilModule = BDModules.get(e => e.default && e.default.open && e.default.fetchMutualFriends)[0]
profilModule.default.open(props.user.id)
}}>
<svg viewBox="0 0 31.3 29.5" {...props.svg} height="100%">
<path d="M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1" fill="rgba(227,6,19,.6)" />
<path d="M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z" fill="#e30613" />
</svg>
</props.Anchor>
)
}
}

View File

@ -1,8 +1,9 @@
export default class BugHunterBadge extends React.Component { export default class BugHunterBadge extends React.Component {
render(){ render(){
const props = this.props const props = this.props
return ( return (
<svg viewBox="0 0 31.3 29.5" {...props} height="100%" width={props.size}> <svg viewBox="0 0 31.3 29.5" {...props.svg} height="100%">
<path d="M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1" fill="rgba(227,6,19,.6)" /> <path d="M22.8 1s12 8.2 7.4 19.7S16.6 29 20 25.6s-4-5.6-8.7-10L22.8 1" fill="rgba(227,6,19,.6)" />
<path d="M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z" fill="#e30613" /> <path d="M22.1 12.3c-2.5 3.2-6.1 4.8-8.9 4.3L3.6 28.8c-.7.9-1.9 1-2.8.3-.9-.7-1-1.9-.4-2.8L10 14.1c-1.3-2.5-.6-6.4 2-9.7 3.2-4 8-5.5 10.8-3.4s2.4 7.2-.7 11.3z" fill="#e30613" />
</svg> </svg>

View File

@ -50,12 +50,14 @@ async function privateInit(){
}catch(e){ }catch(e){
const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].map(c => !!e[c]).includes(false))[0] const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].map(c => !!e[c]).includes(false))[0]
window.React = React window.React = React
require.cache["react"] = React
} }
try{ try{
window.ReactDOM = require("react-dom") window.ReactDOM = require("react-dom")
}catch(e){ }catch(e){
const ReactDOM = ModuleLoader.get(e => e.findDOMNode)[0] const ReactDOM = ModuleLoader.get(e => e.findDOMNode)[0]
window.ReactDOM = ReactDOM window.ReactDOM = ReactDOM
require.cache["react-dom"] = ReactDOM
} }
let original = ModuleLoader.get((e) => e.createSound)[0].createSound let original = ModuleLoader.get((e) => e.createSound)[0].createSound

@ -1 +0,0 @@
Subproject commit 1ff160b257662689a0abc76731ed643bf69fb3cf

View File

@ -1,157 +1,5 @@
{ {
"files": [ "files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\rimraf",
"node_modules\\any-promise\\.jshintrc",
"node_modules\\any-promise\\.npmignore",
"node_modules\\any-promise\\implementation.js",
"node_modules\\any-promise\\index.js",
"node_modules\\any-promise\\LICENSE",
"node_modules\\any-promise\\loader.js",
"node_modules\\any-promise\\optional.js",
"node_modules\\any-promise\\package.json",
"node_modules\\any-promise\\README.md",
"node_modules\\any-promise\\register-shim.js",
"node_modules\\any-promise\\register.js",
"node_modules\\any-promise\\register\\bluebird.js",
"node_modules\\any-promise\\register\\es6-promise.js",
"node_modules\\any-promise\\register\\lie.js",
"node_modules\\any-promise\\register\\native-promise-only.js",
"node_modules\\any-promise\\register\\pinkie.js",
"node_modules\\any-promise\\register\\promise.js",
"node_modules\\any-promise\\register\\q.js",
"node_modules\\any-promise\\register\\rsvp.js",
"node_modules\\any-promise\\register\\vow.js",
"node_modules\\any-promise\\register\\when.js",
"node_modules\\balanced-match\\.npmignore",
"node_modules\\balanced-match\\index.js",
"node_modules\\balanced-match\\LICENSE.md",
"node_modules\\balanced-match\\package.json",
"node_modules\\balanced-match\\README.md",
"node_modules\\brace-expansion\\index.js",
"node_modules\\brace-expansion\\LICENSE",
"node_modules\\brace-expansion\\package.json",
"node_modules\\brace-expansion\\README.md",
"node_modules\\cld\\.gitignore",
"node_modules\\cld\\index.js",
"node_modules\\cld\\LICENSE",
"node_modules\\cld\\package.json",
"node_modules\\cld\\README.md",
"node_modules\\cld\\bin\\postinstall.js",
"node_modules\\cld\\build\\Release\\cld.node",
"node_modules\\cld\\deps\\cld\\LICENSE",
"node_modules\\cld\\node_modules\\.bin\\rimraf",
"node_modules\\concat-map\\index.js",
"node_modules\\concat-map\\LICENSE",
"node_modules\\concat-map\\package.json",
"node_modules\\concat-map\\example\\map.js",
"node_modules\\event-kit\\api.json",
"node_modules\\event-kit\\LICENSE.md",
"node_modules\\event-kit\\package.json",
"node_modules\\event-kit\\README.md",
"node_modules\\event-kit\\dist\\composite-disposable.js",
"node_modules\\event-kit\\dist\\disposable.js",
"node_modules\\event-kit\\dist\\emitter.js",
"node_modules\\event-kit\\dist\\event-kit.js",
"node_modules\\fs.realpath\\index.js",
"node_modules\\fs.realpath\\LICENSE",
"node_modules\\fs.realpath\\old.js",
"node_modules\\fs.realpath\\package.json",
"node_modules\\fs.realpath\\README.md",
"node_modules\\glob\\common.js",
"node_modules\\glob\\glob.js",
"node_modules\\glob\\LICENSE",
"node_modules\\glob\\package.json",
"node_modules\\glob\\README.md",
"node_modules\\glob\\sync.js",
"node_modules\\inflight\\inflight.js",
"node_modules\\inflight\\LICENSE",
"node_modules\\inflight\\package.json",
"node_modules\\inflight\\README.md",
"node_modules\\inherits\\inherits.js",
"node_modules\\inherits\\inherits_browser.js",
"node_modules\\inherits\\LICENSE",
"node_modules\\inherits\\package.json",
"node_modules\\inherits\\README.md",
"node_modules\\keyboard-layout\\.node-version",
"node_modules\\keyboard-layout\\LICENSE.md",
"node_modules\\keyboard-layout\\package.json",
"node_modules\\keyboard-layout\\README.md",
"node_modules\\keyboard-layout\\build\\Release\\keyboard-layout-manager.node",
"node_modules\\keyboard-layout\\lib\\keyboard-layout.js",
"node_modules\\minimatch\\LICENSE",
"node_modules\\minimatch\\minimatch.js",
"node_modules\\minimatch\\package.json",
"node_modules\\minimatch\\README.md",
"node_modules\\nan\\CHANGELOG.md",
"node_modules\\nan\\include_dirs.js",
"node_modules\\nan\\LICENSE.md",
"node_modules\\nan\\package.json",
"node_modules\\nan\\README.md",
"node_modules\\nan\\doc\\asyncworker.md",
"node_modules\\nan\\doc\\buffers.md",
"node_modules\\nan\\doc\\callback.md",
"node_modules\\nan\\doc\\converters.md",
"node_modules\\nan\\doc\\errors.md",
"node_modules\\nan\\doc\\json.md",
"node_modules\\nan\\doc\\maybe_types.md",
"node_modules\\nan\\doc\\methods.md",
"node_modules\\nan\\doc\\new.md",
"node_modules\\nan\\doc\\node_misc.md",
"node_modules\\nan\\doc\\object_wrappers.md",
"node_modules\\nan\\doc\\persistent.md",
"node_modules\\nan\\doc\\scopes.md",
"node_modules\\nan\\doc\\script.md",
"node_modules\\nan\\doc\\string_bytes.md",
"node_modules\\nan\\doc\\v8_internals.md",
"node_modules\\nan\\doc\\v8_misc.md",
"node_modules\\nan\\tools\\1to2.js",
"node_modules\\nan\\tools\\package.json",
"node_modules\\nan\\tools\\README.md",
"node_modules\\once\\LICENSE",
"node_modules\\once\\once.js",
"node_modules\\once\\package.json",
"node_modules\\once\\README.md",
"node_modules\\path-is-absolute\\index.js",
"node_modules\\path-is-absolute\\license",
"node_modules\\path-is-absolute\\package.json",
"node_modules\\path-is-absolute\\readme.md",
"node_modules\\rimraf\\bin.js",
"node_modules\\rimraf\\LICENSE",
"node_modules\\rimraf\\package.json",
"node_modules\\rimraf\\README.md",
"node_modules\\rimraf\\rimraf.js",
"node_modules\\rimraf\\node_modules\\glob\\changelog.md",
"node_modules\\rimraf\\node_modules\\glob\\common.js",
"node_modules\\rimraf\\node_modules\\glob\\glob.js",
"node_modules\\rimraf\\node_modules\\glob\\LICENSE",
"node_modules\\rimraf\\node_modules\\glob\\package.json",
"node_modules\\rimraf\\node_modules\\glob\\README.md",
"node_modules\\rimraf\\node_modules\\glob\\sync.js",
"node_modules\\spellchecker\\.gitignore",
"node_modules\\spellchecker\\.npmignore",
"node_modules\\spellchecker\\LICENSE.md",
"node_modules\\spellchecker\\package-lock.json",
"node_modules\\spellchecker\\package.json",
"node_modules\\spellchecker\\README.md",
"node_modules\\spellchecker\\build\\Release\\spellchecker.node",
"node_modules\\spellchecker\\lib\\spellchecker.js",
"node_modules\\spellchecker\\vendor\\hunspell\\AUTHORS",
"node_modules\\spellchecker\\vendor\\hunspell\\BUGS",
"node_modules\\spellchecker\\vendor\\hunspell\\ChangeLog",
"node_modules\\spellchecker\\vendor\\hunspell\\COPYING",
"node_modules\\spellchecker\\vendor\\hunspell\\README",
"node_modules\\spellchecker\\vendor\\hunspell\\THANKS",
"node_modules\\spellchecker\\vendor\\hunspell\\src\\hunspell\\README",
"node_modules\\underscore\\LICENSE",
"node_modules\\underscore\\package.json",
"node_modules\\underscore\\README.md",
"node_modules\\underscore\\underscore-min.js",
"node_modules\\underscore\\underscore.js",
"node_modules\\wrappy\\LICENSE",
"node_modules\\wrappy\\package.json",
"node_modules\\wrappy\\README.md",
"node_modules\\wrappy\\wrappy.js",
"index.js", "index.js",
"manifest.json" "manifest.json"
] ]

View File

@ -1,161 +0,0 @@
{
"name": "discord_spellcheck",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"cld": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/cld/-/cld-2.6.0.tgz",
"integrity": "sha512-2U8Uiv7Bvl1v4fNWFGB3RYtPvhUWXQJ1MoNKJNVuoALfandEt9oVqK64S+3ZLvQPjDiYjsohtTep/wIs0xOXkw==",
"requires": {
"glob": "^5.0.10",
"node-addon-api": "*",
"rimraf": "^2.4.0",
"underscore": "^1.6.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"event-kit": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/event-kit/-/event-kit-2.5.3.tgz",
"integrity": "sha512-b7Qi1JNzY4BfAYfnIRanLk0DOD1gdkWHT4GISIn8Q2tAf3LpU8SP2CMwWaq40imYoKWbtN4ZhbSRxvsnikooZQ=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "5.0.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "2 || 3",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"keyboard-layout": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/keyboard-layout/-/keyboard-layout-2.0.16.tgz",
"integrity": "sha512-eGrxmlV6jbm/mbPEOpYGuH53XEC7wIUj9ZxKcT2z9QHJ/RwrT9iVkvxka9zRxqHZHwQzcffgsa5OxoVAKnhK9w==",
"requires": {
"event-kit": "^2.0.0",
"nan": "^2.13.2"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"nan": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
"integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
},
"node-addon-api": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz",
"integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"requires": {
"glob": "^7.1.3"
},
"dependencies": {
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
}
}
},
"spellchecker": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/spellchecker/-/spellchecker-3.7.0.tgz",
"integrity": "sha512-saQT4BR9nivbK70s0YjyIlSbZzO6bfWRULcGL2JU7fi7wotOnWl70P0QoUwwLywNQJQ47osgCo6GmOlqzRTxbQ==",
"requires": {
"any-promise": "^1.3.0",
"nan": "^2.14.0"
}
},
"underscore": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
"integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -4,9 +4,6 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"cld": "2.6.0",
"keyboard-layout": "2.0.16",
"spellchecker": "3.7.0"
}, },
"devDependencies": {}, "devDependencies": {},
"scripts": { "scripts": {