Compare commits

...

40 Commits

Author SHA1 Message Date
01953fdfec 1.0.44 2019-10-06 01:21:33 +02:00
2b794967d2 fix(core): update 2019-10-06 01:21:32 +02:00
eacda66c43 1.0.43 2019-10-05 22:59:53 +02:00
5f048712e1 fix(core): update 2019-10-05 22:59:52 +02:00
6d6c851274 1.0.42 2019-10-05 21:26:24 +02:00
afc3141fb2 fix(core): update 2019-10-05 21:26:24 +02:00
317487ffaa 1.0.41 2019-10-05 21:25:45 +02:00
ac8d603060 fix(core): update 2019-10-05 21:25:44 +02:00
c46621517b 1.0.40 2019-08-26 16:33:09 +02:00
4b283ad6a3 fix(core): update 2019-08-26 16:33:08 +02:00
6f3aab9232 1.0.39 2019-08-26 16:32:26 +02:00
de60087146 fix(core): update 2019-08-26 16:32:26 +02:00
b1730c0cc6 1.0.38 2019-08-25 16:35:22 +02:00
b39c928b1e fix(core): update 2019-08-25 16:35:22 +02:00
0a211e804e 1.0.37 2019-07-19 12:09:00 +02:00
41a886cfcf fix(core): update 2019-07-19 12:09:00 +02:00
62ad70ac6c 1.0.36 2019-07-19 10:52:28 +02:00
455e33488d fix(core): update 2019-07-19 10:52:27 +02:00
1af1908e1d 1.0.35 2019-07-18 18:15:25 +02:00
31967ab846 fix(core): update 2019-07-18 18:15:24 +02:00
93fda3944a 1.0.34 2019-07-17 13:50:24 +02:00
d0ce17299a 1.0.33 2019-07-17 12:55:26 +02:00
1b0fa5b465 1.0.32 2019-07-17 12:40:40 +02:00
7a6f9d9569 fix(core): update 2019-07-17 12:40:40 +02:00
ebcf89520a 1.0.31 2019-07-17 12:22:25 +02:00
ca6ef86c8c fix(core): update 2019-07-17 12:22:24 +02:00
a98471e914 1.0.30 2019-07-17 12:01:02 +02:00
7755286aab fix(core): update 2019-07-17 12:01:02 +02:00
8f17a3c92a 1.0.29 2019-07-17 12:00:04 +02:00
65221425ca fix(core): update 2019-07-17 12:00:04 +02:00
0bc8048ac5 1.0.28 2019-07-17 11:54:50 +02:00
65754d34bc fix(core): update 2019-07-17 11:54:49 +02:00
c4a276ebf3 1.0.27 2019-06-17 07:06:57 +02:00
3db075b795 fix(core): update 2019-06-17 07:06:56 +02:00
f90f391e87 1.0.26 2019-06-16 17:52:20 +02:00
31d886a48a fix(core): update 2019-06-16 17:52:20 +02:00
7c5ed463fe 1.0.25 2019-06-16 17:47:34 +02:00
b1a5426405 fix(core): update 2019-06-16 17:47:34 +02:00
6a33742e27 1.0.24 2019-06-16 17:03:47 +02:00
3d201016fd fix(core): update 2019-06-16 17:03:47 +02:00
12 changed files with 1505 additions and 2484 deletions

View File

@ -1,5 +1,7 @@
# gitzone ci_default # gitzone ci_default
image: hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
variables:
GIT_STRATEGY: clone
cache: cache:
paths: paths:
@ -38,19 +40,7 @@ snyk:
# test stage # test stage
# ==================== # ====================
testLTS: testStable:
stage: test
script:
- npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv
testSTABLE:
stage: test stage: test
script: script:
- npmci npm prepare - npmci npm prepare
@ -60,12 +50,24 @@ testSTABLE:
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- priv
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv - notpriv
release: release:
stage: release stage: release
script: script:
- npmci node install stable - npmci node install lts
- npmci npm publish - npmci npm publish
only: only:
- tags - tags
@ -98,7 +100,9 @@ trigger:
- notpriv - notpriv
pages: pages:
image: hosttoday/ht-docker-node:npmci image: hosttoday/ht-docker-dbase:npmci
services:
- docker:18-dind
stage: metadata stage: metadata
script: script:
- npmci command npm install -g @gitzone/tsdoc - npmci command npm install -g @gitzone/tsdoc

4
.snyk Normal file
View File

@ -0,0 +1,4 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.13.5
ignore: {}
patch: {}

