| @@ -1,4 +1,4 | |||||
| 1 |
define([" |
|
1 | define(["dojo/_base/declare", "./log/trace!"], function (declare, trace) { | |
| 2 | trace.warn("THIS MODULE IS DEPRECATED! use uri-js or similar alternatives."); |
|
2 | trace.warn("THIS MODULE IS DEPRECATED! use uri-js or similar alternatives."); | |
| 3 |
|
3 | |||
| 4 | function parseURI(uri) { |
|
4 | function parseURI(uri) { | |
| @@ -1,5 +1,5 | |||||
| 1 | import { Uuid } from "../Uuid"; |
|
1 | import { Uuid } from "../Uuid"; | |
| 2 | import { argumentNotEmptyString, getGlobal } from "../safe"; |
|
2 | import { argumentNotEmptyString, getGlobal, isNullOrEmptyString } from "../safe"; | |
| 3 | import { TraceSource, DebugLevel } from "../log/TraceSource"; |
|
3 | import { TraceSource, DebugLevel } from "../log/TraceSource"; | |
| 4 | import m = require("module"); |
|
4 | import m = require("module"); | |
| 5 |
|
5 | |||
| @@ -7,7 +7,7 const sandboxId = Uuid(); | |||||
| 7 | define(sandboxId, ["require"], r => r); |
|
7 | define(sandboxId, ["require"], r => r); | |
| 8 |
|
8 | |||
| 9 | // tslint:disable-next-line:no-var-requires |
|
9 | // tslint:disable-next-line:no-var-requires | |
| 10 |
const globalRequire = require |
|
10 | const globalRequire = getGlobal().require as Require; | |
| 11 |
|
11 | |||
| 12 | const trace = TraceSource.get(m.id); |
|
12 | const trace = TraceSource.get(m.id); | |
| 13 |
|
13 | |||
| @@ -58,15 +58,17 class ModuleResolver { | |||||
| 58 | } |
|
58 | } | |
| 59 | } |
|
59 | } | |
| 60 |
|
60 | |||
| 61 | export function makeResolver(moduleName: string, contextRequire: Require) { |
|
61 | export async function makeResolver(moduleName: string, contextRequire: Require) { | |
| 62 | trace.debug( |
|
62 | trace.debug( | |
| 63 | "makeResolver moduleName={0}, contextRequire={1}", |
|
63 | "makeResolver moduleName={0}, contextRequire={1}", | |
| 64 | moduleName || "<nil>", |
|
64 | moduleName || "<nil>", | |
| 65 | contextRequire ? typeof (contextRequire) : "<nil>" |
|
65 | contextRequire ? typeof (contextRequire) : "<nil>" | |
| 66 | ); |
|
66 | ); | |
| 67 |
|
67 | |||
| 68 | const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); |
|
68 | const nestedRequire = isNullOrEmptyString(moduleName) ? null : await createContextRequire(moduleName); | |
| 69 |
|
69 | |||
| 70 | const resolver = new ModuleResolver(contextRequire, base); |
|
70 | // const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); | |
|
|
71 | ||||
|
|
72 | const resolver = new ModuleResolver(nestedRequire, null); | |||
| 71 | return (id: string) => resolver.resolve(id); |
|
73 | return (id: string) => resolver.resolve(id); | |
| 72 | } |
|
74 | } | |
| @@ -2,7 +2,9 import { TraceSource } from "./TraceSour | |||||
| 2 | import { Predicate } from "../interfaces"; |
|
2 | import { Predicate } from "../interfaces"; | |
| 3 |
|
3 | |||
| 4 | export = { |
|
4 | export = { | |
| 5 | on(filter: any , cb: any) { |
|
5 | level: 0, | |
|
|
6 | ||||
|
|
7 | on(filter: any, cb: any) { | |||
| 6 | if (arguments.length === 1) { |
|
8 | if (arguments.length === 1) { | |
| 7 | cb = filter; |
|
9 | cb = filter; | |
| 8 | filter = undefined; |
|
10 | filter = undefined; | |
| @@ -18,11 +20,13 export = { | |||||
| 18 |
|
20 | |||
| 19 | if (test) { |
|
21 | if (test) { | |
| 20 | TraceSource.on(source => { |
|
22 | TraceSource.on(source => { | |
|
|
23 | source.level = this.level; | |||
| 21 | if (test(source.id)) |
|
24 | if (test(source.id)) | |
| 22 | source.events.on(cb); |
|
25 | source.events.on(cb); | |
| 23 | }); |
|
26 | }); | |
| 24 | } else { |
|
27 | } else { | |
| 25 | TraceSource.on(source => { |
|
28 | TraceSource.on(source => { | |
|
|
29 | source.level = this.level; | |||
| 26 | source.events.on(cb); |
|
30 | source.events.on(cb); | |
| 27 | }); |
|
31 | }); | |
| 28 | } |
|
32 | } | |
| @@ -1,4 +1,4 | |||||
| 1 |
import |
|
1 | import * as format from "./format"; | |
| 2 | import { TraceSource, DebugLevel } from "../log/TraceSource"; |
|
2 | import { TraceSource, DebugLevel } from "../log/TraceSource"; | |
| 3 | import { ITemplateParser, TokenType } from "./TemplateParser"; |
|
3 | import { ITemplateParser, TokenType } from "./TemplateParser"; | |
| 4 | import m = require("module"); |
|
4 | import m = require("module"); | |
| @@ -98,7 +98,7 export class TemplateCompiler { | |||||
| 98 | } |
|
98 | } | |
| 99 |
|
99 | |||
| 100 | visitTextFragment(parser: ITemplateParser) { |
|
100 | visitTextFragment(parser: ITemplateParser) { | |
| 101 | const i = this._data.push(parser.value()); |
|
101 | const i = this._data.push(parser.value()) - 1; | |
| 102 | this._code.push("$p.push($data[" + i + "]);"); |
|
102 | this._code.push("$p.push($data[" + i + "]);"); | |
| 103 | } |
|
103 | } | |
| 104 | } |
|
104 | } | |
| @@ -1,5 +1,9 | |||||
| 1 | import { argumentNotEmptyString } from "../safe"; |
|
1 | import { argumentNotEmptyString } from "../safe"; | |
| 2 | import { MapOf } from "../interfaces"; |
|
2 | import { MapOf } from "../interfaces"; | |
|
|
3 | import { TraceSource, DebugLevel } from "../log/TraceSource"; | |||
|
|
4 | import m = require("module"); | |||
|
|
5 | ||||
|
|
6 | const trace = TraceSource.get(m.id); | |||
| 3 |
|
7 | |||
| 4 | const splitRx = /(<%=|\[%=|<%|\[%|%\]|%>)/; |
|
8 | const splitRx = /(<%=|\[%=|<%|\[%|%\]|%>)/; | |
| 5 |
|
9 | |||
| @@ -45,6 +49,7 export class TemplateParser implements I | |||||
| 45 | if (this._pos < this._tokens.length) { |
|
49 | if (this._pos < this._tokens.length) { | |
| 46 | this._value = this._tokens[this._pos]; |
|
50 | this._value = this._tokens[this._pos]; | |
| 47 | this._type = tokenMap[this._value] || TokenType.Text; |
|
51 | this._type = tokenMap[this._value] || TokenType.Text; | |
|
|
52 | ||||
| 48 | return true; |
|
53 | return true; | |
| 49 | } else { |
|
54 | } else { | |
| 50 | this._type = TokenType.None; |
|
55 | this._type = TokenType.None; | |
| @@ -1,8 +1,9 | |||||
| 1 | import * as module from "module"; |
|
1 | import * as module from "module"; | |
| 2 | import { TraceSource } from "../log/TraceSource"; |
|
2 | import { TraceSource } from "../log/TraceSource"; | |
|
|
3 | import { compile } from "./StringFormat"; | |||
| 3 |
|
4 | |||
| 4 | const logger = TraceSource.get(module.id); |
|
5 | const logger = TraceSource.get(module.id); | |
| 5 |
|
6 | |||
| 6 | logger.warn("The module is deprecated, use StringFormat.compile() method directly"); |
|
7 | logger.warn("The module is deprecated, use StringFormat.compile() method directly"); | |
| 7 |
|
8 | |||
| 8 | export { compile } from "./StringFormat"; |
|
9 | export = compile; | |
| @@ -1,8 +1,8 | |||||
| 1 | import { format as dojoFormatNumber } from "dojo/number"; |
|
1 | import { format as dojoFormatNumber } from "dojo/number"; | |
| 2 | import { format as dojoFormatDate } from "dojo/date/locale"; |
|
2 | import { format as dojoFormatDate } from "dojo/date/locale"; | |
| 3 | import { Formatter } from "./StringFormat"; |
|
3 | import { Formatter, compile as _compile } from "./StringFormat"; | |
| 4 |
|
4 | |||
| 5 | import { isNumber } from "../safe"; |
|
5 | import { isNumber, isNull } from "../safe"; | |
| 6 |
|
6 | |||
| 7 | interface NumberFormatOptions { |
|
7 | interface NumberFormatOptions { | |
| 8 | round?: number; |
|
8 | round?: number; | |
| @@ -42,6 +42,26 function convertDate(value: any, pattern | |||||
| 42 |
|
42 | |||
| 43 | const _formatter = new Formatter([convertNumber, convertDate]); |
|
43 | const _formatter = new Formatter([convertNumber, convertDate]); | |
| 44 |
|
44 | |||
| 45 |
|
|
45 | function format(msg: string, ...args: any[]) { | |
| 46 |
return _formatter.format |
|
46 | return _formatter.format(msg, ...args); | |
| 47 |
} |
|
47 | } | |
|
|
48 | ||||
|
|
49 | function _convert(value: any, pattern: string) { | |||
|
|
50 | return _formatter.convert(value, pattern); | |||
|
|
51 | } | |||
|
|
52 | ||||
|
|
53 | namespace format { | |||
|
|
54 | export const convert = _convert; | |||
|
|
55 | export function compile(text: string) { | |||
|
|
56 | const template = _compile(text); | |||
|
|
57 | ||||
|
|
58 | return (...data) => { | |||
|
|
59 | return template((name, pattern) => { | |||
|
|
60 | const value = data[name]; | |||
|
|
61 | return !isNull(value) ? convert(value, pattern) : ""; | |||
|
|
62 | }); | |||
|
|
63 | }; | |||
|
|
64 | } | |||
|
|
65 | } | |||
|
|
66 | ||||
|
|
67 | export = format; | |||
| @@ -54,9 +54,9 function setupBrowser() { | |||||
| 54 |
|
54 | |||
| 55 | return _rnds; |
|
55 | return _rnds; | |
| 56 | }; |
|
56 | }; | |
| 57 | if ("undefined" !== typeof console && console.warn) { |
|
57 | // if ("undefined" !== typeof console && console.warn) { | |
| 58 |
|
|
58 | // console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()"); | |
| 59 | } |
|
59 | // } | |
| 60 | } |
|
60 | } | |
| 61 | } |
|
61 | } | |
| 62 |
|
62 | |||
| @@ -92,7 +92,7 for (let i = 0; i < 256; i++) { | |||||
| 92 | } |
|
92 | } | |
| 93 |
|
93 | |||
| 94 | // **`parse()` - Parse a UUID into it's component bytes** |
|
94 | // **`parse()` - Parse a UUID into it's component bytes** | |
| 95 |
|
|
95 | function _parse(s, buf?, offset?): Array<string> { | |
| 96 | const i = (buf && offset) || 0; let ii = 0; |
|
96 | const i = (buf && offset) || 0; let ii = 0; | |
| 97 |
|
97 | |||
| 98 | buf = buf || []; |
|
98 | buf = buf || []; | |
| @@ -146,7 +146,7 let _clockseq = (_seedBytes[6] << 8 | _s | |||||
| 146 | let _lastMSecs = 0; let _lastNSecs = 0; |
|
146 | let _lastMSecs = 0; let _lastNSecs = 0; | |
| 147 |
|
147 | |||
| 148 | // See https://github.com/broofa/node-uuid for API details |
|
148 | // See https://github.com/broofa/node-uuid for API details | |
| 149 |
|
|
149 | function _v1(options?, buf?, offset?): string { | |
| 150 | let i = buf && offset || 0; |
|
150 | let i = buf && offset || 0; | |
| 151 | const b = buf || []; |
|
151 | const b = buf || []; | |
| 152 |
|
152 | |||
| @@ -231,7 +231,7 export function _v1(options?, buf?, offs | |||||
| 231 | // **`v4()` - Generate random UUID** |
|
231 | // **`v4()` - Generate random UUID** | |
| 232 |
|
232 | |||
| 233 | // See https://github.com/broofa/node-uuid for API details |
|
233 | // See https://github.com/broofa/node-uuid for API details | |
| 234 |
|
|
234 | function _v4(options?, buf?, offset?): string { | |
| 235 | // Deprecated - 'format' argument, as supported in v1.2 |
|
235 | // Deprecated - 'format' argument, as supported in v1.2 | |
| 236 | const i = buf && offset || 0; |
|
236 | const i = buf && offset || 0; | |
| 237 |
|
237 | |||
| @@ -257,13 +257,16 export function _v4(options?, buf?, offs | |||||
| 257 | return buf || _unparse(rnds); |
|
257 | return buf || _unparse(rnds); | |
| 258 | } |
|
258 | } | |
| 259 |
|
259 | |||
| 260 |
|
|
260 | function _Uuid() { | |
| 261 | return _v4(); |
|
261 | return _v4(); | |
| 262 | } |
|
262 | } | |
| 263 |
|
263 | |||
| 264 |
|
|
264 | namespace _Uuid { | |
| 265 | export const v4 = _v4; |
|
265 | export const v4 = _v4; | |
| 266 | export const v1 = _v1; |
|
266 | export const v1 = _v1; | |
| 267 | export const empty = "00000000-0000-0000-0000-000000000000"; |
|
267 | export const empty = "00000000-0000-0000-0000-000000000000"; | |
| 268 | export const parse = _parse; |
|
268 | export const parse = _parse; | |
|
|
269 | export const Uuid = _v4; | |||
| 269 | } |
|
270 | } | |
|
|
271 | ||||
|
|
272 | export = _Uuid; | |||
| @@ -28,27 +28,6 import { ICancellation } from "../interf | |||||
| 28 |
|
28 | |||
| 29 | const trace = TraceSource.get("@implab/core/di/Configuration"); |
|
29 | const trace = TraceSource.get("@implab/core/di/Configuration"); | |
| 30 |
|
30 | |||
| 31 | declare const define; |
|
|||
| 32 | declare const require; |
|
|||
| 33 | declare const module; |
|
|||
| 34 |
|
||||
| 35 | function hasAmdLoader() { |
|
|||
| 36 | try { |
|
|||
| 37 | // es6 may throw the exception |
|
|||
| 38 | return (typeof define === "function" && define.amd); |
|
|||
| 39 | } catch { |
|
|||
| 40 | return false; |
|
|||
| 41 | } |
|
|||
| 42 | } |
|
|||
| 43 |
|
||||
| 44 | function hasNodeJs() { |
|
|||
| 45 | try { |
|
|||
| 46 | return (typeof module !== "undefined" && module.exports); |
|
|||
| 47 | } catch { |
|
|||
| 48 | return false; |
|
|||
| 49 | } |
|
|||
| 50 | } |
|
|||
| 51 |
|
||||
| 52 | async function mapAll(data: object | any[], map?: (v, k) => any): Promise<any> { |
|
31 | async function mapAll(data: object | any[], map?: (v, k) => any): Promise<any> { | |
| 53 | if (data instanceof Array) { |
|
32 | if (data instanceof Array) { | |
| 54 | return Promise.all(map ? data.map(map) : data); |
|
33 | return Promise.all(map ? data.map(map) : data); | |
| @@ -99,21 +78,21 export class Configuration { | |||||
| 99 |
|
78 | |||
| 100 | this._configName = moduleName; |
|
79 | this._configName = moduleName; | |
| 101 |
|
80 | |||
| 102 | const r = makeResolver(null, contextRequire); |
|
81 | const r = await makeResolver(null, contextRequire); | |
| 103 |
|
82 | |||
| 104 | const config = await r(moduleName, ct); |
|
83 | const config = await r(moduleName, ct); | |
| 105 |
|
84 | |||
| 106 | await this._applyConfiguration( |
|
85 | await this._applyConfiguration( | |
| 107 | config, |
|
86 | config, | |
| 108 | makeResolver(moduleName, contextRequire), |
|
87 | await makeResolver(moduleName, contextRequire), | |
| 109 | ct |
|
88 | ct | |
| 110 | ); |
|
89 | ); | |
| 111 | } |
|
90 | } | |
| 112 |
|
91 | |||
| 113 | applyConfiguration(data: object, contextRequire?: any, ct = Cancellation.none) { |
|
92 | async applyConfiguration(data: object, contextRequire?: any, ct = Cancellation.none) { | |
| 114 | argumentNotNull(data, "data"); |
|
93 | argumentNotNull(data, "data"); | |
| 115 |
|
94 | |||
| 116 |
|
|
95 | await this._applyConfiguration(data, await makeResolver(void (0), contextRequire), ct); | |
| 117 | } |
|
96 | } | |
| 118 |
|
97 | |||
| 119 | async _applyConfiguration(data: object, resolver?: ModuleResolver, ct = Cancellation.none) { |
|
98 | async _applyConfiguration(data: object, resolver?: ModuleResolver, ct = Cancellation.none) { | |
| @@ -262,7 +241,7 export class Configuration { | |||||
| 262 | opts.services = this._visitRegistrations(data.services, "services"); |
|
241 | opts.services = this._visitRegistrations(data.services, "services"); | |
| 263 |
|
242 | |||
| 264 | if (data.inject) { |
|
243 | if (data.inject) { | |
| 265 |
this._ |
|
244 | this._enter("inject"); | |
| 266 | opts.inject = mapAll( |
|
245 | opts.inject = mapAll( | |
| 267 | data.inject instanceof Array ? |
|
246 | data.inject instanceof Array ? | |
| 268 | data.inject : |
|
247 | data.inject : | |
| @@ -353,11 +332,11 export class Configuration { | |||||
| 353 | } |
|
332 | } | |
| 354 |
|
333 | |||
| 355 | async _visitFactoryRegistration(data: FactoryRegistration, name: _key) { |
|
334 | async _visitFactoryRegistration(data: FactoryRegistration, name: _key) { | |
| 356 |
argumentOfType(data.$factory, Function, "data.$ty |
|
335 | argumentOfType(data.$factory, Function, "data.$factory"); | |
| 357 | this._enter(name); |
|
336 | this._enter(name); | |
| 358 |
|
337 | |||
| 359 | const opts = this._makeServiceParams(data); |
|
338 | const opts = this._makeServiceParams(data); | |
| 360 |
opts.factory = |
|
339 | opts.factory = data.$factory; | |
| 361 |
|
340 | |||
| 362 | const d = new FactoryServiceDescriptor( |
|
341 | const d = new FactoryServiceDescriptor( | |
| 363 | await mapAll(opts) |
|
342 | await mapAll(opts) | |
| @@ -14,7 +14,7 export class FactoryServiceDescriptor ex | |||||
| 14 | argumentNotNull(opts && opts.factory, "opts.factory"); |
|
14 | argumentNotNull(opts && opts.factory, "opts.factory"); | |
| 15 |
|
15 | |||
| 16 | // bind to null |
|
16 | // bind to null | |
| 17 | this._factory = () => opts.factory(); |
|
17 | this._factory = (...args) => opts.factory.apply(null, args); | |
| 18 |
|
18 | |||
| 19 | if (opts.activation === ActivationType.Singleton) { |
|
19 | if (opts.activation === ActivationType.Singleton) { | |
| 20 | this._cacheId = oid(opts.factory); |
|
20 | this._cacheId = oid(opts.factory); | |
| @@ -1,3 +1,3 | |||||
| 1 | import { ModuleResolver } from "./Configuration"; |
|
1 | import { ModuleResolver } from "./Configuration"; | |
| 2 |
|
2 | |||
| 3 | export declare function makeResolver(moduleName?: string, contextRequire?: any): ModuleResolver; No newline at end of file |
|
3 | export declare function makeResolver(moduleName?: string, contextRequire?: any): Promise<ModuleResolver>; No newline at end of file | |
| @@ -14,9 +14,9 function injectMethod(target, method, co | |||||
| 14 | throw new Error("Method '" + method + "' not found"); |
|
14 | throw new Error("Method '" + method + "' not found"); | |
| 15 |
|
15 | |||
| 16 | if (args instanceof Array) |
|
16 | if (args instanceof Array) | |
| 17 |
return m.apply(target, |
|
17 | return m.apply(target, _parse(args, context, "." + method)); | |
| 18 | else |
|
18 | else | |
| 19 |
return m.call(target, |
|
19 | return m.call(target, _parse(args, context, "." + method)); | |
| 20 | } |
|
20 | } | |
| 21 |
|
21 | |||
| 22 | function makeClenupCallback(target, method: ((instance) => void) | string) { |
|
22 | function makeClenupCallback(target, method: ((instance) => void) | string) { | |
| @@ -90,10 +90,10 export class ServiceDescriptor implement | |||||
| 90 |
|
90 | |||
| 91 | this._owner = opts.owner; |
|
91 | this._owner = opts.owner; | |
| 92 |
|
92 | |||
| 93 |
if (opts |
|
93 | if ("activation" in opts) | |
| 94 | this._activationType = opts.activation; |
|
94 | this._activationType = opts.activation; | |
| 95 |
|
95 | |||
| 96 |
if (opts |
|
96 | if ("params" in opts) | |
| 97 | this._params = opts.params; |
|
97 | this._params = opts.params; | |
| 98 |
|
98 | |||
| 99 | if (opts.inject) |
|
99 | if (opts.inject) | |
| @@ -16,7 +16,7 export interface ServiceMap { | |||||
| 16 | } |
|
16 | } | |
| 17 |
|
17 | |||
| 18 | export enum ActivationType { |
|
18 | export enum ActivationType { | |
| 19 | Singleton, |
|
19 | Singleton = 1, | |
| 20 | Container, |
|
20 | Container, | |
| 21 | Hierarchy, |
|
21 | Hierarchy, | |
| 22 | Context, |
|
22 | Context, | |
| @@ -59,11 +59,11 export interface DependencyRegistration | |||||
| 59 | } |
|
59 | } | |
| 60 |
|
60 | |||
| 61 | export function isTypeRegistration(x): x is TypeRegistration { |
|
61 | export function isTypeRegistration(x): x is TypeRegistration { | |
| 62 |
return (!isPrimitive(x)) && ("$type" in x |
|
62 | return (!isPrimitive(x)) && ("$type" in x); | |
| 63 | } |
|
63 | } | |
| 64 |
|
64 | |||
| 65 | export function isFactoryRegistration(x): x is FactoryRegistration { |
|
65 | export function isFactoryRegistration(x): x is FactoryRegistration { | |
| 66 |
return (!isPrimitive(x)) && ( |
|
66 | return (!isPrimitive(x)) && ("$factory" in x); | |
| 67 | } |
|
67 | } | |
| 68 |
|
68 | |||
| 69 | export function isValueRegistration(x): x is ValueRegistration { |
|
69 | export function isValueRegistration(x): x is ValueRegistration { | |
| @@ -1,6 +1,6 | |||||
| 1 | import { Observable } from "../Observable"; |
|
1 | import { Observable } from "../Observable"; | |
| 2 | import { Registry } from "./Registry"; |
|
2 | import { Registry } from "./Registry"; | |
| 3 | import { format } from "../text/StringFormat"; |
|
3 | import { format as _format } from "../text/StringFormat"; | |
| 4 |
|
4 | |||
| 5 | export const DebugLevel = 400; |
|
5 | export const DebugLevel = 400; | |
| 6 |
|
6 | |||
| @@ -20,6 +20,12 export interface TraceEvent { | |||||
| 20 | readonly arg: any; |
|
20 | readonly arg: any; | |
| 21 | } |
|
21 | } | |
| 22 |
|
22 | |||
|
|
23 | function format(msg) { | |||
|
|
24 | if (typeof(msg) !== "string" || arguments.length === 1) | |||
|
|
25 | return msg; | |||
|
|
26 | return _format.apply(null, arguments); | |||
|
|
27 | } | |||
|
|
28 | ||||
| 23 | export class TraceSource { |
|
29 | export class TraceSource { | |
| 24 | readonly id: any; |
|
30 | readonly id: any; | |
| 25 |
|
31 | |||
| @@ -3,6 +3,9 const _oid = typeof Symbol === "function | |||||
| 3 | Symbol("__implab__oid__") : |
|
3 | Symbol("__implab__oid__") : | |
| 4 | "__implab__oid__"; |
|
4 | "__implab__oid__"; | |
| 5 |
|
5 | |||
|
|
6 | declare const window: any; | |||
|
|
7 | declare const global: any; | |||
|
|
8 | ||||
| 6 | export function oid(instance: object): string { |
|
9 | export function oid(instance: object): string { | |
| 7 | if (isNull(instance)) |
|
10 | if (isNull(instance)) | |
| 8 | return null; |
|
11 | return null; | |
| @@ -55,7 +58,7 export function isString(val) { | |||||
| 55 | } |
|
58 | } | |
| 56 |
|
59 | |||
| 57 | export function isPromise(val): val is PromiseLike<any> { |
|
60 | export function isPromise(val): val is PromiseLike<any> { | |
| 58 |
return |
|
61 | return val && typeof val.then === "function"; | |
| 59 | } |
|
62 | } | |
| 60 |
|
63 | |||
| 61 | export function isNullOrEmptyString(str) { |
|
64 | export function isNullOrEmptyString(str) { | |
| @@ -68,8 +71,23 export function isNotEmptyArray(arg): ar | |||||
| 68 | return (arg instanceof Array && arg.length > 0); |
|
71 | return (arg instanceof Array && arg.length > 0); | |
| 69 | } |
|
72 | } | |
| 70 |
|
73 | |||
|
|
74 | function _isStrictMode() { | |||
|
|
75 | return !this; | |||
|
|
76 | } | |||
|
|
77 | ||||
|
|
78 | function _getNonStrictGlobal() { | |||
|
|
79 | return this; | |||
|
|
80 | } | |||
|
|
81 | ||||
| 71 | export function getGlobal() { |
|
82 | export function getGlobal() { | |
| 72 | return this; |
|
83 | // in es3 we can't use indirect call to eval, since it will | |
|
|
84 | // be executed in the current call context. | |||
|
|
85 | if (!_isStrictMode()) { | |||
|
|
86 | return _getNonStrictGlobal(); | |||
|
|
87 | } else { | |||
|
|
88 | // tslint:disable-next-line:no-eval | |||
|
|
89 | return eval.call(null, "this"); | |||
|
|
90 | } | |||
| 73 | } |
|
91 | } | |
| 74 |
|
92 | |||
| 75 | export function get(member: string, context?: object) { |
|
93 | export function get(member: string, context?: object) { | |
| @@ -135,6 +153,9 export function mixin<T, S>(dest: T, sou | |||||
| 135 | argumentNotNull(dest, "to"); |
|
153 | argumentNotNull(dest, "to"); | |
| 136 | const _res = dest as T & S; |
|
154 | const _res = dest as T & S; | |
| 137 |
|
155 | |||
|
|
156 | if (isPrimitive(source)) | |||
|
|
157 | return _res; | |||
|
|
158 | ||||
| 138 | if (template instanceof Array) { |
|
159 | if (template instanceof Array) { | |
| 139 | for (const p of template) { |
|
160 | for (const p of template) { | |
| 140 | if (p in source) |
|
161 | if (p in source) | |
| @@ -268,6 +289,31 export function pmap(items, cb) { | |||||
| 268 | return next(); |
|
289 | return next(); | |
| 269 | } |
|
290 | } | |
| 270 |
|
291 | |||
|
|
292 | export function pfor(items, cb) { | |||
|
|
293 | argumentNotNull(cb, "cb"); | |||
|
|
294 | ||||
|
|
295 | if (isPromise(items)) | |||
|
|
296 | return items.then(data => { | |||
|
|
297 | return pmap(data, cb); | |||
|
|
298 | }); | |||
|
|
299 | ||||
|
|
300 | if (isNull(items) || !items.length) | |||
|
|
301 | return items; | |||
|
|
302 | ||||
|
|
303 | let i = 0; | |||
|
|
304 | ||||
|
|
305 | function next() { | |||
|
|
306 | while (i < items.length) { | |||
|
|
307 | const r = cb(items[i], i); | |||
|
|
308 | i++; | |||
|
|
309 | if (isPromise(r)) | |||
|
|
310 | return r.then(next); | |||
|
|
311 | } | |||
|
|
312 | } | |||
|
|
313 | ||||
|
|
314 | return next(); | |||
|
|
315 | } | |||
|
|
316 | ||||
| 271 | /** |
|
317 | /** | |
| 272 | * Выбирает первый элемент из последовательности, или обещания, если в |
|
318 | * Выбирает первый элемент из последовательности, или обещания, если в | |
| 273 | * качестве параметра используется обещание, оно должно вернуть массив. |
|
319 | * качестве параметра используется обещание, оно должно вернуть массив. | |
| @@ -124,7 +124,7 function defaultConverter(value: any, pa | |||||
| 124 | } else if (value instanceof Date) { |
|
124 | } else if (value instanceof Date) { | |
| 125 | return value.toISOString(); |
|
125 | return value.toISOString(); | |
| 126 | } else { |
|
126 | } else { | |
| 127 |
return |
|
127 | return value.toString(); | |
| 128 | } |
|
128 | } | |
| 129 | } |
|
129 | } | |
| 130 |
|
130 | |||
| @@ -171,3 +171,7 const _default = new Formatter(); | |||||
| 171 | export function format(msg: string, ...args: any[]) { |
|
171 | export function format(msg: string, ...args: any[]) { | |
| 172 | return _default.format(msg, ...args); |
|
172 | return _default.format(msg, ...args); | |
| 173 | } |
|
173 | } | |
|
|
174 | ||||
|
|
175 | export function convert(value: any, pattern: string) { | |||
|
|
176 | return _default.format(value, pattern); | |||
|
|
177 | } | |||
General Comments 0
You need to be logged in to leave comments.
Login now
