@andrew_l/service-actor 0.3.22 → 0.4.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/dist/index.d.mts CHANGED
@@ -1,18 +1,17 @@
1
- import { OverwriteWith, AnyFunction } from '@andrew_l/toolkit';
2
-
1
+ import { AnyFunction, OverwriteWith } from "@andrew_l/toolkit";
3
2
  type AnyServiceActor = {
4
- traceId: any;
5
- actorId: any;
6
- actorType: any;
7
- [x: PropertyKey]: any;
3
+ traceId: any;
4
+ actorId: any;
5
+ actorType: any;
6
+ [x: PropertyKey]: any;
8
7
  };
9
8
  type ServiceActorData<T extends Record<PropertyKey, any> = {}> = OverwriteWith<{
10
- traceId: string;
11
- actorId: string | null;
12
- actorType: 'unknown' | string;
9
+ traceId: string;
10
+ actorId: string | null;
11
+ actorType: 'unknown' | string;
13
12
  }, T>;
14
13
  type ServiceActor<T extends Record<PropertyKey, any> = {}> = ServiceActorData<T> & {
15
- assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;
14
+ assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;
16
15
  };
17
16
  /**
18
17
  * Create service actor hooks
@@ -43,18 +42,18 @@ type ServiceActor<T extends Record<PropertyKey, any> = {}> = ServiceActorData<T>
43
42
  * @group Main
44
43
  */
45
44
  declare function serviceActor<T extends Record<PropertyKey, any> = {}>(factory?: () => T): {
46
- /**
47
- * Wrap a function to execute it with service actor providers
48
- */
49
- with: <Fn extends AnyFunction>(fn: Fn, params?: Partial<ServiceActor<T>>) => Fn;
50
- /**
51
- * Returns the service actor instance from the current context.
52
- */
53
- inject: () => ServiceActor<T> | undefined;
54
- /**
55
- * Returns the service actor instance from the context, or creates and binds a new instance if none exists.
56
- */
57
- use: () => ServiceActor<T>;
45
+ /**
46
+ * Wrap a function to execute it with service actor providers
47
+ */
48
+ with: <Fn extends AnyFunction>(fn: Fn, params?: Partial<ServiceActor<T>>) => Fn;
49
+ /**
50
+ * Returns the service actor instance from the current context.
51
+ */
52
+ inject: () => ServiceActor<T> | undefined;
53
+ /**
54
+ * Returns the service actor instance from the context, or creates and binds a new instance if none exists.
55
+ */
56
+ use: () => ServiceActor<T>;
58
57
  };
59
-
60
- export { type AnyServiceActor, type ServiceActor, type ServiceActorData, serviceActor };
58
+ export { AnyServiceActor, ServiceActor, ServiceActorData, serviceActor };
59
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":["traceId","actorId","actorType","PropertyKey","x","T","Record","OverwriteWith","ServiceActorData","assign","Partial","params","ServiceActor","factory","with","Fn","AnyFunction","fn","inject","use"],"sources":["../src/index.d.ts"],"mappings":";KACY,eAAA;EACRA,OAAAA;EACAC,OAAAA;EACAC,SAAAA;EAAAA,CACCE,CAAAA,EAAG,WAAW;AAAA;AAAA,KAEP,gBAAA,WAA2B,MAAA,CAAO,WAAA,eAA0B,aAAA;EACpEJ,OAAAA;EACAC,OAAAA;EACAC,SAAAA;AAAAA,GACD,CAAA;AAAA,KACS,YAAA,WAAuB,MAAA,CAAO,WAAA,eAA0B,gBAAA,CAAiB,CAAA;EACjFO,MAAAA,CAAOE,MAAAA,EAAQ,OAAA,CAAQ,gBAAA,CAAiB,CAAA,KAAM,YAAA,CAAa,CAAA;AAAA;;;;;;;;;;;;;;;;;AAF3D;AACJ;;;;;;;;;;;iBA+BwB,YAAA,WAAuB,MAAA,CAAO,WAAA,aAAwBE,OAAAA,SAAgB,CAAA;EA9BhC;;;EAkC1DC,IAAAA,cAAkB,WAAA,EAAaG,EAAAA,EAAI,EAAA,EAAIN,MAAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,CAAA,OAAQ,EAAA;EAnCvCR;;;EAuCtCe,MAAAA,QAAc,YAAA,CAAa,CAAA;EAtCZR;;;EA0CfS,GAAAA,QAAW,YAAA,CAAa,CAAA;AAAA"}
package/dist/index.mjs CHANGED
@@ -1,125 +1,106 @@
1
- import { withContext, inject, provide, hasInjectionContext } from '@andrew_l/context';
2
- import { isFunction } from '@andrew_l/toolkit';
3
-
1
+ import { hasInjectionContext, inject, provide, withContext } from "@andrew_l/context";
2
+ import { isFunction } from "@andrew_l/toolkit";
4
3
  var SYM_MARKER = Symbol();
5
4
  var SYM_RAW = Symbol();
6
5
  var SYM_DATA = Symbol();
7
6
  var SYM_API = Symbol();