3656
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "@gitzone/tsbundle", "name": "@gitzone/tsbundle",
"version": "1.0.23", "version": "1.0.44",
"private": false, "private": false,
"description": "a bundler using rollup for painless bundling of web projects", "description": "a bundler using rollup for painless bundling of web projects",
"main": "dist/index.js", "main": "dist/index.js",
@ -16,38 +16,43 @@
"tsbundle": "cli.js" "tsbundle": "cli.js"
}, },
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.11", "@gitzone/tsbuild": "^2.1.17",
"@gitzone/tsrun": "^1.2.6", "@gitzone/tsrun": "^1.2.8",
"@gitzone/tstest": "^1.0.15", "@gitzone/tstest": "^1.0.28",
"@pushrocks/tapbundle": "^3.0.7", "@pushrocks/tapbundle": "^3.0.13",
"@types/node": "^11.13.8", "@types/node": "^12.7.11",
"tslint": "^5.11.0", "tslint": "^5.20.0",
"tslint-config-prettier": "^1.15.0" "tslint-config-prettier": "^1.15.0"
}, },
"dependencies": { "dependencies": {
"@babel/core": "^7.4.4", "@babel/core": "^7.6.2",
"@babel/plugin-proposal-class-properties": "^7.4.4", "@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-proposal-decorators": "^7.4.4", "@babel/plugin-proposal-decorators": "^7.6.0",
"@babel/plugin-transform-runtime": "^7.4.4", "@babel/plugin-transform-runtime": "^7.6.2",
"@babel/preset-env": "^7.4.4", "@babel/preset-env": "^7.6.2",
"@babel/runtime": "^7.4.4", "@babel/runtime": "^7.6.2",
"@pushrocks/early": "^3.0.3", "@pushrocks/early": "^3.0.3",
"@pushrocks/smartcli": "^3.0.7", "@pushrocks/smartcli": "^3.0.7",
"@pushrocks/smartfile": "^7.0.6",
"@pushrocks/smartlog": "^2.0.19", "@pushrocks/smartlog": "^2.0.19",
"@pushrocks/smartlog-destination-local": "^7.0.5", "@pushrocks/smartlog-destination-local": "^8.0.2",
"rollup": "^1.10.1", "@types/html-minifier": "^3.5.3",
"html-minifier": "^4.0.0",
"rollup": "^1.23.1",
"rollup-plugin-babel": "^4.3.2", "rollup-plugin-babel": "^4.3.2",
"rollup-plugin-commonjs": "^9.3.4", "rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^4.2.3", "rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-sourcemaps": "^0.4.2", "rollup-plugin-sourcemaps": "^0.4.2",
"rollup-plugin-terser": "^5.0.0", "rollup-plugin-terser": "^5.1.2",
"rollup-plugin-typescript2": "^0.21.0" "rollup-plugin-typescript2": "^0.24.3",
"terser": "4.3.6"
}, },
"files": [ "files": [
"ts/*", "ts/*",
"ts_web/*", "ts_web/*",
"dist/*", "dist/*",
"dist_web/*", "dist_web/*",
"dist_ts_web/*",
"assets/*", "assets/*",
"cli.js", "cli.js",
"npmextra.json", "npmextra.json",

View File

@ -30,6 +30,6 @@ tsbundle will bundle modern JavaScript websites in an Google Bot conformant way
For further information read the linked docs at the top of this readme. For further information read the linked docs at the top of this readme.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com) [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

81
test/html/index.html Normal file
View File

@ -0,0 +1,81 @@
<!-- gitzone default -->
<!-- made by Lossless GmbH -->
<!-- checkout https://maintainedby.lossless.com for awesome OpenSource projects -->
<html lang="en">
<head>
<!--Lets set some basic meta tags-->
<meta
name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height"
/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--Lets make sure we recognize this as an PWA-->
<link rel="manifest" href="/manifest.json" />
<!--Lets make sure we support older browsers-->
<script src=" https://unpkg.com/@webcomponents/webcomponentsjs@^2/webcomponents-bundle.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<!--Lets avoid a rescaling flicker due to default body margins-->
<style>
body {
margin: 0px;
}
</style>
</head>
<body>
<noscript>
<style>
@import url('https://fonts.googleapis.com/css?family=Roboto:300,400');
body {
background: #303f9f;
font-family: 'Roboto', sans-serif;
color: #ffffff;
}
a {
color: #ffffff;
text-decoration: none;
}
.container {
width: 600px;
margin: auto;
margin-top: 100px;
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
overflow: hidden;
border-radius: 3px;
background: #4357d9;
}
.header {
padding: 20px;
text-align: center;
font-size: 25px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.content {
padding: 20px;
}
.footer {
padding: 10px;
text-align: center;
}
</style>
<div class="container">
<div class="header">
We need JavaScript to run properly!
</div>
<div class="content">
This site is being built using lit-element (made by Google). This technology works with
JavaScript. Subsequently this website does not work as intended by Lossless GmbH without
JavaScript.
</div>
</div>
<div class="footer">
<a href="https://lossless.gmbh">Legal Info</a> |
<a href="https://lossless.gmbh/privacy">Privacy Policy</a>
</div>
</noscript>
</body>
<script defer src="./bundle.js"></script>
</html>

View File

@ -10,3 +10,6 @@ early.stop();
if (process.env.CLI_CALL) { if (process.env.CLI_CALL) {
runCli(); runCli();
} }
// lets make this usable programmatically
export * from './tsbundle.class.tsbundle';

View File

@ -2,49 +2,18 @@ import * as plugins from './tsbundle.plugins';
import { logger } from './tsbundle.logging'; import { logger } from './tsbundle.logging';
export class TsBundle { export class TsBundle {
public optionsTest: plugins.rollup.RollupOptions = this.getBaseOptions();
public optionsProduction: plugins.rollup.RollupOptions = (() => {
const productionOptions = this.getBaseOptions();
productionOptions.plugins.push(plugins.rollupTerser());
return productionOptions;
})();
constructor() {}
/**
* creates a bundle for the test enviroment
*/
public async buildTest() {
// create a bundle
logger.log('info', `starting bundling for TEST now!`);
const bundle = await plugins.rollup.rollup(this.optionsTest);
bundle.generate(this.optionsTest.output);
bundle.write(this.optionsTest.output);
logger.log('ok', `Successfully bundled files!`);
}
/**
* creates a bundle for the production environment
*/
public async buildProduction() {
// create a bundle
logger.log('info', `starting for PRODUCTION now!`);
const bundle = await plugins.rollup.rollup(this.optionsProduction);
bundle.generate(this.optionsProduction.output);
bundle.write(this.optionsProduction.output);
logger.log('ok', `Successfully bundled files!`);
}
/** /**
* the basic default options for rollup * the basic default options for rollup
*/ */
public getBaseOptions() { public getBaseOptions(fromArg: string = `ts_web/index.ts`, toArg: string = 'dist_web/bundle.js') {
logger.log('info', `from: ${fromArg}`);
logger.log('info', `to: ${toArg}`);
const baseOptions: plugins.rollup.RollupOptions = { const baseOptions: plugins.rollup.RollupOptions = {
input: `ts_web/index.ts`, input: fromArg,
output: { output: {
name: 'tsbundle', name: 'tsbundle',
// file: 'dist_web/bundle.js', file: toArg,
file: 'dist_web/bundle.js',
format: 'iife', format: 'iife',
sourcemap: true sourcemap: true
}, },
@ -81,8 +50,8 @@ export class TsBundle {
}), }),
// Resolve source maps to the original source // Resolve source maps to the original source
plugins.rollupSourceMaps(), plugins.rollupSourceMaps()
plugins.rollupBabel({ /*plugins.rollupBabel({
runtimeHelpers: true, runtimeHelpers: true,
extensions: ['.js', '.jsx', '.ts', '.tsx'], extensions: ['.js', '.jsx', '.ts', '.tsx'],
babelrc: false, babelrc: false,
@ -105,9 +74,53 @@ export class TsBundle {
} }
] ]
] ]
}) })*/
] ]
}; };
return baseOptions; return baseOptions;
} }
public getOptionsTest(fromArg: string, toArg: string): plugins.rollup.RollupOptions {
return this.getBaseOptions(fromArg, toArg);
}
public getOptionsProduction(fromArg: string, toArg: string): plugins.rollup.RollupOptions {
const productionOptions = this.getBaseOptions(fromArg, toArg);
productionOptions.plugins.push(plugins.rollupTerser({
compress: true,
mangle: true,
sourcemap: false
}));
return productionOptions;
}
constructor() {
// Nothing here
}
/**
* creates a bundle for the test enviroment
*/
public async buildTest(fromArg: string, toArg: string) {
// create a bundle
logger.log('info', `bundling for TEST!`);
const buildOptions = this.getOptionsTest(fromArg, toArg);
const bundle = await plugins.rollup.rollup(buildOptions);
bundle.generate(buildOptions.output);
await bundle.write(buildOptions.output);
logger.log('ok', `Successfully bundled files!`);
}
/**
* creates a bundle for the production environment
*/
public async buildProduction(fromArg: string, toArg: string) {
// create a bundle
logger.log('info', `bundling for PRODUCTION!`);
const buildOptions = this.getOptionsProduction(fromArg, toArg);
const bundle = await plugins.rollup.rollup(buildOptions);
bundle.generate(buildOptions.output);
await bundle.write(buildOptions.output);
logger.log('ok', `Successfully bundled files!`);
}
} }

