From 54a0ec6c7150004b11c454652628cff648764592 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Mon, 3 Jun 2019 17:16:47 +0200 Subject: [PATCH] fix(core): update --- package-lock.json | 15 ++--- package.json | 10 +-- test/assets/index.html | 6 -- test/test.js | 33 ---------- test/test.ts | 44 ++++++------- ts/index.ts | 69 ++++++++++++++++++-- ts/interfaces/index.ts | 2 + ts/interfaces/interfaces.screenshotresult.ts | 5 ++ ts/smartbrowser.plugins.ts | 5 +- 9 files changed, 106 insertions(+), 83 deletions(-) delete mode 100644 test/assets/index.html delete mode 100644 test/test.js create mode 100644 ts/interfaces/index.ts create mode 100644 ts/interfaces/interfaces.screenshotresult.ts diff --git a/package-lock.json b/package-lock.json index 408d489..61b537c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -153,7 +153,6 @@ "version": "2.0.3", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.3.tgz", "integrity": "sha512-TXKDDqsc7sBTLl+oiYNaF6IdNk1n70i8ur8QfwcUU6tegTnrEkvMWy9h5Zdty/fq1ioCNpKLvuXoA+fgYVwKGQ==", - "dev": true, "requires": { "@pushrocks/smartpromise": "^3.0.2" } @@ -264,9 +263,9 @@ "integrity": "sha512-MaI0+uLQPCr2V3WGnbdgb0pWa9xkWyrP4qYcbsHIjeismGLbn9s3jmP/HIXU8LkgzRgaVb+BJxmZJHOwl32DyA==" }, "@pushrocks/smartpdf": { - "version": "1.0.6", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpdf/-/smartpdf-1.0.6.tgz", - "integrity": "sha512-zA6jmOgi+0tOX8kFCYqv+dxgXIPcmWjw7oVdE4THfh50uHKxubFpZkxq0MF+H8O16P3Akx3qQUYpnGhCkiTxxA==", + "version": "1.0.17", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpdf/-/smartpdf-1.0.17.tgz", + "integrity": "sha512-LOZOluCQeh7u4dWZ7J7Ufz9XPMXTwgC86NGTonr5tu7YB0bpcxnwA4aCZmi/nGtd1NnSpyyxSz3x+xONDqI8bA==", "requires": { "@pushrocks/smartfile": "^7.0.2", "@pushrocks/smartnetwork": "^1.1.6", @@ -2273,9 +2272,9 @@ "dev": true }, "tslint": { - "version": "5.16.0", - "resolved": "https://verdaccio.lossless.one/tslint/-/tslint-5.16.0.tgz", - "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", + "version": "5.17.0", + "resolved": "https://verdaccio.lossless.one/tslint/-/tslint-5.17.0.tgz", + "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -2284,7 +2283,7 @@ "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", - "js-yaml": "^3.13.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", diff --git a/package.json b/package.json index 204c5c4..627f3ab 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "test": "(npmts)", - "build": "echo \"Not needed for now\"" + "test": "tstest test/", + "build": "tsbuild" }, "repository": { "type": "git", @@ -19,14 +19,16 @@ }, "homepage": "https://gitlab.com/pushrocks/smartbrowser#README", "dependencies": { - "@pushrocks/smartpdf": "^1.0.6", + "@pushrocks/smartdelay": "^2.0.3", + "@pushrocks/smartpdf": "^1.0.17", + "@pushrocks/smartunique": "^3.0.1", "puppeteer": "^1.17.0" }, "devDependencies": { "@gitzone/tsbuild": "^2.1.11", "@gitzone/tstest": "^1.0.24", "@pushrocks/tapbundle": "^3.0.9", - "tslint": "^5.16.0", + "tslint": "^5.17.0", "tslint-config-prettier": "^1.18.0" }, "private": true, diff --git a/test/assets/index.html b/test/assets/index.html deleted file mode 100644 index f61b8e4..0000000 --- a/test/assets/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - Test - - - Test - \ No newline at end of file diff --git a/test/test.js b/test/test.js deleted file mode 100644 index f0eccb1..0000000 --- a/test/test.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -require("typings-test"); -const should = require("should"); -const smartbrowser = require("../dist/index"); -let testSmartBrowser; -describe('smartbrowser', () => { - it('should instanstiate a new browser ', function () { - testSmartBrowser = new smartbrowser.Smartbrowser({ - webroot: './test/assets/', - watchFiles: ['./test/assets/'] - }); - should(testSmartBrowser).be.instanceof(smartbrowser.Smartbrowser); - }); - it('should start the browser ', function (done) { - testSmartBrowser.start().then((bsInstance) => { - done(); - }).catch((err) => { console.log(err); }); - }); - it('should stop the browser ', function (done) { - this.timeout(10000); - setTimeout(() => { - testSmartBrowser.stop().then(() => { - done(); - }).catch((err) => { console.log(err); }); - }, 2000); - }); - it('should exit correctly', function () { - setTimeout(() => { - process.exit(0); - }, 2000); - }); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixpQ0FBZ0M7QUFFaEMsOENBQTZDO0FBRTdDLElBQUksZ0JBQTJDLENBQUE7QUFFL0MsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUNyQixFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDckMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQzdDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7U0FDakMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDckUsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxJQUFJO1FBQzFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVU7WUFDckMsSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsSUFBSTtRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLFVBQVUsQ0FBQztZQUNQLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLENBQUE7WUFDVixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLHVCQUF1QixFQUFDO1FBQ3ZCLFVBQVUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkIsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQ1gsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index f15caf5..29688d8 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,32 +1,30 @@ -import { tap, expect } from 'tapbundle'; -import * as smartdelay from 'smartdelay'; +import { tap, expect } from '@pushrocks/tapbundle'; -import * as smartbrowser from '../dist/index'; -let testSmartBrowser: smartbrowser.Smartbrowser; +import * as smartbrowser from '../ts/index'; +let testSmartBrowser: smartbrowser.SmartBrowser; tap .test('should instanstiate a new browser ', async () => { - testSmartBrowser = new smartbrowser.Smartbrowser({ - webroot: './test/assets/', - watchFiles: ['./test/assets/'] - }); - return expect(testSmartBrowser).to.be.instanceof(smartbrowser.Smartbrowser); + testSmartBrowser = new smartbrowser.SmartBrowser(); + return expect(testSmartBrowser).to.be.instanceof(smartbrowser.SmartBrowser); }) - .catch(tap.threw); -tap - .test('should start the browser ', async () => { - return await expect(testSmartBrowser.start()).to.eventually.be.fulfilled; - }) - .catch(tap.threw); +tap.test('should start the browser ', async () => { + await expect(testSmartBrowser.start()).to.eventually.be.fulfilled; +}); + +tap.test('should create a PDF from a page', async (tools) => { + const result = await testSmartBrowser.pdfFromPage('https://lossless.com'); + expect(result.buffer).to.be.instanceOf(Buffer); +}); + +tap.test('should produce a valid screenshot', async (tools) => { + const result = await testSmartBrowser.screenshotFromPage('https://lossless.com'); + expect(result.buffer).to.be.instanceOf(Buffer); +}); tap.test('should stop the browser ', async () => { - return await smartdelay.delayFor(2000).then(() => { - return expect(testSmartBrowser.stop()).to.eventually.be.fulfilled; - }); -}); -tap.test('should exit correctly', async () => { - smartdelay.delayFor(2000).then(() => { - process.exit(0); - }); + await expect(testSmartBrowser.stop()).to.eventually.be.fulfilled; }); + +tap.start(); diff --git a/ts/index.ts b/ts/index.ts index c23d8c1..c494917 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,21 +1,76 @@ import * as plugins from './smartbrowser.plugins'; +import * as interfaces from './interfaces'; + +/** + * SmartBrowser + */ export class SmartBrowser { - puppeteer: plugins.puppeteer.Browser; - smartpdf: plugins.smartpdf.SmartPdf; - pdfFromPage(urlArg: string) { - this.smartpdf.getFullWebsiteAsSinglePdf(urlArg: ); + public headlessBrowser: plugins.puppeteer.Browser; + public smartpdf: plugins.smartpdf.SmartPdf; + + /** + * create a pdf from page + * @param urlArg + */ + public pdfFromPage(urlArg: string) { + const result = this.smartpdf.getFullWebsiteAsSinglePdf(urlArg); + return result; } + /** + * make a screenshot from a page + * @param urlArg + */ + public async screenshotFromPage(urlArg: string): Promise { + const pageId = plugins.smartunique.shortId(); + const page = await this.headlessBrowser.newPage(); + await page.goto(urlArg, { + waitUntil: 'networkidle2' + }); + const screenshotBuffer = await page.screenshot({ + encoding: 'binary' + }); + await page.close(); + return { + name: pageId, + id: `${pageId}.js`, + buffer: screenshotBuffer + }; + } + + /** + * evalutes an expression on a page + * @param urlArg + * @param funcArg + */ + public async evaluateOnPage (urlArg: string, funcArg: () => Promise) { + const page = await this.headlessBrowser.newPage(); + await page.goto(urlArg, { + waitUntil: 'networkidle2' + }); + } + + /** + * start a page + */ public async start() { + this.headlessBrowser = await plugins.puppeteer.launch({ + defaultViewport: { + width: 1600, + height: 1080 + } + }); this.smartpdf = new plugins.smartpdf.SmartPdf(); - this.smartpdf.init(); + await this.smartpdf.start(this.headlessBrowser); + } /** * stops the smartbrowser instance */ - stop() { - this.smartpdf.close(); + public async stop() { + await this.headlessBrowser.close(); + await this.smartpdf.stop(); } } diff --git a/ts/interfaces/index.ts b/ts/interfaces/index.ts new file mode 100644 index 0000000..8fae789 --- /dev/null +++ b/ts/interfaces/index.ts @@ -0,0 +1,2 @@ +export * from './interfaces.screenshotresult'; + diff --git a/ts/interfaces/interfaces.screenshotresult.ts b/ts/interfaces/interfaces.screenshotresult.ts new file mode 100644 index 0000000..b1cd48f --- /dev/null +++ b/ts/interfaces/interfaces.screenshotresult.ts @@ -0,0 +1,5 @@ +export interface IScreenShotResult { + name: string; + id: string; + buffer: Buffer; +} diff --git a/ts/smartbrowser.plugins.ts b/ts/smartbrowser.plugins.ts index 4939519..6a5a28c 100644 --- a/ts/smartbrowser.plugins.ts +++ b/ts/smartbrowser.plugins.ts @@ -1,9 +1,10 @@ // pushrocks scope import * as smartpdf from '@pushrocks/smartpdf'; +import * as smartunique from '@pushrocks/smartunique'; -export { smartpdf }; +export { smartpdf, smartunique }; // third party -import * as puppeteer from 'puppeteer'; +import puppeteer from 'puppeteer'; export { puppeteer };