Incorporacion del servidor legacy. Terminada funcionalidad basica
This commit is contained in:
parent
23e9c9382d
commit
5fa3972c36
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,3 +23,5 @@ yarn-error.log*
|
||||
# Archivos de desarrollo del servidor
|
||||
/srv/*/**.js
|
||||
/srv/*/**.js.map
|
||||
deployarBackend.js
|
||||
deployFrontEnd.js
|
34
app.js
Normal file
34
app.js
Normal file
@ -0,0 +1,34 @@
|
||||
const fun = require("./srv/index").fun;
|
||||
|
||||
const SPAhistory = require('connect-history-api-fallback');
|
||||
let express = require('express');
|
||||
const compresion = require('compression');
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
let app = express();
|
||||
|
||||
// History: Middleware para el routing de la SPA en modo history
|
||||
// Por alguna razon solo funciona si lo uso antes de establecer el directorio estatico dist ...
|
||||
app.use(SPAhistory());
|
||||
/* Compresion gzip */
|
||||
app.use(compresion());
|
||||
|
||||
app.use(express.static('dist'));
|
||||
|
||||
app.use(express.urlencoded());
|
||||
app.use(express.json());
|
||||
app.use(bodyParser.json());
|
||||
|
||||
/* CORS para localhost y beta.pseudosubs.com */
|
||||
|
||||
app.all("*", (req, res, next) => {
|
||||
res.header("Access-Control-Allow-Origin", "*");
|
||||
res.header('Access-Control-Allow-Headers', 'Content-Type');
|
||||
next();
|
||||
});
|
||||
|
||||
app.get("/");
|
||||
|
||||
fun(app);
|
||||
|
||||
app.listen(8080, () => console.log("Iniciado en 8080"));
|
14
package.json
14
package.json
@ -3,26 +3,38 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "node app.js",
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"express": "vue-cli-service express:watch",
|
||||
"express:run": "vue-cli-service express:run"
|
||||
},
|
||||
"dependencies": {
|
||||
"mysql": "^2.16.0",
|
||||
"compression": "^1.7.4",
|
||||
"connect-history-api-fallback": "^1.6.0",
|
||||
"express": "^4.16.4",
|
||||
"mysql": "^2.17.1",
|
||||
"register-service-worker": "^1.6.2",
|
||||
"vue": "^2.6.6",
|
||||
"vue-analytics": "^5.16.4",
|
||||
"vue-disqus": "^3.0.5",
|
||||
"vue-google-signin-button": "^1.0.2",
|
||||
"vue-router": "^3.0.1",
|
||||
"vuex": "^3.0.1",
|
||||
"web-push": "^3.3.3",
|
||||
"yaml": "^1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.16.1",
|
||||
"@types/mysql": "^2.15.6",
|
||||
"@vue/cli-plugin-babel": "^3.0.5",
|
||||
"@vue/cli-plugin-pwa": "^3.0.5",
|
||||
"@vue/cli-service": "^3.0.5",
|
||||
"body-parser": "^1.19.0",
|
||||
"coffee-loader": "^0.9.0",
|
||||
"coffeescript": "^2.3.2",
|
||||
"ftp-deploy": "^2.3.3",
|
||||
"google-auth-library": "^3.1.2",
|
||||
"node-sass": "^4.9.0",
|
||||
"pug": "^2.0.3",
|
||||
"pug-plain-loader": "^1.0.0",
|
||||
|
14
public/.htaccess
Normal file
14
public/.htaccess
Normal file
@ -0,0 +1,14 @@
|
||||
<IfModule mod_headers.c>
|
||||
<FilesMatch "index.html$">
|
||||
Header set Cache-Control "max-age=600, public"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
RewriteRule ^index\.html$ - [L]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule . /index.html [L]
|
||||
</IfModule>
|
@ -8,6 +8,8 @@
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
|
||||
rel="stylesheet">
|
||||
<title>PseudoSubs</title>
|
||||
<script>const url = new URL(window.location.href);if (url.hostname.search("pseudosubs") !== -1 && (url.protocol === "http:" || url.hostname.search("www") !== -1)) {window.location.replace("https://beta.pseudosubs.com");}</script>
|
||||
<script src="https://apis.google.com/js/api:client.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
@ -15,6 +15,6 @@
|
||||
],
|
||||
"start_url": "./index.html",
|
||||
"display": "standalone",
|
||||
"background_color": "#000000",
|
||||
"theme_color": "#4DBA87"
|
||||
"background_color": "#ea486a",
|
||||
"theme_color": "#009961"
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
div#app
|
||||
div.fondo.fondo2
|
||||
barra-lateral
|
||||
div.contenido(:class="$store.state.barraLateralOculta? 'contenido--barraOculta' : ''", :barra-oculta="$store.state.barraLateralOculta.toString()")
|
||||
div.contenido.contenido--barraOculta
|
||||
router-view
|
||||
|
||||
</template>
|
||||
@ -22,16 +22,13 @@
|
||||
components:
|
||||
'barra-lateral': barraLateral
|
||||
created: ->
|
||||
if @$store.state.animes[0]?
|
||||
#
|
||||
else
|
||||
store = @$store
|
||||
fetch("https://pseudosubs.com/anime", {
|
||||
fetch("#{this.$store.state.servidor}/anime", {
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
})
|
||||
.then((x) -> x.text())
|
||||
.then (x) -> x.text()
|
||||
.then (res) ->
|
||||
# if DEV then console.log res
|
||||
resultado = YAML.parse res
|
||||
|
71
src/components/Admin/anime.vue
Normal file
71
src/components/Admin/anime.vue
Normal file
@ -0,0 +1,71 @@
|
||||
<template lang="pug">
|
||||
div
|
||||
div.id {{ anime.anime_ID }}
|
||||
div.nombre {{ anime.titulo }}
|
||||
div.botones
|
||||
span.boton op
|
||||
span.boton ed
|
||||
span.boton(@click="verVariantes") links
|
||||
div(v-if="linksAbierto")
|
||||
div(v-for="variante in variantes")
|
||||
variante(:variante="variante")
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import YAML from "yaml"
|
||||
import variante from "./variante.vue"
|
||||
|
||||
export default
|
||||
name: "anime"
|
||||
props:
|
||||
anime:
|
||||
type: Object
|
||||
required: true
|
||||
data: ->
|
||||
linksAbierto: false
|
||||
variantes: []
|
||||
components:
|
||||
variante: variante
|
||||
methods:
|
||||
verVariantes: ->
|
||||
if this.variantes.length == 0
|
||||
res = await fetch "#{this.$store.state.servidor}/eps/variantes/#{this.anime.anime_ID}",
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
data = await res.text()
|
||||
this.variantes = YAML.parse data
|
||||
this.linksAbierto = !this.linksAbierto
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.id
|
||||
float: left
|
||||
width: 5%
|
||||
|
||||
.nombre
|
||||
float: left
|
||||
width: 20%
|
||||
overflow: hidden
|
||||
|
||||
.botones
|
||||
float: left
|
||||
width: 75%
|
||||
|
||||
.boton
|
||||
@extend %bordeRedondo-std
|
||||
display: inline-block
|
||||
padding: 10px 15px
|
||||
background-color: $colorPrincipal
|
||||
margin: 5px 15px
|
||||
cursor: pointer
|
||||
user-select: none
|
||||
color: white
|
||||
|
||||
//
|
||||
</style>
|
37
src/components/Admin/lista-animes.vue
Normal file
37
src/components/Admin/lista-animes.vue
Normal file
@ -0,0 +1,37 @@
|
||||
<template lang="pug">
|
||||
div.lista
|
||||
div
|
||||
anime.row(v-for="anime in animes" :anime="anime")
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import anime from "./anime.vue"
|
||||
|
||||
export default
|
||||
name: "lista-animes"
|
||||
components:
|
||||
anime: anime
|
||||
data: ->
|
||||
animes: this.$store.state.animes
|
||||
linksAbierto: false
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.row::after
|
||||
content: ""
|
||||
display: table
|
||||
clear: both
|
||||
|
||||
|
||||
|
||||
.lista
|
||||
margin: 50px
|
||||
|
||||
|
||||
//
|
||||
</style>
|
107
src/components/Admin/variante.vue
Normal file
107
src/components/Admin/variante.vue
Normal file
@ -0,0 +1,107 @@
|
||||
<template lang="pug">
|
||||
div.variante
|
||||
span.formato {{ variante.formato }}
|
||||
span.res {{ variante.res }}
|
||||
span.servidor {{ variante.servidor }}
|
||||
span.boton(@click="abrirLinks") Abrir
|
||||
div(v-if="linksAbiertos")
|
||||
br
|
||||
div.link
|
||||
form(@submit="crearEp($event)")
|
||||
input(placeholder="numEp" type="number" min="0" max="1000" name="numEp")
|
||||
input(placeholder="peso" name="peso")
|
||||
input(placeholder="link" name="link")
|
||||
br
|
||||
input(type="submit" value="Crear")
|
||||
br
|
||||
div.link(v-for="link in links")
|
||||
span id: {{ link.ep_ID }} |
|
||||
span Ep {{ link.num_ep }} |
|
||||
span {{ link.visitas }} visitas |
|
||||
span Peso: {{ link.peso }} |
|
||||
span(style="word-wrap: break-word") link: {{ link.link }}
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import YAML from "yaml"
|
||||
|
||||
export default
|
||||
name: "variante"
|
||||
props:
|
||||
variante:
|
||||
type: Object
|
||||
required: true
|
||||
data: ->
|
||||
linksAbiertos: false
|
||||
links: []
|
||||
methods:
|
||||
abrirLinks: ->
|
||||
if this.links.length == 0
|
||||
res = await fetch "#{this.$store.state.servidor}/eps/links/#{this.variante.opcion_ID}",
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
data = await res.text()
|
||||
this.links = YAML.parse data
|
||||
this.linksAbiertos = !this.linksAbiertos
|
||||
crearEp: (ev) ->
|
||||
elem = ev.target
|
||||
ev.preventDefault()
|
||||
res = await fetch "#{this.$store.state.servidor}/eps/links/",
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
body: "params=" + YAML.stringify {
|
||||
opcion_ID: this.variante.opcion_ID
|
||||
num_ep: elem.numEp.value
|
||||
visitas: 0
|
||||
link: elem.link.value
|
||||
peso: elem.peso.value
|
||||
}
|
||||
data = JSON.parse(await res.text())
|
||||
if data.error == false
|
||||
console.log "Creado con exito"
|
||||
this.links.push {
|
||||
ep_ID: "?"
|
||||
num_EP: elem.numEp.value
|
||||
visitas: 0
|
||||
peso: elem.peso.value
|
||||
link: elem.link.value
|
||||
}
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.variante
|
||||
margin: 10px
|
||||
|
||||
.link
|
||||
margin-left: 25px
|
||||
|
||||
.formato, .res, .servidor, .boton
|
||||
display: inline-block
|
||||
padding: 10px 15px
|
||||
border-radius: 5px
|
||||
margin: 10px 5px
|
||||
cursor: none
|
||||
color: white
|
||||
|
||||
.formato
|
||||
background-color: #7b0000
|
||||
|
||||
.res
|
||||
background-color: #000072
|
||||
|
||||
.servidor
|
||||
background-color: #007200
|
||||
|
||||
.boton
|
||||
background-color: $colorSecundario
|
||||
cursor: pointer
|
||||
|
||||
//
|
||||
</style>
|
@ -19,9 +19,13 @@
|
||||
div.temporada Temporada: {{ anime.temporada + " " + anime.anio }}
|
||||
div.fuente Fuente: {{ anime.fuente }}
|
||||
div.generos Generos: {{ anime.generos }}
|
||||
div.tarjeta.fondo1.op-ed ops y eds aqui. En construcción.
|
||||
op-ed(:anime_ID="anime.anime_ID" :color="anime.color")
|
||||
br
|
||||
div.tarjeta.aviso(:style="colorBackground") {{ aviso }}
|
||||
br
|
||||
panel-de-descarga(:animeid="anime.anime_ID" :color="anime.color"
|
||||
:cambiar-aviso="cambiarAviso")
|
||||
br
|
||||
panel-de-descarga(:animeid="anime.anime_ID" :color="anime.color")
|
||||
div.tarjeta.background__disqus
|
||||
vue-disqus(shortname="www-pseudosubs-com" :identifier="nombreCortoAnime"
|
||||
:url="'https://pseudosubs.com/Anime/' + nombreCortoAnime")
|
||||
@ -31,33 +35,41 @@
|
||||
|
||||
<script lang="coffee">
|
||||
import panelDescarga from "./panel-descarga.vue"
|
||||
import opEd from "./op-ed.vue"
|
||||
import YAML from "yaml"
|
||||
|
||||
export default
|
||||
name: "Anime"
|
||||
components:
|
||||
'panel-de-descarga': panelDescarga
|
||||
"panel-de-descarga": panelDescarga
|
||||
"op-ed": opEd
|
||||
data: ->
|
||||
anime: {}
|
||||
# -1 no encontrado, 0 cargando y 1 encontrado
|
||||
estadoAnime: 0
|
||||
aviso: ""
|
||||
computed:
|
||||
nombreCortoAnime: ->
|
||||
@anime.link?.substr(7)
|
||||
colorBackground: -> "background-color: #{@anime.color};"
|
||||
methods:
|
||||
cambiarAviso: (aviso) -> @aviso = aviso
|
||||
created: ->
|
||||
_ = this
|
||||
vm = this
|
||||
animes = @$store.state.animes
|
||||
resultado = -1
|
||||
for anime in animes
|
||||
if anime.link is "/Anime/" + @$route.params.nombre
|
||||
_.anime = anime
|
||||
vm.anime = anime
|
||||
resultado = 1
|
||||
break
|
||||
@estadoAnime = resultado
|
||||
vm.estadoAnime = resultado
|
||||
if resultado is 1
|
||||
@$store.commit "cambiarTituloAnime", "#{anime.titulo}"
|
||||
@$store.commit "cambiarTxtAdicionalAnime", (if anime.comentario? then anime.comentario else "Sin comentarios.")
|
||||
@$store.commit "cambiarEstadoImgAnime", true
|
||||
@$store.commit "cambiarImgTituloAnime", @anime.titulo
|
||||
|
||||
else
|
||||
@$store.commit "cambiarTxtAdicionalAnime", "?"
|
||||
|
||||
@ -67,6 +79,8 @@
|
||||
{nombre: "_", ruta: "#"}
|
||||
]
|
||||
|
||||
|
||||
|
||||
#
|
||||
|
||||
</script>
|
||||
@ -78,6 +92,13 @@
|
||||
background-color: #101010
|
||||
padding: 15px
|
||||
|
||||
.aviso
|
||||
text-align: center
|
||||
color: white
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: x-large
|
||||
|
||||
.contenedor
|
||||
margin: 0 50px
|
||||
|
||||
|
111
src/components/Anime/op-ed.vue
Normal file
111
src/components/Anime/op-ed.vue
Normal file
@ -0,0 +1,111 @@
|
||||
<template lang="pug">
|
||||
div.tarjeta.fondo1.op-ed
|
||||
div.op
|
||||
p(v-if="estadoOp === 0") Cargando OPs...
|
||||
p(v-else-if="estadoOp === -1") Error al obtener los ops.
|
||||
template(v-else)
|
||||
div.titulo OPs:
|
||||
div.cont(v-for="op in ops")
|
||||
span.nombre {{ op.nombre }}
|
||||
span por
|
||||
span.nombre {{ op.artista }}
|
||||
br
|
||||
span.eps Eps {{ op.eps }} |
|
||||
a(:href="obtenerLinkY(op.nombre, op.artista)" target="_blank"
|
||||
:style="'color: ' + color") YouTube
|
||||
br
|
||||
div.ed
|
||||
p(v-if="estadoEd === 0") Cargando EDs...
|
||||
p(v-else-if="estadoEd === -1") Error al obtener los ops.
|
||||
template(v-else)
|
||||
div.titulo EDs:
|
||||
div.cont(v-for="ed in eds")
|
||||
span.nombre {{ ed.nombre }}
|
||||
span por
|
||||
span.nombre {{ ed.artista }}
|
||||
br
|
||||
span.eps Eps {{ ed.eps }} |
|
||||
a(:href="obtenerLinkY(ed.nombre, ed.artista)" target="_blank"
|
||||
:style="'color: ' + color") YouTube
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import YAML from "yaml"
|
||||
|
||||
export default
|
||||
name: "op-ed"
|
||||
data: ->
|
||||
ops: []
|
||||
eds: []
|
||||
estadoOp: 0
|
||||
estadoEd: 0
|
||||
props:
|
||||
anime_ID:
|
||||
type: Number,
|
||||
required: true
|
||||
color:
|
||||
type: String
|
||||
required: true
|
||||
methods:
|
||||
obtenerLinkY: (nombre, artista) ->
|
||||
"https://www.youtube.com/results?search_query=" + (encodeURIComponent "#{nombre} - #{artista}")
|
||||
mounted: ->
|
||||
vm = this
|
||||
fetch "#{this.$store.state.servidor}/op/#{this.anime_ID}",
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
.then (res) ->
|
||||
data = YAML.parse(await res.text())
|
||||
vm.estadoOp =
|
||||
if data.exito
|
||||
vm.ops = data.payload
|
||||
1
|
||||
else
|
||||
console.error data.error
|
||||
-1
|
||||
.catch (err) -> console.log "Error :c #{err}"
|
||||
|
||||
fetch "#{this.$store.state.servidor}/ed/#{this.anime_ID}",
|
||||
method: "POST"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
.then (res) ->
|
||||
data = YAML.parse(await res.text())
|
||||
vm.estadoEd =
|
||||
if data.exito
|
||||
vm.eds = data.payload
|
||||
1
|
||||
else
|
||||
console.error data.error
|
||||
-1
|
||||
.catch (err) -> console.log "Error :c #{err}"
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.titulo
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: xx-large
|
||||
|
||||
.cont
|
||||
padding-left: 10px
|
||||
padding-bottom: 15px
|
||||
a
|
||||
color: $colorPrincipal
|
||||
|
||||
.nombre
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: x-large
|
||||
|
||||
.eps
|
||||
margin-left: 10px
|
||||
|
||||
//
|
||||
</style>
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="panel" v-if="datosCorrectos">
|
||||
<div class="panel tarjeta" v-if="datosCorrectos">
|
||||
<div class="panel__titulo" :style="'background-color: ' + color">
|
||||
Descarga aquí.<br>
|
||||
<div class="panel__titulo__variantes">
|
||||
@ -14,7 +14,7 @@
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel__descripcion background__panel-descarga">
|
||||
<div class="panel__descripcion fondo1">
|
||||
|
||||
<template v-for="(opcion, indice) in datos">
|
||||
<div :id="`tarjeta${indice}`" :style="indice !== '1'? 'display: none' : ''">
|
||||
@ -43,6 +43,7 @@
|
||||
|
||||
<script>
|
||||
import YAML from "yaml"
|
||||
|
||||
const esModoOscuro = false;
|
||||
|
||||
export default {
|
||||
@ -52,7 +53,7 @@
|
||||
posActual: '1',
|
||||
datos: {},
|
||||
datosCorrectos: false,
|
||||
mostrarSpinnerParaCargaDeEps: true
|
||||
mostrarSpinnerParaCargaDeEps: false
|
||||
}
|
||||
},
|
||||
props: {
|
||||
@ -63,6 +64,10 @@
|
||||
color: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
cambiarAviso: {
|
||||
type: Function,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -117,7 +122,7 @@
|
||||
incrementarContador(ep_ID, evento) {
|
||||
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open("PUT", "/links");
|
||||
xhr.open("PUT", `${this.$store.state.servidor}/links`);
|
||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
xhr.onload = () => {
|
||||
console.log(xhr.responseText);
|
||||
@ -130,14 +135,15 @@
|
||||
const xhr = new XMLHttpRequest();
|
||||
const vm = this;
|
||||
|
||||
xhr.open("POST","https://pseudosubs.com/links");
|
||||
xhr.open("POST", `${this.$store.state.servidor}/links`);
|
||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
xhr.onload = () => {
|
||||
try {
|
||||
const data = YAML.parse(xhr.responseText);
|
||||
if (data.opciones) {
|
||||
vm.datos = data["opciones"];
|
||||
if (data.exito) {
|
||||
vm.datos = data.payload["opciones"];
|
||||
vm.datosCorrectos = true;
|
||||
vm.cambiarAviso(data.payload.aviso);
|
||||
} else {
|
||||
vm.mostrarSpinnerParaCargaDeEps = false;
|
||||
console.log("Error al recibir los eps del anime. resp:\n" + xhr.responseText);
|
||||
@ -149,13 +155,17 @@
|
||||
|
||||
|
||||
};
|
||||
console.log("Este es el query: " + `animeID=${ this.animeid }`);
|
||||
xhr.send(`animeID=${this.animeid}`);
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.aviso
|
||||
padding: 12px
|
||||
|
||||
.icono-pequeno
|
||||
font-size: 15px
|
||||
@ -163,6 +173,7 @@
|
||||
cursor: default
|
||||
|
||||
.panel__titulo
|
||||
border-radius: 10px 10px 0 0
|
||||
font:
|
||||
family: Muli, "Open Sans", sans-serif
|
||||
size: xx-large
|
||||
@ -189,7 +200,7 @@
|
||||
|
||||
.panel__descripcion
|
||||
padding: 25px 15px
|
||||
// background-color: #f2f2f2
|
||||
border-radius: 0 0 10px 10px
|
||||
|
||||
.panel__descripcion__titulo
|
||||
font:
|
||||
|
@ -19,6 +19,8 @@
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.main
|
||||
margin: 50px 0
|
||||
|
||||
@ -39,5 +41,12 @@
|
||||
family: Muli, "Open Sans", sans-serif
|
||||
size: x-large
|
||||
|
||||
@media only screen and (max-width: $movil)
|
||||
.titulo
|
||||
font-size: 2rem !important
|
||||
|
||||
.titulo__descr
|
||||
font-size: large !important
|
||||
|
||||
//
|
||||
</style>
|
@ -69,9 +69,17 @@
|
||||
font:
|
||||
family: Muli, "Open Sans", sans-serif
|
||||
size: 2.5rem
|
||||
//
|
||||
|
||||
.descripcion
|
||||
padding: 50px 20px
|
||||
|
||||
@media only screen and (max-width: $movil)
|
||||
.caracsCont
|
||||
padding: 0
|
||||
|
||||
.titulo
|
||||
font-size: 2rem
|
||||
|
||||
//
|
||||
|
||||
</style>
|
78
src/components/Inicio/notificaciones.vue
Normal file
78
src/components/Inicio/notificaciones.vue
Normal file
@ -0,0 +1,78 @@
|
||||
<template lang="pug">
|
||||
div.fondo1.ntf
|
||||
div.titulo.texto1 Notificaciones
|
||||
br
|
||||
p.descr.texto1.
|
||||
Inicia sesión con Google y recibe notificaciones cuando salgan eps nuevos.
|
||||
Solo los animes que tú decidas.<br>
|
||||
<br>
|
||||
Muy pronto...
|
||||
br
|
||||
div(:class="(NODE_ENV === 'production')? 'pronto': ''")
|
||||
router-link.mas(to="/cuenta") Aprender más
|
||||
boton-inicio-sesion
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import botonInicioSesion from "../boton-inicio-sesion.vue"
|
||||
|
||||
export default
|
||||
name: "notificaciones"
|
||||
components:
|
||||
"boton-inicio-sesion": botonInicioSesion
|
||||
data: ->
|
||||
gSignInParams:
|
||||
client_id: "27783367584-1hms6h62heplhlvsaihl8vqs7ho3o2b7.apps.googleusercontent.com"
|
||||
NODE_ENV: process.env.NODE_ENV
|
||||
methods:
|
||||
alIniciarSesion: (googleUser) ->
|
||||
token = googleUser.getAuthResponse().id_token
|
||||
xhr = new XMLHttpRequest()
|
||||
xhr.open "POST", "#{this.$store.state.servidor}/u/validar"
|
||||
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
|
||||
xhr.onload = ->
|
||||
console.log xhr.responseText
|
||||
xhr.send "idToken=#{token}"
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.pronto
|
||||
filter: opacity(15%)
|
||||
|
||||
.ntf
|
||||
padding: 50px
|
||||
|
||||
.descr
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: x-large
|
||||
opacity: 0.75
|
||||
|
||||
|
||||
.titulo
|
||||
font:
|
||||
size: 3rem
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
|
||||
.mas
|
||||
padding: 10px 20px
|
||||
display: inline-block
|
||||
border-radius: 3px
|
||||
color: white
|
||||
cursor: pointer
|
||||
text-decoration: none
|
||||
margin: 0 10px
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: 1.3rem
|
||||
background-color: $colorPrincipal
|
||||
box-shadow: 0 3px 0 #00844c
|
||||
|
||||
//
|
||||
|
||||
</style>
|
@ -8,6 +8,7 @@
|
||||
div.titulo {{ anime.titulo }}
|
||||
|
||||
router-link(:to="anime.link")
|
||||
div.imgCont
|
||||
img.imagen.tarjeta(:src="anime.imgUrl")
|
||||
div.animeCont
|
||||
div.descr {{ anime.descripcion }}
|
||||
@ -34,7 +35,7 @@
|
||||
export default
|
||||
name: "ultimos-eps"
|
||||
data: ->
|
||||
numAnimesRecientes: 4
|
||||
numAnimesRecientes: 5
|
||||
animeActual: 0
|
||||
anime: {}
|
||||
intervalo: {}
|
||||
@ -139,6 +140,7 @@
|
||||
position: absolute
|
||||
bottom: 15px
|
||||
left: 440px
|
||||
|
||||
.boton
|
||||
@extend %bordeRedondo-std
|
||||
user-select: none
|
||||
@ -150,15 +152,36 @@
|
||||
.cont
|
||||
padding: 10px 40px
|
||||
z-index: 4
|
||||
|
||||
a
|
||||
text-decoration: none
|
||||
|
||||
.imgCont
|
||||
float: left
|
||||
display: inline-block
|
||||
text-align: center
|
||||
|
||||
.imagen
|
||||
@extend %bordeRedondo-std
|
||||
float: left
|
||||
height: 500px
|
||||
width: 360px
|
||||
margin-right: 40px
|
||||
|
||||
@media only screen and (max-width: 900px)
|
||||
.animeCont
|
||||
display: none
|
||||
|
||||
.posActual
|
||||
display: none
|
||||
|
||||
.imgCont
|
||||
float: none
|
||||
display: block
|
||||
|
||||
@media only screen and (max-width: 420px)
|
||||
.imagen
|
||||
height: auto
|
||||
width: 100%
|
||||
|
||||
//
|
||||
</style>
|
178
src/components/Usuario/ajustes-notificaciones.vue
Normal file
178
src/components/Usuario/ajustes-notificaciones.vue
Normal file
@ -0,0 +1,178 @@
|
||||
<template lang="pug">
|
||||
div
|
||||
div.titulo Notificaciones (No disponible)
|
||||
br
|
||||
template(v-if="notf && serviceWorkers")
|
||||
div.descr(v-if="estado === 0").
|
||||
Registra tu navegador siguiendo estos pasos:
|
||||
br
|
||||
div.uno
|
||||
span.num(:class="estadoNotificaciones === 'Permitido'? 'num--terminado': ''") 1
|
||||
span.paso Permitir notificaciones
|
||||
br
|
||||
div.opc(v-if="estadoNotificaciones !== 'Permitido'")
|
||||
p Estado de las notificaciones: {{ estadoNotificaciones }}
|
||||
br
|
||||
button.boton(v-if="estadoNotificaciones === 'No preguntado'"
|
||||
@click="pedirNotificaciones()") Permitir notificaciones
|
||||
div(v-if="estadoNotificaciones === 'Denegado'").
|
||||
Tienes que permitir las notificaciones en los ajustes de tu navegador.
|
||||
br
|
||||
div.dos
|
||||
span.num(:class="notificacionesProbadas? 'num--terminado': ''") 2
|
||||
span.paso Probar notificaciones
|
||||
br
|
||||
div.opc(v-if="estadoNotificaciones === 'Permitido' && !notificacionesProbadas")
|
||||
p.
|
||||
Aceptaste las notificaciones, pero aun es posible que tu navegador no las
|
||||
soporte. Haz click en el siguiente boton para probarlas:
|
||||
br
|
||||
button.boton(@click="probarNotificacion") Probar
|
||||
br
|
||||
br
|
||||
span Ingresa el numero secreto:
|
||||
input(type="number" min="0" max="100" v-model="numIngresado")
|
||||
br
|
||||
div.tres
|
||||
span.num(:class="pushSuscrito? 'num--terminado': ''") 3
|
||||
span.paso Suscribirse a las notificaciones
|
||||
br
|
||||
div.opc(v-if="estadoNotificaciones === 'Permitido' && notificacionesProbadas && !pushSuscrito")
|
||||
button.boton(@click="suscribirse()") Suscribirse
|
||||
div.fin(v-if="pushSuscrito")
|
||||
p Tu navegador está listo.
|
||||
template(v-else).
|
||||
Lo sentimos, tu navegador no soporta notificaciones. Actualiza tu navegador.
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
|
||||
publicVapidKey = "BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI"
|
||||
|
||||
urlBase64ToUint8Array = (base64String) ->
|
||||
padding = '='.repeat((4 - base64String.length % 4) % 4);
|
||||
base64 = (base64String + padding)
|
||||
.replace(/-/g, '+')
|
||||
.replace(/_/g, '/');
|
||||
|
||||
rawData = window.atob(base64);
|
||||
outputArray = new Uint8Array(rawData.length);
|
||||
|
||||
`
|
||||
for (let i = 0; i < rawData.length; ++i) {
|
||||
outputArray[i] = rawData.charCodeAt(i)
|
||||
}
|
||||
`
|
||||
|
||||
outputArray
|
||||
|
||||
export default
|
||||
name: "ajustes-notificaciones"
|
||||
data: ->
|
||||
estado: 0
|
||||
estadoNotf: Notification.permission
|
||||
notf: false
|
||||
serviceWorkers: false
|
||||
notificacionesProbadas: false
|
||||
pushSuscrito: false
|
||||
numAleatorio: Math.ceil Math.random() * 100
|
||||
numIngresado: 0
|
||||
watch:
|
||||
numIngresado: (n, v) ->
|
||||
if parseInt(n) is @numAleatorio
|
||||
@notificacionesProbadas = true
|
||||
computed:
|
||||
estadoNotificaciones: ->
|
||||
switch @estadoNotf
|
||||
when "default" then "No preguntado"
|
||||
when "granted" then "Permitido"
|
||||
when "denied" then "Denegado"
|
||||
methods:
|
||||
pedirNotificaciones: ->
|
||||
vm = this
|
||||
Notification.requestPermission().then((res) ->
|
||||
vm.estadoNotf = res
|
||||
)
|
||||
probarNotificacion: ->
|
||||
vm = this
|
||||
navigator.serviceWorker.getRegistration()
|
||||
.then (reg) ->
|
||||
reg?.showNotification "El numero secreto es #{vm.numAleatorio}"
|
||||
suscribirse: ->
|
||||
vm = this
|
||||
navigator.serviceWorker.ready.then (reg) ->
|
||||
try
|
||||
subscripcion = await reg.pushManager.subscribe
|
||||
userVisibleOnly: true
|
||||
applicationServerKey: urlBase64ToUint8Array publicVapidKey
|
||||
|
||||
subsStr = JSON.stringify subscripcion
|
||||
console.log subsStr
|
||||
res = await fetch "#{vm.$store.state.servidor}/n/registrar", {
|
||||
method: "POST"
|
||||
body: "google_ID=#{vm.$store.state.usuarioActual.googleID}&subscripcion=#{subsStr}"
|
||||
headers:
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
}
|
||||
jsonRespuesta = await res.json()
|
||||
console.log jsonRespuesta
|
||||
if res.ok
|
||||
vm.pushSuscrito = true
|
||||
catch e
|
||||
console.error e
|
||||
|
||||
mounted: ->
|
||||
@notf = window.Notification?
|
||||
@serviceWorkers = navigator.serviceWorker?
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
@import "../../assets/sass/variables"
|
||||
|
||||
.titulo
|
||||
font:
|
||||
family: Muli, "Open Sans", sans-serif
|
||||
size: 2rem
|
||||
|
||||
.num
|
||||
font:
|
||||
family: "Product Sans"
|
||||
weight: bold
|
||||
size: 1.5rem
|
||||
display: inline-block
|
||||
background-color: $colorSecundario
|
||||
height: 34px
|
||||
width: 34px
|
||||
text-align: center
|
||||
border-radius: 17px
|
||||
|
||||
.num--terminado
|
||||
background-color: $colorPrincipal
|
||||
|
||||
.paso
|
||||
margin-left: 10px
|
||||
font-family: "Product Sans", Muli, "Open Sans", sans-serif
|
||||
font-size: 1.5rem
|
||||
|
||||
.boton
|
||||
padding: 10px 20px
|
||||
display: inline-block
|
||||
border: none
|
||||
border-radius: 3px
|
||||
color: white
|
||||
cursor: pointer
|
||||
text-decoration: none
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: 1.3rem
|
||||
background-color: $colorPrincipal
|
||||
box-shadow: 0 3px 0 #00844c
|
||||
|
||||
.opc
|
||||
margin-left: 45px
|
||||
|
||||
//
|
||||
</style>
|
@ -2,8 +2,8 @@
|
||||
Barra Lateral. Responsivo hasta los 285px de ancho. -->
|
||||
<template lang="pug">
|
||||
div.barra
|
||||
div.lateral.fondo2.ocultarEnMovil(:class="$store.state.barraLateralOculta? 'barraOculta': ''")
|
||||
div.botonOcultar(@click="ocultarBarraLateral()" :style="'display: ' + (largoVentana < 1201? 'none': 'block')").
|
||||
div.lateral.fondo2.ocultarEnMovil.barraOculta
|
||||
// div.botonOcultar(@click="ocultarBarraLateral()" :style="'display: ' + (largoVentana < 1201? 'none': 'block')").
|
||||
{{ $store.state.barraLateralOculta? '>>': '<<' }}
|
||||
|
||||
router-link.linkImg(to="/" title="Ir al inicio")
|
||||
@ -11,7 +11,6 @@
|
||||
|
||||
div.items.tarjeta.fondo1.texto2
|
||||
div.cambiarModo(@click="cambiarModoColor()")
|
||||
span.ocultarEnTablet Cambiar a modo {{ modoSiguiente }}
|
||||
i.material-icons.texto2.mostrarEnTablet.
|
||||
{{ modoSiguiente === 'oscuro'? 'brightness_3': 'brightness_5' }}
|
||||
br
|
||||
@ -19,28 +18,19 @@
|
||||
br
|
||||
|
||||
router-link(to="/")
|
||||
span.ocultarEnTablet Nosotros
|
||||
i.material-icons.texto2.mostrarEnTablet group
|
||||
i.material-icons.texto2.mostrarEnTablet(title="Nosotros") group
|
||||
br.mostrarEnTablet
|
||||
|
||||
router-link(to="/")
|
||||
span.ocultarEnTablet Cambios
|
||||
i.material-icons.texto2.mostrarEnTablet new_releases
|
||||
br.mostrarEnTablet
|
||||
|
||||
router-link(to="/")
|
||||
span.ocultarEnTablet Diseño
|
||||
i.material-icons.texto2.mostrarEnTablet brush
|
||||
i.material-icons.texto2.mostrarEnTablet(title="Ayuda") help
|
||||
br.mostrarEnTablet
|
||||
|
||||
a(href="https://github.com/Araozu/PseudoSubs_" target="_blank" title="GitHub")
|
||||
span.ocultarEnTablet GitHub
|
||||
img.imgGitHub.texto2.mostrarEnTablet(
|
||||
:src="modoSiguiente === 'oscuro'? '/img/github.svg': '/img/githubOsc.svg' ")
|
||||
br.mostrarEnTablet
|
||||
|
||||
router-link(to="/cuenta")
|
||||
span.ocultarEnTablet Ajustes
|
||||
i.material-icons.texto2.mostrarEnTablet settings
|
||||
|
||||
div.ocultarEnTablet
|
||||
@ -97,11 +87,6 @@
|
||||
""
|
||||
this.elemHtmlModoOscuro.innerHTML = resultado
|
||||
|
||||
ocultarBarraLateral: ->
|
||||
estadoActual = @$store.state.barraLateralOculta
|
||||
console.log "Anuma v: #{estadoActual}"
|
||||
@$store.commit "cambiarBarraLateral"
|
||||
|
||||
created: ->
|
||||
unless this.elemHtmlModoOscuro
|
||||
nuevoElem = document.createElement "style"
|
||||
@ -114,8 +99,8 @@
|
||||
if Storage? and localStorage.getItem "modoColor"
|
||||
localStorage.getItem "modoColor"
|
||||
else if Storage?
|
||||
localStorage.setItem "modoColor", "oscuro"
|
||||
"oscuro"
|
||||
localStorage.setItem "modoColor", "claro"
|
||||
"claro"
|
||||
else
|
||||
console.log "No hay soporte para LocalStorage"
|
||||
"claro"
|
||||
|
53
src/components/boton-inicio-sesion.vue
Normal file
53
src/components/boton-inicio-sesion.vue
Normal file
@ -0,0 +1,53 @@
|
||||
<template lang="pug">
|
||||
span
|
||||
g-signin-button(:params="gSignInParams" @success="alIniciarSesion"
|
||||
v-if="!$store.state.usuarioActual.googleID") Inicia sesión con Google
|
||||
div.g-signin-button(v-else) Iniciaste sesión como {{ $store.state.usuarioActual.nombre }}
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import YAML from "yaml"
|
||||
|
||||
export default
|
||||
name: "boton-inicio-sesion"
|
||||
data: ->
|
||||
gSignInParams:
|
||||
client_id: "27783367584-1hms6h62heplhlvsaihl8vqs7ho3o2b7.apps.googleusercontent.com"
|
||||
methods:
|
||||
alIniciarSesion: (googleUser) ->
|
||||
vm = this
|
||||
token = googleUser.getAuthResponse().id_token
|
||||
xhr = new XMLHttpRequest()
|
||||
xhr.open "POST", "#{this.$store.state.servidor}/u/validar"
|
||||
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
|
||||
xhr.onload = ->
|
||||
res = YAML.parse xhr.responseText
|
||||
if res.exito
|
||||
vm.$store.commit "cambiarUsuarioActual", res.payload
|
||||
else
|
||||
console.log xhr.responseText
|
||||
alert "Error al iniciar sesion."
|
||||
|
||||
xhr.send "idToken=#{token}"
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
|
||||
.g-signin-button
|
||||
padding: 10px 20px
|
||||
display: inline-block
|
||||
border-radius: 3px
|
||||
color: white
|
||||
cursor: pointer
|
||||
text-decoration: none
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: 1.3rem
|
||||
background-color: #3c82f7
|
||||
box-shadow: 0 3px 0 #0f69ff
|
||||
|
||||
//
|
||||
</style>
|
@ -4,9 +4,16 @@ import router from './router.coffee'
|
||||
import store from './store.coffee'
|
||||
import './registerServiceWorker'
|
||||
import VueDisqus from "vue-disqus"
|
||||
import VueAnalytics from "vue-analytics"
|
||||
import VueGSignIn from "vue-google-signin-button"
|
||||
|
||||
Vue.config.productionTip = false;
|
||||
Vue.use(VueDisqus);
|
||||
Vue.use(VueGSignIn);
|
||||
Vue.use(VueAnalytics, {
|
||||
id: 'UA-113477820-1',
|
||||
router
|
||||
});
|
||||
|
||||
new Vue({
|
||||
router,
|
||||
|
@ -2,31 +2,48 @@
|
||||
|
||||
import { register } from 'register-service-worker'
|
||||
|
||||
/*
|
||||
* Claves VAPID
|
||||
* Publica: BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI
|
||||
* Privada: 6dOp0WChG-fLFSo9hRnMUn5S1BVBm3KhK9r0m4L-GoA
|
||||
* */
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
register(`${process.env.BASE_URL}service-worker.js`, {
|
||||
ready() {
|
||||
console.log(
|
||||
'App is being served from cache by a service worker.\n' +
|
||||
'For more details, visit https://goo.gl/AFskqB'
|
||||
'PseudoSubs está siendo servida desde un service worker.\n' +
|
||||
'Para saber más visita https://goo.gl/AFskqB'
|
||||
)
|
||||
},
|
||||
registered () {
|
||||
console.log('Service worker has been registered.')
|
||||
registered(registration) {
|
||||
console.log('Se ha registrado el Service worker.');
|
||||
self.addEventListener("push", e => {
|
||||
const data = e.data.json();
|
||||
console.log("Recibi un push :D");
|
||||
registration.showNotification(data.title, {
|
||||
body: "Notificacion de prueba",
|
||||
icon: "http://image.ibb.co/frYOFd/tmlogo.png"
|
||||
});
|
||||
});
|
||||
},
|
||||
cached() {
|
||||
console.log('Content has been cached for offline use.')
|
||||
console.log('Se ha cacheado el contenido para su uso sin internet.')
|
||||
},
|
||||
updatefound() {
|
||||
console.log('New content is downloading.')
|
||||
console.log('Descargando nuevo contenido.')
|
||||
},
|
||||
updated() {
|
||||
console.log('New content is available; please refresh.')
|
||||
console.log('Hay nuevo contenido disponible, recarga la página.');
|
||||
// window.location.reload(true);
|
||||
},
|
||||
offline() {
|
||||
console.log('No internet connection found. App is running in offline mode.')
|
||||
console.log('No hay conexion a internet. ' +
|
||||
'PseudoSubs se está ejecutando en modo sin internet.')
|
||||
},
|
||||
error(error) {
|
||||
console.error('Error during service worker registration:', error)
|
||||
console.error('Error al registrar el service worker:', error)
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import AnimeList from "./views/AnimeList.vue"
|
||||
import listaAnimes from "./components/AnimeList/lista-animes.vue"
|
||||
import Anime from "./components/Anime/Anime.vue"
|
||||
import Error404 from "./views/Error404.vue"
|
||||
import Admin from "./views/Admin.vue"
|
||||
|
||||
Vue.use Router
|
||||
|
||||
@ -36,6 +37,10 @@ export default new Router
|
||||
path: "/cuenta"
|
||||
name: "Usuario"
|
||||
component: Usuario
|
||||
,
|
||||
path: "/admin"
|
||||
name: "Admin"
|
||||
component: Admin
|
||||
,
|
||||
path: "*"
|
||||
name: "404"
|
||||
|
@ -8,30 +8,34 @@ DEV = process.env.NODE_ENV == "development"
|
||||
|
||||
export default new Vuex.Store
|
||||
state:
|
||||
barraLateralOculta:
|
||||
(localStorage?.getItem "barraLateralOculta") == "true" ? true
|
||||
servidor: unless DEV then "" else ""
|
||||
|
||||
animes:
|
||||
if localStorage?
|
||||
YAML.parse ((localStorage.getItem "animes") ? "[]")
|
||||
else
|
||||
[]
|
||||
else []
|
||||
|
||||
modoColor: localStorage?.getItem "modoColor" ? "claro"
|
||||
modoColor: (localStorage?.getItem "modoColor") ? "claro"
|
||||
tituloAnime: "Anime"
|
||||
txtAdicionalAnime: "Comprimido sin perder 1 solo pixel."
|
||||
mostrarImgAnime: false
|
||||
imgTituloAnime: "19_2_fruits_basket"
|
||||
imgTituloAnime: ""
|
||||
rutaActual: [{nombre: "PseudoSubs", ruta: "/"}]
|
||||
usuarioActual:
|
||||
if localStorage?
|
||||
YAML.parse ((localStorage.getItem "usuario") ? "{}" )
|
||||
else {}
|
||||
|
||||
mutations:
|
||||
cambiarBarraLateral: (state) ->
|
||||
state.barraLateralOculta = !state.barraLateralOculta
|
||||
localStorage?.setItem "barraLateralOculta", state.barraLateralOculta
|
||||
|
||||
establecerAnime: (state, animes) ->
|
||||
localStorage?.setItem "animes", YAML.stringify animes
|
||||
animesTxt = YAML.stringify animes
|
||||
animesLocal = localStorage?.getItem "animes"
|
||||
unless animesTxt is animesLocal
|
||||
localStorage?.setItem "animes", animesTxt
|
||||
state.animes = animes
|
||||
if DEV then console.log "Actualicé los animes"
|
||||
else
|
||||
if DEV then console.log "Ahorré tener que actualizar todo v:"
|
||||
|
||||
cambiarModoColor: (state, color) ->
|
||||
state.modoColor = color
|
||||
@ -51,4 +55,8 @@ export default new Vuex.Store
|
||||
cambiarRutaActual: (state, valor) ->
|
||||
state.rutaActual = valor
|
||||
|
||||
cambiarUsuarioActual: (state, valor) ->
|
||||
state.usuarioActual = valor
|
||||
if localStorage? then localStorage.setItem "usuario", YAML.stringify valor
|
||||
|
||||
actions: {}
|
33
src/views/Admin.vue
Normal file
33
src/views/Admin.vue
Normal file
@ -0,0 +1,33 @@
|
||||
<template lang="pug">
|
||||
div.texto1
|
||||
div.titulo.fondo1 Administracion
|
||||
br
|
||||
div Animes
|
||||
lista-anime
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import listaAnime from "../components/Admin/lista-animes.vue"
|
||||
|
||||
export default
|
||||
name: "Admin"
|
||||
components:
|
||||
"lista-anime": listaAnime
|
||||
created: ->
|
||||
unless this.$route.query.p == "xsakah4b"
|
||||
this.$router.push "/"
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="sass">
|
||||
|
||||
.titulo
|
||||
padding: 50px
|
||||
font:
|
||||
family: "Product Sans", "Open Sans", sans-serif
|
||||
size: 3rem
|
||||
|
||||
//
|
||||
</style>
|
@ -2,6 +2,7 @@
|
||||
div.inicio
|
||||
ultimos-eps
|
||||
animes-novelas
|
||||
notificaciones
|
||||
br
|
||||
caracteristicas
|
||||
y-notaras-la-diferencia
|
||||
@ -13,6 +14,7 @@
|
||||
import caracteristicas from "../components/Inicio/caracteristicas.vue"
|
||||
import yNotarasLaDiferencia from "../components/Inicio/y-notaras-la-diferencia.vue"
|
||||
import animesNovelas from "../components/Inicio/animes-novelas.vue"
|
||||
import notificaciones from "../components/Inicio/notificaciones.vue"
|
||||
|
||||
export default
|
||||
name: "Inicio"
|
||||
@ -21,6 +23,7 @@
|
||||
'y-notaras-la-diferencia': yNotarasLaDiferencia
|
||||
'ultimos-eps': ultimosEps
|
||||
'animes-novelas': animesNovelas
|
||||
notificaciones: notificaciones
|
||||
created: ->
|
||||
@$store.commit "cambiarRutaActual", [{nombre: "PseudoSubs", ruta: "/"}]
|
||||
#
|
||||
|
@ -9,22 +9,41 @@
|
||||
div.usuario__cont.tarjeta.fondo1
|
||||
div.usuario__titulo Mis Datos
|
||||
br
|
||||
img.usuario__img
|
||||
template(v-if="$store.state.usuarioActual.googleID")
|
||||
div.contImg
|
||||
img.usuario__img(:src="$store.state.usuarioActual.fotoPerfil")
|
||||
div.usuario__nombre Nombre: {{ $store.state.usuarioActual.nombre }}
|
||||
div.usuario__correo Correo: {{ $store.state.usuarioActual.email }}
|
||||
br
|
||||
div.usuario__nombre Nombre:
|
||||
div.usuario__correo Correo:
|
||||
div.usuario__info.
|
||||
Eso es todo. Puedes cambiar tu nombre y correo sin afectar tu cuenta de Google.
|
||||
template(v-else)
|
||||
div.
|
||||
Inicia sesión* para poder recibir notificaciones en todos tus dispositivos.
|
||||
br
|
||||
boton-inicio-sesion
|
||||
br
|
||||
br
|
||||
div.usuario__info Estos son todos los datos que almacenamos de ti.
|
||||
p.
|
||||
* No necesitas iniciar sesión para tener notificaciones, solo para controlar
|
||||
tus dispositivos.<br>
|
||||
* Aun no disponible.
|
||||
div.notificaciones
|
||||
div.notificaciones__cont.tarjeta.fondo1 Notificaciones
|
||||
div.notificaciones__cont.tarjeta.fondo1
|
||||
ajustes-notificaciones
|
||||
//
|
||||
</template>
|
||||
|
||||
<script lang="coffee">
|
||||
import botonInicioSesion from "../components/boton-inicio-sesion.vue"
|
||||
import ajustesNotificaciones from "../components/Usuario/ajustes-notificaciones.vue"
|
||||
|
||||
export default
|
||||
name: "Usuario"
|
||||
components:
|
||||
"boton-inicio-sesion": botonInicioSesion
|
||||
"ajustes-notificaciones": ajustesNotificaciones
|
||||
#
|
||||
|
||||
</script>
|
||||
|
||||
@ -48,6 +67,7 @@
|
||||
|
||||
.row
|
||||
margin: 0 40px
|
||||
|
||||
::after
|
||||
content: ""
|
||||
display: table
|
||||
@ -64,6 +84,9 @@
|
||||
family: Muli, "Open Sans", sans-serif
|
||||
size: 2rem
|
||||
|
||||
.contImg
|
||||
text-align: center
|
||||
|
||||
.usuario__img
|
||||
width: 200px
|
||||
height: 200px
|
||||
@ -76,5 +99,7 @@
|
||||
padding: 20px
|
||||
margin: 20px
|
||||
|
||||
|
||||
|
||||
//
|
||||
</style>
|
3
srv/.babelrc
Normal file
3
srv/.babelrc
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": ["@babel/preset-env"]
|
||||
}
|
41
srv/Admin/Eps/cambiarMensaje.ts
Normal file
41
srv/Admin/Eps/cambiarMensaje.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import {MysqlError} from "mysql";
|
||||
|
||||
interface Datos {
|
||||
aviso: string,
|
||||
sigEp: number,
|
||||
anime_ID: number
|
||||
}
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const cambiarMensaje = (req: any, res: any) => {
|
||||
|
||||
const YAML = require('yaml');
|
||||
|
||||
const datosStr = req.body.datos;
|
||||
|
||||
if (datosStr) {
|
||||
|
||||
const data: Datos = YAML.parse(datosStr);
|
||||
|
||||
const sql = `UPDATE links SET aviso=?, sigEp=? WHERE anime_ID=?`;
|
||||
const datosSQL = [data.aviso, data.sigEp, data.anime_ID];
|
||||
con.query(sql, datosSQL,(err: MysqlError) => {
|
||||
if (!err) {
|
||||
|
||||
res.send(`exito: true`);
|
||||
|
||||
} else {
|
||||
console.log(`Error al ejecutar query en /Admin/Eps/cambiarMensaje.ts:\n${err}\n${err.sql}`);
|
||||
res.send(`exito: false\nerror: Error de consulta(0)..`);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log(`Error. Los datos no existen en /Admin/Eps/cambiarMensaje.ts`);
|
||||
res.send(`exito: false\nerror: Los datos no existen.`);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports.cambiarMensaje = cambiarMensaje;
|
40
srv/Admin/Eps/crearLink.ts
Normal file
40
srv/Admin/Eps/crearLink.ts
Normal file
@ -0,0 +1,40 @@
|
||||
interface formatoDataARecibir {
|
||||
opcion_ID: number,
|
||||
num_ep: number,
|
||||
visitas: number,
|
||||
link: string,
|
||||
peso: string
|
||||
}
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const crearLink = (req: any, res: any) => {
|
||||
|
||||
const YAML = require('yaml');
|
||||
|
||||
const parametros: formatoDataARecibir = YAML.parse(req.body.params);
|
||||
|
||||
|
||||
if (parametros) {
|
||||
|
||||
const query = `INSERT INTO eps (opcion_ID, num_ep, visitas, link, peso) VALUES (${parametros.opcion_ID},
|
||||
${parametros.num_ep}, ${parametros.visitas}, ${con.escape(parametros.link)}, ${con.escape(parametros.peso)} )`;
|
||||
con.query(query, (err: Error) => {
|
||||
if (!err) {
|
||||
|
||||
res.send("error: false");
|
||||
|
||||
} else {
|
||||
console.log("Error al ejecutar query en /Admin/Eps/crearEp -> con.query (linea 20). Query y error:\n" + query + "\n" + parametros);
|
||||
res.send("error: true");
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log("Error. 'parametros' no existe en /Admin/Eps/crearEp -> con.connect (linea 16):\n" + parametros);
|
||||
res.send("error: true");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports.crearLink = crearLink;
|
87
srv/Admin/Eps/crearVariante.ts
Normal file
87
srv/Admin/Eps/crearVariante.ts
Normal file
@ -0,0 +1,87 @@
|
||||
import {MysqlError} from "mysql";
|
||||
|
||||
interface Datos {
|
||||
num_opcion: number,
|
||||
formato: string,
|
||||
resolucion: string,
|
||||
servidor: string,
|
||||
anime_ID: number,
|
||||
color: string
|
||||
}
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const crearVariante = (req: any, res: any) => {
|
||||
|
||||
const YAML = require('yaml');
|
||||
const mysql = require('mysql');
|
||||
|
||||
const datos: string = req.body.datos;
|
||||
|
||||
if (datos) {
|
||||
|
||||
const data: Datos = YAML.parse(datos);
|
||||
const E = mysql.escape;
|
||||
|
||||
const crearEntrada = (respuesta: [{links_ID: number}]) => {
|
||||
const links_ID = respuesta[0].links_ID;
|
||||
const query = `INSERT INTO links_opciones (links_ID, num_opcion, formato, res, servidor, color)
|
||||
VALUES(${links_ID}, ${data.num_opcion}, ${E(data.formato)}, ${E(data.resolucion)}, ${E(data.servidor)}, ${E(data.color)})`;
|
||||
con.query(query,(err: MysqlError) => {
|
||||
if (!err) {
|
||||
|
||||
res.send(`exito: true`);
|
||||
|
||||
} else {
|
||||
console.log(`Error al ejecutar query en /Admin/Eps/crearVariante.ts\n:${err}\n${err.sql}`);
|
||||
res.send(`exito: false\nerror: Consulta fallida(3).`);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
con.query(
|
||||
`SELECT links_ID FROM links WHERE anime_ID=${data.anime_ID}`,
|
||||
(err: MysqlError, respuesta: [{links_ID: number}]) => {
|
||||
// Ya existe el link en la base de datos
|
||||
if (!err && respuesta[0]) {
|
||||
crearEntrada(respuesta);
|
||||
}
|
||||
// No existe el link en la base de datos
|
||||
else if (!err && !respuesta[0]) {
|
||||
|
||||
con.query(`INSERT INTO links (anime_ID, aviso, sigEp) VALUES (${data.anime_ID}, 'Patience from zhou', 0)`, (err: MysqlError) => {
|
||||
if (!err) {
|
||||
|
||||
con.query(
|
||||
`SELECT links_ID FROM links WHERE anime_ID=${data.anime_ID}`,
|
||||
(err: MysqlError, respuesta: [{links_ID: number}]) => {
|
||||
if (!err) {
|
||||
crearEntrada(respuesta);
|
||||
} else {
|
||||
console.log(`Error al ejecutar query en /Admin/Eps/crearVariante.ts\n:${err}\n${err.sql}`);
|
||||
res.send(`exito: false\nerror: Consulta fallida(2).`);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
console.log(`Error al ejecutar query en /Admin/Eps/crearVariante.ts\n:${err}\n${err.sql}`);
|
||||
res.send(`exito: false\nerror: Consulta fallida(1).`);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
console.log(`Error al ejecutar query en /Admin/Eps/crearVariante.ts\n:${err}\n${err.sql}`);
|
||||
res.send(`exito: false\nerror: Consulta fallida(0).`);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log(`Error. Los datos no existen en /Admin/Eps/crearVariante.ts`);
|
||||
res.send(`exito: false\nerror: Los datos no existen.`);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports.crearVariante = crearVariante;
|
35
srv/Admin/Eps/estadisticas.ts
Normal file
35
srv/Admin/Eps/estadisticas.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import {Connection, MysqlError} from "mysql";
|
||||
import * as core from "express-serve-static-core";
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const YAML = require('yaml');
|
||||
|
||||
interface respuesta {
|
||||
peso: string
|
||||
}
|
||||
|
||||
const estadisticas = (req: core.Request, res: core.Response) => {
|
||||
|
||||
con.query(`SELECT peso FROM eps`,(err: MysqlError, respuestas: respuesta[]) => {
|
||||
if (!err) {
|
||||
|
||||
let totalMB = 0;
|
||||
let cantidadEps = 0;
|
||||
respuestas.forEach(data => {
|
||||
totalMB += parseInt(data.peso);
|
||||
cantidadEps++;
|
||||
});
|
||||
|
||||
const respuesta: any = {
|
||||
episodios: cantidadEps,
|
||||
gigas: (totalMB/1024).toFixed(2)
|
||||
};
|
||||
|
||||
res.send(YAML.stringify(respuesta));
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
module.exports.estadisticas = estadisticas;
|
39
srv/Admin/Eps/obtenerLinks.ts
Normal file
39
srv/Admin/Eps/obtenerLinks.ts
Normal file
@ -0,0 +1,39 @@
|
||||
interface epsRespuesta {
|
||||
ep_ID: number,
|
||||
opcion_ID: number,
|
||||
num_ep: number,
|
||||
visitas: number,
|
||||
link: string,
|
||||
peso: string
|
||||
}
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const obtenerLinks = (req: any, res: any) => {
|
||||
|
||||
const YAML = require('yaml');
|
||||
|
||||
const opcion_ID = req.params.opcion_ID;
|
||||
|
||||
if (opcion_ID) {
|
||||
|
||||
const query = `SELECT * FROM eps WHERE opcion_ID=${opcion_ID}`;
|
||||
con.query(query, (err: Error, response: epsRespuesta[]) => {
|
||||
if (!err) {
|
||||
|
||||
res.send(YAML.stringify(response));
|
||||
|
||||
} else {
|
||||
console.log("Error al ejecutar query en /Admin/Eps/obtenerEps con.query (linea 21). Query:\n" + query + "\nError: \n" + err);
|
||||
res.send("error: true");
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log("Error. opcion_ID no existe en /Admin/Eps/obtenerEps con.connect (linea 8)");
|
||||
res.send("error: true");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports.obtenerLinks = obtenerLinks;
|
41
srv/Admin/Eps/obtenerVariantes.ts
Normal file
41
srv/Admin/Eps/obtenerVariantes.ts
Normal file
@ -0,0 +1,41 @@
|
||||
interface respuestaLinks {
|
||||
opcion_ID: number,
|
||||
links_ID: number,
|
||||
num_opcion: number,
|
||||
formato: string,
|
||||
res: string,
|
||||
servidor: string,
|
||||
color: string
|
||||
}
|
||||
|
||||
import {con} from "../../index";
|
||||
|
||||
const obtenerVariantes = (req: any, res: any) => {
|
||||
|
||||
const YAML = require('yaml');
|
||||
|
||||
const anime_ID: string = req.params.anime_ID;
|
||||
|
||||
if (anime_ID) {
|
||||
|
||||
const query = `SELECT * FROM links_opciones WHERE links_ID=(SELECT links_ID FROM links WHERE anime_ID=${anime_ID})`;
|
||||
|
||||
con.query (query, (err: Error, response: respuestaLinks[]) => {
|
||||
if (!err) {
|
||||
|
||||
res.send(YAML.stringify(response));
|
||||
|
||||
} else {
|
||||
console.log("Error al ejecutar query sql. La query era:\n" + query + "\n y el error es:\n" + err);
|
||||
res.send("error: true");
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log("Error. anime_ID no existe en Admin/Eps/obtenerVariantes con.connect:\n" + anime_ID);
|
||||
res.send("error: true");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
module.exports.obtenerVariantes = obtenerVariantes;
|
@ -2,7 +2,6 @@ import { con } from "../index"
|
||||
import YAML from "yaml"
|
||||
|
||||
export default (req, res) ->
|
||||
|
||||
if req.params.id?
|
||||
idAnime = req.params.id
|
||||
|
||||
|
@ -2,7 +2,6 @@ import { con } from "../index"
|
||||
import YAML from "yaml"
|
||||
|
||||
export default (req, res) ->
|
||||
|
||||
query = "SELECT * FROM animes ORDER BY anime_ID DESC "
|
||||
con.query query, (err, respuesta) ->
|
||||
res.send do ->
|
||||
|
24
srv/GestorDeTareas/GestorDeTareas.ts
Normal file
24
srv/GestorDeTareas/GestorDeTareas.ts
Normal file
@ -0,0 +1,24 @@
|
||||
class GestorDeTareas {
|
||||
tareas: boolean[] = [];
|
||||
alCompletar: (() => void);
|
||||
|
||||
constructor(alCompletar: (() => void)) {
|
||||
this.alCompletar = alCompletar;
|
||||
}
|
||||
|
||||
agregarTarea() {
|
||||
return (this.tareas.push(false) - 1);
|
||||
}
|
||||
|
||||
terminarTarea() {
|
||||
this.tareas.pop();
|
||||
this.verificarTareas();
|
||||
}
|
||||
|
||||
verificarTareas() {
|
||||
if (this.tareas.length === 0)
|
||||
this.alCompletar();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.GestorDeTareas = GestorDeTareas;
|
33
srv/Links/crearLinks.coffee
Normal file
33
srv/Links/crearLinks.coffee
Normal file
@ -0,0 +1,33 @@
|
||||
import {con} from "../index"
|
||||
import YAML from "yaml"
|
||||
|
||||
export fun = (req, res) ->
|
||||
|
||||
params = req.body.params
|
||||
if params?
|
||||
|
||||
params = YAML.parse params
|
||||
sql = "INSERT INTO eps (opcion_ID, num_ep, visitas, link, peso) VALUES (?, ?, ?, ?, ?)"
|
||||
datos = [params.opcion_ID, params.num_ep, params.visitas, params.link, params.peso]
|
||||
con.query sql, datos, (err) ->
|
||||
unless err?
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload: {}
|
||||
error: {}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "Error al ejecutar consulta a la base de datos."
|
||||
ruta: "/Links/crearLinks"
|
||||
adicional: "sql: \n#{err.sql}\nerr:\n#{err}"
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "No se pasaron los params."
|
||||
ruta: "/Links/crearLinks"
|
||||
adicional: ""
|
38
srv/LinksAnimes/modificarLink.ts
Normal file
38
srv/LinksAnimes/modificarLink.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import {con} from "../index";
|
||||
|
||||
const modificarLink = (req: any, res: any) => {
|
||||
|
||||
const ep_ID = req.body.ep_ID;
|
||||
|
||||
const sql1= `SELECT visitas FROM eps WHERE ep_ID=${ep_ID}`;
|
||||
const sql = `UPDATE eps SET visitas = visitas + 1 WHERE ep_ID=${ep_ID}`;
|
||||
con.query(
|
||||
sql1,
|
||||
(err: Error, respuesta: {visitas: number}[]) => {
|
||||
if (!err) {
|
||||
|
||||
const nuevoNumVisitas = respuesta[0].visitas + 1;
|
||||
const sql2 = `UPDATE eps SET visitas=${nuevoNumVisitas} WHERE ep_ID=${ep_ID}`;
|
||||
|
||||
con.query(sql2, (err: Error) => {
|
||||
if (!err) {
|
||||
res.send("Exito");
|
||||
} else {
|
||||
res.send("Error");
|
||||
console.log(`Error al actualizar el contador de clicks del ep ${ep_ID} en \
|
||||
LinksAnimes/modificarLinks:\n${err}\nSQL:\n${sql2}`);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
console.log(`Error al actualizar el contador de clicks del ep ${ep_ID} en \
|
||||
LinksAnimes/modificarLinks:\n${err}\nSQL:\n${sql1}`);
|
||||
res.send("Error :c");
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
module.exports.modificarLinks = modificarLink;
|
115
srv/LinksAnimes/obtenerLinks.coffee
Normal file
115
srv/LinksAnimes/obtenerLinks.coffee
Normal file
@ -0,0 +1,115 @@
|
||||
YAML = require("yaml")
|
||||
con = require("../index").con
|
||||
|
||||
class GestorDeTareas
|
||||
constructor: (@alCompletar) ->
|
||||
@tareas = []
|
||||
|
||||
agregarTarea: -> @tareas.push(false) - 1
|
||||
|
||||
terminarTarea: ->
|
||||
@tareas.pop()
|
||||
@verificarTareas()
|
||||
|
||||
verificarTareas: ->
|
||||
if @tareas.length is 0 then @alCompletar()
|
||||
|
||||
export obtenerLinks = (req, res) ->
|
||||
animeID = req.body.animeID
|
||||
|
||||
if animeID?
|
||||
retorno =
|
||||
aviso: ""
|
||||
sigEp: ""
|
||||
opciones: {}
|
||||
sql = "SELECT * FROM links WHERE anime_ID=#{animeID}"
|
||||
con.query sql, (err, response) ->
|
||||
if not err? and response?.length isnt 0
|
||||
|
||||
link = response[0]
|
||||
retorno.aviso = link.aviso
|
||||
retorno.sigEp = link.sigEp
|
||||
|
||||
gestorOpciones = new GestorDeTareas () ->
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload: retorno
|
||||
error: {}
|
||||
|
||||
sql2 = "SELECT * FROM links_opciones WHERE links_ID=#{link.links_ID}"
|
||||
|
||||
con.query sql2, (err, response2) ->
|
||||
if not err? and response2?.length isnt 0
|
||||
|
||||
response2.forEach (opcion, pos) ->
|
||||
|
||||
gestorOpciones.agregarTarea()
|
||||
|
||||
retorno.opciones[opcion.num_opcion] =
|
||||
formato: opcion.formato
|
||||
res: opcion.res
|
||||
servidor: opcion.res
|
||||
color: opcion.color
|
||||
eps: {}
|
||||
|
||||
sql3 = "SELECT * FROM eps WHERE opcion_ID=#{opcion.opcion_ID}"
|
||||
con.query sql3, (err, response3) ->
|
||||
if not err? and response3?.length isnt 0
|
||||
|
||||
response3.forEach (ep) ->
|
||||
retorno.opciones[opcion.num_opcion].eps[ep.num_ep] =
|
||||
ep_ID: ep.ep_ID
|
||||
visitar: ep.visitas
|
||||
peso: ep.peso
|
||||
link: ep.link
|
||||
|
||||
else if response3?.length isnt 0
|
||||
console.log "Error al consultar eps en /LinksAnimes/obtenerLinks.\n err: #{err}\n sql: #{sql3}"
|
||||
|
||||
gestorOpciones.terminarTarea()
|
||||
|
||||
else if response2?.length is 0
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error: {
|
||||
razon: "La consulta no dió ningún resultado."
|
||||
ruta: "/LinksAnimes/obtenerLinks"
|
||||
adicional: "(response2) SQL: #{sql2}\nanimeID: #{animeID}"
|
||||
}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error: {
|
||||
razon: "Error al ejecutar consulta."
|
||||
ruta: "/LinksAnimes/obtenerLinks"
|
||||
adicional: "(response2) sql: #{sql2}"
|
||||
}
|
||||
|
||||
else if response.length is 0
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error: {
|
||||
razon: "La consulta no dió ningún resultado."
|
||||
ruta: "/LinksAnimes/obtenerLinks"
|
||||
adicional: "SQL: #{sql}\nanimeID: #{animeID}"
|
||||
}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error: {
|
||||
razon: "Error al ejecutar consulta."
|
||||
ruta: "/LinksAnimes/obtenerLinks"
|
||||
adicional: "sql: #{sql}"
|
||||
}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "No se envió un animeID"
|
||||
ruta: "/LinksAnimes/obtenerLinks"
|
||||
adicional: "valor: #{animeID}"
|
14
srv/Notificaciones/RegistrarSubcripcion.coffee
Normal file
14
srv/Notificaciones/RegistrarSubcripcion.coffee
Normal file
@ -0,0 +1,14 @@
|
||||
con = require("../index").con
|
||||
|
||||
export fun = (req, res) ->
|
||||
|
||||
google_ID = req.body.google_ID
|
||||
subscripcion = req.body.subscripcion
|
||||
|
||||
query = "INSERT INTO navegadores (google_ID, animesSuscritos, susbscripcion) VALUES (?, ?, ?); SELECT LAST_INSERT_ID()"
|
||||
datos = [google_ID, subscripcion, "{}"]
|
||||
con.query query, datos, (err, respuesta) ->
|
||||
unless err?
|
||||
res.status(201).json {exito: true, payload: idInsertado: respuesta[1][0]}
|
||||
else
|
||||
res.status(400).json {exito: false, razon: err}
|
32
srv/OP-ED/obtenerED.coffee
Normal file
32
srv/OP-ED/obtenerED.coffee
Normal file
@ -0,0 +1,32 @@
|
||||
import {con} from "../index"
|
||||
import YAML from "yaml"
|
||||
|
||||
export fun = (req, res) ->
|
||||
anime_ID = req.params.anime_ID
|
||||
|
||||
if anime_ID?
|
||||
sql = "SELECT * FROM ed WHERE anime_ID=? ORDER BY num_ED ASC "
|
||||
datos = [anime_ID]
|
||||
con.query sql, datos, (err, respuesta) ->
|
||||
unless err?
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload: respuesta
|
||||
error: {}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "Error al ejecutar consulta a la base de datos."
|
||||
ruta: "/Op-ED/obtenerED"
|
||||
adicional: "Query: \n#{err.query}\nError: \n#{err}"
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "No se envio ningun anime_ID. Actual: #{anime_ID}"
|
||||
ruta: "/Op-ED/obtenerED"
|
||||
adicional: {}
|
||||
#
|
32
srv/OP-ED/obtenerOP.coffee
Normal file
32
srv/OP-ED/obtenerOP.coffee
Normal file
@ -0,0 +1,32 @@
|
||||
import {con} from "../index"
|
||||
import YAML from "yaml"
|
||||
|
||||
export fun = (req, res) ->
|
||||
anime_ID = req.params.anime_ID
|
||||
|
||||
if anime_ID?
|
||||
sql = "SELECT * FROM op WHERE anime_ID=? ORDER BY num_OP ASC"
|
||||
datos = [anime_ID]
|
||||
con.query sql, datos, (err, respuesta) ->
|
||||
unless err?
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload: respuesta
|
||||
error: {}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "Error al ejecutar consulta a la base de datos."
|
||||
ruta: "/Op-ED/obtenerOP"
|
||||
adicional: "Query: \n#{err.query}\nError: \n#{err}"
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "No se envio ningun anime_ID. Actual: #{anime_ID}"
|
||||
ruta: "/Op-ED/obtenerOP"
|
||||
adicional: {}
|
||||
#
|
84
srv/Usuarios/ValidarUsuario.coffee
Normal file
84
srv/Usuarios/ValidarUsuario.coffee
Normal file
@ -0,0 +1,84 @@
|
||||
CLIENT_ID = "27783367584-1hms6h62heplhlvsaihl8vqs7ho3o2b7.apps.googleusercontent.com"
|
||||
OAuth2Client = require("google-auth-library").OAuth2Client
|
||||
cliente = new OAuth2Client CLIENT_ID
|
||||
YAML = require("yaml")
|
||||
con = require("../index").con
|
||||
|
||||
verificar = (token) ->
|
||||
new Promise (resolve, reject) ->
|
||||
cliente.verifyIdToken
|
||||
idToken: token
|
||||
audience: CLIENT_ID
|
||||
.then (ticket) ->
|
||||
ticket.getPayload()
|
||||
.then (res) -> resolve res
|
||||
.catch (err) -> reject err
|
||||
|
||||
export fun = (req, res) ->
|
||||
idToken = req.body.idToken
|
||||
if idToken?
|
||||
verificar idToken
|
||||
|
||||
.then (payload) ->
|
||||
sql1 = "SELECT * FROM usuarios WHERE google_ID=?"
|
||||
datos = [payload.sub]
|
||||
con.query sql1, datos, (err, resultadoQ) ->
|
||||
unless err?
|
||||
if resultadoQ[0]?
|
||||
usuario = resultadoQ[0]
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload:
|
||||
user_ID: usuario.user_ID
|
||||
nombre: usuario.nombre
|
||||
email: usuario.email
|
||||
fotoPerfil: usuario.fotoPerfil
|
||||
googleID: usuario.google_ID
|
||||
error: {}
|
||||
else
|
||||
sql = "INSERT INTO usuarios (google_ID, email, fotoPerfil, nombre) VALUES (?, ?, ?, ?)"
|
||||
datos2 = [payload.sub, payload.email, payload.picture, payload.name]
|
||||
con.query sql, datos2, (err) ->
|
||||
unless err?
|
||||
res.send YAML.stringify
|
||||
exito: true
|
||||
payload:
|
||||
nombre: payload.nombre
|
||||
email: payload.email
|
||||
fotoPerfil: payload.picture
|
||||
googleID: payload.sub
|
||||
error: {}
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "Error al ejecutar consulta a la base de datos.\n#{err}"
|
||||
ruta: "/Usuarios/ValidarUsuario"
|
||||
adicional: "query: #{err.sql}\ntoken Verificado: #{JSON.stringify payload}"
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "Error al ejecutar consulta a la base de datos.\n#{err}"
|
||||
ruta: "/Usuarios/ValidarUsuario"
|
||||
adicional: "query: #{err.sql}"
|
||||
.catch (err) ->
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: err
|
||||
ruta: "/Usuarios/ValidarUsuario"
|
||||
adicional: ""
|
||||
|
||||
else
|
||||
res.send YAML.stringify
|
||||
exito: false
|
||||
payload: {}
|
||||
error:
|
||||
razon: "No se envió el token: #{idToken}"
|
||||
ruta: "/Usuarios/ValidarUsuario"
|
||||
adicional: ""
|
||||
#
|
81
srv/index.js
81
srv/index.js
@ -1,27 +1,70 @@
|
||||
import express from 'express';
|
||||
import mysql from "mysql";
|
||||
|
||||
import obtenerAnimes from "./Anime/obtenerAnime"
|
||||
import obtenerTodosAnimes from "./Anime/obtenerTodosAnimes"
|
||||
|
||||
export const con = mysql.createConnection({
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var mysql = require("mysql");
|
||||
var obtenerAnime_1 = require("./Anime/obtenerAnime");
|
||||
var obtenerTodosAnimes_1 = require("./Anime/obtenerTodosAnimes");
|
||||
var webPush = require("web-push");
|
||||
exports.con = mysql.createConnection({
|
||||
host: "127.0.0.1",
|
||||
user: "pseubntq_araozu",
|
||||
password: "@Xsakah4b",
|
||||
database: "pseubntq_pseudosubs"
|
||||
database: "pseubntq_pseudosubs",
|
||||
multipleStatements: true
|
||||
});
|
||||
con.connect(err => {
|
||||
exports.con.connect(function (err) {
|
||||
if (err) {
|
||||
console.log("Error al conectarse a la base de datos :c\n" + err);
|
||||
} else {
|
||||
console.error("Error al conectarse a la base de datos :c\n" + err);
|
||||
}
|
||||
else {
|
||||
console.log("Exito al conectarse a la base de datos :D");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
export default (app, http) => {
|
||||
|
||||
app.get("/anime/:id", obtenerAnimes);
|
||||
app.get("/anime", obtenerTodosAnimes);
|
||||
|
||||
}
|
||||
exports.fun = function (app) {
|
||||
var bodyParser = require("body-parser");
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
// app.use(bodyParser.json);
|
||||
webPush.setVapidDetails("mailto:tbyuyfcjjll@gmail.com", "BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI", "6dOp0WChG-fLFSo9hRnMUn5S1BVBm3KhK9r0m4L-GoA");
|
||||
app.post("/anime/:id", obtenerAnime_1.default);
|
||||
app.post("/anime", obtenerTodosAnimes_1.default);
|
||||
app.post("/u/validar", require("./Usuarios/ValidarUsuario").fun);
|
||||
app.post("/n/registrar", require("./Notificaciones/RegistrarSubcripcion").fun);
|
||||
app.post("/op/:anime_ID", require("./OP-ED/obtenerOP").fun);
|
||||
app.post("/ed/:anime_ID", require("./OP-ED/obtenerED").fun);
|
||||
app.post("/eps/links/", require("./Links/crearLinks").fun);
|
||||
/**
|
||||
* Rutas Legacy :c */
|
||||
app.post('/links', require('./LinksAnimes/obtenerLinks').obtenerLinks);
|
||||
app.put('/links', require('./LinksAnimes/modificarLink').modificarLinks);
|
||||
app.post('/eps/variantes/:anime_ID', require('./Admin/Eps/obtenerVariantes').obtenerVariantes);
|
||||
app.put('/eps/variantes/', require('./Admin/Eps/crearVariante').crearVariante);
|
||||
app.put('/eps/mensaje/', require('./Admin/Eps/cambiarMensaje').cambiarMensaje);
|
||||
app.post('/eps/links/:opcion_ID', require('./Admin/Eps/obtenerLinks').obtenerLinks);
|
||||
app.post('/estadisticas', require('./Admin/Eps/estadisticas').estadisticas);
|
||||
// Fin
|
||||
/*
|
||||
* Claves VAPID
|
||||
* Publica: BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI
|
||||
* Privada: 6dOp0WChG-fLFSo9hRnMUn5S1BVBm3KhK9r0m4L-GoA
|
||||
* */
|
||||
app.get("/n/test", function (req, res) {
|
||||
console.log("Deberia enviar push...");
|
||||
var payload = JSON.stringify({
|
||||
title: "Push de ejemplo :3"
|
||||
});
|
||||
var subscripcion = { "endpoint": "https://fcm.googleapis.com/fcm/send/e-n6_jndfTw:APA91bGQrFOYgICLRm-diDHwJnI4909TiQB_FqnffBd6PnyyoiB2rDqehn41KxXMyw5Upa0IqqDnlr58-n3B9w6WCN6xY-sluDk8fpya928S_NPgJyAvbhFERN3Gqqy36s4J4OVDz6qL", "expirationTime": null, "keys": { "p256dh": "BGNpJIqpEkJPjVZcccV42TdXQi-G3nt6gVWXIMkRs69fWyQeLN7K-sEBs7ffyCiosJm4ApwY9_ol2Q57Zv5fg08", "auth": "DzzSWijI-WfBPWrI6eGcuw" } };
|
||||
webPush.sendNotification(subscripcion, payload)
|
||||
.then(function (response) {
|
||||
console.log(JSON.stringify(response));
|
||||
res.status(200);
|
||||
res.send("Exito :D");
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.log(JSON.stringify(err));
|
||||
res.status(400);
|
||||
res.send("Error al enviar push :c\n" + err);
|
||||
});
|
||||
});
|
||||
};
|
||||
exports.default = (function (app, http) {
|
||||
exports.fun(app);
|
||||
});
|
||||
|
94
srv/index.ts
Normal file
94
srv/index.ts
Normal file
@ -0,0 +1,94 @@
|
||||
const mysql = require("mysql");
|
||||
|
||||
import obtenerAnimes from "./Anime/obtenerAnime"
|
||||
import obtenerTodosAnimes from "./Anime/obtenerTodosAnimes"
|
||||
|
||||
const webPush = require("web-push");
|
||||
|
||||
export const con = mysql.createConnection({
|
||||
host: "127.0.0.1",
|
||||
user: "pseubntq_araozu",
|
||||
password: "@Xsakah4b",
|
||||
database: "pseubntq_pseudosubs",
|
||||
multipleStatements: true
|
||||
});
|
||||
con.connect(err => {
|
||||
if (err) {
|
||||
console.error("Error al conectarse a la base de datos :c\n" + err);
|
||||
} else {
|
||||
console.log("Exito al conectarse a la base de datos :D");
|
||||
}
|
||||
});
|
||||
|
||||
export const fun = app => {
|
||||
const bodyParser = require("body-parser");
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
// app.use(bodyParser.json);
|
||||
|
||||
webPush.setVapidDetails(
|
||||
"mailto:tbyuyfcjjll@gmail.com",
|
||||
"BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI",
|
||||
"6dOp0WChG-fLFSo9hRnMUn5S1BVBm3KhK9r0m4L-GoA"
|
||||
);
|
||||
|
||||
app.post("/anime/:id", obtenerAnimes);
|
||||
app.post("/anime", obtenerTodosAnimes);
|
||||
|
||||
app.post("/u/validar", require("./Usuarios/ValidarUsuario").fun);
|
||||
|
||||
app.post("/n/registrar", require("./Notificaciones/RegistrarSubcripcion").fun);
|
||||
|
||||
app.post("/op/:anime_ID", require("./OP-ED/obtenerOP").fun);
|
||||
app.post("/ed/:anime_ID", require("./OP-ED/obtenerED").fun);
|
||||
|
||||
app.post("/eps/links/", require("./Links/crearLinks").fun);
|
||||
|
||||
/**
|
||||
* Rutas Legacy :c */
|
||||
|
||||
app.post('/links', require('./LinksAnimes/obtenerLinks').obtenerLinks);
|
||||
app.put('/links', require('./LinksAnimes/modificarLink').modificarLinks);
|
||||
|
||||
app.post('/eps/variantes/:anime_ID', require('./Admin/Eps/obtenerVariantes').obtenerVariantes);
|
||||
app.put('/eps/variantes/', require('./Admin/Eps/crearVariante').crearVariante);
|
||||
app.put('/eps/mensaje/', require('./Admin/Eps/cambiarMensaje').cambiarMensaje);
|
||||
app.post('/eps/links/:opcion_ID', require('./Admin/Eps/obtenerLinks').obtenerLinks);
|
||||
|
||||
app.post('/estadisticas', require('./Admin/Eps/estadisticas').estadisticas);
|
||||
|
||||
// Fin
|
||||
|
||||
/*
|
||||
* Claves VAPID
|
||||
* Publica: BPA_MfechJ8EwyMC_5-GZsWFtjPCD6f2qAzW5ouxnMs73mGTsgtD47of0pO1rKtpyWiWKE8yZVHHzTGhLHbfVRI
|
||||
* Privada: 6dOp0WChG-fLFSo9hRnMUn5S1BVBm3KhK9r0m4L-GoA
|
||||
* */
|
||||
|
||||
app.get("/n/test", (req, res) => {
|
||||
|
||||
console.log("Deberia enviar push...");
|
||||
|
||||
const payload = JSON.stringify({
|
||||
title: "Push de ejemplo :3"
|
||||
});
|
||||
|
||||
const subscripcion = {"endpoint":"https://fcm.googleapis.com/fcm/send/e-n6_jndfTw:APA91bGQrFOYgICLRm-diDHwJnI4909TiQB_FqnffBd6PnyyoiB2rDqehn41KxXMyw5Upa0IqqDnlr58-n3B9w6WCN6xY-sluDk8fpya928S_NPgJyAvbhFERN3Gqqy36s4J4OVDz6qL","expirationTime":null,"keys":{"p256dh":"BGNpJIqpEkJPjVZcccV42TdXQi-G3nt6gVWXIMkRs69fWyQeLN7K-sEBs7ffyCiosJm4ApwY9_ol2Q57Zv5fg08","auth":"DzzSWijI-WfBPWrI6eGcuw"}};
|
||||
|
||||
webPush.sendNotification(subscripcion, payload)
|
||||
.then(response => {
|
||||
console.log(JSON.stringify(response));
|
||||
res.status(200);
|
||||
res.send("Exito :D");
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(JSON.stringify(err));
|
||||
res.status(400);
|
||||
res.send(`Error al enviar push :c\n${err}`);
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
export default (app, http) => {
|
||||
fun(app);
|
||||
}
|
43
srv/tsconfig.json
Normal file
43
srv/tsconfig.json
Normal file
@ -0,0 +1,43 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"jsx": "preserve",
|
||||
"importHelpers": true,
|
||||
"moduleResolution": "node",
|
||||
"experimentalDecorators": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"sourceMap": false,
|
||||
"baseUrl": ".",
|
||||
"removeComments": true,
|
||||
"types": [
|
||||
"webpack-env"
|
||||
],
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
},
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"scripthost"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue",
|
||||
"tests/**/*.ts",
|
||||
"tests/**/*.tsx"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist",
|
||||
"build",
|
||||
"node.d.ts"
|
||||
]
|
||||
}
|
@ -20,5 +20,11 @@ module.exports = {
|
||||
runtimeCompiler: undefined,
|
||||
productionSourceMap: false,
|
||||
parallel: undefined,
|
||||
css: undefined
|
||||
css: undefined,
|
||||
|
||||
pwa: {
|
||||
workboxOptions: {
|
||||
skipWaiting: true
|
||||
}
|
||||
}
|
||||
};
|
||||
|
439
yarn.lock
439
yarn.lock
@ -669,6 +669,14 @@
|
||||
lodash "^4.17.11"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@icetee/ftp@^0.3.15":
|
||||
version "0.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@icetee/ftp/-/ftp-0.3.15.tgz#d32efd91ab7585f0a3b6cbed9ceffe2763b04ec6"
|
||||
integrity sha512-RxSa9VjcDWgWCYsaLdZItdCnJj7p4LxggaEk+Y3MP0dHKoxez8ioG07DVekVbZZqccsrL+oPB/N9AzVPxj4blg==
|
||||
dependencies:
|
||||
readable-stream "1.1.x"
|
||||
xregexp "2.0.0"
|
||||
|
||||
"@intervolga/optimize-cssnano-plugin@^1.0.5":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8"
|
||||
@ -712,11 +720,43 @@
|
||||
dependencies:
|
||||
"@types/babel-types" "*"
|
||||
|
||||
"@types/body-parser@*":
|
||||
version "1.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
|
||||
integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
|
||||
dependencies:
|
||||
"@types/connect" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/connect@*":
|
||||
version "3.4.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
|
||||
integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/events@*":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
|
||||
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
|
||||
|
||||
"@types/express-serve-static-core@*":
|
||||
version "4.16.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz#56bb8be4559401d68af4a3624ae9dd3166103e60"
|
||||
integrity sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/range-parser" "*"
|
||||
|
||||
"@types/express@^4.16.1":
|
||||
version "4.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0"
|
||||
integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==
|
||||
dependencies:
|
||||
"@types/body-parser" "*"
|
||||
"@types/express-serve-static-core" "*"
|
||||
"@types/serve-static" "*"
|
||||
|
||||
"@types/glob@^7.1.1":
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
|
||||
@ -726,11 +766,23 @@
|
||||
"@types/minimatch" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/mime@*":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
|
||||
integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||
|
||||
"@types/mysql@^2.15.6":
|
||||
version "2.15.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.6.tgz#8718a66e362a4cfde73fe731792bdf453ef3a541"
|
||||
integrity sha512-PJBY2R3jGJwGrmFgGAJ+1nj4S/PLkF6nT+HvUygniq9ZcVht0mTH1TLAjjyfIXf9FfrELs8mbqOrWa/Tn89NCA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*":
|
||||
version "11.11.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.8.tgz#ff5e4e7896549e5725cf88d711e8c003984b2413"
|
||||
@ -741,6 +793,19 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
|
||||
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
|
||||
|
||||
"@types/range-parser@*":
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
|
||||
integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
|
||||
|
||||
"@types/serve-static@*":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
|
||||
integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
|
||||
dependencies:
|
||||
"@types/express-serve-static-core" "*"
|
||||
"@types/mime" "*"
|
||||
|
||||
"@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.3":
|
||||
version "1.0.0-beta.3"
|
||||
resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.3.tgz#e4c2e7125b3e0d2a9d493e457850b2abb0fd3cad"
|
||||
@ -1107,6 +1172,13 @@ abbrev@1:
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
abort-controller@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||
integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
|
||||
dependencies:
|
||||
event-target-shim "^5.0.0"
|
||||
|
||||
accepts@~1.3.4, accepts@~1.3.5:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
|
||||
@ -1159,6 +1231,13 @@ address@^1.0.3:
|
||||
resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
|
||||
integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==
|
||||
|
||||
agent-base@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
|
||||
dependencies:
|
||||
es6-promisify "^5.0.0"
|
||||
|
||||
ajv-errors@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
|
||||
@ -1356,6 +1435,15 @@ asn1.js@^4.0.0:
|
||||
inherits "^2.0.1"
|
||||
minimalistic-assert "^1.0.0"
|
||||
|
||||
asn1.js@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.0.1.tgz#7668b56416953f0ce3421adbb3893ace59c96f59"
|
||||
integrity sha512-aO8EaEgbgqq77IEw+1jfx5c9zTbzvkfuRBuZsSsPnTHMkmd5AI4J6OtITLZFa381jReeaQL67J0GBTUu0+ZTVw==
|
||||
dependencies:
|
||||
bn.js "^4.0.0"
|
||||
inherits "^2.0.1"
|
||||
minimalistic-assert "^1.0.0"
|
||||
|
||||
asn1@~0.2.3:
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
||||
@ -1506,7 +1594,7 @@ balanced-match@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
base64-js@^1.0.2:
|
||||
base64-js@^1.0.2, base64-js@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
|
||||
integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
|
||||
@ -1556,10 +1644,10 @@ big.js@^5.2.2:
|
||||
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
|
||||
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
|
||||
|
||||
bignumber.js@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1"
|
||||
integrity sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==
|
||||
bignumber.js@7.2.1, bignumber.js@^7.0.0:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
|
||||
integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==
|
||||
|
||||
binary-extensions@^1.0.0:
|
||||
version "1.13.0"
|
||||
@ -1573,6 +1661,11 @@ block-stream@*:
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@2.x:
|
||||
version "2.11.0"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
|
||||
integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=
|
||||
|
||||
bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3:
|
||||
version "3.5.3"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
||||
@ -1599,6 +1692,22 @@ body-parser@1.18.3:
|
||||
raw-body "2.3.3"
|
||||
type-is "~1.6.16"
|
||||
|
||||
body-parser@^1.19.0:
|
||||
version "1.19.0"
|
||||
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
|
||||
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
|
||||
dependencies:
|
||||
bytes "3.1.0"
|
||||
content-type "~1.0.4"
|
||||
debug "2.6.9"
|
||||
depd "~1.1.2"
|
||||
http-errors "1.7.2"
|
||||
iconv-lite "0.4.24"
|
||||
on-finished "~2.3.0"
|
||||
qs "6.7.0"
|
||||
raw-body "2.4.0"
|
||||
type-is "~1.6.17"
|
||||
|
||||
bonjour@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
|
||||
@ -1726,6 +1835,11 @@ browserslist@^4.0.0, browserslist@^4.4.2, browserslist@^4.5.1:
|
||||
electron-to-chromium "^1.3.116"
|
||||
node-releases "^1.1.11"
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||
|
||||
buffer-from@^1.0.0, buffer-from@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
@ -1760,6 +1874,11 @@ bytes@3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
|
||||
integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
|
||||
|
||||
bytes@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
|
||||
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
|
||||
|
||||
cacache@^10.0.4:
|
||||
version "10.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
|
||||
@ -2206,7 +2325,7 @@ compressible@~2.0.16:
|
||||
dependencies:
|
||||
mime-db ">= 1.38.0 < 2"
|
||||
|
||||
compression@^1.5.2:
|
||||
compression@^1.5.2, compression@^1.7.4:
|
||||
version "1.7.4"
|
||||
resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
|
||||
integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
|
||||
@ -2246,7 +2365,7 @@ configstore@^3.0.0:
|
||||
write-file-atomic "^2.0.0"
|
||||
xdg-basedir "^3.0.0"
|
||||
|
||||
connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.5.0:
|
||||
connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.5.0, connect-history-api-fallback@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
|
||||
integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
|
||||
@ -2982,6 +3101,13 @@ ecc-jsbn@~0.1.1:
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
@ -3083,6 +3209,18 @@ es-to-primitive@^1.2.0:
|
||||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.2"
|
||||
|
||||
es6-promise@^4.0.3:
|
||||
version "4.2.6"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
|
||||
integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
|
||||
|
||||
es6-promisify@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
|
||||
dependencies:
|
||||
es6-promise "^4.0.3"
|
||||
|
||||
escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
@ -3138,6 +3276,11 @@ event-pubsub@4.3.0:
|
||||
resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
|
||||
integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==
|
||||
|
||||
event-target-shim@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
|
||||
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
|
||||
|
||||
eventemitter3@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
|
||||
@ -3220,7 +3363,7 @@ express-list-endpoints@^3.0.1:
|
||||
resolved "https://registry.yarnpkg.com/express-list-endpoints/-/express-list-endpoints-3.0.1.tgz#d304fe9457ad14b8cf8692759398e3eea21abcb2"
|
||||
integrity sha512-Ul3OY7r7Lc84R4z/xI5Jx6wbMzxg61SQh4BhVNDIPPtim6vHPjrKY+QhYYM8FdOswjHZstGK7J0I6HYf8FKtVA==
|
||||
|
||||
express@^4.16.2, express@^4.16.3:
|
||||
express@^4.16.2, express@^4.16.3, express@^4.16.4:
|
||||
version "4.16.4"
|
||||
resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
|
||||
integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
|
||||
@ -3271,7 +3414,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
||||
assign-symbols "^1.0.0"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
extend@~3.0.2:
|
||||
extend@^3.0.2, extend@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
@ -3322,6 +3465,11 @@ fast-json-stable-stringify@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
||||
|
||||
fast-text-encoding@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef"
|
||||
integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==
|
||||
|
||||
fastparse@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
|
||||
@ -3551,6 +3699,17 @@ fstream@^1.0.0, fstream@^1.0.2:
|
||||
mkdirp ">=0.5 0"
|
||||
rimraf "2"
|
||||
|
||||
ftp-deploy@^2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/ftp-deploy/-/ftp-deploy-2.3.3.tgz#ea1c3be19533bae49fd27d3983b8d7b7e2a4e812"
|
||||
integrity sha512-JUpl90GX33q0QGfr8183EKhG00B+XI7HpdGrUPoV4izIxFUo7tQWeqmC7UyQZ3SrTSeO/+v47A8IlgolhSjSEQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.1"
|
||||
minimatch "3.0.4"
|
||||
promise-ftp "^1.3.5"
|
||||
read "^1.0.7"
|
||||
upath "^1.0.5"
|
||||
|
||||
function-bind@^1.0.2, function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
@ -3570,6 +3729,16 @@ gauge@~2.7.3:
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1:
|
||||
version "1.8.4"
|
||||
resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.8.4.tgz#e08c34fe93c0a9b67a52b7b9e7a64e6435f9a339"
|
||||
integrity sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
extend "^3.0.2"
|
||||
https-proxy-agent "^2.2.1"
|
||||
node-fetch "^2.3.0"
|
||||
|
||||
gaze@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
|
||||
@ -3577,6 +3746,14 @@ gaze@^1.0.0:
|
||||
dependencies:
|
||||
globule "^1.0.0"
|
||||
|
||||
gcp-metadata@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-1.0.0.tgz#5212440229fa099fc2f7c2a5cdcb95575e9b2ca6"
|
||||
integrity sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==
|
||||
dependencies:
|
||||
gaxios "^1.0.2"
|
||||
json-bigint "^0.3.0"
|
||||
|
||||
get-caller-file@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||
@ -3699,6 +3876,29 @@ globule@^1.0.0:
|
||||
lodash "~4.17.10"
|
||||
minimatch "~3.0.2"
|
||||
|
||||
google-auth-library@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.2.tgz#ff2f88cd5cd2118a57bd3d5ad3c093c8837fc350"
|
||||
integrity sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==
|
||||
dependencies:
|
||||
base64-js "^1.3.0"
|
||||
fast-text-encoding "^1.0.0"
|
||||
gaxios "^1.2.1"
|
||||
gcp-metadata "^1.0.0"
|
||||
gtoken "^2.3.2"
|
||||
https-proxy-agent "^2.2.1"
|
||||
jws "^3.1.5"
|
||||
lru-cache "^5.0.0"
|
||||
semver "^5.5.0"
|
||||
|
||||
google-p12-pem@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.4.tgz#b77fb833a2eb9f7f3c689e2e54f095276f777605"
|
||||
integrity sha512-SwLAUJqUfTB2iS+wFfSS/G9p7bt4eWcc2LyfvmUXe7cWp6p3mpxDo6LLI29MXdU6wvPcQ/up298X7GMC5ylAlA==
|
||||
dependencies:
|
||||
node-forge "^0.8.0"
|
||||
pify "^4.0.0"
|
||||
|
||||
got@^6.7.1:
|
||||
version "6.7.1"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
|
||||
@ -3721,6 +3921,17 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
|
||||
gtoken@^2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.3.tgz#8a7fe155c5ce0c4b71c886cfb282a9060d94a641"
|
||||
integrity sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==
|
||||
dependencies:
|
||||
gaxios "^1.0.4"
|
||||
google-p12-pem "^1.0.0"
|
||||
jws "^3.1.5"
|
||||
mime "^2.2.0"
|
||||
pify "^4.0.0"
|
||||
|
||||
gzip-size@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"
|
||||
@ -3955,6 +4166,17 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
|
||||
setprototypeof "1.1.0"
|
||||
statuses ">= 1.4.0 < 2"
|
||||
|
||||
http-errors@1.7.2:
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
|
||||
integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
|
||||
dependencies:
|
||||
depd "~1.1.2"
|
||||
inherits "2.0.3"
|
||||
setprototypeof "1.1.1"
|
||||
statuses ">= 1.5.0 < 2"
|
||||
toidentifier "1.0.0"
|
||||
|
||||
http-parser-js@>=0.4.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
|
||||
@ -3988,11 +4210,26 @@ http-signature@~1.2.0:
|
||||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
http_ece@1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/http_ece/-/http_ece-1.0.5.tgz#b60660faaf14215102d1493ea720dcd92b53372f"
|
||||
integrity sha1-tgZg+q8UIVEC0Uk+pyDc2StTNy8=
|
||||
dependencies:
|
||||
urlsafe-base64 "~1.0.0"
|
||||
|
||||
https-browserify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
||||
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
||||
|
||||
https-proxy-agent@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
|
||||
dependencies:
|
||||
agent-base "^4.1.0"
|
||||
debug "^3.1.0"
|
||||
|
||||
iconv-lite@0.4.23:
|
||||
version "0.4.23"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
|
||||
@ -4000,7 +4237,7 @@ iconv-lite@0.4.23:
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
iconv-lite@^0.4.4:
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.4:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||
@ -4468,6 +4705,11 @@ is-wsl@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
|
||||
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
|
||||
|
||||
isarray@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||
integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
|
||||
|
||||
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
@ -4585,6 +4827,13 @@ jsesc@~0.5.0:
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
|
||||
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
|
||||
|
||||
json-bigint@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e"
|
||||
integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=
|
||||
dependencies:
|
||||
bignumber.js "^7.0.0"
|
||||
|
||||
json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
@ -4666,6 +4915,23 @@ jstransformer@1.0.0:
|
||||
is-promise "^2.0.0"
|
||||
promise "^7.0.1"
|
||||
|
||||
jwa@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
|
||||
integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
|
||||
dependencies:
|
||||
buffer-equal-constant-time "1.0.1"
|
||||
ecdsa-sig-formatter "1.0.11"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
jws@^3.1.3, jws@^3.1.5:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
|
||||
integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
|
||||
dependencies:
|
||||
jwa "^1.4.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
killable@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
|
||||
@ -4912,7 +5178,7 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-cache@^5.1.1:
|
||||
lru-cache@^5.0.0, lru-cache@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||
@ -5064,6 +5330,11 @@ miller-rabin@^4.0.0:
|
||||
bn.js "^4.0.0"
|
||||
brorand "^1.0.1"
|
||||
|
||||
mime-db@1.40.0:
|
||||
version "1.40.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
|
||||
integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
|
||||
|
||||
"mime-db@>= 1.38.0 < 2", mime-db@~1.38.0:
|
||||
version "1.38.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
|
||||
@ -5076,6 +5347,13 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19:
|
||||
dependencies:
|
||||
mime-db "~1.38.0"
|
||||
|
||||
mime-types@~2.1.24:
|
||||
version "2.1.24"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
|
||||
integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
|
||||
dependencies:
|
||||
mime-db "1.40.0"
|
||||
|
||||
mime@1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
|
||||
@ -5086,6 +5364,11 @@ mime@^2.0.3, mime@^2.3.1:
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6"
|
||||
integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==
|
||||
|
||||
mime@^2.2.0:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78"
|
||||
integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==
|
||||
|
||||
mimic-fn@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
@ -5115,7 +5398,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
minimatch@^3.0.4, minimatch@~3.0.2:
|
||||
minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
@ -5237,12 +5520,17 @@ multicast-dns@^6.0.1:
|
||||
dns-packet "^1.3.1"
|
||||
thunky "^1.0.2"
|
||||
|
||||
mysql@^2.16.0:
|
||||
version "2.16.0"
|
||||
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.16.0.tgz#b23b22ab5de44fc2d5d32bd4f5af6653fc45e2ba"
|
||||
integrity sha512-dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==
|
||||
mute-stream@~0.0.4:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
mysql@^2.17.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.17.1.tgz#62bba4a039a9b2f73638cd1652ce50fc6f682899"
|
||||
integrity sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==
|
||||
dependencies:
|
||||
bignumber.js "4.1.0"
|
||||
bignumber.js "7.2.1"
|
||||
readable-stream "2.3.6"
|
||||
safe-buffer "5.1.2"
|
||||
sqlstring "2.3.1"
|
||||
@ -5300,11 +5588,21 @@ no-case@^2.2.0:
|
||||
dependencies:
|
||||
lower-case "^1.1.1"
|
||||
|
||||
node-fetch@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
|
||||
integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
|
||||
|
||||
node-forge@0.7.5:
|
||||
version "0.7.5"
|
||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
|
||||
integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==
|
||||
|
||||
node-forge@^0.8.0:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a"
|
||||
integrity sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==
|
||||
|
||||
node-gyp@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
|
||||
@ -5913,7 +6211,7 @@ pify@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
pify@^4.0.1:
|
||||
pify@^4.0.0, pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||
@ -6334,6 +6632,20 @@ process@^0.11.10:
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
promise-ftp-common@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/promise-ftp-common/-/promise-ftp-common-1.1.5.tgz#b4f8082a74035647703506763edb14230d9865da"
|
||||
integrity sha1-tPgIKnQDVkdwNQZ2PtsUIw2YZdo=
|
||||
|
||||
promise-ftp@^1.3.5:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/promise-ftp/-/promise-ftp-1.3.5.tgz#ecfa4a5e5b779a6bfdd4dd3096957b58286f5104"
|
||||
integrity sha512-v368jPSqzmjjKDIyggulC+dRFcpAOEX7aFdEWkFYQp8Ao3P2N4Y6XnFFdKgK7PtkylwvGQkZR/65HZuzmq0V7A==
|
||||
dependencies:
|
||||
"@icetee/ftp" "^0.3.15"
|
||||
bluebird "2.x"
|
||||
promise-ftp-common "^1.1.5"
|
||||
|
||||
promise-inflight@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||
@ -6548,6 +6860,11 @@ qs@6.5.2, qs@~6.5.2:
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||
|
||||
qs@6.7.0:
|
||||
version "6.7.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
|
||||
|
||||
querystring-es3@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
||||
@ -6593,6 +6910,16 @@ raw-body@2.3.3:
|
||||
iconv-lite "0.4.23"
|
||||
unpipe "1.0.0"
|
||||
|
||||
raw-body@2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
|
||||
integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
|
||||
dependencies:
|
||||
bytes "3.1.0"
|
||||
http-errors "1.7.2"
|
||||
iconv-lite "0.4.24"
|
||||
unpipe "1.0.0"
|
||||
|
||||
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
@ -6629,6 +6956,13 @@ read-pkg@^4.0.1:
|
||||
parse-json "^4.0.0"
|
||||
pify "^3.0.0"
|
||||
|
||||
read@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
|
||||
integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
|
||||
dependencies:
|
||||
mute-stream "~0.0.4"
|
||||
|
||||
"readable-stream@1 || 2", readable-stream@2.3.6, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
@ -6642,6 +6976,16 @@ read-pkg@^4.0.1:
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@1.1.x:
|
||||
version "1.1.14"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
|
||||
integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@^3.0.6, readable-stream@^3.1.1:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d"
|
||||
@ -7131,6 +7475,11 @@ setprototypeof@1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
|
||||
integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
|
||||
|
||||
setprototypeof@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
|
||||
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
|
||||
|
||||
sha.js@^2.4.0, sha.js@^2.4.8:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||
@ -7401,7 +7750,7 @@ static-extend@^0.1.1:
|
||||
define-property "^0.2.5"
|
||||
object-copy "^0.1.0"
|
||||
|
||||
"statuses@>= 1.4.0 < 2":
|
||||
"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||
@ -7497,6 +7846,11 @@ string_decoder@^1.0.0, string_decoder@^1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
@ -7760,6 +8114,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
|
||||
regex-not "^1.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
toidentifier@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
||||
|
||||
token-stream@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"
|
||||
@ -7873,6 +8232,14 @@ type-is@~1.6.16:
|
||||
media-typer "0.3.0"
|
||||
mime-types "~2.1.18"
|
||||
|
||||
type-is@~1.6.17:
|
||||
version "1.6.18"
|
||||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
||||
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
|
||||
dependencies:
|
||||
media-typer "0.3.0"
|
||||
mime-types "~2.1.24"
|
||||
|
||||
typedarray@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
@ -8000,7 +8367,7 @@ unzip-response@^2.0.1:
|
||||
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
|
||||
integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
|
||||
|
||||
upath@^1.1.1:
|
||||
upath@^1.0.5, upath@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
|
||||
integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
|
||||
@ -8070,6 +8437,11 @@ url@^0.11.0:
|
||||
punycode "1.3.2"
|
||||
querystring "0.2.0"
|
||||
|
||||
urlsafe-base64@^1.0.0, urlsafe-base64@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6"
|
||||
integrity sha1-I/iQaabGL0bPOh07ABac77kL4MY=
|
||||
|
||||
use@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
||||
@ -8156,6 +8528,11 @@ void-elements@^2.0.1:
|
||||
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
|
||||
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
|
||||
|
||||
vue-analytics@^5.16.4:
|
||||
version "5.16.4"
|
||||
resolved "https://registry.yarnpkg.com/vue-analytics/-/vue-analytics-5.16.4.tgz#7f9e197cbc64afac96884a05214b17efaf8e9d09"
|
||||
integrity sha512-M67cUqpPeyk2rftrvlx2uU+BQ/C4E8SkF2Ct9LizOYUoTccZtCCJwhMJfQ3XL8xep6p3K8KYz58FzRWvx5zlPw==
|
||||
|
||||
vue-cli-plugin-express@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/vue-cli-plugin-express/-/vue-cli-plugin-express-1.0.0.tgz#6d016e979daca646c20039139d2e5bbbb984b7a9"
|
||||
@ -8176,6 +8553,11 @@ vue-disqus@^3.0.5:
|
||||
resolved "https://registry.yarnpkg.com/vue-disqus/-/vue-disqus-3.0.5.tgz#8d0dd5cabdba7c47f82d129d2907a64366842fa8"
|
||||
integrity sha512-T3Y68lXf5W2lYt6j4Y3kZ4opLPH0EAzqriy11MS4D4Q2+UN0tFuUXeYP1MxfvdyaCEboXSM6CUswxsULuNV70Q==
|
||||
|
||||
vue-google-signin-button@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/vue-google-signin-button/-/vue-google-signin-button-1.0.2.tgz#71389a1233ece20c06aace0870acf54794b3af3c"
|
||||
integrity sha1-cTiaEjPs4gwGqs4IcKz1R5Szrzw=
|
||||
|
||||
vue-hot-reload-api@^2.3.0:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf"
|
||||
@ -8251,6 +8633,18 @@ wcwidth@^1.0.1:
|
||||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
web-push@^3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/web-push/-/web-push-3.3.3.tgz#8dc7c578dd1243ceb5a8377389424e87ea9b15cc"
|
||||
integrity sha512-Om4CNZpyzHP3AtGZpbBavCO7I9oCS9CFY2VDfTj/cFx2gm+mAtyK2OlKd6qu9pwCdZTyYanUiyhT0JSrs0ypHQ==
|
||||
dependencies:
|
||||
asn1.js "^5.0.0"
|
||||
http_ece "1.0.5"
|
||||
https-proxy-agent "^2.2.1"
|
||||
jws "^3.1.3"
|
||||
minimist "^1.2.0"
|
||||
urlsafe-base64 "^1.0.0"
|
||||
|
||||
webpack-bundle-analyzer@^3.0.4:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.1.0.tgz#2f19cbb87bb6d4f3cb4e59cb67c837bd9436e89d"
|
||||
@ -8607,6 +9001,11 @@ xdg-basedir@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
||||
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
|
||||
|
||||
xregexp@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
|
||||
integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
|
||||
|
||||
xregexp@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
|
||||
|
Loading…
Reference in New Issue
Block a user