8
7
  function serviceActor(factory) {
9
- var injectKey = Symbol();
10
- var idSeq = 0;
11
- var createActor = () => {
12
- var actor = createServiceActor();
13
- actor.traceId = `trace-${++idSeq}`;
14
- if (factory) {
15
- actor.assign(factory());
16
- }
17
- return actor;
18
- };
19
- var withHook = (fn, params) => {
20
- return withContext(function(...args) {
21
- var parentActor = inject(injectKey);
22
- var actor = createActor();
23
- if (parentActor) {
24
- actor.assign(parentActor);
25
- }
26
- if (params) {
27
- actor.assign(params);
28
- }
29
- provide(injectKey, actor);
30
- return fn.apply(this, args);
31
- });
32
- };
33
- var injectHook = () => {
34
- return hasInjectionContext() ? inject(injectKey) : void 0;
35
- };
36
- var useHok = () => {
37
- var _actor;
38
- if (!hasInjectionContext()) {
39
- _actor = createActor();
40
- provide(injectKey, _actor, true);
41
- return _actor;
42
- }
43
- _actor = inject(injectKey);
44
- if (_actor) return _actor;
45
- _actor = createActor();
46
- provide(injectKey, _actor);
47
- return _actor;
48
- };
49
- return { with: withHook, use: useHok, inject: injectHook };
8
+ var injectKey = Symbol();
9
+ var idSeq = 0;
10
+ var createActor = () => {
11
+ var actor = createServiceActor();
12
+ actor.traceId = `trace-${++idSeq}`;
13
+ if (factory) actor.assign(factory());
14
+ return actor;
15
+ };
16
+ var withHook = (fn, params) => {
17
+ return withContext(function(...args) {
18
+ var parentActor = inject(injectKey);
19
+ var actor = createActor();
20
+ if (parentActor) actor.assign(parentActor);
21
+ if (params) actor.assign(params);
22
+ provide(injectKey, actor);
23
+ return fn.apply(this, args);
24
+ });
25
+ };
26
+ var injectHook = () => {
27
+ return hasInjectionContext() ? inject(injectKey) : void 0;
28
+ };
29
+ var useHok = () => {
30
+ var _actor;
31
+ if (!hasInjectionContext()) {
32
+ _actor = createActor();
33
+ provide(injectKey, _actor, true);
34
+ return _actor;
35
+ }
36
+ _actor = inject(injectKey);
37
+ if (_actor) return _actor;
38
+ _actor = createActor();
39
+ provide(injectKey, _actor);
40
+ return _actor;
41
+ };
42
+ return {
43
+ with: withHook,
44
+ use: useHok,
45
+ inject: injectHook
46
+ };
50
47
  }
51
48
  function createServiceActor() {
52
- var actor = {
53
- traceId: "",
54
- actorId: null,
55
- actorType: "unknown",
56
- [SYM_API]: {
57
- assign
58
- },
59
- [SYM_DATA]: {},
60
- [SYM_RAW]: null,
61
- [SYM_MARKER]: true
62
- };
63
- var reservedKeys = new Set(Object.keys(actor));
64
- actor[SYM_RAW] = actor;
65
- var newProxy = new Proxy(actor[SYM_DATA], {
66
- defineProperty(target, key, value) {
67
- if (key in actor) {
68
- actor[key] = value;
69
- } else {
70
- target[key] = value;
71
- }
72
- return true;
73
- },
74
- deleteProperty(target, key) {
75
- if (key in actor) {
76
- delete actor[key];
77
- } else {
78
- delete target[key];
79
- }
80
- return true;
81
- },
82
- has(target, key) {
83
- return key in actor || key in target;
84
- },
85
- ownKeys(target) {
86
- return [...reservedKeys, ...Object.keys(target)];
87
- },
88
- set: function(target, key, value) {
89
- if (key in actor[SYM_API]) return false;
90
- if (key in actor) {
91
- Reflect.set(actor, key, value);
92
- } else if (isFunction(value)) {
93
- Reflect.set(actor[SYM_API], key, value);
94
- } else {
95
- Reflect.set(target, key, value);
96
- }
97
- return true;
98
- },
99
- get: (target, key) => {
100
- var value;
101
- if (key in actor) {
102
- value = Reflect.get(actor, key, value);
103
- } else if (key in actor[SYM_API]) {
104
- value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);
105
- } else {
106
- value = Reflect.get(target, key);
107
- }
108
- return value;
109
- },
110
- getOwnPropertyDescriptor(k) {
111
- return {
112
- enumerable: true,
113
- configurable: true
114
- };
115
- }
116
- });
117
- return newProxy;
49
+ var actor = {
50
+ traceId: "",
51
+ actorId: null,
52
+ actorType: "unknown",
53
+ [SYM_API]: { assign },
54
+ [SYM_DATA]: {},
55
+ [SYM_RAW]: null,
56
+ [SYM_MARKER]: true
57
+ };
58
+ var reservedKeys = new Set(Object.keys(actor));
59
+ actor[SYM_RAW] = actor;
60
+ var newProxy = new Proxy(actor[SYM_DATA], {
61
+ defineProperty(target, key, value) {
62
+ if (key in actor) actor[key] = value;
63
+ else target[key] = value;
64
+ return true;
65
+ },
66
+ deleteProperty(target, key) {
67
+ if (key in actor) delete actor[key];
68
+ else delete target[key];
69
+ return true;
70
+ },
71
+ has(target, key) {
72
+ return key in actor || key in target;
73
+ },
74
+ ownKeys(target) {
75
+ return [...reservedKeys, ...Object.keys(target)];
76
+ },
77
+ set: function(target, key, value) {
78
+ if (key in actor[SYM_API]) return false;
79
+ if (key in actor) Reflect.set(actor, key, value);
80
+ else if (isFunction(value)) Reflect.set(actor[SYM_API], key, value);
81
+ else Reflect.set(target, key, value);
82
+ return true;
83
+ },
84
+ get: (target, key) => {
85
+ var value;
86
+ if (key in actor) value = Reflect.get(actor, key, value);
87
+ else if (key in actor[SYM_API]) value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);
88
+ else value = Reflect.get(target, key);
89
+ return value;
90
+ },
91
+ getOwnPropertyDescriptor(k) {
92
+ return {
93
+ enumerable: true,
94
+ configurable: true
95
+ };
96
+ }
97
+ });
98
+ return newProxy;
118
99
  }
