streamline things

This commit is contained in:
Philipp Kunz 2017-07-31 15:16:10 +02:00
parent 04518f28cf
commit f4290ca8fa
5 changed files with 34 additions and 74 deletions

8
dist/index.d.ts vendored
View File

@ -5,19 +5,13 @@ import 'typings-global';
export declare type TLoader = 'npm' | 'systemjs';
export declare class LazyModule<T> {
name: string;
nameIsPath: boolean;
cwd: string;
whenLoaded: Promise<T>;
loader: TLoader;
private nameIsPath;
private whenLoadedDeferred;
constructor(nameArg: string, cwdArg: string);
setLoader(loaderArg: TLoader): void;
/**
* loads the module
*/
load(): Promise<T>;
/**
* loads additional lazy modules specified as arguments and returns them in the promise for easy use
*/
loadAlso(...args: LazyModule<any>[]): void;
}

42
dist/index.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 });
require("typings-global");
const path = require("path");
@ -19,7 +27,6 @@ class Smartsystem {
let smartsystem = new Smartsystem();
class LazyModule {
constructor(nameArg, cwdArg) {
this.loader = 'npm';
if (!cwdArg) {
throw new Error('You must specify a directory to resolve from!');
}
@ -33,37 +40,16 @@ class LazyModule {
this.whenLoadedDeferred = smartq.defer();
this.whenLoaded = this.whenLoadedDeferred.promise;
}
setLoader(loaderArg) {
this.loader = loaderArg;
}
/**
* loads the module
*/
load() {
let done = smartq.defer();
let loadedModule;
if (this.loader === 'npm') {
loadedModule = require(this.name);
done.resolve(loadedModule);
}
else if (this.loader === 'systemjs') {
let systemjs = require('systemjs');
systemjs.import(this.name).then((m) => {
loadedModule = m;
this.whenLoadedDeferred.resolve(loadedModule);
done.resolve(loadedModule);
}).catch(err => { console.log(err); });
}
else {
throw Error('loader not supported');
}
return done.promise;
}
/**
* loads additional lazy modules specified as arguments and returns them in the promise for easy use
*/
loadAlso(...args) {
return __awaiter(this, void 0, void 0, function* () {
let loadedModule = require(this.name);
this.whenLoadedDeferred.resolve(loadedModule);
return loadedModule;
});
}
}
exports.LazyModule = LazyModule;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUV2Qiw2QkFBNEI7QUFDNUIsaUNBQWdDO0FBQ2hDLDZCQUErQjtBQUUvQjtJQUFBO1FBQ0UsZ0JBQVcsR0FBRyxJQUFJLGVBQVMsRUFBbUIsQ0FBQTtJQVFoRCxDQUFDO0lBTkM7O09BRUc7SUFDSCxhQUFhLENBQUUsYUFBOEI7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDckMsQ0FBQztDQUNGO0FBRUQsa0NBQWtDO0FBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7QUFRbkM7SUFPRSxZQUFZLE9BQWUsRUFBRSxNQUFjO1FBRjNDLFdBQU0sR0FBWSxLQUFLLENBQUE7UUFHckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtRQUNqQixXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMscUNBQXFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyw2QkFBNkI7UUFDdEUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBSyxDQUFBO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQTtJQUNuRCxDQUFDO0lBRUQsU0FBUyxDQUFFLFNBQWtCO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFLLENBQUE7UUFDNUIsSUFBSSxZQUFlLENBQUE7UUFDbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDNUIsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2xDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLFlBQVksR0FBRyxDQUFDLENBQUE7Z0JBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDNUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFFLEdBQUcsSUFBdUI7SUFFcEMsQ0FBQztDQUNGO0FBdERELGdDQXNEQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsMEJBQXVCO0FBRXZCLDZCQUE0QjtBQUM1QixpQ0FBZ0M7QUFDaEMsNkJBQStCO0FBRS9CO0lBQUE7UUFDRSxnQkFBVyxHQUFHLElBQUksZUFBUyxFQUFtQixDQUFBO0lBUWhELENBQUM7SUFOQzs7T0FFRztJQUNILGFBQWEsQ0FBRSxhQUE4QjtRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0NBQ0Y7QUFFRCxrQ0FBa0M7QUFDbEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtBQVFuQztJQU1FLFlBQWEsT0FBZSxFQUFFLE1BQWM7UUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtRQUNqQixXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMscUNBQXFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyw2QkFBNkI7UUFDdEUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBSyxDQUFBO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDRyxJQUFJOztZQUNSLElBQUksWUFBWSxHQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFBO1FBQ3JCLENBQUM7S0FBQTtDQUNGO0FBN0JELGdDQTZCQyJ9

View File

@ -23,12 +23,12 @@
},
"homepage": "https://gitlab.com/pushrocks/smartsystem#README",
"dependencies": {
"lik": "^1.0.30",
"smartq": "^1.1.1",
"systemjs": "^0.20.12",
"typings-global": "^1.0.19"
"lik": "^1.0.38",
"smartq": "^1.1.6",
"systemjs": "^0.20.17",
"typings-global": "^1.0.20"
},
"devDependencies": {
"tapbundle": "^1.0.12"
"tapbundle": "^1.1.1"
}
}

