Compare commits

...

61 Commits

Author SHA1 Message Date
7e46b55de5 8.0.27 2018-02-26 22:51:06 +01:00
6553e7432c now runs offline 2018-02-26 22:51:03 +01:00
cf4db90aef 8.0.26 2017-11-28 17:34:02 +01:00
8896d3ef76 refactor 2017-11-28 17:33:55 +01:00
c0b7dc2547 8.0.25 2017-11-25 20:57:51 +02:00
d65f19d108 update deps 2017-11-25 20:57:40 +02:00
5de4646453 8.0.24 2017-10-07 13:55:12 +02:00
44e9fcc977 update dependencies 2017-10-07 13:55:06 +02:00
784aec1ec3 8.0.23 2017-10-05 14:58:52 +02:00
61b7bbb168 change lib inclusion for tests 2017-10-05 14:58:49 +02:00
1d662ddef4 8.0.22 2017-09-23 00:00:27 +02:00
f7351c914e update dependencies 2017-09-23 00:00:25 +02:00
7132ae11a8 fix ci 2017-09-13 17:48:15 +02:00
b195b8911b switch position of mirror 2017-09-13 17:47:30 +02:00
e331e870d9 8.0.21 2017-09-13 17:44:34 +02:00
3a6bd3b583 now working when npms.io is down 2017-09-13 17:44:31 +02:00
594bccfc82 8.0.20 2017-09-11 14:30:36 +02:00
d9f1d36d14 update dependencies 2017-09-11 14:30:32 +02:00
f12c4aabd8 8.0.19 2017-09-08 18:04:44 +02:00
b62f7d8b31 update tracking domains 2017-09-08 18:04:40 +02:00
56cccb1b14 8.0.18 2017-09-08 15:13:29 +02:00
850df45d7f add mirror stage 2017-09-08 15:13:27 +02:00
2b1f371d8a 8.0.17 2017-09-06 15:59:40 +02:00
8196ca50a7 update readme 2017-09-06 15:59:27 +02:00
ad96661dda update structure docs 2017-09-06 15:52:46 +02:00
2fc6c3d358 8.0.16 2017-09-05 18:48:16 +02:00
0c74fb3343 update docs 2017-09-05 18:48:12 +02:00
d821a2efa6 update indention 2017-08-31 20:48:30 +02:00
66f2321d99 8.0.15 2017-08-29 16:17:52 +02:00
816f4f57fb update ci 2017-08-29 16:17:46 +02:00
9bdf3ec4c7 8.0.14 2017-08-29 16:15:27 +02:00
b9d4953bcd update analytics 2017-08-29 16:15:24 +02:00
8c0fcdf5b7 8.0.13 2017-08-20 00:48:35 +02:00
a477cc00e7 update dependencies 2017-08-20 00:48:21 +02:00
00b9a742ab 8.0.12 2017-08-19 12:39:29 +02:00
f5b8ab84cf update dependencies 2017-08-19 12:39:25 +02:00
4fc4efc0b9 8.0.11 2017-08-18 13:15:41 +02:00
30136f01a8 update dependencies 2017-08-18 13:15:38 +02:00
d1d85819d7 8.0.10 2017-08-17 12:06:12 +02:00
e267fce3bb update dependencies 2017-08-17 12:06:08 +02:00
f964b2737f 8.0.9 2017-08-16 23:53:56 +02:00
6ac634e178 improve update logs 2017-08-16 23:53:52 +02:00
3105f8f401 8.0.8 2017-08-16 23:46:26 +02:00
70b83fcafc fix smartupdate execution 2017-08-16 23:46:20 +02:00
7e8e4b1891 8.0.7 2017-08-16 23:33:48 +02:00
aa8279c281 update dependencies 2017-08-16 23:33:39 +02:00
7564e1fd18 8.0.6 2017-08-16 19:13:14 +02:00
a6fbe7da33 update 2017-08-16 19:13:01 +02:00
e0f208ba41 8.0.5 2017-08-02 13:20:05 +02:00
d2cf4346d4 update dependencies 2017-08-02 13:20:01 +02:00
b769dcae4f 8.0.4 2017-07-31 15:43:36 +02:00
7b58535dda update to latest version of smartsystem 2017-07-31 15:43:31 +02:00
f16103a632 8.0.3 2017-07-31 14:43:56 +02:00
befed099c5 update highlighting 2017-07-31 14:43:50 +02:00
6c0fa380a9 remove old Changelog 2017-07-31 14:39:46 +02:00
22de2c784f 8.0.2 2017-07-31 14:36:38 +02:00
e8fe4f1720 update docs and description 2017-07-31 14:36:33 +02:00
d7443bbf17 8.0.1 2017-07-30 22:39:55 +02:00
c4668bc0a6 add docs 2017-07-30 22:39:42 +02:00
bc489b6bf3 8.0.0 2017-07-30 22:27:59 +02:00
e2d0a7a939 update to more favorable testfile loading approach 2017-07-30 22:27:51 +02:00
57 changed files with 1239 additions and 3931 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.nogit/
node_modules/
test/
pages/

