43 Commits

Author SHA1 Message Date
c13a125ac7 2.0.0 2022-03-24 14:58:00 +01:00
8f6949b1b8 1.0.23 2022-03-24 14:57:17 +01:00
9b698c6dea fix(core): update 2022-03-24 14:57:16 +01:00
157bcff7c4 1.0.22 2021-11-07 20:42:50 +01:00
934423f0ad fix(core): update 2021-11-07 20:42:49 +01:00
e6d7fdced6 1.0.21 2021-11-07 20:21:04 +01:00
2fc4e691ac fix(core): update 2021-11-07 20:21:03 +01:00
7e8035ea61 1.0.20 2021-04-29 15:26:08 +00:00
1bc3112bb7 fix(core): update 2021-04-29 15:26:08 +00:00
4a177fd166 1.0.19 2021-04-29 14:52:28 +00:00
c1cf019af2 fix(core): update 2021-04-29 14:52:28 +00:00
9ecf7c81d4 1.0.18 2020-08-12 16:31:55 +00:00
8fa40087d4 1.0.17 2020-06-01 20:25:33 +00:00
a5576410cd fix(core): update 2020-06-01 20:25:32 +00:00
dff08ed54b 1.0.16 2020-06-01 20:20:57 +00:00
fe4dd5c1ee fix(core): update 2020-06-01 20:20:57 +00:00
7f146b547f 1.0.15 2020-06-01 20:19:26 +00:00
4ee936035c fix(core): update 2020-06-01 20:19:25 +00:00
2e95f1db7f 1.0.14 2019-06-04 08:29:06 +02:00
35e5ded808 fix(core): update 2019-06-04 08:29:05 +02:00
f2430d095f 1.0.13 2019-06-03 17:17:20 +02:00
d79a5af51a fix(core): update 2019-06-03 17:17:20 +02:00
318bdd1bd8 1.0.12 2019-06-03 17:16:47 +02:00
54a0ec6c71 fix(core): update 2019-06-03 17:16:47 +02:00
8853eecbb9 1.0.11 2019-05-29 14:14:26 +02:00
1bfca4456c fix(core): update 2019-05-29 14:14:26 +02:00
b337e4c779 1.0.10 2019-05-29 08:57:17 +02:00
53d56d2d8a fix(core): update 2019-05-29 08:57:17 +02:00
e3781cfd4d 1.0.9 2019-05-28 23:29:25 +02:00
eca90bdf64 fix(core): update 2019-05-28 23:29:24 +02:00
b35b3f6c0b 1.0.8 2019-05-28 23:28:44 +02:00
d3509b8834 fix(core): update 2019-05-28 23:28:43 +02:00
246037aaae 1.0.7 2019-05-28 23:28:27 +02:00
3fc91bc0c1 fix(core): update 2019-05-28 23:28:26 +02:00
6c3991f6bc 1.0.6 2019-05-28 23:27:56 +02:00
cfcba1aa01 fix(core): update 2019-05-28 23:27:55 +02:00
b8a7f02b97 1.0.5 2017-04-09 16:05:27 +02:00
d6a7fd6c8c add .reload() 2017-04-09 16:05:24 +02:00
6e079e38c3 1.0.4 2017-04-09 13:05:13 +02:00
38d1aa5477 add npmextra.json 2017-04-09 13:05:10 +02:00
6f8ce94ae2 1.0.3 2017-04-09 12:45:32 +02:00
f3a78ba089 1.0.2 2017-04-09 12:35:58 +02:00
43bc078ace update to latest standards 2017-04-09 12:35:53 +02:00
24 changed files with 18329 additions and 379 deletions

21
.gitignore vendored
View File

@ -1,3 +1,20 @@
node_modules/ .nogit/
pages/
# artifacts
coverage/
public/ public/
pages/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# custom

View File