119
100
  function assign(params) {
120
- Object.assign(this, params);
121
- return this;
101
+ Object.assign(this, params);
102
+ return this;
122
103
  }
123
-
124
104
  export { serviceActor };
125
- //# sourceMappingURL=index.mjs.map
105
+
106
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import {\n hasInjectionContext,\n inject,\n provide,\n withContext,\n} from '@andrew_l/context';\nimport {\n type AnyFunction,\n type OverwriteWith,\n isFunction,\n} from '@andrew_l/toolkit';\n\ntype ServiceActorInternal = {\n traceId: unknown;\n actorId: unknown;\n actorType: unknown;\n [SYM_API]: Record<PropertyKey, Function>;\n [SYM_MARKER]: boolean;\n [SYM_RAW]: any;\n [SYM_DATA]: Record<PropertyKey, unknown>;\n};\n\nexport type AnyServiceActor = {\n traceId: any;\n actorId: any;\n actorType: any;\n [x: PropertyKey]: any;\n};\n\nexport type ServiceActorData<T extends Record<PropertyKey, any> = {}> =\n OverwriteWith<\n {\n traceId: string;\n actorId: string | null;\n actorType: 'unknown' | string;\n },\n T\n >;\n\nexport type ServiceActor<T extends Record<PropertyKey, any> = {}> =\n ServiceActorData<T> & {\n assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;\n };\n\nvar SYM_MARKER = Symbol();\nvar SYM_RAW = Symbol();\nvar SYM_DATA = Symbol();\nvar SYM_API = Symbol();\n\n/**\n * Create service actor hooks\n *\n * @example\n * const { use: useServiceActor, with: withServiceActor } = serviceActor(() => ({\n * actorType: 'http-request',\n * ipAddress: '',\n * }));\n *\n * app.use((ctx, next) => {\n * return withServiceActor(\n * {\n * traceId: ctx.headers['x-request-id'],\n * ipAddress: ctx.headers['x-forwarded-for'],\n * },\n * next,\n * );\n * });\n *\n * app.get('/', () => {\n * const actor = useServiceActor();\n *\n * // { traceId: 'req_35123', actorId: null, actorType: 'http-request', ipAddress: '::' }\n * console.log(actor);\n * });\n *\n * @group Main\n */\nexport function serviceActor<T extends Record<PropertyKey, any> = {}>(\n factory?: () => T,\n): {\n /**\n * Wrap a function to execute it with service actor providers\n */\n with: <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ) => Fn;\n\n /**\n * Returns the service actor instance from the current context.\n */\n inject: () => ServiceActor<T> | undefined;\n\n /**\n * Returns the service actor instance from the context, or creates and binds a new instance if none exists.\n */\n use: () => ServiceActor<T>;\n} {\n var injectKey = Symbol();\n var idSeq = 0;\n\n var createActor = (): AnyServiceActor => {\n var actor = createServiceActor();\n\n actor.traceId = `trace-${++idSeq}`;\n\n if (factory) {\n actor.assign(factory());\n }\n\n return actor;\n };\n\n var withHook = <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ): Fn => {\n return withContext(function (this: any, ...args: any[]) {\n var parentActor = inject<ServiceActor>(injectKey);\n var actor = createActor();\n\n if (parentActor) {\n actor.assign(parentActor);\n }\n\n if (params) {\n actor.assign(params);\n }\n\n provide(injectKey, actor);\n\n return fn.apply(this, args);\n }) as Fn;\n };\n\n var injectHook = (): AnyServiceActor | undefined => {\n return hasInjectionContext() ? inject<ServiceActor>(injectKey) : undefined;\n };\n\n var useHok = (): AnyServiceActor => {\n var _actor: AnyServiceActor | undefined;\n\n if (!hasInjectionContext()) {\n _actor = createActor();\n provide(injectKey, _actor, true);\n\n return _actor;\n }\n\n // check for existed\n _actor = inject<AnyServiceActor>(injectKey);\n\n if (_actor) return _actor;\n\n _actor = createActor();\n provide(injectKey, _actor);\n\n return _actor;\n };\n\n return { with: withHook, use: useHok as any, inject: injectHook as any };\n}\n\nfunction createServiceActor(): ServiceActor {\n var actor: ServiceActorInternal = {\n traceId: '',\n actorId: null,\n actorType: 'unknown',\n [SYM_API]: {\n assign,\n },\n [SYM_DATA]: {},\n [SYM_RAW]: null,\n [SYM_MARKER]: true,\n };\n\n var reservedKeys = new Set(Object.keys(actor));\n\n actor[SYM_RAW] = actor;\n\n var newProxy = new Proxy(actor[SYM_DATA], {\n defineProperty(target, key, value) {\n if (key in actor) {\n (actor as any)[key] = value;\n } else {\n target[key] = value;\n }\n\n return true;\n },\n deleteProperty(target, key) {\n if (key in actor) {\n delete (actor as any)[key];\n } else {\n delete target[key];\n }\n\n return true;\n },\n has(target, key) {\n return key in actor || key in target;\n },\n ownKeys(target) {\n return [...reservedKeys, ...Object.keys(target)];\n },\n set: function (target, key, value) {\n if (key in actor[SYM_API]) return false;\n\n if (key in actor) {\n Reflect.set(actor, key, value);\n } else if (isFunction(value)) {\n Reflect.set(actor[SYM_API], key, value);\n } else {\n Reflect.set(target, key, value);\n }\n\n return true;\n },\n get: (target, key) => {\n var value: any;\n\n if (key in actor) {\n value = Reflect.get(actor, key, value);\n } else if (key in actor[SYM_API]) {\n value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);\n } else {\n value = Reflect.get(target, key);\n }\n\n return value;\n },\n getOwnPropertyDescriptor(k) {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n });\n\n return newProxy as ServiceActor;\n}\n\nfunction assign(this: ServiceActor, params: Record<any, any>) {\n Object.assign(this, params);\n return this;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n hasInjectionContext,\n inject,\n provide,\n withContext,\n} from '@andrew_l/context';\nimport {\n type AnyFunction,\n type OverwriteWith,\n isFunction,\n} from '@andrew_l/toolkit';\n\ntype ServiceActorInternal = {\n traceId: unknown;\n actorId: unknown;\n actorType: unknown;\n [SYM_API]: Record<PropertyKey, Function>;\n [SYM_MARKER]: boolean;\n [SYM_RAW]: any;\n [SYM_DATA]: Record<PropertyKey, unknown>;\n};\n\nexport type AnyServiceActor = {\n traceId: any;\n actorId: any;\n actorType: any;\n [x: PropertyKey]: any;\n};\n\nexport type ServiceActorData<T extends Record<PropertyKey, any> = {}> =\n OverwriteWith<\n {\n traceId: string;\n actorId: string | null;\n actorType: 'unknown' | string;\n },\n T\n >;\n\nexport type ServiceActor<T extends Record<PropertyKey, any> = {}> =\n ServiceActorData<T> & {\n assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;\n };\n\nvar SYM_MARKER = Symbol();\nvar SYM_RAW = Symbol();\nvar SYM_DATA = Symbol();\nvar SYM_API = Symbol();\n\n/**\n * Create service actor hooks\n *\n * @example\n * const { use: useServiceActor, with: withServiceActor } = serviceActor(() => ({\n * actorType: 'http-request',\n * ipAddress: '',\n * }));\n *\n * app.use((ctx, next) => {\n * return withServiceActor(\n * {\n * traceId: ctx.headers['x-request-id'],\n * ipAddress: ctx.headers['x-forwarded-for'],\n * },\n * next,\n * );\n * });\n *\n * app.get('/', () => {\n * const actor = useServiceActor();\n *\n * // { traceId: 'req_35123', actorId: null, actorType: 'http-request', ipAddress: '::' }\n * console.log(actor);\n * });\n *\n * @group Main\n */\nexport function serviceActor<T extends Record<PropertyKey, any> = {}>(\n factory?: () => T,\n): {\n /**\n * Wrap a function to execute it with service actor providers\n */\n with: <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ) => Fn;\n\n /**\n * Returns the service actor instance from the current context.\n */\n inject: () => ServiceActor<T> | undefined;\n\n /**\n * Returns the service actor instance from the context, or creates and binds a new instance if none exists.\n */\n use: () => ServiceActor<T>;\n} {\n var injectKey = Symbol();\n var idSeq = 0;\n\n var createActor = (): AnyServiceActor => {\n var actor = createServiceActor();\n\n actor.traceId = `trace-${++idSeq}`;\n\n if (factory) {\n actor.assign(factory());\n }\n\n return actor;\n };\n\n var withHook = <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ): Fn => {\n return withContext(function (this: any, ...args: any[]) {\n var parentActor = inject<ServiceActor>(injectKey);\n var actor = createActor();\n\n if (parentActor) {\n actor.assign(parentActor);\n }\n\n if (params) {\n actor.assign(params);\n }\n\n provide(injectKey, actor);\n\n return fn.apply(this, args);\n }) as Fn;\n };\n\n var injectHook = (): AnyServiceActor | undefined => {\n return hasInjectionContext() ? inject<ServiceActor>(injectKey) : undefined;\n };\n\n var useHok = (): AnyServiceActor => {\n var _actor: AnyServiceActor | undefined;\n\n if (!hasInjectionContext()) {\n _actor = createActor();\n provide(injectKey, _actor, true);\n\n return _actor;\n }\n\n // check for existed\n _actor = inject<AnyServiceActor>(injectKey);\n\n if (_actor) return _actor;\n\n _actor = createActor();\n provide(injectKey, _actor);\n\n return _actor;\n };\n\n return { with: withHook, use: useHok as any, inject: injectHook as any };\n}\n\nfunction createServiceActor(): ServiceActor {\n var actor: ServiceActorInternal = {\n traceId: '',\n actorId: null,\n actorType: 'unknown',\n [SYM_API]: {\n assign,\n },\n [SYM_DATA]: {},\n [SYM_RAW]: null,\n [SYM_MARKER]: true,\n };\n\n var reservedKeys = new Set(Object.keys(actor));\n\n actor[SYM_RAW] = actor;\n\n var newProxy = new Proxy(actor[SYM_DATA], {\n defineProperty(target, key, value) {\n if (key in actor) {\n (actor as any)[key] = value;\n } else {\n target[key] = value;\n }\n\n return true;\n },\n deleteProperty(target, key) {\n if (key in actor) {\n delete (actor as any)[key];\n } else {\n delete target[key];\n }\n\n return true;\n },\n has(target, key) {\n return key in actor || key in target;\n },\n ownKeys(target) {\n return [...reservedKeys, ...Object.keys(target)];\n },\n set: function (target, key, value) {\n if (key in actor[SYM_API]) return false;\n\n if (key in actor) {\n Reflect.set(actor, key, value);\n } else if (isFunction(value)) {\n Reflect.set(actor[SYM_API], key, value);\n } else {\n Reflect.set(target, key, value);\n }\n\n return true;\n },\n get: (target, key) => {\n var value: any;\n\n if (key in actor) {\n value = Reflect.get(actor, key, value);\n } else if (key in actor[SYM_API]) {\n value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);\n } else {\n value = Reflect.get(target, key);\n }\n\n return value;\n },\n getOwnPropertyDescriptor(k) {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n });\n\n return newProxy as ServiceActor;\n}\n\nfunction assign(this: ServiceActor, params: Record<any, any>) {\n Object.assign(this, params);\n return this;\n}\n"],"mappings":";;AA4CA,IAAI,aAAa,OAAO;AACxB,IAAI,UAAU,OAAO;AACrB,IAAI,WAAW,OAAO;AACtB,IAAI,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BrB,OAAgB;EAqBd;EACA,SAAI,OAAQ,SAAA;EAEZ,IAAI,QAAA,OAAA;EACF,SAAI,YAAQ;EAEZ,QAAM,WAAU,MAAS;EAEzB,OAAI;;CAKN,OAAA;EAEA,MAAI;EAIF,KAAA;UACM;;;SAOA,qBACW;KAGf,QAAQ;WAED;EACT,SAAC;EACH,WAAA;GAEA,UAAI,EAAA,OAAA;GACF,WAAO,CAAA;GACT,UAAA;GAEA,aAAI;;KAGF,eAAK,IAAA,IAAoB,OAAG,KAAA,KAAA,CAAA;OAC1B,WAAS;KACT,WAAQ,IAAA,MAAW,MAAQ,WAAI;iBAExB,QAAA,KAAA,OAAA;GACT,IAAA,OAAA,OAAA,MAAA,OAAA;QAGA,OAAS,OAAwB;GAEjC,OAAI;EAEJ;EACA,eAAQ,QAAW,KAAM;GAEzB,IAAA,OAAO,OAAA,OAAA,MAAA;QACT,OAAA,OAAA;GAEA,OAAO;EAAE;EAAgB,IAAA,QAAK,KAAA;GAAe,OAAQ,OAAA,SAAA,OAAA;EAAkB;EACzE,QAAA,QAAA;GAEA,OAAS,CAAA,GAAA,cAAA,GAAmC,OAAA,KAAA,MAAA,CAAA;EAC1C;EACE,KAAA,SAAS,QAAA,KAAA,OAAA;GACT,IAAA,OAAS,MAAA,UAAA,OAAA;GACT,IAAA,OAAW,OAAA,QAAA,IAAA,OAAA,KAAA,KAAA;QACV,IAAA,WAED,KAAA,GAAA,QAAA,IAAA,MAAA,UAAA,KAAA,KAAA;QACC,QAAY,IAAA,QAAA,KAAA,KAAA;GACZ,OAAA;;EAEH,MAAA,QAAA,QAAA;GAEA,IAAI;GAEJ,IAAM,OAAA,OAAW,QAAA,QAAA,IAAA,OAAA,KAAA,KAAA;QAEb,IAAA,OAAW,MAAI,UAAY,QAAW,QAAA,IAAA,MAAA,UAAA,KAAA,KAAA,CAAA,CAAA,KAAA,QAAA;QACxC,QAAA,QAAe,IAAQ,QAAK,GAAO;GACjC,OAAI;;2BAMG,GAAA;GACT,OAAA;IACA,YAAA;IACE,cAAW;;;EAOb;QACI;;SAEJ,OAAA,QAAA;QACA,OAAQ,MAAQ,MAAA;QACd;;SAGI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrew_l/service-actor",
3
- "version": "0.3.22",
3
+ "version": "0.4.1",
4
4
  "description": "Forget about passing data like trace IDs between functions.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,27 +19,28 @@
19
19
  "exports": {
20
20
  ".": {
21
21
  "import": "./dist/index.mjs",
22
- "require": "./dist/index.cjs"
22
+ "require": "./dist/index.mjs",
23
+ "types": "./dist/index.d.mts"
23
24
  }
24
25
  },
25
- "main": "./dist/index.cjs",
26
- "types": "./dist/index.d.ts",
26
+ "main": "./dist/index.mjs",
27
+ "types": "./dist/index.d.mts",
27
28
  "files": [
28
29
  "dist"
29
30
  ],
30
31
  "devDependencies": {
31
32
  "@types/node": "22.10.5",
32
- "typescript": "~5.8.3",
33
- "unbuild": "3.5.0",
33
+ "obuild": "^0.4.37",
34
+ "typescript": "6.0.3",
34
35
  "vitest": "^3.2.4"
35
36
  },
36
37
  "dependencies": {
37
- "@andrew_l/context": "0.3.22",
38
- "@andrew_l/toolkit": "0.3.22"
38
+ "@andrew_l/context": "0.4.1",
39
+ "@andrew_l/toolkit": "0.4.1"
39
40
  },
40
41
  "scripts": {
41
42
  "check-types": "tsc --noEmit",
42
- "build": "unbuild",
43
+ "build": "obuild",
43
44
  "test": "vitest run --typecheck",
44
45
  "test:watch": "vitest watch --typecheck"
45
46
  }
package/dist/index.cjs DELETED
@@ -1,127 +0,0 @@
1
- 'use strict';
2
-
3
- const context = require('@andrew_l/context');
4
- const toolkit = require('@andrew_l/toolkit');
5
-
6
- var SYM_MARKER = Symbol();
7
- var SYM_RAW = Symbol();
8
- var SYM_DATA = Symbol();
9
- var SYM_API = Symbol();
10
- function serviceActor(factory) {
11
- var injectKey = Symbol();
12
- var idSeq = 0;
13
- var createActor = () => {
14
- var actor = createServiceActor();
15
- actor.traceId = `trace-${++idSeq}`;
16
- if (factory) {
17
- actor.assign(factory());
18
- }
19
- return actor;
20
- };
21
- var withHook = (fn, params) => {
22
- return context.withContext(function(...args) {
23
- var parentActor = context.inject(injectKey);
24
- var actor = createActor();
25
- if (parentActor) {
26
- actor.assign(parentActor);
27
- }
28
- if (params) {
29
- actor.assign(params);
30
- }
31
- context.provide(injectKey, actor);
32
- return fn.apply(this, args);
33
- });
34
- };
35
- var injectHook = () => {
36
- return context.hasInjectionContext() ? context.inject(injectKey) : void 0;
37
- };
38
- var useHok = () => {
39
- var _actor;
40
- if (!context.hasInjectionContext()) {
41
- _actor = createActor();
42
- context.provide(injectKey, _actor, true);
43
- return _actor;
44
- }
45
- _actor = context.inject(injectKey);
46
- if (_actor) return _actor;
47
- _actor = createActor();
48
- context.provide(injectKey, _actor);
49
- return _actor;
50
- };
51
- return { with: withHook, use: useHok, inject: injectHook };
52
- }
53
- function createServiceActor() {
54
- var actor = {
55
- traceId: "",
56
- actorId: null,
57
- actorType: "unknown",
58
- [SYM_API]: {
59
- assign
60
- },
61
- [SYM_DATA]: {},
62
- [SYM_RAW]: null,
63
- [SYM_MARKER]: true
64
- };
65
- var reservedKeys = new Set(Object.keys(actor));
66
- actor[SYM_RAW] = actor;
67
- var newProxy = new Proxy(actor[SYM_DATA], {
68
- defineProperty(target, key, value) {
69
- if (key in actor) {
70
- actor[key] = value;
71
- } else {
72
- target[key] = value;
73
- }
74
- return true;
75
- },
76
- deleteProperty(target, key) {
77
- if (key in actor) {
78
- delete actor[key];
79
- } else {
80
- delete target[key];
81
- }
82
- return true;
83
- },
84
- has(target, key) {
85
- return key in actor || key in target;
86
- },
87
- ownKeys(target) {
88
- return [...reservedKeys, ...Object.keys(target)];
89
- },
90
- set: function(target, key, value) {
91
- if (key in actor[SYM_API]) return false;
92
- if (key in actor) {
93
- Reflect.set(actor, key, value);
94
- } else if (toolkit.isFunction(value)) {
95
- Reflect.set(actor[SYM_API], key, value);
96
- } else {
97
- Reflect.set(target, key, value);
98
- }
99
- return true;
100
- },
101
- get: (target, key) => {
102
- var value;
103
- if (key in actor) {
104
- value = Reflect.get(actor, key, value);
105
- } else if (key in actor[SYM_API]) {
106
- value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);
107
- } else {
108
- value = Reflect.get(target, key);
109
- }
110
- return value;
111
- },
112
- getOwnPropertyDescriptor(k) {
113
- return {
114
- enumerable: true,
115
- configurable: true
116
- };
117
- }
118
- });
119
- return newProxy;
120
- }
121
- function assign(params) {
122
- Object.assign(this, params);
123
- return this;
124
- }
125
-
126
- exports.serviceActor = serviceActor;
127
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import {\n hasInjectionContext,\n inject,\n provide,\n withContext,\n} from '@andrew_l/context';\nimport {\n type AnyFunction,\n type OverwriteWith,\n isFunction,\n} from '@andrew_l/toolkit';\n\ntype ServiceActorInternal = {\n traceId: unknown;\n actorId: unknown;\n actorType: unknown;\n [SYM_API]: Record<PropertyKey, Function>;\n [SYM_MARKER]: boolean;\n [SYM_RAW]: any;\n [SYM_DATA]: Record<PropertyKey, unknown>;\n};\n\nexport type AnyServiceActor = {\n traceId: any;\n actorId: any;\n actorType: any;\n [x: PropertyKey]: any;\n};\n\nexport type ServiceActorData<T extends Record<PropertyKey, any> = {}> =\n OverwriteWith<\n {\n traceId: string;\n actorId: string | null;\n actorType: 'unknown' | string;\n },\n T\n >;\n\nexport type ServiceActor<T extends Record<PropertyKey, any> = {}> =\n ServiceActorData<T> & {\n assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;\n };\n\nvar SYM_MARKER = Symbol();\nvar SYM_RAW = Symbol();\nvar SYM_DATA = Symbol();\nvar SYM_API = Symbol();\n\n/**\n * Create service actor hooks\n *\n * @example\n * const { use: useServiceActor, with: withServiceActor } = serviceActor(() => ({\n * actorType: 'http-request',\n * ipAddress: '',\n * }));\n *\n * app.use((ctx, next) => {\n * return withServiceActor(\n * {\n * traceId: ctx.headers['x-request-id'],\n * ipAddress: ctx.headers['x-forwarded-for'],\n * },\n * next,\n * );\n * });\n *\n * app.get('/', () => {\n * const actor = useServiceActor();\n *\n * // { traceId: 'req_35123', actorId: null, actorType: 'http-request', ipAddress: '::' }\n * console.log(actor);\n * });\n *\n * @group Main\n */\nexport function serviceActor<T extends Record<PropertyKey, any> = {}>(\n factory?: () => T,\n): {\n /**\n * Wrap a function to execute it with service actor providers\n */\n with: <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ) => Fn;\n\n /**\n * Returns the service actor instance from the current context.\n */\n inject: () => ServiceActor<T> | undefined;\n\n /**\n * Returns the service actor instance from the context, or creates and binds a new instance if none exists.\n */\n use: () => ServiceActor<T>;\n} {\n var injectKey = Symbol();\n var idSeq = 0;\n\n var createActor = (): AnyServiceActor => {\n var actor = createServiceActor();\n\n actor.traceId = `trace-${++idSeq}`;\n\n if (factory) {\n actor.assign(factory());\n }\n\n return actor;\n };\n\n var withHook = <Fn extends AnyFunction>(\n fn: Fn,\n params?: Partial<ServiceActor<T>>,\n ): Fn => {\n return withContext(function (this: any, ...args: any[]) {\n var parentActor = inject<ServiceActor>(injectKey);\n var actor = createActor();\n\n if (parentActor) {\n actor.assign(parentActor);\n }\n\n if (params) {\n actor.assign(params);\n }\n\n provide(injectKey, actor);\n\n return fn.apply(this, args);\n }) as Fn;\n };\n\n var injectHook = (): AnyServiceActor | undefined => {\n return hasInjectionContext() ? inject<ServiceActor>(injectKey) : undefined;\n };\n\n var useHok = (): AnyServiceActor => {\n var _actor: AnyServiceActor | undefined;\n\n if (!hasInjectionContext()) {\n _actor = createActor();\n provide(injectKey, _actor, true);\n\n return _actor;\n }\n\n // check for existed\n _actor = inject<AnyServiceActor>(injectKey);\n\n if (_actor) return _actor;\n\n _actor = createActor();\n provide(injectKey, _actor);\n\n return _actor;\n };\n\n return { with: withHook, use: useHok as any, inject: injectHook as any };\n}\n\nfunction createServiceActor(): ServiceActor {\n var actor: ServiceActorInternal = {\n traceId: '',\n actorId: null,\n actorType: 'unknown',\n [SYM_API]: {\n assign,\n },\n [SYM_DATA]: {},\n [SYM_RAW]: null,\n [SYM_MARKER]: true,\n };\n\n var reservedKeys = new Set(Object.keys(actor));\n\n actor[SYM_RAW] = actor;\n\n var newProxy = new Proxy(actor[SYM_DATA], {\n defineProperty(target, key, value) {\n if (key in actor) {\n (actor as any)[key] = value;\n } else {\n target[key] = value;\n }\n\n return true;\n },\n deleteProperty(target, key) {\n if (key in actor) {\n delete (actor as any)[key];\n } else {\n delete target[key];\n }\n\n return true;\n },\n has(target, key) {\n return key in actor || key in target;\n },\n ownKeys(target) {\n return [...reservedKeys, ...Object.keys(target)];\n },\n set: function (target, key, value) {\n if (key in actor[SYM_API]) return false;\n\n if (key in actor) {\n Reflect.set(actor, key, value);\n } else if (isFunction(value)) {\n Reflect.set(actor[SYM_API], key, value);\n } else {\n Reflect.set(target, key, value);\n }\n\n return true;\n },\n get: (target, key) => {\n var value: any;\n\n if (key in actor) {\n value = Reflect.get(actor, key, value);\n } else if (key in actor[SYM_API]) {\n value = Reflect.get(actor[SYM_API], key, value).bind(newProxy);\n } else {\n value = Reflect.get(target, key);\n }\n\n return value;\n },\n getOwnPropertyDescriptor(k) {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n });\n\n return newProxy as ServiceActor;\n}\n\nfunction assign(this: ServiceActor, params: Record<any, any>) {\n Object.assign(this, params);\n return this;\n}\n"],"names":["withContext","inject","provide","hasInjectionContext","isFunction"],"mappings":"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"}
package/dist/index.d.cts DELETED
@@ -1,60 +0,0 @@
1
- import { OverwriteWith, AnyFunction } from '@andrew_l/toolkit';
2
-
3
- type AnyServiceActor = {
4
- traceId: any;
5
- actorId: any;
6
- actorType: any;
7
- [x: PropertyKey]: any;
8
- };
9
- type ServiceActorData<T extends Record<PropertyKey, any> = {}> = OverwriteWith<{
10
- traceId: string;
11
- actorId: string | null;
12
- actorType: 'unknown' | string;
13
- }, T>;
14
- type ServiceActor<T extends Record<PropertyKey, any> = {}> = ServiceActorData<T> & {
15
- assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;
16
- };
17
- /**
18
- * Create service actor hooks
19
- *
20
- * @example
21
- * const { use: useServiceActor, with: withServiceActor } = serviceActor(() => ({
22
- * actorType: 'http-request',
23
- * ipAddress: '',
24
- * }));
25
- *
26
- * app.use((ctx, next) => {
27
- * return withServiceActor(
28
- * {
29
- * traceId: ctx.headers['x-request-id'],
30
- * ipAddress: ctx.headers['x-forwarded-for'],
31
- * },
32
- * next,
33
- * );
34
- * });
35
- *
36
- * app.get('/', () => {
37
- * const actor = useServiceActor();
38
- *
39
- * // { traceId: 'req_35123', actorId: null, actorType: 'http-request', ipAddress: '::' }
40
- * console.log(actor);
41
- * });
42
- *
43
- * @group Main
44
- */
45
- declare function serviceActor<T extends Record<PropertyKey, any> = {}>(factory?: () => T): {
46
- /**
47
- * Wrap a function to execute it with service actor providers
48
- */
49
- with: <Fn extends AnyFunction>(fn: Fn, params?: Partial<ServiceActor<T>>) => Fn;
50
- /**
51
- * Returns the service actor instance from the current context.
52
- */
53
- inject: () => ServiceActor<T> | undefined;
54
- /**
55
- * Returns the service actor instance from the context, or creates and binds a new instance if none exists.
56
- */
57
- use: () => ServiceActor<T>;
58
- };
59
-
60
- export { type AnyServiceActor, type ServiceActor, type ServiceActorData, serviceActor };
package/dist/index.d.ts DELETED
@@ -1,60 +0,0 @@
1
- import { OverwriteWith, AnyFunction } from '@andrew_l/toolkit';
2
-
3
- type AnyServiceActor = {
4
- traceId: any;
5
- actorId: any;
6
- actorType: any;
7
- [x: PropertyKey]: any;
8
- };
9
- type ServiceActorData<T extends Record<PropertyKey, any> = {}> = OverwriteWith<{
10
- traceId: string;
11
- actorId: string | null;
12
- actorType: 'unknown' | string;
13
- }, T>;
14
- type ServiceActor<T extends Record<PropertyKey, any> = {}> = ServiceActorData<T> & {
15
- assign(params: Partial<ServiceActorData<T>>): ServiceActor<T>;
16
- };
17
- /**
18
- * Create service actor hooks
19
- *
20
- * @example
21
- * const { use: useServiceActor, with: withServiceActor } = serviceActor(() => ({
22
- * actorType: 'http-request',
23
- * ipAddress: '',
24
- * }));
25
- *
26
- * app.use((ctx, next) => {
27
- * return withServiceActor(
28
- * {
29
- * traceId: ctx.headers['x-request-id'],
30
- * ipAddress: ctx.headers['x-forwarded-for'],
31
- * },
32
- * next,
33
- * );
34
- * });
35
- *
36
- * app.get('/', () => {
37
- * const actor = useServiceActor();
38
- *
39
- * // { traceId: 'req_35123', actorId: null, actorType: 'http-request', ipAddress: '::' }
40
- * console.log(actor);
41
- * });
42
- *
43
- * @group Main
44
- */
45
- declare function serviceActor<T extends Record<PropertyKey, any> = {}>(factory?: () => T): {
46
- /**
47
- * Wrap a function to execute it with service actor providers
48
- */
49
- with: <Fn extends AnyFunction>(fn: Fn, params?: Partial<ServiceActor<T>>) => Fn;
50
- /**
51
- * Returns the service actor instance from the current context.
52
- */
53
- inject: () => ServiceActor<T> | undefined;
54
- /**
55
- * Returns the service actor instance from the context, or creates and binds a new instance if none exists.
56
- */
57
- use: () => ServiceActor<T>;
58
- };
59
-
60
- export { type AnyServiceActor, type ServiceActor, type ServiceActorData, serviceActor };