View File

@ -7,15 +7,26 @@ cache:
key: "$CI_BUILD_STAGE"
stages:
- mirror
- test
- release
- trigger
- pages
mirror:
image: hosttoday/ht-docker-node:npmci
stage: mirror
script:
- npmci git mirror
tags:
- docker
testLEGACY:
stage: test
script:
- npmci test legacy
- npmci node install legacy
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
@ -24,7 +35,9 @@ testLEGACY:
testLTS:
stage: test
script:
- npmci test lts
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
@ -32,7 +45,9 @@ testLTS:
testSTABLE:
stage: test
script:
- npmci test stable
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
@ -40,7 +55,8 @@ testSTABLE:
release:
stage: release
script:
- npmci publish
- npmci npm prepare
- npmci npm publish
only:
- tags
tags:

View File

@ -1,11 +0,0 @@
Please view this file on the master branch, on stable branches it's out of date.
v 6.0.0 (released)
- remove TypeDoc, please look at npmpage
- check package.json
v 7.0.0
- switch from mocha to tap
- run tests in SubProcesses with coverage
- improve ES6 handling
- add smartanalytics

1
dist/index.d.ts vendored
View File

@ -0,0 +1 @@
export {};

View File

@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
* Note: Test files are only compiled in memory
* -------------------------------------------- */
const q = require("smartq");
const plugins = require("./mod00.plugins");
const NpmtsAssets = require("./mod00.assets");
const NpmtsCheck = require("./mod00.check");
const NpmtsClean = require("./mod00.clean");
const NpmtsCompile = require("./mod00.compile");
const plugins = require("./mod.plugins");
const NpmtsAssets = require("./mod.assets");
const NpmtsCheck = require("./mod.check");
const NpmtsClean = require("./mod.clean");
const NpmtsCompile = require("./mod.compile");
exports.run = function (configArg) {
let done = q.defer();
plugins.beautylog.ora.text('starting TypeScript Compilation');

View File

@ -2,14 +2,14 @@
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
const mod00_check_1 = require("../mod00/mod00.check");
const plugins = require("./mod.plugins");
const mod_check_1 = require("../mod_compile/mod.check");
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;
plugins.beautylog.ora.text('now looking at ' + 'required assets');
if (config.cli === true) {
let mainJsPath = mod00_check_1.projectInfo.packageJson.main;
let mainJsPath = mod_check_1.projectInfo.packageJson.main;
let cliJsString = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'));
cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath);
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js'));

View File

@ -11,7 +11,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const projectinfo_1 = require("projectinfo");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
const plugins = require("./mod.plugins");
let checkProjectTypings = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check Project Typings...');
@ -20,7 +20,6 @@ let checkProjectTypings = (configArg) => {
plugins.beautylog.error(`please add typings field to package.json`);
process.exit(1);
}
;
done.resolve(configArg);
return done.promise;
};
@ -66,7 +65,6 @@ let checkDependencies = (configArg) => {
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
}
;
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
}

