1 | import { isProxyable, wrap } from '../wrap.js';
|
2 | import { instrumentDOBinding } from './do.js';
|
3 | import { instrumentKV } from './kv.js';
|
4 | import { instrumentQueueSender } from './queue.js';
|
5 | import { instrumentServiceBinding } from './service.js';
|
6 | import { instrumentAnalyticsEngineDataset } from './analytics-engine';
|
7 | const isKVNamespace = (item) => {
|
8 | return !!item?.getWithMetadata;
|
9 | };
|
10 | const isQueue = (item) => {
|
11 | return !!item?.sendBatch;
|
12 | };
|
13 | const isDurableObject = (item) => {
|
14 | return !!item?.idFromName;
|
15 | };
|
16 | const isServiceBinding = (item) => {
|
17 | const binding = item;
|
18 | return !!binding.connect || !!binding.fetch || binding.queue || binding.scheduled;
|
19 | };
|
20 | const isAnalyticsEngineDataset = (item) => {
|
21 | return !!item?.writeDataPoint;
|
22 | };
|
23 | const instrumentEnv = (env) => {
|
24 | const envHandler = {
|
25 | get: (target, prop, receiver) => {
|
26 | const item = Reflect.get(target, prop, receiver);
|
27 | if (!isProxyable(item)) {
|
28 | return item;
|
29 | }
|
30 | if (isKVNamespace(item)) {
|
31 | return instrumentKV(item, String(prop));
|
32 | }
|
33 | else if (isQueue(item)) {
|
34 | return instrumentQueueSender(item, String(prop));
|
35 | }
|
36 | else if (isDurableObject(item)) {
|
37 | return instrumentDOBinding(item, String(prop));
|
38 | }
|
39 | else if (isServiceBinding(item)) {
|
40 | return instrumentServiceBinding(item, String(prop));
|
41 | }
|
42 | else if (isAnalyticsEngineDataset(item)) {
|
43 | return instrumentAnalyticsEngineDataset(item, String(prop));
|
44 | }
|
45 | else {
|
46 | return item;
|
47 | }
|
48 | },
|
49 | };
|
50 | return wrap(env, envHandler);
|
51 | };
|
52 | export { instrumentEnv };
|
53 |
|
\ | No newline at end of file |