View File

@ -1,20 +1,22 @@
import * as plugins from './tsbundle.plugins'; import * as plugins from './tsbundle.plugins';
import { TsBundle } from './tsbundle.class.tsbundle'; import { TsBundle } from './tsbundle.class.tsbundle';
import { HtmlHandler } from './tsbundle.htmlhandler';
import { logger } from './tsbundle.logging'; import { logger } from './tsbundle.logging';
export const runCli = async () => { export const runCli = async () => {
const tsBundleCli = new plugins.smartcli.Smartcli(); const tsBundleCli = new plugins.smartcli.Smartcli();
tsBundleCli.standardTask().subscribe(async argvArg => { tsBundleCli.standardTask().subscribe(async argvArg => {
const tsbundle = new TsBundle(); const tsbundle = new TsBundle();
const htmlHandler = new HtmlHandler();
switch (true) { switch (true) {
case argvArg.production: case argvArg.production || process.env.CI:
await tsbundle.buildProduction(); await tsbundle.buildProduction(argvArg.from, argvArg.to);
await htmlHandler.minifyHtml();
break; break;
case argvArg.test: case argvArg.test:
await tsbundle.buildTest();
break;
default: default:
logger.log('error', `Can not determine build target environement. Please specify via --production or --test`) await tsbundle.buildTest(argvArg.from, argvArg.to);
await htmlHandler.copyHtml();
return; return;
} }
}); });

View File

@ -0,0 +1,38 @@
import * as plugins from './tsbundle.plugins';
import * as paths from './tsbundle.paths';
export class HtmlHandler {
public sourceFilePath: string = plugins.path.join(paths.htmlDir, 'index.html');
public targetFilePath: string = plugins.path.join(paths.distWebDir, 'index.html');
public async checkIfExists() {
return plugins.smartfile.fs.fileExists(this.sourceFilePath);
}
// copies the html
public async copyHtml() {
if (!(await this.checkIfExists())) {
return;
}
await plugins.smartfile.fs.copy(this.sourceFilePath, this.targetFilePath);
}
// copies and minifies the html
public async minifyHtml() {
if (!(await this.checkIfExists())) {
return;
}
const fileString = plugins.smartfile.fs.toStringSync(this.sourceFilePath);
const minifiedHtml = plugins.htmlMinifier.minify(fileString, {
minifyCSS: true,
minifyJS: true,
sortAttributes: true,
sortClassName: true,
removeAttributeQuotes: true,
collapseWhitespace: true,
collapseInlineTagWhitespace: true,
removeComments: true
});
plugins.smartfile.memory.toFsSync(minifiedHtml, this.targetFilePath);
}
}

6
ts/tsbundle.paths.ts Normal file
View File

@ -0,0 +1,6 @@
import * as plugins from './tsbundle.plugins';
export const cwd = process.cwd();
export const packageDir = plugins.path.join(__dirname, '../');
export const htmlDir = plugins.path.join(cwd, './html');
export const distWebDir = plugins.path.join(cwd, './dist_web');

View File

@ -1,9 +1,15 @@
// node native
import * as path from 'path';
export { path };
// pushrocks scope // pushrocks scope
import * as smartcli from '@pushrocks/smartcli'; import * as smartcli from '@pushrocks/smartcli';
import * as smartfile from '@pushrocks/smartfile';
import * as smartlog from '@pushrocks/smartlog'; import * as smartlog from '@pushrocks/smartlog';
import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local'; import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local';
export { smartcli, smartlog, smartlogDestinationLocal }; export { smartcli, smartfile, smartlog, smartlogDestinationLocal };
// third party scope // third party scope
import * as rollup from 'rollup'; import * as rollup from 'rollup';
@ -14,6 +20,8 @@ import rollupSourceMaps from 'rollup-plugin-sourcemaps';
import { terser as rollupTerser } from 'rollup-plugin-terser'; import { terser as rollupTerser } from 'rollup-plugin-terser';
import rollupTypescript from 'rollup-plugin-typescript2'; import rollupTypescript from 'rollup-plugin-typescript2';
import * as htmlMinifier from 'html-minifier';
export { export {
rollup, rollup,
rollupBabel, rollupBabel,
@ -21,5 +29,6 @@ export {
rollupResolve, rollupResolve,
rollupSourceMaps, rollupSourceMaps,
rollupTerser, rollupTerser,
rollupTypescript rollupTypescript,
htmlMinifier
}; };