Compare commits

...

24 Commits

Author SHA1 Message Date
f7b260f28b 1.0.84 2021-07-23 15:45:23 +02:00
ba44efe4cc fix(core): update 2021-07-23 15:45:23 +02:00
07718ba618 1.0.83 2021-07-23 01:58:53 +02:00
0af4e4cfb3 fix(core): update 2021-07-23 01:58:52 +02:00
b54681f063 1.0.82 2021-07-22 22:29:52 +02:00
37f3df9deb fix(core): update 2021-07-22 22:29:52 +02:00
4b0d99cf3a 1.0.81 2021-07-22 21:55:08 +02:00
38426a24bc fix(core): update 2021-07-22 21:55:08 +02:00
dadd0b70b3 1.0.80 2021-03-08 00:45:20 +00:00
516b0ff578 fix(core): update 2021-03-08 00:45:20 +00:00
e5fa36fb06 1.0.79 2021-03-08 00:43:15 +00:00
228756951f fix(core): update 2021-03-08 00:43:15 +00:00
a22c837eac 1.0.78 2020-08-13 01:07:08 +00:00
a1a341b2de fix(core): update 2020-08-13 01:07:07 +00:00
046d3107e8 1.0.77 2020-08-12 16:32:17 +00:00
956bcdf16e fix(core): update 2020-08-12 16:32:16 +00:00
f61640b65a 1.0.76 2020-08-12 16:14:04 +00:00
0125591149 fix(core): update 2020-08-12 16:14:04 +00:00
6aa0d800b3 1.0.75 2020-08-12 16:08:02 +00:00
19160170a9 fix(core): update 2020-08-12 16:08:02 +00:00
8bf9e3d691 1.0.74 2020-08-12 15:51:13 +00:00
737d43b59e fix(core): update 2020-08-12 15:51:11 +00:00
7e5a225ae1 1.0.73 2020-08-10 21:10:20 +00:00
bb13c14d3b fix(core): update 2020-08-10 21:10:19 +00:00
10 changed files with 17934 additions and 3893 deletions

View File

@ -19,23 +19,36 @@ mirror:
stage: security
script:
- npmci git mirror
only:
- tags
tags:
- lossless
- docker
- notpriv
audit:
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
- npmci command npm audit --audit-level=high --only=dev
tags:
- lossless
- docker
- notpriv
allow_failure: true
# ====================
# test stage
@ -50,9 +63,7 @@ testStable:
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- priv
testBuild:
stage: test
@ -63,9 +74,7 @@ testBuild:
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- notpriv
release:
stage: release
@ -85,6 +94,8 @@ release:
codequality:
stage: metadata
allow_failure: true
only:
- tags
script:
- npmci command npm install -g tslint typescript
- npmci npm prepare

