@arcgis/toolkit 5.0.0-next.87 → 5.0.0-next.89
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/log/index.cjs +23 -2
- package/dist/log/index.d.cts +14 -7
- package/dist/log/index.d.ts +14 -7
- package/dist/log/index.js +23 -2
- package/package.json +1 -1
package/dist/log/index.cjs
CHANGED
|
@@ -26,8 +26,29 @@ const log = (level, context, message, options) => {
|
|
|
26
26
|
}
|
|
27
27
|
loggedMessages.add(key);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
let memorySafeDetail;
|
|
30
|
+
if (options?.detail) {
|
|
31
|
+
memorySafeDetail = {};
|
|
32
|
+
for (const [key, value] of Object.entries(options.detail)) {
|
|
33
|
+
if ((typeof value === "object" || typeof value === "function") && value !== null) {
|
|
34
|
+
const weakRefValue = new WeakRef(value);
|
|
35
|
+
Object.defineProperty(memorySafeDetail, key, {
|
|
36
|
+
get() {
|
|
37
|
+
return weakRefValue.deref();
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
} else {
|
|
41
|
+
memorySafeDetail[key] = value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
esriConfig?.log.interceptors?.forEach(
|
|
45
|
+
(interceptor) => interceptor(level, contextString, message, memorySafeDetail)
|
|
46
|
+
);
|
|
47
|
+
console[level](`[${contextString}]`, message, memorySafeDetail);
|
|
48
|
+
} else {
|
|
49
|
+
esriConfig?.log.interceptors?.forEach((interceptor) => interceptor(level, contextString, message));
|
|
50
|
+
console[level](`[${contextString}]`, message);
|
|
51
|
+
}
|
|
31
52
|
};
|
|
32
53
|
const composeMissingPropertyMessage = (property) => (
|
|
33
54
|
//#endregion composeMissingPropertyMessage
|
package/dist/log/index.d.cts
CHANGED
|
@@ -11,8 +11,10 @@ type AccessorLike = {
|
|
|
11
11
|
};
|
|
12
12
|
export type LogContext = AccessorLike | CustomElementLike | string;
|
|
13
13
|
type LogOptions = {
|
|
14
|
-
/** Whether the message should only be logged once */
|
|
14
|
+
/** Whether the message should only be logged once. */
|
|
15
15
|
once?: boolean;
|
|
16
|
+
/** Additional objects to log after `message`. Use this to avoid memory leaks when logging objects to the console. Each object value will be automatically wrapped in a `WeakRef` before logging so it can be garbage-collected. */
|
|
17
|
+
detail?: Record<string, unknown>;
|
|
16
18
|
};
|
|
17
19
|
type EsriConfig = {
|
|
18
20
|
log: {
|
|
@@ -47,14 +49,19 @@ export declare const setEsriConfig: (config: EsriConfig) => void;
|
|
|
47
49
|
*
|
|
48
50
|
* @example
|
|
49
51
|
* ```ts
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* once: true, // only log this message once
|
|
53
|
-
* }
|
|
54
|
-
* );
|
|
52
|
+
* // Basic usage
|
|
53
|
+
* log("error", this, "message to log");
|
|
55
54
|
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Optional usage
|
|
59
|
+
* log("warn", this, "message to log", {
|
|
60
|
+
* once: true,
|
|
61
|
+
* detail: { object1, object2 }
|
|
62
|
+
* });
|
|
56
63
|
*/
|
|
57
|
-
export declare const log: (level: LogLevel, context: LogContext, message:
|
|
64
|
+
export declare const log: (level: LogLevel, context: LogContext, message: string, options?: LogOptions) => void;
|
|
58
65
|
type LogContextOrObject = Exclude<LogContext, string> | object;
|
|
59
66
|
type InferPropertyType<T extends LogContextOrObject> = [object] extends [T] ? string : keyof T;
|
|
60
67
|
/**
|
package/dist/log/index.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ type AccessorLike = {
|
|
|
11
11
|
};
|
|
12
12
|
export type LogContext = AccessorLike | CustomElementLike | string;
|
|
13
13
|
type LogOptions = {
|
|
14
|
-
/** Whether the message should only be logged once */
|
|
14
|
+
/** Whether the message should only be logged once. */
|
|
15
15
|
once?: boolean;
|
|
16
|
+
/** Additional objects to log after `message`. Use this to avoid memory leaks when logging objects to the console. Each object value will be automatically wrapped in a `WeakRef` before logging so it can be garbage-collected. */
|
|
17
|
+
detail?: Record<string, unknown>;
|
|
16
18
|
};
|
|
17
19
|
type EsriConfig = {
|
|
18
20
|
log: {
|
|
@@ -47,14 +49,19 @@ export declare const setEsriConfig: (config: EsriConfig) => void;
|
|
|
47
49
|
*
|
|
48
50
|
* @example
|
|
49
51
|
* ```ts
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* once: true, // only log this message once
|
|
53
|
-
* }
|
|
54
|
-
* );
|
|
52
|
+
* // Basic usage
|
|
53
|
+
* log("error", this, "message to log");
|
|
55
54
|
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Optional usage
|
|
59
|
+
* log("warn", this, "message to log", {
|
|
60
|
+
* once: true,
|
|
61
|
+
* detail: { object1, object2 }
|
|
62
|
+
* });
|
|
56
63
|
*/
|
|
57
|
-
export declare const log: (level: LogLevel, context: LogContext, message:
|
|
64
|
+
export declare const log: (level: LogLevel, context: LogContext, message: string, options?: LogOptions) => void;
|
|
58
65
|
type LogContextOrObject = Exclude<LogContext, string> | object;
|
|
59
66
|
type InferPropertyType<T extends LogContextOrObject> = [object] extends [T] ? string : keyof T;
|
|
60
67
|
/**
|
package/dist/log/index.js
CHANGED
|
@@ -24,8 +24,29 @@ const log = (level, context, message, options) => {
|
|
|
24
24
|
}
|
|
25
25
|
loggedMessages.add(key);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
let memorySafeDetail;
|
|
28
|
+
if (options?.detail) {
|
|
29
|
+
memorySafeDetail = {};
|
|
30
|
+
for (const [key, value] of Object.entries(options.detail)) {
|
|
31
|
+
if ((typeof value === "object" || typeof value === "function") && value !== null) {
|
|
32
|
+
const weakRefValue = new WeakRef(value);
|
|
33
|
+
Object.defineProperty(memorySafeDetail, key, {
|
|
34
|
+
get() {
|
|
35
|
+
return weakRefValue.deref();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
memorySafeDetail[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
esriConfig?.log.interceptors?.forEach(
|
|
43
|
+
(interceptor) => interceptor(level, contextString, message, memorySafeDetail)
|
|
44
|
+
);
|
|
45
|
+
console[level](`[${contextString}]`, message, memorySafeDetail);
|
|
46
|
+
} else {
|
|
47
|
+
esriConfig?.log.interceptors?.forEach((interceptor) => interceptor(level, contextString, message));
|
|
48
|
+
console[level](`[${contextString}]`, message);
|
|
49
|
+
}
|
|
29
50
|
};
|
|
30
51
|
const composeMissingPropertyMessage = (property) => (
|
|
31
52
|
//#endregion composeMissingPropertyMessage
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcgis/toolkit",
|
|
3
|
-
"version": "5.0.0-next.
|
|
3
|
+
"version": "5.0.0-next.89",
|
|
4
4
|
"description": "Collection of common internal patterns and utilities for ArcGIS Maps SDK for JavaScript components.",
|
|
5
5
|
"homepage": "https://developers.arcgis.com/javascript/latest/",
|
|
6
6
|
"sideEffects": false,
|