├── herramientas ├── automatizacion │ ├── www │ │ └── index.html │ ├── package.json │ └── gulpfile.js └── scrapping │ ├── index.js │ └── package-lock.json ├── memoria ├── input.txt ├── buffer.js └── stream.js ├── modulos ├── archivo.txt ├── nativos │ ├── index.js │ ├── build │ │ ├── Release │ │ │ ├── addon.node │ │ │ ├── .deps │ │ │ │ └── Release │ │ │ │ │ ├── addon.node.d │ │ │ │ │ └── obj.target │ │ │ │ │ ├── addon.node.d │ │ │ │ │ └── addon │ │ │ │ │ └── hola.o.d │ │ │ └── obj.target │ │ │ │ ├── addon.node │ │ │ │ └── addon │ │ │ │ └── hola.o │ │ ├── binding.Makefile │ │ ├── config.gypi │ │ ├── addon.target.mk │ │ └── Makefile │ ├── binding.gyp │ ├── hola.cc │ └── README.md ├── globales.js ├── procesoHijo.js ├── os.js ├── fs.js ├── errores.js ├── process.js ├── consola.js └── http.js ├── README.md ├── paquetes ├── npm │ ├── index.js │ ├── package.json │ └── package-lock.json ├── modulo │ ├── es6 │ │ ├── index.mjs │ │ └── modulo.mjs │ ├── modulo.js │ └── index.js └── utiles │ ├── original.png │ ├── resized.png │ ├── sharp.js │ ├── moment.js │ ├── bcrypt.js │ ├── package.json │ └── package-lock.json ├── conceptos ├── entorno.js └── monohilo.js ├── trucos ├── errorFirst.js └── benchmarking.js ├── async ├── callback.js ├── asyncAwait.js ├── promises.js └── callbackHell.js └── .gitignore /herramientas/automatizacion/www/index.html: -------------------------------------------------------------------------------- 1 |

Hola mundo Node