View File

@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
const plugins = require("./mod.plugins");
/**
* removes the dist directory which will be entirely rebuild
*/

View File

@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
const plugins = require("./mod.plugins");
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;

View File

@ -11,9 +11,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------
* This module tests the compiled TypeScript files
* -------------------------------------------- */
const plugins = require("./mod02.plugins");
const plugins = require("./mod.plugins");
const paths = require("../npmts.paths");
const q = require("smartq");
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [
'DOM',
'ESNext'
]
};
/**
* runs mocha
* @returns INpmtsConfig
@ -31,15 +40,7 @@ let tap = function (configArg) {
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
@ -49,21 +50,8 @@ let tap = function (configArg) {
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpFunction.forEach((fileArg) => __awaiter(this, void 0, void 0, function* () {
let stringToModify = fileArg.contents.toString();
let testRegex = /\/\/\smodule\stestimport\nimport[a-zA-Z0-9\*\s]*\sfrom\s'(..\/ts\/index)'/;
let replacer = (match, group1, offset, completeString) => {
return match.replace(group1, '../dist/index');
};
fileArg.contents = Buffer.from(stringToModify.replace(testRegex, replacer));
})),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()

57
dist/npmts.cli.js vendored
View File

@ -1,4 +1,12 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins");
@ -15,33 +23,50 @@ const NpmtsShip = require("./npmts.ship");
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* It is just an https call to our own Lossless Analytics API.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts', 'UA-64087619-5');
npmtsAnalytics.sendEvent('npm', 'exec', 'git.zone');
exports.run = () => {
let npmtsAnalytics = new plugins.smartanalytics.Analytics({
apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone',
appName: 'npmts'
});
process.nextTick(() => __awaiter(this, void 0, void 0, function* () {
// make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', {
executionMode: (yield NpmtsConfig.configPromise).mode,
tsOptions: (yield NpmtsConfig.configPromise).tsOptions,
watch: (yield NpmtsConfig.configPromise).watch,
coverageTreshold: (yield NpmtsConfig.configPromise).coverageTreshold
}).catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...');
});
}));
exports.run = () => __awaiter(this, void 0, void 0, function* () {
let done = q.defer();
plugins.beautylog.figletSync('NPMTS');
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
// check for updates
yield plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html');
plugins.beautylog.log('---------------------------------------------');
let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
return NpmtsConfig.run(argvArg);
})
.then((configArg) => {
let done = q.defer();
plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.mod00.load()
.then((mod00) => {
return mod00.run(configArg);
NpmtsMods.modCompile.load()
.then((modCompile) => {
return modCompile.run(configArg);
})
.then(configArg => {
let done = q.defer();
NpmtsMods.mod01.load()
.then(mod01 => {
return mod01.run(configArg);
NpmtsMods.modDocs.load()
.then(modDocs => {
return modDocs.run(configArg);
})
.then(configArg => {
done.resolve(configArg);
@ -50,9 +75,9 @@ exports.run = () => {
})
.then(configArg => {
let done = q.defer();
NpmtsMods.mod02.load()
.then(mod02 => {
return mod02.run(configArg);
NpmtsMods.modTest.load()
.then(modTest => {
return modTest.run(configArg);
})
.then(configArg => {
done.resolve(configArg);
@ -68,5 +93,5 @@ exports.run = () => {
} });
npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse();
return done.promise;
};
return yield done.promise;
});

View File

@ -23,3 +23,4 @@ export interface INpmtsConfig {
};
}
export declare let run: (argvArg: any) => Promise<{}>;
export declare let configPromise: Promise<INpmtsConfig>;

View File

@ -2,9 +2,9 @@
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths");
const q = require("smartq");
const smartq = require("smartq");
exports.run = function (argvArg) {
let done = q.defer();
let done = smartq.defer();
let defaultConfig = {
argv: undefined,
coverageTreshold: 70,
@ -63,5 +63,9 @@ exports.run = function (argvArg) {
}
plugins.beautylog.ok('build options are ready!');
done.resolve(config);
configDeferred.resolve(config);
return done.promise;
};
// config deferred usage
let configDeferred = smartq.defer();
exports.configPromise = configDeferred.promise;

14
dist/npmts.mods.d.ts vendored
View File

@ -1,7 +1,7 @@
import { LazyModule } from 'smartsystem';
import * as _mod00 from './mod00/index';
import * as _mod01 from './mod01/index';
import * as _mod02 from './mod02/index';
export declare let mod00: LazyModule<typeof _mod00>;
export declare let mod01: LazyModule<typeof _mod01>;
export declare let mod02: LazyModule<typeof _mod02>;
import * as plugins from './npmts.plugins';
import * as _modCompile from './mod_compile/index';
import * as _modDocs from './mod_docs/index';
import * as _modTest from './mod_test/index';
export declare let modCompile: plugins.smartsystem.LazyModule<typeof _modCompile>;
export declare let modDocs: plugins.smartsystem.LazyModule<typeof _modDocs>;
export declare let modTest: plugins.smartsystem.LazyModule<typeof _modTest>;

6
dist/npmts.mods.js vendored
View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const smartsystem_1 = require("smartsystem");
exports.mod00 = new smartsystem_1.LazyModule('./mod00/index', __dirname);
exports.mod01 = new smartsystem_1.LazyModule('./mod01/index', __dirname);
exports.mod02 = new smartsystem_1.LazyModule('./mod02/index', __dirname);
exports.modCompile = new smartsystem_1.LazyModule('./mod_compile/index', __dirname);
exports.modDocs = new smartsystem_1.LazyModule('./mod_docs/index', __dirname);
exports.modTest = new smartsystem_1.LazyModule('./mod_test/index', __dirname);

View File

@ -1,4 +1,3 @@
import 'typings-global';
import * as beautylog from 'beautylog';
declare let depcheck: any;
import * as lodash from 'lodash';
@ -13,5 +12,6 @@ import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem';
import * as smartupdate from 'smartupdate';
import * as through2 from 'through2';
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smarterror, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smarterror, smartfile, smartpath, smartstream, smartstring, smartsystem, smartupdate, through2 };

View File

@ -1,6 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global");
const beautylog = require("beautylog");
exports.beautylog = beautylog;
let depcheck = require('depcheck');
@ -29,5 +28,7 @@ const smartstring = require("smartstring");
exports.smartstring = smartstring;
const smartsystem = require("smartsystem");
exports.smartsystem = smartsystem;
const smartupdate = require("smartupdate");
exports.smartupdate = smartupdate;
const through2 = require("through2");
exports.through2 = through2;

9
docs/changelog.md Normal file
View File

@ -0,0 +1,9 @@
# Changelog
## 2017-07-30: Version 7.x.x -> 8.x.x
Testfiles in ./test/ can now import files directly from the ts dir:
```javascript
// ./test/test.ts
import * as myModule from '../ts/index
```

38
docs/getstarted.md Normal file
View File

@ -0,0 +1,38 @@
---
name: Get Started
description: learn how to quickly write npm TypeScript modules
---
# Get Started with NPMTS
and learn how to quickly write npm TypeScript modules
## Step1: Install the tools
To use npmts install it using npm or yarn:
```sh
npm install -g npmts # install with npm
yarn global add npmts # install with yarn
```
For the purpose of getting started quickly please also install **gitzone**.
It'll proovide awesome scaffolding for new npmts maintained modules and also updates them later on.
```sh
npm install -g gitzone # install with npm
yarn global add gitzone # install with yarn
```
You can make sure npmts and gitzone are installed correctly by typing `npmts -v && gitzone -v`.
## Scaffold a new module
To scaffold a new module type
```shell
gitzone template npm
```
This will run you through a series of question to get gitzone to know the specifics of your module.
Enter all information accordingly.
## Run NPMTS for the first time

View File

@ -1,8 +1,9 @@
---
name: Start
name: Index
description: best practice npm TypeScript modules
---
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)

26
docs/structure.md Normal file
View File

@ -0,0 +1,26 @@
---
name: npmts project structure
description: how npmts projects are structured
---
# npmts - Project Structure
**locally**
```text
projectroot
|- .nogit/ # contains files that should not be checked into git - NOgit
|- dist/ # contains compiled js files and their corresponding typings - git
|- node_modules/ # contains the installed node modules - NOgit
|- test/ # contains the test files - git
|- ts/ # contains the source TypeScript files - git
|
|- .gitignore # the normal gitignore file
|- .gitlab-ci.yml # the gitlab ci yml file
|- npmextra.json # npmextra.json
|- package.json # the standard npm module package.json file
|- readme.md # the standard project readme
|- tslint.json # the standard tslint.json for TypeScript
|- yarn.lock # yarn.lock - the standard yarn.lock file
```
**in git**

2826
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "npmts",
"version": "7.2.10",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"version": "8.0.27",
"description": "best practice npm TypeScript modules",
"main": "dist/index.js",
"bin": {
"npmts": "assets/cliNpmts.js"
@ -34,35 +34,37 @@
},
"homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": {
"@types/gulp-sourcemaps": "0.0.31",
"@types/minimatch": "^2.0.29",
"@types/gulp-sourcemaps": "0.0.32",
"@types/minimatch": "^3.0.1",
"@types/through2": "^2.0.33",
"beautylog": "^6.1.10",
"depcheck": "^0.6.7",
"depcheck": "^0.6.8",
"early": "^2.1.1",
"gulp-function": "^2.2.9",
"gulp-sourcemaps": "^2.6.0",
"gulp-typescript": "^3.2.1",
"gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^4.0.1",
"lodash": "^4.17.4",
"npmextra": "^2.0.8",
"projectinfo": "^3.0.2",
"smartanalytics": "^1.0.6",
"npmextra": "^2.0.9",
"projectinfo": "^3.0.4",
"smartanalytics": "^2.0.9",
"smartchok": "^1.0.11",
"smartcli": "^2.0.7",
"smartcli": "^2.0.9",
"smartcov": "^1.0.2",
"smarterror": "^1.0.3",
"smartfile": "^4.2.17",
"smartfile": "^4.2.26",
"smartgulp": "^1.0.6",
"smartpath": "^3.2.8",
"smartq": "^1.1.6",
"smartstream": "^1.0.10",
"smartstring": "^2.0.24",
"smartsystem": "^1.0.18",
"tapbuffer": "^1.0.24",
"smartstring": "^2.0.28",
"smartsystem": "^2.0.2",
"smartupdate": "^1.0.13",
"tapbuffer": "^1.0.31",
"through2": "^2.0.3",
"tsn": "^2.0.15",
"typescript": "^2.4.2",
"typings-global": "^1.0.20"
"typescript": "^2.6.2"
},
"devDependencies": {}
"devDependencies": {
"@types/node": "^9.4.6"
}
}

View File

@ -1,5 +1,5 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
@ -38,6 +38,9 @@ For more information about how to best write tap tests check out the [tapbundle
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
## Changelog
For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html).
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)

View File

@ -1,27 +0,0 @@
/* ------------------------------------------
* This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */
import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod00.plugins'
import * as NpmtsAssets from './mod00.assets'
import * as NpmtsCheck from './mod00.check'
import * as NpmtsClean from './mod00.clean'
import * as NpmtsCompile from './mod00.compile'
export let run = function(configArg: INpmtsConfig): Promise<INpmtsConfig> {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('starting TypeScript Compilation')
NpmtsClean.run(configArg)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(function(){
done.resolve(configArg)
})
return done.promise
}

