Skip to content

Commit 83defe7

Browse files
feat(stateEvents): change state events enable/disable api to match $trace service api
1 parent 657e312 commit 83defe7

File tree

3 files changed

+64
-60
lines changed

3 files changed

+64
-60
lines changed

src/common/common.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ export function pluck(collection, propName): any {
140140
// Given an array or object, return a new array or object with:
141141
// - array: only the elements which passed the callback predicate
142142
// - object: only the properties that passed the callback predicate
143-
export function filter<T>(collection: T[], callback: Predicate<T>): T[]
144-
export function filter<T>(collection: TypedMap<T>, callback: Predicate<T>): TypedMap<T>
143+
export function filter<T>(collection: T[], callback: Predicate<T>): T[];
144+
export function filter<T>(collection: TypedMap<T>, callback: Predicate<T>): TypedMap<T>;
145145
export function filter<T>(collection: T, callback: Function): T {
146146
let arr = isArray(collection), result: any = arr ? [] : {};
147147
let accept = arr ? (val) => result.push(val) : (val, key) => result[key] = val;
@@ -343,21 +343,26 @@ export function curry(fn: Function): Function {
343343
return curried(initial_args);
344344
}
345345

346-
export function fnToString(fn) {
346+
export function fnToString(fn: IInjectable) {
347347
let _fn = pattern([
348348
[isArray, val => val.slice(-1)[0]],
349349
[val(true), identity]
350350
])(fn);
351351

352-
//let name = _fn && _fn.name ? _fn.name : "(anonymous)";
353-
let name = _fn && _fn.toString() || "undefined";
354-
let namedFunctionMatch = name.match(/^(function [^ ]+\([^)]*\))/);
355-
if (namedFunctionMatch)
356-
return namedFunctionMatch[1];
357-
// anonymous function... return the first 50 chars instead of the fn name
358-
return name.slice(0, 50).replace(/\n/g, " ");
352+
return _fn && _fn.toString() || "undefined";
359353
}
360354

355+
export function maxLength(max: number, str: string) {
356+
if (str.length <= max) return str;
357+
return str.substr(0, max - 3) + "...";
358+
}
359+
360+
export function padString(length: number, str: string) {
361+
while (str.length < length) str += " ";
362+
return str;
363+
}
364+
365+
361366
/**
362367
* @ngdoc overview
363368
* @name ui.router.util

src/common/trace.ts

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {isNull, isPromise, isNumber, fnToString, isInjectable, is, invoke, not, val, pattern, parse, isDefined, identity} from "../common/common";
1+
import {isNull, isPromise, isNumber, fnToString, maxLength, padString, isInjectable, is, invoke, not, val, pattern, parse, isDefined, identity} from "../common/common";
22
import Resolvable from "../resolve/resolvable";
33
import {Transition} from "../transition/transition";
44
import {TransitionRejection} from "../transition/rejectFactory";
@@ -10,6 +10,12 @@ function promiseToString(p) {
1010
return `Promise(${JSON.stringify(p)})`;
1111
}
1212

13+
function functionToString(fn) {
14+
let fnStr = fnToString(fn);
15+
let namedFunctionMatch = fnStr.match(/^(function [^ ]+\([^)]*\))/);
16+
return namedFunctionMatch ? namedFunctionMatch[1] : fnStr;
17+
}
18+
1319
const uiViewString = (viewData) =>
1420
`ui-view id#${viewData.id}, contextual name '${viewData.name}@${viewData.creationContext}', fqn: '${viewData.fqn}'`;
1521

@@ -20,17 +26,6 @@ function normalizedCat(input: Category): string {
2026
return isNumber(input) ? Category[input] : Category[Category[input]];
2127
}
2228

23-
function padString(length: number, str: string) {
24-
while (str.length < length) str += " ";
25-
return str;
26-
}
27-
28-
function maxLength(max: number, str: string) {
29-
if (str.length <= max) return str;
30-
return str.substr(0, max - 3) + "...";
31-
32-
}
33-
3429
enum Category {
3530
RESOLVE, TRANSITION, HOOK, INVOKE, UIVIEW, VIEWCONFIG
3631
}
@@ -43,7 +38,7 @@ class Trace {
4338
[isPromise, promiseToString],
4439
[is(Transition), invoke("toString")],
4540
[is(Resolvable), invoke("toString")],
46-
[isInjectable, fnToString],
41+
[isInjectable, functionToString],
4742
[val(true), identity]
4843
]);
4944

@@ -87,95 +82,99 @@ class Trace {
8782
traceTransitionStart(transition: Transition) {
8883
if (!this.enabled(Category.TRANSITION)) return;
8984
let tid = transition.$id,
90-
digest = this.approximateDigests,
91-
transitionStr = this._stringify(transition);
85+
digest = this.approximateDigests,
86+
transitionStr = this._stringify(transition);
9287
this._trace(`Transition #${tid} Digest #${digest}: Started -> ${transitionStr}`);
9388
}
9489

9590
traceTransitionIgnored(transition: Transition) {
9691
if (!this.enabled(Category.TRANSITION)) return;
9792
let tid = transition.$id,
98-
digest = this.approximateDigests,
99-
transitionStr = this._stringify(transition);
93+
digest = this.approximateDigests,
94+
transitionStr = this._stringify(transition);
10095
this._trace(`Transition #${tid} Digest #${digest}: Ignored <> ${transitionStr}`);
10196
}
10297

10398
traceHookInvocation(step, options) {
10499
if (!this.enabled(Category.HOOK)) return;
105100
let tid = parse("transition.$id")(options),
106-
digest = this.approximateDigests;
107-
this._trace(`Transition #${tid} Digest #${digest}: Hook -> ${step.toString()}`);
101+
digest = this.approximateDigests,
102+
event = parse("traceData.hookType")(options) || "internal",
103+
context = parse("traceData.context.state.name")(options) || parse("traceData.context")(options) || "unknown",
104+
name = functionToString(step.fn);
105+
this._trace(`Transition #${tid} Digest #${digest}: Hook -> ${event} context: ${context}, ${maxLength(200, name)}`);
108106
}
109107

110108
traceHookResult(hookResult, transitionResult, transitionOptions) {
111109
if (!this.enabled(Category.HOOK)) return;
112110
let tid = parse("transition.$id")(transitionOptions),
113-
digest = this.approximateDigests,
114-
hookResultStr = this._stringify(hookResult),
115-
transitionResultStr = this._stringify(transitionResult);
116-
this._trace(`Transition #${tid} Digest #${digest}: Hook <- returned: ${hookResultStr}, transition result: ${transitionResultStr}`);
111+
digest = this.approximateDigests,
112+
hookResultStr = this._stringify(hookResult),
113+
transitionResultStr = this._stringify(transitionResult);
114+
this._trace(`Transition #${tid} Digest #${digest}: <- Hook returned: ${maxLength(200, hookResultStr)}, transition result: ${maxLength(200, transitionResultStr)}`);
117115
}
118116

119117
traceResolvePath(path, options) {
120118
if (!this.enabled(Category.RESOLVE)) return;
121119
let tid = parse("transition.$id")(options),
122-
digest = this.approximateDigests,
123-
pathStr = path && path.toString(),
124-
policyStr = options && options.resolvePolicy;
120+
digest = this.approximateDigests,
121+
pathStr = path && path.toString(),
122+
policyStr = options && options.resolvePolicy;
125123
this._trace(`Transition #${tid} Digest #${digest}: Resolving ${pathStr} (${policyStr})`);
126124
}
127125

128126
traceResolvePathElement(pathElement, resolvablePromises, options) {
129127
if (!this.enabled(Category.RESOLVE)) return;
130128
if (!resolvablePromises.length) return;
131129
let tid = parse("transition.$id")(options),
132-
digest = this.approximateDigests,
133-
resolvablePromisesStr = Object.keys(resolvablePromises).join(", "),
134-
pathElementStr = pathElement && pathElement.toString(),
135-
policyStr = options && options.resolvePolicy;
130+
digest = this.approximateDigests,
131+
resolvablePromisesStr = Object.keys(resolvablePromises).join(", "),
132+
pathElementStr = pathElement && pathElement.toString(),
133+
policyStr = options && options.resolvePolicy;
136134
this._trace(`Transition #${tid} Digest #${digest}: Resolve ${pathElementStr} resolvables: [${resolvablePromisesStr}] (${policyStr})`);
137135
}
138136

139137
traceResolveResolvable(resolvable, options) {
140138
if (!this.enabled(Category.RESOLVE)) return;
141139
let tid = parse("transition.$id")(options),
142-
digest = this.approximateDigests,
143-
resolvableStr = resolvable && resolvable.toString();
140+
digest = this.approximateDigests,
141+
resolvableStr = resolvable && resolvable.toString();
144142
this._trace(`Transition #${tid} Digest #${digest}: Resolving -> ${resolvableStr}`);
145143
}
146144

147145
traceResolvableResolved(resolvable, options) {
148146
if (!this.enabled(Category.RESOLVE)) return;
149147
let tid = parse("transition.$id")(options),
150-
digest = this.approximateDigests,
151-
resolvableStr = resolvable && resolvable.toString();
152-
this._trace(`Transition #${tid} Digest #${digest}: Resolved <- ${resolvableStr} to: ${resolvable.data}`);
148+
digest = this.approximateDigests,
149+
resolvableStr = resolvable && resolvable.toString(),
150+
result = this._stringify(resolvable.data);
151+
this._trace(`Transition #${tid} Digest #${digest}: <- Resolved ${resolvableStr} to: ${maxLength(200, result)}`);
153152
}
154153

155-
tracePathElementInvoke(pathElement, fn, deps, options) {
154+
tracePathElementInvoke(state, fn, deps, options) {
156155
if (!this.enabled(Category.INVOKE)) return;
157156
let tid = parse("transition.$id")(options),
158-
digest = this.approximateDigests,
159-
pathElementStr = pathElement && pathElement.toString(),
160-
fnName = fnToString(fn);
161-
this._trace(`Transition #${tid} Digest #${digest}: Invoke ${options.when}: context: ${pathElementStr} ${fnName}`);
157+
digest = this.approximateDigests,
158+
stateName = state && state.toString(),
159+
fnName = functionToString(fn);
160+
this._trace(`Transition #${tid} Digest #${digest}: Invoke ${options.when}: context: ${stateName} ${maxLength(200, fnName)}`);
162161
}
163162

164163
traceError(error, transition: Transition) {
165164
if (!this.enabled(Category.TRANSITION)) return;
166165
let tid = transition.$id,
167-
digest = this.approximateDigests,
168-
transitionStr = this._stringify(transition);
169-
this._trace(`Transition #${tid} Digest #${digest}: Rejected <- ${transitionStr}, reason: ${error}`);
166+
digest = this.approximateDigests,
167+
transitionStr = this._stringify(transition);
168+
this._trace(`Transition #${tid} Digest #${digest}: <- Rejected ${transitionStr}, reason: ${error}`);
170169
}
171170

172171
traceSuccess(finalState, transition: Transition) {
173172
if (!this.enabled(Category.TRANSITION)) return;
174173
let tid = transition.$id,
175-
digest = this.approximateDigests,
176-
state = finalState.name,
177-
transitionStr = this._stringify(transition);
178-
this._trace(`Transition #${tid} Digest #${digest}: Success <- ${transitionStr}, final state: ${state}`);
174+
digest = this.approximateDigests,
175+
state = finalState.name,
176+
transitionStr = this._stringify(transition);
177+
this._trace(`Transition #${tid} Digest #${digest}: <- Success ${transitionStr}, final state: ${state}`);
179178
}
180179

181180
traceUiViewEvent(event: string, viewData: IUiViewData, extra = "") {
@@ -195,7 +194,7 @@ class Trace {
195194

196195
traceUiViewFill(viewData: IUiViewData, html) {
197196
if (!this.enabled(Category.UIVIEW)) return;
198-
this.traceUiViewEvent("Fill", viewData, ` with: ${maxLength(60, html)}`);
197+
this.traceUiViewEvent("Fill", viewData, ` with: ${maxLength(200, html)}`);
199198
}
200199

201200
traceViewServiceEvent(event: string, viewConfig: ViewConfig) {

src/transition/transitionHook.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {IInjectable, defaults, extend, noop, filter, not, isFunction, isDefined, map, pattern, isEq, val,
2-
pipe, eq, is, isPromise, isObject, parse, fnToString} from "../common/common";
2+
pipe, eq, is, isPromise, isObject, parse, fnToString, maxLength} from "../common/common";
33
import trace from "../common/trace";
44
import {RejectFactory} from "./rejectFactory";
55
import {Transition} from "./transition";
@@ -90,6 +90,6 @@ export default class TransitionHook {
9090
let event = parse("traceData.hookType")(options) || "internal",
9191
context = parse("traceData.context.state.name")(options) || parse("traceData.context")(options) || "unknown",
9292
name = fnToString(fn);
93-
return `${event} context: ${context}, ${name}`;
93+
return `${event} context: ${context}, ${maxLength(200, name)}`;
9494
}
9595
}

0 commit comments

Comments
 (0)