-------------------------------------------------------------------------------- /memoria/input.txt: -------------------------------------------------------------------------------- 1 | soy 2 | un 3 | archiv 4 | que 5 | vamos 6 | a 7 | leer -------------------------------------------------------------------------------- /modulos/archivo.txt: -------------------------------------------------------------------------------- 1 | Hola, yo soy un archivo 2 | 3 | Y tengo varias lineas! -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fundamentos-node-platzi 2 | Curso de fundamentos de NodeJS en Platzi 3 | -------------------------------------------------------------------------------- /paquetes/npm/index.js: -------------------------------------------------------------------------------- 1 | const isOdd = require('is-odd'); 2 | 3 | console.log(isOdd(2)); 4 | -------------------------------------------------------------------------------- /modulos/nativos/index.js: -------------------------------------------------------------------------------- 1 | const miAddon = require('./build/Release/addon'); 2 | 3 | console.log(miAddon.hola()); -------------------------------------------------------------------------------- /paquetes/modulo/es6/index.mjs: -------------------------------------------------------------------------------- 1 | import modulo from './modulo.mjs' 2 | 3 | console.log(modulo.prop1); 4 | modulo.saludar(); -------------------------------------------------------------------------------- /paquetes/utiles/original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingCarlos/fundamentos-node-platzi/HEAD/paquetes/utiles/original.png -------------------------------------------------------------------------------- /paquetes/utiles/resized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingCarlos/fundamentos-node-platzi/HEAD/paquetes/utiles/resized.png -------------------------------------------------------------------------------- /modulos/nativos/build/Release/addon.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingCarlos/fundamentos-node-platzi/HEAD/modulos/nativos/build/Release/addon.node -------------------------------------------------------------------------------- /paquetes/utiles/sharp.js: -------------------------------------------------------------------------------- 1 | const sharp = require('sharp'); 2 | 3 | sharp('original.png') 4 | .resize(80) 5 | .grayscale() 6 | .toFile('resized.png'); -------------------------------------------------------------------------------- /modulos/nativos/binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "addon", 5 | "sources": [ "hola.cc" ] 6 | } 7 | ] 8 | } -------------------------------------------------------------------------------- /modulos/nativos/build/Release/.deps/Release/addon.node.d: -------------------------------------------------------------------------------- 1 | cmd_Release/addon.node := rm -rf "Release/addon.node" && cp -af "Release/obj.target/addon.node" "Release/addon.node" 2 | -------------------------------------------------------------------------------- /modulos/nativos/build/Release/obj.target/addon.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingCarlos/fundamentos-node-platzi/HEAD/modulos/nativos/build/Release/obj.target/addon.node -------------------------------------------------------------------------------- /modulos/nativos/build/Release/obj.target/addon/hola.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingCarlos/fundamentos-node-platzi/HEAD/modulos/nativos/build/Release/obj.target/addon/hola.o -------------------------------------------------------------------------------- /modulos/nativos/build/binding.Makefile: -------------------------------------------------------------------------------- 1 | # This file is generated by gyp; do not edit. 2 | 3 | export builddir_name ?= ./build/. 4 | .PHONY: all 5 | all: 6 | $(MAKE) addon 7 | -------------------------------------------------------------------------------- /paquetes/modulo/modulo.js: -------------------------------------------------------------------------------- 1 | function saludar() { 2 | console.log('Hola mundo!!'); 3 | } 4 | 5 | module.exports = { 6 | saludar, 7 | prop1: 'Hola que tal' 8 | }; 9 | -------------------------------------------------------------------------------- /paquetes/modulo/es6/modulo.mjs: -------------------------------------------------------------------------------- 1 | function saludar() { 2 | console.log('Hola mundo!!'); 3 | } 4 | 5 | export default { 6 | saludar, 7 | prop1: "Soy un modulo experimental", 8 | }; -------------------------------------------------------------------------------- /paquetes/modulo/index.js: -------------------------------------------------------------------------------- 1 | // Traer nuestro modulo 2 | const modulo = require('./modulo'); 3 | 4 | // ejecutar una funcion del modulo 5 | console.log(modulo.prop1); 6 | modulo.saludar(); -------------------------------------------------------------------------------- /paquetes/utiles/moment.js: -------------------------------------------------------------------------------- 1 | const moment = require('moment'); 2 | 3 | let ahora = moment(); 4 | 5 | // console.log(ahora.toString()); 6 | console.log(ahora.format('YYYY/MM/DD - HH:mm')); -------------------------------------------------------------------------------- /conceptos/entorno.js: -------------------------------------------------------------------------------- 1 | let nombre = process.env.NOMBRE || 'Sin nombre'; 2 | let web = process.env.MI_WEB || 'no tengo web'; 3 | 4 | console.log('Hola '+ nombre); 5 | console.log('Mi web es '+ web); 6 | -------------------------------------------------------------------------------- /modulos/nativos/build/Release/.deps/Release/obj.target/addon.node.d: -------------------------------------------------------------------------------- 1 | cmd_Release/obj.target/addon.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=addon.node -o Release/obj.target/addon.node -Wl,--start-group Release/obj.target/addon/hola.o -Wl,--end-group 2 | -------------------------------------------------------------------------------- /conceptos/monohilo.js: -------------------------------------------------------------------------------- 1 | console.log('Hola mundo'); 2 | let i = 0; 3 | setInterval(function() { 4 | console.log(i); 5 | i++; 6 | 7 | // if (i === 5) { 8 | // console.log('forzamos error'); 9 | // var a = 3 + z; 10 | // } 11 | }, 1000); 12 | 13 | console.log('Segunda instrucción'); 14 | -------------------------------------------------------------------------------- /paquetes/npm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "npm", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "is-odd": "^3.0.1" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /paquetes/utiles/bcrypt.js: -------------------------------------------------------------------------------- 1 | const bcrypt = require('bcrypt'); 2 | 3 | const password = '1234Segura!'; 4 | 5 | bcrypt.hash(password, 5, function(err, hash) { 6 | console.log(hash); 7 | 8 | bcrypt.compare('password', hash, function(err, res) { 9 | // console.log(err) 10 | console.log(res) 11 | }) 12 | }); -------------------------------------------------------------------------------- /memoria/buffer.js: -------------------------------------------------------------------------------- 1 | // let buffer = Buffer.alloc(4); 2 | // let buffer = Buffer.from([1, 2, 5]); 3 | let buffer = Buffer.from('Hola'); 4 | 5 | // console.log(buffer); 6 | 7 | // -- 8 | 9 | let abc = Buffer.alloc(26); 10 | console.log(abc); 11 | 12 | for (let i = 0; i < 26; i++) { 13 | abc[i] = i + 97; 14 | } 15 | 16 | console.log(abc.toString()); 17 | -------------------------------------------------------------------------------- /paquetes/utiles/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utiles", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "bcrypt": "^3.0.7", 14 | "moment": "^2.24.0", 15 | "sharp": "^0.23.3" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /herramientas/automatizacion/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "automatizacion", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "gulp", 9 | "build": "gulp build", 10 | "serve": "gulp serve" 11 | }, 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "gulp": "^4.0.2", 16 | "gulp-server-livereload": "^1.9.2" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /herramientas/automatizacion/gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | const server = require('gulp-server-livereload'); 3 | 4 | gulp.task('build', function(cb) { 5 | console.log('Construyendo el sitio'); 6 | setTimeout(cb, 1200); 7 | }); 8 | 9 | gulp.task('serve', function(cb) { 10 | gulp.src('www') 11 | .pipe(server({ 12 | livereload: true, 13 | open: true, 14 | })); 15 | }); 16 | 17 | gulp.task('default', gulp.series('build', 'serve')); -------------------------------------------------------------------------------- /modulos/globales.js: -------------------------------------------------------------------------------- 1 | // Ubicación de ficheros 2 | // console.log(__dirname); 3 | // console.log(__filename); 4 | 5 | // Timers 6 | // console.log(setInterval);) 7 | // console.log(clearInterval); 8 | // console.log(setTimeout); 9 | // console.log(clearTimeout); 10 | // console.log(setInmediate); 11 | 12 | // Modules 13 | // console.log(exports); 14 | // console.log(module); 15 | // console.log(require); 16 | 17 | // Seteando variables globales 18 | // global.test = 'Ejemplo'; 19 | // console.log(test); 20 | // console.log(global.test); 21 | -------------------------------------------------------------------------------- /trucos/errorFirst.js: -------------------------------------------------------------------------------- 1 | function asincrona(callback) { 2 | setTimeout(function() { 3 | try { 4 | let a = 3 + z; 5 | callback(null, a); 6 | } catch (e) { 7 | callback(e); 8 | } 9 | }, 1000); 10 | } 11 | 12 | 13 | asincrona(function (err, dato) { 14 | if (err) { 15 | console.error('Tenemos un error'); 16 | console.error(err); 17 | return false; 18 | // throw err; // NO VA A FUNCIONAR 19 | } 20 | 21 | console.log('todo ha ido bien, mi data es', dato); 22 | }) -------------------------------------------------------------------------------- /async/callback.js: -------------------------------------------------------------------------------- 1 | function hola(nombre, miCallback) { 2 | setTimeout(function () { 3 | console.log('Hola, '+ nombre); 4 | miCallback(nombre); 5 | }, 1500); 6 | } 7 | 8 | function adios(nombre, otroCallback) { 9 | setTimeout(function() { 10 | console.log('Adios', nombre); 11 | otroCallback(); 12 | }, 1000); 13 | } 14 | 15 | console.log('Iniciando proceso...'); 16 | hola('Carlos', function (nombre) { 17 | adios(nombre, function() { 18 | console.log('Terminando proceso...'); 19 | }); 20 | }); 21 | 22 | // hola('Carlos', function () {}); 23 | // adios('Carlos', function () {}); -------------------------------------------------------------------------------- /modulos/nativos/hola.cc: -------------------------------------------------------------------------------- 1 | // hello.cc 2 | #include 3 | 4 | namespace demo { 5 | 6 | using v8::FunctionCallbackInfo; 7 | using v8::Isolate; 8 | using v8::Local; 9 | using v8::NewStringType; 10 | using v8::Object; 11 | using v8::String; 12 | using v8::Value; 13 | 14 | void Method(const FunctionCallbackInfo& args) { 15 | Isolate* isolate = args.GetIsolate(); 16 | args.GetReturnValue().Set(String::NewFromUtf8( 17 | isolate, "mundo", NewStringType::kNormal).ToLocalChecked()); 18 | } 19 | 20 | void Initialize(Local exports) { 21 | NODE_SET_METHOD(exports, "hola", Method); 22 | } 23 | 24 | NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) 25 | 26 | } // namespace demo -------------------------------------------------------------------------------- /modulos/procesoHijo.js: -------------------------------------------------------------------------------- 1 | const { exec, spawn } = require('child_process'); 2 | 3 | // exec('node modulos/consola.js', (err, stdout, sterr) => { 4 | // if (err) { 5 | // console.error(err); 6 | // return false; 7 | // } 8 | 9 | // console.log(stdout); 10 | // }) 11 | 12 | let proceso = spawn('ls', ['-la']); 13 | 14 | console.log(proceso.pid); 15 | console.log(proceso.connected); 16 | 17 | proceso.stdout.on('data', function (dato) { 18 | console.log('¿Está muerto?'); 19 | console.log(proceso.killed); 20 | console.log(dato.toString()) 21 | }); 22 | 23 | proceso.on('exit', function() { 24 | console.log('el proeso terminó'); 25 | console.log(proceso.killed) 26 | }) 27 | -------------------------------------------------------------------------------- /modulos/os.js: -------------------------------------------------------------------------------- 1 | const os = require('os'); 2 | 3 | // console.log(os.arch()); 4 | // console.log(os.platform()); 5 | 6 | // console.log(os.cpus().length); 7 | 8 | // console.log(os.constants); 9 | 10 | const SIZE = 1024; 11 | function kb(bytes) { return bytes / SIZE } 12 | function mb(bytes) { return kb(bytes) / SIZE } 13 | function gb(bytes) { return mb(bytes) / SIZE } 14 | 15 | // console.log(os.freemem()); 16 | // console.log(kb(os.freemem())); 17 | // console.log(mb(os.freemem())); 18 | // console.log(gb(os.freemem())); 19 | 20 | // console.log(gb(os.totalmem())); 21 | 22 | // console.log(os.homedir()) 23 | // console.log(os.tmpdir()) 24 | 25 | // console.log(os.hostname()); 26 | console.log(os.networkInterfaces()); 27 | -------------------------------------------------------------------------------- /modulos/fs.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | function leer(ruta, cb) { 4 | fs.readFile(ruta, (err, data) => { 5 | cb(data.toString()); 6 | }) 7 | } 8 | 9 | function escribir(ruta, contenido, cb) { 10 | fs.writeFile(ruta, contenido, function (err) { 11 | if (err) { 12 | console.error('No he podido escribirlo', err); 13 | } else { 14 | console.log('Se ha escrito correctamente'); 15 | } 16 | 17 | }); 18 | } 19 | 20 | function borrar(ruta, cb) { 21 | fs.unlink(ruta, cb); 22 | } 23 | 24 | // escribir(__dirname + '/archivo1.txt', 'Soy un archivo nuevo', console.log); 25 | // leer(__dirname + '/archivo1.txt', console.log) 26 | borrar(__dirname + '/archivo1.txt', console.log); -------------------------------------------------------------------------------- /modulos/errores.js: -------------------------------------------------------------------------------- 1 | function otraFuncion() { 2 | serompe(); 3 | } 4 | 5 | function serompe() { 6 | return 3 + z; 7 | } 8 | 9 | function seRompeAsincrona(cb) { 10 | setTimeout(function () { 11 | try { 12 | return 3 + z; 13 | } catch (err) { 14 | console.error('Error en mi función asícnrona'); 15 | cb(err); 16 | } 17 | }) 18 | } 19 | 20 | try { 21 | //otraFuncion(); 22 | seRompeAsincrona(function (err) { 23 | console.log (err.message) 24 | }); 25 | } catch(err) { 26 | console.error('Vaya, algo se ha roto...'); 27 | console.error(err); 28 | console.log('Pero no pasa nada, lo hemos capturado'); 29 | } 30 | 31 | console.log('esto de aqui está al final'); -------------------------------------------------------------------------------- /modulos/process.js: -------------------------------------------------------------------------------- 1 | // const p = require('process'); 2 | 3 | process.on('beforeExit', () => { 4 | console.log('el proceso va a terminar'); 5 | }); 6 | 7 | process.on('exit', () => { 8 | console.log('Ale, el proceso acabó'); 9 | setTimeout(() => { 10 | console.log('Esto no se va a ver nunca'); 11 | }, 0); 12 | }); 13 | 14 | setTimeout(() => { 15 | console.log('Esto se va a ver'); 16 | }, 0); 17 | 18 | process.on('uncaughtException', (err, origen) => { 19 | console.error('Vaya se nos ha olvidado capturar un error'); 20 | setTimeout(() => { 21 | console.log('Esto viene desde las excepciones'); 22 | }, 0); 23 | }); 24 | 25 | 26 | funcionQueNoExiste(); 27 | 28 | console.log('Esto si el error no se recoje, no sale'); 29 | -------------------------------------------------------------------------------- /herramientas/scrapping/index.js: -------------------------------------------------------------------------------- 1 | const puppeteer = require('puppeteer'); 2 | 3 | (async () => { 4 | // Nuestro codigo 5 | console.log('Lanzamos navegador!'); 6 | // const browser = await puppeteer.launch(); 7 | const browser = await puppeteer.launch({ headless: false }); 8 | 9 | const page = await browser.newPage(); 10 | await page.goto('https://es.wikipedia.org/wiki/Node.js'); 11 | 12 | var titulo1 = await page.evaluate(() => { 13 | const h1 = document.querySelector('h1'); 14 | console.log(h1.innerHTML); 15 | 16 | return h1.innerHTML; 17 | }); 18 | 19 | console.log(titulo1); 20 | 21 | console.log('Cerramos navegador...'); 22 | browser.close(); 23 | console.log('Navegador cerrado'); 24 | })(); -------------------------------------------------------------------------------- /paquetes/npm/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "npm", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "is-number": { 8 | "version": "6.0.0", 9 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz", 10 | "integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==" 11 | }, 12 | "is-odd": { 13 | "version": "3.0.1", 14 | "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-3.0.1.tgz", 15 | "integrity": "sha512-CQpnWPrDwmP1+SMHXZhtLtJv90yiyVfluGsX5iNCVkrhQtU3TQHsUWPG9wkdk9Lgd5yNpAg9jQEo90CBaXgWMA==", 16 | "requires": { 17 | "is-number": "^6.0.0" 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /trucos/benchmarking.js: -------------------------------------------------------------------------------- 1 | console.time('todo'); 2 | let suma = 0; 3 | console.time('bucle'); 4 | for (let i = 0; i < 100000000; i++) { 5 | suma += 1; 6 | } 7 | console.timeEnd('bucle'); 8 | 9 | let suma2 = 0; 10 | console.time('bucle 2'); 11 | for (let j = 0; j < 1000000000; j++) { 12 | suma2 += 1; 13 | } 14 | console.timeEnd('bucle 2'); 15 | 16 | console.time('asincrono'); 17 | console.log('Empieza el proceso async') 18 | asincrona() 19 | .then(() => { 20 | console.timeEnd('asincrono'); 21 | }); 22 | 23 | console.timeEnd('todo'); 24 | 25 | function asincrona() { 26 | return new Promise( (resolve) => { 27 | setTimeout(function () { 28 | console.log('Termina el proceso asíncrono'); 29 | resolve(); 30 | }, 1000) 31 | }) 32 | } 33 | -------------------------------------------------------------------------------- /modulos/consola.js: -------------------------------------------------------------------------------- 1 | // Console 2 | 3 | // console.log() 4 | // console.info() 5 | // console.warn() 6 | // console.error() 7 | 8 | // console.table() 9 | // console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]); 10 | // ┌─────────┬─────┬─────┐ 11 | // │ (index) │ a │ b │ 12 | // ├─────────┼─────┼─────┤ 13 | // │ 0 │ 1 │ 'Y' │ 14 | // │ 1 │ 'Z' │ 2 │ 15 | // └─────────┴─────┴─────┘ 16 | 17 | // console.group(); 18 | // console.groupEnd(); 19 | 20 | // EJEMPLO 1 21 | // console.group('despedida'); 22 | // console.log('adios'); 23 | // console.group(); 24 | // console.log('Carlos'); 25 | // console.groupEnd(); 26 | // console.groupEnd(); 27 | 28 | console.count('veces'); 29 | console.count('veces'); 30 | console.count('veces'); 31 | console.countReset('veces'); 32 | console.count('veces'); -------------------------------------------------------------------------------- /modulos/http.js: -------------------------------------------------------------------------------- 1 | const http = require('http'); 2 | 3 | http.createServer(router).listen(3000); 4 | 5 | function router(req, res) { 6 | console.log('Nueva petición!'); 7 | console.log(req.url); 8 | 9 | switch (req.url) { 10 | case '/hola': 11 | let saludo = hola(); 12 | res.write(saludo); 13 | res.end(); 14 | break; 15 | 16 | default: 17 | res.write('Error 404: No se lo que quieres'); 18 | res.end(); 19 | } 20 | 21 | // res.writeHead(201, { 'Content-Type': 'text/plain' }) 22 | 23 | // // Escribir respuesta al usuario 24 | // res.write('Hola, ya se usar HTTP de NodeJS'); 25 | 26 | // res.end(); 27 | } 28 | 29 | function hola() { 30 | return 'Hola, que tal'; 31 | } 32 | 33 | console.log("Escuchando http en el puerto 3000"); -------------------------------------------------------------------------------- /memoria/stream.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const stream = require('stream'); 3 | const util = require('util'); 4 | 5 | let data = ''; 6 | 7 | let readableStream = fs.createReadStream(__dirname + '/input.txt'); 8 | readableStream.setEncoding('UTF8'); 9 | 10 | // readableStream.on('data', function (chunk) { 11 | // data += chunk; 12 | // }); 13 | 14 | // readableStream.on('end', function() { 15 | // console.log(data); 16 | // }); 17 | 18 | // process.stdout.write('hola') 19 | // process.stdout.write('que') 20 | // process.stdout.write('tal') 21 | 22 | const Transform = stream.Transform; 23 | 24 | function Mayus() { 25 | Transform.call(this); 26 | } 27 | util.inherits(Mayus, Transform); 28 | 29 | Mayus.prototype._transform = function(chunk, codif, cb) { 30 | chunkMayus = chunk.toString().toUpperCase(); 31 | this.push(chunkMayus); 32 | cb(); 33 | } 34 | 35 | let mayus = new Mayus(); 36 | 37 | readableStream 38 | .pipe(mayus) 39 | .pipe(process.stdout); -------------------------------------------------------------------------------- /modulos/nativos/README.md: -------------------------------------------------------------------------------- 1 | 1. Instala `node-gyp`. Hay que hacerlo de forma global. Para eso, ejecuta: 2 | 3 | ```npm i -g node-gyp``` 4 | 5 | _Dependiendo del sistema de archivos, y los permisos, puede que tengas que usar sudo en linux y mac, o ejecutar como administrador en windows_ 6 | 7 | 2. Crea tu archivo fuente. Un ejemplo lo puedes encontrar en [la documentación de node](https://nodejs.org/api/addons.html#addons_hello_world) 8 | 3. Crea un `binding.gyp` en la raiz del módulo. 9 | 4. En la carpeta raiz del módulo, ejecuta: 10 | 11 | ```node-gyp configure``` 12 | 13 | 5. Se habrá generado un directorio build. 14 | 6. En la carpeta raiz del módulo, ejecuta: 15 | 16 | ```node-gyp build``` 17 | 18 | 7. El módulo se compilará. y podrás importarlo en javascript. Puedes revisar que exista el archivo `build/Release/addon.node` _(es un binario, así que no podrás abrirlo)_ 19 | 8. Para usarlo, crea un archivo js. Para importarlo: 20 | 21 | ```const addon = require('./build/Release/addon');``` 22 | 23 | y para usarlo: 24 | 25 | ```addon.hola()``` 26 | 27 | debería imprimir `mundo` -------------------------------------------------------------------------------- /async/asyncAwait.js: -------------------------------------------------------------------------------- 1 | async function hola(nombre) { 2 | return new Promise(function (resolve, reject) { 3 | setTimeout(function () { 4 | console.log('Hola, '+ nombre); 5 | resolve(nombre); 6 | }, 1500); 7 | }); 8 | 9 | } 10 | 11 | async function hablar(nombre) { 12 | return new Promise( (resolve, reject) => { 13 | setTimeout(function() { 14 | console.log('Bla bla bla bla...'); 15 | //resolve(nombre); 16 | resolve('Hay un error'); 17 | }, 1000); 18 | }); 19 | } 20 | 21 | async function adios(nombre) { 22 | return new Promise( (resolve, reject) => { 23 | setTimeout(function() { 24 | console.log('Adios', nombre); 25 | resolve(); 26 | }, 1000); 27 | }); 28 | } 29 | 30 | async function main() { 31 | let nombre = await hola('Carlos'); 32 | await hablar(); 33 | await hablar(); 34 | await hablar(); 35 | await adios(nombre); 36 | console.log('Termina el proceso'); 37 | } 38 | 39 | console.log('Empezamos el proceso'); 40 | main(); 41 | console.log('Va a ser la segunda instrucción') -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /async/promises.js: -------------------------------------------------------------------------------- 1 | function hola(nombre) { 2 | return new Promise(function (resolve, reject) { 3 | setTimeout(function () { 4 | console.log('Hola, '+ nombre); 5 | resolve(nombre); 6 | }, 1500); 7 | }); 8 | 9 | } 10 | 11 | function hablar(nombre) { 12 | return new Promise( (resolve, reject) => { 13 | setTimeout(function() { 14 | console.log('Bla bla bla bla...'); 15 | //resolve(nombre); 16 | reject('Hay un error'); 17 | }, 1000); 18 | }); 19 | } 20 | 21 | function adios(nombre) { 22 | return new Promise( (resolve, reject) => { 23 | setTimeout(function() { 24 | console.log('Adios', nombre); 25 | resolve(); 26 | }, 1000); 27 | }); 28 | } 29 | 30 | // --- 31 | 32 | console.log('Iniciando el proceso..'); 33 | hola('Carlos') 34 | .then(hablar) 35 | .then(hablar) 36 | .then(hablar) 37 | .then(hablar) 38 | .then(adios) 39 | .then((nombre) => { 40 | console.log('Terminado el proceso'); 41 | }) 42 | .catch(error => { 43 | console.error('Ha habido un error:'); 44 | console.error(error); 45 | }) 46 | -------------------------------------------------------------------------------- /async/callbackHell.js: -------------------------------------------------------------------------------- 1 | function hola(nombre, miCallback) { 2 | setTimeout(function () { 3 | console.log('Hola, '+ nombre); 4 | miCallback(nombre); 5 | }, 1500); 6 | } 7 | 8 | function hablar(callbackHablar) { 9 | setTimeout(function() { 10 | console.log('Bla bla bla bla...'); 11 | callbackHablar(); 12 | }, 1000); 13 | } 14 | 15 | function adios(nombre, otroCallback) { 16 | setTimeout(function() { 17 | console.log('Adios', nombre); 18 | otroCallback(); 19 | }, 1000); 20 | } 21 | 22 | function conversacion(nombre, veces, callback) { 23 | if (veces > 0) { 24 | hablar(function () { 25 | conversacion(nombre, --veces, callback); 26 | }) 27 | } else { 28 | adios(nombre, callback); 29 | } 30 | } 31 | 32 | // -- 33 | 34 | console.log('Iniciando proceso...'); 35 | hola('Carlos', function (nombre) { 36 | conversacion(nombre, 3, function() { 37 | console.log('Proceso terminado'); 38 | }); 39 | }); 40 | 41 | 42 | // hola('Carlos', function (nombre) { 43 | // hablar(function () { 44 | // hablar(function () { 45 | // hablar(function () { 46 | // adios(nombre, function() { 47 | // console.log('Terminando proceso...'); 48 | // }); 49 | // }); 50 | // }); 51 | // }); 52 | // }); 53 | -------------------------------------------------------------------------------- /modulos/nativos/build/Release/.deps/Release/obj.target/addon/hola.o.d: -------------------------------------------------------------------------------- 1 | cmd_Release/obj.target/addon/hola.o := g++ '-DNODE_GYP_MODULE_NAME=addon' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DBUILDING_NODE_EXTENSION' -I/home/carlos/.cache/node-gyp/12.11.1/include/node -I/home/carlos/.cache/node-gyp/12.11.1/src -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/config -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/openssl/include -I/home/carlos/.cache/node-gyp/12.11.1/deps/uv/include -I/home/carlos/.cache/node-gyp/12.11.1/deps/zlib -I/home/carlos/.cache/node-gyp/12.11.1/deps/v8/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++1y -MMD -MF ./Release/.deps/Release/obj.target/addon/hola.o.d.raw -c -o Release/obj.target/addon/hola.o ../hola.cc 2 | Release/obj.target/addon/hola.o: ../hola.cc \ 3 | /home/carlos/.cache/node-gyp/12.11.1/include/node/node.h \ 4 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8.h \ 5 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-internal.h \ 6 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-version.h \ 7 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8config.h \ 8 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-platform.h \ 9 | /home/carlos/.cache/node-gyp/12.11.1/include/node/node_version.h 10 | ../hola.cc: 11 | /home/carlos/.cache/node-gyp/12.11.1/include/node/node.h: 12 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8.h: 13 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-internal.h: 14 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-version.h: 15 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8config.h: 16 | /home/carlos/.cache/node-gyp/12.11.1/include/node/v8-platform.h: 17 | /home/carlos/.cache/node-gyp/12.11.1/include/node/node_version.h: 18 | -------------------------------------------------------------------------------- /modulos/nativos/build/config.gypi: -------------------------------------------------------------------------------- 1 | # Do not edit. File was generated by node-gyp's "configure" step 2 | { 3 | "target_defaults": { 4 | "cflags": [], 5 | "default_configuration": "Release", 6 | "defines": [], 7 | "include_dirs": [], 8 | "libraries": [] 9 | }, 10 | "variables": { 11 | "asan": 0, 12 | "build_v8_with_gn": "false", 13 | "coverage": "false", 14 | "debug_nghttp2": "false", 15 | "enable_lto": "false", 16 | "enable_pgo_generate": "false", 17 | "enable_pgo_use": "false", 18 | "force_dynamic_crt": 0, 19 | "gas_version": "2.27", 20 | "host_arch": "x64", 21 | "icu_data_in": "../../deps/icu-small/source/data/in/icudt64l.dat", 22 | "icu_endianness": "l", 23 | "icu_gyp_path": "tools/icu/icu-generic.gyp", 24 | "icu_locales": "en,root", 25 | "icu_path": "deps/icu-small", 26 | "icu_small": "true", 27 | "icu_ver_major": "64", 28 | "is_debug": 0, 29 | "llvm_version": 0, 30 | "napi_build_version": "5", 31 | "node_byteorder": "little", 32 | "node_code_cache": "yes", 33 | "node_debug_lib": "false", 34 | "node_enable_d8": "false", 35 | "node_install_npm": "true", 36 | "node_module_version": 72, 37 | "node_no_browser_globals": "false", 38 | "node_prefix": "/", 39 | "node_release_urlbase": "https://nodejs.org/download/release/", 40 | "node_report": "true", 41 | "node_shared": "false", 42 | "node_shared_cares": "false", 43 | "node_shared_http_parser": "false", 44 | "node_shared_libuv": "false", 45 | "node_shared_nghttp2": "false", 46 | "node_shared_openssl": "false", 47 | "node_shared_zlib": "false", 48 | "node_tag": "", 49 | "node_target_type": "executable", 50 | "node_use_bundled_v8": "true", 51 | "node_use_dtrace": "false", 52 | "node_use_etw": "false", 53 | "node_use_large_pages": "false", 54 | "node_use_large_pages_script_lld": "false", 55 | "node_use_node_snapshot": "true", 56 | "node_use_openssl": "true", 57 | "node_use_v8_platform": "true", 58 | "node_with_ltcg": "false", 59 | "node_without_node_options": "false", 60 | "openssl_fips": "", 61 | "openssl_is_fips": "false", 62 | "shlib_suffix": "so.72", 63 | "target_arch": "x64", 64 | "v8_enable_gdbjit": 0, 65 | "v8_enable_i18n_support": 1, 66 | "v8_enable_inspector": 1, 67 | "v8_no_strict_aliasing": 1, 68 | "v8_optimized_debug": 1, 69 | "v8_promise_internal_field_count": 1, 70 | "v8_random_seed": 0, 71 | "v8_trace_maps": 0, 72 | "v8_use_siphash": 1, 73 | "v8_use_snapshot": 1, 74 | "want_separate_host_toolset": 0, 75 | "nodedir": "/home/carlos/.cache/node-gyp/12.11.1", 76 | "standalone_static_library": 1 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /modulos/nativos/build/addon.target.mk: -------------------------------------------------------------------------------- 1 | # This file is generated by gyp; do not edit. 2 | 3 | TOOLSET := target 4 | TARGET := addon 5 | DEFS_Debug := \ 6 | '-DNODE_GYP_MODULE_NAME=addon' \ 7 | '-DUSING_UV_SHARED=1' \ 8 | '-DUSING_V8_SHARED=1' \ 9 | '-DV8_DEPRECATION_WARNINGS=1' \ 10 | '-DV8_DEPRECATION_WARNINGS' \ 11 | '-DV8_IMMINENT_DEPRECATION_WARNINGS' \ 12 | '-D_LARGEFILE_SOURCE' \ 13 | '-D_FILE_OFFSET_BITS=64' \ 14 | '-DOPENSSL_NO_PINSHARED' \ 15 | '-DOPENSSL_THREADS' \ 16 | '-DBUILDING_NODE_EXTENSION' \ 17 | '-DDEBUG' \ 18 | '-D_DEBUG' \ 19 | '-DV8_ENABLE_CHECKS' 20 | 21 | # Flags passed to all source files. 22 | CFLAGS_Debug := \ 23 | -fPIC \ 24 | -pthread \ 25 | -Wall \ 26 | -Wextra \ 27 | -Wno-unused-parameter \ 28 | -m64 \ 29 | -g \ 30 | -O0 31 | 32 | # Flags passed to only C files. 33 | CFLAGS_C_Debug := 34 | 35 | # Flags passed to only C++ files. 36 | CFLAGS_CC_Debug := \ 37 | -fno-rtti \ 38 | -fno-exceptions \ 39 | -std=gnu++1y 40 | 41 | INCS_Debug := \ 42 | -I/home/carlos/.cache/node-gyp/12.11.1/include/node \ 43 | -I/home/carlos/.cache/node-gyp/12.11.1/src \ 44 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/config \ 45 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/openssl/include \ 46 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/uv/include \ 47 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/zlib \ 48 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/v8/include 49 | 50 | DEFS_Release := \ 51 | '-DNODE_GYP_MODULE_NAME=addon' \ 52 | '-DUSING_UV_SHARED=1' \ 53 | '-DUSING_V8_SHARED=1' \ 54 | '-DV8_DEPRECATION_WARNINGS=1' \ 55 | '-DV8_DEPRECATION_WARNINGS' \ 56 | '-DV8_IMMINENT_DEPRECATION_WARNINGS' \ 57 | '-D_LARGEFILE_SOURCE' \ 58 | '-D_FILE_OFFSET_BITS=64' \ 59 | '-DOPENSSL_NO_PINSHARED' \ 60 | '-DOPENSSL_THREADS' \ 61 | '-DBUILDING_NODE_EXTENSION' 62 | 63 | # Flags passed to all source files. 64 | CFLAGS_Release := \ 65 | -fPIC \ 66 | -pthread \ 67 | -Wall \ 68 | -Wextra \ 69 | -Wno-unused-parameter \ 70 | -m64 \ 71 | -O3 \ 72 | -fno-omit-frame-pointer 73 | 74 | # Flags passed to only C files. 75 | CFLAGS_C_Release := 76 | 77 | # Flags passed to only C++ files. 78 | CFLAGS_CC_Release := \ 79 | -fno-rtti \ 80 | -fno-exceptions \ 81 | -std=gnu++1y 82 | 83 | INCS_Release := \ 84 | -I/home/carlos/.cache/node-gyp/12.11.1/include/node \ 85 | -I/home/carlos/.cache/node-gyp/12.11.1/src \ 86 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/config \ 87 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/openssl/openssl/include \ 88 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/uv/include \ 89 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/zlib \ 90 | -I/home/carlos/.cache/node-gyp/12.11.1/deps/v8/include 91 | 92 | OBJS := \ 93 | $(obj).target/$(TARGET)/hola.o 94 | 95 | # Add to the list of files we specially track dependencies for. 96 | all_deps += $(OBJS) 97 | 98 | # CFLAGS et al overrides must be target-local. 99 | # See "Target-specific Variable Values" in the GNU Make manual. 100 | $(OBJS): TOOLSET := $(TOOLSET) 101 | $(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) 102 | $(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) 103 | 104 | # Suffix rules, putting all outputs into $(obj). 105 | 106 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD 107 | @$(call do_cmd,cxx,1) 108 | 109 | # Try building from generated source, too. 110 | 111 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD 112 | @$(call do_cmd,cxx,1) 113 | 114 | $(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD 115 | @$(call do_cmd,cxx,1) 116 | 117 | # End of this set of suffix rules 118 | ### Rules for final target. 119 | LDFLAGS_Debug := \ 120 | -pthread \ 121 | -rdynamic \ 122 | -m64 123 | 124 | LDFLAGS_Release := \ 125 | -pthread \ 126 | -rdynamic \ 127 | -m64 128 | 129 | LIBS := 130 | 131 | $(obj).target/addon.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) 132 | $(obj).target/addon.node: LIBS := $(LIBS) 133 | $(obj).target/addon.node: TOOLSET := $(TOOLSET) 134 | $(obj).target/addon.node: $(OBJS) FORCE_DO_CMD 135 | $(call do_cmd,solink_module) 136 | 137 | all_deps += $(obj).target/addon.node 138 | # Add target alias 139 | .PHONY: addon 140 | addon: $(builddir)/addon.node 141 | 142 | # Copy this to the executable output path. 143 | $(builddir)/addon.node: TOOLSET := $(TOOLSET) 144 | $(builddir)/addon.node: $(obj).target/addon.node FORCE_DO_CMD 145 | $(call do_cmd,copy) 146 | 147 | all_deps += $(builddir)/addon.node 148 | # Short alias for building this executable. 149 | .PHONY: addon.node 150 | addon.node: $(obj).target/addon.node $(builddir)/addon.node 151 | 152 | # Add executable to "all" target. 153 | .PHONY: all 154 | all: $(builddir)/addon.node 155 | 156 | -------------------------------------------------------------------------------- /herramientas/scrapping/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "agent-base": { 6 | "version": "4.3.0", 7 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 8 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 9 | "requires": { 10 | "es6-promisify": "^5.0.0" 11 | } 12 | }, 13 | "async-limiter": { 14 | "version": "1.0.1", 15 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 16 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 17 | }, 18 | "balanced-match": { 19 | "version": "1.0.0", 20 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 21 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 22 | }, 23 | "brace-expansion": { 24 | "version": "1.1.11", 25 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 26 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 27 | "requires": { 28 | "balanced-match": "^1.0.0", 29 | "concat-map": "0.0.1" 30 | } 31 | }, 32 | "buffer-from": { 33 | "version": "1.1.1", 34 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 35 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 36 | }, 37 | "concat-map": { 38 | "version": "0.0.1", 39 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 40 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 41 | }, 42 | "concat-stream": { 43 | "version": "1.6.2", 44 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 45 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 46 | "requires": { 47 | "buffer-from": "^1.0.0", 48 | "inherits": "^2.0.3", 49 | "readable-stream": "^2.2.2", 50 | "typedarray": "^0.0.6" 51 | } 52 | }, 53 | "core-util-is": { 54 | "version": "1.0.2", 55 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 56 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 57 | }, 58 | "debug": { 59 | "version": "4.1.1", 60 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 61 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 62 | "requires": { 63 | "ms": "^2.1.1" 64 | } 65 | }, 66 | "es6-promise": { 67 | "version": "4.2.8", 68 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 69 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 70 | }, 71 | "es6-promisify": { 72 | "version": "5.0.0", 73 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 74 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 75 | "requires": { 76 | "es6-promise": "^4.0.3" 77 | } 78 | }, 79 | "extract-zip": { 80 | "version": "1.6.7", 81 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", 82 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", 83 | "requires": { 84 | "concat-stream": "1.6.2", 85 | "debug": "2.6.9", 86 | "mkdirp": "0.5.1", 87 | "yauzl": "2.4.1" 88 | }, 89 | "dependencies": { 90 | "debug": { 91 | "version": "2.6.9", 92 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 93 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 94 | "requires": { 95 | "ms": "2.0.0" 96 | } 97 | }, 98 | "ms": { 99 | "version": "2.0.0", 100 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 101 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 102 | } 103 | } 104 | }, 105 | "fd-slicer": { 106 | "version": "1.0.1", 107 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 108 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 109 | "requires": { 110 | "pend": "~1.2.0" 111 | } 112 | }, 113 | "fs.realpath": { 114 | "version": "1.0.0", 115 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 116 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 117 | }, 118 | "glob": { 119 | "version": "7.1.6", 120 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 121 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 122 | "requires": { 123 | "fs.realpath": "^1.0.0", 124 | "inflight": "^1.0.4", 125 | "inherits": "2", 126 | "minimatch": "^3.0.4", 127 | "once": "^1.3.0", 128 | "path-is-absolute": "^1.0.0" 129 | } 130 | }, 131 | "https-proxy-agent": { 132 | "version": "3.0.1", 133 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", 134 | "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", 135 | "requires": { 136 | "agent-base": "^4.3.0", 137 | "debug": "^3.1.0" 138 | }, 139 | "dependencies": { 140 | "debug": { 141 | "version": "3.2.6", 142 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 143 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 144 | "requires": { 145 | "ms": "^2.1.1" 146 | } 147 | } 148 | } 149 | }, 150 | "inflight": { 151 | "version": "1.0.6", 152 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 153 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 154 | "requires": { 155 | "once": "^1.3.0", 156 | "wrappy": "1" 157 | } 158 | }, 159 | "inherits": { 160 | "version": "2.0.4", 161 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 162 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 163 | }, 164 | "isarray": { 165 | "version": "1.0.0", 166 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 167 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 168 | }, 169 | "mime": { 170 | "version": "2.4.4", 171 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 172 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" 173 | }, 174 | "minimatch": { 175 | "version": "3.0.4", 176 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 177 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 178 | "requires": { 179 | "brace-expansion": "^1.1.7" 180 | } 181 | }, 182 | "minimist": { 183 | "version": "0.0.8", 184 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 185 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 186 | }, 187 | "mkdirp": { 188 | "version": "0.5.1", 189 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 190 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 191 | "requires": { 192 | "minimist": "0.0.8" 193 | } 194 | }, 195 | "ms": { 196 | "version": "2.1.2", 197 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 198 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 199 | }, 200 | "once": { 201 | "version": "1.4.0", 202 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 203 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 204 | "requires": { 205 | "wrappy": "1" 206 | } 207 | }, 208 | "path-is-absolute": { 209 | "version": "1.0.1", 210 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 211 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 212 | }, 213 | "pend": { 214 | "version": "1.2.0", 215 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 216 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 217 | }, 218 | "process-nextick-args": { 219 | "version": "2.0.1", 220 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 221 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 222 | }, 223 | "progress": { 224 | "version": "2.0.3", 225 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 226 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" 227 | }, 228 | "proxy-from-env": { 229 | "version": "1.0.0", 230 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", 231 | "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" 232 | }, 233 | "puppeteer": { 234 | "version": "2.0.0", 235 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.0.0.tgz", 236 | "integrity": "sha512-t3MmTWzQxPRP71teU6l0jX47PHXlc4Z52sQv4LJQSZLq1ttkKS2yGM3gaI57uQwZkNaoGd0+HPPMELZkcyhlqA==", 237 | "requires": { 238 | "debug": "^4.1.0", 239 | "extract-zip": "^1.6.6", 240 | "https-proxy-agent": "^3.0.0", 241 | "mime": "^2.0.3", 242 | "progress": "^2.0.1", 243 | "proxy-from-env": "^1.0.0", 244 | "rimraf": "^2.6.1", 245 | "ws": "^6.1.0" 246 | } 247 | }, 248 | "readable-stream": { 249 | "version": "2.3.6", 250 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 251 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 252 | "requires": { 253 | "core-util-is": "~1.0.0", 254 | "inherits": "~2.0.3", 255 | "isarray": "~1.0.0", 256 | "process-nextick-args": "~2.0.0", 257 | "safe-buffer": "~5.1.1", 258 | "string_decoder": "~1.1.1", 259 | "util-deprecate": "~1.0.1" 260 | } 261 | }, 262 | "rimraf": { 263 | "version": "2.7.1", 264 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 265 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 266 | "requires": { 267 | "glob": "^7.1.3" 268 | } 269 | }, 270 | "safe-buffer": { 271 | "version": "5.1.2", 272 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 273 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 274 | }, 275 | "string_decoder": { 276 | "version": "1.1.1", 277 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 278 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 279 | "requires": { 280 | "safe-buffer": "~5.1.0" 281 | } 282 | }, 283 | "typedarray": { 284 | "version": "0.0.6", 285 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 286 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 287 | }, 288 | "util-deprecate": { 289 | "version": "1.0.2", 290 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 291 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 292 | }, 293 | "wrappy": { 294 | "version": "1.0.2", 295 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 296 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 297 | }, 298 | "ws": { 299 | "version": "6.2.1", 300 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 301 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 302 | "requires": { 303 | "async-limiter": "~1.0.0" 304 | } 305 | }, 306 | "yauzl": { 307 | "version": "2.4.1", 308 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 309 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 310 | "requires": { 311 | "fd-slicer": "~1.0.1" 312 | } 313 | } 314 | } 315 | } 316 | -------------------------------------------------------------------------------- /modulos/nativos/build/Makefile: -------------------------------------------------------------------------------- 1 | # We borrow heavily from the kernel build setup, though we are simpler since 2 | # we don't have Kconfig tweaking settings on us. 3 | 4 | # The implicit make rules have it looking for RCS files, among other things. 5 | # We instead explicitly write all the rules we care about. 6 | # It's even quicker (saves ~200ms) to pass -r on the command line. 7 | MAKEFLAGS=-r 8 | 9 | # The source directory tree. 10 | srcdir := .. 11 | abs_srcdir := $(abspath $(srcdir)) 12 | 13 | # The name of the builddir. 14 | builddir_name ?= . 15 | 16 | # The V=1 flag on command line makes us verbosely print command lines. 17 | ifdef V 18 | quiet= 19 | else 20 | quiet=quiet_ 21 | endif 22 | 23 | # Specify BUILDTYPE=Release on the command line for a release build. 24 | BUILDTYPE ?= Release 25 | 26 | # Directory all our build output goes into. 27 | # Note that this must be two directories beneath src/ for unit tests to pass, 28 | # as they reach into the src/ directory for data with relative paths. 29 | builddir ?= $(builddir_name)/$(BUILDTYPE) 30 | abs_builddir := $(abspath $(builddir)) 31 | depsdir := $(builddir)/.deps 32 | 33 | # Object output directory. 34 | obj := $(builddir)/obj 35 | abs_obj := $(abspath $(obj)) 36 | 37 | # We build up a list of every single one of the targets so we can slurp in the 38 | # generated dependency rule Makefiles in one pass. 39 | all_deps := 40 | 41 | 42 | 43 | CC.target ?= $(CC) 44 | CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS) 45 | CXX.target ?= $(CXX) 46 | CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS) 47 | LINK.target ?= $(LINK) 48 | LDFLAGS.target ?= $(LDFLAGS) 49 | AR.target ?= $(AR) 50 | 51 | # C++ apps need to be linked with g++. 52 | LINK ?= $(CXX.target) 53 | 54 | # TODO(evan): move all cross-compilation logic to gyp-time so we don't need 55 | # to replicate this environment fallback in make as well. 56 | CC.host ?= gcc 57 | CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host) 58 | CXX.host ?= g++ 59 | CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host) 60 | LINK.host ?= $(CXX.host) 61 | LDFLAGS.host ?= 62 | AR.host ?= ar 63 | 64 | # Define a dir function that can handle spaces. 65 | # http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions 66 | # "leading spaces cannot appear in the text of the first argument as written. 67 | # These characters can be put into the argument value by variable substitution." 68 | empty := 69 | space := $(empty) $(empty) 70 | 71 | # http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces 72 | replace_spaces = $(subst $(space),?,$1) 73 | unreplace_spaces = $(subst ?,$(space),$1) 74 | dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) 75 | 76 | # Flags to make gcc output dependency info. Note that you need to be 77 | # careful here to use the flags that ccache and distcc can understand. 78 | # We write to a dep file on the side first and then rename at the end 79 | # so we can't end up with a broken dep file. 80 | depfile = $(depsdir)/$(call replace_spaces,$@).d 81 | DEPFLAGS = -MMD -MF $(depfile).raw 82 | 83 | # We have to fixup the deps output in a few ways. 84 | # (1) the file output should mention the proper .o file. 85 | # ccache or distcc lose the path to the target, so we convert a rule of 86 | # the form: 87 | # foobar.o: DEP1 DEP2 88 | # into 89 | # path/to/foobar.o: DEP1 DEP2 90 | # (2) we want missing files not to cause us to fail to build. 91 | # We want to rewrite 92 | # foobar.o: DEP1 DEP2 \ 93 | # DEP3 94 | # to 95 | # DEP1: 96 | # DEP2: 97 | # DEP3: 98 | # so if the files are missing, they're just considered phony rules. 99 | # We have to do some pretty insane escaping to get those backslashes 100 | # and dollar signs past make, the shell, and sed at the same time. 101 | # Doesn't work with spaces, but that's fine: .d files have spaces in 102 | # their names replaced with other characters. 103 | define fixup_dep 104 | # The depfile may not exist if the input file didn't have any #includes. 105 | touch $(depfile).raw 106 | # Fixup path as in (1). 107 | sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) 108 | # Add extra rules as in (2). 109 | # We remove slashes and replace spaces with new lines; 110 | # remove blank lines; 111 | # delete the first line and append a colon to the remaining lines. 112 | sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ 113 | grep -v '^$$' |\ 114 | sed -e 1d -e 's|$$|:|' \ 115 | >> $(depfile) 116 | rm $(depfile).raw 117 | endef 118 | 119 | # Command definitions: 120 | # - cmd_foo is the actual command to run; 121 | # - quiet_cmd_foo is the brief-output summary of the command. 122 | 123 | quiet_cmd_cc = CC($(TOOLSET)) $@ 124 | cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< 125 | 126 | quiet_cmd_cxx = CXX($(TOOLSET)) $@ 127 | cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< 128 | 129 | quiet_cmd_touch = TOUCH $@ 130 | cmd_touch = touch $@ 131 | 132 | quiet_cmd_copy = COPY $@ 133 | # send stderr to /dev/null to ignore messages when linking directories. 134 | cmd_copy = rm -rf "$@" && cp -af "$<" "$@" 135 | 136 | quiet_cmd_alink = AR($(TOOLSET)) $@ 137 | cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) 138 | 139 | quiet_cmd_alink_thin = AR($(TOOLSET)) $@ 140 | cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) 141 | 142 | # Due to circular dependencies between libraries :(, we wrap the 143 | # special "figure out circular dependencies" flags around the entire 144 | # input list during linking. 145 | quiet_cmd_link = LINK($(TOOLSET)) $@ 146 | cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group 147 | 148 | # We support two kinds of shared objects (.so): 149 | # 1) shared_library, which is just bundling together many dependent libraries 150 | # into a link line. 151 | # 2) loadable_module, which is generating a module intended for dlopen(). 152 | # 153 | # They differ only slightly: 154 | # In the former case, we want to package all dependent code into the .so. 155 | # In the latter case, we want to package just the API exposed by the 156 | # outermost module. 157 | # This means shared_library uses --whole-archive, while loadable_module doesn't. 158 | # (Note that --whole-archive is incompatible with the --start-group used in 159 | # normal linking.) 160 | 161 | # Other shared-object link notes: 162 | # - Set SONAME to the library filename so our binaries don't reference 163 | # the local, absolute paths used on the link command-line. 164 | quiet_cmd_solink = SOLINK($(TOOLSET)) $@ 165 | cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) 166 | 167 | quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 168 | cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) 169 | 170 | 171 | # Define an escape_quotes function to escape single quotes. 172 | # This allows us to handle quotes properly as long as we always use 173 | # use single quotes and escape_quotes. 174 | escape_quotes = $(subst ','\'',$(1)) 175 | # This comment is here just to include a ' to unconfuse syntax highlighting. 176 | # Define an escape_vars function to escape '$' variable syntax. 177 | # This allows us to read/write command lines with shell variables (e.g. 178 | # $LD_LIBRARY_PATH), without triggering make substitution. 179 | escape_vars = $(subst $$,$$$$,$(1)) 180 | # Helper that expands to a shell command to echo a string exactly as it is in 181 | # make. This uses printf instead of echo because printf's behaviour with respect 182 | # to escape sequences is more portable than echo's across different shells 183 | # (e.g., dash, bash). 184 | exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' 185 | 186 | # Helper to compare the command we're about to run against the command 187 | # we logged the last time we ran the command. Produces an empty 188 | # string (false) when the commands match. 189 | # Tricky point: Make has no string-equality test function. 190 | # The kernel uses the following, but it seems like it would have false 191 | # positives, where one string reordered its arguments. 192 | # arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ 193 | # $(filter-out $(cmd_$@), $(cmd_$(1)))) 194 | # We instead substitute each for the empty string into the other, and 195 | # say they're equal if both substitutions produce the empty string. 196 | # .d files contain ? instead of spaces, take that into account. 197 | command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ 198 | $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) 199 | 200 | # Helper that is non-empty when a prerequisite changes. 201 | # Normally make does this implicitly, but we force rules to always run 202 | # so we can check their command lines. 203 | # $? -- new prerequisites 204 | # $| -- order-only dependencies 205 | prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) 206 | 207 | # Helper that executes all postbuilds until one fails. 208 | define do_postbuilds 209 | @E=0;\ 210 | for p in $(POSTBUILDS); do\ 211 | eval $$p;\ 212 | E=$$?;\ 213 | if [ $$E -ne 0 ]; then\ 214 | break;\ 215 | fi;\ 216 | done;\ 217 | if [ $$E -ne 0 ]; then\ 218 | rm -rf "$@";\ 219 | exit $$E;\ 220 | fi 221 | endef 222 | 223 | # do_cmd: run a command via the above cmd_foo names, if necessary. 224 | # Should always run for a given target to handle command-line changes. 225 | # Second argument, if non-zero, makes it do asm/C/C++ dependency munging. 226 | # Third argument, if non-zero, makes it do POSTBUILDS processing. 227 | # Note: We intentionally do NOT call dirx for depfile, since it contains ? for 228 | # spaces already and dirx strips the ? characters. 229 | define do_cmd 230 | $(if $(or $(command_changed),$(prereq_changed)), 231 | @$(call exact_echo, $($(quiet)cmd_$(1))) 232 | @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" 233 | $(if $(findstring flock,$(word 1,$(cmd_$1))), 234 | @$(cmd_$(1)) 235 | @echo " $(quiet_cmd_$(1)): Finished", 236 | @$(cmd_$(1)) 237 | ) 238 | @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) 239 | @$(if $(2),$(fixup_dep)) 240 | $(if $(and $(3), $(POSTBUILDS)), 241 | $(call do_postbuilds) 242 | ) 243 | ) 244 | endef 245 | 246 | # Declare the "all" target first so it is the default, 247 | # even though we don't have the deps yet. 248 | .PHONY: all 249 | all: 250 | 251 | # make looks for ways to re-generate included makefiles, but in our case, we 252 | # don't have a direct way. Explicitly telling make that it has nothing to do 253 | # for them makes it go faster. 254 | %.d: ; 255 | 256 | # Use FORCE_DO_CMD to force a target to run. Should be coupled with 257 | # do_cmd. 258 | .PHONY: FORCE_DO_CMD 259 | FORCE_DO_CMD: 260 | 261 | TOOLSET := target 262 | # Suffix rules, putting all outputs into $(obj). 263 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD 264 | @$(call do_cmd,cc,1) 265 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD 266 | @$(call do_cmd,cxx,1) 267 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD 268 | @$(call do_cmd,cxx,1) 269 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD 270 | @$(call do_cmd,cxx,1) 271 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD 272 | @$(call do_cmd,cc,1) 273 | $(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD 274 | @$(call do_cmd,cc,1) 275 | 276 | # Try building from generated source, too. 277 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD 278 | @$(call do_cmd,cc,1) 279 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD 280 | @$(call do_cmd,cxx,1) 281 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD 282 | @$(call do_cmd,cxx,1) 283 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD 284 | @$(call do_cmd,cxx,1) 285 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD 286 | @$(call do_cmd,cc,1) 287 | $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD 288 | @$(call do_cmd,cc,1) 289 | 290 | $(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD 291 | @$(call do_cmd,cc,1) 292 | $(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD 293 | @$(call do_cmd,cxx,1) 294 | $(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD 295 | @$(call do_cmd,cxx,1) 296 | $(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD 297 | @$(call do_cmd,cxx,1) 298 | $(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD 299 | @$(call do_cmd,cc,1) 300 | $(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD 301 | @$(call do_cmd,cc,1) 302 | 303 | 304 | ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ 305 | $(findstring $(join ^,$(prefix)),\ 306 | $(join ^,addon.target.mk)))),) 307 | include addon.target.mk 308 | endif 309 | 310 | quiet_cmd_regen_makefile = ACTION Regenerating $@ 311 | cmd_regen_makefile = cd $(srcdir); /media/carlos/Almacenamiento/_disk/.nvm/versions/node/v12.11.1/lib/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--depth=." "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/carlos/.cache/node-gyp/12.11.1" "-Dnode_gyp_dir=/media/carlos/Almacenamiento/_disk/.nvm/versions/node/v12.11.1/lib/node_modules/node-gyp" "-Dnode_lib_file=/home/carlos/.cache/node-gyp/12.11.1/<(target_arch)/node.lib" "-Dmodule_root_dir=/media/carlos/Almacenamiento/WORK/Platzi/FundamentosNode/curso/fundamentos-node-platzi/modulos/nativos" "-Dnode_engine=v8" "--toplevel-dir=." "--generator-output=build" -I/media/carlos/Almacenamiento/WORK/Platzi/FundamentosNode/curso/fundamentos-node-platzi/modulos/nativos/build/config.gypi -I/media/carlos/Almacenamiento/_disk/.nvm/versions/node/v12.11.1/lib/node_modules/node-gyp/addon.gypi -I/home/carlos/.cache/node-gyp/12.11.1/include/node/common.gypi "-Goutput_dir=." binding.gyp 312 | Makefile: $(srcdir)/binding.gyp $(srcdir)/../../../../../../../_disk/.nvm/versions/node/v12.11.1/lib/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/../../../../../../../../../../home/carlos/.cache/node-gyp/12.11.1/include/node/common.gypi 313 | $(call do_cmd,regen_makefile) 314 | 315 | # "all" is a concatenation of the "all" targets from all the included 316 | # sub-makefiles. This is just here to clarify. 317 | all: 318 | 319 | # Add in dependency-tracking rules. $(all_deps) is the list of every single 320 | # target in our tree. Only consider the ones with .d (dependency) info: 321 | d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) 322 | ifneq ($(d_files),) 323 | include $(d_files) 324 | endif 325 | -------------------------------------------------------------------------------- /paquetes/utiles/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utiles", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 11 | }, 12 | "ansi-regex": { 13 | "version": "2.1.1", 14 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 15 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 16 | }, 17 | "aproba": { 18 | "version": "1.2.0", 19 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 20 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 21 | }, 22 | "are-we-there-yet": { 23 | "version": "1.1.5", 24 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 25 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 26 | "requires": { 27 | "delegates": "^1.0.0", 28 | "readable-stream": "^2.0.6" 29 | } 30 | }, 31 | "balanced-match": { 32 | "version": "1.0.0", 33 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 34 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 35 | }, 36 | "bcrypt": { 37 | "version": "3.0.7", 38 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.7.tgz", 39 | "integrity": "sha512-K5UglF9VQvBMHl/1elNyyFvAfOY9Bj+rpKrCSR9sFwcW8FywAYJSRwTURNej5TaAK2TEJkcJ6r6lh1YPmspx5Q==", 40 | "requires": { 41 | "nan": "2.14.0", 42 | "node-pre-gyp": "0.13.0" 43 | } 44 | }, 45 | "bl": { 46 | "version": "3.0.0", 47 | "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", 48 | "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", 49 | "requires": { 50 | "readable-stream": "^3.0.1" 51 | }, 52 | "dependencies": { 53 | "readable-stream": { 54 | "version": "3.4.0", 55 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 56 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 57 | "requires": { 58 | "inherits": "^2.0.3", 59 | "string_decoder": "^1.1.1", 60 | "util-deprecate": "^1.0.1" 61 | } 62 | } 63 | } 64 | }, 65 | "brace-expansion": { 66 | "version": "1.1.11", 67 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 68 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 69 | "requires": { 70 | "balanced-match": "^1.0.0", 71 | "concat-map": "0.0.1" 72 | } 73 | }, 74 | "chownr": { 75 | "version": "1.1.3", 76 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", 77 | "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" 78 | }, 79 | "code-point-at": { 80 | "version": "1.1.0", 81 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 82 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 83 | }, 84 | "color": { 85 | "version": "3.1.2", 86 | "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", 87 | "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", 88 | "requires": { 89 | "color-convert": "^1.9.1", 90 | "color-string": "^1.5.2" 91 | } 92 | }, 93 | "color-convert": { 94 | "version": "1.9.3", 95 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 96 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 97 | "requires": { 98 | "color-name": "1.1.3" 99 | } 100 | }, 101 | "color-name": { 102 | "version": "1.1.3", 103 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 104 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 105 | }, 106 | "color-string": { 107 | "version": "1.5.3", 108 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", 109 | "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", 110 | "requires": { 111 | "color-name": "^1.0.0", 112 | "simple-swizzle": "^0.2.2" 113 | } 114 | }, 115 | "concat-map": { 116 | "version": "0.0.1", 117 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 118 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 119 | }, 120 | "console-control-strings": { 121 | "version": "1.1.0", 122 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 123 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 124 | }, 125 | "core-util-is": { 126 | "version": "1.0.2", 127 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 128 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 129 | }, 130 | "debug": { 131 | "version": "3.2.6", 132 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 133 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 134 | "requires": { 135 | "ms": "^2.1.1" 136 | } 137 | }, 138 | "decompress-response": { 139 | "version": "4.2.1", 140 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 141 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 142 | "requires": { 143 | "mimic-response": "^2.0.0" 144 | } 145 | }, 146 | "deep-extend": { 147 | "version": "0.6.0", 148 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 149 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 150 | }, 151 | "delegates": { 152 | "version": "1.0.0", 153 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 154 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 155 | }, 156 | "detect-libc": { 157 | "version": "1.0.3", 158 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 159 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 160 | }, 161 | "end-of-stream": { 162 | "version": "1.4.4", 163 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 164 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 165 | "requires": { 166 | "once": "^1.4.0" 167 | } 168 | }, 169 | "expand-template": { 170 | "version": "2.0.3", 171 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 172 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" 173 | }, 174 | "fs-constants": { 175 | "version": "1.0.0", 176 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 177 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 178 | }, 179 | "fs-minipass": { 180 | "version": "1.2.7", 181 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 182 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 183 | "requires": { 184 | "minipass": "^2.6.0" 185 | } 186 | }, 187 | "fs.realpath": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 190 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 191 | }, 192 | "gauge": { 193 | "version": "2.7.4", 194 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 195 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 196 | "requires": { 197 | "aproba": "^1.0.3", 198 | "console-control-strings": "^1.0.0", 199 | "has-unicode": "^2.0.0", 200 | "object-assign": "^4.1.0", 201 | "signal-exit": "^3.0.0", 202 | "string-width": "^1.0.1", 203 | "strip-ansi": "^3.0.1", 204 | "wide-align": "^1.1.0" 205 | } 206 | }, 207 | "github-from-package": { 208 | "version": "0.0.0", 209 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 210 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 211 | }, 212 | "glob": { 213 | "version": "7.1.6", 214 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 215 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 216 | "requires": { 217 | "fs.realpath": "^1.0.0", 218 | "inflight": "^1.0.4", 219 | "inherits": "2", 220 | "minimatch": "^3.0.4", 221 | "once": "^1.3.0", 222 | "path-is-absolute": "^1.0.0" 223 | } 224 | }, 225 | "has-unicode": { 226 | "version": "2.0.1", 227 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 228 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 229 | }, 230 | "iconv-lite": { 231 | "version": "0.4.24", 232 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 233 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 234 | "requires": { 235 | "safer-buffer": ">= 2.1.2 < 3" 236 | } 237 | }, 238 | "ignore-walk": { 239 | "version": "3.0.3", 240 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", 241 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", 242 | "requires": { 243 | "minimatch": "^3.0.4" 244 | } 245 | }, 246 | "inflight": { 247 | "version": "1.0.6", 248 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 249 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 250 | "requires": { 251 | "once": "^1.3.0", 252 | "wrappy": "1" 253 | } 254 | }, 255 | "inherits": { 256 | "version": "2.0.4", 257 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 258 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 259 | }, 260 | "ini": { 261 | "version": "1.3.5", 262 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 263 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 264 | }, 265 | "is-arrayish": { 266 | "version": "0.3.2", 267 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 268 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 269 | }, 270 | "is-fullwidth-code-point": { 271 | "version": "1.0.0", 272 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 273 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 274 | "requires": { 275 | "number-is-nan": "^1.0.0" 276 | } 277 | }, 278 | "isarray": { 279 | "version": "1.0.0", 280 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 281 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 282 | }, 283 | "mimic-response": { 284 | "version": "2.0.0", 285 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", 286 | "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==" 287 | }, 288 | "minimatch": { 289 | "version": "3.0.4", 290 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 291 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 292 | "requires": { 293 | "brace-expansion": "^1.1.7" 294 | } 295 | }, 296 | "minimist": { 297 | "version": "0.0.8", 298 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 299 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 300 | }, 301 | "minipass": { 302 | "version": "2.9.0", 303 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 304 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 305 | "requires": { 306 | "safe-buffer": "^5.1.2", 307 | "yallist": "^3.0.0" 308 | } 309 | }, 310 | "minizlib": { 311 | "version": "1.3.3", 312 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 313 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 314 | "requires": { 315 | "minipass": "^2.9.0" 316 | } 317 | }, 318 | "mkdirp": { 319 | "version": "0.5.1", 320 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 321 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 322 | "requires": { 323 | "minimist": "0.0.8" 324 | } 325 | }, 326 | "moment": { 327 | "version": "2.24.0", 328 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", 329 | "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" 330 | }, 331 | "ms": { 332 | "version": "2.1.2", 333 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 334 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 335 | }, 336 | "nan": { 337 | "version": "2.14.0", 338 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 339 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" 340 | }, 341 | "napi-build-utils": { 342 | "version": "1.0.1", 343 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", 344 | "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" 345 | }, 346 | "needle": { 347 | "version": "2.4.0", 348 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", 349 | "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", 350 | "requires": { 351 | "debug": "^3.2.6", 352 | "iconv-lite": "^0.4.4", 353 | "sax": "^1.2.4" 354 | } 355 | }, 356 | "node-abi": { 357 | "version": "2.12.0", 358 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.12.0.tgz", 359 | "integrity": "sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw==", 360 | "requires": { 361 | "semver": "^5.4.1" 362 | } 363 | }, 364 | "node-pre-gyp": { 365 | "version": "0.13.0", 366 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", 367 | "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", 368 | "requires": { 369 | "detect-libc": "^1.0.2", 370 | "mkdirp": "^0.5.1", 371 | "needle": "^2.2.1", 372 | "nopt": "^4.0.1", 373 | "npm-packlist": "^1.1.6", 374 | "npmlog": "^4.0.2", 375 | "rc": "^1.2.7", 376 | "rimraf": "^2.6.1", 377 | "semver": "^5.3.0", 378 | "tar": "^4" 379 | } 380 | }, 381 | "noop-logger": { 382 | "version": "0.1.1", 383 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 384 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" 385 | }, 386 | "nopt": { 387 | "version": "4.0.1", 388 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 389 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 390 | "requires": { 391 | "abbrev": "1", 392 | "osenv": "^0.1.4" 393 | } 394 | }, 395 | "npm-bundled": { 396 | "version": "1.0.6", 397 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", 398 | "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" 399 | }, 400 | "npm-packlist": { 401 | "version": "1.4.6", 402 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz", 403 | "integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==", 404 | "requires": { 405 | "ignore-walk": "^3.0.1", 406 | "npm-bundled": "^1.0.1" 407 | } 408 | }, 409 | "npmlog": { 410 | "version": "4.1.2", 411 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 412 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 413 | "requires": { 414 | "are-we-there-yet": "~1.1.2", 415 | "console-control-strings": "~1.1.0", 416 | "gauge": "~2.7.3", 417 | "set-blocking": "~2.0.0" 418 | } 419 | }, 420 | "number-is-nan": { 421 | "version": "1.0.1", 422 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 423 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 424 | }, 425 | "object-assign": { 426 | "version": "4.1.1", 427 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 428 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 429 | }, 430 | "once": { 431 | "version": "1.4.0", 432 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 433 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 434 | "requires": { 435 | "wrappy": "1" 436 | } 437 | }, 438 | "os-homedir": { 439 | "version": "1.0.2", 440 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 441 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 442 | }, 443 | "os-tmpdir": { 444 | "version": "1.0.2", 445 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 446 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 447 | }, 448 | "osenv": { 449 | "version": "0.1.5", 450 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 451 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 452 | "requires": { 453 | "os-homedir": "^1.0.0", 454 | "os-tmpdir": "^1.0.0" 455 | } 456 | }, 457 | "path-is-absolute": { 458 | "version": "1.0.1", 459 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 460 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 461 | }, 462 | "prebuild-install": { 463 | "version": "5.3.3", 464 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", 465 | "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", 466 | "requires": { 467 | "detect-libc": "^1.0.3", 468 | "expand-template": "^2.0.3", 469 | "github-from-package": "0.0.0", 470 | "minimist": "^1.2.0", 471 | "mkdirp": "^0.5.1", 472 | "napi-build-utils": "^1.0.1", 473 | "node-abi": "^2.7.0", 474 | "noop-logger": "^0.1.1", 475 | "npmlog": "^4.0.1", 476 | "pump": "^3.0.0", 477 | "rc": "^1.2.7", 478 | "simple-get": "^3.0.3", 479 | "tar-fs": "^2.0.0", 480 | "tunnel-agent": "^0.6.0", 481 | "which-pm-runs": "^1.0.0" 482 | }, 483 | "dependencies": { 484 | "minimist": { 485 | "version": "1.2.0", 486 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 487 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 488 | } 489 | } 490 | }, 491 | "process-nextick-args": { 492 | "version": "2.0.1", 493 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 494 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 495 | }, 496 | "pump": { 497 | "version": "3.0.0", 498 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 499 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 500 | "requires": { 501 | "end-of-stream": "^1.1.0", 502 | "once": "^1.3.1" 503 | } 504 | }, 505 | "rc": { 506 | "version": "1.2.8", 507 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 508 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 509 | "requires": { 510 | "deep-extend": "^0.6.0", 511 | "ini": "~1.3.0", 512 | "minimist": "^1.2.0", 513 | "strip-json-comments": "~2.0.1" 514 | }, 515 | "dependencies": { 516 | "minimist": { 517 | "version": "1.2.0", 518 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 519 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 520 | } 521 | } 522 | }, 523 | "readable-stream": { 524 | "version": "2.3.6", 525 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 526 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 527 | "requires": { 528 | "core-util-is": "~1.0.0", 529 | "inherits": "~2.0.3", 530 | "isarray": "~1.0.0", 531 | "process-nextick-args": "~2.0.0", 532 | "safe-buffer": "~5.1.1", 533 | "string_decoder": "~1.1.1", 534 | "util-deprecate": "~1.0.1" 535 | } 536 | }, 537 | "rimraf": { 538 | "version": "2.7.1", 539 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 540 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 541 | "requires": { 542 | "glob": "^7.1.3" 543 | } 544 | }, 545 | "safe-buffer": { 546 | "version": "5.1.2", 547 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 548 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 549 | }, 550 | "safer-buffer": { 551 | "version": "2.1.2", 552 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 553 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 554 | }, 555 | "sax": { 556 | "version": "1.2.4", 557 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 558 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 559 | }, 560 | "semver": { 561 | "version": "5.7.1", 562 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 563 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 564 | }, 565 | "set-blocking": { 566 | "version": "2.0.0", 567 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 568 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 569 | }, 570 | "sharp": { 571 | "version": "0.23.3", 572 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.3.tgz", 573 | "integrity": "sha512-pjT4zyviQteXMC1Z8USIiSwQFQbZTlU5J59/UoygE25hh+sSb7PSYI/MZ2MCB1COtxWQuoUAaG3TYIOLon26Mg==", 574 | "requires": { 575 | "color": "^3.1.2", 576 | "detect-libc": "^1.0.3", 577 | "nan": "^2.14.0", 578 | "npmlog": "^4.1.2", 579 | "prebuild-install": "^5.3.3", 580 | "semver": "^6.3.0", 581 | "simple-get": "^3.1.0", 582 | "tar": "^5.0.5", 583 | "tunnel-agent": "^0.6.0" 584 | }, 585 | "dependencies": { 586 | "fs-minipass": { 587 | "version": "2.0.0", 588 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", 589 | "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", 590 | "requires": { 591 | "minipass": "^3.0.0" 592 | } 593 | }, 594 | "minipass": { 595 | "version": "3.1.1", 596 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", 597 | "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", 598 | "requires": { 599 | "yallist": "^4.0.0" 600 | } 601 | }, 602 | "minizlib": { 603 | "version": "2.1.0", 604 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", 605 | "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", 606 | "requires": { 607 | "minipass": "^3.0.0", 608 | "yallist": "^4.0.0" 609 | } 610 | }, 611 | "semver": { 612 | "version": "6.3.0", 613 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 614 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 615 | }, 616 | "tar": { 617 | "version": "5.0.5", 618 | "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", 619 | "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", 620 | "requires": { 621 | "chownr": "^1.1.3", 622 | "fs-minipass": "^2.0.0", 623 | "minipass": "^3.0.0", 624 | "minizlib": "^2.1.0", 625 | "mkdirp": "^0.5.0", 626 | "yallist": "^4.0.0" 627 | } 628 | }, 629 | "yallist": { 630 | "version": "4.0.0", 631 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 632 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 633 | } 634 | } 635 | }, 636 | "signal-exit": { 637 | "version": "3.0.2", 638 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 639 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 640 | }, 641 | "simple-concat": { 642 | "version": "1.0.0", 643 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 644 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 645 | }, 646 | "simple-get": { 647 | "version": "3.1.0", 648 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 649 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 650 | "requires": { 651 | "decompress-response": "^4.2.0", 652 | "once": "^1.3.1", 653 | "simple-concat": "^1.0.0" 654 | } 655 | }, 656 | "simple-swizzle": { 657 | "version": "0.2.2", 658 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 659 | "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", 660 | "requires": { 661 | "is-arrayish": "^0.3.1" 662 | } 663 | }, 664 | "string-width": { 665 | "version": "1.0.2", 666 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 667 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 668 | "requires": { 669 | "code-point-at": "^1.0.0", 670 | "is-fullwidth-code-point": "^1.0.0", 671 | "strip-ansi": "^3.0.0" 672 | } 673 | }, 674 | "string_decoder": { 675 | "version": "1.1.1", 676 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 677 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 678 | "requires": { 679 | "safe-buffer": "~5.1.0" 680 | } 681 | }, 682 | "strip-ansi": { 683 | "version": "3.0.1", 684 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 685 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 686 | "requires": { 687 | "ansi-regex": "^2.0.0" 688 | } 689 | }, 690 | "strip-json-comments": { 691 | "version": "2.0.1", 692 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 693 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 694 | }, 695 | "tar": { 696 | "version": "4.4.13", 697 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 698 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 699 | "requires": { 700 | "chownr": "^1.1.1", 701 | "fs-minipass": "^1.2.5", 702 | "minipass": "^2.8.6", 703 | "minizlib": "^1.2.1", 704 | "mkdirp": "^0.5.0", 705 | "safe-buffer": "^5.1.2", 706 | "yallist": "^3.0.3" 707 | } 708 | }, 709 | "tar-fs": { 710 | "version": "2.0.0", 711 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", 712 | "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", 713 | "requires": { 714 | "chownr": "^1.1.1", 715 | "mkdirp": "^0.5.1", 716 | "pump": "^3.0.0", 717 | "tar-stream": "^2.0.0" 718 | } 719 | }, 720 | "tar-stream": { 721 | "version": "2.1.0", 722 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", 723 | "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", 724 | "requires": { 725 | "bl": "^3.0.0", 726 | "end-of-stream": "^1.4.1", 727 | "fs-constants": "^1.0.0", 728 | "inherits": "^2.0.3", 729 | "readable-stream": "^3.1.1" 730 | }, 731 | "dependencies": { 732 | "readable-stream": { 733 | "version": "3.4.0", 734 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 735 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 736 | "requires": { 737 | "inherits": "^2.0.3", 738 | "string_decoder": "^1.1.1", 739 | "util-deprecate": "^1.0.1" 740 | } 741 | } 742 | } 743 | }, 744 | "tunnel-agent": { 745 | "version": "0.6.0", 746 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 747 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 748 | "requires": { 749 | "safe-buffer": "^5.0.1" 750 | } 751 | }, 752 | "util-deprecate": { 753 | "version": "1.0.2", 754 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 755 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 756 | }, 757 | "which-pm-runs": { 758 | "version": "1.0.0", 759 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 760 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" 761 | }, 762 | "wide-align": { 763 | "version": "1.1.3", 764 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 765 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 766 | "requires": { 767 | "string-width": "^1.0.2 || 2" 768 | } 769 | }, 770 | "wrappy": { 771 | "version": "1.0.2", 772 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 773 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 774 | }, 775 | "yallist": { 776 | "version": "3.1.1", 777 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 778 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 779 | } 780 | } 781 | } 782 | --------------------------------------------------------------------------------