initial commit

This commit is contained in:
Niels Kooiman
2019-08-12 12:52:12 +02:00
parent cc94057ac7
commit 352211dfcf
29 changed files with 2303 additions and 11 deletions

12
.editorconfig Normal file
View File

@@ -0,0 +1,12 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

12
.gitignore vendored
View File

@@ -9,22 +9,12 @@ pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
node_modules
node_modules

5
.npmignore Normal file
View File

@@ -0,0 +1,5 @@
src/
/.*
pkg-update.js
tsconfig.json
jasmine.json

6
dist/BaseResolver.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
import { IPortResolver } from './IPortResolver';
export declare class BaseResolver implements IPortResolver {
resolve<T>(name: string): T;
private _resolver;
setResolver(resolver: IPortResolver): void;
}

13
dist/BaseResolver.js vendored Normal file
View File

@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var BaseResolver = /** @class */ (function () {
function BaseResolver() {
}
BaseResolver.prototype.resolve = function (name) { return this._resolver.resolve(name); };
BaseResolver.prototype.setResolver = function (resolver) {
this._resolver = resolver;
};
return BaseResolver;
}());
exports.BaseResolver = BaseResolver;
//# sourceMappingURL=BaseResolver.js.map

1
dist/BaseResolver.js.map vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"BaseResolver.js","sourceRoot":"","sources":["../src/BaseResolver.ts"],"names":[],"mappings":";;AAEA;IAAA;IAMA,CAAC;IALA,8BAAO,GAAP,UAAW,IAAY,IAAO,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7D,kCAAW,GAAlB,UAAmB,QAAuB;QACzC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC3B,CAAC;IACF,mBAAC;AAAD,CAAC,AAND,IAMC;AANY,oCAAY"}

3
dist/IPortResolver.d.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
export interface IPortResolver {
resolve<T>(name: string): T;
}

3
dist/IPortResolver.js vendored Normal file
View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=IPortResolver.js.map

1
dist/IPortResolver.js.map vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"IPortResolver.js","sourceRoot":"","sources":["../src/IPortResolver.ts"],"names":[],"mappings":""}

7
dist/PortResolver.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
import { IPortResolver } from "./IPortResolver";
export declare class PortResolver implements IPortResolver {
private _container;
register<T>(name: any, fn: () => T): void;
registerInstance<T>(name: any, fn: () => T): void;
resolve<T>(name: string): T;
}

31
dist/PortResolver.js vendored Normal file
View File

@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PortResolver = /** @class */ (function () {
function PortResolver() {
this._container = {};
}
PortResolver.prototype.register = function (name, fn) {
this._container[name] = fn;
};
PortResolver.prototype.registerInstance = function (name, fn) {
var _instance = null;
var getInstance = function (fn) {
return function () {
if (!_instance) {
_instance = fn();
}
return _instance;
};
};
this._container[name] = getInstance(fn);
};
PortResolver.prototype.resolve = function (name) {
if (name in this._container && typeof this._container[name] == 'function') {
return this._container[name]();
}
throw new Error('PortResolver can not resolve ' + name);
};
return PortResolver;
}());
exports.PortResolver = PortResolver;
//# sourceMappingURL=PortResolver.js.map

1
dist/PortResolver.js.map vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"PortResolver.js","sourceRoot":"","sources":["../src/PortResolver.ts"],"names":[],"mappings":";;AAEA;IAAA;QACS,eAAU,GAAS,EAAE,CAAC;IAsB/B,CAAC;IArBA,+BAAQ,GAAR,UAAY,IAAI,EAAE,EAAY;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,uCAAgB,GAAhB,UAAoB,IAAI,EAAE,EAAY;QACrC,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,WAAW,GAAG,UAAC,EAAE;YACpB,OAAO;gBACN,IAAI,CAAC,SAAS,EAAE;oBACf,SAAS,GAAG,EAAE,EAAE,CAAC;iBACjB;gBACD,OAAO,SAAS,CAAC;YAClB,CAAC,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,8BAAO,GAAP,UAAW,IAAa;QACvB,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE;YAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAO,CAAC;SACpC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IACF,mBAAC;AAAD,CAAC,AAvBD,IAuBC;AAvBY,oCAAY"}

4
dist/index.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
import { BaseResolver } from "./BaseResolver";
import { IPortResolver } from "./IPortResolver";
import { PortResolver } from "./PortResolver";
export { IPortResolver, PortResolver, BaseResolver };

7
dist/index.js vendored Normal file
View File

@@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var BaseResolver_1 = require("./BaseResolver");
exports.BaseResolver = BaseResolver_1.BaseResolver;
var PortResolver_1 = require("./PortResolver");
exports.PortResolver = PortResolver_1.PortResolver;
//# sourceMappingURL=index.js.map

1
dist/index.js.map vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,+CAA8C;AAIR,uBAJ7B,2BAAY,CAI6B;AAFlD,+CAA8C;AAEtB,uBAFf,2BAAY,CAEe"}

