UNPKG

9.63 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.trace = exports.Trace = exports.Category = void 0;
4/**
5 * # Transition tracing (debug)
6 *
7 * Enable transition tracing to print transition information to the console,
8 * in order to help debug your application.
9 * Tracing logs detailed information about each Transition to your console.
10 *
11 * To enable tracing, import the [[Trace]] singleton and enable one or more categories.
12 *
13 * ### ES6
14 * ```js
15 * import {trace} from "@uirouter/core";
16 * trace.enable(1, 5); // TRANSITION and VIEWCONFIG
17 * ```
18 *
19 * ### CJS
20 * ```js
21 * let trace = require("@uirouter/core").trace;
22 * trace.enable("TRANSITION", "VIEWCONFIG");
23 * ```
24 *
25 * ### Globals
26 * ```js
27 * let trace = window["@uirouter/core"].trace;
28 * trace.enable(); // Trace everything (very verbose)
29 * ```
30 *
31 * ### Angular 1:
32 * ```js
33 * app.run($trace => $trace.enable());
34 * ```
35 *
36 * @packageDocumentation
37 */
38var hof_1 = require("../common/hof");
39var predicates_1 = require("../common/predicates");
40var strings_1 = require("./strings");
41var safeConsole_1 = require("./safeConsole");
42function uiViewString(uiview) {
43 if (!uiview)
44 return 'ui-view (defunct)';
45 var state = uiview.creationContext ? uiview.creationContext.name || '(root)' : '(none)';
46 return "[ui-view#" + uiview.id + " " + uiview.$type + ":" + uiview.fqn + " (" + uiview.name + "@" + state + ")]";
47}
48var viewConfigString = function (viewConfig) {
49 var view = viewConfig.viewDecl;
50 var state = view.$context.name || '(root)';
51 return "[View#" + viewConfig.$id + " from '" + state + "' state]: target ui-view: '" + view.$uiViewName + "@" + view.$uiViewContextAnchor + "'";
52};
53function normalizedCat(input) {
54 return predicates_1.isNumber(input) ? Category[input] : Category[Category[input]];
55}
56/**
57 * Trace categories Enum
58 *
59 * Enable or disable a category using [[Trace.enable]] or [[Trace.disable]]
60 *
61 * `trace.enable(Category.TRANSITION)`
62 *
63 * These can also be provided using a matching string, or position ordinal
64 *
65 * `trace.enable("TRANSITION")`
66 *
67 * `trace.enable(1)`
68 */
69var Category;
70(function (Category) {
71 Category[Category["RESOLVE"] = 0] = "RESOLVE";
72 Category[Category["TRANSITION"] = 1] = "TRANSITION";
73 Category[Category["HOOK"] = 2] = "HOOK";
74 Category[Category["UIVIEW"] = 3] = "UIVIEW";
75 Category[Category["VIEWCONFIG"] = 4] = "VIEWCONFIG";
76})(Category || (Category = {}));
77exports.Category = Category;
78var _tid = hof_1.parse('$id');
79var _rid = hof_1.parse('router.$id');
80var transLbl = function (trans) { return "Transition #" + _tid(trans) + "-" + _rid(trans); };
81/**
82 * Prints UI-Router Transition trace information to the console.
83 */
84var Trace = /** @class */ (function () {
85 /** @internal */
86 function Trace() {
87 /** @internal */
88 this._enabled = {};
89 this.approximateDigests = 0;
90 }
91 /** @internal */
92 Trace.prototype._set = function (enabled, categories) {
93 var _this = this;
94 if (!categories.length) {
95 categories = Object.keys(Category)
96 .map(function (k) { return parseInt(k, 10); })
97 .filter(function (k) { return !isNaN(k); })
98 .map(function (key) { return Category[key]; });
99 }
100 categories.map(normalizedCat).forEach(function (category) { return (_this._enabled[category] = enabled); });
101 };
102 Trace.prototype.enable = function () {
103 var categories = [];
104 for (var _i = 0; _i < arguments.length; _i++) {
105 categories[_i] = arguments[_i];
106 }
107 this._set(true, categories);
108 };
109 Trace.prototype.disable = function () {
110 var categories = [];
111 for (var _i = 0; _i < arguments.length; _i++) {
112 categories[_i] = arguments[_i];
113 }
114 this._set(false, categories);
115 };
116 /**
117 * Retrieves the enabled stateus of a [[Category]]
118 *
119 * ```js
120 * trace.enabled("VIEWCONFIG"); // true or false
121 * ```
122 *
123 * @returns boolean true if the category is enabled
124 */
125 Trace.prototype.enabled = function (category) {
126 return !!this._enabled[normalizedCat(category)];
127 };
128 /** @internal called by ui-router code */
129 Trace.prototype.traceTransitionStart = function (trans) {
130 if (!this.enabled(Category.TRANSITION))
131 return;
132 safeConsole_1.safeConsole.log(transLbl(trans) + ": Started -> " + strings_1.stringify(trans));
133 };
134 /** @internal called by ui-router code */
135 Trace.prototype.traceTransitionIgnored = function (trans) {
136 if (!this.enabled(Category.TRANSITION))
137 return;
138 safeConsole_1.safeConsole.log(transLbl(trans) + ": Ignored <> " + strings_1.stringify(trans));
139 };
140 /** @internal called by ui-router code */
141 Trace.prototype.traceHookInvocation = function (step, trans, options) {
142 if (!this.enabled(Category.HOOK))
143 return;
144 var event = hof_1.parse('traceData.hookType')(options) || 'internal', context = hof_1.parse('traceData.context.state.name')(options) || hof_1.parse('traceData.context')(options) || 'unknown', name = strings_1.functionToString(step.registeredHook.callback);
145 safeConsole_1.safeConsole.log(transLbl(trans) + ": Hook -> " + event + " context: " + context + ", " + strings_1.maxLength(200, name));
146 };
147 /** @internal called by ui-router code */
148 Trace.prototype.traceHookResult = function (hookResult, trans, transitionOptions) {
149 if (!this.enabled(Category.HOOK))
150 return;
151 safeConsole_1.safeConsole.log(transLbl(trans) + ": <- Hook returned: " + strings_1.maxLength(200, strings_1.stringify(hookResult)));
152 };
153 /** @internal called by ui-router code */
154 Trace.prototype.traceResolvePath = function (path, when, trans) {
155 if (!this.enabled(Category.RESOLVE))
156 return;
157 safeConsole_1.safeConsole.log(transLbl(trans) + ": Resolving " + path + " (" + when + ")");
158 };
159 /** @internal called by ui-router code */
160 Trace.prototype.traceResolvableResolved = function (resolvable, trans) {
161 if (!this.enabled(Category.RESOLVE))
162 return;
163 safeConsole_1.safeConsole.log(transLbl(trans) + ": <- Resolved " + resolvable + " to: " + strings_1.maxLength(200, strings_1.stringify(resolvable.data)));
164 };
165 /** @internal called by ui-router code */
166 Trace.prototype.traceError = function (reason, trans) {
167 if (!this.enabled(Category.TRANSITION))
168 return;
169 safeConsole_1.safeConsole.log(transLbl(trans) + ": <- Rejected " + strings_1.stringify(trans) + ", reason: " + reason);
170 };
171 /** @internal called by ui-router code */
172 Trace.prototype.traceSuccess = function (finalState, trans) {
173 if (!this.enabled(Category.TRANSITION))
174 return;
175 safeConsole_1.safeConsole.log(transLbl(trans) + ": <- Success " + strings_1.stringify(trans) + ", final state: " + finalState.name);
176 };
177 /** @internal called by ui-router code */
178 Trace.prototype.traceUIViewEvent = function (event, viewData, extra) {
179 if (extra === void 0) { extra = ''; }
180 if (!this.enabled(Category.UIVIEW))
181 return;
182 safeConsole_1.safeConsole.log("ui-view: " + strings_1.padString(30, event) + " " + uiViewString(viewData) + extra);
183 };
184 /** @internal called by ui-router code */
185 Trace.prototype.traceUIViewConfigUpdated = function (viewData, context) {
186 if (!this.enabled(Category.UIVIEW))
187 return;
188 this.traceUIViewEvent('Updating', viewData, " with ViewConfig from context='" + context + "'");
189 };
190 /** @internal called by ui-router code */
191 Trace.prototype.traceUIViewFill = function (viewData, html) {
192 if (!this.enabled(Category.UIVIEW))
193 return;
194 this.traceUIViewEvent('Fill', viewData, " with: " + strings_1.maxLength(200, html));
195 };
196 /** @internal called by ui-router code */
197 Trace.prototype.traceViewSync = function (pairs) {
198 if (!this.enabled(Category.VIEWCONFIG))
199 return;
200 var uivheader = 'uiview component fqn';
201 var cfgheader = 'view config state (view name)';
202 var mapping = pairs
203 .map(function (_a) {
204 var _b;
205 var uiView = _a.uiView, viewConfig = _a.viewConfig;
206 var uiv = uiView && uiView.fqn;
207 var cfg = viewConfig && viewConfig.viewDecl.$context.name + ": (" + viewConfig.viewDecl.$name + ")";
208 return _b = {}, _b[uivheader] = uiv, _b[cfgheader] = cfg, _b;
209 })
210 .sort(function (a, b) { return (a[uivheader] || '').localeCompare(b[uivheader] || ''); });
211 safeConsole_1.safeConsole.table(mapping);
212 };
213 /** @internal called by ui-router code */
214 Trace.prototype.traceViewServiceEvent = function (event, viewConfig) {
215 if (!this.enabled(Category.VIEWCONFIG))
216 return;
217 safeConsole_1.safeConsole.log("VIEWCONFIG: " + event + " " + viewConfigString(viewConfig));
218 };
219 /** @internal called by ui-router code */
220 Trace.prototype.traceViewServiceUIViewEvent = function (event, viewData) {
221 if (!this.enabled(Category.VIEWCONFIG))
222 return;
223 safeConsole_1.safeConsole.log("VIEWCONFIG: " + event + " " + uiViewString(viewData));
224 };
225 return Trace;
226}());
227exports.Trace = Trace;
228/**
229 * The [[Trace]] singleton
230 *
231 * #### Example:
232 * ```js
233 * import {trace} from "@uirouter/core";
234 * trace.enable(1, 5);
235 * ```
236 */
237var trace = new Trace();
238exports.trace = trace;
239//# sourceMappingURL=trace.js.map
\No newline at end of file