View File

@ -1,24 +0,0 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod00.plugins')
import { projectInfo } from '../mod00/mod00.check'
export let run = function(configArg){
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now looking at ' + 'required assets')
if (config.cli === true) {
let mainJsPath = projectInfo.packageJson.main
let cliJsString: string = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir,'cli.js'))
cliJsString = cliJsString.replace('{{pathToIndex}}',mainJsPath)
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir,'cli.js'))
plugins.beautylog.ok('installed CLI assets!')
done.resolve(config)
} else {
plugins.beautylog.ok('No additional assets required!')
done.resolve(config)
}
return done.promise
}

27
ts/mod_compile/index.ts Normal file
View File

@ -0,0 +1,27 @@
/* ------------------------------------------
* This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */
import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod.plugins'
import * as NpmtsAssets from './mod.assets'
import * as NpmtsCheck from './mod.check'
import * as NpmtsClean from './mod.clean'
import * as NpmtsCompile from './mod.compile'
export let run = function (configArg: INpmtsConfig): Promise<INpmtsConfig> {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('starting TypeScript Compilation')
NpmtsClean.run(configArg)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(function () {
done.resolve(configArg)
})
return done.promise
}

View File

@ -0,0 +1,24 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod.plugins')
import { projectInfo } from '../mod_compile/mod.check'
export let run = function (configArg) {
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now looking at ' + 'required assets')
if (config.cli === true) {
let mainJsPath = projectInfo.packageJson.main
let cliJsString: string = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'))
cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath)
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js'))
plugins.beautylog.ok('installed CLI assets!')
done.resolve(config)
} else {
plugins.beautylog.ok('No additional assets required!')
done.resolve(config)
}
return done.promise
}