21357
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@gitzone/tsbundle",
"version": "1.0.72",
"version": "1.0.84",
"private": false,
"description": "a bundler using rollup for painless bundling of web projects",
"main": "dist_ts/index.js",
@ -8,46 +8,47 @@
"author": "Lossless GmbH",
"license": "MIT",
"scripts": {
"test": "cd test && node ../cli.ts.js --production",
"test": "npm run build && (tstest test/) && (cd test && node ../cli.js --production)",
"build": "(tsbuild --web)"
},
"bin": {
"tsbundle": "cli.js"
},
"devDependencies": {
"@gitzone/tsbuild": "^2.1.24",
"@gitzone/tsrun": "^1.2.12",
"@gitzone/tstest": "^1.0.33",
"@pushrocks/tapbundle": "^3.2.1",
"tslint": "^6.1.2",
"@gitzone/tsbuild": "^2.1.25",
"@gitzone/tsrun": "^1.2.17",
"@gitzone/tstest": "^1.0.54",
"@pushrocks/tapbundle": "^3.2.14",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.15.0"
},
"dependencies": {
"@babel/core": "^7.9.6",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-decorators": "^7.8.3",
"@babel/plugin-transform-runtime": "^7.9.6",
"@babel/preset-env": "^7.9.6",
"@babel/runtime": "^7.9.6",
"@pushrocks/early": "^3.0.3",
"@pushrocks/smartcli": "^3.0.12",
"@pushrocks/smartfile": "^7.0.12",
"@pushrocks/smartlog": "^2.0.35",
"@babel/core": "^7.14.8",
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-proposal-decorators": "^7.14.5",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/preset-env": "^7.14.8",
"@babel/runtime": "^7.14.8",
"@pushrocks/early": "^3.0.6",
"@pushrocks/smartcli": "^3.0.14",
"@pushrocks/smartfile": "^8.0.10",
"@pushrocks/smartlog": "^2.0.44",
"@pushrocks/smartlog-destination-local": "^8.0.8",
"@pushrocks/smartparcel": "^1.0.4",
"@rollup/plugin-commonjs": "^12.0.0",
"@rollup/plugin-json": "^4.0.3",
"@rollup/plugin-node-resolve": "^8.0.0",
"@rollup/plugin-typescript": "^4.1.2",
"@types/html-minifier": "^3.5.3",
"@types/node": "^14.0.19",
"@pushrocks/smartparcel": "^1.0.9",
"@pushrocks/smartpromise": "^3.1.6",
"@pushrocks/smartspawn": "^2.0.9",
"@rollup/plugin-commonjs": "^19.0.1",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^13.0.2",
"@rollup/plugin-typescript": "^8.2.3",
"@types/html-minifier": "^4.0.1",
"@types/node": "^16.4.0",
"html-minifier": "^4.0.0",
"rollup": "^2.10.9",
"rollup": "^2.53.3",
"rollup-plugin-babel": "^4.4.0",
"rollup-plugin-sourcemaps": "^0.6.2",
"rollup-plugin-terser": "^5.3.0",
"terser": "^4.7.0",
"typescript": "^3.9.6"
"rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-terser": "^7.0.2",
"typescript": "^4.3.5"
},
"files": [
"ts/**/*",

View File

@ -1,8 +1,16 @@
import { expect, tap } from '@pushrocks/tapbundle';
import * as tsbundle from '../ts/index';
import * as tsbundle from '../dist_ts/index';
tap.test('first test', async () => {
await tsbundle.runCli();
});
import * as path from 'path';
tap.test('should bundle test', async () => {
const tsbundleInstance = new tsbundle.TsBundle();
await tsbundleInstance.buildTest(process.cwd() + '/test', './ts_web/index.ts', './dist_manual/test.js', 'rollup')
})
tap.test('should bundle production', async () => {
const tsbundleInstance = new tsbundle.TsBundle();
await tsbundleInstance.buildProduction(process.cwd(), './test/ts_web/index.ts', './test/dist_manual/production.js')
})
tap.start();

View File

@ -1,3 +1,18 @@
const myConst = 'hello';
const myConst: string = 'hello';
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class BugReport {
type = "report";
title: string;
constructor(t: string) {
this.title = t;
}
}
console.log(myConst);

View File

@ -2,138 +2,40 @@ import * as plugins from './tsbundle.plugins';
import { logger } from './tsbundle.logging';
export class TsBundle {
/**
* the basic default options for rollup
*/
public getBaseOptions(
fromArg: string = `ts_web/index.ts`,
toArg: string = 'dist_bundle/bundle.js'
) {
logger.log('info', `from: ${fromArg}`);
logger.log('info', `to: ${toArg}`);
const baseOptions: plugins.rollup.RollupOptions = {
input: fromArg,
output: {
name: 'tsbundle',
file: toArg,
format: 'iife',
sourcemap: true,
},
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
external: [],
watch: {
include: ['src/**'],
},
plugins: [
// Compile TypeScript files
plugins.rollupTypescript({
include: plugins.path.parse(fromArg).dir
? plugins.path.parse(fromArg).dir + '/**/*.ts'
: '**/*.ts',
declaration: false,
emitDecoratorMetadata: true,
experimentalDecorators: true,
inlineSourceMap: true,
noEmitOnError: true,
lib: ['esnext', 'dom', 'es2017.object'],
noImplicitAny: false,
target: 'es2018',
allowSyntheticDefaultImports: true,
}),
plugins.rollupJson(),
// Allow node_modules resolution, so you can use 'external' to control
// which external modules to include in the bundle
// https://github.com/rollup/rollup-plugin-node-resolve#usage
plugins.rollupResolve(),
plugins.rollupCommonjs({}),
// Resolve source maps to the original source
plugins.rollupSourceMaps(),
/*plugins.rollupBabel({
runtimeHelpers: true,
extensions: ['.js', '.jsx', '.ts', '.tsx'],
babelrc: false,
presets: [
[
'@babel/preset-env',
{
modules: false,
targets: {
chrome: '41'
}
}
]
],
plugins: [
[
'@babel/plugin-transform-runtime',
{
regenerator: true
}
]
]
})*/
],
};
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: true,
})
);
return productionOptions;
}
constructor() {
// Nothing here
}
/**
* creates a bundle for the test enviroment
*/
public async buildTest(
fromArg: string,
toArg: string,
bundlerArg: 'rollup' | 'parcel' = 'rollup'
) {
// create a bundle
switch (bundlerArg) {
case 'rollup':
logger.log('info', `bundling for TEST!`);
const buildOptions = this.getOptionsTest(fromArg, toArg);
const bundle = await plugins.rollup.rollup(buildOptions);
bundle.generate(buildOptions.output as plugins.rollup.OutputOptions);
await bundle.write(buildOptions.output as plugins.rollup.OutputOptions);
logger.log('ok', `Successfully bundled files!`);
break;
case 'parcel':
const parsedPath = plugins.path.parse(toArg);
const parcelInstance = new plugins.smartparcel.Parcel(fromArg, parsedPath.dir, parsedPath.base);
await parcelInstance.build();
}
}
/**
* 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 as plugins.rollup.OutputOptions);
await bundle.write(buildOptions.output as plugins.rollup.OutputOptions);
logger.log('ok', `Successfully bundled files!`);
}
public async buildTest(cwdArg: string, fromArg: string, toArg: string, bundlerArg: 'rollup' | 'parcel') {
const done = plugins.smartpromise.defer();
const threadsimple = new plugins.smartspawn.ThreadSimple(plugins.path.join(__dirname, './tsbundle.class.tsbundleprocess.js'), [], {
env: {
...process.env,
tsbundleMode: 'test',
tsbundleCwd: cwdArg,
tsbundleFrom: fromArg,
tsbundleTo: toArg,
tsbundleBundler: bundlerArg
}
})
const childProcess = await threadsimple.start();
childProcess.on('exit', (status) => {
done.resolve();
})
await done.promise;
};
public async buildProduction(cwdArg: string, fromArg: string, toArg: string) {
const done = plugins.smartpromise.defer();
const threadsimple = new plugins.smartspawn.ThreadSimple(plugins.path.join(__dirname, './tsbundle.class.tsbundleprocess.js'), [], {
env: {
...process.env,
tsbundleMode: 'production',
tsbundleCwd: cwdArg,
tsbundleFrom: fromArg,
tsbundleTo: toArg
}
})
const childProcess = await threadsimple.start();
childProcess.on('exit', (status) => {
done.resolve();
})
await done.promise;
};
}

View File

@ -0,0 +1,156 @@
import * as plugins from './tsbundle.plugins';
import { logger } from './tsbundle.logging';
export class TsBundleProcess {
/**
* the basic default options for rollup
*/
public getBaseOptions(
fromArg: string = `ts_web/index.ts`,
toArg: string = 'dist_bundle/bundle.js'
) {
logger.log('info', `from: ${fromArg}`);
logger.log('info', `to: ${toArg}`);
const baseOptions: plugins.rollup.RollupOptions = {
input: fromArg,
output: {
name: 'tsbundle',
file: toArg,
format: 'iife',
sourcemap: true,
},
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
external: [],
watch: {
include: ['src/**'],
},
plugins: [
// Compile TypeScript files
plugins.rollupTypescript({
include: plugins.path.parse(fromArg).dir
? plugins.path.parse(fromArg).dir + '/**/*.ts'
: '**/*.ts',
declaration: false,
emitDecoratorMetadata: true,
experimentalDecorators: true,
inlineSourceMap: true,
noEmitOnError: true,
lib: ['esnext', 'dom', 'es2017.object'],
noImplicitAny: false,
target: 'es2018',
allowSyntheticDefaultImports: true,
}),
plugins.rollupJson(),
// Allow node_modules resolution, so you can use 'external' to control
// which external modules to include in the bundle
// https://github.com/rollup/rollup-plugin-node-resolve#usage
plugins.rollupResolve(),
plugins.rollupCommonjs({}),
// Resolve source maps to the original source
plugins.rollupSourceMaps(),
/*plugins.rollupBabel({
runtimeHelpers: true,
extensions: ['.js', '.jsx', '.ts', '.tsx'],
babelrc: false,
presets: [
[
'@babel/preset-env',
{
modules: false,
targets: {
chrome: '41'
}
}
]
],
plugins: [
[
'@babel/plugin-transform-runtime',
{
regenerator: true
}
]
]
})*/
],
};
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
})
);
return productionOptions;
}
constructor() {
// Nothing here
}
/**
* creates a bundle for the test enviroment
*/
public async buildTest(
fromArg: string,
toArg: string,
bundlerArg: 'rollup' | 'parcel' = 'rollup'
) {
// create a bundle
switch (bundlerArg) {
case 'rollup':
logger.log('info', `bundling for TEST!`);
const buildOptions = this.getOptionsTest(fromArg, toArg);
const bundle = await plugins.rollup.rollup(buildOptions);
bundle.generate(buildOptions.output as plugins.rollup.OutputOptions);
await bundle.write(buildOptions.output as plugins.rollup.OutputOptions);
logger.log('ok', `Successfully bundled files!`);
break;
case 'parcel':
const parsedPath = plugins.path.parse(toArg);
const parcelInstance = new plugins.smartparcel.Parcel(fromArg, parsedPath.dir, parsedPath.base);
await parcelInstance.build();
}
}
/**
* 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 as plugins.rollup.OutputOptions);
await bundle.write(buildOptions.output as plugins.rollup.OutputOptions);
logger.log('ok', `Successfully bundled files!`);
}
}
const run = async () => {
console.log('running spawned compilation process');
console.log(`cwd: ${process.env.tsbundleCwd}`);
console.log(`from: ${process.env.tsbundleFrom}`);
console.log(`to: ${process.env.tsbundleTo}`);
console.log(`mode: ${process.env.tsbundleMode}`);
process.chdir(process.env.tsbundleCwd);
console.log(`switched to ${process.cwd()}`)
const tsbundleProcessInstance = new TsBundleProcess();
if (process.env.tsbundleMode === 'test') {
tsbundleProcessInstance.buildTest(process.env.tsbundleFrom, process.env.tsbundleTo, process.env.tsbundleBundler as 'rollup' | 'parcel');
} else {
tsbundleProcessInstance.buildProduction(process.env.tsbundleFrom, process.env.tsbundleTo);
}
}
run();

View File

@ -10,12 +10,12 @@ export const runCli = async () => {
// const htmlHandler = new HtmlHandler();
switch (true) {
case argvArg.production || process.env.CI:
await tsbundle.buildProduction(argvArg.from, argvArg.to);
await tsbundle.buildProduction(process.cwd(), argvArg.from, argvArg.to);
// await htmlHandler.minifyHtml();
break;
case argvArg.test:
default:
await tsbundle.buildTest(argvArg.from, argvArg.to);
await tsbundle.buildTest(process.cwd(), argvArg.from, argvArg.to, 'rollup');
// await htmlHandler.copyHtml();
return;
}
@ -26,12 +26,12 @@ export const runCli = async () => {
// const htmlHandler = new HtmlHandler();
switch (true) {
case argvArg.production || process.env.CI:
await tsbundle.buildProduction('./ts_web/index.ts', './dist_bundle/bundle.js');
await tsbundle.buildProduction(process.cwd(), './ts_web/index.ts', './dist_bundle/bundle.js');
// await htmlHandler.minifyHtml();
break;
case argvArg.test:
default:
await tsbundle.buildTest('./ts_web/index.ts', './dist_bundle/bundle.js');
await tsbundle.buildTest(process.cwd(), './ts_web/index.ts', './dist_bundle/bundle.js', 'rollup');
// await htmlHandler.copyHtml();
return;
}
@ -42,12 +42,12 @@ export const runCli = async () => {
// const htmlHandler = new HtmlHandler();
switch (true) {
case argvArg.production || process.env.CI:
await tsbundle.buildProduction('./ts/index.ts', './dist_bundle/bundle.js');
await tsbundle.buildProduction(process.cwd(), './ts/index.ts', './dist_bundle/bundle.js');
// await htmlHandler.minifyHtml();
break;
case argvArg.test:
default:
await tsbundle.buildTest('./ts/index.ts', './dist_bundle/bundle.js');
await tsbundle.buildTest(process.cwd(), './ts/index.ts', './dist_bundle/bundle.js', 'rollup');
// await htmlHandler.copyHtml();
return;
}
@ -58,12 +58,12 @@ export const runCli = async () => {
const htmlHandler = new HtmlHandler();
switch (true) {
case argvArg.production || process.env.CI:
await tsbundle.buildProduction('./ts_web/index.ts', './dist_serve/bundle.js');
await tsbundle.buildProduction(process.cwd(), './ts_web/index.ts', './dist_serve/bundle.js');
await htmlHandler.minifyHtml();
break;
case argvArg.test:
default:
await tsbundle.buildTest('./ts_web/index.ts', './dist_serve/bundle.js');
await tsbundle.buildTest(process.cwd(), './ts_web/index.ts', './dist_serve/bundle.js', 'rollup');
await htmlHandler.copyHtml();
return;
}

View File

@ -9,8 +9,10 @@ import * as smartfile from '@pushrocks/smartfile';
import * as smartlog from '@pushrocks/smartlog';
import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local';
import * as smartparcel from '@pushrocks/smartparcel';
import * as smartpromise from '@pushrocks/smartpromise';
import * as smartspawn from '@pushrocks/smartspawn';
export { smartcli, smartfile, smartlog, smartlogDestinationLocal, smartparcel };
export { smartcli, smartfile, smartlog, smartlogDestinationLocal, smartparcel, smartpromise, smartspawn };
// third party scope
import * as rollup from 'rollup';

5
tsconfig.json Normal file
View File

@ -0,0 +1,5 @@
{
"compilerOptions": {
"experimentalDecorators": true
}
}