Files
angular-docs-cn/modules/facade/src/lang.es6
T

214 lines
4.5 KiB
JavaScript

import {assert} from 'rtts_assert/rtts_assert';
export {proxy} from 'rtts_assert/rtts_assert';
export var Type = Function;
export var Math = window.Math;
// global assert support, as Dart has it...
// TODO: `assert` calls need to be removed in production code!
window.assert = assert;
export class FIELD {
constructor(definition) {
this.definition = definition;
}
}
export class CONST {}
export class ABSTRACT {}
export class IMPLEMENTS {}
export function isPresent(obj):boolean {
return obj !== undefined && obj !== null;
}
export function isBlank(obj):boolean {
return obj === undefined || obj === null;
}
export function stringify(token):string {
if (typeof token === 'string') {
return token;
}
if (token === undefined || token === null) {
return '' + token;
}
if (token.name) {
return token.name;
}
return token.toString();
}
export class StringWrapper {
static fromCharCode(code:int):string {
return String.fromCharCode(code);
}
static charCodeAt(s:string, index:int) {
return s.charCodeAt(index);
}
static split(s:string, regExp:RegExp) {
return s.split(regExp.multiple);
}
static equals(s:string, s2:string):boolean {
return s === s2;
}
static replaceAll(s:string, from:RegExp, replace:string):string {
return s.replace(from.multiple, replace);
}
}
export class StringJoiner {
constructor() {
this.parts = [];
}
add(part:string) {
this.parts.push(part);
}
toString():string {
return this.parts.join("");
}
}
export class NumberParseError extends Error {
constructor(message) {
this.message = message;
}
toString() {
return this.message;
}
}
export class NumberWrapper {
static parseIntAutoRadix(text:string):int {
var result:int = parseInt(text);
if (isNaN(result)) {
throw new NumberParseError("Invalid integer literal when parsing " + text);
}
return result;
}
static parseInt(text:string, radix:int):int {
if (radix == 10) {
if (/^(\-|\+)?[0-9]+$/.test(text)) {
return parseInt(text, radix);
}
} else if (radix == 16) {
if (/^(\-|\+)?[0-9ABCDEFabcdef]+$/.test(text)) {
return parseInt(text, radix);
}
} else {
var result:int = parseInt(text, radix);
if (!isNaN(result)) {
return result;
}
}
throw new NumberParseError("Invalid integer literal when parsing " + text + " in base " + radix);
}
// TODO: NaN is a valid literal but is returned by parseFloat to indicate an error.
static parseFloat(text:string):number {
return parseFloat(text);
}
static get NaN():number {
return NaN;
}
static isNaN(value):boolean {
return isNaN(value);
}
static isInteger(value):boolean {
return Number.isInteger(value);
}
}
export function int() {};
int.assert = function(value) {
return value == null || typeof value == 'number' && value === Math.floor(value);
}
export var RegExp = assert.define('RegExp', function(obj) {
assert(obj).is(assert.structure({
single: window.RegExp,
multiple: window.RegExp
}));
});
export class RegExpWrapper {
static create(regExpStr):RegExp {
return {
multiple: new window.RegExp(regExpStr, 'g'),
single: new window.RegExp(regExpStr)
};
}
static firstMatch(regExp, input) {
return input.match(regExp.single);
}
static matcher(regExp, input) {
return {
re: regExp.multiple,
input: input
};
}
}
export class RegExpMatcherWrapper {
static next(matcher) {
return matcher.re.exec(matcher.input);
}
}
export class FunctionWrapper {
static apply(fn:Function, posArgs) {
return fn.apply(null, posArgs);
}
}
// No subclass so that we preserve error stack.
export var BaseException = Error;
// JS has NaN !== NaN
export function looseIdentical(a, b):boolean {
return a === b ||
typeof a === "number" && typeof b === "number" && isNaN(a) && isNaN(b);
}
// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise)
// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
export function getMapKey(value) {
return value;
}
export function normalizeBlank(obj) {
return isBlank(obj) ? null : obj;
}
export function isJsObject(o):boolean {
return o !== null && (typeof o === "function" || typeof o === "object");
}
export function assertionsEnabled():boolean {
try {
var x:int = "string";
return false;
} catch (e) {
return true;
}
}
export function print(obj) {
console.log(obj);
}