@cloudcare/cocos-sdk 0.1.1-alpha.2 → 0.1.1-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/creator2/core/auto-tracking.d.ts +3 -1
- package/dist/creator2/core/auto-tracking.d.ts.map +1 -1
- package/dist/creator2/core/auto-tracking.js +360 -164
- package/dist/creator2/core/auto-tracking.js.map +1 -1
- package/dist/creator2/core/client.d.ts.map +1 -1
- package/dist/creator2/core/client.js +1 -3
- package/dist/creator2/core/client.js.map +1 -1
- package/dist/creator2/core/modules.d.ts.map +1 -1
- package/dist/creator2/core/modules.js +2 -2
- package/dist/creator2/core/modules.js.map +1 -1
- package/dist/creator2/core/observation.d.ts +25 -0
- package/dist/creator2/core/observation.d.ts.map +1 -0
- package/dist/creator2/core/observation.js +93 -0
- package/dist/creator2/core/observation.js.map +1 -0
- package/dist/creator2/core/platform-runtime.d.ts +2 -1
- package/dist/creator2/core/platform-runtime.d.ts.map +1 -1
- package/dist/creator2/core/platform-runtime.js.map +1 -1
- package/dist/creator2/core/types.d.ts +9 -0
- package/dist/creator2/core/types.d.ts.map +1 -1
- package/dist/creator2/core/types.js.map +1 -1
- package/dist/creator2/core/validation.d.ts +1 -0
- package/dist/creator2/core/validation.d.ts.map +1 -1
- package/dist/creator2/core/validation.js +13 -0
- package/dist/creator2/core/validation.js.map +1 -1
- package/dist/creator2/core/version.d.ts +1 -3
- package/dist/creator2/core/version.d.ts.map +1 -1
- package/dist/creator2/core/version.js +2 -4
- package/dist/creator2/core/version.js.map +1 -1
- package/dist/creator2/creator2/auto.js +14 -5
- package/dist/creator2/creator2/auto.js.map +1 -1
- package/dist/creator2/native/bootstrap.js +3 -2
- package/dist/creator2/native/bootstrap.js.map +1 -1
- package/dist/creator2/native/error-bootstrap.d.ts +2 -0
- package/dist/creator2/native/error-bootstrap.d.ts.map +1 -0
- package/dist/creator2/native/error-bootstrap.js +7 -0
- package/dist/creator2/native/error-bootstrap.js.map +1 -0
- package/dist/creator2/native/jsb-errors.d.ts +21 -0
- package/dist/creator2/native/jsb-errors.d.ts.map +1 -0
- package/dist/creator2/native/jsb-errors.js +91 -0
- package/dist/creator2/native/jsb-errors.js.map +1 -0
- package/dist/creator2/web/runtime.d.ts.map +1 -1
- package/dist/creator2/web/runtime.js +0 -1
- package/dist/creator2/web/runtime.js.map +1 -1
- package/dist/creator3/core/auto-tracking.d.ts +3 -1
- package/dist/creator3/core/auto-tracking.d.ts.map +1 -1
- package/dist/creator3/core/auto-tracking.js +327 -91
- package/dist/creator3/core/auto-tracking.js.map +1 -1
- package/dist/creator3/core/client.d.ts.map +1 -1
- package/dist/creator3/core/client.js +1 -3
- package/dist/creator3/core/client.js.map +1 -1
- package/dist/creator3/core/modules.d.ts.map +1 -1
- package/dist/creator3/core/modules.js +4 -9
- package/dist/creator3/core/modules.js.map +1 -1
- package/dist/creator3/core/observation.d.ts +25 -0
- package/dist/creator3/core/observation.d.ts.map +1 -0
- package/dist/creator3/core/observation.js +84 -0
- package/dist/creator3/core/observation.js.map +1 -0
- package/dist/creator3/core/platform-runtime.d.ts +2 -1
- package/dist/creator3/core/platform-runtime.d.ts.map +1 -1
- package/dist/creator3/core/platform-runtime.js.map +1 -1
- package/dist/creator3/core/types.d.ts +9 -0
- package/dist/creator3/core/types.d.ts.map +1 -1
- package/dist/creator3/core/validation.d.ts +1 -0
- package/dist/creator3/core/validation.d.ts.map +1 -1
- package/dist/creator3/core/validation.js +11 -0
- package/dist/creator3/core/validation.js.map +1 -1
- package/dist/creator3/core/version.d.ts +1 -3
- package/dist/creator3/core/version.d.ts.map +1 -1
- package/dist/creator3/core/version.js +1 -3
- package/dist/creator3/core/version.js.map +1 -1
- package/dist/creator3/creator3/index.js +2 -2
- package/dist/creator3/creator3/index.js.map +1 -1
- package/dist/creator3/native/bootstrap.js +2 -2
- package/dist/creator3/native/bootstrap.js.map +1 -1
- package/dist/creator3/native/error-bootstrap.d.ts +2 -0
- package/dist/creator3/native/error-bootstrap.d.ts.map +1 -0
- package/dist/creator3/native/error-bootstrap.js +5 -0
- package/dist/creator3/native/error-bootstrap.js.map +1 -0
- package/dist/creator3/native/jsb-errors.d.ts +21 -0
- package/dist/creator3/native/jsb-errors.d.ts.map +1 -0
- package/dist/creator3/native/jsb-errors.js +82 -0
- package/dist/creator3/native/jsb-errors.js.map +1 -0
- package/dist/creator3/web/runtime.d.ts.map +1 -1
- package/dist/creator3/web/runtime.js +1 -2
- package/dist/creator3/web/runtime.js.map +1 -1
- package/extensions/creator2/install-native.cjs +19 -1
- package/extensions/creator3/install-native.cjs +19 -1
- package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridge.java +7 -10
- package/native/ios/FTCocosBridge.m +6 -4
- package/native/ios/FTCocosBridge.podspec +1 -1
- package/native/jsb-errors.js +266 -0
- package/package.json +1 -1
- package/runtime/native.js +511 -243
- package/web/bootstrap.js +17 -6
- package/web/bootstrap.js.map +2 -2
|
@@ -1,62 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
-
function step(op) {
|
|
27
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
43
|
-
}
|
|
44
|
-
op = body.call(thisArg, _);
|
|
45
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
50
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
51
|
-
if (ar || !(i in from)) {
|
|
52
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
53
|
-
ar[i] = from[i];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
57
|
-
};
|
|
58
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
3
|
exports.FTDefaultAutoTracking = void 0;
|
|
4
|
+
var observation_js_1 = require("./observation.js");
|
|
60
5
|
var FTDefaultAutoTracking = /** @class */ (function () {
|
|
61
6
|
function FTDefaultAutoTracking(rum, logger, trace, hooks, target) {
|
|
62
7
|
if (target === void 0) { target = globalThis; }
|
|
@@ -67,6 +12,7 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
67
12
|
this.target = target;
|
|
68
13
|
this.stops = [];
|
|
69
14
|
this.networkStops = [];
|
|
15
|
+
this.observations = new observation_js_1.FTObservationQueue(target);
|
|
70
16
|
}
|
|
71
17
|
FTDefaultAutoTracking.prototype.start = function (config, viewName, scope) {
|
|
72
18
|
if (scope === void 0) { scope = 'all'; }
|
|
@@ -113,6 +59,7 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
113
59
|
if (scope !== 'page')
|
|
114
60
|
this.networkStops.splice(0).reverse().forEach(cleanup);
|
|
115
61
|
if (scope !== 'network') {
|
|
62
|
+
this.observations.stop();
|
|
116
63
|
this.stops.splice(0).reverse().forEach(cleanup);
|
|
117
64
|
if (this.activeView) {
|
|
118
65
|
cleanup(function () { return _this.rum.stopView(); });
|
|
@@ -140,6 +87,29 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
140
87
|
};
|
|
141
88
|
FTDefaultAutoTracking.prototype.installErrorTracking = function () {
|
|
142
89
|
var _this = this;
|
|
90
|
+
var _a;
|
|
91
|
+
var nativeErrors = this.target.__FT_COCOS_JSB_ERRORS__;
|
|
92
|
+
if ((nativeErrors === null || nativeErrors === void 0 ? void 0 : nativeErrors.protocol) === 2) {
|
|
93
|
+
this.stops.push(nativeErrors.subscribe(function (location, message, stack) {
|
|
94
|
+
var _a;
|
|
95
|
+
// Creator 2 also reports promise bookkeeping notifications through onError.
|
|
96
|
+
if (message === 'handlerAddedAfterPromiseRejected' || message === 'rejectAfterPromiseResolved'
|
|
97
|
+
|| message === 'resolveAfterPromiseResolved')
|
|
98
|
+
return;
|
|
99
|
+
var rejection = message === 'unhandledRejectedPromise';
|
|
100
|
+
var reason = rejection ? (_a = stack.split(/\r?\n/, 1)[0]) === null || _a === void 0 ? void 0 : _a.replace(/^Error:\s*/, '') : message;
|
|
101
|
+
var errorMessage = reason || message || 'Uncaught JavaScript error';
|
|
102
|
+
var errorStack = stack || location || '';
|
|
103
|
+
var type = rejection ? 'unhandled_promise_rejection' : 'cocos_error';
|
|
104
|
+
_this.observations.enqueue(function () {
|
|
105
|
+
_this.rum.addError(errorMessage, errorStack, type);
|
|
106
|
+
}, 2 * (location.length + message.length + stack.length));
|
|
107
|
+
}));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (nativeErrors || typeof ((_a = this.target.jsb) === null || _a === void 0 ? void 0 : _a.onError) === 'function') {
|
|
111
|
+
throw new Error('Cocos native error bootstrap is missing. Rerun the SDK installer and rebuild the native project.');
|
|
112
|
+
}
|
|
143
113
|
if (!this.target.addEventListener || !this.target.removeEventListener)
|
|
144
114
|
return;
|
|
145
115
|
var errorListener = function (event) {
|
|
@@ -170,24 +140,51 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
170
140
|
'warn',
|
|
171
141
|
'error',
|
|
172
142
|
];
|
|
143
|
+
var observations = this.observations;
|
|
144
|
+
var state = (0, observation_js_1.observationState)(this.target);
|
|
173
145
|
var originals = new Map();
|
|
146
|
+
var wrappers = new Map();
|
|
147
|
+
var active = true;
|
|
174
148
|
methods.forEach(function (method) {
|
|
175
|
-
var original = consoleObject[method]
|
|
149
|
+
var original = consoleObject[method];
|
|
176
150
|
originals.set(method, original);
|
|
177
|
-
|
|
151
|
+
var logger = _this.logger;
|
|
152
|
+
consoleObject[method] = function () {
|
|
178
153
|
var args = [];
|
|
179
154
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
180
155
|
args[_i] = arguments[_i];
|
|
181
156
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
157
|
+
var snapshot;
|
|
158
|
+
try {
|
|
159
|
+
if (active && !state.reporting)
|
|
160
|
+
snapshot = { timestampMs: Date.now(), values: args.slice(0, 16) };
|
|
161
|
+
}
|
|
162
|
+
catch ( /* Snapshot failures cannot prevent the original console call. */_a) { /* Snapshot failures cannot prevent the original console call. */ }
|
|
163
|
+
// Keep the original receiver, result and thrown value. No SDK work can
|
|
164
|
+
// escape this finally block and replace the original console outcome.
|
|
165
|
+
try {
|
|
166
|
+
return original.apply(this, args);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
try {
|
|
170
|
+
if (active && snapshot) {
|
|
171
|
+
var timestampMs_1 = snapshot.timestampMs, values_1 = snapshot.values;
|
|
172
|
+
observations.enqueue(function () {
|
|
173
|
+
var level = method === 'warn' ? 'warning' : method === 'error' ? 'error' : 'info';
|
|
174
|
+
logger.log(values_1.map(stringifyLogValue).join(' '), level, { cocos_observed_at_ms: timestampMs_1 });
|
|
175
|
+
}, values_1.reduce(function (size, value) { return size + (typeof value === 'string' ? value.length * 2 : 64); }, 0));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch ( /* Logging must never change application console behavior. */_b) { /* Logging must never change application console behavior. */ }
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
wrappers.set(method, consoleObject[method]);
|
|
186
182
|
});
|
|
187
183
|
this.stops.push(function () {
|
|
184
|
+
active = false;
|
|
188
185
|
methods.forEach(function (method) {
|
|
189
186
|
var original = originals.get(method);
|
|
190
|
-
if (original)
|
|
187
|
+
if (original && consoleObject[method] === wrappers.get(method))
|
|
191
188
|
consoleObject[method] = original;
|
|
192
189
|
});
|
|
193
190
|
});
|
|
@@ -197,46 +194,93 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
197
194
|
var original = this.target.fetch;
|
|
198
195
|
if (!original)
|
|
199
196
|
return;
|
|
200
|
-
var
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
197
|
+
var rum = this.rum;
|
|
198
|
+
var trace = this.trace;
|
|
199
|
+
var active = true;
|
|
200
|
+
var tracked = function () {
|
|
201
|
+
var args = [];
|
|
202
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
203
|
+
args[_i] = arguments[_i];
|
|
204
|
+
}
|
|
205
|
+
if (!active)
|
|
206
|
+
return original.apply(this, args);
|
|
207
|
+
var outgoing = args;
|
|
208
|
+
var data;
|
|
209
|
+
observeNetwork(function () {
|
|
210
|
+
var input = args[0], init = args[1];
|
|
211
|
+
var inputObject = networkInput(input);
|
|
212
|
+
if (!inputObject)
|
|
213
|
+
return;
|
|
214
|
+
var url = inputObject.url;
|
|
215
|
+
var method = networkOption(init, 'method');
|
|
216
|
+
var sourceHeaders = networkOption(init, 'headers');
|
|
217
|
+
var record = { key: resourceKey(), url: url, method: method || inputObject.method || 'GET',
|
|
218
|
+
start: nowNs(), headers: undefined };
|
|
219
|
+
data = record;
|
|
220
|
+
try {
|
|
221
|
+
var headers_1 = createHeaders(sourceHeaders === undefined ? inputObject.headers : sourceHeaders);
|
|
222
|
+
var appended_1 = false;
|
|
223
|
+
forEachOwn(trace.getHeaders(url, record.key), function (name, value) {
|
|
224
|
+
if (!hasHeader(headers_1, name)) {
|
|
225
|
+
appendHeader(headers_1, name, value);
|
|
226
|
+
appended_1 = true;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
if (appended_1) {
|
|
230
|
+
outgoing = args.slice();
|
|
231
|
+
outgoing[1] = withRequestHeaders(init, headers_1);
|
|
232
|
+
}
|
|
233
|
+
record.headers = headers_1;
|
|
235
234
|
}
|
|
235
|
+
catch ( /* Failed instrumentation leaves the original fetch arguments intact. */_a) { /* Failed instrumentation leaves the original fetch arguments intact. */ }
|
|
236
|
+
observeNetwork(function () { return rum.startResource(record.key); });
|
|
236
237
|
});
|
|
237
|
-
|
|
238
|
+
var reportFailure = function (error) {
|
|
239
|
+
if (!data)
|
|
240
|
+
return;
|
|
241
|
+
var key = data.key;
|
|
242
|
+
observeNetwork(function () { return rum.stopResource(key); });
|
|
243
|
+
observeNetwork(function () { return rum.addError(String(error), error instanceof Error ? error.stack || '' : '', 'network_error'); });
|
|
244
|
+
};
|
|
245
|
+
var result;
|
|
246
|
+
// Invoke the application request once. Observation failures must never retry it.
|
|
247
|
+
try {
|
|
248
|
+
result = original.apply(this, outgoing);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
reportFailure(error);
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
if (!data)
|
|
255
|
+
return result;
|
|
256
|
+
var record = data;
|
|
257
|
+
try {
|
|
258
|
+
return result.then(function (response) {
|
|
259
|
+
observeNetwork(function () { return rum.stopResource(record.key); });
|
|
260
|
+
observeNetwork(function () {
|
|
261
|
+
var end = nowNs();
|
|
262
|
+
rum.addResource(record.key, {
|
|
263
|
+
url: record.url,
|
|
264
|
+
httpMethod: record.method,
|
|
265
|
+
requestHeaders: record.headers && headersToObject(record.headers),
|
|
266
|
+
responseHeaders: headersToObject(response.headers),
|
|
267
|
+
statusCode: response.status,
|
|
268
|
+
}, { fetchStartTime: record.start, responseStartTime: end, responseEndTime: end });
|
|
269
|
+
});
|
|
270
|
+
return response;
|
|
271
|
+
}, function (error) {
|
|
272
|
+
reportFailure(error);
|
|
273
|
+
throw error;
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
catch (_a) {
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
238
280
|
this.networkStops.push(function () {
|
|
239
|
-
|
|
281
|
+
active = false;
|
|
282
|
+
if (_this.target.fetch === tracked)
|
|
283
|
+
_this.target.fetch = original;
|
|
240
284
|
});
|
|
241
285
|
this.target.fetch = tracked;
|
|
242
286
|
};
|
|
@@ -250,71 +294,155 @@ var FTDefaultAutoTracking = /** @class */ (function () {
|
|
|
250
294
|
var metadata = new WeakMap();
|
|
251
295
|
var rum = this.rum;
|
|
252
296
|
var trace = this.trace;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
var
|
|
257
|
-
var
|
|
258
|
-
|
|
259
|
-
|
|
297
|
+
var active = true;
|
|
298
|
+
var trackedOpen = function () {
|
|
299
|
+
var _this = this;
|
|
300
|
+
var args = [];
|
|
301
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
302
|
+
args[_i] = arguments[_i];
|
|
303
|
+
}
|
|
304
|
+
if (!active)
|
|
305
|
+
return open.apply(this, args);
|
|
306
|
+
var previous = metadata.get(this);
|
|
307
|
+
observeNetwork(function () {
|
|
308
|
+
metadata.delete(_this);
|
|
309
|
+
if (typeof args[0] !== 'string' || typeof args[1] !== 'string')
|
|
310
|
+
return;
|
|
311
|
+
metadata.set(_this, { key: resourceKey(), method: args[0], url: String(args[1]),
|
|
312
|
+
headers: Object.create(null), headersKnown: true });
|
|
313
|
+
});
|
|
314
|
+
try {
|
|
315
|
+
return open.apply(this, args);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
observeNetwork(function () { if (previous)
|
|
319
|
+
metadata.set(_this, previous);
|
|
320
|
+
else
|
|
321
|
+
metadata.delete(_this); });
|
|
322
|
+
throw error;
|
|
260
323
|
}
|
|
261
|
-
metadata.set(this, { key: resourceKey(), method: method, url: String(url), headers: {} });
|
|
262
|
-
(_a = open).call.apply(_a, __spreadArray([this, method, url], rest, false));
|
|
263
324
|
};
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
325
|
+
// Register each restore before assignment so partial installation can roll back.
|
|
326
|
+
this.networkStops.push(function () { active = false; if (Xhr.prototype.open === trackedOpen)
|
|
327
|
+
Xhr.prototype.open = open; });
|
|
328
|
+
Xhr.prototype.open = trackedOpen;
|
|
329
|
+
var trackedHeader = function () {
|
|
330
|
+
var _this = this;
|
|
331
|
+
var args = [];
|
|
332
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
333
|
+
args[_i] = arguments[_i];
|
|
334
|
+
}
|
|
335
|
+
var result = setRequestHeader.apply(this, args);
|
|
336
|
+
observeNetwork(function () {
|
|
337
|
+
var data = active && metadata.get(_this);
|
|
338
|
+
if (!data)
|
|
339
|
+
return;
|
|
340
|
+
var name = args[0], value = args[1];
|
|
341
|
+
if (typeof name !== 'string' || typeof value !== 'string') {
|
|
342
|
+
data.headersKnown = false;
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
var key = name.toLowerCase();
|
|
346
|
+
data.headers[key] = key in data.headers ? "".concat(data.headers[key], ", ").concat(value) : value;
|
|
347
|
+
});
|
|
348
|
+
return result;
|
|
270
349
|
};
|
|
271
|
-
this.networkStops.push(function () {
|
|
272
|
-
|
|
350
|
+
this.networkStops.push(function () {
|
|
351
|
+
active = false;
|
|
352
|
+
if (Xhr.prototype.setRequestHeader === trackedHeader)
|
|
353
|
+
Xhr.prototype.setRequestHeader = setRequestHeader;
|
|
354
|
+
});
|
|
355
|
+
Xhr.prototype.setRequestHeader = trackedHeader;
|
|
356
|
+
var trackedSend = function () {
|
|
273
357
|
var _this = this;
|
|
274
|
-
var
|
|
358
|
+
var args = [];
|
|
359
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
360
|
+
args[_i] = arguments[_i];
|
|
361
|
+
}
|
|
362
|
+
var data = active && metadata.get(this);
|
|
275
363
|
if (!data)
|
|
276
|
-
return send.
|
|
277
|
-
|
|
278
|
-
data.
|
|
279
|
-
|
|
364
|
+
return send.apply(this, args);
|
|
365
|
+
observeNetwork(function () {
|
|
366
|
+
if (!data.headersKnown)
|
|
367
|
+
return;
|
|
368
|
+
forEachOwn(trace.getHeaders(data.url, data.key), function (name, value) {
|
|
369
|
+
if (!validTraceHeader(name, value))
|
|
370
|
+
return;
|
|
371
|
+
var key = name.toLowerCase();
|
|
372
|
+
if (key in data.headers)
|
|
373
|
+
return;
|
|
374
|
+
setRequestHeader.call(_this, name, value);
|
|
375
|
+
data.headers[key] = value;
|
|
376
|
+
});
|
|
280
377
|
});
|
|
281
|
-
var started =
|
|
282
|
-
rum.startResource(data.key);
|
|
378
|
+
var started = 0;
|
|
379
|
+
observeNetwork(function () { started = nowNs(); rum.startResource(data.key); });
|
|
283
380
|
var completed = false;
|
|
381
|
+
var cleanup;
|
|
284
382
|
var report = function () {
|
|
285
383
|
if (completed)
|
|
286
384
|
return;
|
|
287
385
|
completed = true;
|
|
288
|
-
|
|
289
|
-
rum.stopResource(data.key);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
386
|
+
observeNetwork(function () { return cleanup === null || cleanup === void 0 ? void 0 : cleanup(); });
|
|
387
|
+
observeNetwork(function () { return rum.stopResource(data.key); });
|
|
388
|
+
observeNetwork(function () {
|
|
389
|
+
var ended = nowNs();
|
|
390
|
+
rum.addResource(data.key, {
|
|
391
|
+
url: data.url,
|
|
392
|
+
httpMethod: data.method,
|
|
393
|
+
requestHeaders: data.headers,
|
|
394
|
+
responseHeaders: parseXhrHeaders(_this.getAllResponseHeaders()),
|
|
395
|
+
statusCode: _this.status,
|
|
396
|
+
}, { fetchStartTime: started, responseStartTime: ended, responseEndTime: ended });
|
|
397
|
+
});
|
|
297
398
|
};
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
399
|
+
observeNetwork(function () {
|
|
400
|
+
var originalLoadEnd = _this.onloadend;
|
|
401
|
+
try {
|
|
402
|
+
_this.addEventListener('loadend', report, { once: true });
|
|
403
|
+
// Creator 2 JSB assigns the on* property instead of keeping a listener list.
|
|
404
|
+
if (_this.onloadend === report) {
|
|
405
|
+
var xhr_1 = _this;
|
|
406
|
+
var handler_1 = function () {
|
|
407
|
+
var events = [];
|
|
408
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
409
|
+
events[_i] = arguments[_i];
|
|
410
|
+
}
|
|
411
|
+
observeNetwork(function () { return cleanup === null || cleanup === void 0 ? void 0 : cleanup(); });
|
|
412
|
+
try {
|
|
413
|
+
return originalLoadEnd === null || originalLoadEnd === void 0 ? void 0 : originalLoadEnd.apply(this, events);
|
|
414
|
+
}
|
|
415
|
+
finally {
|
|
416
|
+
report();
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
cleanup = function () { if (xhr_1.onloadend === handler_1)
|
|
420
|
+
xhr_1.onloadend = originalLoadEnd; };
|
|
421
|
+
_this.onloadend = handler_1;
|
|
309
422
|
}
|
|
310
|
-
|
|
311
|
-
|
|
423
|
+
else {
|
|
424
|
+
cleanup = function () { return _this.removeEventListener('loadend', report); };
|
|
312
425
|
}
|
|
313
|
-
}
|
|
314
|
-
|
|
426
|
+
}
|
|
427
|
+
catch (_a) {
|
|
428
|
+
observeNetwork(function () { return cleanup === null || cleanup === void 0 ? void 0 : cleanup(); });
|
|
429
|
+
observeNetwork(function () { if (_this.onloadend === report)
|
|
430
|
+
_this.onloadend = originalLoadEnd; });
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
try {
|
|
434
|
+
return send.apply(this, args);
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
completed = true;
|
|
438
|
+
observeNetwork(function () { return cleanup === null || cleanup === void 0 ? void 0 : cleanup(); });
|
|
439
|
+
observeNetwork(function () { return rum.stopResource(data.key); });
|
|
440
|
+
throw error;
|
|
315
441
|
}
|
|
316
|
-
send.call(this, body);
|
|
317
442
|
};
|
|
443
|
+
this.networkStops.push(function () { active = false; if (Xhr.prototype.send === trackedSend)
|
|
444
|
+
Xhr.prototype.send = send; });
|
|
445
|
+
Xhr.prototype.send = trackedSend;
|
|
318
446
|
};
|
|
319
447
|
return FTDefaultAutoTracking;
|
|
320
448
|
}());
|
|
@@ -327,39 +455,107 @@ function resourceKey() {
|
|
|
327
455
|
resourceSequence = (resourceSequence + 1) % Number.MAX_SAFE_INTEGER;
|
|
328
456
|
return "cocos-".concat(Date.now().toString(36), "-").concat(resourceSequence.toString(36));
|
|
329
457
|
}
|
|
458
|
+
function observeNetwork(observe) {
|
|
459
|
+
try {
|
|
460
|
+
observe();
|
|
461
|
+
}
|
|
462
|
+
catch ( /* Monitoring cannot change the application's network result. */_a) { /* Monitoring cannot change the application's network result. */ }
|
|
463
|
+
}
|
|
464
|
+
function networkOption(init, name) {
|
|
465
|
+
for (var source = init; source; source = Object.getPrototypeOf(source)) {
|
|
466
|
+
var descriptor = Object.getOwnPropertyDescriptor(source, name);
|
|
467
|
+
if (!descriptor)
|
|
468
|
+
continue;
|
|
469
|
+
// Accessors may refresh tokens or mutate options. Leave them to the original fetch.
|
|
470
|
+
if (descriptor.get || descriptor.set)
|
|
471
|
+
throw new TypeError('Network option requires its original receiver');
|
|
472
|
+
return descriptor.value;
|
|
473
|
+
}
|
|
474
|
+
return undefined;
|
|
475
|
+
}
|
|
476
|
+
function networkInput(input) {
|
|
477
|
+
if (typeof input === 'string')
|
|
478
|
+
return { url: input };
|
|
479
|
+
if (typeof Request === 'function' && input instanceof Request) {
|
|
480
|
+
var read = function (name) {
|
|
481
|
+
var descriptor = Object.getOwnPropertyDescriptor(Request.prototype, name);
|
|
482
|
+
return (descriptor === null || descriptor === void 0 ? void 0 : descriptor.get) ? descriptor.get.call(input) : networkOption(input, name);
|
|
483
|
+
};
|
|
484
|
+
return { url: read('url'), method: read('method'), headers: read('headers') };
|
|
485
|
+
}
|
|
486
|
+
if (typeof URL === 'function' && input instanceof URL)
|
|
487
|
+
return { url: URL.prototype.toString.call(input) };
|
|
488
|
+
// Custom string conversion belongs to the application request and must only run there.
|
|
489
|
+
return undefined;
|
|
490
|
+
}
|
|
491
|
+
function withRequestHeaders(init, headers) {
|
|
492
|
+
var result = Object.create(init || null);
|
|
493
|
+
var _loop_1 = function (source) {
|
|
494
|
+
Object.getOwnPropertyNames(source).forEach(function (name) {
|
|
495
|
+
if (name === 'headers' || Object.prototype.hasOwnProperty.call(result, name))
|
|
496
|
+
return;
|
|
497
|
+
var descriptor = Object.getOwnPropertyDescriptor(source, name);
|
|
498
|
+
Object.defineProperty(result, name, { enumerable: descriptor === null || descriptor === void 0 ? void 0 : descriptor.enumerable, configurable: true,
|
|
499
|
+
get: function () { return init[name]; } });
|
|
500
|
+
});
|
|
501
|
+
};
|
|
502
|
+
// Forward getters to their original receiver, including inherited/non-enumerable options.
|
|
503
|
+
for (var source = init; source && source !== Object.prototype; source = Object.getPrototypeOf(source)) {
|
|
504
|
+
_loop_1(source);
|
|
505
|
+
}
|
|
506
|
+
Object.defineProperty(result, 'headers', { value: headers, enumerable: true, configurable: true, writable: true });
|
|
507
|
+
return result;
|
|
508
|
+
}
|
|
330
509
|
function createHeaders(source) {
|
|
331
510
|
var HeadersConstructor = globalThis.Headers;
|
|
332
511
|
if (HeadersConstructor)
|
|
333
512
|
return new HeadersConstructor(source);
|
|
334
|
-
var result =
|
|
513
|
+
var result = [];
|
|
335
514
|
if (Array.isArray(source)) {
|
|
336
515
|
source.forEach(function (_a) {
|
|
337
516
|
var name = _a[0], value = _a[1];
|
|
338
|
-
result[name
|
|
517
|
+
result.push([String(name), String(value)]);
|
|
339
518
|
});
|
|
340
519
|
}
|
|
341
520
|
else if (source && typeof source.forEach === 'function') {
|
|
342
|
-
source.forEach(function (value, name) { result[name
|
|
521
|
+
source.forEach(function (value, name) { result.push([name, value]); });
|
|
343
522
|
}
|
|
344
523
|
else if (source) {
|
|
345
|
-
forEachOwn(source, function (name, value) { result[name
|
|
524
|
+
forEachOwn(source, function (name, value) { result.push([name, String(value)]); });
|
|
346
525
|
}
|
|
347
526
|
return result;
|
|
348
527
|
}
|
|
349
|
-
function
|
|
350
|
-
|
|
351
|
-
|
|
528
|
+
function hasHeader(headers, name) {
|
|
529
|
+
return Array.isArray(headers) ? headers.some(function (_a) {
|
|
530
|
+
var key = _a[0];
|
|
531
|
+
return key.toLowerCase() === name.toLowerCase();
|
|
532
|
+
}) : headers.has(name);
|
|
533
|
+
}
|
|
534
|
+
function appendHeader(headers, name, value) {
|
|
535
|
+
if (!validTraceHeader(name, value))
|
|
536
|
+
throw new TypeError('Invalid trace header');
|
|
537
|
+
if (Array.isArray(headers))
|
|
538
|
+
headers.push([name, value]);
|
|
352
539
|
else
|
|
353
|
-
headers
|
|
540
|
+
headers.append(name, value);
|
|
541
|
+
}
|
|
542
|
+
function validTraceHeader(name, value) {
|
|
543
|
+
return /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(name) && typeof value === 'string'
|
|
544
|
+
&& !/[\x00-\x08\x0a-\x1f\x7f\u0100-\uffff]/.test(value);
|
|
354
545
|
}
|
|
355
546
|
function headersToObject(headers) {
|
|
356
|
-
var result =
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
547
|
+
var result = Object.create(null);
|
|
548
|
+
var append = function (value, name) {
|
|
549
|
+
var key = name.toLowerCase();
|
|
550
|
+
result[key] = key in result ? "".concat(result[key], ", ").concat(value) : value;
|
|
551
|
+
};
|
|
552
|
+
if (Array.isArray(headers))
|
|
553
|
+
headers.forEach(function (_a) {
|
|
554
|
+
var name = _a[0], value = _a[1];
|
|
555
|
+
return append(value, name);
|
|
556
|
+
});
|
|
557
|
+
else
|
|
558
|
+
headers.forEach(append);
|
|
363
559
|
return result;
|
|
364
560
|
}
|
|
365
561
|
function forEachOwn(value, callback) {
|