diff --git a/.vscode/settings.json b/.vscode/settings.json
index b5da1e8e6..82815d588 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,5 +4,6 @@
"files.eol": "\n",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
- }
+ },
+ "search.useIgnoreFiles": false
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf7d8465a..dde790aaa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,16 +5,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2312.01] - 2023-04-06
+
+### Added
+-
+
+### Changed
+-
+
+### Fixed
+-
+
## [2310.01] - 2023-03-23
### Added
--
-
-### Changed
--
+- (Trabajadores -> Control de horario) Ahora se puede confirmar/no confirmar el registro horario de cada semana desde esta sección
### Fixed
-- (Clientes -> Listado extendido) Resuelto error al filtrar por clientes inactivos desde la columna "Activo"
+- (Clientes -> Listado extendido) Resuelto error al filtrar por clientes inactivos desde la columna "Activo"
- (General) Al pasar el ratón por encima del icono de "Borrar" en un campo, se hacía más grande afectando a la interfaz
## [2308.01] - 2023-03-09
diff --git a/Dockerfile b/Dockerfile
index a59725f77..ee87cd0d0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,6 +10,7 @@ RUN apt-get update \
curl \
ca-certificates \
gnupg2 \
+ graphicsmagick \
&& curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& npm install -g npm@8.19.2
diff --git a/back/methods/collection/previousLabel.js b/back/methods/collection/previousLabel.js
index fb2df8133..e3dac1ab4 100644
--- a/back/methods/collection/previousLabel.js
+++ b/back/methods/collection/previousLabel.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('previousLabel', {
description: 'Returns the previa label pdf',
@@ -33,17 +31,5 @@ module.exports = Self => {
}
});
- Self.previousLabel = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('previa-label', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="previa-${id}.pdf"`];
- };
+ Self.previousLabel = (ctx, id) => Self.printReport(ctx, id, 'previa-label');
};
diff --git a/back/models/account.js b/back/models/account.js
index c2502380a..6d71a4e52 100644
--- a/back/models/account.js
+++ b/back/models/account.js
@@ -131,7 +131,7 @@ module.exports = Self => {
WHERE u.id = ?`, [userId], options);
let roles = [];
- for (role of result)
+ for (const role of result)
roles.push(role.name);
return roles;
diff --git a/db/changes/231001/00-invoiceOut.sql b/db/changes/231001/00-invoiceOut.sql
new file mode 100644
index 000000000..4404c8f4a
--- /dev/null
+++ b/db/changes/231001/00-invoiceOut.sql
@@ -0,0 +1,6 @@
+ALTER TABLE vn.invoiceOutSerial
+ ADD `type` ENUM('global', 'quick') DEFAULT NULL NULL;
+
+ UPDATE vn.invoiceOutSerial
+ SET type = 'global'
+ WHERE code IN ('A','V');
\ No newline at end of file
diff --git a/db/changes/230402/00-invoiceOut_getWeight.sql b/db/changes/231001/00-invoiceOut_getWeight.sql
similarity index 83%
rename from db/changes/230402/00-invoiceOut_getWeight.sql
rename to db/changes/231001/00-invoiceOut_getWeight.sql
index 4ca284857..3f34b6fb7 100644
--- a/db/changes/230402/00-invoiceOut_getWeight.sql
+++ b/db/changes/231001/00-invoiceOut_getWeight.sql
@@ -2,13 +2,15 @@ DROP FUNCTION IF EXISTS `vn`.`invoiceOut_getWeight`;
DELIMITER $$
$$
-CREATE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceOut_getWeight`(vInvoice VARCHAR(15)) RETURNS decimal(10,2)
+CREATE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceOut_getWeight`(
+ vInvoiceRef VARCHAR(15)
+)RETURNS decimal(10,2)
READS SQL DATA
BEGIN
/**
* Calcula el peso de una factura emitida
*
- * @param vInvoice Id de la factura
+ * @param vInvoiceRef referencia de la factura
* @return vTotalWeight peso de la factura
*/
DECLARE vTotalWeight DECIMAL(10,2);
@@ -22,7 +24,7 @@ BEGIN
JOIN item i ON i.id = s.itemFk
JOIN itemCost ic ON ic.itemFk = i.id
AND ic.warehouseFk = t.warehouseFk
- WHERE t.refFk = vInvoice
+ WHERE t.refFk = vInvoiceRef
AND i.intrastatFk;
RETURN vTotalWeight;
diff --git a/db/changes/231001/00-report.sql b/db/changes/231001/00-report.sql
new file mode 100644
index 000000000..0bc7c8da4
--- /dev/null
+++ b/db/changes/231001/00-report.sql
@@ -0,0 +1,6 @@
+UPDATE `vn`.`report`
+ SET `method`='InvoiceOuts/{refFk}/invoice-out-pdf'
+WHERE name='invoice';
+
+ALTER TABLE `vn`.`printQueue` MODIFY COLUMN printerFk tinyint(3) unsigned DEFAULT 82 NOT NULL;
+
diff --git a/db/changes/231001/01-invoiceOut_getMaxIssued.sql b/db/changes/231001/01-invoiceOut_getMaxIssued.sql
new file mode 100644
index 000000000..e120b949d
--- /dev/null
+++ b/db/changes/231001/01-invoiceOut_getMaxIssued.sql
@@ -0,0 +1,34 @@
+DROP FUNCTION IF EXISTS `vn`.`invoiceOut_getMaxIssued`;
+
+DELIMITER $$
+$$
+CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceOut_getMaxIssued`(
+ vSerial VARCHAR(2),
+ vCompanyFk INT,
+ vYear INT
+) RETURNS DATE
+ READS SQL DATA
+BEGIN
+/**
+ * Retorna la fecha a partir de la cual es válido emitir una factura
+ *
+ * @param vSerial Serie de facturación
+ * @param vCompanyFk Empresa factura emitida
+ * @param vYear Año contable
+ * @return vInvoiceOutIssued fecha factura válida
+ */
+ DECLARE vInvoiceOutIssued DATE;
+ DECLARE vFirstDayOfYear DATE;
+
+ SET vFirstDayOfYear := MAKEDATE(vYear, 1);
+
+ SELECT IFNULL(MAX(io.issued), vFirstDayOfYear) INTO vInvoiceOutIssued
+ FROM invoiceOut io
+ WHERE io.serial = vSerial
+ AND io.companyFk = vCompanyFk
+ AND io.issued BETWEEN vFirstDayOfYear
+ AND util.lastDayOfYear(vFirstDayOfYear);
+
+ RETURN vInvoiceOutIssued;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/changes/231001/02-invoiceOut_new.sql b/db/changes/231001/02-invoiceOut_new.sql
new file mode 100644
index 000000000..0fd91ef58
--- /dev/null
+++ b/db/changes/231001/02-invoiceOut_new.sql
@@ -0,0 +1,258 @@
+DROP PROCEDURE IF EXISTS `vn`.`invoiceOut_new`;
+
+DELIMITER $$
+$$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceOut_new`(
+ vSerial VARCHAR(255),
+ vInvoiceDate DATE,
+ vTaxArea VARCHAR(25),
+ OUT vNewInvoiceId INT)
+BEGIN
+/**
+ * Creación de facturas emitidas.
+ * requiere previamente tabla ticketToInvoice(id).
+ *
+ * @param vSerial serie a la cual se hace la factura
+ * @param vInvoiceDate fecha de la factura
+ * @param vTaxArea tipo de iva en relacion a la empresa y al cliente
+ * @param vNewInvoiceId id de la factura que se acaba de generar
+ * @return vNewInvoiceId
+ */
+ DECLARE vIsAnySaleToInvoice BOOL;
+ DECLARE vIsAnyServiceToInvoice BOOL;
+ DECLARE vNewRef VARCHAR(255);
+ DECLARE vWorker INT DEFAULT account.myUser_getId();
+ DECLARE vCompanyFk INT;
+ DECLARE vInterCompanyFk INT;
+ DECLARE vClientFk INT;
+ DECLARE vCplusStandardInvoiceTypeFk INT DEFAULT 1;
+ DECLARE vCplusCorrectingInvoiceTypeFk INT DEFAULT 6;
+ DECLARE vCplusSimplifiedInvoiceTypeFk INT DEFAULT 2;
+ DECLARE vCorrectingSerial VARCHAR(1) DEFAULT 'R';
+ DECLARE vSimplifiedSerial VARCHAR(1) DEFAULT 'S';
+ DECLARE vNewInvoiceInFk INT;
+ DECLARE vIsInterCompany BOOL DEFAULT FALSE;
+ DECLARE vIsCEESerial BOOL DEFAULT FALSE;
+ DECLARE vIsCorrectInvoiceDate BOOL;
+ DECLARE vMaxShipped DATE;
+
+ SET vInvoiceDate = IFNULL(vInvoiceDate, util.CURDATE());
+
+ SELECT t.clientFk,
+ t.companyFk,
+ MAX(DATE(t.shipped)),
+ DATE(vInvoiceDate) >= invoiceOut_getMaxIssued(
+ vSerial,
+ t.companyFk,
+ YEAR(vInvoiceDate))
+ INTO vClientFk,
+ vCompanyFk,
+ vMaxShipped,
+ vIsCorrectInvoiceDate
+ FROM ticketToInvoice tt
+ JOIN ticket t ON t.id = tt.id;
+
+ IF(vMaxShipped > vInvoiceDate) THEN
+ CALL util.throw("Invoice date can't be less than max date");
+ END IF;
+
+ IF NOT vIsCorrectInvoiceDate THEN
+ CALL util.throw('Exists an invoice with a previous date');
+ END IF;
+
+ -- Eliminem de ticketToInvoice els tickets que no han de ser facturats
+ DELETE ti.*
+ FROM ticketToInvoice ti
+ JOIN ticket t ON t.id = ti.id
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ JOIN supplier su ON su.id = t.companyFk
+ JOIN client c ON c.id = t.clientFk
+ LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id AND itc.countryFk = su.countryFk
+ WHERE (YEAR(t.shipped) < 2001 AND t.isDeleted)
+ OR c.isTaxDataChecked = FALSE
+ OR t.isDeleted
+ OR c.hasToInvoice = FALSE
+ OR itc.id IS NULL;
+
+ SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0
+ INTO vIsAnySaleToInvoice
+ FROM ticketToInvoice t
+ JOIN sale s ON s.ticketFk = t.id;
+
+ SELECT COUNT(*) > 0 INTO vIsAnyServiceToInvoice
+ FROM ticketToInvoice t
+ JOIN ticketService ts ON ts.ticketFk = t.id;
+
+ IF (vIsAnySaleToInvoice OR vIsAnyServiceToInvoice)
+ AND (vCorrectingSerial = vSerial OR NOT hasAnyNegativeBase())
+ THEN
+
+ -- el trigger añade el siguiente Id_Factura correspondiente a la vSerial
+ INSERT INTO invoiceOut(
+ ref,
+ serial,
+ issued,
+ clientFk,
+ dued,
+ companyFk,
+ cplusInvoiceType477Fk
+ )
+ SELECT
+ 1,
+ vSerial,
+ vInvoiceDate,
+ vClientFk,
+ getDueDate(vInvoiceDate, dueDay),
+ vCompanyFk,
+ IF(vSerial = vCorrectingSerial,
+ vCplusCorrectingInvoiceTypeFk,
+ IF(vSerial = vSimplifiedSerial,
+ vCplusSimplifiedInvoiceTypeFk,
+ vCplusStandardInvoiceTypeFk))
+ FROM client
+ WHERE id = vClientFk;
+
+ SET vNewInvoiceId = LAST_INSERT_ID();
+
+ SELECT `ref`
+ INTO vNewRef
+ FROM invoiceOut
+ WHERE id = vNewInvoiceId;
+
+ UPDATE ticket t
+ JOIN ticketToInvoice ti ON ti.id = t.id
+ SET t.refFk = vNewRef;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.updateInter;
+ CREATE TEMPORARY TABLE tmp.updateInter ENGINE = MEMORY
+ SELECT s.id,ti.id ticket_id,vWorker Id_Trabajador
+ FROM ticketToInvoice ti
+ LEFT JOIN ticketState ts ON ti.id = ts.ticket
+ JOIN state s
+ WHERE IFNULL(ts.alertLevel,0) < 3 and s.`code` = getAlert3State(ti.id);
+
+ INSERT INTO ticketTracking(stateFk,ticketFk,workerFk)
+ SELECT * FROM tmp.updateInter;
+
+ INSERT INTO ticketLog (action, userFk, originFk, description)
+ SELECT 'UPDATE', account.myUser_getId(), ti.id, CONCAT('Crea factura ', vNewRef)
+ FROM ticketToInvoice ti;
+
+ CALL invoiceExpenceMake(vNewInvoiceId);
+ CALL invoiceTaxMake(vNewInvoiceId,vTaxArea);
+
+ UPDATE invoiceOut io
+ JOIN (
+ SELECT SUM(amount) total
+ FROM invoiceOutExpence
+ WHERE invoiceOutFk = vNewInvoiceId
+ ) base
+ JOIN (
+ SELECT SUM(vat) total
+ FROM invoiceOutTax
+ WHERE invoiceOutFk = vNewInvoiceId
+ ) vat
+ SET io.amount = base.total + vat.total
+ WHERE io.id = vNewInvoiceId;
+
+ DROP TEMPORARY TABLE tmp.updateInter;
+
+ SELECT COUNT(*), id
+ INTO vIsInterCompany, vInterCompanyFk
+ FROM company
+ WHERE clientFk = vClientFk;
+
+ IF (vIsInterCompany) THEN
+
+ INSERT INTO invoiceIn(supplierFk, supplierRef, issued, companyFk)
+ SELECT vCompanyFk, vNewRef, vInvoiceDate, vInterCompanyFk;
+
+ SET vNewInvoiceInFk = LAST_INSERT_ID();
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
+ CREATE TEMPORARY TABLE tmp.ticket
+ (KEY (ticketFk))
+ ENGINE = MEMORY
+ SELECT id ticketFk
+ FROM ticketToInvoice;
+
+ CALL `ticket_getTax`('NATIONAL');
+
+ SET @vTaxableBaseServices := 0.00;
+ SET @vTaxCodeGeneral := NULL;
+
+ INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
+ SELECT vNewInvoiceInFk,
+ @vTaxableBaseServices,
+ sub.expenceFk,
+ sub.taxTypeSageFk,
+ sub.transactionTypeSageFk
+ FROM (
+ SELECT @vTaxableBaseServices := SUM(tst.taxableBase) taxableBase,
+ i.expenceFk,
+ i.taxTypeSageFk,
+ i.transactionTypeSageFk,
+ @vTaxCodeGeneral := i.taxClassCodeFk
+ FROM tmp.ticketServiceTax tst
+ JOIN invoiceOutTaxConfig i ON i.taxClassCodeFk = tst.code
+ WHERE i.isService
+ HAVING taxableBase
+ ) sub;
+
+ INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenceFk, taxTypeSageFk, transactionTypeSageFk)
+ SELECT vNewInvoiceInFk,
+ SUM(tt.taxableBase) - IF(tt.code = @vTaxCodeGeneral,
+ @vTaxableBaseServices, 0) taxableBase,
+ i.expenceFk,
+ i.taxTypeSageFk ,
+ i.transactionTypeSageFk
+ FROM tmp.ticketTax tt
+ JOIN invoiceOutTaxConfig i ON i.taxClassCodeFk = tt.code
+ WHERE !i.isService
+ GROUP BY tt.pgcFk
+ HAVING taxableBase
+ ORDER BY tt.priority;
+
+ CALL invoiceInDueDay_calculate(vNewInvoiceInFk);
+
+ SELECT COUNT(*) INTO vIsCEESerial
+ FROM invoiceOutSerial
+ WHERE code = vSerial;
+
+ IF vIsCEESerial THEN
+
+ INSERT INTO invoiceInIntrastat (
+ invoiceInFk,
+ intrastatFk,
+ amount,
+ stems,
+ countryFk,
+ net)
+ SELECT
+ vNewInvoiceInFk,
+ i.intrastatFk,
+ SUM(CAST((s.quantity * s.price * (100 - s.discount) / 100 ) AS DECIMAL(10, 2))),
+ SUM(CAST(IFNULL(i.stems, 1) * s.quantity AS DECIMAL(10, 2))),
+ su.countryFk,
+ CAST(SUM(IFNULL(i.stems, 1)
+ * s.quantity
+ * IF(ic.grams, ic.grams, IFNULL(i.weightByPiece, 0)) / 1000) AS DECIMAL(10, 2))
+ FROM sale s
+ JOIN ticket t ON s.ticketFk = t.id
+ JOIN supplier su ON su.id = t.companyFk
+ JOIN item i ON i.id = s.itemFk
+ LEFT JOIN itemCost ic ON ic.itemFk = i.id AND ic.warehouseFk = t.warehouseFk
+ WHERE t.refFk = vNewRef
+ GROUP BY i.intrastatFk;
+
+ END IF;
+ DROP TEMPORARY TABLE tmp.ticket;
+ DROP TEMPORARY TABLE tmp.ticketAmount;
+ DROP TEMPORARY TABLE tmp.ticketTax;
+ DROP TEMPORARY TABLE tmp.ticketServiceTax;
+ END IF;
+ END IF;
+ DROP TEMPORARY TABLE `ticketToInvoice`;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/changes/231001/03-ticketPackaging_add.sql b/db/changes/231001/03-ticketPackaging_add.sql
new file mode 100644
index 000000000..a7cf1d1d3
--- /dev/null
+++ b/db/changes/231001/03-ticketPackaging_add.sql
@@ -0,0 +1,141 @@
+DROP PROCEDURE IF EXISTS `vn`.`ticketPackaging_add`;
+
+DELIMITER $$
+$$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketPackaging_add`(
+ vClientFk INT,
+ vDated DATE,
+ vCompanyFk INT,
+ vWithoutPeriodGrace BOOLEAN)
+BEGIN
+/**
+ * Genera nuevos tickets de embalajes para los clientes no han los han retornado
+ * y actualiza los valores para la tabla ticketPackaging
+ *
+ * @param vClientFk Cliente en caso de NULL todos los clientes
+ * @param vDated Fecha hasta la cual se revisan los embalajes
+ * @param vCompanyFk Empresa de la cual se comprobaran sus clientes
+ * @param vWithoutPeriodGrace si no se aplica el periodo de gracia de un mes
+ */
+ DECLARE vNewTicket INT;
+ DECLARE vDateStart DATE;
+ DECLARE vDateEnd DATE;
+ DECLARE vGraceDate DATE DEFAULT vDated;
+ DECLARE vWarehouseInventory INT;
+ DECLARE vComponentCost INT;
+ DECLARE vDone INT DEFAULT FALSE;
+ DECLARE vClientId INT;
+
+ DECLARE vCursor CURSOR FOR
+ SELECT DISTINCT clientFk
+ FROM (
+ SELECT clientFk, SUM(quantity) totalQuantity
+ FROM tmp.packagingToInvoice
+ GROUP BY itemFk, clientFk
+ HAVING totalQuantity > 0)sub;
+
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ SELECT id INTO vWarehouseInventory
+ FROM warehouse
+ WHERE `code`= 'inv';
+
+ SELECT id INTO vComponentCost
+ FROM component
+ WHERE `code`= 'purchaseValue';
+
+ SELECT packagingInvoicingDated INTO vDateStart
+ FROM ticketConfig;
+
+ IF vWarehouseInventory IS NULL THEN
+ CALL util.throw('Warehouse inventory not set');
+ END IF;
+
+ IF vComponentCost IS NULL THEN
+ CALL util.throw('Component cost not set');
+ END IF;
+
+ SET vDateEnd = vDated + INTERVAL 1 DAY;
+
+ IF NOT vWithoutPeriodGrace THEN
+ SET vGraceDate = vGraceDate -INTERVAL 1 MONTH;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp.packagingToInvoice;
+ CREATE TEMPORARY TABLE tmp.packagingToInvoice
+ (INDEX (clientFk))
+ ENGINE = MEMORY
+ SELECT p.itemFk,
+ tp.packagingFk,
+ tp.quantity,
+ tp.ticketFk,
+ p.price,
+ t.clientFk
+ FROM ticketPackaging tp
+ JOIN packaging p ON p.id = tp.packagingFk
+ JOIN ticket t ON t.id = tp.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ WHERE c.isActive
+ AND (vClientFk IS NULL OR t.clientFk = vClientFk)
+ AND t.shipped BETWEEN vDateStart AND vDateEnd
+ AND (tp.quantity < 0 OR (tp.quantity > 0 AND t.shipped < vGraceDate))
+ AND tp.quantity
+ AND p.itemFk;
+
+ OPEN vCursor;
+ l: LOOP
+
+ FETCH vCursor INTO vClientId;
+
+ IF vDone THEN
+ LEAVE l;
+ END IF;
+
+ START TRANSACTION;
+
+ CALL ticket_add(
+ vClientId,
+ vDateEnd,
+ vWarehouseInventory,
+ vCompanyFk,
+ NULL,
+ NULL,
+ NULL,
+ vDateEnd,
+ account.myUser_getId(),
+ TRUE,
+ vNewTicket);
+
+ INSERT INTO ticketPackaging(ticketFk, packagingFk, quantity, pvp)
+ SELECT vNewTicket, packagingFk, - SUM(quantity) totalQuantity, price
+ FROM tmp.packagingToInvoice
+ WHERE clientFk = vClientId
+ GROUP BY packagingFk
+ HAVING IF(vWithoutPeriodGrace, totalQuantity <> 0, totalQuantity < 0);
+
+ INSERT INTO sale(ticketFk, itemFk, concept, quantity, price)
+ SELECT vNewTicket, pti.itemFk, i.name, SUM(pti.quantity) totalQuantity, pti.price
+ FROM tmp.packagingToInvoice pti
+ JOIN item i ON i.id = pti.itemFk
+ WHERE pti.clientFk = vClientId
+ GROUP BY pti.itemFk
+ HAVING IF(vWithoutPeriodGrace, totalQuantity <> 0, totalQuantity > 0);
+
+ INSERT INTO saleComponent(saleFk, componentFk, value)
+ SELECT id, vComponentCost, price
+ FROM sale
+ WHERE ticketFk = vNewTicket;
+
+ COMMIT;
+ END LOOP;
+ CLOSE vCursor;
+
+ DROP TEMPORARY TABLE tmp.packagingToInvoice;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/changes/231201/.gitkeep b/db/changes/231201/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index 80983a318..3ab34e1d5 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -164,7 +164,7 @@ INSERT INTO `vn`.`warehouse`(`id`, `name`, `code`, `isComparative`, `isInventory
(3, 'Warehouse Three', NULL, 1, 1, 1, 1, 0, 0, 2, 1, 1),
(4, 'Warehouse Four', NULL, 1, 1, 1, 1, 0, 0, 2, 1, 1),
(5, 'Warehouse Five', NULL, 1, 1, 1, 1, 0, 0, 2, 1, 1),
- (13, 'Inventory', NULL, 1, 1, 1, 0, 0, 0, 2, 1, 0),
+ (13, 'Inventory', 'inv', 1, 1, 1, 0, 0, 0, 2, 1, 0),
(60, 'Algemesi', NULL, 1, 1, 1, 0, 0, 0, 2, 1, 0);
@@ -173,10 +173,11 @@ INSERT INTO `vn`.`sector`(`id`, `description`, `warehouseFk`, `isPreviousPrepare
(1, 'First sector', 1, 1, 'FIRST'),
(2, 'Second sector', 2, 0, 'SECOND');
-INSERT INTO `vn`.`printer` (`id`, `name`, `path`, `isLabeler`, `sectorFk`)
+INSERT INTO `vn`.`printer` (`id`, `name`, `path`, `isLabeler`, `sectorFk`, `ipAddress`)
VALUES
- (1, 'printer1', 'path1', 0, 1),
- (2, 'printer2', 'path2', 1, 1);
+ (1, 'printer1', 'path1', 0, 1 , NULL),
+ (2, 'printer2', 'path2', 1, 1 , NULL),
+ (4, 'printer4', 'path4', 0, NULL, '10.1.10.4');
INSERT INTO `vn`.`worker`(`id`, `code`, `firstName`, `lastName`, `userFk`,`bossFk`, `phone`, `sectorFk`, `labelerFk`)
VALUES
@@ -571,14 +572,13 @@ INSERT INTO `vn`.`taxArea` (`code`, `claveOperacionFactura`, `CodigoTransaccion`
('NATIONAL', 0, 1),
('WORLD', 2, 15);
-INSERT INTO `vn`.`invoiceOutSerial` (`code`, `description`, `isTaxed`, `taxAreaFk`, `isCEE`)
+INSERT INTO `vn`.`invoiceOutSerial` (`code`, `description`, `isTaxed`, `taxAreaFk`, `isCEE`, `type`)
VALUES
- ('A', 'Global nacional', 1, 'NATIONAL', 0),
- ('T', 'Española rapida', 1, 'NATIONAL', 0),
- ('V', 'Intracomunitaria global', 0, 'CEE', 1),
- ('M', 'Múltiple nacional', 1, 'NATIONAL', 0),
- ('E', 'Exportación rápida', 0, 'WORLD', 0);
-;
+ ('A', 'Global nacional', 1, 'NATIONAL', 0, 'global'),
+ ('T', 'Española rapida', 1, 'NATIONAL', 0, 'quick'),
+ ('V', 'Intracomunitaria global', 0, 'CEE', 1, 'global'),
+ ('M', 'Múltiple nacional', 1, 'NATIONAL', 0, 'quick'),
+ ('E', 'Exportación rápida', 0, 'WORLD', 0, 'quick');
INSERT INTO `vn`.`invoiceOut`(`id`, `serial`, `amount`, `issued`,`clientFk`, `created`, `companyFk`, `dued`, `booked`, `bankFk`, `hasPdf`)
VALUES
@@ -2367,11 +2367,11 @@ INSERT INTO `vn`.`device` (`sn`, `model`, `userFk`)
VALUES
('aaa', 'android', '9');
-INSERT INTO `vn`.`queuePriority`(`id`, `priority`)
+INSERT INTO `vn`.`queuePriority`(`id`, `priority`, `code`)
VALUES
- (1, 'Alta'),
- (2, 'Normal'),
- (3, 'Baja');
+ (1, 'Alta', 'high'),
+ (2, 'Normal', 'normal'),
+ (3, 'Baja', 'low');
INSERT INTO `vn`.`workerTimeControlParams` (`id`, `dayBreak`, `weekBreak`, `weekScope`, `dayWorkMax`, `dayStayMax`, `weekMaxBreak`, `weekMaxScope`, `askInOut`)
VALUES
@@ -2783,6 +2783,10 @@ INSERT INTO `salix`.`url` (`appName`, `environment`, `url`)
('lilium', 'dev', 'http://localhost:8080/#/'),
('salix', 'dev', 'http://localhost:5000/#!/');
+INSERT INTO `vn`.`report` (`id`, `name`, `paperSizeFk`, `method`)
+ VALUES
+ (3, 'invoice', NULL, 'InvoiceOuts/{refFk}/invoice-out-pdf');
+
INSERT INTO `vn`.`payDemDetail` (`id`, `detail`)
VALUES
(1, 1);
@@ -2821,4 +2825,11 @@ INSERT INTO `vn`.`deviceProductionUser` (`deviceProductionFk`, `userFk`, `create
(1, 1, util.VN_NOW()),
(3, 3, util.VN_NOW());
+INSERT INTO `vn`.`workerTimeControlMail` (`id`, `workerFk`, `year`, `week`, `state`, `updated`, `sendedCounter`, `reason`)
+ VALUES
+ (1, 9, 2000, 49, 'REVISE', util.VN_NOW(), 1, 'test2'),
+ (2, 9, 2000, 50, 'SENDED', util.VN_NOW(), 1, NULL),
+ (3, 9, 2000, 51, 'CONFIRMED', util.VN_NOW(), 1, NULL),
+ (4, 9, 2001, 1, 'SENDED', util.VN_NOW(), 1, NULL);
+
diff --git a/db/dump/structure.sql b/db/dump/structure.sql
index 929d1cc64..90e4c4bc9 100644
--- a/db/dump/structure.sql
+++ b/db/dump/structure.sql
@@ -19742,6 +19742,102 @@ DELIMITER ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 DROP FUNCTION IF EXISTS `CURDATE` */;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+CREATE DEFINER=`root`@`localhost` FUNCTION `util`.`CURDATE`() RETURNS date
+ DETERMINISTIC
+BEGIN
+ /**
+ * @return The mock date
+ **/
+
+ RETURN DATE(mockTime());
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 DROP FUNCTION IF EXISTS `mockTime` */;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+CREATE DEFINER=`root`@`localhost` FUNCTION `util`.`mockTime`() RETURNS datetime
+ DETERMINISTIC
+BEGIN
+/**
+ * Returns the mockTime with predefined timezone or current dateTime
+ * depending of config.mockEnabled
+ *
+ * @return formatted datetime
+ */
+ DECLARE vMockEnabled BOOL;
+
+ SELECT mockEnabled INTO vMockEnabled FROM config LIMIT 1;
+
+ IF vMockEnabled THEN
+ RETURN mockTimeBase(FALSE);
+ ELSE
+ RETURN NOW();
+ END IF;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 DROP FUNCTION IF EXISTS `mockTimeBase` */;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+CREATE DEFINER=`root`@`localhost` FUNCTION `util`.`mockTimeBase`(vIsUtc BOOL) RETURNS datetime
+ DETERMINISTIC
+BEGIN
+/**
+ * Returns the date formatted to utc if vIsUtc or config.mocTz if not
+ *
+ * @param vIsUtc If date must be returned as UTC format
+ * @return The formatted mock time
+ */
+DECLARE vMockUtcTime DATETIME;
+ DECLARE vMockTz VARCHAR(255);
+
+ SELECT mockUtcTime, mockTz
+ INTO vMockUtcTime, vMockTz
+ FROM config
+ LIMIT 1;
+
+ IF vIsUtc OR vMockTz IS NULL THEN
+ RETURN vMockUtcTime;
+ ELSE
+ RETURN CONVERT_TZ(vMockUtcTime, '+00:00', vMockTz);
+ END IF;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 DROP FUNCTION IF EXISTS `firstDayOfYear` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
@@ -32632,7 +32728,7 @@ CREATE TABLE `printQueue` (
CONSTRAINT `printQueue_printerFk` FOREIGN KEY (`printerFk`) REFERENCES `printer` (`id`) ON UPDATE CASCADE,
CONSTRAINT `printQueue_priorityFk` FOREIGN KEY (`priorityFk`) REFERENCES `queuePriority` (`id`) ON UPDATE CASCADE,
CONSTRAINT `printQueue_report` FOREIGN KEY (`reportFk`) REFERENCES `report` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDBDEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -68286,11 +68382,11 @@ BEGIN
FROM ticketConfig;
IF vWarehouseInventory IS NULL THEN
- CALL util.throw('Warehouse inventory not seted');
+ CALL util.throw('Warehouse inventory not set');
END IF;
IF vComponentCost IS NULL THEN
- CALL util.throw('Component cost not seted');
+ CALL util.throw('Component cost not set');
END IF;
SET vDateEnd = vDated + INTERVAL 1 DAY;
@@ -81124,3 +81220,4 @@ USE `vn`;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-02-21 8:14:30
+
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index 9840696c2..f20d75310 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -524,7 +524,7 @@ export default {
},
itemLog: {
anyLineCreated: 'vn-item-log > vn-log vn-tbody > vn-tr',
- fifthLineCreatedProperty: 'vn-item-log > vn-log vn-tbody > vn-tr:nth-child(5) table tr:nth-child(2) td.after',
+ fifthLineCreatedProperty: 'vn-item-log > vn-log vn-tbody > vn-tr:nth-child(5) table tr:nth-child(4) td.after',
},
ticketSummary: {
header: 'vn-ticket-summary > vn-card > h5',
@@ -1052,20 +1052,22 @@ export default {
invoiceOutIndex: {
topbarSearch: 'vn-searchbar',
searchResult: 'vn-invoice-out-index vn-card > vn-table > div > vn-tbody > a.vn-tr',
- createInvoice: 'vn-invoice-out-index > div > vn-vertical > vn-button > button vn-icon[icon="add"]',
- createManualInvoice: 'vn-item[name="manualInvoice"]',
- createGlobalInvoice: 'vn-item[name="globalInvoice"]',
+ createInvoice: 'vn-invoice-out-index > div > vn-button > button vn-icon[icon="add"]',
manualInvoiceForm: '.vn-invoice-out-manual',
manualInvoiceTicket: 'vn-autocomplete[ng-model="$ctrl.invoice.ticketFk"]',
manualInvoiceClient: 'vn-autocomplete[ng-model="$ctrl.invoice.clientFk"]',
manualInvoiceSerial: 'vn-autocomplete[ng-model="$ctrl.invoice.serial"]',
manualInvoiceTaxArea: 'vn-autocomplete[ng-model="$ctrl.invoice.taxArea"]',
- saveInvoice: 'button[response="accept"]',
- globalInvoiceForm: '.vn-invoice-out-global-invoicing',
- globalInvoiceClientsRange: 'vn-radio[val="clientsRange"]',
- globalInvoiceDate: '[ng-model="$ctrl.invoice.invoiceDate"]',
- globalInvoiceFromClient: '[ng-model="$ctrl.invoice.fromClientId"]',
- globalInvoiceToClient: '[ng-model="$ctrl.invoice.toClientId"]',
+ saveInvoice: 'button[response="accept"]'
+ },
+ invoiceOutGlobalInvoicing: {
+ oneClient: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-vertical > vn-radio[val="one"]',
+ allClients: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-vertical > vn-radio[val="all"]',
+ clientId: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-autocomplete[ng-model="$ctrl.clientId"]',
+ printer: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-autocomplete[ng-model="$ctrl.printerFk"]',
+ makeInvoice: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-submit',
+ invoiceDate: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-date-picker[ng-model="$ctrl.invoiceDate"]',
+ maxShipped: 'vn-invoice-out-global-invoicing vn-side-menu form > vn-vertical > vn-date-picker[ng-model="$ctrl.maxShipped"]'
},
invoiceOutDescriptor: {
moreMenu: 'vn-invoice-out-descriptor vn-icon-button[icon=more_vert]',
diff --git a/e2e/paths/04-item/10_item_log.spec.js b/e2e/paths/04-item/10_item_log.spec.js
index 2a885fe6f..46979a761 100644
--- a/e2e/paths/04-item/10_item_log.spec.js
+++ b/e2e/paths/04-item/10_item_log.spec.js
@@ -59,6 +59,6 @@ describe('Item log path', () => {
const fifthLineCreatedProperty = await page
.waitToGetProperty(selectors.itemLog.fifthLineCreatedProperty, 'innerText');
- expect(fifthLineCreatedProperty).toEqual('Coral y materiales similares');
+ expect(fifthLineCreatedProperty).toEqual('05080000');
});
});
diff --git a/e2e/paths/09-invoice-out/03_manualInvoice.spec.js b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
index fa7cbed29..abb9ca7e7 100644
--- a/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
+++ b/e2e/paths/09-invoice-out/03_manualInvoice.spec.js
@@ -17,7 +17,6 @@ describe('InvoiceOut manual invoice path', () => {
it('should open the manual invoice form', async() => {
await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
- await page.waitToClick(selectors.invoiceOutIndex.createManualInvoice);
await page.waitForSelector(selectors.invoiceOutIndex.manualInvoiceForm);
});
@@ -45,7 +44,6 @@ describe('InvoiceOut manual invoice path', () => {
it('should now open the manual invoice form', async() => {
await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
- await page.waitToClick(selectors.invoiceOutIndex.createManualInvoice);
await page.waitForSelector(selectors.invoiceOutIndex.manualInvoiceForm);
});
diff --git a/e2e/paths/09-invoice-out/04_globalInvoice.spec.js b/e2e/paths/09-invoice-out/04_globalInvoice.spec.js
index 74efafd2d..23aa3593c 100644
--- a/e2e/paths/09-invoice-out/04_globalInvoice.spec.js
+++ b/e2e/paths/09-invoice-out/04_globalInvoice.spec.js
@@ -17,47 +17,27 @@ describe('InvoiceOut global invoice path', () => {
await browser.close();
});
- let invoicesBefore;
+ let invoicesBeforeOneClient;
+ let invoicesBeforeAllClients;
+ let now = Date.vnNew();
it('should count the amount of invoices listed before globla invoces are made', async() => {
- invoicesBefore = await page.countElement(selectors.invoiceOutIndex.searchResult);
+ invoicesBeforeOneClient = await page.countElement(selectors.invoiceOutIndex.searchResult);
- expect(invoicesBefore).toBeGreaterThanOrEqual(4);
+ expect(invoicesBeforeOneClient).toBeGreaterThanOrEqual(4);
});
it('should open the global invoice form', async() => {
- await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
- await page.waitToClick(selectors.invoiceOutIndex.createGlobalInvoice);
- await page.waitForSelector(selectors.invoiceOutIndex.globalInvoiceForm);
+ await page.accessToSection('invoiceOut.global-invoicing');
});
it('should create a global invoice for charles xavier today', async() => {
- await page.pickDate(selectors.invoiceOutIndex.globalInvoiceDate);
- await page.waitToClick(selectors.invoiceOutIndex.globalInvoiceClientsRange);
- await page.autocompleteSearch(selectors.invoiceOutIndex.globalInvoiceFromClient, 'Petter Parker');
- await page.autocompleteSearch(selectors.invoiceOutIndex.globalInvoiceToClient, 'Petter Parker');
- await page.waitToClick(selectors.invoiceOutIndex.saveInvoice);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should count the amount of invoices listed after globla invocing', async() => {
- await page.waitToClick('[icon="search"]');
- await page.waitForTimeout(1000); // index search needs time to return results
- const currentInvoices = await page.countElement(selectors.invoiceOutIndex.searchResult);
-
- expect(currentInvoices).toBeGreaterThan(invoicesBefore);
- });
-
- it('should create a global invoice for all clients today', async() => {
- await page.waitToClick(selectors.invoiceOutIndex.createInvoice);
- await page.waitToClick(selectors.invoiceOutIndex.createGlobalInvoice);
- await page.waitForSelector(selectors.invoiceOutIndex.globalInvoiceForm);
- await page.pickDate(selectors.invoiceOutIndex.globalInvoiceDate);
- await page.waitToClick(selectors.invoiceOutIndex.saveInvoice);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
+ await page.waitToClick(selectors.invoiceOutGlobalInvoicing.oneClient);
+ await page.autocompleteSearch(selectors.invoiceOutGlobalInvoicing.clientId, '1108');
+ await page.pickDate(selectors.invoiceOutGlobalInvoicing.invoiceDate, now);
+ await page.pickDate(selectors.invoiceOutGlobalInvoicing.maxShipped, now);
+ await page.autocompleteSearch(selectors.invoiceOutGlobalInvoicing.printer, '1');
+ await page.waitToClick(selectors.invoiceOutGlobalInvoicing.makeInvoice);
+ await page.waitForTimeout(1000);
});
});
diff --git a/e2e/paths/11-zone/02_descriptor.spec.js b/e2e/paths/11-zone/02_descriptor.spec.js
index 1de84d601..12a1c8f68 100644
--- a/e2e/paths/11-zone/02_descriptor.spec.js
+++ b/e2e/paths/11-zone/02_descriptor.spec.js
@@ -37,6 +37,6 @@ describe('Zone descriptor path', () => {
await page.accessToSection('ticket.card.log');
const lastChanges = await page.waitToGetProperty(selectors.ticketLog.changes, 'innerText');
- expect(lastChanges).toContain('Arreglar');
+ expect(lastChanges).toContain('1');
});
});
diff --git a/front/core/components/calendar/index.html b/front/core/components/calendar/index.html
index 086fe4338..4d02f9ec0 100644
--- a/front/core/components/calendar/index.html
+++ b/front/core/components/calendar/index.html
@@ -24,7 +24,7 @@
@@ -57,4 +57,4 @@
-
\ No newline at end of file
+
diff --git a/front/core/components/calendar/index.js b/front/core/components/calendar/index.js
index 17ccbf041..0e39267a7 100644
--- a/front/core/components/calendar/index.js
+++ b/front/core/components/calendar/index.js
@@ -15,9 +15,9 @@ export default class Calendar extends FormInput {
constructor($element, $scope, vnWeekDays, moment) {
super($element, $scope);
this.weekDays = vnWeekDays.locales;
- this.defaultDate = Date.vnNew();
this.displayControls = true;
this.moment = moment;
+ this.defaultDate = Date.vnNew();
}
/**
@@ -207,14 +207,23 @@ export default class Calendar extends FormInput {
}
repeatLast() {
- if (!this.formatDay) return;
+ if (this.formatDay) {
+ const days = this.element.querySelectorAll('.days > .day');
+ for (let i = 0; i < days.length; i++) {
+ this.formatDay({
+ $day: this.days[i],
+ $element: days[i]
+ });
+ }
+ }
- let days = this.element.querySelectorAll('.days > .day');
- for (let i = 0; i < days.length; i++) {
- this.formatDay({
- $day: this.days[i],
- $element: days[i]
- });
+ if (this.formatWeek) {
+ const weeks = this.element.querySelectorAll('.weeks > .day');
+ for (const week of weeks) {
+ this.formatWeek({
+ $element: week
+ });
+ }
}
}
}
@@ -228,6 +237,7 @@ ngModule.vnComponent('vnCalendar', {
hasEvents: '&?',
getClass: '&?',
formatDay: '&?',
+ formatWeek: '&?',
displayControls: '',
hideYear: '',
hideContiguous: '',
diff --git a/front/package-lock.json b/front/package-lock.json
index 81f411feb..d0fe4de2d 100644
--- a/front/package-lock.json
+++ b/front/package-lock.json
@@ -25,8 +25,7 @@
},
"node_modules/@uirouter/angularjs": {
"version": "1.0.30",
- "resolved": "https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.0.30.tgz",
- "integrity": "sha512-qkc3RFZc91S5K0gc/QVAXc9LGDPXjR04vDgG/11j8+yyZEuQojXxKxdLhKIepiPzqLmGRVqzBmBc27gtqaEeZg==",
+ "license": "MIT",
"dependencies": {
"@uirouter/core": "6.0.8"
},
@@ -39,28 +38,22 @@
},
"node_modules/@uirouter/core": {
"version": "6.0.8",
- "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-6.0.8.tgz",
- "integrity": "sha512-Gc/BAW47i4L54p8dqYCJJZuv2s3tqlXQ0fvl6Zp2xrblELPVfxmjnc0eurx3XwfQdaqm3T6uls6tQKkof/4QMw==",
+ "license": "MIT",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/angular": {
"version": "1.8.3",
- "resolved": "https://registry.npmjs.org/angular/-/angular-1.8.3.tgz",
- "integrity": "sha512-5qjkWIQQVsHj4Sb5TcEs4WZWpFeVFHXwxEBHUhrny41D8UrBAd6T/6nPPAsLngJCReIOqi95W3mxdveveutpZw==",
- "deprecated": "For the actively supported Angular, see https://www.npmjs.com/package/@angular/core. AngularJS support has officially ended. For extended AngularJS support options, see https://goo.gle/angularjs-path-forward."
+ "license": "MIT"
},
"node_modules/angular-animate": {
"version": "1.8.2",
- "resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.8.2.tgz",
- "integrity": "sha512-Jbr9+grNMs9Kj57xuBU3Ju3NOPAjS1+g2UAwwDv7su1lt0/PLDy+9zEwDiu8C8xJceoTbmBNKiWGPJGBdCQLlA==",
- "deprecated": "For the actively supported Angular, see https://www.npmjs.com/package/@angular/core. AngularJS support has officially ended. For extended AngularJS support options, see https://goo.gle/angularjs-path-forward."
+ "license": "MIT"
},
"node_modules/angular-moment": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/angular-moment/-/angular-moment-1.3.0.tgz",
- "integrity": "sha512-KG8rvO9MoaBLwtGnxTeUveSyNtrL+RNgGl1zqWN36+HDCCVGk2DGWOzqKWB6o+eTTbO3Opn4hupWKIElc8XETA==",
+ "license": "MIT",
"dependencies": {
"moment": ">=2.8.0 <3.0.0"
},
@@ -70,8 +63,7 @@
},
"node_modules/angular-translate": {
"version": "2.19.0",
- "resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.19.0.tgz",
- "integrity": "sha512-Z/Fip5uUT2N85dPQ0sMEe1JdF5AehcDe4tg/9mWXNDVU531emHCg53ZND9Oe0dyNiGX5rWcJKmsL1Fujus1vGQ==",
+ "license": "MIT",
"dependencies": {
"angular": "^1.8.0"
},
@@ -81,29 +73,25 @@
},
"node_modules/angular-translate-loader-partial": {
"version": "2.19.0",
- "resolved": "https://registry.npmjs.org/angular-translate-loader-partial/-/angular-translate-loader-partial-2.19.0.tgz",
- "integrity": "sha512-NnMw13LMV4bPQmJK7/pZOZAnPxe0M5OtUHchADs5Gye7V7feonuEnrZ8e1CKhBlv9a7IQyWoqcBa4Lnhg8gk5w==",
+ "license": "MIT",
"dependencies": {
"angular-translate": "~2.19.0"
}
},
"node_modules/argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/croppie": {
"version": "2.6.5",
- "resolved": "https://registry.npmjs.org/croppie/-/croppie-2.6.5.tgz",
- "integrity": "sha512-IlChnVUGG5T3w2gRZIaQgBtlvyuYnlUWs2YZIXXR3H9KrlO1PtBT3j+ykxvy9eZIWhk+V5SpBmhCQz5UXKrEKQ=="
+ "license": "MIT"
},
"node_modules/esprima": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -114,8 +102,7 @@
},
"node_modules/js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -126,42 +113,36 @@
},
"node_modules/mg-crud": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/mg-crud/-/mg-crud-1.1.2.tgz",
- "integrity": "sha512-mAR6t0aQHKnT0QHKHpLOi0kNPZfO36iMpIoiLjFHxuio6mIJyuveBJ4VNlNXJRxLh32/FLADEb41/sYo7QUKFw==",
+ "license": "MIT",
"dependencies": {
"angular": "^1.6.1"
}
},
"node_modules/moment": {
"version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/oclazyload": {
"version": "0.6.3",
- "resolved": "https://registry.npmjs.org/oclazyload/-/oclazyload-0.6.3.tgz",
- "integrity": "sha512-HpOSYUgjtt6sTB/C6+FWsExR+9HCnXKsUA96RWkDXfv11C8Cc9X2DlR0WIZwFIiG6FQU0pwB5dhoYyut8bFAOQ=="
+ "license": "MIT"
},
"node_modules/require-yaml": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/require-yaml/-/require-yaml-0.0.1.tgz",
- "integrity": "sha512-M6eVEgLPRbeOhgSCnOTtdrOOEQzbXRchg24Xa13c39dMuraFKdI9emUo97Rih0YEFzSICmSKg8w4RQp+rd9pOQ==",
+ "license": "BSD",
"dependencies": {
"js-yaml": ""
}
},
"node_modules/require-yaml/node_modules/argparse": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "license": "Python-2.0"
},
"node_modules/require-yaml/node_modules/js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -171,13 +152,11 @@
},
"node_modules/sprintf-js": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ "license": "BSD-3-Clause"
},
"node_modules/validator": {
"version": "6.3.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-6.3.0.tgz",
- "integrity": "sha512-BylxTwhqwjQI5MDJF7amCy/L0ejJO+74DvCsLV52Lq3+3bhVcVMKqNqOiNcQJm2G48u9EAcw4xFERAmFbwXM9Q==",
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -186,73 +165,51 @@
"dependencies": {
"@uirouter/angularjs": {
"version": "1.0.30",
- "resolved": "https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.0.30.tgz",
- "integrity": "sha512-qkc3RFZc91S5K0gc/QVAXc9LGDPXjR04vDgG/11j8+yyZEuQojXxKxdLhKIepiPzqLmGRVqzBmBc27gtqaEeZg==",
"requires": {
"@uirouter/core": "6.0.8"
}
},
"@uirouter/core": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-6.0.8.tgz",
- "integrity": "sha512-Gc/BAW47i4L54p8dqYCJJZuv2s3tqlXQ0fvl6Zp2xrblELPVfxmjnc0eurx3XwfQdaqm3T6uls6tQKkof/4QMw=="
+ "version": "6.0.8"
},
"angular": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/angular/-/angular-1.8.3.tgz",
- "integrity": "sha512-5qjkWIQQVsHj4Sb5TcEs4WZWpFeVFHXwxEBHUhrny41D8UrBAd6T/6nPPAsLngJCReIOqi95W3mxdveveutpZw=="
+ "version": "1.8.3"
},
"angular-animate": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.8.2.tgz",
- "integrity": "sha512-Jbr9+grNMs9Kj57xuBU3Ju3NOPAjS1+g2UAwwDv7su1lt0/PLDy+9zEwDiu8C8xJceoTbmBNKiWGPJGBdCQLlA=="
+ "version": "1.8.2"
},
"angular-moment": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/angular-moment/-/angular-moment-1.3.0.tgz",
- "integrity": "sha512-KG8rvO9MoaBLwtGnxTeUveSyNtrL+RNgGl1zqWN36+HDCCVGk2DGWOzqKWB6o+eTTbO3Opn4hupWKIElc8XETA==",
"requires": {
"moment": ">=2.8.0 <3.0.0"
}
},
"angular-translate": {
"version": "2.19.0",
- "resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.19.0.tgz",
- "integrity": "sha512-Z/Fip5uUT2N85dPQ0sMEe1JdF5AehcDe4tg/9mWXNDVU531emHCg53ZND9Oe0dyNiGX5rWcJKmsL1Fujus1vGQ==",
"requires": {
"angular": "^1.8.0"
}
},
"angular-translate-loader-partial": {
"version": "2.19.0",
- "resolved": "https://registry.npmjs.org/angular-translate-loader-partial/-/angular-translate-loader-partial-2.19.0.tgz",
- "integrity": "sha512-NnMw13LMV4bPQmJK7/pZOZAnPxe0M5OtUHchADs5Gye7V7feonuEnrZ8e1CKhBlv9a7IQyWoqcBa4Lnhg8gk5w==",
"requires": {
"angular-translate": "~2.19.0"
}
},
"argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"requires": {
"sprintf-js": "~1.0.2"
}
},
"croppie": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/croppie/-/croppie-2.6.5.tgz",
- "integrity": "sha512-IlChnVUGG5T3w2gRZIaQgBtlvyuYnlUWs2YZIXXR3H9KrlO1PtBT3j+ykxvy9eZIWhk+V5SpBmhCQz5UXKrEKQ=="
+ "version": "2.6.5"
},
"esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ "version": "4.0.1"
},
"js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -260,39 +217,27 @@
},
"mg-crud": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/mg-crud/-/mg-crud-1.1.2.tgz",
- "integrity": "sha512-mAR6t0aQHKnT0QHKHpLOi0kNPZfO36iMpIoiLjFHxuio6mIJyuveBJ4VNlNXJRxLh32/FLADEb41/sYo7QUKFw==",
"requires": {
"angular": "^1.6.1"
}
},
"moment": {
- "version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+ "version": "2.29.4"
},
"oclazyload": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/oclazyload/-/oclazyload-0.6.3.tgz",
- "integrity": "sha512-HpOSYUgjtt6sTB/C6+FWsExR+9HCnXKsUA96RWkDXfv11C8Cc9X2DlR0WIZwFIiG6FQU0pwB5dhoYyut8bFAOQ=="
+ "version": "0.6.3"
},
"require-yaml": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/require-yaml/-/require-yaml-0.0.1.tgz",
- "integrity": "sha512-M6eVEgLPRbeOhgSCnOTtdrOOEQzbXRchg24Xa13c39dMuraFKdI9emUo97Rih0YEFzSICmSKg8w4RQp+rd9pOQ==",
"requires": {
"js-yaml": ""
},
"dependencies": {
"argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "version": "2.0.1"
},
"js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"requires": {
"argparse": "^2.0.1"
}
@@ -300,14 +245,10 @@
}
},
"sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ "version": "1.0.3"
},
"validator": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-6.3.0.tgz",
- "integrity": "sha512-BylxTwhqwjQI5MDJF7amCy/L0ejJO+74DvCsLV52Lq3+3bhVcVMKqNqOiNcQJm2G48u9EAcw4xFERAmFbwXM9Q=="
+ "version": "6.3.0"
}
}
}
diff --git a/loopback/common/methods/vn-model/printService.js b/loopback/common/methods/vn-model/printService.js
new file mode 100644
index 000000000..5cd571d4c
--- /dev/null
+++ b/loopback/common/methods/vn-model/printService.js
@@ -0,0 +1,57 @@
+const {Report, Email} = require('vn-print');
+
+module.exports = Self => {
+ Self.printReport = async function(ctx, id, reportName) {
+ const args = Object.assign({}, ctx.args);
+ const params = {lang: ctx.req.getLocale()};
+
+ delete args.ctx;
+ for (const param in args)
+ params[param] = args[param];
+
+ const report = new Report(reportName, params);
+ const stream = await report.toPdfStream();
+
+ let fileName = `${reportName}`;
+ if (id) fileName += `-${id}`;
+
+ return [stream, 'application/pdf', `filename="${fileName}.pdf"`];
+ };
+
+ Self.printEmail = async function(ctx, id, templateName) {
+ const {accessToken} = ctx.req;
+ const args = Object.assign({}, ctx.args);
+ const params = {lang: ctx.req.getLocale()};
+
+ delete args.ctx;
+ for (const param in args)
+ params[param] = args[param];
+
+ params.isPreview = true;
+ params.access_token = accessToken.id;
+
+ const report = new Email(templateName, params);
+ const html = await report.render();
+
+ let fileName = `${templateName}`;
+ if (id) fileName += `-${id}`;
+
+ return [html, 'text/html', `filename=${fileName}.pdf"`];
+ };
+
+ Self.sendTemplate = async function(ctx, templateName) {
+ const args = Object.assign({}, ctx.args);
+ const params = {
+ recipient: args.recipient,
+ lang: ctx.req.getLocale()
+ };
+
+ delete args.ctx;
+ for (const param in args)
+ params[param] = args[param];
+
+ const email = new Email(templateName, params);
+
+ return email.send();
+ };
+};
diff --git a/loopback/common/models/loggable.js b/loopback/common/models/loggable.js
index 28a6075d0..360c84566 100644
--- a/loopback/common/models/loggable.js
+++ b/loopback/common/models/loggable.js
@@ -1,4 +1,3 @@
-const pick = require('object.pick');
const LoopBackContext = require('loopback-context');
module.exports = function(Self) {
@@ -6,344 +5,11 @@ module.exports = function(Self) {
Self.super_.setup.call(this);
};
- Self.observe('after save', async function(ctx) {
- const loopBackContext = LoopBackContext.getCurrentContext();
- await logInModel(ctx, loopBackContext);
- });
-
Self.observe('before save', async function(ctx) {
- const appModels = ctx.Model.app.models;
- const definition = ctx.Model.definition;
- const options = {};
-
- // Check for transactions
- if (ctx.options && ctx.options.transaction)
- options.transaction = ctx.options.transaction;
-
- let oldInstance;
- let newInstance;
-
- if (ctx.data) {
- const changes = pick(ctx.currentInstance, Object.keys(ctx.data));
- newInstance = ctx.data;
- oldInstance = changes;
-
- if (ctx.where && !ctx.currentInstance) {
- const fields = Object.keys(ctx.data);
- const modelName = definition.name;
-
- ctx.oldInstances = await appModels[modelName].find({
- where: ctx.where,
- fields: fields
- }, options);
- }
- }
-
- // Get changes from created instance
- if (ctx.isNewInstance)
- newInstance = ctx.instance.__data;
-
- ctx.hookState.oldInstance = oldInstance;
- ctx.hookState.newInstance = newInstance;
+ ctx.options.httpCtx = LoopBackContext.getCurrentContext();
});
Self.observe('before delete', async function(ctx) {
- const appModels = ctx.Model.app.models;
- const definition = ctx.Model.definition;
- const relations = ctx.Model.relations;
-
- let options = {};
- if (ctx.options && ctx.options.transaction)
- options.transaction = ctx.options.transaction;
-
- if (ctx.where) {
- let affectedModel = definition.name;
- let deletedInstances = await appModels[affectedModel].find({
- where: ctx.where
- }, options);
-
- let relation = definition.settings.log.relation;
-
- if (relation) {
- let primaryKey = relations[relation].keyFrom;
-
- let arrangedDeletedInstances = [];
- for (let i = 0; i < deletedInstances.length; i++) {
- if (primaryKey)
- deletedInstances[i].originFk = deletedInstances[i][primaryKey];
- let arrangedInstance = await fkToValue(deletedInstances[i], ctx);
- arrangedDeletedInstances[i] = arrangedInstance;
- }
- ctx.hookState.oldInstance = arrangedDeletedInstances;
- }
- }
+ ctx.options.httpCtx = LoopBackContext.getCurrentContext();
});
-
- Self.observe('after delete', async function(ctx) {
- const loopBackContext = LoopBackContext.getCurrentContext();
- if (ctx.hookState.oldInstance)
- logDeletedInstances(ctx, loopBackContext);
- });
-
- async function logDeletedInstances(ctx, loopBackContext) {
- const appModels = ctx.Model.app.models;
- const definition = ctx.Model.definition;
- let options = {};
- if (ctx.options && ctx.options.transaction)
- options.transaction = ctx.options.transaction;
-
- ctx.hookState.oldInstance.forEach(async instance => {
- let userFk;
- if (loopBackContext)
- userFk = loopBackContext.active.accessToken.userId;
-
- let changedModelValue = definition.settings.log.changedModelValue;
- let logRecord = {
- originFk: instance.originFk,
- userFk: userFk,
- action: 'delete',
- changedModel: definition.name,
- changedModelId: instance.id,
- changedModelValue: instance[changedModelValue],
- oldInstance: instance,
- newInstance: {}
- };
-
- delete instance.originFk;
-
- let logModel = definition.settings.log.model;
- await appModels[logModel].create(logRecord, options);
- });
- }
-
- // Get log values from a foreign key
- async function fkToValue(instance, ctx) {
- const appModels = ctx.Model.app.models;
- const relations = ctx.Model.relations;
- let options = {};
-
- // Check for transactions
- if (ctx.options && ctx.options.transaction)
- options.transaction = ctx.options.transaction;
-
- const instanceCopy = JSON.parse(JSON.stringify(instance));
- const result = {};
- for (const key in instanceCopy) {
- let value = instanceCopy[key];
-
- if (value instanceof Object)
- continue;
-
- if (value === undefined) continue;
-
- if (value) {
- for (let relationName in relations) {
- const relation = relations[relationName];
- if (relation.keyFrom == key && key != 'id') {
- const model = relation.modelTo;
- const modelName = relation.modelTo.modelName;
- const properties = model && model.definition.properties;
- const settings = model && model.definition.settings;
-
- const recordSet = await appModels[modelName].findById(value, null, options);
-
- const hasShowField = settings.log && settings.log.showField;
- let showField = hasShowField && recordSet
- && recordSet[settings.log.showField];
-
- if (!showField) {
- const showFieldNames = [
- 'name',
- 'description',
- 'code',
- 'nickname'
- ];
- for (field of showFieldNames) {
- const propField = properties && properties[field];
- const recordField = recordSet && recordSet[field];
-
- if (propField && recordField) {
- showField = field;
- break;
- }
- }
- }
-
- if (showField && recordSet && recordSet[showField]) {
- value = recordSet[showField];
- break;
- }
-
- value = recordSet && recordSet.id || value;
- break;
- }
- }
- }
- result[key] = value;
- }
- return result;
- }
-
- async function logInModel(ctx, loopBackContext) {
- const appModels = ctx.Model.app.models;
- const definition = ctx.Model.definition;
- const defSettings = ctx.Model.definition.settings;
- const relations = ctx.Model.relations;
-
- const options = {};
- if (ctx.options && ctx.options.transaction)
- options.transaction = ctx.options.transaction;
-
- let primaryKey;
- for (let property in definition.properties) {
- if (definition.properties[property].id) {
- primaryKey = property;
- break;
- }
- }
-
- if (!primaryKey) throw new Error('Primary key not found');
- let originId;
-
- // RELATIONS LOG
- let changedModelId;
-
- if (ctx.instance && !defSettings.log.relation) {
- originId = ctx.instance.id;
- changedModelId = ctx.instance.id;
- } else if (defSettings.log.relation) {
- primaryKey = relations[defSettings.log.relation].keyFrom;
-
- if (ctx.where && ctx.where[primaryKey])
- originId = ctx.where[primaryKey];
- else if (ctx.instance) {
- originId = ctx.instance[primaryKey];
- changedModelId = ctx.instance.id;
- }
- } else {
- originId = ctx.currentInstance.id;
- changedModelId = ctx.currentInstance.id;
- }
-
- // Sets the changedModelValue to save and the instances changed in case its an updateAll
- let showField = defSettings.log.showField;
- let where;
- if (showField && (!ctx.instance || !ctx.instance[showField]) && ctx.where) {
- changedModelId = [];
- where = [];
- let changedInstances = await appModels[definition.name].find({
- where: ctx.where,
- fields: ['id', showField, primaryKey]
- }, options);
-
- changedInstances.forEach(element => {
- where.push(element[showField]);
- changedModelId.push(element.id);
- originId = element[primaryKey];
- });
- } else if (ctx.hookState.oldInstance)
- where = ctx.instance[showField];
-
- // Set oldInstance, newInstance, userFk and action
- let oldInstance = {};
- if (ctx.hookState.oldInstance)
- Object.assign(oldInstance, ctx.hookState.oldInstance);
-
- let newInstance = {};
- if (ctx.hookState.newInstance)
- Object.assign(newInstance, ctx.hookState.newInstance);
- let userFk;
- if (loopBackContext)
- userFk = loopBackContext.active.accessToken.userId;
-
- let action = setActionType(ctx);
-
- removeUnloggable(definition, oldInstance);
- removeUnloggable(definition, newInstance);
-
- oldInstance = await fkToValue(oldInstance, ctx);
- newInstance = await fkToValue(newInstance, ctx);
-
- // Prevent log with no new changes
- const hasNewChanges = Object.keys(newInstance).length;
- if (!hasNewChanges) return;
-
- let logRecord = {
- originFk: originId,
- userFk: userFk,
- action: action,
- changedModel: definition.name,
- changedModelId: changedModelId, // Model property with an different data type will throw a NaN error
- changedModelValue: where,
- oldInstance: oldInstance,
- newInstance: newInstance
- };
-
- let logsToSave = setLogsToSave(where, changedModelId, logRecord, ctx);
- let logModel = defSettings.log.model;
-
- await appModels[logModel].create(logsToSave, options);
- }
-
- /**
- * Removes unwanted properties
- * @param {*} definition Model definition
- * @param {*} properties Modified object properties
- */
- function removeUnloggable(definition, properties) {
- const objectCopy = Object.assign({}, properties);
- const propList = Object.keys(objectCopy);
- const propDefs = new Map();
-
- for (let property in definition.properties) {
- const propertyDef = definition.properties[property];
-
- propDefs.set(property, propertyDef);
- }
-
- for (let property of propList) {
- const propertyDef = propDefs.get(property);
- const firstChar = property.substring(0, 1);
- const isPrivate = firstChar == '$';
-
- if (isPrivate || !propertyDef)
- delete properties[property];
-
- if (!propertyDef) continue;
-
- if (propertyDef.log === false || isPrivate)
- delete properties[property];
- else if (propertyDef.logValue === false)
- properties[property] = null;
- }
- }
-
- // this function retuns all the instances changed in case this is an updateAll
- function setLogsToSave(changedInstances, changedInstancesIds, logRecord, ctx) {
- let promises = [];
- if (changedInstances && typeof changedInstances == 'object') {
- for (let i = 0; i < changedInstances.length; i++) {
- logRecord.changedModelId = changedInstancesIds[i];
- logRecord.changedModelValue = changedInstances[i];
- if (ctx.oldInstances)
- logRecord.oldInstance = ctx.oldInstances[i];
- promises.push(JSON.parse(JSON.stringify(logRecord)));
- }
- } else
- return logRecord;
-
- return promises;
- }
-
- function setActionType(ctx) {
- let oldInstance = ctx.hookState.oldInstance;
- let newInstance = ctx.hookState.newInstance;
-
- if (oldInstance && newInstance)
- return 'update';
- else if (!oldInstance && newInstance)
- return 'insert';
-
- return 'delete';
- }
};
diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js
index cc3eede8e..cebd37eac 100644
--- a/loopback/common/models/vn-model.js
+++ b/loopback/common/models/vn-model.js
@@ -7,6 +7,7 @@ module.exports = function(Self) {
require('../methods/vn-model/getSetValues')(Self);
require('../methods/vn-model/getEnumValues')(Self);
+ require('../methods/vn-model/printService')(Self);
Object.assign(Self, {
setup() {
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index dbe25dea3..e9fd67209 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -152,5 +152,7 @@
"It is not possible to modify sales that their articles are from Floramondo": "It is not possible to modify sales that their articles are from Floramondo",
"It is not possible to modify cloned sales": "It is not possible to modify cloned sales",
"Valid priorities: 1,2,3": "Valid priorities: 1,2,3",
+ "Warehouse inventory not set": "Almacén inventario no está establecido",
+ "Component cost not set": "Componente coste no está estabecido",
"Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº 2": "Tickets with associated refunds can't be deleted. This ticket is associated with refund Nº 2"
-}
\ No newline at end of file
+}
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index 563c24c05..b967eebb0 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -251,6 +251,7 @@
"Receipt's bank was not found": "No se encontró el banco del recibo",
"This receipt was not compensated": "Este recibo no ha sido compensado",
"Client's email was not found": "No se encontró el email del cliente",
+ "Negative basis": "Base negativa",
"This worker code already exists": "Este codigo de trabajador ya existe",
"This personal mail already exists": "Este correo personal ya existe",
"This worker already exists": "Este trabajador ya existe",
@@ -264,6 +265,9 @@
"It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas",
"A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.",
"There is no assigned email for this client": "No hay correo asignado para este cliente",
+ "Exists an invoice with a previous date": "Existe una factura con fecha anterior",
+ "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite",
+ "Warehouse inventory not set": "El almacén inventario no está establecido",
"This locker has already been assigned": "Esta taquilla ya ha sido asignada",
"Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº {{id}}",
"Not exist this branch": "La rama no existe",
diff --git a/loopback/server/connectors/vn-mysql.js b/loopback/server/connectors/vn-mysql.js
index fde0ddcf6..5c1ceaa32 100644
--- a/loopback/server/connectors/vn-mysql.js
+++ b/loopback/server/connectors/vn-mysql.js
@@ -2,8 +2,41 @@ const mysql = require('mysql');
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const MySQL = require('loopback-connector-mysql').MySQL;
const EnumFactory = require('loopback-connector-mysql').EnumFactory;
+const Transaction = require('loopback-connector').Transaction;
const fs = require('fs');
+const limitSet = new Set([
+ 'save',
+ 'updateOrCreate',
+ 'replaceOrCreate',
+ 'replaceById',
+ 'update'
+]);
+
+const opOpts = {
+ update: [
+ 'update',
+ 'replaceById',
+ // |insert
+ 'save',
+ 'updateOrCreate',
+ 'replaceOrCreate'
+ ],
+ delete: [
+ 'destroy',
+ 'destroyAll'
+ ],
+ insert: [
+ 'create'
+ ]
+};
+
+const opMap = new Map();
+for (const op in opOpts) {
+ for (const met of opOpts[op])
+ opMap.set(met, op);
+}
+
class VnMySQL extends MySQL {
/**
* Promisified version of execute().
@@ -219,6 +252,277 @@ class VnMySQL extends MySQL {
this.makePagination(filter)
]);
}
+
+ create(model, data, opts, cb) {
+ const ctx = {data};
+ this.invokeMethod('create',
+ arguments, model, ctx, opts, cb);
+ }
+
+ createAll(model, data, opts, cb) {
+ const ctx = {data};
+ this.invokeMethod('createAll',
+ arguments, model, ctx, opts, cb);
+ }
+
+ save(model, data, opts, cb) {
+ const ctx = {data};
+ this.invokeMethod('save',
+ arguments, model, ctx, opts, cb);
+ }
+
+ updateOrCreate(model, data, opts, cb) {
+ const ctx = {data};
+ this.invokeMethod('updateOrCreate',
+ arguments, model, ctx, opts, cb);
+ }
+
+ replaceOrCreate(model, data, opts, cb) {
+ const ctx = {data};
+ this.invokeMethod('replaceOrCreate',
+ arguments, model, ctx, opts, cb);
+ }
+
+ destroyAll(model, where, opts, cb) {
+ const ctx = {where};
+ this.invokeMethod('destroyAll',
+ arguments, model, ctx, opts, cb);
+ }
+
+ update(model, where, data, opts, cb) {
+ const ctx = {where, data};
+ this.invokeMethod('update',
+ arguments, model, ctx, opts, cb);
+ }
+
+ replaceById(model, id, data, opts, cb) {
+ const ctx = {id, data};
+ this.invokeMethod('replaceById',
+ arguments, model, ctx, opts, cb);
+ }
+
+ isLoggable(model) {
+ const Model = this.getModelDefinition(model).model;
+ const settings = Model.definition.settings;
+ return settings.base && settings.base === 'Loggable';
+ }
+
+ invokeMethod(method, args, model, ctx, opts, cb) {
+ if (!this.isLoggable(model))
+ return super[method].apply(this, args);
+
+ this.invokeMethodP(method, [...args], model, ctx, opts)
+ .then(res => cb(...res), cb);
+ }
+
+ async invokeMethodP(method, args, model, ctx, opts) {
+ const Model = this.getModelDefinition(model).model;
+ const settings = Model.definition.settings;
+ let tx;
+ if (!opts.transaction) {
+ tx = await Transaction.begin(this, {});
+ opts = Object.assign({transaction: tx, httpCtx: opts.httpCtx}, opts);
+ }
+
+ try {
+ // Fetch old values (update|delete) or login
+ let where, id, data, idName, limit, op, oldInstances, newInstances;
+ const hasGrabUser = settings.log && settings.log.grabUser;
+ if(hasGrabUser){
+ const userId = opts.httpCtx && opts.httpCtx.active.accessToken.userId;
+ const user = await Model.app.models.Account.findById(userId, {fields: ['name']}, opts);
+ await this.executeP(`CALL account.myUser_loginWithName(?)`, [user.name], opts);
+ }
+ else {
+ where = ctx.where;
+ id = ctx.id;
+ data = ctx.data;
+ idName = this.idName(model);
+
+ limit = limitSet.has(method);
+
+ op = opMap.get(method);
+
+ if (!where) {
+ if (id) where = {[idName]: id};
+ else where = {[idName]: data[idName]};
+ }
+
+ // Fetch old values
+ switch (op) {
+ case 'update':
+ case 'delete':
+ // Single entity operation
+ const stmt = this.buildSelectStmt(op, data, idName, model, where, limit);
+ stmt.merge(`FOR UPDATE`);
+ oldInstances = await this.executeStmt(stmt, opts);
+ }
+ }
+
+ const res = await new Promise(resolve => {
+ const fnArgs = args.slice(0, -2);
+ fnArgs.push(opts, (...args) => resolve(args));
+ super[method].apply(this, fnArgs);
+ });
+
+ if(hasGrabUser)
+ await this.executeP(`CALL account.myUser_logout()`, null, opts);
+ else {
+ // Fetch new values
+ const ids = [];
+
+ switch (op) {
+ case 'insert':
+ case 'update': {
+ switch (method) {
+ case 'createAll':
+ for (const row of res[1])
+ ids.push(row[idName]);
+ break;
+ case 'create':
+ ids.push(res[1]);
+ break;
+ case 'update':
+ if (data[idName] != null)
+ ids.push(data[idName]);
+ break;
+ }
+
+ const newWhere = ids.length ? {[idName]: ids} : where;
+
+ const stmt = this.buildSelectStmt(op, data, idName, model, newWhere, limit);
+ newInstances = await this.executeStmt(stmt, opts);
+ }
+ }
+
+ await this.createLogRecord(oldInstances, newInstances, model, opts);
+ }
+ if (tx) await tx.commit();
+ return res;
+ } catch (err) {
+ if (tx) tx.rollback();
+ throw err;
+ }
+ }
+
+ buildSelectStmt(op, data, idName, model, where, limit) {
+ const Model = this.getModelDefinition(model).model;
+ const properties = Object.keys(Model.definition.properties);
+
+ const fields = data ? Object.keys(data) : [];
+ if (op == 'delete')
+ properties.forEach(property => fields.push(property));
+ else {
+ const log = Model.definition.settings.log;
+ fields.push(idName);
+ if (log.relation) fields.push(Model.relations[log.relation].keyFrom);
+ if (log.showField) fields.push(log.showField);
+ else {
+ const showFieldNames = ['name', 'description', 'code', 'nickname'];
+ for (const field of showFieldNames) {
+ if (properties.includes(field)) {
+ log.showField = field;
+ fields.push(field);
+ break;
+ }
+ }
+ }
+ }
+
+ const stmt = new ParameterizedSQL(
+ 'SELECT ' +
+ this.buildColumnNames(model, {fields}) +
+ ' FROM ' +
+ this.tableEscaped(model)
+ );
+ stmt.merge(this.buildWhere(model, where));
+ if (limit) stmt.merge(`LIMIT 1`);
+
+ return stmt;
+ }
+
+ async createLogRecord(oldInstances, newInstances, model, opts) {
+ function setActionType() {
+ if (oldInstances && newInstances)
+ return 'update';
+ else if (!oldInstances && newInstances)
+ return 'insert';
+ return 'delete';
+ }
+
+ const action = setActionType();
+ if (!newInstances && action != 'delete') return;
+
+ const Model = this.getModelDefinition(model).model;
+ const models = Model.app.models;
+ const definition = Model.definition;
+ const log = definition.settings.log;
+
+ const primaryKey = this.idName(model);
+ const originRelation = log.relation;
+ const originFkField = originRelation
+ ? Model.relations[originRelation].keyFrom
+ : primaryKey;
+
+ // Prevent adding logs when deleting a principal entity (Client, Zone...)
+ if (action == 'delete' && !originRelation) return;
+
+ function map(instances) {
+ const map = new Map();
+ if (!instances) return;
+ for (const instance of instances)
+ map.set(instance[primaryKey], instance);
+ return map;
+ }
+
+ const changedModel = definition.name;
+ const userFk = opts.httpCtx && opts.httpCtx.active.accessToken.userId;
+ const oldMap = map(oldInstances);
+ const newMap = map(newInstances);
+ const ids = (oldMap || newMap).keys();
+
+ const logEntries = [];
+
+ function insertValuesLogEntry(logEntry, instance) {
+ logEntry.originFk = instance[originFkField];
+ logEntry.changedModelId = instance[primaryKey];
+ if (log.showField) logEntry.changedModelValue = instance[log.showField];
+ }
+
+ for (const id of ids) {
+ const oldI = oldMap && oldMap.get(id);
+ const newI = newMap && newMap.get(id);
+
+ const logEntry = {
+ action,
+ userFk,
+ changedModel,
+ };
+
+ if (newI) {
+ insertValuesLogEntry(logEntry, newI);
+ // Delete unchanged properties
+ if (oldI) {
+ Object.keys(oldI).forEach(prop => {
+ const hasChanges = oldI[prop] instanceof Date ?
+ oldI[prop]?.getTime() != newI[prop]?.getTime() :
+ oldI[prop] != newI[prop];
+
+ if (!hasChanges) {
+ delete oldI[prop];
+ delete newI[prop];
+ }
+ });
+ }
+ } else
+ insertValuesLogEntry(logEntry, oldI);
+
+ logEntry.oldInstance = oldI;
+ logEntry.newInstance = newI;
+ logEntries.push(logEntry);
+ }
+ await models[log.model].create(logEntries, opts);
+ }
}
exports.VnMySQL = VnMySQL;
diff --git a/loopback/util/log.js b/loopback/util/log.js
index e26022c35..76e87781d 100644
--- a/loopback/util/log.js
+++ b/loopback/util/log.js
@@ -91,7 +91,11 @@ exports.getChanges = (original, changes) => {
const isPrivate = firstChar == '$';
if (isPrivate) return;
- if (changes[property] != original[property]) {
+ const hasChanges = original[property] instanceof Date ?
+ changes[property]?.getTime() != original[property]?.getTime() :
+ changes[property] != original[property];
+
+ if (hasChanges) {
newChanges[property] = changes[property];
if (original[property] != undefined)
diff --git a/modules/claim/back/methods/claim/claimPickupPdf.js b/modules/claim/back/methods/claim/claimPickupPdf.js
index 0e3abe908..4927efa0f 100644
--- a/modules/claim/back/methods/claim/claimPickupPdf.js
+++ b/modules/claim/back/methods/claim/claimPickupPdf.js
@@ -1,5 +1,3 @@
-const { Report } = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('claimPickupPdf', {
description: 'Returns the claim pickup order pdf',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.claimPickupPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('claim-pickup-order', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.claimPickupPdf = (ctx, id) => Self.printReport(ctx, id, 'claim-pickup-order');
};
diff --git a/modules/claim/front/descriptor/index.html b/modules/claim/front/descriptor/index.html
index f346ecf17..5fd198440 100644
--- a/modules/claim/front/descriptor/index.html
+++ b/modules/claim/front/descriptor/index.html
@@ -86,7 +86,20 @@
icon="icon-ticket">
-
+
+
+
+
+
+
+
+
diff --git a/modules/claim/front/locale/es.yml b/modules/claim/front/locale/es.yml
index 5abdc1535..419e62f56 100644
--- a/modules/claim/front/locale/es.yml
+++ b/modules/claim/front/locale/es.yml
@@ -18,3 +18,5 @@ Claim deleted!: Reclamación eliminada!
claim: reclamación
Photos: Fotos
Go to the claim: Ir a la reclamación
+Sale tracking: Líneas preparadas
+Ticket tracking: Estados del ticket
diff --git a/modules/client/back/methods/client/campaignMetricsEmail.js b/modules/client/back/methods/client/campaignMetricsEmail.js
index bb57f90a0..3a1bac5e6 100644
--- a/modules/client/back/methods/client/campaignMetricsEmail.js
+++ b/modules/client/back/methods/client/campaignMetricsEmail.js
@@ -51,19 +51,5 @@ module.exports = Self => {
}
});
- Self.campaignMetricsEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('campaign-metrics', params);
-
- return email.send();
- };
+ Self.campaignMetricsEmail = ctx => Self.sendTemplate(ctx, 'campaign-metrics');
};
diff --git a/modules/client/back/methods/client/campaignMetricsPdf.js b/modules/client/back/methods/client/campaignMetricsPdf.js
index 14194d62b..e163b0619 100644
--- a/modules/client/back/methods/client/campaignMetricsPdf.js
+++ b/modules/client/back/methods/client/campaignMetricsPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('campaignMetricsPdf', {
description: 'Returns the campaign metrics pdf',
@@ -50,17 +48,5 @@ module.exports = Self => {
}
});
- Self.campaignMetricsPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('campaign-metrics', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'campaign-metrics');
};
diff --git a/modules/client/back/methods/client/clientDebtStatementEmail.js b/modules/client/back/methods/client/clientDebtStatementEmail.js
index 8bcdc900f..1b3ab13d8 100644
--- a/modules/client/back/methods/client/clientDebtStatementEmail.js
+++ b/modules/client/back/methods/client/clientDebtStatementEmail.js
@@ -46,19 +46,5 @@ module.exports = Self => {
}
});
- Self.clientDebtStatementEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('client-debt-statement', params);
-
- return email.send();
- };
+ Self.clientDebtStatementEmail = ctx => Self.sendTemplate(ctx, 'client-debt-statement');
};
diff --git a/modules/client/back/methods/client/clientDebtStatementHtml.js b/modules/client/back/methods/client/clientDebtStatementHtml.js
index bfed696bc..8752b48d2 100644
--- a/modules/client/back/methods/client/clientDebtStatementHtml.js
+++ b/modules/client/back/methods/client/clientDebtStatementHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('clientDebtStatementHtml', {
description: 'Returns the client debt statement email preview',
@@ -45,21 +43,5 @@ module.exports = Self => {
}
});
- Self.clientDebtStatementHtml = async(ctx, id) => {
- const {accessToken} = ctx.req;
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
- params.access_token = accessToken.id;
-
- const report = new Email('client-debt-statement', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.clientDebtStatementHtml = (ctx, id) => Self.printEmail(ctx, id, 'client-debt-statement');
};
diff --git a/modules/client/back/methods/client/clientDebtStatementPdf.js b/modules/client/back/methods/client/clientDebtStatementPdf.js
index 8e2dca314..845527ace 100644
--- a/modules/client/back/methods/client/clientDebtStatementPdf.js
+++ b/modules/client/back/methods/client/clientDebtStatementPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('clientDebtStatementPdf', {
description: 'Returns the client debt statement pdf',
@@ -45,17 +43,5 @@ module.exports = Self => {
}
});
- Self.clientDebtStatementPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('client-debt-statement', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.clientDebtStatementPdf = (ctx, id) => Self.printReport(ctx, id, 'client-debt-statement');
};
diff --git a/modules/client/back/methods/client/clientWelcomeEmail.js b/modules/client/back/methods/client/clientWelcomeEmail.js
index 318ee18e6..accf12bb8 100644
--- a/modules/client/back/methods/client/clientWelcomeEmail.js
+++ b/modules/client/back/methods/client/clientWelcomeEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('clientWelcomeEmail', {
description: 'Sends the client welcome email with an attached PDF',
@@ -41,19 +39,5 @@ module.exports = Self => {
}
});
- Self.clientWelcomeEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('client-welcome', params);
-
- return email.send();
- };
+ Self.clientWelcomeEmail = ctx => Self.sendTemplate(ctx, 'client-welcome');
};
diff --git a/modules/client/back/methods/client/clientWelcomeHtml.js b/modules/client/back/methods/client/clientWelcomeHtml.js
index dfb560326..093a06d8e 100644
--- a/modules/client/back/methods/client/clientWelcomeHtml.js
+++ b/modules/client/back/methods/client/clientWelcomeHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('clientWelcomeHtml', {
description: 'Returns the client welcome email preview',
@@ -40,19 +38,5 @@ module.exports = Self => {
}
});
- Self.clientWelcomeHtml = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
-
- const report = new Email('client-welcome', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.clientWelcomeHtml = (ctx, id) => Self.printEmail(ctx, id, 'client-welcome');
};
diff --git a/modules/client/back/methods/client/creditRequestEmail.js b/modules/client/back/methods/client/creditRequestEmail.js
index b6a60e971..0255949e0 100644
--- a/modules/client/back/methods/client/creditRequestEmail.js
+++ b/modules/client/back/methods/client/creditRequestEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('clientCreditEmail', {
description: 'Sends the credit request email with an attached PDF',
@@ -10,7 +8,7 @@ module.exports = Self => {
type: 'number',
required: true,
description: 'The client id',
- http: {source: 'path'}
+ http: {source: 'path'},
},
{
arg: 'recipient',
@@ -22,38 +20,25 @@ module.exports = Self => {
arg: 'replyTo',
type: 'string',
description: 'The sender email to reply to',
- required: false
+ required: false,
},
{
arg: 'recipientId',
type: 'number',
- description: 'The recipient id to send to the recipient preferred language',
- required: false
- }
+ description:
+ 'The recipient id to send to the recipient preferred language',
+ required: false,
+ },
],
returns: {
type: ['object'],
- root: true
+ root: true,
},
http: {
path: '/:id/credit-request-email',
- verb: 'POST'
- }
+ verb: 'POST',
+ },
});
- Self.clientCreditEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('credit-request', params);
-
- return email.send();
- };
+ Self.clientCreditEmail = ctx => Self.sendTemplate(ctx, 'credit-request');
};
diff --git a/modules/client/back/methods/client/creditRequestHtml.js b/modules/client/back/methods/client/creditRequestHtml.js
index 6b2d7fe4e..fbd6cacb9 100644
--- a/modules/client/back/methods/client/creditRequestHtml.js
+++ b/modules/client/back/methods/client/creditRequestHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('creditRequestHtml', {
description: 'Returns the credit request email preview',
@@ -40,21 +38,5 @@ module.exports = Self => {
}
});
- Self.creditRequestHtml = async(ctx, id) => {
- const {accessToken} = ctx.req;
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
- params.access_token = accessToken.id;
-
- const report = new Email('credit-request', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.creditRequestHtml = (ctx, id) => Self.printEmail(ctx, id, 'credit-request');
};
diff --git a/modules/client/back/methods/client/creditRequestPdf.js b/modules/client/back/methods/client/creditRequestPdf.js
index 2e3dc0619..a4f4ed128 100644
--- a/modules/client/back/methods/client/creditRequestPdf.js
+++ b/modules/client/back/methods/client/creditRequestPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('creditRequestPdf', {
description: 'Returns the credit request pdf',
@@ -40,17 +38,5 @@ module.exports = Self => {
}
});
- Self.creditRequestPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('credit-request', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.creditRequestPdf = (ctx, id) => Self.printReport(ctx, id, 'credit-request');
};
diff --git a/modules/client/back/methods/client/extendedListFilter.js b/modules/client/back/methods/client/extendedListFilter.js
index 8e02cd413..27bbe2a35 100644
--- a/modules/client/back/methods/client/extendedListFilter.js
+++ b/modules/client/back/methods/client/extendedListFilter.js
@@ -97,7 +97,7 @@ module.exports = Self => {
const stmts = [];
const stmt = new ParameterizedSQL(
- `SELECT
+ `SELECT
c.id,
c.name,
c.socialName,
diff --git a/modules/client/back/methods/client/getCard.js b/modules/client/back/methods/client/getCard.js
index 99c59f757..a2365ee25 100644
--- a/modules/client/back/methods/client/getCard.js
+++ b/modules/client/back/methods/client/getCard.js
@@ -80,7 +80,7 @@ module.exports = function(Self) {
const data = await Self.rawSql(query, [id, date], myOptions);
client.debt = data[0].debt;
- client.unpaid = await Self.app.models.ClientUnpaid.findOne({id}, myOptions);
+ client.unpaid = await Self.app.models.ClientUnpaid.findById(id, null, myOptions);
return client;
};
diff --git a/modules/client/back/methods/client/incotermsAuthorizationEmail.js b/modules/client/back/methods/client/incotermsAuthorizationEmail.js
index 2a4fe593a..4a21f20b0 100644
--- a/modules/client/back/methods/client/incotermsAuthorizationEmail.js
+++ b/modules/client/back/methods/client/incotermsAuthorizationEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('incotermsAuthorizationEmail', {
description: 'Sends the incoterms authorization email with an attached PDF',
@@ -47,19 +45,5 @@ module.exports = Self => {
}
});
- Self.incotermsAuthorizationEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('incoterms-authorization', params);
-
- return email.send();
- };
+ Self.incotermsAuthorizationEmail = ctx => Self.sendTemplate(ctx, 'incoterms-authorization');
};
diff --git a/modules/client/back/methods/client/incotermsAuthorizationHtml.js b/modules/client/back/methods/client/incotermsAuthorizationHtml.js
index 875495d93..0a6bba0a8 100644
--- a/modules/client/back/methods/client/incotermsAuthorizationHtml.js
+++ b/modules/client/back/methods/client/incotermsAuthorizationHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('incotermsAuthorizationHtml', {
description: 'Returns the incoterms authorization email preview',
@@ -46,21 +44,5 @@ module.exports = Self => {
}
});
- Self.incotermsAuthorizationHtml = async(ctx, id) => {
- const {accessToken} = ctx.req;
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
- params.access_token = accessToken.id;
-
- const report = new Email('incoterms-authorization', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.incotermsAuthorizationHtml = (ctx, id) => Self.printEmail(ctx, id, 'incoterms-authorization');
};
diff --git a/modules/client/back/methods/client/incotermsAuthorizationPdf.js b/modules/client/back/methods/client/incotermsAuthorizationPdf.js
index 9a8a8d296..d37e473f1 100644
--- a/modules/client/back/methods/client/incotermsAuthorizationPdf.js
+++ b/modules/client/back/methods/client/incotermsAuthorizationPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('incotermsAuthorizationPdf', {
description: 'Returns the incoterms authorization pdf',
@@ -46,17 +44,5 @@ module.exports = Self => {
}
});
- Self.incotermsAuthorizationPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('incoterms-authorization', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.incotermsAuthorizationPdf = (ctx, id) => Self.printReport(ctx, id, 'incoterms-authorization');
};
diff --git a/modules/client/back/methods/client/letterDebtorNdEmail.js b/modules/client/back/methods/client/letterDebtorNdEmail.js
index e188c6e0a..396acdb97 100644
--- a/modules/client/back/methods/client/letterDebtorNdEmail.js
+++ b/modules/client/back/methods/client/letterDebtorNdEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('letterDebtorNdEmail', {
description: 'Sends the second debtor letter email with an attached PDF',
@@ -47,19 +45,5 @@ module.exports = Self => {
}
});
- Self.letterDebtorNdEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('letter-debtor-nd', params);
-
- return email.send();
- };
+ Self.letterDebtorNdEmail = ctx => Self.sendTemplate(ctx, 'letter-debtor-nd');
};
diff --git a/modules/client/back/methods/client/letterDebtorNdHtml.js b/modules/client/back/methods/client/letterDebtorNdHtml.js
index 320fbaef3..f14f96dea 100644
--- a/modules/client/back/methods/client/letterDebtorNdHtml.js
+++ b/modules/client/back/methods/client/letterDebtorNdHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('letterDebtorNdHtml', {
description: 'Returns the second letter debtor email preview',
@@ -46,21 +44,5 @@ module.exports = Self => {
}
});
- Self.letterDebtorNdHtml = async(ctx, id) => {
- const {accessToken} = ctx.req;
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
- params.access_token = accessToken.id;
-
- const report = new Email('letter-debtor-nd', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.letterDebtorNdHtml = (ctx, id) => Self.printEmail(ctx, id, 'letter-debtor-nd');
};
diff --git a/modules/client/back/methods/client/letterDebtorPdf.js b/modules/client/back/methods/client/letterDebtorPdf.js
index 421d531e6..943869143 100644
--- a/modules/client/back/methods/client/letterDebtorPdf.js
+++ b/modules/client/back/methods/client/letterDebtorPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('letterDebtorPdf', {
description: 'Returns the letter debtor pdf',
@@ -46,17 +44,5 @@ module.exports = Self => {
}
});
- Self.letterDebtorPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('letter-debtor', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.letterDebtorPdf = (ctx, id) => Self.printReport(ctx, id, 'letter-debtor');
};
diff --git a/modules/client/back/methods/client/letterDebtorStEmail.js b/modules/client/back/methods/client/letterDebtorStEmail.js
index ee39a101b..c76204fbc 100644
--- a/modules/client/back/methods/client/letterDebtorStEmail.js
+++ b/modules/client/back/methods/client/letterDebtorStEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('letterDebtorStEmail', {
description: 'Sends the printer setup email with an attached PDF',
@@ -47,19 +45,5 @@ module.exports = Self => {
}
});
- Self.letterDebtorStEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('letter-debtor-st', params);
-
- return email.send();
- };
+ Self.letterDebtorStEmail = ctx => Self.sendTemplate(ctx, 'letter-debtor-st');
};
diff --git a/modules/client/back/methods/client/letterDebtorStHtml.js b/modules/client/back/methods/client/letterDebtorStHtml.js
index acf75272b..a1dcf00d7 100644
--- a/modules/client/back/methods/client/letterDebtorStHtml.js
+++ b/modules/client/back/methods/client/letterDebtorStHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('letterDebtorStHtml', {
description: 'Returns the letter debtor email preview',
@@ -46,21 +44,5 @@ module.exports = Self => {
}
});
- Self.letterDebtorStHtml = async(ctx, id) => {
- const {accessToken} = ctx.req;
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
- params.access_token = accessToken.id;
-
- const report = new Email('letter-debtor-st', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.letterDebtorStHtml = (ctx, id) => Self.printEmail(ctx, id, 'letter-debtor-st');
};
diff --git a/modules/client/back/methods/client/printerSetupEmail.js b/modules/client/back/methods/client/printerSetupEmail.js
index 254948659..2a0903e90 100644
--- a/modules/client/back/methods/client/printerSetupEmail.js
+++ b/modules/client/back/methods/client/printerSetupEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('printerSetupEmail', {
description: 'Sends the printer setup email with an attached PDF',
@@ -41,19 +39,5 @@ module.exports = Self => {
}
});
- Self.printerSetupEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('printer-setup', params);
-
- return email.send();
- };
+ Self.printerSetupEmail = ctx => Self.sendTemplate(ctx, 'printer-setup');
};
diff --git a/modules/client/back/methods/client/printerSetupHtml.js b/modules/client/back/methods/client/printerSetupHtml.js
index 1ef1843e0..c9d94d1c2 100644
--- a/modules/client/back/methods/client/printerSetupHtml.js
+++ b/modules/client/back/methods/client/printerSetupHtml.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('printerSetupHtml', {
description: 'Returns the printer setup email preview',
@@ -40,19 +38,5 @@ module.exports = Self => {
}
});
- Self.printerSetupHtml = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- params.isPreview = true;
-
- const report = new Email('printer-setup', params);
- const html = await report.render();
-
- return [html, 'text/html', `filename="mail-${id}.pdf"`];
- };
+ Self.printerSetupHtml = (ctx, id) => Self.printEmail(ctx, id, 'printer-setup');
};
diff --git a/modules/client/back/methods/client/sepaCoreEmail.js b/modules/client/back/methods/client/sepaCoreEmail.js
index 93c9d4302..20931eb03 100644
--- a/modules/client/back/methods/client/sepaCoreEmail.js
+++ b/modules/client/back/methods/client/sepaCoreEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('sepaCoreEmail', {
description: 'Sends the campaign metrics email with an attached PDF',
@@ -47,19 +45,5 @@ module.exports = Self => {
}
});
- Self.sepaCoreEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('sepa-core', params);
-
- return email.send();
- };
+ Self.sepaCoreEmail = ctx => Self.sendTemplate(ctx, 'sepa-core');
};
diff --git a/modules/client/back/methods/receipt/balanceCompensationPdf.js b/modules/client/back/methods/receipt/balanceCompensationPdf.js
index ff8713253..e790d54a1 100644
--- a/modules/client/back/methods/receipt/balanceCompensationPdf.js
+++ b/modules/client/back/methods/receipt/balanceCompensationPdf.js
@@ -1,5 +1,3 @@
-const { Report } = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('balanceCompensationPdf', {
description: 'Returns the the debit balances compensation pdf',
@@ -10,7 +8,7 @@ module.exports = Self => {
type: 'number',
required: true,
description: 'The receipt id',
- http: { source: 'path' }
+ http: {source: 'path'}
}
],
returns: [
@@ -34,17 +32,5 @@ module.exports = Self => {
}
});
- Self.balanceCompensationPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('balance-compensation', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.balanceCompensationPdf = (ctx, id) => Self.printReport(ctx, id, 'balance-compensation');
};
diff --git a/modules/client/back/methods/receipt/receiptPdf.js b/modules/client/back/methods/receipt/receiptPdf.js
index f55e05040..433f386db 100644
--- a/modules/client/back/methods/receipt/receiptPdf.js
+++ b/modules/client/back/methods/receipt/receiptPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('receiptPdf', {
description: 'Returns the receipt pdf',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.receiptPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('receipt', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.receiptPdf = (ctx, id) => Self.printReport(ctx, id, 'receipt');
};
diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js
index 2d8e7bd27..c41085b79 100644
--- a/modules/client/back/models/client.js
+++ b/modules/client/back/models/client.js
@@ -279,6 +279,18 @@ module.exports = Self => {
// Credit changes
if (changes.credit !== undefined)
await Self.changeCredit(ctx, finalState, changes);
+
+ const oldInstance = {};
+ if (!ctx.isNewInstance) {
+ const newProps = Object.keys(changes);
+ Object.keys(orgData.__data).forEach(prop => {
+ if (newProps.includes(prop))
+ oldInstance[prop] = orgData[prop];
+ });
+ }
+
+ ctx.hookState.oldInstance = oldInstance;
+ ctx.hookState.newInstance = changes;
});
Self.observe('after save', async ctx => {
diff --git a/modules/client/back/models/receipt.json b/modules/client/back/models/receipt.json
index 19107f561..da7879df9 100644
--- a/modules/client/back/models/receipt.json
+++ b/modules/client/back/models/receipt.json
@@ -62,6 +62,11 @@
"type": "belongsTo",
"model": "Bank",
"foreignKey": "bankFk"
+ },
+ "supplier": {
+ "type": "belongsTo",
+ "model": "Supplier",
+ "foreignKey": "companyFk"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/client/front/descriptor/index.html b/modules/client/front/descriptor/index.html
index edf3cc8c3..5aaecbdb0 100644
--- a/modules/client/front/descriptor/index.html
+++ b/modules/client/front/descriptor/index.html
@@ -70,11 +70,12 @@
icon="icon-no036"
ng-if="$ctrl.client.isTaxDataChecked == false">
-
-
+
diff --git a/modules/client/front/descriptor/index.js b/modules/client/front/descriptor/index.js
index 86e8f4e61..cdabf13e7 100644
--- a/modules/client/front/descriptor/index.js
+++ b/modules/client/front/descriptor/index.js
@@ -46,8 +46,9 @@ class Controller extends Descriptor {
}
clientUnpaid() {
- return this.$t(`Unpaid Dated`, {dated: this.client.unpaid.dated}) +
- '
' + this.$t(`Unpaid Amount`, {amount: this.client.unpaid.amount});
+ return this.$t(`Unpaid`) + '
'
+ + this.$t(`Unpaid Dated`, {dated: this.client.unpaid.dated}) + '
'
+ + this.$t(`Unpaid Amount`, {amount: this.client.unpaid.amount});
}
}
diff --git a/modules/client/front/unpaid/index.html b/modules/client/front/unpaid/index.html
index 5f6edfe10..2a0432f5a 100644
--- a/modules/client/front/unpaid/index.html
+++ b/modules/client/front/unpaid/index.html
@@ -9,12 +9,12 @@
-
\ No newline at end of file
+
diff --git a/modules/client/front/unpaid/index.js b/modules/client/front/unpaid/index.js
index fcf620b54..1585b808d 100644
--- a/modules/client/front/unpaid/index.js
+++ b/modules/client/front/unpaid/index.js
@@ -6,9 +6,17 @@ export default class Controller extends Section {
if (hasData && !this.clientUnpaid.dated)
this.clientUnpaid.dated = Date.vnNew();
}
+
+ onSubmit() {
+ this.$.watcher.submit()
+ .then(() => this.card.reload());
+ }
}
ngModule.vnComponent('vnClientUnpaid', {
template: require('./index.html'),
- controller: Controller
+ controller: Controller,
+ require: {
+ card: '^vnClientCard'
+ }
});
diff --git a/modules/entry/back/methods/entry/entryOrderPdf.js b/modules/entry/back/methods/entry/entryOrderPdf.js
index e6d37fdb6..f77832162 100644
--- a/modules/entry/back/methods/entry/entryOrderPdf.js
+++ b/modules/entry/back/methods/entry/entryOrderPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('entryOrderPdf', {
description: 'Returns the entry order pdf',
@@ -38,17 +36,5 @@ module.exports = Self => {
}
});
- Self.entryOrderPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('entry-order', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.entryOrderPdf = (ctx, id) => Self.printReport(ctx, id, 'entry-order');
};
diff --git a/modules/invoiceIn/back/methods/invoice-in/invoiceInEmail.js b/modules/invoiceIn/back/methods/invoice-in/invoiceInEmail.js
index 0768541a8..a0af3da69 100644
--- a/modules/invoiceIn/back/methods/invoice-in/invoiceInEmail.js
+++ b/modules/invoiceIn/back/methods/invoice-in/invoiceInEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('invoiceInEmail', {
description: 'Sends the invoice in email with an attached PDF',
@@ -35,19 +33,5 @@ module.exports = Self => {
}
});
- Self.invoiceInEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('invoiceIn', params);
-
- return email.send();
- };
+ Self.invoiceInEmail = ctx => Self.sendTemplate(ctx, 'invoiceIn');
};
diff --git a/modules/invoiceIn/back/methods/invoice-in/invoiceInPdf.js b/modules/invoiceIn/back/methods/invoice-in/invoiceInPdf.js
index e7962c93f..681a19fc6 100644
--- a/modules/invoiceIn/back/methods/invoice-in/invoiceInPdf.js
+++ b/modules/invoiceIn/back/methods/invoice-in/invoiceInPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('invoiceInPdf', {
description: 'Returns the invoiceIn pdf',
@@ -34,17 +32,5 @@ module.exports = Self => {
}
});
- Self.invoiceInPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
- delete args.ctx;
-
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('invoiceIn', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.invoiceInPdf = (ctx, id) => Self.printReport(ctx, id, 'invoiceIn');
};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
index f3c7a5093..f18b0c682 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
@@ -4,47 +4,37 @@ module.exports = Self => {
accessType: 'WRITE',
accepts: [
{
+ arg: 'clientId',
+ type: 'number',
+ description: 'The client id'
+ }, {
arg: 'invoiceDate',
type: 'date',
- description: 'The invoice date'
- },
- {
+ description: 'The invoice date',
+ required: true
+ }, {
arg: 'maxShipped',
type: 'date',
- description: 'The maximum shipped date'
- },
- {
- arg: 'fromClientId',
- type: 'number',
- description: 'The minimum client id'
- },
- {
- arg: 'toClientId',
- type: 'number',
- description: 'The maximum client id'
- },
- {
+ description: 'The maximum shipped date',
+ required: true
+ }, {
arg: 'companyFk',
type: 'number',
- description: 'The company id to invoice'
- }
+ description: 'The company id to invoice',
+ required: true
+ },
],
- returns: [{
- arg: 'clientsAndAddresses',
- type: ['object']
+ returns: {
+ type: 'Object',
+ root: true
},
- {
- arg: 'invoice',
- type: 'object'
- }],
http: {
path: '/clientsToInvoice',
verb: 'POST'
}
});
- Self.clientsToInvoice = async(ctx, options) => {
- const args = ctx.args;
+ Self.clientsToInvoice = async(ctx, clientId, invoiceDate, maxShipped, companyFk, options) => {
let tx;
const myOptions = {};
@@ -56,134 +46,52 @@ module.exports = Self => {
myOptions.transaction = tx;
}
- let query;
try {
- query = `
- SELECT MAX(issued) issued
- FROM vn.invoiceOut io
- JOIN vn.time t ON t.dated = io.issued
- WHERE io.serial = 'A'
- AND t.year = YEAR(?)
- AND io.companyFk = ?`;
- const [maxIssued] = await Self.rawSql(query, [
- args.invoiceDate,
- args.companyFk
- ], myOptions);
-
- const maxSerialDate = maxIssued.issued || args.invoiceDate;
- if (args.invoiceDate < maxSerialDate)
- args.invoiceDate = maxSerialDate;
-
- if (args.invoiceDate < args.maxShipped)
- args.maxShipped = args.invoiceDate;
-
- const minShipped = Date.vnNew();
- minShipped.setFullYear(minShipped.getFullYear() - 1);
- minShipped.setMonth(1);
- minShipped.setDate(1);
- minShipped.setHours(0, 0, 0, 0);
-
// Packaging liquidation
const vIsAllInvoiceable = false;
- const clientsWithPackaging = await getClientsWithPackaging(ctx, myOptions);
- for (let client of clientsWithPackaging) {
- await Self.rawSql('CALL packageInvoicing(?, ?, ?, ?, @newTicket)', [
- client.id,
- args.invoiceDate,
- args.companyFk,
- vIsAllInvoiceable
- ], myOptions);
- }
+ await Self.rawSql('CALL ticketPackaging_add(?, ?, ?, ?)', [
+ clientId,
+ invoiceDate,
+ companyFk,
+ vIsAllInvoiceable
+ ], myOptions);
- const invoiceableClients = await getInvoiceableClients(ctx, myOptions);
+ const minShipped = Date.vnNew();
+ minShipped.setFullYear(maxShipped.getFullYear() - 1);
- if (!invoiceableClients) return;
+ const query = `
+ SELECT c.id clientId,
+ c.name clientName,
+ a.id,
+ a.nickname
+ FROM ticket t
+ JOIN address a ON a.id = t.addressFk
+ JOIN client c ON c.id = t.clientFk
+ WHERE t.refFk IS NULL
+ AND t.shipped BETWEEN ? AND util.dayEnd(?)
+ AND (t.clientFk = ? OR ? IS NULL )
+ AND t.companyFk = ?
+ AND c.hasToInvoice
+ AND c.isTaxDataChecked
+ AND c.isActive
+ AND NOT t.isDeleted
+ GROUP BY c.id, IF(c.hasToInvoiceByAddress, a.id, TRUE)
+ HAVING SUM(t.totalWithVat) > 0;`;
- const clientsAndAddresses = invoiceableClients.map(invoiceableClient => {
- return {
- clientId: invoiceableClient.id,
- addressId: invoiceableClient.addressFk
-
- };
- }
- );
+ const addresses = await Self.rawSql(query, [
+ minShipped,
+ maxShipped,
+ clientId,
+ clientId,
+ companyFk
+ ], myOptions);
if (tx) await tx.commit();
- return [
- clientsAndAddresses,
- {
- invoiceDate: args.invoiceDate,
- maxShipped: args.maxShipped,
- fromClientId: args.fromClientId,
- toClientId: args.toClientId,
- companyFk: args.companyFk,
- minShipped: minShipped
- }
- ];
+ return addresses;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
-
- async function getClientsWithPackaging(ctx, options) {
- const models = Self.app.models;
- const args = ctx.args;
- const query = `SELECT DISTINCT clientFk AS id
- FROM ticket t
- JOIN ticketPackaging tp ON t.id = tp.ticketFk
- JOIN client c ON c.id = t.clientFk
- WHERE t.shipped BETWEEN '2017-11-21' AND ?
- AND t.clientFk >= ?
- AND (t.clientFk <= ? OR ? IS NULL)
- AND c.isActive`;
- return models.InvoiceOut.rawSql(query, [
- args.maxShipped,
- args.fromClientId,
- args.toClientId,
- args.toClientId
- ], options);
- }
-
- async function getInvoiceableClients(ctx, options) {
- const models = Self.app.models;
- const args = ctx.args;
- const minShipped = Date.vnNew();
- minShipped.setFullYear(minShipped.getFullYear() - 1);
-
- const query = `SELECT
- c.id,
- SUM(IFNULL
- (
- s.quantity *
- s.price * (100-s.discount)/100,
- 0)
- + IFNULL(ts.quantity * ts.price,0)
- ) AS sumAmount,
- c.hasToInvoiceByAddress,
- c.email,
- c.isToBeMailed,
- a.id addressFk
- FROM ticket t
- LEFT JOIN sale s ON s.ticketFk = t.id
- LEFT JOIN ticketService ts ON ts.ticketFk = t.id
- JOIN address a ON a.id = t.addressFk
- JOIN client c ON c.id = t.clientFk
- WHERE ISNULL(t.refFk) AND c.id >= ?
- AND (t.clientFk <= ? OR ? IS NULL)
- AND t.shipped BETWEEN ? AND util.dayEnd(?)
- AND t.companyFk = ? AND c.hasToInvoice
- AND c.isTaxDataChecked AND c.isActive
- GROUP BY c.id, IF(c.hasToInvoiceByAddress,a.id,TRUE) HAVING sumAmount > 0`;
-
- return models.InvoiceOut.rawSql(query, [
- args.fromClientId,
- args.toClientId,
- args.toClientId,
- minShipped,
- args.maxShipped,
- args.companyFk
- ], options);
- }
};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/createPdf.js b/modules/invoiceOut/back/methods/invoiceOut/createPdf.js
index 71e7c1543..e56516237 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/createPdf.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/createPdf.js
@@ -44,7 +44,7 @@ module.exports = Self => {
try {
const invoiceOut = await Self.findById(id, null, myOptions);
const hasInvoicing = await models.Account.hasRole(userId, 'invoicing', myOptions);
- console.log(invoiceOut, !hasInvoicing);
+
if (invoiceOut.hasPdf && !hasInvoicing)
throw new UserError(`You don't have enough privileges`);
diff --git a/modules/invoiceOut/back/methods/invoiceOut/download.js b/modules/invoiceOut/back/methods/invoiceOut/download.js
index 74f5c95fe..5c787428b 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/download.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/download.js
@@ -65,7 +65,7 @@ module.exports = Self => {
try {
await fs.access(file.path);
} catch (error) {
- await Self.createPdf(ctx, id);
+ await Self.createPdf(ctx, id, myOptions);
}
const stream = fs.createReadStream(file.path);
diff --git a/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js b/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js
index 208d55358..fe005f1ab 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/downloadZip.js
@@ -47,7 +47,6 @@ module.exports = Self => {
ids = ids.split(',');
for (let id of ids) {
- console.log(zipConfig, totalSize, zipConfig ? zipConfig.maxSize : null);
if (zipConfig && totalSize > zipConfig.maxSize) throw new UserError('Files are too large');
const invoiceOutPdf = await models.InvoiceOut.download(ctx, id, myOptions);
const fileName = extractFileName(invoiceOutPdf[2]);
diff --git a/modules/invoiceOut/back/methods/invoiceOut/exportationPdf.js b/modules/invoiceOut/back/methods/invoiceOut/exportationPdf.js
index e947c5144..7a2526b35 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/exportationPdf.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/exportationPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('exportationPdf', {
description: 'Returns the exportation pdf',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.exportationPdf = async(ctx, reference) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('exportation', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${reference}.pdf"`];
- };
+ Self.exportationPdf = (ctx, reference) => Self.printReport(ctx, reference, 'exportation');
};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/getInvoiceDate.js b/modules/invoiceOut/back/methods/invoiceOut/getInvoiceDate.js
new file mode 100644
index 000000000..dcc1fa6e8
--- /dev/null
+++ b/modules/invoiceOut/back/methods/invoiceOut/getInvoiceDate.js
@@ -0,0 +1,35 @@
+module.exports = Self => {
+ Self.remoteMethod('getInvoiceDate', {
+ description: 'Returns default Invoice Date',
+ accessType: 'READ',
+ accepts: [
+ {
+ arg: 'companyFk',
+ type: 'number',
+ required: true
+ }
+ ],
+ returns: {
+ type: ['object'],
+ root: true
+ },
+ http: {
+ path: `/getInvoiceDate`,
+ verb: 'GET'
+ }
+ });
+
+ Self.getInvoiceDate = async companyFk => {
+ const models = Self.app.models;
+ const [invoiceDate] = await models.InvoiceOut.rawSql(
+ `SELECT MAX(io.issued) issued
+ FROM invoiceOut io
+ JOIN invoiceOutSerial ios ON ios.code = io.serial
+ WHERE ios.type = 'global'
+ AND io.issued
+ AND io.companyFk = ?`,
+ [companyFk]
+ );
+ return invoiceDate;
+ };
+};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
index 95c51a96d..c8f8a6778 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
@@ -1,43 +1,42 @@
+const UserError = require('vn-loopback/util/user-error');
+
module.exports = Self => {
Self.remoteMethodCtx('invoiceClient', {
description: 'Make a invoice of a client',
accessType: 'WRITE',
- accepts: [{
- arg: 'clientId',
- type: 'number',
- description: 'The client id to invoice',
- required: true
- },
- {
- arg: 'addressId',
- type: 'number',
- description: 'The address id to invoice',
- required: true
- },
- {
- arg: 'invoiceDate',
- type: 'date',
- description: 'The invoice date',
- required: true
- },
- {
- arg: 'maxShipped',
- type: 'date',
- description: 'The maximum shipped date',
- required: true
- },
- {
- arg: 'companyFk',
- type: 'number',
- description: 'The company id to invoice',
- required: true
- },
- {
- arg: 'minShipped',
- type: 'date',
- description: 'The minium shupped date',
- required: true
- }],
+ accepts: [
+ {
+ arg: 'clientId',
+ type: 'number',
+ description: 'The client id to invoice',
+ required: true
+ }, {
+ arg: 'addressId',
+ type: 'number',
+ description: 'The address id to invoice',
+ required: true
+ }, {
+ arg: 'invoiceDate',
+ type: 'date',
+ description: 'The invoice date',
+ required: true
+ }, {
+ arg: 'maxShipped',
+ type: 'date',
+ description: 'The maximum shipped date',
+ required: true
+ }, {
+ arg: 'companyFk',
+ type: 'number',
+ description: 'The company id to invoice',
+ required: true
+ }, {
+ arg: 'printerFk',
+ type: 'number',
+ description: 'The printer to print',
+ required: true
+ }
+ ],
returns: {
type: 'object',
root: true
@@ -62,69 +61,65 @@ module.exports = Self => {
myOptions.transaction = tx;
}
+ const minShipped = Date.vnNew();
+ minShipped.setFullYear(args.maxShipped.getFullYear() - 1);
+
let invoiceId;
let invoiceOut;
try {
const client = await models.Client.findById(args.clientId, {
fields: ['id', 'hasToInvoiceByAddress']
}, myOptions);
- try {
- if (client.hasToInvoiceByAddress) {
- await Self.rawSql('CALL ticketToInvoiceByAddress(?, ?, ?, ?)', [
- args.minShipped,
- args.maxShipped,
- args.addressId,
- args.companyFk
- ], myOptions);
- } else {
- await Self.rawSql('CALL invoiceFromClient(?, ?, ?)', [
- args.maxShipped,
- client.id,
- args.companyFk
- ], myOptions);
- }
- // Make invoice
- const isSpanishCompany = await getIsSpanishCompany(args.companyFk, myOptions);
-
- // Validates ticket nagative base
- const hasAnyNegativeBase = await getNegativeBase(myOptions);
- if (hasAnyNegativeBase && isSpanishCompany)
- return tx.rollback();
-
- query = `SELECT invoiceSerial(?, ?, ?) AS serial`;
- const [invoiceSerial] = await Self.rawSql(query, [
+ if (client.hasToInvoiceByAddress) {
+ await Self.rawSql('CALL ticketToInvoiceByAddress(?, ?, ?, ?)', [
+ minShipped,
+ args.maxShipped,
+ args.addressId,
+ args.companyFk
+ ], myOptions);
+ } else {
+ await Self.rawSql('CALL invoiceFromClient(?, ?, ?)', [
+ args.maxShipped,
client.id,
- args.companyFk,
- 'G'
+ args.companyFk
], myOptions);
- const serialLetter = invoiceSerial.serial;
-
- query = `CALL invoiceOut_new(?, ?, NULL, @invoiceId)`;
- await Self.rawSql(query, [
- serialLetter,
- args.invoiceDate
- ], myOptions);
-
- const [newInvoice] = await Self.rawSql(`SELECT @invoiceId id`, null, myOptions);
- if (newInvoice.id) {
- await Self.rawSql('CALL invoiceOutBooking(?)', [newInvoice.id], myOptions);
-
- invoiceId = newInvoice.id;
- }
- } catch (e) {
- const failedClient = {
- id: client.id,
- stacktrace: e
- };
- await notifyFailures(ctx, failedClient, myOptions);
}
- invoiceOut = await models.InvoiceOut.findById(invoiceId, {
- include: {
- relation: 'client'
- }
- }, myOptions);
+ // Make invoice
+ const isSpanishCompany = await getIsSpanishCompany(args.companyFk, myOptions);
+
+ // Validates ticket nagative base
+ const hasAnyNegativeBase = await getNegativeBase(myOptions);
+ if (hasAnyNegativeBase && isSpanishCompany)
+ throw new UserError('Negative basis');
+
+ query = `SELECT invoiceSerial(?, ?, ?) AS serial`;
+ const [invoiceSerial] = await Self.rawSql(query, [
+ client.id,
+ args.companyFk,
+ 'G'
+ ], myOptions);
+ const serialLetter = invoiceSerial.serial;
+
+ query = `CALL invoiceOut_new(?, ?, NULL, @invoiceId)`;
+ await Self.rawSql(query, [
+ serialLetter,
+ args.invoiceDate
+ ], myOptions);
+
+ const [newInvoice] = await Self.rawSql(`SELECT @invoiceId id`, null, myOptions);
+ if (newInvoice.id) {
+ await Self.rawSql('CALL invoiceOutBooking(?)', [newInvoice.id], myOptions);
+
+ invoiceOut = await models.InvoiceOut.findById(newInvoice.id, {
+ include: {
+ relation: 'client'
+ }
+ }, myOptions);
+
+ invoiceId = newInvoice.id;
+ }
if (tx) await tx.commit();
} catch (e) {
@@ -132,15 +127,26 @@ module.exports = Self => {
throw e;
}
- ctx.args = {
- reference: invoiceOut.ref,
- recipientId: invoiceOut.clientFk,
- recipient: invoiceOut.client().email
- };
- try {
- await models.InvoiceOut.invoiceEmail(ctx, invoiceOut.ref);
- } catch (err) {}
-
+ if (invoiceId) {
+ if (!invoiceOut.client().isToBeMailed) {
+ const query = `
+ CALL vn.report_print(
+ 'invoice',
+ ?,
+ account.myUser_getId(),
+ JSON_OBJECT('refFk', ?),
+ 'normal'
+ );`;
+ await models.InvoiceOut.rawSql(query, [args.printerFk, invoiceOut.ref]);
+ } else {
+ ctx.args = {
+ reference: invoiceOut.ref,
+ recipientId: invoiceOut.clientFk,
+ recipient: invoiceOut.client().email
+ };
+ await models.InvoiceOut.invoiceEmail(ctx, invoiceOut.ref);
+ }
+ }
return invoiceId;
};
@@ -148,13 +154,12 @@ module.exports = Self => {
const models = Self.app.models;
const query = 'SELECT hasAnyNegativeBase() AS base';
const [result] = await models.InvoiceOut.rawSql(query, null, options);
-
return result && result.base;
}
async function getIsSpanishCompany(companyId, options) {
const models = Self.app.models;
- const query = `SELECT COUNT(*) AS total
+ const query = `SELECT COUNT(*) isSpanishCompany
FROM supplier s
JOIN country c ON c.id = s.countryFk
AND c.code = 'ES'
@@ -163,28 +168,6 @@ module.exports = Self => {
companyId
], options);
- return supplierCompany && supplierCompany.total;
- }
-
- async function notifyFailures(ctx, failedClient, options) {
- const models = Self.app.models;
- const userId = ctx.req.accessToken.userId;
- const $t = ctx.req.__; // $translate
-
- const worker = await models.EmailUser.findById(userId, null, options);
- const subject = $t('Global invoicing failed');
- let body = $t(`Wasn't able to invoice the following clients`) + ':
';
-
- body += `ID: ${failedClient.id}
-
${failedClient.stacktrace}
`;
-
- await Self.rawSql(`
- INSERT INTO vn.mail (sender, replyTo, sent, subject, body)
- VALUES (?, ?, FALSE, ?, ?)`, [
- worker.email,
- worker.email,
- subject,
- body
- ], options);
+ return supplierCompany && supplierCompany.isSpanishCompany;
}
};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/invoiceOutPdf.js b/modules/invoiceOut/back/methods/invoiceOut/invoiceOutPdf.js
new file mode 100644
index 000000000..941d31596
--- /dev/null
+++ b/modules/invoiceOut/back/methods/invoiceOut/invoiceOutPdf.js
@@ -0,0 +1,50 @@
+const {Report} = require('vn-print');
+
+module.exports = Self => {
+ Self.remoteMethodCtx('invoiceOutPdf', {
+ description: 'Returns the invoice pdf',
+ accessType: 'READ',
+ accepts: [
+ {
+ arg: 'reference',
+ type: 'string',
+ required: true,
+ description: 'The invoice reference',
+ http: {source: 'path'}
+ }
+ ],
+ returns: [
+ {
+ arg: 'body',
+ type: 'file',
+ root: true
+ }, {
+ arg: 'Content-Type',
+ type: 'String',
+ http: {target: 'header'}
+ }, {
+ arg: 'Content-Disposition',
+ type: 'String',
+ http: {target: 'header'}
+ }
+ ],
+ http: {
+ path: '/:reference/invoice-out-pdf',
+ verb: 'GET'
+ }
+ });
+
+ Self.invoiceOutPdf = async(ctx, reference) => {
+ const args = Object.assign({}, ctx.args);
+ const params = {lang: ctx.req.getLocale()};
+
+ delete args.ctx;
+ for (const param in args)
+ params[param] = args[param];
+
+ const report = new Report('invoice', params);
+ const stream = await report.toPdfStream();
+
+ return [stream, 'application/pdf', `filename="doc-${reference}.pdf"`];
+ };
+};
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js
deleted file mode 100644
index 41ea45487..000000000
--- a/modules/invoiceOut/back/methods/invoiceOut/specs/downloadZip.spec.js
+++ /dev/null
@@ -1,53 +0,0 @@
-const models = require('vn-loopback/server/server').models;
-const UserError = require('vn-loopback/util/user-error');
-
-describe('InvoiceOut downloadZip()', () => {
- const userId = 9;
- const invoiceIds = '1,2';
- const ctx = {
- req: {
-
- accessToken: {userId: userId},
- headers: {origin: 'http://localhost:5000'},
- }
- };
-
- it('should return part of link to dowloand the zip', async() => {
- const tx = await models.InvoiceOut.beginTransaction({});
-
- try {
- const options = {transaction: tx};
-
- const result = await models.InvoiceOut.downloadZip(ctx, invoiceIds, options);
-
- expect(result).toBeDefined();
-
- await tx.rollback();
- } catch (e) {
- await tx.rollback();
- throw e;
- }
- });
-
- it('should return an error if the size of the files is too large', async() => {
- const tx = await models.InvoiceOut.beginTransaction({});
-
- let error;
- try {
- const options = {transaction: tx};
- const zipConfig = {
- maxSize: 0
- };
- await models.ZipConfig.create(zipConfig, options);
-
- await models.InvoiceOut.downloadZip(ctx, invoiceIds, options);
-
- await tx.rollback();
- } catch (e) {
- await tx.rollback();
- error = e;
- }
-
- expect(error).toEqual(new UserError(`Files are too large`));
- });
-});
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js
index 9264bf77d..15e3e887e 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js
@@ -65,7 +65,6 @@ describe('InvoiceOut filter()', () => {
await invoiceOut.updateAttribute('hasPdf', true, options);
const result = await models.InvoiceOut.filter(ctx, {id: invoiceOut.id}, options);
- console.log(result);
expect(result.length).toEqual(1);
diff --git a/modules/invoiceOut/back/model-config.json b/modules/invoiceOut/back/model-config.json
index 04933c4f0..b190126ea 100644
--- a/modules/invoiceOut/back/model-config.json
+++ b/modules/invoiceOut/back/model-config.json
@@ -8,6 +8,9 @@
"InvoiceContainer": {
"dataSource": "invoiceStorage"
},
+ "Printer": {
+ "dataSource": "vn"
+ },
"TaxArea": {
"dataSource": "vn"
},
diff --git a/modules/invoiceOut/back/models/invoice-out.js b/modules/invoiceOut/back/models/invoice-out.js
index 88adae2ef..6205abe7b 100644
--- a/modules/invoiceOut/back/models/invoice-out.js
+++ b/modules/invoiceOut/back/models/invoice-out.js
@@ -15,4 +15,6 @@ module.exports = Self => {
require('../methods/invoiceOut/exportationPdf')(Self);
require('../methods/invoiceOut/invoiceCsv')(Self);
require('../methods/invoiceOut/invoiceCsvEmail')(Self);
+ require('../methods/invoiceOut/invoiceOutPdf')(Self);
+ require('../methods/invoiceOut/getInvoiceDate')(Self);
};
diff --git a/modules/invoiceOut/back/models/printer.json b/modules/invoiceOut/back/models/printer.json
new file mode 100644
index 000000000..99003560d
--- /dev/null
+++ b/modules/invoiceOut/back/models/printer.json
@@ -0,0 +1,28 @@
+{
+ "name": "Printer",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "printer"
+ }
+ },
+ "properties": {
+ "id": {
+ "type": "number",
+ "id": true,
+ "description": "Identifier"
+ },
+ "name": {
+ "type": "string"
+ },
+ "isLabeler": {
+ "type": "boolean"
+ }
+ },
+ "acls": [{
+ "accessType": "READ",
+ "principalType": "ROLE",
+ "principalId": "$everyone",
+ "permission": "ALLOW"
+ }]
+}
diff --git a/modules/invoiceOut/front/global-invoicing/index.html b/modules/invoiceOut/front/global-invoicing/index.html
new file mode 100644
index 000000000..ebe46b84a
--- /dev/null
+++ b/modules/invoiceOut/front/global-invoicing/index.html
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+ Build packaging tickets
+
+
+ {{'Invoicing client' | translate}} {{$ctrl.currentAddress.clientId}}
+
+
+ Stopping process
+
+
+ Ended process
+
+
+
+ {{$ctrl.percentage | percentage: 0}} ({{$ctrl.addressNumber}} {{'of' | translate}} {{$ctrl.nAddresses}})
+
+
+
+
+
+
+
+ Id
+ Client
+ Address id
+ Street
+ Error
+
+
+
+
+
+
+ {{::error.address.clientId}}
+
+
+
+ {{::error.address.clientName}}
+
+
+ {{::error.address.id}}
+
+
+ {{::error.address.nickname}}
+
+
+ {{::error.message}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/invoiceOut/front/global-invoicing/index.js b/modules/invoiceOut/front/global-invoicing/index.js
new file mode 100644
index 000000000..0ac0223b4
--- /dev/null
+++ b/modules/invoiceOut/front/global-invoicing/index.js
@@ -0,0 +1,133 @@
+import ngModule from '../module';
+import Section from 'salix/components/section';
+import UserError from 'core/lib/user-error';
+import './style.scss';
+
+class Controller extends Section {
+ $onInit() {
+ const date = Date.vnNew();
+ Object.assign(this, {
+ maxShipped: new Date(date.getFullYear(), date.getMonth(), 0),
+ clientsToInvoice: 'all',
+ });
+
+ this.$http.get('UserConfigs/getUserConfig')
+ .then(res => {
+ this.companyFk = res.data.companyFk;
+ const params = {
+ companyFk: this.companyFk
+ };
+ return this.$http.get('InvoiceOuts/getInvoiceDate', {params});
+ })
+ .then(res => {
+ this.minInvoicingDate = res.data.issued ? new Date(res.data.issued) : null;
+ this.invoiceDate = this.minInvoicingDate;
+ });
+ }
+
+ stopInvoicing() {
+ this.status = 'stopping';
+ }
+
+ makeInvoice() {
+ this.invoicing = true;
+ this.status = 'packageInvoicing';
+ this.errors = [];
+ this.addresses = null;
+
+ try {
+ if (this.clientsToInvoice == 'one' && !this.clientId)
+ throw new UserError('Choose a valid client');
+ if (!this.invoiceDate || !this.maxShipped)
+ throw new UserError('Invoice date and the max date should be filled');
+ if (this.invoiceDate < this.maxShipped)
+ throw new UserError('Invoice date can\'t be less than max date');
+ if (this.invoiceDate.getTime() < this.minInvoicingDate.getTime())
+ throw new UserError('Exists an invoice with a previous date');
+ if (!this.companyFk)
+ throw new UserError('Choose a valid company');
+ if (!this.printerFk)
+ throw new UserError('Choose a valid printer');
+
+ if (this.clientsToInvoice == 'all')
+ this.clientId = undefined;
+
+ const params = {
+ invoiceDate: this.invoiceDate,
+ maxShipped: this.maxShipped,
+ clientId: this.clientId,
+ companyFk: this.companyFk
+ };
+ this.$http.post(`InvoiceOuts/clientsToInvoice`, params)
+ .then(res => {
+ this.addresses = res.data;
+ if (!this.addresses.length)
+ throw new UserError(`There aren't tickets to invoice`);
+
+ this.addressIndex = 0;
+ return this.invoiceOut();
+ })
+ .catch(err => this.handleError(err));
+ } catch (err) {
+ this.handleError(err);
+ }
+ }
+
+ handleError(err) {
+ this.invoicing = false;
+ this.status = null;
+ throw err;
+ }
+
+ invoiceOut() {
+ if (this.addressIndex == this.addresses.length || this.status == 'stopping') {
+ this.invoicing = false;
+ this.status = 'done';
+ return;
+ }
+
+ this.status = 'invoicing';
+ const address = this.addresses[this.addressIndex];
+ this.currentAddress = address;
+
+ const params = {
+ clientId: address.clientId,
+ addressId: address.id,
+ invoiceDate: this.invoiceDate,
+ maxShipped: this.maxShipped,
+ companyFk: this.companyFk,
+ printerFk: this.printerFk,
+ };
+
+ this.$http.post(`InvoiceOuts/invoiceClient`, params)
+ .catch(res => {
+ this.errors.unshift({
+ address,
+ message: res.data.error.message
+ });
+ })
+ .finally(() => {
+ this.addressIndex++;
+ this.invoiceOut();
+ });
+ }
+
+ get nAddresses() {
+ if (!this.addresses) return 0;
+ return this.addresses.length;
+ }
+
+ get addressNumber() {
+ return Math.min(this.addressIndex + 1, this.nAddresses);
+ }
+
+ get percentage() {
+ const len = this.nAddresses;
+ return Math.min(this.addressIndex, len) / len;
+ }
+}
+
+ngModule.vnComponent('vnInvoiceOutGlobalInvoicing', {
+ template: require('./index.html'),
+ controller: Controller
+});
diff --git a/modules/invoiceOut/front/global-invoicing/index.spec.js b/modules/invoiceOut/front/global-invoicing/index.spec.js
new file mode 100644
index 000000000..056839b20
--- /dev/null
+++ b/modules/invoiceOut/front/global-invoicing/index.spec.js
@@ -0,0 +1,74 @@
+import './index';
+
+describe('InvoiceOut', () => {
+ describe('Component vnInvoiceOutGlobalInvoicing', () => {
+ let controller;
+ let $httpBackend;
+
+ beforeEach(ngModule('invoiceOut'));
+
+ beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
+ $httpBackend = _$httpBackend_;
+ const $scope = $rootScope.$new();
+ const $element = angular.element('');
+
+ controller = $componentController('vnInvoiceOutGlobalInvoicing', {$element, $scope});
+ }));
+
+ describe('makeInvoice()', () => {
+ it('should throw an error when invoiceDate or maxShipped properties are not filled in', () => {
+ jest.spyOn(controller.vnApp, 'showError');
+ controller.clientsToInvoice = 'all';
+
+ let error;
+ try {
+ controller.makeInvoice();
+ } catch (e) {
+ error = e.message;
+ }
+
+ const expectedError = 'Invoice date and the max date should be filled';
+
+ expect(error).toBe(expectedError);
+ });
+
+ it('should throw an error when select one client and clientId is not filled in', () => {
+ jest.spyOn(controller.vnApp, 'showError');
+ controller.clientsToInvoice = 'one';
+
+ let error;
+ try {
+ controller.makeInvoice();
+ } catch (e) {
+ error = e.message;
+ }
+
+ const expectedError = 'Choose a valid client';
+
+ expect(error).toBe(expectedError);
+ });
+
+ it('should make an http POST query and then call to the showSuccess() method', () => {
+ const date = Date.vnNew();
+ Object.assign(controller, {
+ invoiceDate: date,
+ maxShipped: date,
+ minInvoicingDate: date,
+ clientsToInvoice: 'one',
+ clientId: 1101,
+ companyFk: 442,
+ printerFk: 1
+ });
+ $httpBackend.expectPOST(`InvoiceOuts/clientsToInvoice`).respond([{
+ clientId: 1101,
+ id: 121
+ }]);
+ $httpBackend.expectPOST(`InvoiceOuts/invoiceClient`).respond();
+ controller.makeInvoice();
+ $httpBackend.flush();
+
+ expect(controller.status).toEqual('done');
+ });
+ });
+ });
+});
diff --git a/modules/invoiceOut/front/global-invoicing/locale/es.yml b/modules/invoiceOut/front/global-invoicing/locale/es.yml
new file mode 100644
index 000000000..242b5a93f
--- /dev/null
+++ b/modules/invoiceOut/front/global-invoicing/locale/es.yml
@@ -0,0 +1,20 @@
+There aren't tickets to invoice: No existen tickets para facturar
+Max date: Fecha límite
+Invoice date: Fecha de factura
+Invoice date can't be less than max date: La fecha de factura no puede ser inferior a la fecha límite
+Invoice date and the max date should be filled: La fecha de factura y la fecha límite deben rellenarse
+Choose a valid company: Selecciona un empresa válida
+Choose a valid printer: Selecciona una impresora válida
+All clients: Todos los clientes
+Build packaging tickets: Generando tickets de embalajes
+Address id: Id dirección
+Printer: Impresora
+of: de
+Client: Cliente
+Current client id: Id cliente actual
+Invoicing client: Facturando cliente
+Ended process: Proceso finalizado
+Invoice out: Facturar
+One client: Un solo cliente
+Choose a valid client: Selecciona un cliente válido
+Stop: Parar
\ No newline at end of file
diff --git a/modules/invoiceOut/front/global-invoicing/style.scss b/modules/invoiceOut/front/global-invoicing/style.scss
new file mode 100644
index 000000000..6fdfac0ba
--- /dev/null
+++ b/modules/invoiceOut/front/global-invoicing/style.scss
@@ -0,0 +1,17 @@
+@import "variables";
+
+vn-invoice-out-global-invoicing{
+
+ h5{
+ color: $color-primary;
+ }
+
+ #error {
+ line-break: normal;
+ overflow-wrap: break-word;
+ white-space: normal;
+ }
+
+}
+
+
diff --git a/modules/invoiceOut/front/index.js b/modules/invoiceOut/front/index.js
index 0307b2b4b..f7cebc0d0 100644
--- a/modules/invoiceOut/front/index.js
+++ b/modules/invoiceOut/front/index.js
@@ -9,4 +9,4 @@ import './descriptor';
import './descriptor-popover';
import './descriptor-menu';
import './index/manual';
-import './index/global-invoicing';
+import './global-invoicing';
diff --git a/modules/invoiceOut/front/index/global-invoicing/index.html b/modules/invoiceOut/front/index/global-invoicing/index.html
deleted file mode 100644
index c2d1c4304..000000000
--- a/modules/invoiceOut/front/index/global-invoicing/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
- Create global invoice
-
-
-
-
-
-
-
-
-
- {{'Calculating packages to invoice...' | translate}}
-
-
-
-
-
-
- {{'Id Client' | translate}}: {{$ctrl.currentClientId}}
- {{'of' | translate}} {{::$ctrl.lastClientId}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::id}} - {{::name}}
-
-
- {{::id}} - {{::name}}
-
-
-
-
-
-
-
-
-
- {{$ctrl.isInvoicing}}
-
\ No newline at end of file
diff --git a/modules/invoiceOut/front/index/global-invoicing/index.js b/modules/invoiceOut/front/index/global-invoicing/index.js
deleted file mode 100644
index 0c5773adc..000000000
--- a/modules/invoiceOut/front/index/global-invoicing/index.js
+++ /dev/null
@@ -1,129 +0,0 @@
-import ngModule from '../../module';
-import Dialog from 'core/components/dialog';
-import './style.scss';
-
-class Controller extends Dialog {
- constructor($element, $, $transclude) {
- super($element, $, $transclude);
- this.invoice = {
- maxShipped: Date.vnNew()
- };
- this.clientsNumber = 'allClients';
- }
-
- $onInit() {
- this.getMinClientId();
- this.getMaxClientId();
- }
-
- getMinClientId() {
- this.getClientId('min')
- .then(res => this.invoice.fromClientId = res.data.id);
- }
-
- getMaxClientId() {
- this.getClientId('max')
- .then(res => this.invoice.toClientId = res.data.id);
- }
-
- getClientId(func) {
- const order = func == 'min' ? 'ASC' : 'DESC';
- const params = {
- filter: {
- order: 'id ' + order,
- limit: 1
- }
- };
- return this.$http.get('Clients/findOne', {params});
- }
-
- get companyFk() {
- return this.invoice.companyFk;
- }
-
- set companyFk(value) {
- this.invoice.companyFk = value;
- }
-
- restartValues() {
- this.lastClientId = null;
- this.$.invoiceButton.disabled = false;
- }
-
- cancelRequest() {
- this.canceler = this.$q.defer();
- return {timeout: this.canceler.promise};
- }
-
- invoiceOut(invoice, clientsAndAddresses) {
- const [clientAndAddress] = clientsAndAddresses;
- if (!clientAndAddress) return;
- this.currentClientId = clientAndAddress.clientId;
- const params = {
- clientId: clientAndAddress.clientId,
- addressId: clientAndAddress.addressId,
- invoiceDate: invoice.invoiceDate,
- maxShipped: invoice.maxShipped,
- companyFk: invoice.companyFk,
- minShipped: invoice.minShipped,
-
- };
-
- const options = this.cancelRequest();
-
- return this.$http.post(`InvoiceOuts/invoiceClient`, params, options)
- .then(() => {
- clientsAndAddresses.shift();
- return this.invoiceOut(invoice, clientsAndAddresses);
- });
- }
-
- responseHandler(response) {
- try {
- if (response !== 'accept')
- return super.responseHandler(response);
-
- if (!this.invoice.invoiceDate || !this.invoice.maxShipped)
- throw new Error('Invoice date and the max date should be filled');
-
- if (!this.invoice.fromClientId || !this.invoice.toClientId)
- throw new Error('Choose a valid clients range');
-
- this.on('close', () => {
- if (this.canceler) this.canceler.resolve();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
-
- this.$.invoiceButton.disabled = true;
- this.packageInvoicing = true;
- const options = this.cancelRequest();
-
- this.$http.post(`InvoiceOuts/clientsToInvoice`, this.invoice, options)
- .then(res => {
- this.packageInvoicing = false;
- const invoice = res.data.invoice;
- const clientsAndAddresses = res.data.clientsAndAddresses;
- if (!clientsAndAddresses.length) return super.responseHandler(response);
- this.lastClientId = clientsAndAddresses[clientsAndAddresses.length - 1].clientId;
- return this.invoiceOut(invoice, clientsAndAddresses);
- })
- .then(() => super.responseHandler(response))
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')))
- .finally(() => this.restartValues());
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- this.restartValues();
- return false;
- }
- }
-}
-
-Controller.$inject = ['$element', '$scope', '$transclude'];
-
-ngModule.vnComponent('vnInvoiceOutGlobalInvoicing', {
- slotTemplate: require('./index.html'),
- controller: Controller,
- bindings: {
- companyFk: ''
- }
-});
diff --git a/modules/invoiceOut/front/index/global-invoicing/index.spec.js b/modules/invoiceOut/front/index/global-invoicing/index.spec.js
deleted file mode 100644
index aa9674b0e..000000000
--- a/modules/invoiceOut/front/index/global-invoicing/index.spec.js
+++ /dev/null
@@ -1,118 +0,0 @@
-import './index';
-
-describe('InvoiceOut', () => {
- describe('Component vnInvoiceOutGlobalInvoicing', () => {
- let controller;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('invoiceOut'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- let $scope = $rootScope.$new();
- const $element = angular.element('');
- const $transclude = {
- $$boundTransclude: {
- $$slots: []
- }
- };
- controller = $componentController('vnInvoiceOutGlobalInvoicing', {$element, $scope, $transclude});
- controller.$.invoiceButton = {disabled: false};
- }));
-
- describe('getMinClientId()', () => {
- it('should set the invoice fromClientId property', () => {
- const filter = {
- order: 'id ASC',
- limit: 1
- };
-
- const serializedParams = $httpParamSerializer({filter});
- $httpBackend.expectGET(`Clients/findOne?${serializedParams}`).respond(200, {id: 1101});
-
- controller.getMinClientId();
- $httpBackend.flush();
-
- expect(controller.invoice.fromClientId).toEqual(1101);
- });
- });
-
- describe('getMaxClientId()', () => {
- it('should set the invoice toClientId property', () => {
- const filter = {
- order: 'id DESC',
- limit: 1
- };
-
- const serializedParams = $httpParamSerializer({filter});
- $httpBackend.expectGET(`Clients/findOne?${serializedParams}`).respond(200, {id: 1112});
-
- controller.getMaxClientId();
- $httpBackend.flush();
-
- expect(controller.invoice.toClientId).toEqual(1112);
- });
- });
-
- describe('responseHandler()', () => {
- it('should throw an error when invoiceDate or maxShipped properties are not filled in', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.invoice = {
- fromClientId: 1101,
- toClientId: 1101
- };
-
- controller.responseHandler('accept');
-
- const expectedError = 'Invoice date and the max date should be filled';
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(expectedError);
- });
-
- it('should throw an error when fromClientId or toClientId properties are not filled in', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.invoice = {
- invoiceDate: Date.vnNew(),
- maxShipped: Date.vnNew()
- };
-
- controller.responseHandler('accept');
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`Choose a valid clients range`);
- });
-
- it('should make an http POST query and then call to the showSuccess() method', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const minShipped = Date.vnNew();
- minShipped.setFullYear(minShipped.getFullYear() - 1);
- minShipped.setMonth(1);
- minShipped.setDate(1);
- minShipped.setHours(0, 0, 0, 0);
- controller.invoice = {
- invoiceDate: Date.vnNew(),
- maxShipped: Date.vnNew(),
- fromClientId: 1101,
- toClientId: 1101,
- companyFk: 442,
- minShipped: minShipped
- };
- const response = {
- clientsAndAddresses: [{clientId: 1101, addressId: 121}],
- invoice: controller.invoice
- };
-
- $httpBackend.expect('POST', `InvoiceOuts/clientsToInvoice`).respond(response);
- $httpBackend.expect('POST', `InvoiceOuts/invoiceClient`).respond({id: 1});
- controller.responseHandler('accept');
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/invoiceOut/front/index/global-invoicing/locale/es.yml b/modules/invoiceOut/front/index/global-invoicing/locale/es.yml
deleted file mode 100644
index af151684f..000000000
--- a/modules/invoiceOut/front/index/global-invoicing/locale/es.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-Create global invoice: Crear factura global
-Some fields are required: Algunos campos son obligatorios
-Max date: Fecha límite
-Adding invoices to queue...: Añadiendo facturas a la cola...
-Invoice date: Fecha de factura
-From client: Desde el cliente
-To client: Hasta el cliente
-Invoice date and the max date should be filled: La fecha de factura y la fecha límite deben rellenarse
-Choose a valid clients range: Selecciona un rango válido de clientes
-of: de
-Id Client: Id Cliente
-All clients: Todos los clientes
-Clients range: Rango de clientes
-Calculating packages to invoice...: Calculando paquetes a factura...
\ No newline at end of file
diff --git a/modules/invoiceOut/front/index/global-invoicing/style.scss b/modules/invoiceOut/front/index/global-invoicing/style.scss
deleted file mode 100644
index d0bd9e214..000000000
--- a/modules/invoiceOut/front/index/global-invoicing/style.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@import "variables";
-
-.vn-invoice-out-global-invoicing {
- tpl-body {
- width: 500px;
-
- .progress {
- font-weight: bold;
- text-align: center;
- font-size: 1.5rem;
- color: $color-primary;
- vn-horizontal {
- justify-content: center
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/invoiceOut/front/index/index.html b/modules/invoiceOut/front/index/index.html
index e2cf2120a..dc4d5d8a9 100644
--- a/modules/invoiceOut/front/index/index.html
+++ b/modules/invoiceOut/front/index/index.html
@@ -18,7 +18,7 @@
-
@@ -37,7 +37,7 @@
class="clickable vn-tr search-result"
ui-sref="invoiceOut.card.summary({id: {{::invoiceOut.id}}})">
-
@@ -68,29 +68,13 @@
-
-
-
-
-
-
- Manual invoicing
-
-
- Global invoicing
-
-
-
+
+
-
-
\ No newline at end of file
diff --git a/modules/invoiceOut/front/index/manual/index.html b/modules/invoiceOut/front/index/manual/index.html
index 3148d3f94..37e6fa119 100644
--- a/modules/invoiceOut/front/index/manual/index.html
+++ b/modules/invoiceOut/front/index/manual/index.html
@@ -14,11 +14,11 @@
data="taxAreas"
order="code">
-
-
+
Invoicing in progress...
@@ -80,4 +80,4 @@
-
\ No newline at end of file
+
diff --git a/modules/invoiceOut/front/index/manual/style.scss b/modules/invoiceOut/front/index/manual/style.scss
index 18e6f3513..820c07756 100644
--- a/modules/invoiceOut/front/index/manual/style.scss
+++ b/modules/invoiceOut/front/index/manual/style.scss
@@ -14,4 +14,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/invoiceOut/front/routes.json b/modules/invoiceOut/front/routes.json
index 09d9f3d33..c396a5334 100644
--- a/modules/invoiceOut/front/routes.json
+++ b/modules/invoiceOut/front/routes.json
@@ -6,7 +6,9 @@
"dependencies": ["worker", "client", "ticket"],
"menus": {
"main": [
- {"state": "invoiceOut.index", "icon": "icon-invoice-out"}
+ {"state": "invoiceOut.index", "icon": "icon-invoice-out"},
+ {"state": "invoiceOut.global-invoicing", "icon": "contact_support"}
+
]
},
"routes": [
@@ -24,6 +26,12 @@
"component": "vn-invoice-out-index",
"description": "InvoiceOut"
},
+ {
+ "url": "/global-invoicing?q",
+ "state": "invoiceOut.global-invoicing",
+ "component": "vn-invoice-out-global-invoicing",
+ "description": "Global invoicing"
+ },
{
"url": "/summary",
"state": "invoiceOut.card.summary",
@@ -40,4 +48,4 @@
"component": "vn-invoice-out-card"
}
]
-}
\ No newline at end of file
+}
diff --git a/modules/item/back/methods/item-image-queue/download.js b/modules/item/back/methods/item-image-queue/download.js
new file mode 100644
index 000000000..cdc0fe049
--- /dev/null
+++ b/modules/item/back/methods/item-image-queue/download.js
@@ -0,0 +1,191 @@
+const axios = require('axios');
+const uuid = require('uuid');
+const fs = require('fs/promises');
+const { createWriteStream } = require('fs');
+const path = require('path');
+const gm = require('gm');
+
+module.exports = Self => {
+ Self.remoteMethod('download', {
+ description: 'Processes the image download queue',
+ accessType: 'WRITE',
+ http: {
+ path: `/download`,
+ verb: 'POST',
+ },
+ });
+
+ Self.download = async () => {
+ const models = Self.app.models;
+ const tempContainer = await models.TempContainer.container(
+ 'salix-image'
+ );
+ const tempPath = path.join(
+ tempContainer.client.root,
+ tempContainer.name
+ );
+ const maxAttempts = 3;
+ const collectionName = 'catalog';
+
+ const tx = await Self.beginTransaction({});
+
+ let tempFilePath;
+ let queueRow;
+ try {
+ const myOptions = { transaction: tx };
+
+ queueRow = await Self.findOne(
+ {
+ fields: ['id', 'itemFk', 'url', 'attempts'],
+ where: {
+ url: { neq: null },
+ attempts: {
+ lt: maxAttempts,
+ },
+ },
+ order: 'priority, attempts, updated',
+ },
+ myOptions
+ );
+
+ if (!queueRow) return;
+
+ const collection = await models.ImageCollection.findOne(
+ {
+ fields: [
+ 'id',
+ 'maxWidth',
+ 'maxHeight',
+ 'model',
+ 'property',
+ ],
+ where: { name: collectionName },
+ include: {
+ relation: 'sizes',
+ scope: {
+ fields: ['width', 'height', 'crop'],
+ },
+ },
+ },
+ myOptions
+ );
+
+ const fileName = `${uuid.v4()}.png`;
+ tempFilePath = path.join(tempPath, fileName);
+
+ // Insert image row
+ await models.Image.create(
+ {
+ name: fileName,
+ collectionFk: collectionName,
+ updated: Date.vnNow(),
+ },
+ myOptions
+ );
+
+ // Update item
+ const model = models[collection.model];
+ if (!model) throw new Error('No matching model found');
+
+ const item = await model.findById(queueRow.itemFk, null, myOptions);
+ if (item) {
+ await item.updateAttribute(
+ collection.property,
+ fileName,
+ myOptions
+ );
+ }
+
+ // Download remote image
+ const response = await axios.get(queueRow.url, {
+ responseType: 'stream',
+ });
+
+ const writeStream = createWriteStream(tempFilePath);
+ await new Promise((resolve, reject) => {
+ writeStream.on('open', () => response.data.pipe(writeStream));
+ writeStream.on('finish', () => resolve());
+ writeStream.on('error', error => reject(error));
+ });
+
+ // Resize
+ const container = await models.ImageContainer.container(
+ collectionName
+ );
+ const rootPath = container.client.root;
+ const collectionDir = path.join(rootPath, collectionName);
+
+ // To max size
+ const { maxWidth, maxHeight } = collection;
+ const fullSizePath = path.join(collectionDir, 'full');
+ const toFullSizePath = `${fullSizePath}/${fileName}`;
+
+ await fs.mkdir(fullSizePath, { recursive: true });
+ await new Promise((resolve, reject) => {
+ gm(tempFilePath)
+ .resize(maxWidth, maxHeight, '>')
+ .setFormat('png')
+ .write(toFullSizePath, function (err) {
+ if (err) reject(err);
+ if (!err) resolve();
+ });
+ });
+
+ // To collection sizes
+ for (const size of collection.sizes()) {
+ const { width, height } = size;
+
+ const sizePath = path.join(collectionDir, `${width}x${height}`);
+ const toSizePath = `${sizePath}/${fileName}`;
+
+ await fs.mkdir(sizePath, { recursive: true });
+ await new Promise((resolve, reject) => {
+ const gmInstance = gm(tempFilePath);
+
+ if (size.crop) {
+ gmInstance
+ .resize(width, height, '^')
+ .gravity('Center')
+ .crop(width, height);
+ }
+
+ if (!size.crop) gmInstance.resize(width, height, '>');
+
+ gmInstance
+ .setFormat('png')
+ .write(toSizePath, function (err) {
+ if (err) reject(err);
+ if (!err) resolve();
+ });
+ });
+ }
+
+ try {
+ await fs.unlink(tempFilePath);
+ } catch (error) { }
+
+ await queueRow.destroy(myOptions);
+
+ // Restart queue
+ Self.download();
+
+ await tx.commit();
+ } catch (error) {
+ await tx.rollback();
+
+ if (queueRow.attempts < maxAttempts) {
+ await queueRow.updateAttributes({
+ error: error,
+ attempts: queueRow.attempts + 1,
+ updated: Date.vnNew(),
+ });
+ }
+
+ try {
+ await fs.unlink(tempFilePath);
+ } catch (error) { }
+
+ Self.download();
+ }
+ };
+};
diff --git a/modules/item/back/methods/item-image-queue/downloadImages.js b/modules/item/back/methods/item-image-queue/downloadImages.js
index c4d7f4b98..7f53df95a 100644
--- a/modules/item/back/methods/item-image-queue/downloadImages.js
+++ b/modules/item/back/methods/item-image-queue/downloadImages.js
@@ -62,7 +62,7 @@ module.exports = Self => {
writeStream.on('open', () => response.pipe(writeStream));
writeStream.on('error', async error =>
await errorHandler(image.itemFk, error, filePath));
- writeStream.on('finish', writeStream.end());
+ writeStream.on('finish', () => writeStream.end());
writeStream.on('close', async function() {
try {
diff --git a/modules/item/back/methods/item/labelPdf.js b/modules/item/back/methods/item/labelPdf.js
index 747869b37..c2462353d 100644
--- a/modules/item/back/methods/item/labelPdf.js
+++ b/modules/item/back/methods/item/labelPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('labelPdf', {
description: 'Returns the item label pdf',
@@ -56,17 +54,5 @@ module.exports = Self => {
}
});
- Self.labelPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('item-label', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="item-${id}.pdf"`];
- };
+ Self.labelPdf = (ctx, id) => Self.printReport(ctx, id, 'item-label');
};
diff --git a/modules/item/back/models/item-image-queue.js b/modules/item/back/models/item-image-queue.js
index e2059ddac..35a467693 100644
--- a/modules/item/back/models/item-image-queue.js
+++ b/modules/item/back/models/item-image-queue.js
@@ -1,3 +1,3 @@
module.exports = Self => {
- require('../methods/item-image-queue/downloadImages')(Self);
+ require('../methods/item-image-queue/download')(Self);
};
diff --git a/modules/route/back/methods/route/driverRouteEmail.js b/modules/route/back/methods/route/driverRouteEmail.js
index 4d5279d2d..82b005e44 100644
--- a/modules/route/back/methods/route/driverRouteEmail.js
+++ b/modules/route/back/methods/route/driverRouteEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('driverRouteEmail', {
description: 'Sends the driver route email with an attached PDF',
@@ -41,19 +39,5 @@ module.exports = Self => {
}
});
- Self.driverRouteEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('driver-route', params);
-
- return email.send();
- };
+ Self.driverRouteEmail = ctx => Self.sendTemplate(ctx, 'driver-route');
};
diff --git a/modules/route/back/methods/route/driverRoutePdf.js b/modules/route/back/methods/route/driverRoutePdf.js
index 65748afad..f0cd75f0e 100644
--- a/modules/route/back/methods/route/driverRoutePdf.js
+++ b/modules/route/back/methods/route/driverRoutePdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('driverRoutePdf', {
description: 'Returns the driver route pdf',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.driverRoutePdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('driver-route', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.driverRoutePdf = (ctx, id) => Self.printReport(ctx, id, 'driver-route');
};
diff --git a/modules/supplier/back/methods/supplier/campaignMetricsPdf.js b/modules/supplier/back/methods/supplier/campaignMetricsPdf.js
index 7bd65ffcb..f7ff900e7 100644
--- a/modules/supplier/back/methods/supplier/campaignMetricsPdf.js
+++ b/modules/supplier/back/methods/supplier/campaignMetricsPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('campaignMetricsPdf', {
description: 'Returns the campaign metrics pdf',
@@ -49,17 +47,5 @@ module.exports = Self => {
}
});
- Self.campaignMetricsPdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('supplier-campaign-metrics', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.campaignMetricsPdf = (ctx, id) => Self.printReport(ctx, id, 'supplier-campaign-metrics');
};
diff --git a/modules/ticket/back/methods/ticket/collectionLabel.js b/modules/ticket/back/methods/ticket/collectionLabel.js
index 7601961fb..74b5b2c0a 100644
--- a/modules/ticket/back/methods/ticket/collectionLabel.js
+++ b/modules/ticket/back/methods/ticket/collectionLabel.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('collectionLabel', {
description: 'Returns the collection label',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.collectionLabel = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('collection-label', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.collectionLabel = (ctx, id) => Self.printReport(ctx, id, 'collection-label');
};
diff --git a/modules/ticket/back/methods/ticket/componentUpdate.js b/modules/ticket/back/methods/ticket/componentUpdate.js
index 94b91e237..c23d1669e 100644
--- a/modules/ticket/back/methods/ticket/componentUpdate.js
+++ b/modules/ticket/back/methods/ticket/componentUpdate.js
@@ -165,18 +165,29 @@ module.exports = Self => {
'shipped',
'landed',
'isDeleted',
- 'routeFk'
+ 'routeFk',
+ 'nickname'
],
include: [
{
relation: 'client',
scope: {
fields: 'salesPersonFk'
- }
- }]
+ },
+ include: [
+ {
+ relation: 'address',
+ scope: {
+ fields: 'nickname'
+ }
+ }
+ ]
+ },
+ ]
}, myOptions);
args.routeFk = null;
+ if (args.isWithoutNegatives === false) delete args.isWithoutNegatives;
const updatedTicket = Object.assign({}, args);
delete updatedTicket.ctx;
delete updatedTicket.option;
@@ -224,37 +235,41 @@ module.exports = Self => {
}
const changes = loggable.getChanges(originalTicket, updatedTicket);
- const oldProperties = await loggable.translateValues(Self, changes.old);
- const newProperties = await loggable.translateValues(Self, changes.new);
+ const hasChanges = Object.keys(changes.old).length > 0 || Object.keys(changes.new).length > 0;
- await models.TicketLog.create({
- originFk: args.id,
- userFk: userId,
- action: 'update',
- changedModel: 'Ticket',
- changedModelId: args.id,
- oldInstance: oldProperties,
- newInstance: newProperties
- }, myOptions);
+ if (hasChanges) {
+ const oldProperties = await loggable.translateValues(Self, changes.old);
+ const newProperties = await loggable.translateValues(Self, changes.new);
- const salesPersonId = originalTicket.client().salesPersonFk;
- if (salesPersonId) {
- const origin = ctx.req.headers.origin;
+ await models.TicketLog.create({
+ originFk: args.id,
+ userFk: userId,
+ action: 'update',
+ changedModel: 'Ticket',
+ changedModelId: args.id,
+ oldInstance: oldProperties,
+ newInstance: newProperties
+ }, myOptions);
- let changesMade = '';
- for (let change in newProperties) {
- let value = newProperties[change];
- let oldValue = oldProperties[change];
+ const salesPersonId = originalTicket.client().salesPersonFk;
+ if (salesPersonId) {
+ const origin = ctx.req.headers.origin;
- changesMade += `\r\n~${$t(change)}: ${oldValue}~ ➔ *${$t(change)}: ${value}*`;
+ let changesMade = '';
+ for (let change in newProperties) {
+ let value = newProperties[change];
+ let oldValue = oldProperties[change];
+
+ changesMade += `\r\n~${$t(change)}: ${oldValue}~ ➔ *${$t(change)}: ${value}*`;
+ }
+
+ const message = $t('Changed this data from the ticket', {
+ ticketId: args.id,
+ ticketUrl: `${origin}/#!/ticket/${args.id}/sale`,
+ changes: changesMade
+ });
+ await models.Chat.sendCheckingPresence(ctx, salesPersonId, message);
}
-
- const message = $t('Changed this data from the ticket', {
- ticketId: args.id,
- ticketUrl: `${origin}/#!/ticket/${args.id}/sale`,
- changes: changesMade
- });
- await models.Chat.sendCheckingPresence(ctx, salesPersonId, message);
}
res.id = args.id;
diff --git a/modules/ticket/back/methods/ticket/deliveryNoteEmail.js b/modules/ticket/back/methods/ticket/deliveryNoteEmail.js
index cf9f5dd62..4b275b45e 100644
--- a/modules/ticket/back/methods/ticket/deliveryNoteEmail.js
+++ b/modules/ticket/back/methods/ticket/deliveryNoteEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('deliveryNoteEmail', {
description: 'Sends the delivery note email with an attached PDF',
@@ -47,19 +45,5 @@ module.exports = Self => {
}
});
- Self.deliveryNoteEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('delivery-note', params);
-
- return email.send();
- };
+ Self.deliveryNoteEmail = ctx => Self.sendTemplate(ctx, 'delivery-note');
};
diff --git a/modules/ticket/back/methods/ticket/deliveryNotePdf.js b/modules/ticket/back/methods/ticket/deliveryNotePdf.js
index b2b3f7198..628e16bcd 100644
--- a/modules/ticket/back/methods/ticket/deliveryNotePdf.js
+++ b/modules/ticket/back/methods/ticket/deliveryNotePdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('deliveryNotePdf', {
description: 'Returns the delivery note pdf',
@@ -46,17 +44,5 @@ module.exports = Self => {
}
});
- Self.deliveryNotePdf = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('delivery-note', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.deliveryNotePdf = (ctx, id) => Self.printReport(ctx, id, 'delivery-note');
};
diff --git a/modules/ticket/back/methods/ticket/expeditionPalletLabel.js b/modules/ticket/back/methods/ticket/expeditionPalletLabel.js
index 2215263dd..9830364d6 100644
--- a/modules/ticket/back/methods/ticket/expeditionPalletLabel.js
+++ b/modules/ticket/back/methods/ticket/expeditionPalletLabel.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('expeditionPalletLabel', {
description: 'Returns the expedition pallet label',
@@ -39,17 +37,5 @@ module.exports = Self => {
}
});
- Self.expeditionPalletLabel = async(ctx, id) => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('expedition-pallet-label', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
- };
+ Self.expeditionPalletLabel = (ctx, id) => Self.printReport(ctx, id, 'expedition-pallet-label');
};
diff --git a/modules/ticket/back/methods/ticket/specs/merge.spec.js b/modules/ticket/back/methods/ticket/specs/merge.spec.js
index 6b533e47c..78eb0c8f3 100644
--- a/modules/ticket/back/methods/ticket/specs/merge.spec.js
+++ b/modules/ticket/back/methods/ticket/specs/merge.spec.js
@@ -2,13 +2,13 @@ const models = require('vn-loopback/server/server').models;
const LoopBackContext = require('loopback-context');
describe('ticket merge()', () => {
- const tickets = [{
+ const tickets = {
originId: 13,
destinationId: 12,
originShipped: Date.vnNew(),
destinationShipped: Date.vnNew(),
workerFk: 1
- }];
+ };
const activeCtx = {
accessToken: {userId: 9},
@@ -37,14 +37,14 @@ describe('ticket merge()', () => {
const options = {transaction: tx};
const chatNotificationBeforeMerge = await models.Chat.find();
- await models.Ticket.merge(ctx, tickets, options);
+ await models.Ticket.merge(ctx, [tickets], options);
- const createdTicketLog = await models.TicketLog.find({where: {originFk: tickets[0].originId}}, options);
- const deletedTicket = await models.Ticket.findOne({where: {id: tickets[0].originId}}, options);
- const salesTicketFuture = await models.Sale.find({where: {ticketFk: tickets[0].destinationId}}, options);
+ const createdTicketLog = await models.TicketLog.find({where: {originFk: tickets.originId}}, options);
+ const deletedTicket = await models.Ticket.findOne({where: {id: tickets.originId}}, options);
+ const salesTicketFuture = await models.Sale.find({where: {ticketFk: tickets.destinationId}}, options);
const chatNotificationAfterMerge = await models.Chat.find();
- expect(createdTicketLog.length).toEqual(1);
+ expect(createdTicketLog.length).toEqual(2);
expect(deletedTicket.isDeleted).toEqual(true);
expect(salesTicketFuture.length).toEqual(2);
expect(chatNotificationBeforeMerge.length).toEqual(chatNotificationAfterMerge.length - 2);
diff --git a/modules/ticket/back/methods/ticket/transferSales.js b/modules/ticket/back/methods/ticket/transferSales.js
index 57f620f3d..48035648c 100644
--- a/modules/ticket/back/methods/ticket/transferSales.js
+++ b/modules/ticket/back/methods/ticket/transferSales.js
@@ -105,8 +105,8 @@ module.exports = Self => {
originFk: id,
userFk: userId,
action: 'update',
- changedModel: 'Ticket',
- changedModelId: id,
+ changedModel: 'Sale',
+ changedModelId: sale.id,
oldInstance: {
item: originalSaleData.itemFk,
quantity: originalSaleData.quantity,
@@ -126,8 +126,8 @@ module.exports = Self => {
originFk: ticketId,
userFk: userId,
action: 'update',
- changedModel: 'Ticket',
- changedModelId: ticketId,
+ changedModel: 'Sale',
+ changedModelId: sale.id,
oldInstance: {
item: originalSaleData.itemFk,
quantity: originalSaleData.quantity,
@@ -177,16 +177,16 @@ module.exports = Self => {
// Update original sale
const rest = originalSale.quantity - sale.quantity;
- query = `UPDATE sale
+ query = `UPDATE sale
SET quantity = ?
WHERE id = ?`;
await Self.rawSql(query, [rest, sale.id], options);
// Clone sale with new quantity
- query = `INSERT INTO sale (itemFk, ticketFk, concept, quantity, originalQuantity, price, discount, priceFixed,
+ query = `INSERT INTO sale (itemFk, ticketFk, concept, quantity, originalQuantity, price, discount, priceFixed,
reserved, isPicked, isPriceFixed, isAdded)
- SELECT itemFk, ?, concept, ?, originalQuantity, price, discount, priceFixed,
- reserved, isPicked, isPriceFixed, isAdded
+ SELECT itemFk, ?, concept, ?, originalQuantity, price, discount, priceFixed,
+ reserved, isPicked, isPriceFixed, isAdded
FROM sale
WHERE id = ?`;
await Self.rawSql(query, [ticketId, sale.quantity, sale.id], options);
diff --git a/modules/ticket/front/sale-tracking/index.html b/modules/ticket/front/sale-tracking/index.html
index 33d22f92e..0309dde13 100644
--- a/modules/ticket/front/sale-tracking/index.html
+++ b/modules/ticket/front/sale-tracking/index.html
@@ -29,7 +29,7 @@
'pink': sale.preparingList.hasSaleGroupDetail,
'none': !sale.preparingList.hasSaleGroupDetail,
}"
- class="circle"
+ class="circleState"
vn-tooltip="has saleGroupDetail"
>
@@ -37,28 +37,28 @@
'notice': sale.preparingList.isPreviousSelected,
'none': !sale.preparingList.isPreviousSelected,
}"
- class="circle"
+ class="circleState"
vn-tooltip="is previousSelected">
diff --git a/modules/ticket/front/sale-tracking/style.scss b/modules/ticket/front/sale-tracking/style.scss
index 1cc2f1b8c..78a0bda1d 100644
--- a/modules/ticket/front/sale-tracking/style.scss
+++ b/modules/ticket/front/sale-tracking/style.scss
@@ -1,6 +1,15 @@
@import "variables";
-.circle {
+vn-sale-tracking {
+ .chip {
+ display: inline-block;
+ min-width: 15px;
+ min-height: 25px;
+ }
+
+}
+
+.circleState {
display: inline-block;
justify-content: center;
align-items: center;
diff --git a/modules/travel/back/methods/travel/extraCommunityEmail.js b/modules/travel/back/methods/travel/extraCommunityEmail.js
index dd93ed905..f4b09b79d 100644
--- a/modules/travel/back/methods/travel/extraCommunityEmail.js
+++ b/modules/travel/back/methods/travel/extraCommunityEmail.js
@@ -1,5 +1,3 @@
-const {Email} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('extraCommunityEmail', {
description: 'Sends the extra community email with an attached PDF',
@@ -74,19 +72,5 @@ module.exports = Self => {
}
});
- Self.extraCommunityEmail = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {
- recipient: args.recipient,
- lang: ctx.req.getLocale()
- };
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const email = new Email('extra-community', params);
-
- return email.send();
- };
+ Self.extraCommunityEmail = ctx => Self.sendTemplate(ctx, 'extra-community');
};
diff --git a/modules/travel/back/methods/travel/extraCommunityPdf.js b/modules/travel/back/methods/travel/extraCommunityPdf.js
index a68e5cd09..676b98be2 100644
--- a/modules/travel/back/methods/travel/extraCommunityPdf.js
+++ b/modules/travel/back/methods/travel/extraCommunityPdf.js
@@ -1,5 +1,3 @@
-const {Report} = require('vn-print');
-
module.exports = Self => {
Self.remoteMethodCtx('extraCommunityPdf', {
description: 'Returns the extra community pdf',
@@ -11,6 +9,16 @@ module.exports = Self => {
description: 'The recipient id',
required: false
},
+ {
+ arg: 'filter',
+ type: 'object',
+ description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string'
+ },
+ {
+ arg: 'search',
+ type: 'string',
+ description: 'Searchs the travel by id'
+ },
{
arg: 'landedTo',
type: 'date'
@@ -73,17 +81,5 @@ module.exports = Self => {
}
});
- Self.extraCommunityPdf = async ctx => {
- const args = Object.assign({}, ctx.args);
- const params = {lang: ctx.req.getLocale()};
-
- delete args.ctx;
- for (const param in args)
- params[param] = args[param];
-
- const report = new Report('extra-community', params);
- const stream = await report.toPdfStream();
-
- return [stream, 'application/pdf', `filename="extra-community.pdf"`];
- };
+ Self.extraCommunityPdf = ctx => Self.printReport(ctx, null, 'extra-community');
};
diff --git a/modules/travel/front/extra-community/index.html b/modules/travel/front/extra-community/index.html
index ee8dcdf98..376c81aaf 100644
--- a/modules/travel/front/extra-community/index.html
+++ b/modules/travel/front/extra-community/index.html
@@ -1,7 +1,7 @@
{
+ Self.remoteMethodCtx('getMailStates', {
+ description: 'Get the states of a month about time control mail',
+ accessType: 'READ',
+ accepts: [{
+ arg: 'id',
+ type: 'number',
+ description: 'The worker id',
+ http: {source: 'path'}
+ },
+ {
+ arg: 'month',
+ type: 'number',
+ description: 'The number of the month'
+ },
+ {
+ arg: 'year',
+ type: 'number',
+ description: 'The number of the year'
+ }],
+ returns: [{
+ type: ['object'],
+ root: true
+ }],
+ http: {
+ path: `/:id/getMailStates`,
+ verb: 'GET'
+ }
+ });
+
+ Self.getMailStates = async(ctx, workerId, options) => {
+ const models = Self.app.models;
+ const args = ctx.args;
+ const myOptions = {};
+
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
+
+ const times = await models.Time.find({
+ fields: ['week'],
+ where: {
+ month: args.month,
+ year: args.year
+ }
+ }, myOptions);
+
+ const weeks = times.map(time => time.week);
+ const weekNumbersSet = new Set(weeks);
+ const weekNumbers = Array.from(weekNumbersSet);
+
+ const workerTimeControlMails = await models.WorkerTimeControlMail.find({
+ where: {
+ workerFk: workerId,
+ year: args.year,
+ week: {inq: weekNumbers}
+ }
+ }, myOptions);
+
+ return workerTimeControlMails;
+ };
+};
diff --git a/modules/worker/back/methods/worker-time-control/specs/getMailStates.spec.js b/modules/worker/back/methods/worker-time-control/specs/getMailStates.spec.js
new file mode 100644
index 000000000..cbad32323
--- /dev/null
+++ b/modules/worker/back/methods/worker-time-control/specs/getMailStates.spec.js
@@ -0,0 +1,29 @@
+const models = require('vn-loopback/server/server').models;
+
+describe('workerTimeControl getMailStates()', () => {
+ const workerId = 9;
+ const ctx = {args: {
+ month: 12,
+ year: 2000
+ }};
+
+ it('should get the states of a month about time control mail', async() => {
+ const tx = await models.WorkerTimeControl.beginTransaction({});
+
+ try {
+ const options = {transaction: tx};
+
+ const response = await models.WorkerTimeControl.getMailStates(ctx, workerId, options);
+
+ expect(response[0].state).toEqual('REVISE');
+ expect(response[1].state).toEqual('SENDED');
+ expect(response[2].state).toEqual('CONFIRMED');
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+});
+
diff --git a/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js b/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
index a8dc14bb1..642ff90d2 100644
--- a/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
+++ b/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
@@ -47,6 +47,10 @@ module.exports = Self => {
if (typeof options == 'object')
Object.assign(myOptions, options);
+ const isHimself = userId == args.workerId;
+ if (!isHimself)
+ throw new UserError(`You don't have enough privileges`);
+
const workerTimeControlMail = await models.WorkerTimeControlMail.findOne({
where: {
workerFk: args.workerId,
@@ -60,8 +64,6 @@ module.exports = Self => {
const oldState = workerTimeControlMail.state;
const oldReason = workerTimeControlMail.reason;
- if (oldState == args.state) throw new UserError('Already has this status');
-
await workerTimeControlMail.updateAttributes({
state: args.state,
reason: args.reason || null
diff --git a/modules/worker/back/models/time.json b/modules/worker/back/models/time.json
index df9257540..e2f1161d7 100644
--- a/modules/worker/back/models/time.json
+++ b/modules/worker/back/models/time.json
@@ -14,6 +14,9 @@
"year": {
"type": "number"
},
+ "month": {
+ "type": "number"
+ },
"week": {
"type": "number"
}
diff --git a/modules/worker/back/models/worker-time-control.js b/modules/worker/back/models/worker-time-control.js
index 7339f5d15..5b13e17f2 100644
--- a/modules/worker/back/models/worker-time-control.js
+++ b/modules/worker/back/models/worker-time-control.js
@@ -8,6 +8,7 @@ module.exports = Self => {
require('../methods/worker-time-control/sendMail')(Self);
require('../methods/worker-time-control/updateWorkerTimeControlMail')(Self);
require('../methods/worker-time-control/weeklyHourRecordEmail')(Self);
+ require('../methods/worker-time-control/getMailStates')(Self);
Self.rewriteDbError(function(err) {
if (err.code === 'ER_DUP_ENTRY')
diff --git a/modules/worker/front/calendar/index.html b/modules/worker/front/calendar/index.html
index cff4d0bc9..c9eacbd82 100644
--- a/modules/worker/front/calendar/index.html
+++ b/modules/worker/front/calendar/index.html
@@ -25,11 +25,11 @@
{{'Contract' | translate}} #{{$ctrl.businessId}}
- {{'Used' | translate}} {{$ctrl.contractHolidays.holidaysEnjoyed || 0}}
+ {{'Used' | translate}} {{$ctrl.contractHolidays.holidaysEnjoyed || 0}}
{{'of' | translate}} {{$ctrl.contractHolidays.totalHolidays || 0}} {{'days' | translate}}
- {{'Spent' | translate}} {{$ctrl.contractHolidays.hoursEnjoyed || 0}}
+ {{'Spent' | translate}} {{$ctrl.contractHolidays.hoursEnjoyed || 0}}
{{'of' | translate}} {{$ctrl.contractHolidays.totalHours || 0}} {{'hours' | translate}}
@@ -40,11 +40,11 @@
{{'Year' | translate}} {{$ctrl.year}}
- {{'Used' | translate}} {{$ctrl.yearHolidays.holidaysEnjoyed || 0}}
+ {{'Used' | translate}} {{$ctrl.yearHolidays.holidaysEnjoyed || 0}}
{{'of' | translate}} {{$ctrl.yearHolidays.totalHolidays || 0}} {{'days' | translate}}
- {{'Spent' | translate}} {{$ctrl.yearHolidays.hoursEnjoyed || 0}}
+ {{'Spent' | translate}} {{$ctrl.yearHolidays.hoursEnjoyed || 0}}
{{'of' | translate}} {{$ctrl.yearHolidays.totalHours || 0}} {{'hours' | translate}}
@@ -66,7 +66,7 @@
order="businessFk DESC"
limit="5">
- #{{businessFk}}
+ #{{businessFk}}
{{started | date: 'dd/MM/yyyy'}} - {{ended ? (ended | date: 'dd/MM/yyyy') : 'Indef.'}}
@@ -87,17 +87,17 @@
- Festive
+ Festive
- Current day
+ Current day
-
diff --git a/modules/worker/front/create/index.js b/modules/worker/front/create/index.js
index 7e837fe02..7966926b0 100644
--- a/modules/worker/front/create/index.js
+++ b/modules/worker/front/create/index.js
@@ -13,14 +13,20 @@ export default class Controller extends Section {
});
}
+ get ibanCountry() {
+ if (!this.worker || !this.worker.iban) return false;
+
+ let countryCode = this.worker.iban.substr(0, 2);
+
+ return countryCode;
+ }
+
autofillBic() {
if (!this.worker || !this.worker.iban) return;
let bankEntityId = parseInt(this.worker.iban.substr(4, 4));
let filter = {where: {id: bankEntityId}};
- if (this.ibanCountry != 'ES') return;
-
this.$http.get(`BankEntities`, {filter}).then(response => {
const hasData = response.data && response.data[0];
diff --git a/modules/worker/front/time-control/index.html b/modules/worker/front/time-control/index.html
index 681d420d0..bd7e68b89 100644
--- a/modules/worker/front/time-control/index.html
+++ b/modules/worker/front/time-control/index.html
@@ -1,7 +1,7 @@
@@ -16,7 +16,7 @@
{{::weekday.dated | date: 'MMMM'}}
-
-
+
-
-
+
-
+
+
+
+
-
+
Hours
-
-
@@ -106,6 +122,8 @@
vn-id="calendar"
class="vn-pt-md"
ng-model="$ctrl.date"
+ format-week="$ctrl.formatWeek($element)"
+ on-move="$ctrl.getMailStates($date)"
has-events="$ctrl.hasEvents($day)">
@@ -166,15 +184,31 @@
vn-id="reason"
on-accept="$ctrl.isUnsatisfied()">
-
-
+
+
+
+
-
+
-
\ No newline at end of file
+
+
+
+
+ Are you sure you want to send it?
+
+
+
+
+
+
diff --git a/modules/worker/front/time-control/index.js b/modules/worker/front/time-control/index.js
index f7379fea0..9ed454d31 100644
--- a/modules/worker/front/time-control/index.js
+++ b/modules/worker/front/time-control/index.js
@@ -1,6 +1,7 @@
import ngModule from '../module';
import Section from 'salix/components/section';
import './style.scss';
+import UserError from 'core/lib/user-error';
class Controller extends Section {
constructor($element, $, vnWeekDays) {
@@ -24,12 +25,31 @@ class Controller extends Section {
}
this.date = initialDate;
+
+ this.getMailStates(this.date);
+ }
+
+ get isHr() {
+ return this.aclService.hasAny(['hr']);
+ }
+
+ get isHimSelf() {
+ const userId = window.localStorage.currentUserWorkerId;
+ return userId == this.$params.id;
}
get worker() {
return this._worker;
}
+ get weekNumber() {
+ return this.getWeekNumber(this.date);
+ }
+
+ set weekNumber(value) {
+ this._weekNumber = value;
+ }
+
set worker(value) {
this._worker = value;
}
@@ -68,6 +88,27 @@ class Controller extends Section {
}
this.fetchHours();
+ this.getWeekData();
+ }
+
+ getWeekData() {
+ const filter = {
+ where: {
+ workerFk: this.$params.id,
+ year: this._date.getFullYear(),
+ week: this.getWeekNumber(this._date)
+ }
+ };
+ this.$http.get('WorkerTimeControlMails', {filter})
+ .then(res => {
+ const workerTimeControlMail = res.data;
+ if (!workerTimeControlMail.length) {
+ this.state = null;
+ return;
+ }
+ this.state = workerTimeControlMail[0].state;
+ this.reason = workerTimeControlMail[0].reason;
+ });
}
/**
@@ -294,42 +335,56 @@ class Controller extends Section {
this.$.editEntry.show($event);
}
- getWeekNumber(currentDate) {
- const startDate = new Date(currentDate.getFullYear(), 0, 1);
- let days = Math.floor((currentDate - startDate) /
- (24 * 60 * 60 * 1000));
- return Math.ceil(days / 7);
+ getWeekNumber(date) {
+ const tempDate = new Date(date);
+ let dayOfWeek = tempDate.getDay();
+ dayOfWeek = (dayOfWeek === 0) ? 7 : dayOfWeek;
+ const firstDayOfWeek = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() - (dayOfWeek - 1));
+ const firstDayOfYear = new Date(tempDate.getFullYear(), 0, 1);
+ const differenceInMilliseconds = firstDayOfWeek.getTime() - firstDayOfYear.getTime();
+ const weekNumber = Math.floor(differenceInMilliseconds / (1000 * 60 * 60 * 24 * 7)) + 1;
+ return weekNumber;
}
isSatisfied() {
- const weekNumber = this.getWeekNumber(this.date);
const params = {
workerId: this.worker.id,
year: this.date.getFullYear(),
- week: weekNumber,
+ week: this.weekNumber,
state: 'CONFIRMED'
};
const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
this.$http.post(query, params).then(() => {
+ this.getMailStates(this.date);
+ this.getWeekData();
this.vnApp.showSuccess(this.$t('Data saved!'));
});
}
isUnsatisfied() {
- const weekNumber = this.getWeekNumber(this.date);
+ if (!this.reason) throw new UserError(`You must indicate a reason`);
+
const params = {
workerId: this.worker.id,
year: this.date.getFullYear(),
- week: weekNumber,
+ week: this.weekNumber,
state: 'REVISE',
reason: this.reason
};
const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
this.$http.post(query, params).then(() => {
+ this.getMailStates(this.date);
+ this.getWeekData();
this.vnApp.showSuccess(this.$t('Data saved!'));
});
}
+ changeState(state, reason) {
+ this.state = state;
+ this.reason = reason;
+ this.repaint();
+ }
+
save() {
try {
const entry = this.selectedRow;
@@ -345,6 +400,77 @@ class Controller extends Section {
this.vnApp.showError(this.$t(e.message));
}
}
+
+ resendEmail() {
+ const timestamp = this.date.getTime() / 1000;
+ const url = `${window.location.origin}/#!/worker/${this.worker.id}/time-control?timestamp=${timestamp}`;
+ const params = {
+ recipient: this.worker.user.emailUser.email,
+ week: this.weekNumber,
+ year: this.date.getFullYear(),
+ url: url,
+ };
+ this.$http.post(`WorkerTimeControls/weekly-hour-hecord-email`, params)
+ .then(() => {
+ this.vnApp.showSuccess(this.$t('Email sended'));
+ });
+ }
+
+ getTime(timeString) {
+ const [hours, minutes, seconds] = timeString.split(':');
+ return [parseInt(hours), parseInt(minutes), parseInt(seconds)];
+ }
+
+ getMailStates(date) {
+ const params = {
+ month: date.getMonth() + 1,
+ year: date.getFullYear()
+ };
+ const query = `WorkerTimeControls/${this.$params.id}/getMailStates`;
+ this.$http.get(query, {params})
+ .then(res => {
+ this.workerTimeControlMails = res.data;
+ this.repaint();
+ });
+ }
+
+ formatWeek($element) {
+ const weekNumberHTML = $element.firstElementChild;
+ const weekNumberValue = weekNumberHTML.innerHTML;
+
+ if (!this.workerTimeControlMails) return;
+ const workerTimeControlMail = this.workerTimeControlMails.find(
+ workerTimeControlMail => workerTimeControlMail.week == weekNumberValue
+ );
+
+ if (!workerTimeControlMail) return;
+ const state = workerTimeControlMail.state;
+
+ if (state == 'CONFIRMED') {
+ weekNumberHTML.classList.remove('revise');
+ weekNumberHTML.classList.remove('sended');
+
+ weekNumberHTML.classList.add('confirmed');
+ weekNumberHTML.setAttribute('title', 'Conforme');
+ }
+ if (state == 'REVISE') {
+ weekNumberHTML.classList.remove('confirmed');
+ weekNumberHTML.classList.remove('sended');
+
+ weekNumberHTML.classList.add('revise');
+ weekNumberHTML.setAttribute('title', 'No conforme');
+ }
+ if (state == 'SENDED') {
+ weekNumberHTML.classList.add('sended');
+ weekNumberHTML.setAttribute('title', 'Pendiente');
+ }
+ }
+
+ repaint() {
+ let calendars = this.element.querySelectorAll('vn-calendar');
+ for (let calendar of calendars)
+ calendar.$ctrl.repaint();
+ }
}
Controller.$inject = ['$element', '$scope', 'vnWeekDays'];
diff --git a/modules/worker/front/time-control/index.spec.js b/modules/worker/front/time-control/index.spec.js
index b68162d39..0f9b48f6b 100644
--- a/modules/worker/front/time-control/index.spec.js
+++ b/modules/worker/front/time-control/index.spec.js
@@ -5,12 +5,14 @@ describe('Component vnWorkerTimeControl', () => {
let $scope;
let $element;
let controller;
+ let $httpParamSerializer;
beforeEach(ngModule('worker'));
- beforeEach(inject(($componentController, $rootScope, $stateParams, _$httpBackend_) => {
+ beforeEach(inject(($componentController, $rootScope, $stateParams, _$httpBackend_, _$httpParamSerializer_) => {
$stateParams.id = 1;
$httpBackend = _$httpBackend_;
+ $httpParamSerializer = _$httpParamSerializer_;
$scope = $rootScope.$new();
$element = angular.element('');
controller = $componentController('vnWorkerTimeControl', {$element, $scope});
@@ -82,6 +84,9 @@ describe('Component vnWorkerTimeControl', () => {
$httpBackend.whenRoute('GET', 'Workers/:id/getWorkedHours')
.respond(response);
+ $httpBackend.whenRoute('GET', 'WorkerTimeControlMails')
+ .respond([]);
+
today.setHours(0, 0, 0, 0);
let weekOffset = today.getDay() - 1;
@@ -97,7 +102,6 @@ describe('Component vnWorkerTimeControl', () => {
controller.ended = ended;
controller.getWorkedHours(controller.started, controller.ended);
-
$httpBackend.flush();
expect(controller.weekDays.length).toEqual(7);
@@ -152,5 +156,120 @@ describe('Component vnWorkerTimeControl', () => {
expect(controller.date.toDateString()).toEqual(date.toDateString());
});
});
+
+ describe('getWeekData() ', () => {
+ it(`should make a query an then update the state and reason`, () => {
+ const today = Date.vnNew();
+ const response = [
+ {
+ state: 'SENDED',
+ reason: null
+ }
+ ];
+
+ controller._date = today;
+
+ $httpBackend.whenRoute('GET', 'WorkerTimeControlMails')
+ .respond(response);
+
+ controller.getWeekData();
+ $httpBackend.flush();
+
+ expect(controller.state).toBe('SENDED');
+ expect(controller.reason).toBe(null);
+ });
+ });
+
+ describe('isSatisfied() ', () => {
+ it(`should make a query an then call three methods`, () => {
+ const today = Date.vnNew();
+ jest.spyOn(controller, 'getWeekData').mockReturnThis();
+ jest.spyOn(controller, 'getMailStates').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'showSuccess');
+
+ controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
+ controller.worker = {id: 1};
+ controller.date = today;
+ controller.weekNumber = 1;
+
+ $httpBackend.expect('POST', 'WorkerTimeControls/updateWorkerTimeControlMail').respond();
+ controller.isSatisfied();
+ $httpBackend.flush();
+
+ expect(controller.getMailStates).toHaveBeenCalledWith(controller.date);
+ expect(controller.getWeekData).toHaveBeenCalled();
+ expect(controller.vnApp.showSuccess).toHaveBeenCalled();
+ });
+ });
+
+ describe('isUnsatisfied() ', () => {
+ it(`should throw an error is reason is empty`, () => {
+ let error;
+ try {
+ controller.isUnsatisfied();
+ } catch (e) {
+ error = e;
+ }
+
+ expect(error).toBeDefined();
+ expect(error.message).toBe(`You must indicate a reason`);
+ });
+
+ it(`should make a query an then call three methods`, () => {
+ const today = Date.vnNew();
+ jest.spyOn(controller, 'getWeekData').mockReturnThis();
+ jest.spyOn(controller, 'getMailStates').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'showSuccess');
+
+ controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
+ controller.worker = {id: 1};
+ controller.date = today;
+ controller.weekNumber = 1;
+ controller.reason = 'reason';
+
+ $httpBackend.expect('POST', 'WorkerTimeControls/updateWorkerTimeControlMail').respond();
+ controller.isSatisfied();
+ $httpBackend.flush();
+
+ expect(controller.getMailStates).toHaveBeenCalledWith(controller.date);
+ expect(controller.getWeekData).toHaveBeenCalled();
+ expect(controller.vnApp.showSuccess).toHaveBeenCalled();
+ });
+ });
+
+ describe('resendEmail() ', () => {
+ it(`should make a query an then call showSuccess method`, () => {
+ const today = Date.vnNew();
+ jest.spyOn(controller, 'getWeekData').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'showSuccess');
+
+ controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
+ controller.worker = {id: 1};
+ controller.worker = {user: {emailUser: {email: 'employee@verdnatura.es'}}};
+ controller.date = today;
+ controller.weekNumber = 1;
+
+ $httpBackend.expect('POST', 'WorkerTimeControls/weekly-hour-hecord-email').respond();
+ controller.resendEmail();
+ $httpBackend.flush();
+
+ expect(controller.vnApp.showSuccess).toHaveBeenCalled();
+ });
+ });
+
+ describe('getMailStates() ', () => {
+ it(`should make a query an then call showSuccess method`, () => {
+ const today = Date.vnNew();
+ jest.spyOn(controller, 'repaint').mockReturnThis();
+
+ controller.$params = {id: 1};
+
+ $httpBackend.expect('GET', `WorkerTimeControls/1/getMailStates?month=1&year=2001`).respond();
+ controller.getMailStates(today);
+ $httpBackend.flush();
+
+ expect(controller.repaint).toHaveBeenCalled();
+ });
+ });
});
});
diff --git a/modules/worker/front/time-control/locale/es.yml b/modules/worker/front/time-control/locale/es.yml
index 2a3bffc00..091c01baa 100644
--- a/modules/worker/front/time-control/locale/es.yml
+++ b/modules/worker/front/time-control/locale/es.yml
@@ -13,4 +13,10 @@ Entry removed: Fichada borrada
The entry type can't be empty: El tipo de fichada no puede quedar vacía
Satisfied: Conforme
Not satisfied: No conforme
-Reason: Motivo
\ No newline at end of file
+Reason: Motivo
+Resend: Reenviar
+Email sended: Email enviado
+You must indicate a reason: Debes indicar un motivo
+Send time control email: Enviar email control horario
+Are you sure you want to send it?: ¿Seguro que quieres enviarlo?
+Resend email of this week to the user: Reenviar email de esta semana al usuario
diff --git a/modules/worker/front/time-control/style.scss b/modules/worker/front/time-control/style.scss
index 6a46921a7..9d7545aaf 100644
--- a/modules/worker/front/time-control/style.scss
+++ b/modules/worker/front/time-control/style.scss
@@ -14,7 +14,7 @@ vn-worker-time-control {
align-items: center;
justify-content: center;
padding: 4px 0;
-
+
& > vn-icon {
color: $color-font-secondary;
padding-right: 1px;
@@ -24,8 +24,29 @@ vn-worker-time-control {
.totalBox {
max-width: none
}
+
+}
+
+.reasonDialog{
+ min-width: 500px;
}
.edit-time-entry {
width: 200px
-}
\ No newline at end of file
+}
+
+.right {
+ float: right;
+ }
+
+.confirmed {
+ color: #97B92F;
+}
+
+.revise {
+ color: #f61e1e;
+}
+
+.sended {
+ color: #d19b25;
+}
diff --git a/modules/zone/back/models/zone.json b/modules/zone/back/models/zone.json
index 1e97c1bad..06ea5ca2b 100644
--- a/modules/zone/back/models/zone.json
+++ b/modules/zone/back/models/zone.json
@@ -38,6 +38,9 @@
"inflation": {
"type": "number"
},
+ "m3Max": {
+ "type": "number"
+ },
"itemMaxSize": {
"type": "number"
}
diff --git a/modules/zone/front/basic-data/index.html b/modules/zone/front/basic-data/index.html
index 1836216a2..8d8fc6c56 100644
--- a/modules/zone/front/basic-data/index.html
+++ b/modules/zone/front/basic-data/index.html
@@ -30,14 +30,21 @@
rule>
-
+ vn-one
+ label="Max m³"
+ ng-model="$ctrl.zone.itemMaxSize"
+ min="0"
+ vn-acl="deliveryBoss"
+ rule>
+
+
+
=0.10.0"
}
},
+ "node_modules/array-parallel": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz",
+ "integrity": "sha512-TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w=="
+ },
+ "node_modules/array-series": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz",
+ "integrity": "sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg=="
+ },
"node_modules/array-slice": {
"version": "1.1.0",
"dev": true,
@@ -3894,7 +3906,8 @@
},
"node_modules/axios": {
"version": "1.2.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz",
+ "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -4201,7 +4214,8 @@
},
"node_modules/base64url": {
"version": "3.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
"engines": {
"node": ">=6.0.0"
}
@@ -4696,7 +4710,8 @@
},
"node_modules/buffer-crc32": {
"version": "0.2.13",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"engines": {
"node": "*"
}
@@ -6064,6 +6079,13 @@
"version": "0.6.3",
"license": "MIT"
},
+ "node_modules/date-format": {
+ "version": "4.0.14",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/dateformat": {
"version": "2.2.0",
"dev": true,
@@ -6465,7 +6487,8 @@
},
"node_modules/devtools-protocol": {
"version": "0.0.1045489",
- "license": "BSD-3-Clause"
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz",
+ "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ=="
},
"node_modules/diff": {
"version": "1.4.0",
@@ -7833,7 +7856,8 @@
},
"node_modules/extract-zip": {
"version": "2.0.1",
- "license": "BSD-2-Clause",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"dependencies": {
"debug": "^4.1.1",
"get-stream": "^5.1.0",
@@ -7851,7 +7875,8 @@
},
"node_modules/extract-zip/node_modules/debug": {
"version": "4.3.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
@@ -7866,7 +7891,8 @@
},
"node_modules/extract-zip/node_modules/ms": {
"version": "2.1.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/extsprintf": {
"version": "1.4.1",
@@ -7955,7 +7981,8 @@
},
"node_modules/fd-slicer": {
"version": "1.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"dependencies": {
"pend": "~1.2.0"
}
@@ -8358,7 +8385,6 @@
},
"node_modules/flatted": {
"version": "3.2.7",
- "dev": true,
"license": "ISC"
},
"node_modules/flush-write-stream": {
@@ -8399,13 +8425,14 @@
},
"node_modules/follow-redirects": {
"version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
- "license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -8443,7 +8470,8 @@
},
"node_modules/form-data": {
"version": "4.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -9267,6 +9295,67 @@
"node": ">= 0.10"
}
},
+ "node_modules/gm": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/gm/-/gm-1.25.0.tgz",
+ "integrity": "sha512-4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==",
+ "dependencies": {
+ "array-parallel": "~0.1.3",
+ "array-series": "~0.1.5",
+ "cross-spawn": "^4.0.0",
+ "debug": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/gm/node_modules/cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/gm/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/gm/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/gm/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/gm/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/gm/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ },
"node_modules/google-auth-library": {
"version": "3.1.2",
"license": "Apache-2.0",
@@ -12224,8 +12313,9 @@
},
"node_modules/jasmine": {
"version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz",
+ "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"glob": "^7.1.6",
"jasmine-core": "^4.5.0"
@@ -12236,8 +12326,9 @@
},
"node_modules/jasmine-core": {
"version": "4.5.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
+ "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
+ "dev": true
},
"node_modules/jasmine-reporters": {
"version": "2.5.0",
@@ -13129,6 +13220,66 @@
"xmlcreate": "^1.0.1"
}
},
+ "node_modules/jsbarcode": {
+ "version": "3.11.5",
+ "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.11.5.tgz",
+ "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==",
+ "bin": {
+ "auto.js": "bin/barcodes/CODE128/auto.js",
+ "Barcode.js": "bin/barcodes/Barcode.js",
+ "barcodes": "bin/barcodes",
+ "canvas.js": "bin/renderers/canvas.js",
+ "checksums.js": "bin/barcodes/MSI/checksums.js",
+ "codabar": "bin/barcodes/codabar",
+ "CODE128": "bin/barcodes/CODE128",
+ "CODE128_AUTO.js": "bin/barcodes/CODE128/CODE128_AUTO.js",
+ "CODE128.js": "bin/barcodes/CODE128/CODE128.js",
+ "CODE128A.js": "bin/barcodes/CODE128/CODE128A.js",
+ "CODE128B.js": "bin/barcodes/CODE128/CODE128B.js",
+ "CODE128C.js": "bin/barcodes/CODE128/CODE128C.js",
+ "CODE39": "bin/barcodes/CODE39",
+ "constants.js": "bin/barcodes/ITF/constants.js",
+ "defaults.js": "bin/options/defaults.js",
+ "EAN_UPC": "bin/barcodes/EAN_UPC",
+ "EAN.js": "bin/barcodes/EAN_UPC/EAN.js",
+ "EAN13.js": "bin/barcodes/EAN_UPC/EAN13.js",
+ "EAN2.js": "bin/barcodes/EAN_UPC/EAN2.js",
+ "EAN5.js": "bin/barcodes/EAN_UPC/EAN5.js",
+ "EAN8.js": "bin/barcodes/EAN_UPC/EAN8.js",
+ "encoder.js": "bin/barcodes/EAN_UPC/encoder.js",
+ "ErrorHandler.js": "bin/exceptions/ErrorHandler.js",
+ "exceptions": "bin/exceptions",
+ "exceptions.js": "bin/exceptions/exceptions.js",
+ "fixOptions.js": "bin/help/fixOptions.js",
+ "GenericBarcode": "bin/barcodes/GenericBarcode",
+ "getOptionsFromElement.js": "bin/help/getOptionsFromElement.js",
+ "getRenderProperties.js": "bin/help/getRenderProperties.js",
+ "help": "bin/help",
+ "index.js": "bin/renderers/index.js",
+ "index.tmp.js": "bin/barcodes/index.tmp.js",
+ "ITF": "bin/barcodes/ITF",
+ "ITF.js": "bin/barcodes/ITF/ITF.js",
+ "ITF14.js": "bin/barcodes/ITF/ITF14.js",
+ "JsBarcode.js": "bin/JsBarcode.js",
+ "linearizeEncodings.js": "bin/help/linearizeEncodings.js",
+ "merge.js": "bin/help/merge.js",
+ "MSI": "bin/barcodes/MSI",
+ "MSI.js": "bin/barcodes/MSI/MSI.js",
+ "MSI10.js": "bin/barcodes/MSI/MSI10.js",
+ "MSI1010.js": "bin/barcodes/MSI/MSI1010.js",
+ "MSI11.js": "bin/barcodes/MSI/MSI11.js",
+ "MSI1110.js": "bin/barcodes/MSI/MSI1110.js",
+ "object.js": "bin/renderers/object.js",
+ "options": "bin/options",
+ "optionsFromStrings.js": "bin/help/optionsFromStrings.js",
+ "pharmacode": "bin/barcodes/pharmacode",
+ "renderers": "bin/renderers",
+ "shared.js": "bin/renderers/shared.js",
+ "svg.js": "bin/renderers/svg.js",
+ "UPC.js": "bin/barcodes/EAN_UPC/UPC.js",
+ "UPCE.js": "bin/barcodes/EAN_UPC/UPCE.js"
+ }
+ },
"node_modules/jsbn": {
"version": "0.1.1",
"license": "MIT"
@@ -13879,6 +14030,39 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/log4js": {
+ "version": "6.7.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "flatted": "^3.2.7",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.1.3"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/log4js/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/log4js/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
"node_modules/loglevel": {
"version": "1.8.0",
"dev": true,
@@ -17096,7 +17280,8 @@
},
"node_modules/pend": {
"version": "1.2.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
"node_modules/performance-now": {
"version": "2.1.0",
@@ -17496,7 +17681,8 @@
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"node_modules/prr": {
"version": "1.0.1",
@@ -17579,8 +17765,9 @@
},
"node_modules/puppeteer": {
"version": "18.2.1",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.2.1.tgz",
+ "integrity": "sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==",
"hasInstallScript": true,
- "license": "Apache-2.0",
"dependencies": {
"https-proxy-agent": "5.0.1",
"progress": "2.0.3",
@@ -17591,9 +17778,39 @@
"node": ">=14.1.0"
}
},
+ "node_modules/puppeteer-cluster": {
+ "version": "0.23.0",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.3"
+ },
+ "peerDependencies": {
+ "puppeteer": ">=1.5.0"
+ }
+ },
+ "node_modules/puppeteer-cluster/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/puppeteer-cluster/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
"node_modules/puppeteer-core": {
"version": "18.2.1",
- "license": "Apache-2.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-18.2.1.tgz",
+ "integrity": "sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==",
"dependencies": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
@@ -17612,7 +17829,8 @@
},
"node_modules/puppeteer-core/node_modules/agent-base": {
"version": "6.0.2",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"dependencies": {
"debug": "4"
},
@@ -17622,7 +17840,8 @@
},
"node_modules/puppeteer-core/node_modules/debug": {
"version": "4.3.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
@@ -17637,7 +17856,8 @@
},
"node_modules/puppeteer-core/node_modules/https-proxy-agent": {
"version": "5.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dependencies": {
"agent-base": "6",
"debug": "4"
@@ -17648,11 +17868,13 @@
},
"node_modules/puppeteer-core/node_modules/ms": {
"version": "2.1.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/puppeteer-core/node_modules/ws": {
"version": "8.9.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz",
+ "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==",
"engines": {
"node": ">=10.0.0"
},
@@ -18542,7 +18764,8 @@
},
"node_modules/request/node_modules/form-data": {
"version": "2.3.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -18708,6 +18931,10 @@
"version": "2.1.2",
"license": "MIT"
},
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "license": "MIT"
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"license": "ISC",
@@ -19561,8 +19788,9 @@
},
"node_modules/sharp": {
"version": "0.31.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz",
+ "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==",
"hasInstallScript": true,
- "license": "Apache-2.0",
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.1",
@@ -20476,6 +20704,49 @@
"version": "1.0.1",
"license": "MIT"
},
+ "node_modules/streamroller": {
+ "version": "3.1.3",
+ "license": "MIT",
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/streamroller/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/streamroller/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/streamroller/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
"node_modules/streamsearch": {
"version": "0.1.2",
"engines": {
@@ -22080,7 +22351,8 @@
},
"node_modules/unbzip2-stream": {
"version": "1.4.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
"dependencies": {
"buffer": "^5.2.1",
"through": "^2.3.8"
@@ -22088,6 +22360,8 @@
},
"node_modules/unbzip2-stream/node_modules/base64-js": {
"version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -22101,11 +22375,12 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/unbzip2-stream/node_modules/buffer": {
"version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
@@ -22120,7 +22395,6 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
@@ -24399,6 +24673,14 @@
"version": "1.0.2",
"license": "Apache-2.0"
},
+ "node_modules/xmldom": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
+ "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/xtend": {
"version": "1.0.3",
"engines": {
@@ -24521,7 +24803,8 @@
},
"node_modules/yauzl": {
"version": "2.10.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
@@ -24550,38 +24833,6 @@
"xmldom": "^0.6.0"
}
},
- "print/node_modules/@babel/code-frame": {
- "version": "7.18.6",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "print/node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "print/node_modules/@babel/highlight": {
- "version": "7.18.6",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"print/node_modules/@babel/parser": {
"version": "7.19.3",
"license": "MIT",
@@ -24592,21 +24843,6 @@
"node": ">=6.0.0"
}
},
- "print/node_modules/@types/node": {
- "version": "18.14.2",
- "license": "MIT",
- "optional": true,
- "peer": true
- },
- "print/node_modules/@types/yauzl": {
- "version": "2.10.0",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"print/node_modules/@vue/compiler-sfc": {
"version": "2.7.10",
"dependencies": {
@@ -24615,17 +24851,6 @@
"source-map": "^0.6.1"
}
},
- "print/node_modules/agent-base": {
- "version": "6.0.2",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
"print/node_modules/ajv": {
"version": "6.12.6",
"license": "MIT",
@@ -24697,30 +24922,6 @@
"version": "1.11.0",
"license": "MIT"
},
- "print/node_modules/balanced-match": {
- "version": "1.0.2",
- "license": "MIT",
- "peer": true
- },
- "print/node_modules/base64-js": {
- "version": "1.5.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "peer": true
- },
"print/node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"license": "BSD-3-Clause",
@@ -24728,68 +24929,10 @@
"tweetnacl": "^0.14.3"
}
},
- "print/node_modules/bl": {
- "version": "4.1.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
"print/node_modules/boolbase": {
"version": "1.0.0",
"license": "ISC"
},
- "print/node_modules/brace-expansion": {
- "version": "1.1.11",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "print/node_modules/buffer": {
- "version": "5.7.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "print/node_modules/buffer-crc32": {
- "version": "0.2.13",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "print/node_modules/callsites": {
- "version": "3.1.0",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
"print/node_modules/camelcase": {
"version": "5.3.1",
"license": "MIT",
@@ -24838,22 +24981,6 @@
"node": ">= 0.6"
}
},
- "print/node_modules/chownr": {
- "version": "1.1.4",
- "license": "ISC",
- "peer": true
- },
- "print/node_modules/chromium-bidi": {
- "version": "0.4.4",
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "mitt": "3.0.0"
- },
- "peerDependencies": {
- "devtools-protocol": "*"
- }
- },
"print/node_modules/cliui": {
"version": "6.0.0",
"license": "ISC",
@@ -24888,53 +25015,10 @@
"version": "2.20.3",
"license": "MIT"
},
- "print/node_modules/concat-map": {
- "version": "0.0.1",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/core-util-is": {
"version": "1.0.2",
"license": "MIT"
},
- "print/node_modules/cosmiconfig": {
- "version": "8.0.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "print/node_modules/cosmiconfig/node_modules/argparse": {
- "version": "2.0.1",
- "license": "Python-2.0",
- "peer": true
- },
- "print/node_modules/cosmiconfig/node_modules/js-yaml": {
- "version": "4.1.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "print/node_modules/cross-fetch": {
- "version": "3.1.5",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "node-fetch": "2.6.7"
- }
- },
"print/node_modules/cross-spawn": {
"version": "6.0.5",
"license": "MIT",
@@ -24991,28 +25075,6 @@
"node": ">= 4"
}
},
- "print/node_modules/date-format": {
- "version": "4.0.14",
- "license": "MIT",
- "engines": {
- "node": ">=4.0"
- }
- },
- "print/node_modules/debug": {
- "version": "4.3.4",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"print/node_modules/decamelize": {
"version": "1.2.0",
"license": "MIT",
@@ -25041,11 +25103,6 @@
"node": ">=0.10"
}
},
- "print/node_modules/devtools-protocol": {
- "version": "0.0.1094867",
- "license": "BSD-3-Clause",
- "peer": true
- },
"print/node_modules/dijkstrajs": {
"version": "1.0.2",
"license": "MIT"
@@ -25092,26 +25149,10 @@
"version": "1.0.3",
"license": "MIT"
},
- "print/node_modules/end-of-stream": {
- "version": "1.4.4",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"print/node_modules/entities": {
"version": "1.1.2",
"license": "BSD-2-Clause"
},
- "print/node_modules/error-ex": {
- "version": "1.3.2",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
"print/node_modules/escape-string-regexp": {
"version": "1.0.5",
"license": "MIT",
@@ -25134,25 +25175,6 @@
"version": "3.0.2",
"license": "MIT"
},
- "print/node_modules/extract-zip": {
- "version": "2.0.1",
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
"print/node_modules/extsprintf": {
"version": "1.3.0",
"engines": [
@@ -25168,14 +25190,6 @@
"version": "2.1.0",
"license": "MIT"
},
- "print/node_modules/fd-slicer": {
- "version": "1.1.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
"print/node_modules/find-up": {
"version": "4.1.0",
"license": "MIT",
@@ -25187,10 +25201,6 @@
"node": ">=8"
}
},
- "print/node_modules/flatted": {
- "version": "3.2.7",
- "license": "ISC"
- },
"print/node_modules/forever-agent": {
"version": "0.6.1",
"license": "Apache-2.0",
@@ -25210,11 +25220,6 @@
"node": ">= 0.12"
}
},
- "print/node_modules/fs-constants": {
- "version": "1.0.0",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/fs-extra": {
"version": "7.0.1",
"license": "MIT",
@@ -25227,11 +25232,6 @@
"node": ">=6 <7 || >=8"
}
},
- "print/node_modules/fs.realpath": {
- "version": "1.0.0",
- "license": "ISC",
- "peer": true
- },
"print/node_modules/function-bind": {
"version": "1.1.1",
"license": "MIT"
@@ -25250,20 +25250,6 @@
"node": "6.* || 8.* || >= 10.*"
}
},
- "print/node_modules/get-stream": {
- "version": "5.2.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"print/node_modules/getpass": {
"version": "0.1.7",
"license": "MIT",
@@ -25271,25 +25257,6 @@
"assert-plus": "^1.0.0"
}
},
- "print/node_modules/glob": {
- "version": "7.2.3",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"print/node_modules/graceful-fs": {
"version": "4.2.10",
"license": "ISC"
@@ -25365,18 +25332,6 @@
"npm": ">=1.3.7"
}
},
- "print/node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"print/node_modules/iconv-lite": {
"version": "0.5.2",
"license": "MIT",
@@ -25387,25 +25342,6 @@
"node": ">=0.10.0"
}
},
- "print/node_modules/ieee754": {
- "version": "1.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause",
- "peer": true
- },
"print/node_modules/image-size": {
"version": "0.7.5",
"license": "MIT",
@@ -25416,30 +25352,6 @@
"node": ">=6.9.0"
}
},
- "print/node_modules/import-fresh": {
- "version": "3.3.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "print/node_modules/inflight": {
- "version": "1.0.6",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
"print/node_modules/inherits": {
"version": "2.0.4",
"license": "ISC"
@@ -25448,11 +25360,6 @@
"version": "1.2.5",
"license": "MIT"
},
- "print/node_modules/is-arrayish": {
- "version": "0.2.1",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/is-core-module": {
"version": "2.10.0",
"license": "MIT",
@@ -25486,11 +25393,6 @@
"version": "0.1.2",
"license": "MIT"
},
- "print/node_modules/js-tokens": {
- "version": "4.0.0",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/js-yaml": {
"version": "3.14.1",
"license": "MIT",
@@ -25502,61 +25404,10 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "print/node_modules/jsbarcode": {
- "version": "3.11.5",
- "license": "MIT",
- "bin": {
- "auto.js": "bin/barcodes/CODE128/auto.js",
- "Barcode.js": "bin/barcodes/Barcode.js",
- "canvas.js": "bin/renderers/canvas.js",
- "checksums.js": "bin/barcodes/MSI/checksums.js",
- "CODE128_AUTO.js": "bin/barcodes/CODE128/CODE128_AUTO.js",
- "CODE128.js": "bin/barcodes/CODE128/CODE128.js",
- "CODE128A.js": "bin/barcodes/CODE128/CODE128A.js",
- "CODE128B.js": "bin/barcodes/CODE128/CODE128B.js",
- "CODE128C.js": "bin/barcodes/CODE128/CODE128C.js",
- "constants.js": "bin/barcodes/ITF/constants.js",
- "defaults.js": "bin/options/defaults.js",
- "EAN.js": "bin/barcodes/EAN_UPC/EAN.js",
- "EAN13.js": "bin/barcodes/EAN_UPC/EAN13.js",
- "EAN2.js": "bin/barcodes/EAN_UPC/EAN2.js",
- "EAN5.js": "bin/barcodes/EAN_UPC/EAN5.js",
- "EAN8.js": "bin/barcodes/EAN_UPC/EAN8.js",
- "encoder.js": "bin/barcodes/EAN_UPC/encoder.js",
- "ErrorHandler.js": "bin/exceptions/ErrorHandler.js",
- "exceptions.js": "bin/exceptions/exceptions.js",
- "fixOptions.js": "bin/help/fixOptions.js",
- "getOptionsFromElement.js": "bin/help/getOptionsFromElement.js",
- "getRenderProperties.js": "bin/help/getRenderProperties.js",
- "index.js": "bin/renderers/index.js",
- "index.tmp.js": "bin/barcodes/index.tmp.js",
- "ITF.js": "bin/barcodes/ITF/ITF.js",
- "ITF14.js": "bin/barcodes/ITF/ITF14.js",
- "JsBarcode.js": "bin/JsBarcode.js",
- "linearizeEncodings.js": "bin/help/linearizeEncodings.js",
- "merge.js": "bin/help/merge.js",
- "MSI.js": "bin/barcodes/MSI/MSI.js",
- "MSI10.js": "bin/barcodes/MSI/MSI10.js",
- "MSI1010.js": "bin/barcodes/MSI/MSI1010.js",
- "MSI11.js": "bin/barcodes/MSI/MSI11.js",
- "MSI1110.js": "bin/barcodes/MSI/MSI1110.js",
- "object.js": "bin/renderers/object.js",
- "optionsFromStrings.js": "bin/help/optionsFromStrings.js",
- "shared.js": "bin/renderers/shared.js",
- "svg.js": "bin/renderers/svg.js",
- "UPC.js": "bin/barcodes/EAN_UPC/UPC.js",
- "UPCE.js": "bin/barcodes/EAN_UPC/UPCE.js"
- }
- },
"print/node_modules/jsbn": {
"version": "0.1.1",
"license": "MIT"
},
- "print/node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/json-schema": {
"version": "0.4.0",
"license": "(AFL-2.1 OR BSD-3-Clause)"
@@ -25615,11 +25466,6 @@
"node": ">=4.2.0"
}
},
- "print/node_modules/lines-and-columns": {
- "version": "1.2.4",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/locate-path": {
"version": "5.0.0",
"license": "MIT",
@@ -25705,20 +25551,6 @@
"version": "4.5.0",
"license": "MIT"
},
- "print/node_modules/log4js": {
- "version": "6.8.0",
- "license": "Apache-2.0",
- "dependencies": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
"print/node_modules/long": {
"version": "4.0.0",
"license": "Apache-2.0"
@@ -25761,31 +25593,6 @@
"node": ">= 6.0"
}
},
- "print/node_modules/minimatch": {
- "version": "3.1.2",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "print/node_modules/mitt": {
- "version": "3.0.0",
- "license": "MIT",
- "peer": true
- },
- "print/node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "license": "MIT",
- "peer": true
- },
- "print/node_modules/ms": {
- "version": "2.1.2",
- "license": "MIT"
- },
"print/node_modules/mysql2": {
"version": "1.7.0",
"license": "MIT",
@@ -25839,25 +25646,6 @@
"version": "1.0.5",
"license": "MIT"
},
- "print/node_modules/node-fetch": {
- "version": "2.6.7",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
"print/node_modules/nodemailer": {
"version": "4.7.0",
"license": "MIT",
@@ -25879,14 +25667,6 @@
"node": "*"
}
},
- "print/node_modules/once": {
- "version": "1.4.0",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
"print/node_modules/p-limit": {
"version": "2.3.0",
"license": "MIT",
@@ -25917,34 +25697,6 @@
"node": ">=6"
}
},
- "print/node_modules/parent-module": {
- "version": "1.0.1",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "print/node_modules/parse-json": {
- "version": "5.2.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"print/node_modules/path-exists": {
"version": "4.0.0",
"license": "MIT",
@@ -25952,14 +25704,6 @@
"node": ">=8"
}
},
- "print/node_modules/path-is-absolute": {
- "version": "1.0.1",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"print/node_modules/path-key": {
"version": "2.0.1",
"license": "MIT",
@@ -25971,19 +25715,6 @@
"version": "1.0.7",
"license": "MIT"
},
- "print/node_modules/path-type": {
- "version": "4.0.0",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "print/node_modules/pend": {
- "version": "1.2.0",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/performance-now": {
"version": "2.1.0",
"license": "MIT"
@@ -26021,19 +25752,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "print/node_modules/progress": {
- "version": "2.0.3",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "print/node_modules/proxy-from-env": {
- "version": "1.1.0",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/pseudomap": {
"version": "1.0.2",
"license": "ISC"
@@ -26042,15 +25760,6 @@
"version": "1.9.0",
"license": "MIT"
},
- "print/node_modules/pump": {
- "version": "3.0.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"print/node_modules/punycode": {
"version": "2.1.1",
"license": "MIT",
@@ -26058,61 +25767,6 @@
"node": ">=6"
}
},
- "print/node_modules/puppeteer": {
- "version": "19.7.2",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "cosmiconfig": "8.0.0",
- "https-proxy-agent": "5.0.1",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "puppeteer-core": "19.7.2"
- },
- "engines": {
- "node": ">=14.1.0"
- }
- },
- "print/node_modules/puppeteer-cluster": {
- "version": "0.23.0",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.3"
- },
- "peerDependencies": {
- "puppeteer": ">=1.5.0"
- }
- },
- "print/node_modules/puppeteer-core": {
- "version": "19.7.2",
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "chromium-bidi": "0.4.4",
- "cross-fetch": "3.1.5",
- "debug": "4.3.4",
- "devtools-protocol": "0.0.1094867",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.11.0"
- },
- "engines": {
- "node": ">=14.1.0"
- },
- "peerDependencies": {
- "typescript": ">= 4.7.4"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"print/node_modules/qrcode": {
"version": "1.5.1",
"license": "MIT",
@@ -26210,32 +25864,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "print/node_modules/resolve-from": {
- "version": "4.0.0",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "print/node_modules/rfdc": {
- "version": "1.3.0",
- "license": "MIT"
- },
- "print/node_modules/rimraf": {
- "version": "3.0.2",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"print/node_modules/safe-buffer": {
"version": "5.2.1",
"funding": [
@@ -26351,30 +25979,6 @@
"node": ">=0.10.0"
}
},
- "print/node_modules/streamroller": {
- "version": "3.1.5",
- "license": "MIT",
- "dependencies": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "print/node_modules/streamroller/node_modules/fs-extra": {
- "version": "8.1.0",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
"print/node_modules/strftime": {
"version": "0.10.1",
"license": "MIT",
@@ -26431,37 +26035,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "print/node_modules/tar-fs": {
- "version": "2.1.1",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "print/node_modules/tar-stream": {
- "version": "2.2.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "print/node_modules/through": {
- "version": "2.3.8",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/tough-cookie": {
"version": "2.5.0",
"license": "BSD-3-Clause",
@@ -26473,11 +26046,6 @@
"node": ">=0.8"
}
},
- "print/node_modules/tr46": {
- "version": "0.0.3",
- "license": "MIT",
- "peer": true
- },
"print/node_modules/tunnel-agent": {
"version": "0.6.0",
"license": "Apache-2.0",
@@ -26492,15 +26060,6 @@
"version": "0.14.5",
"license": "Unlicense"
},
- "print/node_modules/unbzip2-stream": {
- "version": "1.4.3",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
"print/node_modules/universalify": {
"version": "0.1.2",
"license": "MIT",
@@ -26744,20 +26303,6 @@
"entities": "^2.0.0"
}
},
- "print/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "license": "BSD-2-Clause",
- "peer": true
- },
- "print/node_modules/whatwg-url": {
- "version": "5.0.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"print/node_modules/which": {
"version": "1.3.1",
"license": "ISC",
@@ -26811,38 +26356,6 @@
"version": "1.1.4",
"license": "MIT"
},
- "print/node_modules/wrappy": {
- "version": "1.0.2",
- "license": "ISC",
- "peer": true
- },
- "print/node_modules/ws": {
- "version": "8.11.0",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "print/node_modules/xmldom": {
- "version": "0.6.0",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- }
- },
"print/node_modules/xtend": {
"version": "4.0.2",
"license": "MIT",
@@ -26888,15 +26401,6 @@
"engines": {
"node": ">=6"
}
- },
- "print/node_modules/yauzl": {
- "version": "2.10.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
}
},
"dependencies": {
@@ -28794,6 +28298,8 @@
},
"@types/yauzl": {
"version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
"optional": true,
"requires": {
"@types/node": "*"
@@ -29239,6 +28745,16 @@
}
}
},
+ "array-parallel": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz",
+ "integrity": "sha512-TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w=="
+ },
+ "array-series": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz",
+ "integrity": "sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg=="
+ },
"array-slice": {
"version": "1.1.0",
"dev": true
@@ -29422,6 +28938,8 @@
},
"axios": {
"version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz",
+ "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -29631,7 +29149,9 @@
"version": "1.0.2"
},
"base64url": {
- "version": "3.0.1"
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
},
"batch": {
"version": "0.6.1",
@@ -29972,7 +29492,9 @@
}
},
"buffer-crc32": {
- "version": "0.2.13"
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
},
"buffer-equal": {
"version": "1.0.0",
@@ -30922,6 +30444,9 @@
"date-and-time": {
"version": "0.6.3"
},
+ "date-format": {
+ "version": "4.0.14"
+ },
"dateformat": {
"version": "2.2.0",
"dev": true
@@ -31178,7 +30703,9 @@
"dev": true
},
"devtools-protocol": {
- "version": "0.0.1045489"
+ "version": "0.0.1045489",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz",
+ "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ=="
},
"diff": {
"version": "1.4.0"
@@ -32134,6 +31661,8 @@
},
"extract-zip": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"requires": {
"@types/yauzl": "^2.9.1",
"debug": "^4.1.1",
@@ -32143,12 +31672,16 @@
"dependencies": {
"debug": {
"version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
- "version": "2.1.2"
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
@@ -32214,6 +31747,8 @@
},
"fd-slicer": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"requires": {
"pend": "~1.2.0"
}
@@ -32496,8 +32031,7 @@
}
},
"flatted": {
- "version": "3.2.7",
- "dev": true
+ "version": "3.2.7"
},
"flush-write-stream": {
"version": "1.1.1",
@@ -32534,7 +32068,9 @@
}
},
"follow-redirects": {
- "version": "1.15.2"
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"for-in": {
"version": "1.0.2",
@@ -32552,6 +32088,8 @@
},
"form-data": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -33155,6 +32693,63 @@
"sparkles": "^1.0.0"
}
},
+ "gm": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/gm/-/gm-1.25.0.tgz",
+ "integrity": "sha512-4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==",
+ "requires": {
+ "array-parallel": "~0.1.3",
+ "array-series": "~0.1.5",
+ "cross-spawn": "^4.0.0",
+ "debug": "^3.1.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ }
+ }
+ },
"google-auth-library": {
"version": "3.1.2",
"requires": {
@@ -35169,6 +34764,8 @@
},
"jasmine": {
"version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz",
+ "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==",
"dev": true,
"requires": {
"glob": "^7.1.6",
@@ -35177,6 +34774,8 @@
},
"jasmine-core": {
"version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
+ "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true
},
"jasmine-reporters": {
@@ -35822,6 +35421,11 @@
"xmlcreate": "^1.0.1"
}
},
+ "jsbarcode": {
+ "version": "3.11.5",
+ "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.11.5.tgz",
+ "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA=="
+ },
"jsbn": {
"version": "0.1.1"
},
@@ -36361,6 +35965,27 @@
"version": "4.4.2",
"dev": true
},
+ "log4js": {
+ "version": "6.7.0",
+ "requires": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "flatted": "^3.2.7",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.1.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2"
+ }
+ }
+ },
"loglevel": {
"version": "1.8.0",
"dev": true
@@ -38638,7 +38263,9 @@
}
},
"pend": {
- "version": "1.2.0"
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
"performance-now": {
"version": "2.1.0"
@@ -38902,7 +38529,9 @@
}
},
"proxy-from-env": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"prr": {
"version": "1.0.1",
@@ -38972,6 +38601,8 @@
},
"puppeteer": {
"version": "18.2.1",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.2.1.tgz",
+ "integrity": "sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==",
"requires": {
"https-proxy-agent": "5.0.1",
"progress": "2.0.3",
@@ -39003,8 +38634,27 @@
}
}
},
+ "puppeteer-cluster": {
+ "version": "0.23.0",
+ "requires": {
+ "debug": "^4.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2"
+ }
+ }
+ },
"puppeteer-core": {
"version": "18.2.1",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-18.2.1.tgz",
+ "integrity": "sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==",
"requires": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
@@ -39020,28 +38670,38 @@
"dependencies": {
"agent-base": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
}
},
"debug": {
"version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"https-proxy-agent": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"requires": {
"agent-base": "6",
"debug": "4"
}
},
"ms": {
- "version": "2.1.2"
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"ws": {
"version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz",
+ "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==",
"requires": {}
}
}
@@ -39626,6 +39286,8 @@
"dependencies": {
"form-data": {
"version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -39730,6 +39392,9 @@
}
}
},
+ "rfdc": {
+ "version": "1.3.0"
+ },
"rimraf": {
"version": "3.0.2",
"requires": {
@@ -40338,6 +40003,8 @@
},
"sharp": {
"version": "0.31.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz",
+ "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==",
"requires": {
"color": "^4.2.3",
"detect-libc": "^2.0.1",
@@ -40981,6 +40648,33 @@
"stream-shift": {
"version": "1.0.1"
},
+ "streamroller": {
+ "version": "3.1.3",
+ "requires": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2"
+ }
+ }
+ },
"streamsearch": {
"version": "0.1.2"
},
@@ -42051,16 +41745,22 @@
},
"unbzip2-stream": {
"version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
"requires": {
"buffer": "^5.2.1",
"through": "^2.3.8"
},
"dependencies": {
"base64-js": {
- "version": "1.5.1"
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"buffer": {
"version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
@@ -42608,42 +42308,9 @@
"xmldom": "^0.6.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.18.6",
- "peer": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "peer": true
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "peer": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/parser": {
"version": "7.19.3"
},
- "@types/node": {
- "version": "18.14.2",
- "optional": true,
- "peer": true
- },
- "@types/yauzl": {
- "version": "2.10.0",
- "optional": true,
- "peer": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@vue/compiler-sfc": {
"version": "2.7.10",
"requires": {
@@ -42652,13 +42319,6 @@
"source-map": "^0.6.1"
}
},
- "agent-base": {
- "version": "6.0.2",
- "peer": true,
- "requires": {
- "debug": "4"
- }
- },
"ajv": {
"version": "6.12.6",
"requires": {
@@ -42704,56 +42364,15 @@
"aws4": {
"version": "1.11.0"
},
- "balanced-match": {
- "version": "1.0.2",
- "peer": true
- },
- "base64-js": {
- "version": "1.5.1",
- "peer": true
- },
"bcrypt-pbkdf": {
"version": "1.0.2",
"requires": {
"tweetnacl": "^0.14.3"
}
},
- "bl": {
- "version": "4.1.0",
- "peer": true,
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
"boolbase": {
"version": "1.0.0"
},
- "brace-expansion": {
- "version": "1.1.11",
- "peer": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "peer": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "peer": true
- },
- "callsites": {
- "version": "3.1.0",
- "peer": true
- },
"camelcase": {
"version": "5.3.1"
},
@@ -42789,17 +42408,6 @@
"lodash.some": "^4.4.0"
}
},
- "chownr": {
- "version": "1.1.4",
- "peer": true
- },
- "chromium-bidi": {
- "version": "0.4.4",
- "peer": true,
- "requires": {
- "mitt": "3.0.0"
- }
- },
"cliui": {
"version": "6.0.0",
"requires": {
@@ -42826,43 +42434,9 @@
"commander": {
"version": "2.20.3"
},
- "concat-map": {
- "version": "0.0.1",
- "peer": true
- },
"core-util-is": {
"version": "1.0.2"
},
- "cosmiconfig": {
- "version": "8.0.0",
- "peer": true,
- "requires": {
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "peer": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "peer": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "cross-fetch": {
- "version": "3.1.5",
- "peer": true,
- "requires": {
- "node-fetch": "2.6.7"
- }
- },
"cross-spawn": {
"version": "6.0.5",
"requires": {
@@ -42901,15 +42475,6 @@
"mimer": "^1.0.0"
}
},
- "date-format": {
- "version": "4.0.14"
- },
- "debug": {
- "version": "4.3.4",
- "requires": {
- "ms": "2.1.2"
- }
- },
"decamelize": {
"version": "1.2.0"
},
@@ -42922,10 +42487,6 @@
"denque": {
"version": "1.5.1"
},
- "devtools-protocol": {
- "version": "0.0.1094867",
- "peer": true
- },
"dijkstrajs": {
"version": "1.0.2"
},
@@ -42965,23 +42526,9 @@
"encode-utf8": {
"version": "1.0.3"
},
- "end-of-stream": {
- "version": "1.4.4",
- "peer": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
"entities": {
"version": "1.1.2"
},
- "error-ex": {
- "version": "1.3.2",
- "peer": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
"escape-string-regexp": {
"version": "1.0.5"
},
@@ -42991,16 +42538,6 @@
"extend": {
"version": "3.0.2"
},
- "extract-zip": {
- "version": "2.0.1",
- "peer": true,
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- }
- },
"extsprintf": {
"version": "1.3.0"
},
@@ -43010,13 +42547,6 @@
"fast-json-stable-stringify": {
"version": "2.1.0"
},
- "fd-slicer": {
- "version": "1.1.0",
- "peer": true,
- "requires": {
- "pend": "~1.2.0"
- }
- },
"find-up": {
"version": "4.1.0",
"requires": {
@@ -43024,9 +42554,6 @@
"path-exists": "^4.0.0"
}
},
- "flatted": {
- "version": "3.2.7"
- },
"forever-agent": {
"version": "0.6.1"
},
@@ -43038,10 +42565,6 @@
"mime-types": "^2.1.12"
}
},
- "fs-constants": {
- "version": "1.0.0",
- "peer": true
- },
"fs-extra": {
"version": "7.0.1",
"requires": {
@@ -43050,10 +42573,6 @@
"universalify": "^0.1.0"
}
},
- "fs.realpath": {
- "version": "1.0.0",
- "peer": true
- },
"function-bind": {
"version": "1.1.1"
},
@@ -43066,31 +42585,12 @@
"get-caller-file": {
"version": "2.0.5"
},
- "get-stream": {
- "version": "5.2.0",
- "peer": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
"getpass": {
"version": "0.1.7",
"requires": {
"assert-plus": "^1.0.0"
}
},
- "glob": {
- "version": "7.2.3",
- "peer": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
"graceful-fs": {
"version": "4.2.10"
},
@@ -43138,53 +42638,21 @@
"sshpk": "^1.7.0"
}
},
- "https-proxy-agent": {
- "version": "5.0.1",
- "peer": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
"iconv-lite": {
"version": "0.5.2",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "peer": true
- },
"image-size": {
"version": "0.7.5"
},
- "import-fresh": {
- "version": "3.3.0",
- "peer": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "peer": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
"inherits": {
"version": "2.0.4"
},
"intl": {
"version": "1.2.5"
},
- "is-arrayish": {
- "version": "0.2.1",
- "peer": true
- },
"is-core-module": {
"version": "2.10.0",
"requires": {
@@ -43206,10 +42674,6 @@
"isstream": {
"version": "0.1.2"
},
- "js-tokens": {
- "version": "4.0.0",
- "peer": true
- },
"js-yaml": {
"version": "3.14.1",
"requires": {
@@ -43217,16 +42681,9 @@
"esprima": "^4.0.0"
}
},
- "jsbarcode": {
- "version": "3.11.5"
- },
"jsbn": {
"version": "0.1.1"
},
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "peer": true
- },
"json-schema": {
"version": "0.4.0"
},
@@ -43266,10 +42723,6 @@
"web-resource-inliner": "^4.3.1"
}
},
- "lines-and-columns": {
- "version": "1.2.4",
- "peer": true
- },
"locate-path": {
"version": "5.0.0",
"requires": {
@@ -43334,16 +42787,6 @@
"lodash.uniq": {
"version": "4.5.0"
},
- "log4js": {
- "version": "6.8.0",
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- }
- },
"long": {
"version": "4.0.0"
},
@@ -43368,24 +42811,6 @@
"mimer": {
"version": "1.1.1"
},
- "minimatch": {
- "version": "3.1.2",
- "peer": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "mitt": {
- "version": "3.0.0",
- "peer": true
- },
- "mkdirp-classic": {
- "version": "0.5.3",
- "peer": true
- },
- "ms": {
- "version": "2.1.2"
- },
"mysql2": {
"version": "1.7.0",
"requires": {
@@ -43423,13 +42848,6 @@
"nice-try": {
"version": "1.0.5"
},
- "node-fetch": {
- "version": "2.6.7",
- "peer": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
"nodemailer": {
"version": "4.7.0"
},
@@ -43442,13 +42860,6 @@
"oauth-sign": {
"version": "0.9.0"
},
- "once": {
- "version": "1.4.0",
- "peer": true,
- "requires": {
- "wrappy": "1"
- }
- },
"p-limit": {
"version": "2.3.0",
"requires": {
@@ -43464,44 +42875,15 @@
"p-try": {
"version": "2.2.0"
},
- "parent-module": {
- "version": "1.0.1",
- "peer": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "peer": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
"path-exists": {
"version": "4.0.0"
},
- "path-is-absolute": {
- "version": "1.0.1",
- "peer": true
- },
"path-key": {
"version": "2.0.1"
},
"path-parse": {
"version": "1.0.7"
},
- "path-type": {
- "version": "4.0.0",
- "peer": true
- },
- "pend": {
- "version": "1.2.0",
- "peer": true
- },
"performance-now": {
"version": "2.1.0"
},
@@ -43519,65 +42901,15 @@
"source-map-js": "^1.0.2"
}
},
- "progress": {
- "version": "2.0.3",
- "peer": true
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "peer": true
- },
"pseudomap": {
"version": "1.0.2"
},
"psl": {
"version": "1.9.0"
},
- "pump": {
- "version": "3.0.0",
- "peer": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"punycode": {
"version": "2.1.1"
},
- "puppeteer": {
- "version": "19.7.2",
- "peer": true,
- "requires": {
- "cosmiconfig": "8.0.0",
- "https-proxy-agent": "5.0.1",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "puppeteer-core": "19.7.2"
- }
- },
- "puppeteer-cluster": {
- "version": "0.23.0",
- "requires": {
- "debug": "^4.3.3"
- }
- },
- "puppeteer-core": {
- "version": "19.7.2",
- "peer": true,
- "requires": {
- "chromium-bidi": "0.4.4",
- "cross-fetch": "3.1.5",
- "debug": "4.3.4",
- "devtools-protocol": "0.0.1094867",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.11.0"
- }
- },
"qrcode": {
"version": "1.5.1",
"requires": {
@@ -43643,20 +42975,6 @@
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
- "resolve-from": {
- "version": "4.0.0",
- "peer": true
- },
- "rfdc": {
- "version": "1.3.0"
- },
- "rimraf": {
- "version": "3.0.2",
- "peer": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
"safe-buffer": {
"version": "5.2.1"
},
@@ -43716,24 +43034,6 @@
"tweetnacl": "~0.14.0"
}
},
- "streamroller": {
- "version": "3.1.5",
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "8.1.0",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
"strftime": {
"version": "0.10.1"
},
@@ -43766,31 +43066,6 @@
"supports-preserve-symlinks-flag": {
"version": "1.0.0"
},
- "tar-fs": {
- "version": "2.1.1",
- "peer": true,
- "requires": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "tar-stream": {
- "version": "2.2.0",
- "peer": true,
- "requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "through": {
- "version": "2.3.8",
- "peer": true
- },
"tough-cookie": {
"version": "2.5.0",
"requires": {
@@ -43798,10 +43073,6 @@
"punycode": "^2.1.1"
}
},
- "tr46": {
- "version": "0.0.3",
- "peer": true
- },
"tunnel-agent": {
"version": "0.6.0",
"requires": {
@@ -43811,14 +43082,6 @@
"tweetnacl": {
"version": "0.14.5"
},
- "unbzip2-stream": {
- "version": "1.4.3",
- "peer": true,
- "requires": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
"universalify": {
"version": "0.1.2"
},
@@ -43973,18 +43236,6 @@
}
}
},
- "webidl-conversions": {
- "version": "3.0.1",
- "peer": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "peer": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"which": {
"version": "1.3.1",
"requires": {
@@ -44019,18 +43270,6 @@
}
}
},
- "wrappy": {
- "version": "1.0.2",
- "peer": true
- },
- "ws": {
- "version": "8.11.0",
- "peer": true,
- "requires": {}
- },
- "xmldom": {
- "version": "0.6.0"
- },
"xtend": {
"version": "4.0.2"
},
@@ -44062,14 +43301,6 @@
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
- },
- "yauzl": {
- "version": "2.10.0",
- "peer": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
}
}
},
@@ -45128,6 +44359,11 @@
"xmlcreate": {
"version": "1.0.2"
},
+ "xmldom": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
+ "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg=="
+ },
"xtend": {
"version": "1.0.3"
},
@@ -45215,6 +44451,8 @@
},
"yauzl": {
"version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"requires": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
diff --git a/package.json b/package.json
index 30c8039ac..3d0fc4aed 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "salix-back",
- "version": "23.10.01",
+ "version": "23.12.01",
"author": "Verdnatura Levante SL",
"description": "Salix backend",
"license": "GPL-3.0",
@@ -20,6 +20,7 @@
"form-data": "^4.0.0",
"fs-extra": "^5.0.0",
"ftps": "^1.2.0",
+ "gm": "^1.25.0",
"got": "^10.7.0",
"helmet": "^3.21.2",
"i18n": "^0.8.4",
diff --git a/print/package-lock.json b/print/package-lock.json
deleted file mode 100644
index b8fd28928..000000000
--- a/print/package-lock.json
+++ /dev/null
@@ -1,4682 +0,0 @@
-{
- "name": "vn-print",
- "version": "2.0.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "vn-print",
- "version": "2.0.0",
- "license": "GPL-3.0",
- "dependencies": {
- "fs-extra": "^7.0.1",
- "intl": "^1.2.5",
- "js-yaml": "^3.13.1",
- "jsbarcode": "^3.11.5",
- "jsonexport": "^3.2.0",
- "juice": "^5.2.0",
- "log4js": "^6.7.0",
- "mysql2": "^1.7.0",
- "nodemailer": "^4.7.0",
- "puppeteer-cluster": "^0.23.0",
- "qrcode": "^1.4.2",
- "strftime": "^0.10.0",
- "vue": "^2.6.10",
- "vue-i18n": "^8.15.0",
- "vue-server-renderer": "^2.6.10",
- "xmldom": "^0.6.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "peer": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "peer": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
- "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==",
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@types/node": {
- "version": "18.14.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz",
- "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==",
- "optional": true,
- "peer": true
- },
- "node_modules/@types/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz",
- "integrity": "sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q==",
- "dependencies": {
- "@babel/parser": "^7.18.4",
- "postcss": "^8.4.14",
- "source-map": "^0.6.1"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "peer": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "peer": true
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "peer": true
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "peer": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "peer": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "peer": true,
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "peer": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cheerio": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
- "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==",
- "dependencies": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash.assignin": "^4.0.9",
- "lodash.bind": "^4.1.4",
- "lodash.defaults": "^4.0.1",
- "lodash.filter": "^4.4.0",
- "lodash.flatten": "^4.2.0",
- "lodash.foreach": "^4.3.0",
- "lodash.map": "^4.4.0",
- "lodash.merge": "^4.4.0",
- "lodash.pick": "^4.2.1",
- "lodash.reduce": "^4.4.0",
- "lodash.reject": "^4.4.0",
- "lodash.some": "^4.4.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "peer": true
- },
- "node_modules/chromium-bidi": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.4.tgz",
- "integrity": "sha512-4BX5cSaponuvVT1+SbLYTOAgDoVtX/Khoc9UsbFJ/AsPVUeFAM3RiIDFI6XFhLYMi9WmVJqh1ZH+dRpNKkKwiQ==",
- "peer": true,
- "dependencies": {
- "mitt": "3.0.0"
- },
- "peerDependencies": {
- "devtools-protocol": "*"
- }
- },
- "node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "peer": true
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
- },
- "node_modules/cosmiconfig": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz",
- "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==",
- "peer": true,
- "dependencies": {
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/cosmiconfig/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "peer": true
- },
- "node_modules/cosmiconfig/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "peer": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/cross-fetch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
- "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
- "peer": true,
- "dependencies": {
- "node-fetch": "2.6.7"
- }
- },
- "node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==",
- "dependencies": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "node_modules/css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
- "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/datauri": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz",
- "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==",
- "dependencies": {
- "image-size": "^0.7.3",
- "mimer": "^1.0.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/date-format": {
- "version": "4.0.14",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
- "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/denque": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/devtools-protocol": {
- "version": "0.0.1094867",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz",
- "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==",
- "peer": true
- },
- "node_modules/dijkstrajs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
- "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg=="
- },
- "node_modules/dom-serializer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
- "dependencies": {
- "domelementtype": "^1.3.0",
- "entities": "^1.1.1"
- }
- },
- "node_modules/domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
- },
- "node_modules/domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "dependencies": {
- "domelementtype": "1"
- }
- },
- "node_modules/domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==",
- "dependencies": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/encode-utf8": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
- "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "peer": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "peer": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "peer": true,
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "peer": true,
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "peer": true
- },
- "node_modules/fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "peer": true
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/generate-function": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
- "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
- "dependencies": {
- "is-property": "^1.0.2"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "peer": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
- },
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/hash-sum": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
- "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "dependencies": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- }
- },
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "peer": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
- "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "peer": true
- },
- "node_modules/image-size": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz",
- "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==",
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "peer": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "peer": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/intl": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
- "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw=="
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "peer": true
- },
- "node_modules/is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "peer": true
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbarcode": {
- "version": "3.11.5",
- "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.11.5.tgz",
- "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==",
- "bin": {
- "auto.js": "bin/barcodes/CODE128/auto.js",
- "Barcode.js": "bin/barcodes/Barcode.js",
- "barcodes": "bin/barcodes",
- "canvas.js": "bin/renderers/canvas.js",
- "checksums.js": "bin/barcodes/MSI/checksums.js",
- "codabar": "bin/barcodes/codabar",
- "CODE128": "bin/barcodes/CODE128",
- "CODE128_AUTO.js": "bin/barcodes/CODE128/CODE128_AUTO.js",
- "CODE128.js": "bin/barcodes/CODE128/CODE128.js",
- "CODE128A.js": "bin/barcodes/CODE128/CODE128A.js",
- "CODE128B.js": "bin/barcodes/CODE128/CODE128B.js",
- "CODE128C.js": "bin/barcodes/CODE128/CODE128C.js",
- "CODE39": "bin/barcodes/CODE39",
- "constants.js": "bin/barcodes/ITF/constants.js",
- "defaults.js": "bin/options/defaults.js",
- "EAN_UPC": "bin/barcodes/EAN_UPC",
- "EAN.js": "bin/barcodes/EAN_UPC/EAN.js",
- "EAN13.js": "bin/barcodes/EAN_UPC/EAN13.js",
- "EAN2.js": "bin/barcodes/EAN_UPC/EAN2.js",
- "EAN5.js": "bin/barcodes/EAN_UPC/EAN5.js",
- "EAN8.js": "bin/barcodes/EAN_UPC/EAN8.js",
- "encoder.js": "bin/barcodes/EAN_UPC/encoder.js",
- "ErrorHandler.js": "bin/exceptions/ErrorHandler.js",
- "exceptions": "bin/exceptions",
- "exceptions.js": "bin/exceptions/exceptions.js",
- "fixOptions.js": "bin/help/fixOptions.js",
- "GenericBarcode": "bin/barcodes/GenericBarcode",
- "getOptionsFromElement.js": "bin/help/getOptionsFromElement.js",
- "getRenderProperties.js": "bin/help/getRenderProperties.js",
- "help": "bin/help",
- "index.js": "bin/renderers/index.js",
- "index.tmp.js": "bin/barcodes/index.tmp.js",
- "ITF": "bin/barcodes/ITF",
- "ITF.js": "bin/barcodes/ITF/ITF.js",
- "ITF14.js": "bin/barcodes/ITF/ITF14.js",
- "JsBarcode.js": "bin/JsBarcode.js",
- "linearizeEncodings.js": "bin/help/linearizeEncodings.js",
- "merge.js": "bin/help/merge.js",
- "MSI": "bin/barcodes/MSI",
- "MSI.js": "bin/barcodes/MSI/MSI.js",
- "MSI10.js": "bin/barcodes/MSI/MSI10.js",
- "MSI1010.js": "bin/barcodes/MSI/MSI1010.js",
- "MSI11.js": "bin/barcodes/MSI/MSI11.js",
- "MSI1110.js": "bin/barcodes/MSI/MSI1110.js",
- "object.js": "bin/renderers/object.js",
- "options": "bin/options",
- "optionsFromStrings.js": "bin/help/optionsFromStrings.js",
- "pharmacode": "bin/barcodes/pharmacode",
- "renderers": "bin/renderers",
- "shared.js": "bin/renderers/shared.js",
- "svg.js": "bin/renderers/svg.js",
- "UPC.js": "bin/barcodes/EAN_UPC/UPC.js",
- "UPCE.js": "bin/barcodes/EAN_UPC/UPCE.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "peer": true
- },
- "node_modules/json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
- },
- "node_modules/jsonexport": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/jsonexport/-/jsonexport-3.2.0.tgz",
- "integrity": "sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ==",
- "bin": {
- "jsonexport": "bin/jsonexport.js"
- }
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/juice": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/juice/-/juice-5.2.0.tgz",
- "integrity": "sha512-0l6GZmT3efexyaaay3SchKT5kG311N59TEFP5lfvEy0nz9SNqjx311plJ3b4jze7arsmDsiHQLh/xnAuk0HFTQ==",
- "dependencies": {
- "cheerio": "^0.22.0",
- "commander": "^2.15.1",
- "cross-spawn": "^6.0.5",
- "deep-extend": "^0.6.0",
- "mensch": "^0.3.3",
- "slick": "^1.12.2",
- "web-resource-inliner": "^4.3.1"
- },
- "bin": {
- "juice": "bin/juice"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "peer": true
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA=="
- },
- "node_modules/lodash.assignin": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
- "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg=="
- },
- "node_modules/lodash.bind": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
- "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA=="
- },
- "node_modules/lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
- },
- "node_modules/lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ=="
- },
- "node_modules/lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
- },
- "node_modules/lodash.foreach": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
- "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
- },
- "node_modules/lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q=="
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "node_modules/lodash.pick": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
- "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="
- },
- "node_modules/lodash.reduce": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
- "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw=="
- },
- "node_modules/lodash.reject": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
- "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ=="
- },
- "node_modules/lodash.some": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
- "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ=="
- },
- "node_modules/lodash.template": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
- "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
- "dependencies": {
- "lodash._reinterpolate": "^3.0.0",
- "lodash.templatesettings": "^4.0.0"
- }
- },
- "node_modules/lodash.templatesettings": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
- "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
- "dependencies": {
- "lodash._reinterpolate": "^3.0.0"
- }
- },
- "node_modules/lodash.unescape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
- "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg=="
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
- },
- "node_modules/log4js": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.8.0.tgz",
- "integrity": "sha512-g+V8gZyurIexrOvWQ+AcZsIvuK/lBnx2argejZxL4gVZ4Hq02kUYH6WZOnqxgBml+zzQZYdaEoTN84B6Hzm8Fg==",
- "dependencies": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/mensch": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz",
- "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g=="
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.1.tgz",
- "integrity": "sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g==",
- "bin": {
- "mimer": "bin/mimer"
- },
- "engines": {
- "node": ">= 6.0"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "peer": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mitt": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz",
- "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==",
- "peer": true
- },
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "peer": true
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/mysql2": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz",
- "integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==",
- "dependencies": {
- "denque": "^1.4.1",
- "generate-function": "^2.3.1",
- "iconv-lite": "^0.5.0",
- "long": "^4.0.0",
- "lru-cache": "^5.1.1",
- "named-placeholders": "^1.1.2",
- "seq-queue": "^0.0.5",
- "sqlstring": "^2.3.1"
- },
- "engines": {
- "node": ">= 8.0"
- }
- },
- "node_modules/named-placeholders": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
- "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
- "dependencies": {
- "lru-cache": "^4.1.3"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/named-placeholders/node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/named-placeholders/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
- },
- "node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "peer": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/nodemailer": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz",
- "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "dependencies": {
- "boolbase": "~1.0.0"
- }
- },
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "peer": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "peer": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "peer": true
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "node_modules/pngjs": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
- "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
- "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "peer": true
- },
- "node_modules/pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
- },
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/puppeteer": {
- "version": "19.7.2",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.7.2.tgz",
- "integrity": "sha512-4Lm7Qpe/LU95Svirei/jDLDvR5oMrl9BPGd7HMY5+Q28n+BhvKuW97gKkR+1LlI86bO8J3g8rG/Ll5kv9J1nlQ==",
- "hasInstallScript": true,
- "peer": true,
- "dependencies": {
- "cosmiconfig": "8.0.0",
- "https-proxy-agent": "5.0.1",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "puppeteer-core": "19.7.2"
- },
- "engines": {
- "node": ">=14.1.0"
- }
- },
- "node_modules/puppeteer-cluster": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/puppeteer-cluster/-/puppeteer-cluster-0.23.0.tgz",
- "integrity": "sha512-108terIWDzPrQopmoYSPd5yDoy3FGJ2dNnoGMkGYPs6xtkdhgaECwpfZkzaRToMQPZibUOz0/dSSGgPEdXEhkQ==",
- "dependencies": {
- "debug": "^4.3.3"
- },
- "peerDependencies": {
- "puppeteer": ">=1.5.0"
- }
- },
- "node_modules/puppeteer-core": {
- "version": "19.7.2",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.7.2.tgz",
- "integrity": "sha512-PvI+fXqgP0uGJxkyZcX51bnzjFA73MODZOAv0fSD35yR7tvbqwtMV3/Y+hxQ0AMMwzxkEebP6c7po/muqxJvmQ==",
- "peer": true,
- "dependencies": {
- "chromium-bidi": "0.4.4",
- "cross-fetch": "3.1.5",
- "debug": "4.3.4",
- "devtools-protocol": "0.0.1094867",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.11.0"
- },
- "engines": {
- "node": ">=14.1.0"
- },
- "peerDependencies": {
- "typescript": ">= 4.7.4"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/qrcode": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
- "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
- "dependencies": {
- "dijkstrajs": "^1.0.1",
- "encode-utf8": "^1.0.3",
- "pngjs": "^5.0.0",
- "yargs": "^15.3.1"
- },
- "bin": {
- "qrcode": "bin/qrcode"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "node_modules/resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dependencies": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "peer": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/seq-queue": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
- "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
- },
- "node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/slick": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz",
- "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
- },
- "node_modules/sqlstring": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
- "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/streamroller": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
- "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
- "dependencies": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/streamroller/node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/strftime": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.1.tgz",
- "integrity": "sha512-nVvH6JG8KlXFPC0f8lojLgEsPA18lRpLZ+RrJh/NkQV2tqOgZfbas8gcU8SFgnnqR3rWzZPYu6N2A3xzs/8rQg==",
- "engines": {
- "node": ">=0.2.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "peer": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "peer": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "peer": true
- },
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "peer": true
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
- },
- "node_modules/unbzip2-stream": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
- "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
- "peer": true,
- "dependencies": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/valid-data-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz",
- "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/vue": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",
- "integrity": "sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg==",
- "dependencies": {
- "@vue/compiler-sfc": "2.7.10",
- "csstype": "^3.1.0"
- }
- },
- "node_modules/vue-i18n": {
- "version": "8.27.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.27.2.tgz",
- "integrity": "sha512-QVzn7u2WVH8F7eSKIM00lujC7x1mnuGPaTnDTmB01Hd709jDtB9kYtBqM+MWmp5AJRx3gnqAdZbee9MelqwFBg=="
- },
- "node_modules/vue-server-renderer": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.7.10.tgz",
- "integrity": "sha512-hvlnyTZmDmnI7IpQE5YwIwexPi6yJq8eeNTUgLycPX3uhuEobygAQklHoeVREvwNKcET/MnVOtjF4c7t7mw6CQ==",
- "dependencies": {
- "chalk": "^4.1.2",
- "hash-sum": "^2.0.0",
- "he": "^1.2.0",
- "lodash.template": "^4.5.0",
- "lodash.uniq": "^4.5.0",
- "resolve": "^1.22.0",
- "serialize-javascript": "^6.0.0",
- "source-map": "0.5.6"
- }
- },
- "node_modules/vue-server-renderer/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/vue-server-renderer/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/vue-server-renderer/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/vue-server-renderer/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/vue-server-renderer/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/vue-server-renderer/node_modules/source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/vue-server-renderer/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/web-resource-inliner": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz",
- "integrity": "sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==",
- "dependencies": {
- "async": "^3.1.0",
- "chalk": "^2.4.2",
- "datauri": "^2.0.0",
- "htmlparser2": "^4.0.0",
- "lodash.unescape": "^4.0.1",
- "request": "^2.88.0",
- "safer-buffer": "^2.1.2",
- "valid-data-url": "^2.0.0",
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/web-resource-inliner/node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/web-resource-inliner/node_modules/domhandler": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
- "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
- "dependencies": {
- "domelementtype": "^2.0.1"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/web-resource-inliner/node_modules/htmlparser2": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
- "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^3.0.0",
- "domutils": "^2.0.0",
- "entities": "^2.0.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "peer": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "peer": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
- },
- "node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "peer": true
- },
- "node_modules/ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "peer": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xmldom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
- "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "peer": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- }
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "peer": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "peer": true
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "peer": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
- "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ=="
- },
- "@types/node": {
- "version": "18.14.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz",
- "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==",
- "optional": true,
- "peer": true
- },
- "@types/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@vue/compiler-sfc": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz",
- "integrity": "sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q==",
- "requires": {
- "@babel/parser": "^7.18.4",
- "postcss": "^8.4.14",
- "source-map": "^0.6.1"
- }
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "peer": true,
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
- },
- "async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "peer": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "peer": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "peer": true,
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "peer": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "peer": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "peer": true
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "peer": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cheerio": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
- "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==",
- "requires": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash.assignin": "^4.0.9",
- "lodash.bind": "^4.1.4",
- "lodash.defaults": "^4.0.1",
- "lodash.filter": "^4.4.0",
- "lodash.flatten": "^4.2.0",
- "lodash.foreach": "^4.3.0",
- "lodash.map": "^4.4.0",
- "lodash.merge": "^4.4.0",
- "lodash.pick": "^4.2.1",
- "lodash.reduce": "^4.4.0",
- "lodash.reject": "^4.4.0",
- "lodash.some": "^4.4.0"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "peer": true
- },
- "chromium-bidi": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.4.tgz",
- "integrity": "sha512-4BX5cSaponuvVT1+SbLYTOAgDoVtX/Khoc9UsbFJ/AsPVUeFAM3RiIDFI6XFhLYMi9WmVJqh1ZH+dRpNKkKwiQ==",
- "peer": true,
- "requires": {
- "mitt": "3.0.0"
- }
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "peer": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
- },
- "cosmiconfig": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz",
- "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==",
- "peer": true,
- "requires": {
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "peer": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "peer": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- }
- }
- },
- "cross-fetch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
- "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
- "peer": true,
- "requires": {
- "node-fetch": "2.6.7"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==",
- "requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
- },
- "csstype": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
- "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "datauri": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/datauri/-/datauri-2.0.0.tgz",
- "integrity": "sha512-zS2HSf9pI5XPlNZgIqJg/wCJpecgU/HA6E/uv2EfaWnW1EiTGLfy/EexTIsC9c99yoCOTXlqeeWk4FkCSuO3/g==",
- "requires": {
- "image-size": "^0.7.3",
- "mimer": "^1.0.0"
- }
- },
- "date-format": {
- "version": "4.0.14",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
- "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
- },
- "denque": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
- "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
- },
- "devtools-protocol": {
- "version": "0.0.1094867",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz",
- "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==",
- "peer": true
- },
- "dijkstrajs": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
- "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg=="
- },
- "dom-serializer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
- "requires": {
- "domelementtype": "^1.3.0",
- "entities": "^1.1.1"
- }
- },
- "domelementtype": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
- "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
- },
- "domhandler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
- "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
- "requires": {
- "domelementtype": "1"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==",
- "requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "encode-utf8": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
- "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "peer": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "peer": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "peer": true,
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "peer": true,
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "peer": true
- },
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "peer": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "generate-function": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
- "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
- "requires": {
- "is-property": "^1.0.2"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "peer": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "peer": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
- },
- "hash-sum": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
- "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
- "htmlparser2": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
- "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
- "requires": {
- "domelementtype": "^1.3.1",
- "domhandler": "^2.3.0",
- "domutils": "^1.5.1",
- "entities": "^1.1.1",
- "inherits": "^2.0.1",
- "readable-stream": "^3.1.1"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "peer": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "iconv-lite": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
- "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "peer": true
- },
- "image-size": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz",
- "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g=="
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "peer": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "peer": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "intl": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
- "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw=="
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "peer": true
- },
- "is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "peer": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbarcode": {
- "version": "3.11.5",
- "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.11.5.tgz",
- "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA=="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "peer": true
- },
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
- },
- "jsonexport": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/jsonexport/-/jsonexport-3.2.0.tgz",
- "integrity": "sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ=="
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "juice": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/juice/-/juice-5.2.0.tgz",
- "integrity": "sha512-0l6GZmT3efexyaaay3SchKT5kG311N59TEFP5lfvEy0nz9SNqjx311plJ3b4jze7arsmDsiHQLh/xnAuk0HFTQ==",
- "requires": {
- "cheerio": "^0.22.0",
- "commander": "^2.15.1",
- "cross-spawn": "^6.0.5",
- "deep-extend": "^0.6.0",
- "mensch": "^0.3.3",
- "slick": "^1.12.2",
- "web-resource-inliner": "^4.3.1"
- }
- },
- "lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "peer": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA=="
- },
- "lodash.assignin": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
- "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg=="
- },
- "lodash.bind": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
- "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA=="
- },
- "lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
- },
- "lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ=="
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
- },
- "lodash.foreach": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
- "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
- },
- "lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q=="
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "lodash.pick": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
- "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="
- },
- "lodash.reduce": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
- "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw=="
- },
- "lodash.reject": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
- "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ=="
- },
- "lodash.some": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
- "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ=="
- },
- "lodash.template": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
- "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
- "requires": {
- "lodash._reinterpolate": "^3.0.0",
- "lodash.templatesettings": "^4.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
- "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
- "requires": {
- "lodash._reinterpolate": "^3.0.0"
- }
- },
- "lodash.unescape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
- "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg=="
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
- },
- "log4js": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.8.0.tgz",
- "integrity": "sha512-g+V8gZyurIexrOvWQ+AcZsIvuK/lBnx2argejZxL4gVZ4Hq02kUYH6WZOnqxgBml+zzQZYdaEoTN84B6Hzm8Fg==",
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- }
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "mensch": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz",
- "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g=="
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "mimer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.1.tgz",
- "integrity": "sha512-ye7CWOnSgiX3mqOLJ0bNGxRAULS5a/gzjj6lGSCnRTkbLUhNvt/7dI80b6GZRoaj4CsylcWQzyyKKh1a3CT74g=="
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "peer": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "mitt": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz",
- "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==",
- "peer": true
- },
- "mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "peer": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "mysql2": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz",
- "integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==",
- "requires": {
- "denque": "^1.4.1",
- "generate-function": "^2.3.1",
- "iconv-lite": "^0.5.0",
- "long": "^4.0.0",
- "lru-cache": "^5.1.1",
- "named-placeholders": "^1.1.2",
- "seq-queue": "^0.0.5",
- "sqlstring": "^2.3.1"
- }
- },
- "named-placeholders": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
- "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
- "requires": {
- "lru-cache": "^4.1.3"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
- }
- }
- },
- "nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "peer": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "nodemailer": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz",
- "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw=="
- },
- "nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "requires": {
- "boolbase": "~1.0.0"
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "peer": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "peer": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "peer": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "peer": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "peer": true
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "peer": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "pngjs": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
- "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
- },
- "postcss": {
- "version": "8.4.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
- "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
- "requires": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "peer": true
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "peer": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
- },
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "peer": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "puppeteer": {
- "version": "19.7.2",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.7.2.tgz",
- "integrity": "sha512-4Lm7Qpe/LU95Svirei/jDLDvR5oMrl9BPGd7HMY5+Q28n+BhvKuW97gKkR+1LlI86bO8J3g8rG/Ll5kv9J1nlQ==",
- "peer": true,
- "requires": {
- "cosmiconfig": "8.0.0",
- "https-proxy-agent": "5.0.1",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "puppeteer-core": "19.7.2"
- }
- },
- "puppeteer-cluster": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/puppeteer-cluster/-/puppeteer-cluster-0.23.0.tgz",
- "integrity": "sha512-108terIWDzPrQopmoYSPd5yDoy3FGJ2dNnoGMkGYPs6xtkdhgaECwpfZkzaRToMQPZibUOz0/dSSGgPEdXEhkQ==",
- "requires": {
- "debug": "^4.3.3"
- }
- },
- "puppeteer-core": {
- "version": "19.7.2",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.7.2.tgz",
- "integrity": "sha512-PvI+fXqgP0uGJxkyZcX51bnzjFA73MODZOAv0fSD35yR7tvbqwtMV3/Y+hxQ0AMMwzxkEebP6c7po/muqxJvmQ==",
- "peer": true,
- "requires": {
- "chromium-bidi": "0.4.4",
- "cross-fetch": "3.1.5",
- "debug": "4.3.4",
- "devtools-protocol": "0.0.1094867",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.11.0"
- }
- },
- "qrcode": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
- "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
- "requires": {
- "dijkstrajs": "^1.0.1",
- "encode-utf8": "^1.0.3",
- "pngjs": "^5.0.0",
- "yargs": "^15.3.1"
- }
- },
- "qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "peer": true
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "peer": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "seq-queue": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
- "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="
- },
- "slick": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz",
- "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A=="
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
- },
- "sqlstring": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
- "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
- },
- "sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "streamroller": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
- "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "strftime": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.1.tgz",
- "integrity": "sha512-nVvH6JG8KlXFPC0f8lojLgEsPA18lRpLZ+RrJh/NkQV2tqOgZfbas8gcU8SFgnnqR3rWzZPYu6N2A3xzs/8rQg=="
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
- },
- "tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "peer": true,
- "requires": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "peer": true,
- "requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "peer": true
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "peer": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
- },
- "unbzip2-stream": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
- "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
- "peer": true,
- "requires": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
- "valid-data-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz",
- "integrity": "sha512-dyCZnv3aCey7yfTgIqdZanKl7xWAEEKCbgmR7SKqyK6QT/Z07ROactrgD1eA37C69ODRj7rNOjzKWVPh0EUjBA=="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vue": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",
- "integrity": "sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg==",
- "requires": {
- "@vue/compiler-sfc": "2.7.10",
- "csstype": "^3.1.0"
- }
- },
- "vue-i18n": {
- "version": "8.27.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.27.2.tgz",
- "integrity": "sha512-QVzn7u2WVH8F7eSKIM00lujC7x1mnuGPaTnDTmB01Hd709jDtB9kYtBqM+MWmp5AJRx3gnqAdZbee9MelqwFBg=="
- },
- "vue-server-renderer": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.7.10.tgz",
- "integrity": "sha512-hvlnyTZmDmnI7IpQE5YwIwexPi6yJq8eeNTUgLycPX3uhuEobygAQklHoeVREvwNKcET/MnVOtjF4c7t7mw6CQ==",
- "requires": {
- "chalk": "^4.1.2",
- "hash-sum": "^2.0.0",
- "he": "^1.2.0",
- "lodash.template": "^4.5.0",
- "lodash.uniq": "^4.5.0",
- "resolve": "^1.22.0",
- "serialize-javascript": "^6.0.0",
- "source-map": "0.5.6"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "web-resource-inliner": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.3.4.tgz",
- "integrity": "sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==",
- "requires": {
- "async": "^3.1.0",
- "chalk": "^2.4.2",
- "datauri": "^2.0.0",
- "htmlparser2": "^4.0.0",
- "lodash.unescape": "^4.0.1",
- "request": "^2.88.0",
- "safer-buffer": "^2.1.2",
- "valid-data-url": "^2.0.0",
- "xtend": "^4.0.2"
- },
- "dependencies": {
- "dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- },
- "dependencies": {
- "domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "requires": {
- "domelementtype": "^2.2.0"
- }
- }
- }
- },
- "domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
- },
- "domhandler": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
- "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
- "requires": {
- "domelementtype": "^2.0.1"
- }
- },
- "domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "requires": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- },
- "dependencies": {
- "domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "requires": {
- "domelementtype": "^2.2.0"
- }
- }
- }
- },
- "entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
- },
- "htmlparser2": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
- "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^3.0.0",
- "domutils": "^2.0.0",
- "entities": "^2.0.0"
- }
- }
- }
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "peer": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "peer": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "peer": true
- },
- "ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "peer": true,
- "requires": {}
- },
- "xmldom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz",
- "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg=="
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "peer": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- }
- }
-}
diff --git a/print/templates/email/incoterms-authorization/attachments.json b/print/templates/email/incoterms-authorization/attachments.json
new file mode 100644
index 000000000..9dfd945db
--- /dev/null
+++ b/print/templates/email/incoterms-authorization/attachments.json
@@ -0,0 +1,6 @@
+[
+ {
+ "filename": "incoterms-authorization.pdf",
+ "component": "incoterms-authorization"
+ }
+]
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-nd/attachments.json b/print/templates/email/letter-debtor-nd/attachments.json
new file mode 100644
index 000000000..1e21ea343
--- /dev/null
+++ b/print/templates/email/letter-debtor-nd/attachments.json
@@ -0,0 +1,6 @@
+[
+ {
+ "filename": "letter-debtor.pdf",
+ "component": "letter-debtor"
+ }
+]
\ No newline at end of file
diff --git a/print/templates/email/letter-debtor-st/attachments.json b/print/templates/email/letter-debtor-st/attachments.json
new file mode 100644
index 000000000..1e21ea343
--- /dev/null
+++ b/print/templates/email/letter-debtor-st/attachments.json
@@ -0,0 +1,6 @@
+[
+ {
+ "filename": "letter-debtor.pdf",
+ "component": "letter-debtor"
+ }
+]
\ No newline at end of file
diff --git a/print/templates/reports/balance-compensation/balance-compensation.html b/print/templates/reports/balance-compensation/balance-compensation.html
index d1a2788ed..c7448eeb9 100644
--- a/print/templates/reports/balance-compensation/balance-compensation.html
+++ b/print/templates/reports/balance-compensation/balance-compensation.html
@@ -17,8 +17,8 @@
{{$t('Agree') | uppercase}}
- {{$t('Date')}} {{client.payed | date('%d-%m-%Y')}} {{$t('Compensate')}} {{client.amountPaid}} €
- {{$t('From client')}} {{client.name}} {{$t('Against the balance of')}}: {{client.invoiceFk}}.
+ {{$t('Date')}} {{formatDate(receipt.payed, '%d-%m-%Y')}} {{$t('Compensate')}} {{receipt.amountPaid}} €
+ {{$t('From client')}} {{client.name}} {{$t('Against the balance of')}}: {{receipt.description}}.
{{$t('Reception')}} administracion@verdnatura.es
diff --git a/print/templates/reports/balance-compensation/balance-compensation.js b/print/templates/reports/balance-compensation/balance-compensation.js
index bae7c5c3c..c2c2e9288 100644
--- a/print/templates/reports/balance-compensation/balance-compensation.js
+++ b/print/templates/reports/balance-compensation/balance-compensation.js
@@ -1,12 +1,31 @@
const vnReport = require('../../../core/mixins/vn-report.js');
+const app = require('vn-loopback/server/server');
module.exports = {
name: 'balance-compensation',
mixins: [vnReport],
async serverPrefetch() {
- this.client = await this.findOneFromDef('client', [this.id]);
- this.checkMainEntity(this.client);
- this.company = await this.findOneFromDef('company', [this.id]);
+ this.receipt = await app.models.Receipt.findOne({
+ fields: ['amountPaid', 'payed', 'clientFk', 'companyFk', 'description'],
+ include: [
+ {
+ relation: 'client',
+ scope: {
+ fields: ['name', 'street', 'fi', 'city'],
+ }
+ }, {
+ relation: 'supplier',
+ scope: {
+ fields: ['name', 'street', 'nif', 'city'],
+ }
+ }
+ ],
+ where: {id: this.id}
+ });
+ this.client = this.receipt.client();
+ this.company = this.receipt.supplier();
+
+ this.checkMainEntity(this.receipt);
},
props: {
id: {
diff --git a/print/templates/reports/balance-compensation/sql/client.sql b/print/templates/reports/balance-compensation/sql/client.sql
deleted file mode 100644
index c3679b68a..000000000
--- a/print/templates/reports/balance-compensation/sql/client.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-SELECT
- c.name,
- c.socialName,
- c.street,
- c.fi,
- c.city,
- r.invoiceFk,
- r.amountPaid,
- r.payed
- FROM client c
- JOIN receipt r ON r.clientFk = c.id
- WHERE r.id = ?
diff --git a/print/templates/reports/balance-compensation/sql/company.sql b/print/templates/reports/balance-compensation/sql/company.sql
deleted file mode 100644
index e61228a10..000000000
--- a/print/templates/reports/balance-compensation/sql/company.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-SELECT
- s.name,
- s.nif,
- s.street,
- s.city
- FROM supplier s
- JOIN receipt r ON r.companyFk = s.id
- WHERE r.id = ?;
\ No newline at end of file
diff --git a/print/templates/reports/expedition-pallet-label/expedition-pallet-label.js b/print/templates/reports/expedition-pallet-label/expedition-pallet-label.js
index 88645309d..d2fa59612 100644
--- a/print/templates/reports/expedition-pallet-label/expedition-pallet-label.js
+++ b/print/templates/reports/expedition-pallet-label/expedition-pallet-label.js
@@ -22,6 +22,7 @@ module.exports = {
this.labelsData = await this.rawSqlFromDef('labelData', this.id);
this.username = await this.findOneFromDef('username', this.userFk);
this.labelData = this.labelsData[0];
+ this.checkMainEntity(this.labelData);
let QRdata = JSON.stringify({
company: 'vnl',
@@ -32,7 +33,6 @@ module.exports = {
});
this.QR = await this.getQR(QRdata);
- this.checkMainEntity(this.labelsData);
},
methods: {
getQR(id) {
diff --git a/print/templates/reports/extra-community/extra-community.html b/print/templates/reports/extra-community/extra-community.html
index cd61a4f4d..3153b6b03 100644
--- a/print/templates/reports/extra-community/extra-community.html
+++ b/print/templates/reports/extra-community/extra-community.html
@@ -51,7 +51,7 @@
{{entry.supplierName}} |
{{entry.reference}} |
{{entry.volumeKg | number($i18n.locale)}} |
- {{entry.loadedKg | number($i18n.locale)}} |
+ {{entry.loadedkg | number($i18n.locale)}} |
{{entry.stickers}} |
diff --git a/print/templates/reports/extra-community/extra-community.js b/print/templates/reports/extra-community/extra-community.js
index 9941faa35..5d875d78f 100755
--- a/print/templates/reports/extra-community/extra-community.js
+++ b/print/templates/reports/extra-community/extra-community.js
@@ -1,11 +1,12 @@
const vnReport = require('../../../core/mixins/vn-report.js');
-const db = require(`vn-print/core/database`);
+const app = require('vn-loopback/server/server');
module.exports = {
name: 'extra-community',
mixins: [vnReport],
async serverPrefetch() {
const args = {
+ search: this.search,
landedTo: this.landedEnd,
shippedFrom: this.shippedStart,
continent: this.continent,
@@ -17,76 +18,24 @@ module.exports = {
ref: this.ref,
cargoSupplierFk: this.cargoSupplierFk
};
-
- const travels = await this.fetchTravels(args);
- this.checkMainEntity(travels);
- const travelIds = travels.map(travel => travel.id);
- const entries = await this.rawSqlFromDef('entries', [travelIds]);
-
- const map = new Map();
- for (let travel of travels)
- map.set(travel.id, travel);
-
- for (let entry of entries) {
- const travel = map.get(entry.travelFk);
- if (!travel.entries) travel.entries = [];
- travel.entries.push(entry);
- }
-
- this.travels = travels;
+ const ctx = {args: args};
+ this.travels = await app.models.Travel.extraCommunityFilter(ctx, this.filter);
},
computed: {
landedEnd: function() {
if (!this.landedTo) return;
- return formatDate(this.landedTo, '%Y-%m-%d');
+ return this.formatDate(this.landedTo, '%Y-%m-%d');
},
shippedStart: function() {
if (!this.shippedFrom) return;
- return formatDate(this.shippedFrom, '%Y-%m-%d');
+ return this.formatDate(this.shippedFrom, '%Y-%m-%d');
}
},
methods: {
- fetchTravels(args) {
- const where = db.buildWhere(args, (key, value) => {
- switch (key) {
- case 'shippedFrom':
- return `t.shipped >= ${value}`;
- case 'landedTo':
- return `t.landed <= ${value}`;
- case 'continent':
- return `cnt.code = ${value}`;
- case 'ref':
- return {'t.ref': {like: `%${value}%`}};
- case 'id':
- return `t.id = ${value}`;
- case 'agencyModeFk':
- return `am.id = ${value}`;
- case 'warehouseOutFk':
- return `wo.id = ${value}`;
- case 'warehouseInFk':
- return `w.id = ${value}`;
- case 'cargoSupplierFk':
- return `s.id = ${value}`;
- }
- });
-
- let query = this.getSqlFromDef('travels');
- query = db.merge(query, where);
- query = db.merge(query, 'GROUP BY t.id');
- query = db.merge(query, `
- ORDER BY
- shipped ASC,
- landed ASC,
- travelFk,
- loadPriority,
- agencyModeFk,
- evaNotes
- `);
-
- return this.rawSql(query);
- },
},
props: [
+ 'filter',
+ 'search',
'landedTo',
'shippedFrom',
'continent',
diff --git a/print/templates/reports/extra-community/sql/entries.sql b/print/templates/reports/extra-community/sql/entries.sql
deleted file mode 100644
index 84dc497c0..000000000
--- a/print/templates/reports/extra-community/sql/entries.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-SELECT
- e.id,
- e.travelFk,
- e.reference,
- s.name AS supplierName,
- SUM(b.stickers) AS stickers,
- CAST(SUM(b.weight * b.stickers) as DECIMAL(10,0)) as loadedKg,
- CAST(SUM(vc.aerealVolumetricDensity * b.stickers * IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000) as DECIMAL(10,0)) as volumeKg
- FROM travel t
- JOIN entry e ON e.travelFk = t.id
- JOIN buy b ON b.entryFk = e.id
- JOIN packaging pkg ON pkg.id = b.packageFk
- JOIN item i ON i.id = b.itemFk
- JOIN itemType it ON it.id = i.typeFk
- JOIN supplier s ON s.id = e.supplierFk
- JOIN vn.volumeConfig vc
- WHERE t.id IN(?)
- GROUP BY e.id
diff --git a/print/templates/reports/extra-community/sql/travels.sql b/print/templates/reports/extra-community/sql/travels.sql
deleted file mode 100644
index b0987c330..000000000
--- a/print/templates/reports/extra-community/sql/travels.sql
+++ /dev/null
@@ -1,23 +0,0 @@
-SELECT
- t.id,
- t.ref,
- t.shipped,
- t.landed,
- t.kg,
- am.id AS agencyModeFk,
- SUM(b.stickers) AS stickers,
- CAST(SUM(b.weight * b.stickers) as DECIMAL(10,0)) as loadedKg,
- CAST(SUM(vc.aerealVolumetricDensity * b.stickers * IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000) as DECIMAL(10,0)) as volumeKg
-FROM travel t
- JOIN volumeConfig vc
- LEFT JOIN supplier s ON s.id = t.cargoSupplierFk
- LEFT JOIN entry e ON e.travelFk = t.id
- LEFT JOIN buy b ON b.entryFk = e.id
- LEFT JOIN packaging pkg ON pkg.id = b.packageFk
- LEFT JOIN item i ON i.id = b.itemFk
- LEFT JOIN itemType it ON it.id = i.typeFk
- JOIN warehouse w ON w.id = t.warehouseInFk
- JOIN warehouse wo ON wo.id = t.warehouseOutFk
- JOIN country c ON c.id = wo.countryFk
- LEFT JOIN continent cnt ON cnt.id = c.continentFk
- JOIN agencyMode am ON am.id = t.agencyModeFk
\ No newline at end of file
diff --git a/print/templates/reports/invoice/invoice.js b/print/templates/reports/invoice/invoice.js
index eaf17527d..b135e152b 100755
--- a/print/templates/reports/invoice/invoice.js
+++ b/print/templates/reports/invoice/invoice.js
@@ -11,7 +11,8 @@ module.exports = {
this.client = await this.findOneFromDef('client', [this.reference]);
this.taxes = await this.rawSqlFromDef(`taxes`, [this.reference]);
this.hasIntrastat = await this.findValueFromDef(`hasIntrastat`, [this.reference]);
- this.intrastat = await this.rawSqlFromDef(`intrastat`, [this.reference, this.reference, this.reference, this.reference]);
+ this.intrastat = await this.rawSqlFromDef(`intrastat`,
+ [this.reference, this.reference, this.reference, this.reference]);
this.rectified = await this.rawSqlFromDef(`rectified`, [this.reference]);
this.hasIncoterms = await this.findValueFromDef(`hasIncoterms`, [this.reference]);