@travetto/registry
Advanced tools
Comparing version 0.0.17 to 0.0.18
@@ -9,2 +9,3 @@ { | ||
"@types/lodash": "^4.14.106", | ||
"farmhash": "^2.0.5", | ||
"lodash": "^4.17.5" | ||
@@ -20,3 +21,3 @@ }, | ||
"scripts": {}, | ||
"version": "0.0.17" | ||
"version": "0.0.18" | ||
} |
export * from './service'; | ||
export * from './source'; | ||
export * from './model'; |
@@ -5,2 +5,4 @@ declare global { | ||
__filename: string; | ||
__hash: string; | ||
__methodHashes?: { [key: string]: any }; | ||
} | ||
@@ -7,0 +9,0 @@ } |
export * from './registry'; | ||
export * from './class-source'; | ||
export * from './metadata'; | ||
export * from './root'; | ||
export * from './compiler-source'; | ||
export * from './root'; |
import { Registry } from './registry'; | ||
import { CompilerClassSource } from './compiler-source'; | ||
import { ChangeEvent } from './class-source'; | ||
import { ChangeEvent } from '../source'; | ||
import { Class } from '../model'; | ||
@@ -87,3 +86,3 @@ import * as _ from 'lodash'; | ||
onInstall(cls: Class, e: ChangeEvent) { | ||
onInstall(cls: Class, e: ChangeEvent<Class>) { | ||
if (this.pending.has(cls.__id) || this.pendingMethods.has(cls.__id)) { | ||
@@ -99,3 +98,3 @@ const result = this.onInstallFinalize(cls); | ||
onUninstall(cls: Class, e: ChangeEvent) { | ||
onUninstall(cls: Class, e: ChangeEvent<Class>) { | ||
if (this.entries.has(cls.__id)) { | ||
@@ -102,0 +101,0 @@ this.expired.set(cls.__id, this.entries.get(cls.__id)!); |
import { Class } from '../model/types'; | ||
import { ClassSource, ChangeEvent } from './class-source'; | ||
import { ChangeSource, ChangeEvent } from '../source'; | ||
import { EventEmitter } from 'events'; | ||
export abstract class Registry implements ClassSource { | ||
export abstract class Registry implements ChangeSource<Class> { | ||
@@ -11,5 +11,5 @@ protected resolved: boolean; | ||
protected descendents: Registry[] = []; | ||
protected parents: ClassSource[] = []; | ||
protected parents: ChangeSource<Class>[] = []; | ||
constructor(...parents: ClassSource[]) { | ||
constructor(...parents: ChangeSource<Class>[]) { | ||
this.parents = parents; | ||
@@ -63,11 +63,11 @@ | ||
onInstall(cls: Class, e: ChangeEvent): void { | ||
onInstall(cls: Class, e: ChangeEvent<Class>): void { | ||
} | ||
onUninstall(cls: Class, e: ChangeEvent): void { | ||
onUninstall(cls: Class, e: ChangeEvent<Class>): void { | ||
} | ||
uninstall(classes: Class | Class[], e: ChangeEvent) { | ||
uninstall(classes: Class | Class[], e: ChangeEvent<Class>) { | ||
if (!Array.isArray(classes)) { | ||
@@ -81,3 +81,3 @@ classes = [classes]; | ||
install(classes: Class | Class[], e: ChangeEvent) { | ||
install(classes: Class | Class[], e: ChangeEvent<Class>) { | ||
if (!Array.isArray(classes)) { | ||
@@ -91,3 +91,3 @@ classes = [classes]; | ||
onEvent(event: ChangeEvent) { | ||
onEvent(event: ChangeEvent<Class>) { | ||
console.debug('Received', this.constructor.__id, event.type, (event.curr || event.prev)!.__id); | ||
@@ -111,11 +111,11 @@ | ||
emit(e: ChangeEvent) { | ||
emit(e: ChangeEvent<Class>) { | ||
this.events.emit('change', e); | ||
} | ||
on<T>(callback: (e: ChangeEvent) => any): void { | ||
on<T>(callback: (e: ChangeEvent<Class>) => any): void { | ||
this.events.on('change', callback); | ||
} | ||
listen(source: ClassSource) { | ||
listen(source: ChangeSource<Class>) { | ||
source.on(this.onEvent.bind(this)); | ||
@@ -122,0 +122,0 @@ } |
import { Registry } from './registry'; | ||
import { CompilerClassSource } from './compiler-source'; | ||
import { ChangeEvent } from './class-source'; | ||
import { CompilerClassSource, ChangeEvent } from '../source'; | ||
import { Class } from '../model'; | ||
@@ -11,3 +11,3 @@ class $RootRegistry extends Registry { | ||
// Auto propagate | ||
async onEvent(e: ChangeEvent) { | ||
async onEvent(e: ChangeEvent<Class>) { | ||
await super.onEvent(e); | ||
@@ -14,0 +14,0 @@ this.emit(e); |
import * as ts from 'typescript'; | ||
import * as path from 'path'; | ||
import { TransformUtil, Import, State } from '@travetto/compiler'; | ||
const farmhash = require('farmhash'); | ||
@@ -10,2 +11,4 @@ const SEP = path.sep; | ||
type MethodHashes = { [key: string]: { hash: number, clsId: ts.Identifier } }; | ||
interface IState extends State { | ||
@@ -17,7 +20,7 @@ file: string; | ||
function createStaticField(name: string, val: ts.Expression) { | ||
function createStaticField(name: string, val: ts.Expression | string | number) { | ||
return ts.createProperty( | ||
undefined, | ||
[ts.createToken(ts.SyntaxKind.StaticKeyword)], | ||
name, undefined, undefined, val | ||
name, undefined, undefined, ['string', 'number'].includes(typeof val) ? ts.createLiteral(val as any) : val as ts.Expression | ||
); | ||
@@ -27,3 +30,3 @@ } | ||
function visitNode<T extends ts.Node>(context: ts.TransformationContext, node: T, state: IState): T { | ||
if (ts.isClassDeclaration(node)) { | ||
if (ts.isClassDeclaration(node) && node.name && node.parent && ts.isSourceFile(node.parent)) { | ||
if (!state.imported) { | ||
@@ -36,3 +39,13 @@ state.imported = ts.createIdentifier(`import_Register`); | ||
} | ||
return ts.updateClassDeclaration(node, | ||
const hashes: any = {}; | ||
for (const child of node.members) { | ||
if (ts.isMethodDeclaration(child)) { | ||
const hash = farmhash.hash32(child.getText()); | ||
hashes[child.name.getText()] = ts.createLiteral(hash); | ||
} | ||
} | ||
node = ts.updateClassDeclaration(node, | ||
ts.createNodeArray( | ||
@@ -47,7 +60,11 @@ [ts.createDecorator( | ||
ts.createNodeArray([ | ||
createStaticField('__filename', ts.createLiteral(state.fullFile)), | ||
createStaticField('__id', ts.createLiteral(`${state.file}#${node.name!.getText()}`)), | ||
createStaticField('__filename', state.fullFile), | ||
createStaticField('__id', `${state.file}#${node.name!.getText()}`), | ||
createStaticField('__hash', farmhash.hash32(node.getText())), | ||
createStaticField('__methodHashes', TransformUtil.extendObjectLiteral(hashes)), | ||
...node.members | ||
]) | ||
) as any; | ||
return node; | ||
} | ||
@@ -59,3 +76,2 @@ return ts.visitEachChild(node, c => visitNode(context, c, state), context); | ||
transformer: TransformUtil.importingVisitor<IState>((file: ts.SourceFile) => { | ||
let fileRoot = file.fileName.split(process.cwd() + SEP)[1]; | ||
@@ -62,0 +78,0 @@ let ns = '@app'; |
@@ -11,4 +11,2 @@ export class Test { | ||
} | ||
} | ||
console.log(Test6.__id) | ||
} |
@@ -1,2 +0,2 @@ | ||
import { Registry } from '../index'; | ||
import { Registry, MethodSource, CompilerClassSource, RootRegistry } from '../index'; | ||
@@ -6,2 +6,8 @@ class Simple extends Registry { | ||
export const SimpleRegistry = new Simple(); | ||
export const SimpleRegistry = new Simple(); | ||
export const MethodListener = new MethodSource(RootRegistry); | ||
MethodListener.on(e => { | ||
console.log('Method changed', e); | ||
}); |
16818
23
471
4
+ Addedfarmhash@^2.0.5
+ Addedansi-regex@2.1.1(transitive)
+ Addedaproba@1.2.0(transitive)
+ Addedare-we-there-yet@1.1.7(transitive)
+ Addedbl@1.2.3(transitive)
+ Addedbuffer-alloc@1.2.0(transitive)
+ Addedbuffer-alloc-unsafe@1.1.0(transitive)
+ Addedbuffer-fill@1.0.0(transitive)
+ Addedchownr@1.1.4(transitive)
+ Addedcode-point-at@1.1.0(transitive)
+ Addedconsole-control-strings@1.1.0(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addeddecompress-response@3.3.0(transitive)
+ Addeddeep-extend@0.6.0(transitive)
+ Addeddelegates@1.0.0(transitive)
+ Addeddetect-libc@1.0.3(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedexpand-template@1.1.1(transitive)
+ Addedfarmhash@2.1.0(transitive)
+ Addedfs-constants@1.0.0(transitive)
+ Addedgauge@2.7.4(transitive)
+ Addedgithub-from-package@0.0.0(transitive)
+ Addedhas-unicode@2.0.1(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedini@1.3.8(transitive)
+ Addedis-fullwidth-code-point@1.0.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedmimic-response@1.0.1(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmkdirp@0.5.6(transitive)
+ Addednan@2.22.0(transitive)
+ Addednode-abi@2.30.1(transitive)
+ Addednoop-logger@0.1.1(transitive)
+ Addednpmlog@4.1.2(transitive)
+ Addednumber-is-nan@1.0.1(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedos-homedir@1.0.2(transitive)
+ Addedprebuild-install@2.5.3(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpump@1.0.32.0.1(transitive)
+ Addedrc@1.2.8(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedsafe-buffer@5.1.2(transitive)
+ Addedsemver@5.7.2(transitive)
+ Addedset-blocking@2.0.0(transitive)
+ Addedsignal-exit@3.0.7(transitive)
+ Addedsimple-concat@1.0.1(transitive)
+ Addedsimple-get@2.8.2(transitive)
+ Addedstring-width@1.0.2(transitive)
+ Addedstring_decoder@1.1.1(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedstrip-json-comments@2.0.1(transitive)
+ Addedtar-fs@1.16.4(transitive)
+ Addedtar-stream@1.6.2(transitive)
+ Addedto-buffer@1.1.1(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedwhich-pm-runs@1.1.0(transitive)
+ Addedwide-align@1.1.5(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedxtend@4.0.2(transitive)