View File

@ -6,7 +6,7 @@ import { INpmtsConfig } from '../npmts.config'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
import * as plugins from './mod.plugins'
export let projectInfo: ProjectinfoNpm
@ -17,7 +17,7 @@ let checkProjectTypings = (configArg: INpmtsConfig) => {
if (typeof projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`)
process.exit(1)
};
}
done.resolve(configArg)
return done.promise
}
@ -64,7 +64,7 @@ let checkDependencies = (configArg: INpmtsConfig) => {
}
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`)
};
}
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`)
}

View File

@ -1,7 +1,7 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod00.plugins')
import plugins = require('./mod.plugins')
/**
* removes the dist directory which will be entirely rebuild

View File

@ -2,7 +2,7 @@ import * as q from 'smartq'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
import * as plugins from './mod.plugins'
export let run = function (configArg) {
let done = q.defer()

View File

@ -6,7 +6,7 @@ import * as q from 'smartq'
import * as paths from '../npmts.paths'
import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod01.plugins'
import * as plugins from './mod.plugins'
export let run = function (configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>()

View File

@ -1,7 +1,7 @@
/* ------------------------------------------
* This module tests the compiled TypeScript files
* -------------------------------------------- */
import plugins = require('./mod02.plugins')
import plugins = require('./mod.plugins')
import paths = require('../npmts.paths')
import * as q from 'smartq'
@ -10,6 +10,16 @@ import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config'
import { Smartfile } from 'smartfile'
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [
'DOM',
'ESNext'
]
}
/**
* runs mocha
* @returns INpmtsConfig
@ -30,15 +40,7 @@ let tap = function (configArg: INpmtsConfig) {
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir)
}),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
@ -49,21 +51,8 @@ let tap = function (configArg: INpmtsConfig) {
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.gulpFunction.forEach(async (fileArg: Smartfile) => {
let stringToModify = fileArg.contents.toString()
let testRegex = /\/\/\smodule\stestimport\nimport[a-zA-Z0-9\*\s]*\sfrom\s'(..\/ts\/index)'/
let replacer = (match: string, group1: string, offset: number, completeString: string) => {
return match.replace(group1, '../dist/index')
}
fileArg.contents = Buffer.from(stringToModify.replace(testRegex, replacer))
}),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()

View File

@ -15,34 +15,53 @@ import * as NpmtsShip from './npmts.ship'
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* It is just an https call to our own Lossless Analytics API.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts','UA-64087619-5')
npmtsAnalytics.sendEvent('npm','exec','git.zone')
let npmtsAnalytics = new plugins.smartanalytics.Analytics({
apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone',
appName: 'npmts'
})
export let run = () => {
process.nextTick(async () => {
// make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', {
executionMode: (await NpmtsConfig.configPromise).mode,
tsOptions: (await NpmtsConfig.configPromise).tsOptions,
watch: (await NpmtsConfig.configPromise).watch,
coverageTreshold: (await NpmtsConfig.configPromise).coverageTreshold
}).catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...')
})
})
export let run = async () => {
let done = q.defer()
plugins.beautylog.figletSync('NPMTS')
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
// check for updates
await plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html')
plugins.beautylog.log('---------------------------------------------')
let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
return NpmtsConfig.run(argvArg)
})
.then((configArg: NpmtsConfig.INpmtsConfig) => {
let done = q.defer()
plugins.beautylog.ora.start('loading additional modules...')
NpmtsMods.mod00.load()
.then((mod00) => {
return mod00.run(configArg)
NpmtsMods.modCompile.load()
.then((modCompile) => {
return modCompile.run(configArg)
})
.then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>()
NpmtsMods.mod01.load()
.then(mod01 => {
return mod01.run(configArg)
NpmtsMods.modDocs.load()
.then(modDocs => {
return modDocs.run(configArg)
})
.then(configArg => {
done.resolve(configArg)
@ -51,9 +70,9 @@ export let run = () => {
})
.then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>()
NpmtsMods.mod02.load()
.then(mod02 => {
return mod02.run(configArg)
NpmtsMods.modTest.load()
.then(modTest => {
return modTest.run(configArg)
})
.then(configArg => {
done.resolve(configArg)
@ -68,5 +87,5 @@ export let run = () => {
.catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse()
return done.promise
return await done.promise
}

View File

@ -1,7 +1,7 @@
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import * as q from 'smartq'
import * as smartq from 'smartq'
// interfaces
import { ITapbufferConfig } from 'tapbuffer'
@ -32,7 +32,7 @@ export interface INpmtsConfig {
}
export let run = function (argvArg) {
let done = q.defer()
let done = smartq.defer()
let defaultConfig: INpmtsConfig = {
argv: undefined,
coverageTreshold: 70,
@ -104,5 +104,10 @@ export let run = function (argvArg) {
plugins.beautylog.ok('build options are ready!')
done.resolve(config)
configDeferred.resolve(config)
return done.promise
}
// config deferred usage
let configDeferred = smartq.defer<INpmtsConfig>()
export let configPromise = configDeferred.promise

View File

@ -2,10 +2,10 @@ import * as plugins from './npmts.plugins'
import { LazyModule } from 'smartsystem'
import * as _mod00 from './mod00/index'
import * as _mod01 from './mod01/index'
import * as _mod02 from './mod02/index'
import * as _modCompile from './mod_compile/index'
import * as _modDocs from './mod_docs/index'
import * as _modTest from './mod_test/index'
export let mod00 = new LazyModule<typeof _mod00>('./mod00/index',__dirname)
export let mod01 = new LazyModule<typeof _mod01>('./mod01/index',__dirname)
export let mod02 = new LazyModule<typeof _mod02>('./mod02/index',__dirname)
export let modCompile = new LazyModule<typeof _modCompile>('./mod_compile/index',__dirname)
export let modDocs = new LazyModule<typeof _modDocs>('./mod_docs/index',__dirname)
export let modTest = new LazyModule<typeof _modTest>('./mod_test/index',__dirname)

View File

@ -1,4 +1,3 @@
import 'typings-global'
import * as beautylog from 'beautylog'
let depcheck = require('depcheck')
@ -14,6 +13,7 @@ import * as smartpath from 'smartpath'
import * as smartstream from 'smartstream'
import * as smartstring from 'smartstring'
import * as smartsystem from 'smartsystem'
import * as smartupdate from 'smartupdate'
import * as through2 from 'through2'
export {
@ -31,5 +31,6 @@ export {
smartstream,
smartstring,
smartsystem,
smartupdate,
through2
}

1751
yarn.lock

File diff suppressed because it is too large Load Diff