diff --git a/dump.rdb b/dump.rdb
new file mode 100644
index 0000000..f05e3b0
Binary files /dev/null and b/dump.rdb differ
diff --git a/package.json b/package.json
index c09d894..148c7b6 100644
--- a/package.json
+++ b/package.json
@@ -55,6 +55,7 @@
"numeral": "^2.0.6",
"passport": "^0.4.0",
"passport-jwt": "^4.0.0",
+ "pdf-creator-node": "^2.3.4",
"pm2": "^5.1.0",
"redis": "^3.1.2",
"sequelize": "^6.6.5",
diff --git a/src/modules/inventory/stockCorrection/controller.js b/src/modules/inventory/stockCorrection/controller.js
index 90b5add..2b563e7 100644
--- a/src/modules/inventory/stockCorrection/controller.js
+++ b/src/modules/inventory/stockCorrection/controller.js
@@ -1,4 +1,6 @@
const httpStatus = require('http-status');
+const fs = require('fs');
+const pdf = require('pdf-creator-node');
const catchAsync = require('@src/utils/catchAsync');
const apiServices = require('./services/apis');
@@ -164,6 +166,23 @@ const deleteFormRejectByToken = catchAsync(async (req, res) => {
res.status(httpStatus.OK).send({ data: stockCorrection, meta: { projectName: project.name } });
});
+const generatePdf = catchAsync(async (req, res) => {
+ const {
+ currentTenantDatabase,
+ params: { stockCorrectionId },
+ } = req;
+ const {document, options} = await new apiServices.GeneratePdf(currentTenantDatabase, stockCorrectionId).call();
+
+ pdf.create(document, options).then((stream) => {
+ const file = fs.createReadStream(stream.path);
+ const stat = fs.statSync(stream.path);
+ res.setHeader('Content-Length', stat.size);
+ res.setHeader('Content-Type', 'application/pdf');
+ res.setHeader('Content-Disposition', `attachment; filename=stock-correction.pdf`);
+ return file.pipe(res);
+ });
+});
+
module.exports = {
findAll,
findOne,
@@ -178,4 +197,5 @@ module.exports = {
deleteFormApproveByToken,
deleteFormReject,
deleteFormRejectByToken,
+ generatePdf,
};
diff --git a/src/modules/inventory/stockCorrection/models/stockCorrectionItem.model.js b/src/modules/inventory/stockCorrection/models/stockCorrectionItem.model.js
index 67f65a7..fdc48f0 100644
--- a/src/modules/inventory/stockCorrection/models/stockCorrectionItem.model.js
+++ b/src/modules/inventory/stockCorrection/models/stockCorrectionItem.model.js
@@ -5,7 +5,6 @@ module.exports = (sequelize, DataTypes, projectCode) => {
class StockCorrectionItem extends Model {
static associate({ [projectCode]: models }) {
this.belongsTo(models.StockCorrection, { as: 'stockCorrection', onUpdate: 'CASCADE', onDelete: 'CASCADE' });
- this.belongsTo(models.Allocation, { as: 'allocation', onDelete: 'RESTRICT' });
this.belongsTo(models.Item, { as: 'item', onUpdate: 'RESTRICT', onDelete: 'RESTRICT' });
}
@@ -20,13 +19,6 @@ module.exports = (sequelize, DataTypes, projectCode) => {
type: DataTypes.INTEGER.UNSIGNED,
allowNull: false,
},
- initialStock: {
- type: DataTypes.DECIMAL,
- allowNull: true,
- get() {
- return parseFloat(this.getDataValue('initialStock'));
- },
- },
quantity: {
type: DataTypes.DECIMAL,
allowNull: false,
@@ -34,13 +26,6 @@ module.exports = (sequelize, DataTypes, projectCode) => {
return parseFloat(this.getDataValue('quantity'));
},
},
- finalStock: {
- type: DataTypes.DECIMAL,
- allowNull: true,
- get() {
- return parseFloat(this.getDataValue('finalStock'));
- },
- },
expiryDate: {
type: DataTypes.DATE,
allowNull: true,
@@ -69,9 +54,6 @@ module.exports = (sequelize, DataTypes, projectCode) => {
type: DataTypes.STRING,
allowNull: true,
},
- allocationId: {
- type: DataTypes.INTEGER,
- },
},
{
hooks: {},
diff --git a/src/modules/inventory/stockCorrection/routes.js b/src/modules/inventory/stockCorrection/routes.js
index c455180..c0948b6 100644
--- a/src/modules/inventory/stockCorrection/routes.js
+++ b/src/modules/inventory/stockCorrection/routes.js
@@ -113,4 +113,13 @@ router
controller.updateForm
);
+// ADD WATERMARK ON REJECTED STOCK-CORRECTION PDF
+router
+ .route('/pdf/:stockCorrectionId')
+ .get(
+ celebrate(requestValidations.requireAuth),
+ celebrate(requestValidations.requireStockCorrectionId),
+ controller.generatePdf
+ );
+
module.exports = router;
diff --git a/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.js b/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.js
new file mode 100644
index 0000000..123871f
--- /dev/null
+++ b/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.js
@@ -0,0 +1,84 @@
+const fs = require('fs');
+const httpStatus = require('http-status');
+const ApiError = require('@src/utils/ApiError');
+
+class GeneratePdf {
+ constructor(tenantDatabase, stockCorrectionId) {
+ this.tenantDatabase = tenantDatabase;
+ this.stockCorrectionId = stockCorrectionId;
+ }
+
+ async call() {
+ let items = [];
+ let templatePath = 'stockCorrection';
+
+ const stockCorrection = await this.tenantDatabase.StockCorrection.findOne({
+ where: {
+ id: this.stockCorrectionId,
+ },
+ include: [
+ {
+ model: this.tenantDatabase.Form,
+ as: 'form',
+ include: [
+ { model: this.tenantDatabase.User, as: 'createdByUser' },
+ { model: this.tenantDatabase.User, as: 'requestApprovalToUser' },
+ ],
+ },
+ { model: this.tenantDatabase.Warehouse, as: 'warehouse' },
+ {
+ model: this.tenantDatabase.StockCorrectionItem,
+ as: 'items',
+ include: [
+ { model: this.tenantDatabase.Item, as: 'item', include: [{ model: this.tenantDatabase.ItemUnit, as: 'units' }] },
+ ],
+ },
+ ],
+ });
+ if (!stockCorrection) {
+ throw new ApiError(httpStatus.NOT_FOUND, 'Stock correction is not exist');
+ }
+
+ const date = new Date(stockCorrection.form.date).toLocaleDateString('id', { dateStyle: 'long' });
+ stockCorrection.items.forEach((e) => {
+ let obj = {};
+ obj.item = e.item.name;
+ obj.stockDatabase = parseInt(e.item.stock);
+ obj.stockCorrectionQty = e.quantity;
+ obj.balance = parseInt(e.item.stock) - e.quantity;
+ items.push(obj);
+ });
+
+ if (stockCorrection.form.approvalStatus === 0) {
+ templatePath = 'stockCorrectionWatermarked';
+ }
+
+ const html = fs.readFileSync(`src/modules/inventory/stockCorrection/templates/${templatePath}.html`, 'utf-8');
+ const options = {
+ height: '297mm',
+ width: '210mm',
+ orientation: 'portrait',
+ localUrlAccess: true,
+ };
+
+ const document = {
+ html,
+ data: {
+ date,
+ formNumber: stockCorrection.form.number,
+ warehouse: stockCorrection.warehouse.name,
+ address: stockCorrection.warehouse.address,
+ phone: stockCorrection.warehouse.phone,
+ items,
+ createdBy: stockCorrection.form.createdByUser?.name,
+ approveBy: stockCorrection.form.requestApprovalToUser?.name,
+ },
+ path: './stock-correction.pdf',
+ type: 'stream',
+ };
+
+ return {document, options}
+ }
+}
+
+module.exports = GeneratePdf;
diff --git a/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.test.js b/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.test.js
new file mode 100644
index 0000000..f6effcc
--- /dev/null
+++ b/src/modules/inventory/stockCorrection/services/apis/GeneratePdf.test.js
@@ -0,0 +1,27 @@
+const httpStatus = require('http-status');
+const ApiError = require('@src/utils/ApiError');
+const tenantDatabase = require('@src/models').tenant;
+const GeneratePdf = require('./GeneratePdf');
+
+describe('Stock Correction - Generate Pdf', () => {
+ describe('validations', () => {
+ it('throw error when stock correction is not exist', async () => {
+ await expect(async () => {
+ await new GeneratePdf(tenantDatabase, (stockCorrectionId = 'invalid-id')).call();
+ }).rejects.toThrow(new ApiError(httpStatus.NOT_FOUND, 'Stock correction is not exist'));
+ });
+ });
+
+ describe('success', () => {
+ let options;
+ it('Pdf Generated', async () => {
+ ({ options } = await new GeneratePdf(tenantDatabase, 1).call());
+ expect(options).toEqual({
+ height: '297mm',
+ width: '210mm',
+ orientation: 'portrait',
+ localUrlAccess: true,
+ });
+ });
+ });
+});
diff --git a/src/modules/inventory/stockCorrection/services/apis/index.js b/src/modules/inventory/stockCorrection/services/apis/index.js
index 4093275..6bec9d4 100644
--- a/src/modules/inventory/stockCorrection/services/apis/index.js
+++ b/src/modules/inventory/stockCorrection/services/apis/index.js
@@ -11,6 +11,7 @@ const DeleteFormRequest = require('./DeleteFormRequest');
const FindAll = require('./FindAll');
const FindOne = require('./FindOne');
const UpdateForm = require('./UpdateForm');
+const GeneratePdf = require('./GeneratePdf');
module.exports = {
CreateFormRequest,
@@ -26,4 +27,5 @@ module.exports = {
FindAll,
FindOne,
UpdateForm,
+ GeneratePdf,
};
diff --git a/src/modules/inventory/stockCorrection/templates/stockCorrection.html b/src/modules/inventory/stockCorrection/templates/stockCorrection.html
new file mode 100644
index 0000000..30b6769
--- /dev/null
+++ b/src/modules/inventory/stockCorrection/templates/stockCorrection.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ Stock Correction
+
+
+
+

+
+
Stock Correction
+
PT.GANESHA MANDIRI BHAKTI
+
Jln. Musi No 21 Tegalsari Surabaya
+
Phone : (021)-29339383
+
+
+
+
+
+
Date : {{date}}
+
Form Number : {{formNumber}}
+
+
+
Warehouse : {{warehouse}}
+
Addrress : {{address}}
+
Phone Number : {{phone}}
+
+
+
+
+
+ | Item |
+ Stock Database |
+ Stock Correction |
+ Balance |
+
+
+ {{#each items}}
+ | {{this.item}} |
+ {{this.stockDatabase}} |
+ {{this.stockCorrectionQty}} |
+ {{this.balance}} |
+ {{/each}}
+
+
+
+
+
+
CreatedBy
+
{{createdBy}}
+
+
+
ApprovedBy
+
{{approveBy}}
+
+
+
+
diff --git a/src/modules/inventory/stockCorrection/templates/stockCorrectionWatermarked.html b/src/modules/inventory/stockCorrection/templates/stockCorrectionWatermarked.html
new file mode 100644
index 0000000..692298e
--- /dev/null
+++ b/src/modules/inventory/stockCorrection/templates/stockCorrectionWatermarked.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ Stock Correction
+
+
+ Cancelled
+
+

+
+
Stock Correction
+
PT.GANESHA MANDIRI BHAKTI
+
Jln. Musi No 21 Tegalsari Surabaya
+
Phone : (021)-29339383
+
+
+
+
+
+
Date : {{date}}
+
Form Number : {{formNumber}}
+
+
+
Warehouse : {{warehouse}}
+
Addrress : {{address}}
+
Phone Number : {{phone}}
+
+
+
+
+
+ | Item |
+ Stock Database |
+ Stock Correction |
+ Balance |
+
+
+ {{#each items}}
+ | {{this.item}} |
+ {{this.stockDatabase}} |
+ {{this.stockCorrectionQty}} |
+ {{this.balance}} |
+ {{/each}}
+
+
+
+
+
+
CreatedBy
+
{{createdBy}}
+
+
+
ApprovedBy
+
{{approveBy}}
+
+
+
+
diff --git a/yarn.lock b/yarn.lock
index 521042d..cb76fea 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2738,7 +2738,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.2:
+concat-stream@^1.5.2, concat-stream@^1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -3301,6 +3301,11 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+es6-promise@^4.0.3:
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -3731,6 +3736,16 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+extract-zip@^1.6.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
+ integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
+ dependencies:
+ concat-stream "^1.6.2"
+ debug "^2.6.9"
+ mkdirp "^0.5.4"
+ yauzl "^2.10.0"
+
extract-zip@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@@ -3997,6 +4012,15 @@ fs-constants@^1.0.0:
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+fs-extra@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+ integrity sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -4239,6 +4263,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+graceful-fs@^4.1.9:
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+ integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
@@ -4339,6 +4368,14 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hasha@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+ integrity sha512-jZ38TU/EBiGKrmyTNNZgnvCZHNowiRI4+w/I9noMlekHTZH3KyGgvJLmhSgykeAQ9j2SYPDosM0Bg3wHfzibAQ==
+ dependencies:
+ is-stream "^1.0.1"
+ pinkie-promise "^2.0.0"
+
helmet@^4.1.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/helmet/-/helmet-4.6.0.tgz#579971196ba93c5978eb019e4e8ec0e50076b4df"
@@ -4370,6 +4407,13 @@ html-pdf-node@^1.0.7:
handlebars "^4.7.6"
puppeteer "^5.1.0"
+html-pdf@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/html-pdf/-/html-pdf-3.0.1.tgz#5a8f7b6bd49d624345938952f24b47e4a08f14db"
+ integrity sha512-CKNSacmQn+CKJ2GNfT4UYKaPy/T3Ndj82yJ2aju/UPmnvWNjIpyumqRqkFU0mwT6BTHBFhFGTnXN8dBn4Bdj0Q==
+ optionalDependencies:
+ phantomjs-prebuilt "^2.1.16"
+
http-cache-semantics@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
@@ -4839,7 +4883,7 @@ is-shared-array-buffer@^1.0.1:
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
-is-stream@^1.1.0:
+is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -5513,6 +5557,13 @@ json5@^2.1.2:
dependencies:
minimist "^1.2.5"
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -5563,6 +5614,11 @@ jws@^3.2.2:
jwa "^1.4.1"
safe-buffer "^5.0.1"
+kew@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+ integrity sha512-IG6nm0+QtAMdXt9KvbgbGdvY50RSrw+U4sGZg+KlrSKPJEwVE5JVoI3d7RWfSMdBQneRheeAOj3lIjX5VL/9RQ==
+
keyv@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
@@ -5594,6 +5650,13 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
kleur@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
@@ -6670,6 +6733,14 @@ pause@0.0.1:
resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=
+pdf-creator-node@^2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/pdf-creator-node/-/pdf-creator-node-2.3.4.tgz#d860217b29d7ad73026d027bea579ed24805140f"
+ integrity sha512-em2s088cu1ipeiivmp6NKL5cDDBdC5UlLBHtHtKPw34ddC8Dbf+jP8sXhW6ql8ooTeKzsUVi624STkK4qY5zhQ==
+ dependencies:
+ handlebars "^4.7.6"
+ html-pdf "^3.0.1"
+
peek-readable@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.0.1.tgz#9a045f291db254111c3412c1ce4fec27ddd4d202"
@@ -6685,6 +6756,21 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+phantomjs-prebuilt@^2.1.16:
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
+ integrity sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==
+ dependencies:
+ es6-promise "^4.0.3"
+ extract-zip "^1.6.5"
+ fs-extra "^1.0.0"
+ hasha "^2.2.0"
+ kew "^0.7.0"
+ progress "^1.1.8"
+ request "^2.81.0"
+ request-progress "^2.0.1"
+ which "^1.2.10"
+
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
@@ -6702,6 +6788,18 @@ pify@^3.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
pirates@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
@@ -6888,6 +6986,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+ integrity sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==
+
progress@^2.0.0, progress@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -7229,7 +7332,14 @@ repeat-string@^1.6.1:
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-request@^2.88.2:
+request-progress@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+ integrity sha512-dxdraeZVUNEn9AvLrxkgB2k6buTlym71dJk1fk4v8j3Ou3RKNm07BcgbHdj2lLgYGfqX71F+awb1MR+tWPFJzA==
+ dependencies:
+ throttleit "^1.0.0"
+
+request@^2.81.0, request@^2.88.2:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
@@ -8096,6 +8206,11 @@ throat@^5.0.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+ integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==
+
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -8603,7 +8718,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@^1.2.9:
+which@^1.2.10, which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==