@ -1,34 +1,141 @@
image: hosttoday/ht-docker-node:npmts # gitzone ci_default
stages: image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
- test
- release
testLEGACY: cache:
stage: test paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- security
- test
- release
- metadata
before_script:
- npm install -g @shipzone/npmci
# ====================
# security stage
# ====================
mirror:
stage: security
script: script:
- npmci test legacy - npmci git mirror
tags:
- docker
allow_failure: true
testLTS:
stage: test
script:
- npmci test lts
tags:
- docker
testSTABLE:
stage: test
script:
- npmci test stable
tags:
- docker
release:
stage: release
environment: npm_registry
script:
- npmci publish
only: only:
- tags - tags
tags: tags:
- docker - lossless
- docker
- notpriv
auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production
tags:
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=dev
tags:
- docker
allow_failure: true
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
release:
stage: release
script:
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
only:
- tags
script:
- npmci command npm install -g tslint typescript
- npmci npm prepare
- npmci npm install
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
tags:
- lossless
- docker
- priv
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker
- notpriv
pages:
stage: metadata
script:
- npmci node install lts
- npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare
- npmci npm install
- npmci command tsdoc
tags:
- lossless
- docker
- notpriv
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public
allow_failure: true

11
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "npm test",
"name": "Run npm test",
"request": "launch",
"type": "node-terminal"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"npmci": {
"type": "object",
"description": "settings for npmci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

View File

@ -1,20 +0,0 @@
# smartbrowser
easy class API for serving stacks during development with `browser-sync`.
## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/smartbrowser)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/smartbrowser)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartbrowser)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartbrowser/)
## Status for master
[![build status](https://gitlab.com/pushrocks/smartbrowser/badges/master/build.svg)](https://gitlab.com/pushrocks/smartbrowser/commits/master)
[![coverage report](https://gitlab.com/pushrocks/smartbrowser/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartbrowser/commits/master)
[![Dependency Status](https://david-dm.org/pushrocks/smartbrowser.svg)](https://david-dm.org/pushrocks/smartbrowser)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartbrowser/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartbrowser/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartbrowser/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartbrowser)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

File diff suppressed because one or more lines are too long

View File

@ -1,88 +0,0 @@
TN:
SF:/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/index.js
FN:3,(anonymous_1)
FN:3,defineProperties
FN:3,(anonymous_3)
FN:5,_classCallCheck
FN:12,(anonymous_5)
FN:13,Smartbrowser
FN:31,start
FN:36,(anonymous_8)
FN:40,(anonymous_9)
FN:47,(anonymous_10)
FN:59,stop
FNF:11
FNH:10
FNDA:1,(anonymous_1)
FNDA:1,defineProperties
FNDA:1,(anonymous_3)
FNDA:1,_classCallCheck
FNDA:1,(anonymous_5)
FNDA:1,Smartbrowser
FNDA:1,start
FNDA:1,(anonymous_8)
FNDA:1,(anonymous_9)
FNDA:0,(anonymous_10)
FNDA:1,stop
DA:3,2
DA:5,1
DA:7,1
DA:12,1
DA:13,1
DA:14,1
DA:16,1
DA:17,1
DA:20,1
DA:21,1
DA:22,1
DA:29,1
DA:32,1
DA:34,1
DA:35,1
DA:36,1
DA:37,1
DA:38,1
DA:39,1
DA:40,1
DA:41,1
DA:42,1
DA:43,1
DA:47,0
DA:48,0
DA:51,1
DA:60,1
DA:61,1
DA:62,1
DA:63,1
DA:64,1
DA:68,1
DA:71,1
LF:33
LH:31
BRDA:3,1,0,2
BRDA:3,1,1,2
BRDA:3,2,0,2
BRDA:3,2,1,0
BRDA:3,3,0,1
BRDA:3,3,1,0
BRDA:3,4,0,0
BRDA:3,4,1,1
BRDA:5,5,0,0
BRDA:5,5,1,1
BRDA:35,6,0,1
BRDA:35,6,1,0
BRF:12
BRH:7
end_of_record
TN:
SF:/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/smartbrowser.plugins.js
FNF:0
FNH:0
DA:3,1
DA:4,1
DA:5,1
LF:3
LH:3
BRF:0
BRH:0
end_of_record

32
dist/index.d.ts vendored
View File

@ -1,32 +0,0 @@
/// <reference types="browser-sync" />
/// <reference types="q" />
import * as plugins from './smartbrowser.plugins';
/**
* the options interface of a Smartbrowser instance
*/
export interface ISmartbrowserOptions {
webroot: string;
watchFiles: string[];
}
/**
* Type of status that a bsInstance can have
*/
export declare type bsStatus = 'idle' | 'starting' | 'running';
/**
* class smartbrowser controls a browser-sync instance for you
*/
export declare class Smartbrowser {
bsInstance: plugins.browserSync.BrowserSyncInstance;
bsConfig: plugins.browserSync.Options;
bsStatus: bsStatus;
bsStarted: plugins.q.Promise<void>;
constructor(optionsArg: ISmartbrowserOptions);
/**
* starts the server and returns the browserSync instance in a resolved Promise
*/
start(): plugins.q.Promise<plugins.browserSync.BrowserSyncInstance>;
/**
* stops the smartbrowser instance
*/
stop(): plugins.q.Promise<void>;
}

48
dist/index.js vendored
View File

@ -1,48 +0,0 @@
"use strict";
const plugins = require("./smartbrowser.plugins");
/**
* class smartbrowser controls a browser-sync instance for you
*/
class Smartbrowser {
constructor(optionsArg) {
this.bsInstance = plugins.browserSync.create();
this.bsConfig = {
server: {}
};
this.bsStatus = 'idle';
this.bsConfig.server.baseDir = optionsArg.webroot;
this.bsConfig.files = optionsArg.watchFiles;
}
/**
* starts the server and returns the browserSync instance in a resolved Promise
*/
start() {
let done = plugins.q.defer();
if (this.bsStatus === 'idle') {
this.bsStatus = 'starting';
let localDone = plugins.q.defer();
this.bsStarted = localDone.promise;
this.bsInstance.init(this.bsConfig, () => {
this.bsStatus = 'running';
localDone.resolve();
done.resolve(this.bsInstance);
});
}
else {
this.bsStarted.then(() => { done.resolve(this.bsInstance); });
}
return done.promise;
}
/**
* stops the smartbrowser instance
*/
stop() {
let done = plugins.q.defer();
this.bsInstance.exit();
this.bsStatus = 'idle';
done.resolve();
return done.promise;
}
}
exports.Smartbrowser = Smartbrowser;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWlEO0FBZ0JqRDs7R0FFRztBQUNIO0lBT0ksWUFBWSxVQUFnQztRQU41QyxlQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6QyxhQUFRLEdBQWdDO1lBQ3BDLE1BQU0sRUFBRSxFQUFFO1NBQ2IsQ0FBQTtRQUNELGFBQVEsR0FBYSxNQUFNLENBQUE7UUFHdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQTJDLENBQUE7UUFDckUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1lBQzFCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFRLENBQUE7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO2dCQUN6QixTQUFTLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUUsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQVEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7Q0FDSjtBQTFDRCxvQ0EwQ0MifQ==

View File

@ -1,3 +0,0 @@
import 'typings-global';
export import browserSync = require('browser-sync');
export import q = require('q');

View File

@ -1,5 +0,0 @@
"use strict";
require("typings-global");
exports.browserSync = require("browser-sync");
exports.q = require("q");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRicm93c2VyLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGJyb3dzZXIucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLDhDQUFtRDtBQUNuRCx5QkFBOEIifQ==

16
npmextra.json Normal file
View File

@ -0,0 +1,16 @@
{
"npmci": {
"npmAccessLevel": "public"
},
"gitzone": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitrepo": "smartbrowser",
"shortDescription": "puppeteer wrapper for easy tasks",
"npmPackagename": "@pushrocks/smartbrowser",
"license": "MIT"
}
}
}

17917
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,13 @@
{ {
"name": "smartbrowser", "name": "@pushrocks/smartbrowser",
"version": "1.0.1", "version": "2.0.0",
"description": "wraps browser-sync", "description": "simplified puppeteer",
"main": "dist/index.js", "main": "dist_ts/index.js",
"typings": "dist/index.d.ts", "typings": "dist_ts/index.d.ts",
"type": "module",
"scripts": { "scripts": {
"test": "(npmts)" "test": "(tstest test/ --web)",
"build": "(tsbuild --web --allowimplicitany)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -18,16 +20,32 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartbrowser#README", "homepage": "https://gitlab.com/pushrocks/smartbrowser#README",
"dependencies": { "dependencies": {
"@types/browser-sync": "0.0.32", "@pushrocks/smartdelay": "^2.0.13",
"@types/q": "0.0.30", "@pushrocks/smartpdf": "^3.0.0",
"browser-sync": "^2.16.0", "@pushrocks/smartpuppeteer": "^2.0.0",
"q": "^1.4.1", "@pushrocks/smartunique": "^3.0.3"
"typings-global": "^1.0.14"
}, },
"devDependencies": { "devDependencies": {
"@types/should": "^8.1.29", "@gitzone/tsbuild": "^2.1.60",
"npmts-g": "^5.2.8", "@gitzone/tstest": "^1.0.69",
"should": "^11.1.0", "@pushrocks/tapbundle": "^5.0.3",
"typings-test": "^1.0.3" "tslint": "^6.1.3",
} "tslint-config-prettier": "^1.18.0"
},
"private": false,
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
],
"browserslist": [
"last 1 chrome versions"
]
} }

39
readme.md Normal file
View File

@ -0,0 +1,39 @@
# @pushrocks/smartbrowser
puppeteer wrapper for easy tasks
## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartbrowser)
* [gitlab.com (source)](https://gitlab.com/pushrocks/smartbrowser)
* [github.com (source mirror)](https://github.com/pushrocks/smartbrowser)
* [docs (typedoc)](https://pushrocks.gitlab.io/smartbrowser/)
## Status for master
Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/pushrocks/smartbrowser/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/pushrocks/smartbrowser/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@pushrocks/smartbrowser)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/pushrocks/smartbrowser)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@pushrocks/smartbrowser)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@pushrocks/smartbrowser)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@pushrocks/smartbrowser)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## Usage
Use TypeScript for best in class instellisense.
## Contribution
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
For further information read the linked docs at the top of this readme.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

View File

@ -1,6 +0,0 @@
<head>
<title>Test</title>
</head>
<body>
Test
</body>

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-test';

View File

@ -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

View File

@ -1,34 +1,36 @@
import 'typings-test' import { tap, expect, expectAsync } from '@pushrocks/tapbundle';
import * as should from 'should'
import * as smartbrowser from '../dist/index' import * as smartbrowser from '../ts/index.js';
let testSmartBrowser: smartbrowser.SmartBrowser;
let testSmartBrowser: smartbrowser.Smartbrowser tap.test('should instanstiate a new browser ', async () => {
testSmartBrowser = new smartbrowser.SmartBrowser();
return expect(testSmartBrowser).toBeInstanceOf(smartbrowser.SmartBrowser);
});
describe('smartbrowser', () => { tap.test('should start the browser ', async () => {
it('should instanstiate a new browser ', function () { await testSmartBrowser.start();
testSmartBrowser = new smartbrowser.Smartbrowser({ });
webroot: './test/assets/',
watchFiles: ['./test/assets/'] tap.test('should create a PDF from a page', async (tools) => {
}) const result = await testSmartBrowser.pdfFromPage('https://lossless.com');
should(testSmartBrowser).be.instanceof(smartbrowser.Smartbrowser) expect(result.buffer).toBeInstanceOf(Buffer);
}) });
it('should start the browser ', function (done) {
testSmartBrowser.start().then((bsInstance) => { tap.test('should produce a valid screenshot', async (tools) => {
done() const result = await testSmartBrowser.screenshotFromPage('https://lossless.com');
}).catch((err) => { console.log(err) }) expect(result.buffer).toBeInstanceOf(Buffer);
}) });
it('should stop the browser ', function (done) {
this.timeout(10000) tap.test('should evalute something in the browser', async () => {
setTimeout(() => { const result = await testSmartBrowser.evaluateOnPage('https://lossless.com', async () => {
testSmartBrowser.stop().then(() => { return window.location.toString();
done() });
}).catch((err) => { console.log(err) }) console.log(result);
}, 2000) });
})
it('should exit correctly',function(){ tap.test('should stop the browser ', async () => {
setTimeout(() => { await testSmartBrowser.stop();
process.exit(0) });
},2000)
}) tap.start();
})

View File

@ -1,62 +1,73 @@
import * as plugins from './smartbrowser.plugins' import * as plugins from './smartbrowser.plugins.js';
import * as interfaces from './interfaces/index.js';
/** /**
* the options interface of a Smartbrowser instance * SmartBrowser
*/ */
export interface ISmartbrowserOptions { export class SmartBrowser {
webroot: string public headlessBrowser: plugins.smartpuppeteer.puppeteer.Browser;
watchFiles: string[] public smartpdf: plugins.smartpdf.SmartPdf;
} /**
* start the SmartBrowser instance
/** */
* Type of status that a bsInstance can have public async start() {
*/ this.headlessBrowser = await plugins.smartpuppeteer.getEnvAwareBrowserInstance();
export type bsStatus = 'idle' | 'starting' | 'running' this.smartpdf = new plugins.smartpdf.SmartPdf();
await this.smartpdf.start(this.headlessBrowser);
/** }
* class smartbrowser controls a browser-sync instance for you
*/ /**
export class Smartbrowser { * stop the SmartBrowser instance
bsInstance = plugins.browserSync.create() */
bsConfig: plugins.browserSync.Options = { public async stop() {
server: {} await this.headlessBrowser.close();
} await this.smartpdf.stop();
bsStatus: bsStatus = 'idle' }
bsStarted: plugins.q.Promise<void>
constructor(optionsArg: ISmartbrowserOptions) { /**
this.bsConfig.server.baseDir = optionsArg.webroot * create a pdf from page
this.bsConfig.files = optionsArg.watchFiles * @param urlArg
} */
public pdfFromPage(urlArg: string) {
/** const result = this.smartpdf.getFullWebsiteAsSinglePdf(urlArg);
* starts the server and returns the browserSync instance in a resolved Promise return result;
*/ }
start(): plugins.q.Promise<plugins.browserSync.BrowserSyncInstance> {
let done = plugins.q.defer<plugins.browserSync.BrowserSyncInstance>() /**
if (this.bsStatus === 'idle') { * make a screenshot from a page
this.bsStatus = 'starting' * @param urlArg
let localDone = plugins.q.defer<void>() */
this.bsStarted = localDone.promise public async screenshotFromPage(urlArg: string): Promise<interfaces.IScreenShotResult> {
this.bsInstance.init(this.bsConfig, () => { const pageId = plugins.smartunique.shortId();
this.bsStatus = 'running' const page = await this.headlessBrowser.newPage();
localDone.resolve() await page.goto(urlArg, {
done.resolve(this.bsInstance) waitUntil: 'networkidle2',
}) });
} else { const screenshotBuffer = await page.screenshot({
this.bsStarted.then( () => { done.resolve(this.bsInstance) }) encoding: 'binary',
} }) as Buffer;
return done.promise await page.close();
} return {
name: pageId,
/** id: `${pageId}.js`,
* stops the smartbrowser instance buffer: screenshotBuffer,
*/ };
stop(): plugins.q.Promise<void> { }
let done = plugins.q.defer<void>()
this.bsInstance.exit() /**
this.bsStatus = 'idle' * evalutes an expression on a page
done.resolve() * @param urlArg
return done.promise * @param funcArg
} */
public async evaluateOnPage<T>(urlArg: string, funcArg: () => Promise<T>) {
const page = await this.headlessBrowser.newPage();
await page.goto(urlArg, {
waitUntil: 'networkidle2',
});
const result = await page.evaluate(funcArg);
await page.close();
return result;
}
} }

1
ts/interfaces/index.ts Normal file
View File

@ -0,0 +1 @@
export * from './interfaces.screenshotresult.js';

View File

@ -0,0 +1,5 @@
export interface IScreenShotResult {
name: string;
id: string;
buffer: Buffer;
}

View File

@ -1,3 +1,8 @@
import 'typings-global' // pushrocks scope
export import browserSync = require('browser-sync') import * as smartpdf from '@pushrocks/smartpdf';
export import q = require('q') import * as smartpuppeteer from '@pushrocks/smartpuppeteer';
import * as smartunique from '@pushrocks/smartunique';
export { smartpdf, smartpuppeteer, smartunique };
// third party

View File

@ -1,3 +1,17 @@
{ {
"extends": "tslint-config-standard" "extends": ["tslint:latest", "tslint-config-prettier"],
} "rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
}