@microsoft/1ds-core-js 3.2.12 → 4.0.1
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/README.md +1 -1
- package/bundle/es5/ms.core-4.0.1.gbl.js +6321 -0
- package/bundle/es5/ms.core-4.0.1.gbl.js.map +1 -0
- package/bundle/es5/ms.core-4.0.1.gbl.min.js +7 -0
- package/bundle/es5/ms.core-4.0.1.gbl.min.js.map +1 -0
- package/bundle/es5/ms.core-4.0.1.integrity.json +46 -0
- package/bundle/es5/ms.core-4.0.1.js +6325 -0
- package/bundle/es5/ms.core-4.0.1.js.map +1 -0
- package/bundle/es5/ms.core-4.0.1.min.js +7 -0
- package/bundle/es5/ms.core-4.0.1.min.js.map +1 -0
- package/bundle/es5/ms.core.gbl.js +6321 -0
- package/bundle/es5/ms.core.gbl.js.map +1 -0
- package/bundle/es5/ms.core.gbl.min.js +7 -0
- package/bundle/es5/ms.core.gbl.min.js.map +1 -0
- package/bundle/es5/ms.core.integrity.json +46 -0
- package/bundle/es5/ms.core.js +6325 -0
- package/bundle/es5/ms.core.js.map +1 -0
- package/bundle/es5/ms.core.min.js +7 -0
- package/bundle/es5/ms.core.min.js.map +1 -0
- package/{bundle → dist/es5}/ms.core.js +3945 -3022
- package/dist/es5/ms.core.js.map +1 -0
- package/dist/es5/ms.core.min.js +7 -0
- package/dist/es5/ms.core.min.js.map +1 -0
- package/dist-es5/AppInsightsCore.js +91 -0
- package/dist-es5/AppInsightsCore.js.map +1 -0
- package/{dist-esm/src → dist-es5}/BaseCore.js +18 -11
- package/dist-es5/BaseCore.js.map +1 -0
- package/{dist-esm/src → dist-es5}/DataModels.js +1 -1
- package/{dist-esm/src → dist-es5}/Enums.js +3 -26
- package/dist-es5/Enums.js.map +1 -0
- package/{dist-esm/src → dist-es5}/Index.js +9 -14
- package/dist-es5/Index.js.map +1 -0
- package/{dist-esm/src → dist-es5}/InternalConstants.js +1 -3
- package/{dist-esm/src → dist-es5}/InternalConstants.js.map +1 -1
- package/{dist-esm/src → dist-es5}/Utils.js +19 -144
- package/dist-es5/Utils.js.map +1 -0
- package/{dist-esm/src → dist-es5}/ValueSanitizer.js +42 -3
- package/dist-es5/ValueSanitizer.js.map +1 -0
- package/package.json +16 -9
- package/tsconfig.json +5 -3
- package/types/1ds-core-js.d.ts +1110 -0
- package/types/1ds-core-js.namespaced.d.ts +1106 -0
- package/bundle/ms.core-3.2.12.gbl.js +0 -5378
- package/bundle/ms.core-3.2.12.gbl.js.map +0 -1
- package/bundle/ms.core-3.2.12.gbl.min.js +0 -7
- package/bundle/ms.core-3.2.12.gbl.min.js.map +0 -1
- package/bundle/ms.core-3.2.12.integrity.json +0 -46
- package/bundle/ms.core-3.2.12.js +0 -5381
- package/bundle/ms.core-3.2.12.js.map +0 -1
- package/bundle/ms.core-3.2.12.min.js +0 -7
- package/bundle/ms.core-3.2.12.min.js.map +0 -1
- package/bundle/ms.core.gbl.js +0 -5378
- package/bundle/ms.core.gbl.js.map +0 -1
- package/bundle/ms.core.gbl.min.js +0 -7
- package/bundle/ms.core.gbl.min.js.map +0 -1
- package/bundle/ms.core.integrity.json +0 -46
- package/bundle/ms.core.js.map +0 -1
- package/bundle/ms.core.min.js +0 -7
- package/bundle/ms.core.min.js.map +0 -1
- package/dist/ms.core.js +0 -1305
- package/dist/ms.core.js.map +0 -1
- package/dist/ms.core.min.js +0 -7
- package/dist/ms.core.min.js.map +0 -1
- package/dist-esm/src/AppInsightsCore.d.ts +0 -15
- package/dist-esm/src/AppInsightsCore.js +0 -114
- package/dist-esm/src/AppInsightsCore.js.map +0 -1
- package/dist-esm/src/BaseCore.d.ts +0 -13
- package/dist-esm/src/BaseCore.js.map +0 -1
- package/dist-esm/src/DataModels.d.ts +0 -273
- package/dist-esm/src/ESPromise.d.ts +0 -110
- package/dist-esm/src/ESPromise.js +0 -286
- package/dist-esm/src/ESPromise.js.map +0 -1
- package/dist-esm/src/ESPromiseScheduler.d.ts +0 -36
- package/dist-esm/src/ESPromiseScheduler.js +0 -274
- package/dist-esm/src/ESPromiseScheduler.js.map +0 -1
- package/dist-esm/src/Enums.d.ts +0 -356
- package/dist-esm/src/Enums.js.map +0 -1
- package/dist-esm/src/Index.d.ts +0 -19
- package/dist-esm/src/Index.js.map +0 -1
- package/dist-esm/src/InternalConstants.d.ts +0 -6
- package/dist-esm/src/Utils.d.ts +0 -190
- package/dist-esm/src/Utils.js.map +0 -1
- package/dist-esm/src/ValueSanitizer.d.ts +0 -40
- package/dist-esm/src/ValueSanitizer.js.map +0 -1
- package/src/AppInsightsCore.ts +0 -135
- package/src/BaseCore.ts +0 -72
- package/src/DataModels.ts +0 -297
- package/src/ESPromise.ts +0 -365
- package/src/ESPromiseScheduler.ts +0 -328
- package/src/Enums.ts +0 -386
- package/src/Index.ts +0 -81
- package/src/InternalConstants.ts +0 -16
- package/src/Utils.ts +0 -565
- package/src/ValueSanitizer.ts +0 -285
- /package/{dist-esm/src → dist-es5}/DataModels.js.map +0 -0
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESPromiseScheduler.ts
|
|
3
|
-
* @author Nev Wylie (newylie)
|
|
4
|
-
* @copyright Microsoft 2019
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
8
|
-
import ESPromise from "./ESPromise";
|
|
9
|
-
import { IDiagnosticLogger, _warnToConsole, getGlobal } from "@microsoft/applicationinsights-core-js";
|
|
10
|
-
import { ResolverRejectFunc, ResolverResolveFunc } from "./ESPromise";
|
|
11
|
-
|
|
12
|
-
/** This is a default timeout that will cause outstanding running promises to be removed/rejected to avoid filling up memory with blocked events */
|
|
13
|
-
const LazyRejectPeriod = 600000; // 10 Minutes
|
|
14
|
-
|
|
15
|
-
export type ESPromiseSchedulerEvent<T> = (eventId?: string) => ESPromise<T>;
|
|
16
|
-
|
|
17
|
-
export interface IScheduledEventDetails {
|
|
18
|
-
evt: ESPromise<any>;
|
|
19
|
-
tm: number;
|
|
20
|
-
wTm?: number;
|
|
21
|
-
id: string;
|
|
22
|
-
to?: any;
|
|
23
|
-
isRunning: boolean;
|
|
24
|
-
isAborted: boolean;
|
|
25
|
-
abort?: (message: string) => void;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// These are global variables that are shared across ALL instances of the scheduler
|
|
29
|
-
/**
|
|
30
|
-
* @ignore
|
|
31
|
-
*/
|
|
32
|
-
let _schedulerId = 0;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @ignore
|
|
36
|
-
*/
|
|
37
|
-
let _running: IScheduledEventDetails[] = [];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @ignore
|
|
41
|
-
*/
|
|
42
|
-
let _waiting: IScheduledEventDetails[] = [];
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @ignore
|
|
46
|
-
*/
|
|
47
|
-
let _timedOut: IScheduledEventDetails[] = [];
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @ignore
|
|
51
|
-
*/
|
|
52
|
-
function _getTime() {
|
|
53
|
-
return new Date().getTime();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Provides a simple mechanism queueing mechanism for scheduling events based on the ESPromise callbacks, this is used to ensure
|
|
58
|
-
* order of async operations that are required to be executed in a specific order.
|
|
59
|
-
*/
|
|
60
|
-
export default class ESPromiseScheduler {
|
|
61
|
-
|
|
62
|
-
public static incomplete(): IScheduledEventDetails[] {
|
|
63
|
-
return _running;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
public static waitingToStart(): IScheduledEventDetails[] {
|
|
67
|
-
return _waiting;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
constructor(name?: string, diagLog?: IDiagnosticLogger) {
|
|
71
|
-
let _promiseId = 0;
|
|
72
|
-
let _scheduledName = (name || "<unnamed>") + "." + _schedulerId;
|
|
73
|
-
_schedulerId++;
|
|
74
|
-
|
|
75
|
-
dynamicProto(ESPromiseScheduler, this, (_this) => {
|
|
76
|
-
let _lastEvent: IScheduledEventDetails = null;
|
|
77
|
-
let _eventCount = 0;
|
|
78
|
-
|
|
79
|
-
_this.scheduleEvent = <T>(startEventAction: ESPromiseSchedulerEvent<T>, eventName?: string, timeout?: number): ESPromise<T> => {
|
|
80
|
-
let uniqueId: string = _scheduledName + "." + _eventCount;
|
|
81
|
-
_eventCount++;
|
|
82
|
-
if (eventName) {
|
|
83
|
-
uniqueId += "-(" + eventName + ")";
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
let uniqueEventId = uniqueId + "{" + _promiseId + "}";
|
|
87
|
-
_promiseId++;
|
|
88
|
-
|
|
89
|
-
// Create the next scheduled event details
|
|
90
|
-
let newScheduledEvent: IScheduledEventDetails = {
|
|
91
|
-
evt: null,
|
|
92
|
-
tm: _getTime(),
|
|
93
|
-
id: uniqueEventId,
|
|
94
|
-
isRunning: false,
|
|
95
|
-
isAborted: false
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
if (!_lastEvent) {
|
|
99
|
-
// We don't have any currently running event, so just start the next event
|
|
100
|
-
newScheduledEvent.evt = _startWaitingEvent(newScheduledEvent);
|
|
101
|
-
} else {
|
|
102
|
-
// Start a new promise which will wait until all current active events are complete before starting
|
|
103
|
-
// the new event, it does not resolve this scheduled event until after the new event is resolve to
|
|
104
|
-
// ensure that all scheduled events are completed in the correct order
|
|
105
|
-
newScheduledEvent.evt = _waitForPreviousEvent(newScheduledEvent, _lastEvent);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Set this new event as the last one, so that any future events will wait for this one
|
|
109
|
-
_lastEvent = newScheduledEvent;
|
|
110
|
-
(_lastEvent.evt as any)._schId = uniqueEventId;
|
|
111
|
-
|
|
112
|
-
return newScheduledEvent.evt;
|
|
113
|
-
|
|
114
|
-
function _abortAndRemoveOldEvents(eventQueue: IScheduledEventDetails[]) {
|
|
115
|
-
let now = _getTime();
|
|
116
|
-
let expired = now - LazyRejectPeriod;
|
|
117
|
-
let len = eventQueue.length;
|
|
118
|
-
let lp = 0;
|
|
119
|
-
while (lp < len) {
|
|
120
|
-
let evt = eventQueue[lp];
|
|
121
|
-
if (evt && evt.tm < expired) {
|
|
122
|
-
let message = null;
|
|
123
|
-
if (evt.abort) {
|
|
124
|
-
message = "Aborting [" + evt.id + "] due to Excessive runtime (" + (now - evt.tm) + " ms)";
|
|
125
|
-
evt.abort(message);
|
|
126
|
-
} else {
|
|
127
|
-
message = "Removing [" + evt.id + "] due to Excessive runtime (" + (now - evt.tm) + " ms)";
|
|
128
|
-
}
|
|
129
|
-
_warnLog(message);
|
|
130
|
-
eventQueue.splice(lp, 1);
|
|
131
|
-
len--;
|
|
132
|
-
} else {
|
|
133
|
-
lp++;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function _cleanup(eventId: string, completed: boolean) {
|
|
139
|
-
let toQueue = false;
|
|
140
|
-
let removed = _removeQueuedEvent(_running, eventId);
|
|
141
|
-
if (!removed) {
|
|
142
|
-
removed = _removeQueuedEvent(_timedOut, eventId);
|
|
143
|
-
toQueue = true;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (removed) {
|
|
147
|
-
if (removed.to) {
|
|
148
|
-
// If there was a timeout stop it
|
|
149
|
-
clearTimeout(removed.to);
|
|
150
|
-
removed.to = null;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// TODO (newylie): Convert this into reportable metrics
|
|
154
|
-
let tm = _getTime() - removed.tm;
|
|
155
|
-
if (completed) {
|
|
156
|
-
if (!toQueue) {
|
|
157
|
-
_debugLog("Promise [" + eventId + "] Complete -- " + tm + " ms");
|
|
158
|
-
} else {
|
|
159
|
-
_warnLog("Timed out event [" + eventId + "] finally complete -- " + tm + " ms");
|
|
160
|
-
}
|
|
161
|
-
} else {
|
|
162
|
-
_timedOut.push(removed);
|
|
163
|
-
_warnLog("Event [" + eventId + "] Timed out and removed -- " + tm + " ms");
|
|
164
|
-
}
|
|
165
|
-
} else {
|
|
166
|
-
_debugLog("Failed to remove [" + eventId + "] from running queue");
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Also if the last scheduled event was this event then clear it as we are now finished
|
|
170
|
-
if (_lastEvent && _lastEvent.id === eventId) {
|
|
171
|
-
_lastEvent = null;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
_abortAndRemoveOldEvents(_running);
|
|
175
|
-
_abortAndRemoveOldEvents(_waiting);
|
|
176
|
-
_abortAndRemoveOldEvents(_timedOut);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Return a callback function that will be called when the waiting promise is resolved or rejected to ensure
|
|
180
|
-
// that any outer promise is also resolved or rejected
|
|
181
|
-
function _removeScheduledEvent(eventId: string, callback?: (value: any) => void) {
|
|
182
|
-
return (value: any) => {
|
|
183
|
-
_cleanup(eventId, true);
|
|
184
|
-
callback && callback(value);
|
|
185
|
-
|
|
186
|
-
return value;
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
function _waitForFinalResult(eventId: string, startResult: ESPromise<T>, schEventResolve: ResolverResolveFunc<T>, schEventReject: ResolverRejectFunc<T>) {
|
|
191
|
-
startResult.then((value) => {
|
|
192
|
-
if (value instanceof ESPromise) {
|
|
193
|
-
// If the result is a promise then this appears to be a chained result, so wait for this promise to complete
|
|
194
|
-
_debugLog("Event [" + eventId + "] returned a promise -- waiting");
|
|
195
|
-
_waitForFinalResult(eventId, value, schEventResolve, schEventReject);
|
|
196
|
-
return value;
|
|
197
|
-
} else {
|
|
198
|
-
return _removeScheduledEvent(eventId, schEventResolve)(value);
|
|
199
|
-
}
|
|
200
|
-
}, _removeScheduledEvent(eventId, schEventReject));
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Add the passed event to the active event list with resolve and reject callbacks that will remove
|
|
204
|
-
// it from the active event list
|
|
205
|
-
function _createScheduledEvent(eventDetails: IScheduledEventDetails, startEvent: ESPromiseSchedulerEvent<T>): ESPromise<T> {
|
|
206
|
-
let eventId = eventDetails.id;
|
|
207
|
-
return new ESPromise((schEventResolve, schEventReject) => {
|
|
208
|
-
_debugLog("Event [" + eventId + "] Starting -- waited for " + (eventDetails.wTm || "--") + " ms");
|
|
209
|
-
eventDetails.isRunning = true;
|
|
210
|
-
eventDetails.abort = (message: string) => {
|
|
211
|
-
eventDetails.abort = null;
|
|
212
|
-
eventDetails.isAborted = true;
|
|
213
|
-
_cleanup(eventId, false);
|
|
214
|
-
schEventReject(new Error(message));
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
let startResult = startEvent(eventId);
|
|
218
|
-
if (startResult instanceof ESPromise) {
|
|
219
|
-
if (timeout) {
|
|
220
|
-
// Note: Only starting a timer if a timeout was specified
|
|
221
|
-
eventDetails.to = setTimeout(() => {
|
|
222
|
-
_cleanup(eventId, false);
|
|
223
|
-
|
|
224
|
-
// Cause the listeners to reject (Note: We can't actually reject the waiting event)
|
|
225
|
-
schEventReject(new Error("Timed out after [" + timeout + "] ms"));
|
|
226
|
-
}, timeout);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
_waitForFinalResult(eventId, startResult, (theResult) => {
|
|
230
|
-
_debugLog("Event [" + eventId + "] Resolving after " + (_getTime() - eventDetails.tm) + " ms");
|
|
231
|
-
schEventResolve(theResult);
|
|
232
|
-
}, schEventReject);
|
|
233
|
-
} else {
|
|
234
|
-
// The startEvent didn't return a promise so just return a resolved promise
|
|
235
|
-
_debugLog("Promise [" + eventId + "] Auto completed as the start action did not return a promise");
|
|
236
|
-
schEventResolve();
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
function _startWaitingEvent(eventDetails: IScheduledEventDetails): ESPromise<T> {
|
|
242
|
-
let now = _getTime();
|
|
243
|
-
eventDetails.wTm = now - eventDetails.tm;
|
|
244
|
-
eventDetails.tm = now;
|
|
245
|
-
|
|
246
|
-
if (eventDetails.isAborted) {
|
|
247
|
-
return ESPromise.reject<T>(new Error("[" + uniqueId + "] was aborted"));
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
_running.push(eventDetails);
|
|
251
|
-
|
|
252
|
-
return _createScheduledEvent(eventDetails, startEventAction);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Start a new promise which will wait until all current active events are complete before starting
|
|
256
|
-
// the new event, it does not resolve this scheduled event until after the new event is resolve to
|
|
257
|
-
// ensure that all scheduled events are completed in the correct order
|
|
258
|
-
function _waitForPreviousEvent(eventDetails: IScheduledEventDetails, waitForEvent: IScheduledEventDetails): ESPromise<T> {
|
|
259
|
-
let waitEvent = new ESPromise<T>((waitResolve, waitReject) => {
|
|
260
|
-
let runTime = _getTime() - waitForEvent.tm;
|
|
261
|
-
let prevId = waitForEvent.id;
|
|
262
|
-
_debugLog("[" + uniqueId + "] is waiting for [" + prevId + ":" + runTime + " ms] to complete before starting -- [" + _waiting.length + "] waiting and [" + _running.length + "] running");
|
|
263
|
-
|
|
264
|
-
eventDetails.abort = (message: string) => {
|
|
265
|
-
eventDetails.abort = null;
|
|
266
|
-
_removeQueuedEvent(_waiting, uniqueId);
|
|
267
|
-
eventDetails.isAborted = true;
|
|
268
|
-
waitReject(new Error(message));
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
// Wait for the previous event to complete
|
|
272
|
-
waitForEvent.evt.then((value) => {
|
|
273
|
-
_removeQueuedEvent(_waiting, uniqueId);
|
|
274
|
-
// Wait for the last event to complete before starting the new one, this ensures the execution
|
|
275
|
-
// order so that we don't try and remove events that havn't been committed yet
|
|
276
|
-
_startWaitingEvent(eventDetails).then(waitResolve, waitReject);
|
|
277
|
-
}, (reason) => {
|
|
278
|
-
_removeQueuedEvent(_waiting, uniqueId);
|
|
279
|
-
// Wait for the last event to complete before starting the new one, this ensures the execution
|
|
280
|
-
// order so that we don't try and remove events that havn't been committed yet
|
|
281
|
-
_startWaitingEvent(eventDetails).then(waitResolve, waitReject);
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
_waiting.push(eventDetails);
|
|
286
|
-
|
|
287
|
-
return waitEvent;
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
function _removeQueuedEvent(queue: IScheduledEventDetails[], eventId: string): IScheduledEventDetails|void {
|
|
292
|
-
for (let lp = 0; lp < queue.length; lp++) {
|
|
293
|
-
if (queue[lp].id === eventId) {
|
|
294
|
-
return queue.splice(lp, 1)[0];
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
function _debugLog(message: string) {
|
|
303
|
-
// Only log if running within test harness
|
|
304
|
-
let global = getGlobal();
|
|
305
|
-
if (global && global["QUnit"]) {
|
|
306
|
-
// tslint:disable-next-line:no-console
|
|
307
|
-
console && console.log("ESPromiseScheduler[" + _scheduledName + "] " + message);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
function _warnLog(message: string) {
|
|
312
|
-
_warnToConsole(diagLog, "ESPromiseScheduler[" + _scheduledName + "] " + message);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Schedule an event that will execute the startEvent after all outstanding events are resolved or rejected. This is used to ensure
|
|
318
|
-
* order of async operations that are required to be executed in a specific order.
|
|
319
|
-
* The returned promise will be resolve or rejected based on the values returned from the doAction.
|
|
320
|
-
* @param startEventAction The function to execute to start the event after all outstanding events have completed, will be called asynchronously.
|
|
321
|
-
* @param eventName An [Optional] event name to assist with debbuging to understand what events are either waiting to start or still running (incomplete).
|
|
322
|
-
* @param timeout An [Optional] timeout
|
|
323
|
-
*/
|
|
324
|
-
public scheduleEvent<T>(startEventAction: ESPromiseSchedulerEvent<T>, eventName?: string, timeout?: number): ESPromise<T> {
|
|
325
|
-
// @DynamicProtoStub - DO NOT add any code as this will be removed during packaging
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
}
|