initial commit
This commit is contained in:
12
.editorconfig
Normal file
12
.editorconfig
Normal 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
12
.gitignore
vendored
@@ -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
5
.npmignore
Normal file
@@ -0,0 +1,5 @@
|
||||
src/
|
||||
/.*
|
||||
pkg-update.js
|
||||
tsconfig.json
|
||||
jasmine.json
|
||||
6
dist/BaseResolver.d.ts
vendored
Normal file
6
dist/BaseResolver.d.ts
vendored
Normal 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
13
dist/BaseResolver.js
vendored
Normal 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
1
dist/BaseResolver.js.map
vendored
Normal 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
3
dist/IPortResolver.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
export interface IPortResolver {
|
||||
resolve<T>(name: string): T;
|
||||
}
|
||||
3
dist/IPortResolver.js
vendored
Normal file
3
dist/IPortResolver.js
vendored
Normal 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
1
dist/IPortResolver.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"IPortResolver.js","sourceRoot":"","sources":["../src/IPortResolver.ts"],"names":[],"mappings":""}
|
||||
7
dist/PortResolver.d.ts
vendored
Normal file
7
dist/PortResolver.d.ts
vendored
Normal 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
31
dist/PortResolver.js
vendored
Normal 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
1
dist/PortResolver.js.map
vendored
Normal 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
4
dist/index.d.ts
vendored
Normal 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
7
dist/index.js
vendored
Normal 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
1
dist/index.js.map
vendored
Normal 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
11
examples/AngularWiring.ts
Normal 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
5
examples/Domain.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { IPortResolver } from "IPortResolver";
|
||||
|
||||
export class Domain extends BaseResolver {
|
||||
// get IRequestUserSession() { return this.resolve<IRequestUserSession>("IRequestUserSession"); }
|
||||
}
|
||||
2
examples/DomainInstance.ts
Normal file
2
examples/DomainInstance.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
import { Domain } from "Domain";
|
||||
export const domain = new Domain();
|
||||
4
jasmine.json
Normal file
4
jasmine.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"spec_dir": "src",
|
||||
"spec_files": ["**/*.spec.ts"]
|
||||
}
|
||||
2075
package-lock.json
generated
Normal file
2075
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
29
package.json
Normal file
29
package.json
Normal 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
2
pkg-update.js
Normal 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
9
src/BaseResolver.spec.ts
Normal 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
9
src/BaseResolver.ts
Normal 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
3
src/IPortResolver.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export interface IPortResolver {
|
||||
resolve<T>(name: string) : T;
|
||||
}
|
||||
9
src/PortResolver.spec.ts
Normal file
9
src/PortResolver.spec.ts
Normal 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
26
src/PortResolver.ts
Normal 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
5
src/index.ts
Normal 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
18
tsconfig.json
Normal 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"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user