11
examples/AngularWiring.ts Normal file
View File

@@ -0,0 +1,11 @@
import { domain } from "DomainInstance";
@Injectable()
export class AngularWiring {
constructor(httpClient: HttpClient, componentFactoryResolver: ComponentFactoryResolver, router: Router) {
const portResolver = new PortResolver();
//portResolver.registerInstance<IHttpClient>('IHttpClient', () => new AngularHttpClientPlug(httpClient));
//portResolver.register<ICanGeneratePassword>('ICanGeneratePassword', () => new GeneratePasswordPlug());
domain.setPortResolver(portResolver);
}
}

5
examples/Domain.ts Normal file
View File

@@ -0,0 +1,5 @@
import { IPortResolver } from "IPortResolver";
export class Domain extends BaseResolver {
// get IRequestUserSession() { return this.resolve<IRequestUserSession>("IRequestUserSession"); }
}

View File

@@ -0,0 +1,2 @@
import { Domain } from "Domain";
export const domain = new Domain();

4
jasmine.json Normal file
View File

@@ -0,0 +1,4 @@
{
"spec_dir": "src",
"spec_files": ["**/*.spec.ts"]
}

2075
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

29
package.json Normal file
View File

@@ -0,0 +1,29 @@
{
"name": "@nx/typescript-domain",
"version": "1.0.0",
"description": "Project for a Domain Driven typescript app",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"pkg-update": "node pkg-update",
"build": "tsc",
"_build": "tsc --listEmittedFiles",
"test": "jasmine-ts --config=jasmine.json"
},
"repository": {
"type": "git",
"url": "https://solidt.eu/git/niels.kooiman/typescript-domain.git"
},
"author": "Niels Kooiman <niels.kooiman@gmail.com>",
"license": "UNLICENCED",
"devDependencies": {
"@types/jasmine": "^3.3.9",
"jasmine": "^3.3.1",
"jasmine-core": "^3.3.0",
"jasmine-ts": "^0.3.0",
"nyc": "^13.3.0",
"ts-node": "^8.0.3",
"typescript": "^3.3.3333"
},
"dependencies": {}
}

2
pkg-update.js Normal file
View File

@@ -0,0 +1,2 @@
const json = JSON.parse(require('fs').readFileSync("package.json"));
require('child_process').spawn('npm', ['i', '-D', ...Object.keys(json.devDependencies)], {stdio: 'inherit', detached: true});

9
src/BaseResolver.spec.ts Normal file
View File

@@ -0,0 +1,9 @@
import { BaseResolver } from "./BaseResolver";
describe("BaseResolver", () => {
it('should create a new BaseResolver', (done) => {
let baseResolver = new BaseResolver();
expect(baseResolver).not.toBe(null);
done();
});
});

9
src/BaseResolver.ts Normal file
View File

@@ -0,0 +1,9 @@
import { IPortResolver } from './IPortResolver';
export class BaseResolver implements IPortResolver {
resolve<T>(name: string): T { return this._resolver.resolve(name); }
private _resolver: IPortResolver;
public setResolver(resolver: IPortResolver) {
this._resolver = resolver;
}
}

3
src/IPortResolver.ts Normal file
View File

@@ -0,0 +1,3 @@
export interface IPortResolver {
resolve<T>(name: string) : T;
}

9
src/PortResolver.spec.ts Normal file
View File

@@ -0,0 +1,9 @@
import { PortResolver } from "./PortResolver";
describe("PortResolver", () => {
it('should create a new PortResolver', (done) => {
let portResolver = new PortResolver();
expect(portResolver).not.toBe(null);
done();
});
});

26
src/PortResolver.ts Normal file
View File

@@ -0,0 +1,26 @@
import { IPortResolver } from "./IPortResolver";
export class PortResolver implements IPortResolver {
private _container : any = {};
register<T>(name, fn : () => T) {
this._container[name] = fn;
}
registerInstance<T>(name, fn : () => T) {
let _instance = null;
let getInstance = (fn) => {
return () => {
if (!_instance) {
_instance = fn();
}
return _instance;
};
};
this._container[name] = getInstance(fn);
}
resolve<T>(name : string) : T {
if (name in this._container && typeof this._container[name] == 'function') {
return this._container[name]() as T;
}
throw new Error('PortResolver can not resolve '+ name);
}
}

5
src/index.ts Normal file
View File

@@ -0,0 +1,5 @@
import { BaseResolver } from "./BaseResolver";
import { IPortResolver } from "./IPortResolver";
import { PortResolver } from "./PortResolver";
export { IPortResolver, PortResolver, BaseResolver };

18
tsconfig.json Normal file
View File

@@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "es5",
"declaration": true,
"sourceMap": true,
"outDir": "./dist",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
]
},
"files": [
"./src/index.ts"
]
}