View File

@ -1,10 +1,15 @@
import { tap, expect } from 'tapbundle'
import * as smartsystem from '../dist/index'
import * as smartsystem from '../ts/index'
import * as _moduleExample from './assets/moduleExample'
tap.test('should load a module lazily', async (tools) => {
let lazyModuleExample = new smartsystem.LazyModule<typeof _moduleExample>('./assets/moduleExample.js', __dirname)
let lazyModuleExample: smartsystem.LazyModule<typeof _moduleExample>
tap.test('should create a lazy module instance', async (tools) => {
lazyModuleExample = new smartsystem.LazyModule<typeof _moduleExample>('./assets/moduleExample.js', __dirname)
expect(lazyModuleExample).to.be.instanceof(smartsystem.LazyModule)
})
tap.test('should load the module', async () => {
await lazyModuleExample.load().then(async m => {
console.log(m.exportedTestBoolean)
})

View File

@ -26,12 +26,11 @@ export type TLoader = 'npm' | 'systemjs'
export class LazyModule<T> {
name: string
nameIsPath: boolean
cwd: string
whenLoaded: Promise<T>
loader: TLoader = 'npm'
private nameIsPath: boolean
private whenLoadedDeferred: smartq.Deferred<T>
constructor(nameArg: string, cwdArg: string) {
constructor (nameArg: string, cwdArg: string) {
if (!cwdArg) {
throw new Error('You must specify a directory to resolve from!')
}
@ -46,36 +45,12 @@ export class LazyModule<T> {
this.whenLoaded = this.whenLoadedDeferred.promise
}
setLoader (loaderArg: TLoader) {
this.loader = loaderArg
}
/**
* loads the module
*/
load (): Promise<T> {
let done = smartq.defer<T>()
let loadedModule: T
if (this.loader === 'npm') {
loadedModule = require(this.name)
done.resolve(loadedModule)
} else if (this.loader === 'systemjs') {
let systemjs = require('systemjs')
systemjs.import(this.name).then((m) => {
loadedModule = m
this.whenLoadedDeferred.resolve(loadedModule)
done.resolve(loadedModule)
}).catch(err => { console.log(err) })
} else {
throw Error('loader not supported')
}
return done.promise
}
/**
* loads additional lazy modules specified as arguments and returns them in the promise for easy use
*/
loadAlso (...args: LazyModule<any>[]) {
async load (): Promise<T> {
let loadedModule: T = require(this.name)
this.whenLoadedDeferred.resolve(loadedModule)
return loadedModule
}
}