
This used to be valid code: ``` class Foo { constructor() { this.bar = ‘string’; } } ``` This will now fail since ‘bar’ is not explicitly defined as a field. We now have to write: ``` class Foo { bar:string; // << REQUIRED constructor() { this.bar = ‘string’; } } ```
56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
import {KeyMetadataError} from './exceptions';
|
|
import {MapWrapper, Map} from 'facade/collection';
|
|
import {FIELD, int, isPresent} from 'facade/lang';
|
|
|
|
export class Key {
|
|
token;
|
|
id:int;
|
|
metadata:any;
|
|
constructor(token, id:int) {
|
|
this.token = token;
|
|
this.id = id;
|
|
this.metadata = null;
|
|
}
|
|
|
|
static setMetadata(key:Key, metadata):Key {
|
|
if (isPresent(key.metadata) && key.metadata !== metadata) {
|
|
throw new KeyMetadataError();
|
|
}
|
|
key.metadata = metadata;
|
|
return key;
|
|
}
|
|
|
|
static get(token):Key {
|
|
return _globalKeyRegistry.get(token);
|
|
}
|
|
|
|
static get numberOfKeys():int {
|
|
return _globalKeyRegistry.numberOfKeys;
|
|
}
|
|
}
|
|
|
|
export class KeyRegistry {
|
|
_allKeys:Map;
|
|
constructor() {
|
|
this._allKeys = MapWrapper.create();
|
|
}
|
|
|
|
get(token):Key {
|
|
if (token instanceof Key) return token;
|
|
|
|
if (MapWrapper.contains(this._allKeys, token)) {
|
|
return MapWrapper.get(this._allKeys, token);
|
|
}
|
|
|
|
var newKey = new Key(token, Key.numberOfKeys);
|
|
MapWrapper.set(this._allKeys, token, newKey);
|
|
return newKey;
|
|
}
|
|
|
|
get numberOfKeys():int {
|
|
return MapWrapper.size(this._allKeys);
|
|
}
|
|
}
|
|
|
|
var _globalKeyRegistry = new KeyRegistry();
|