@kaokei/use-vue-service 2.0.5 → 3.0.2

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.
Files changed (54) hide show
  1. package/README.md +14 -32
  2. package/dist/computed.d.cts +1 -0
  3. package/dist/computed.d.ts +1 -0
  4. package/dist/constants.d.cts +7 -0
  5. package/dist/constants.d.ts +7 -0
  6. package/dist/core.d.cts +14 -0
  7. package/dist/core.d.ts +14 -0
  8. package/dist/find-service.d.cts +3 -0
  9. package/dist/find-service.d.ts +3 -0
  10. package/dist/index.cjs +1 -0
  11. package/dist/index.d.cts +5 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +164 -0
  14. package/dist/interface.d.cts +6 -0
  15. package/dist/interface.d.ts +6 -0
  16. package/dist/scope.d.cts +5 -0
  17. package/dist/scope.d.ts +5 -0
  18. package/dist/utils.d.cts +2 -0
  19. package/dist/utils.d.ts +2 -0
  20. package/package.json +32 -112
  21. package/dist/index.cjs.js +0 -153
  22. package/dist/index.cjs.js.map +0 -1
  23. package/dist/index.cjs.min.js +0 -11
  24. package/dist/index.cjs.min.js.map +0 -1
  25. package/dist/index.cjs.runtime.js +0 -153
  26. package/dist/index.cjs.runtime.js.map +0 -1
  27. package/dist/index.cjs.runtime.min.js +0 -11
  28. package/dist/index.cjs.runtime.min.js.map +0 -1
  29. package/dist/index.esm.js +0 -134
  30. package/dist/index.esm.js.map +0 -1
  31. package/dist/index.esm.min.js +0 -11
  32. package/dist/index.esm.min.js.map +0 -1
  33. package/dist/index.esm.runtime.js +0 -134
  34. package/dist/index.esm.runtime.js.map +0 -1
  35. package/dist/index.esm.runtime.min.js +0 -11
  36. package/dist/index.esm.runtime.min.js.map +0 -1
  37. package/dist/index.iife.js +0 -152
  38. package/dist/index.iife.js.map +0 -1
  39. package/dist/index.iife.min.js +0 -11
  40. package/dist/index.iife.min.js.map +0 -1
  41. package/dist/src/constants.d.ts +0 -2
  42. package/dist/src/constants.d.ts.map +0 -1
  43. package/dist/src/declareProviders.d.ts +0 -26
  44. package/dist/src/declareProviders.d.ts.map +0 -1
  45. package/dist/src/defaultInjector.d.ts +0 -2
  46. package/dist/src/defaultInjector.d.ts.map +0 -1
  47. package/dist/src/fakeInject.d.ts +0 -11
  48. package/dist/src/fakeInject.d.ts.map +0 -1
  49. package/dist/src/index.d.ts +0 -8
  50. package/dist/src/index.d.ts.map +0 -1
  51. package/dist/src/useService.d.ts +0 -9
  52. package/dist/src/useService.d.ts.map +0 -1
  53. package/dist/src/utils.d.ts +0 -4
  54. package/dist/src/utils.d.ts.map +0 -1
package/dist/index.cjs.js DELETED
@@ -1,153 +0,0 @@
1
- /**
2
- * @kaokei/use-vue-service
3
- * Use angular service in vue.
4
- *
5
- * @version 2.0.5
6
- * @author kaokei
7
- * @license MIT
8
- * @link https://github.com/kaokei/use-vue-service
9
- */
10
- 'use strict';
11
-
12
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
13
-
14
- Object.defineProperty(exports, '__esModule', {
15
- value: true
16
- });
17
-
18
- var di = require('@kaokei/di');
19
-
20
- var vue = require('vue');
21
-
22
- var INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';
23
-
24
- function DEFAULT_BEFORE_CACHE_HOOK(service) {
25
- if (service && _typeof(service) === 'object') {
26
- return vue.reactive(service);
27
- } else {
28
- return vue.ref(service);
29
- }
30
- }
31
-
32
- function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
33
- for (var key in source) {
34
- if (di.has(source, key)) {
35
- target[key] = vue.proxyRefs(source[key]);
36
- }
37
- }
38
-
39
- return target;
40
- }
41
-
42
- function createInjector(provides, parentInjector) {
43
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
44
- options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
45
- options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
46
- return new di.Injector(provides, parentInjector, options);
47
- }
48
-
49
- function getServiceFromInjector(injector, token, options) {
50
- if (Array.isArray(token)) {
51
- return token.map(function (t) {
52
- return injector.get(t, options);
53
- });
54
- }
55
-
56
- return injector.get(token, options);
57
- }
58
-
59
- var DEFAULT_INJECTOR = createInjector();
60
- /**
61
- * 从当前组件开始查找provider
62
- * 注意到vue本身的inject是默认从父级组件开始查找
63
- *
64
- * @export
65
- * @param {*} key
66
- * @param {*} defaultValue
67
- * @return {*}
68
- */
69
-
70
- function inject(key, defaultValue) {
71
- var instance = vue.getCurrentInstance();
72
-
73
- if (instance) {
74
- var provides = instance.provides;
75
- return provides[key] || defaultValue;
76
- } else {
77
- console.warn("inject() can only be used inside setup() or functional components.");
78
- }
79
- }
80
- /**
81
- * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法
82
- * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法
83
- * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。
84
- * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)
85
- * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。
86
- * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent
87
- * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了
88
- * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能
89
- *
90
- * 1. 需要解决重复调用的问题
91
- * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类
92
- * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本
93
- *
94
- * @export
95
- * @param {any[]} providers
96
- */
97
-
98
-
99
- function declareProviders(providers) {
100
- var instance = vue.getCurrentInstance();
101
-
102
- if (!instance) {
103
- throw new Error('declareProviders can only be used inside setup function.');
104
- }
105
-
106
- var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
107
-
108
- if (parentInjector.uid === instance.uid) {
109
- throw new Error('declareProviders can only be called once.');
110
- }
111
-
112
- var currentInjector = createInjector(providers, parentInjector);
113
- currentInjector.uid = instance.uid;
114
- vue.onUnmounted(function () {
115
- currentInjector.dispose();
116
- });
117
- vue.provide(INJECTOR_KEY, currentInjector);
118
- }
119
- /**
120
- * 实际上所有Injectable的Class都是兜底到root injector中
121
- * 不需要特意调用declareRootProviders声明
122
- * 这个方法是用于声明不是Injectable的Class的其他类型的Provider
123
- * @param providers
124
- */
125
-
126
-
127
- function declareRootProviders(providers) {
128
- DEFAULT_INJECTOR.addProviders(providers);
129
- }
130
-
131
- function useService(token, options) {
132
- var currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
133
- return getServiceFromInjector(currentInjector, token, options);
134
- }
135
-
136
- function useRootService(token, options) {
137
- return getServiceFromInjector(DEFAULT_INJECTOR, token, options);
138
- }
139
-
140
- exports.DEFAULT_INJECTOR = DEFAULT_INJECTOR;
141
- exports.INJECTOR_KEY = INJECTOR_KEY;
142
- exports.createInjector = createInjector;
143
- exports.declareProviders = declareProviders;
144
- exports.declareRootProviders = declareRootProviders;
145
- exports.getServiceFromInjector = getServiceFromInjector;
146
- exports.inject = inject;
147
- exports.useRootService = useRootService;
148
- exports.useService = useService;
149
-
150
- for (var k in di) {
151
- if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = di[k];
152
- }
153
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","declareProviders","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","declareRootProviders","addProviders","useService","useRootService"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @kaokei/use-vue-service
3
- * Use angular service in vue.
4
- *
5
- * @version 2.0.5
6
- * @author kaokei
7
- * @license MIT
8
- * @link https://github.com/kaokei/use-vue-service
9
- */
10
- "use strict";function e(r){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(r)}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("@kaokei/di"),o=require("vue"),t="USE_VUE_SERVICE_INJECTOR_KEY";function n(r){return r&&"object"===e(r)?o.reactive(r):o.ref(r)}function i(e,t){for(var n in t)r.has(t,n)&&(e[n]=o.proxyRefs(t[n]));return e}function u(e,o){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.beforeCacheHook=t.beforeCacheHook||n,t.mergePropertyHook=t.mergePropertyHook||i,new r.Injector(e,o,t)}function c(e,r,o){return Array.isArray(r)?r.map((function(r){return e.get(r,o)})):e.get(r,o)}var s=u();function a(e,r){var t=o.getCurrentInstance();if(t)return t.provides[e]||r;console.warn("inject() can only be used inside setup() or functional components.")}for(var f in exports.DEFAULT_INJECTOR=s,exports.INJECTOR_KEY=t,exports.createInjector=u,exports.declareProviders=function(e){var r=o.getCurrentInstance();if(!r)throw new Error("declareProviders can only be used inside setup function.");var n=a(t,s);if(n.uid===r.uid)throw new Error("declareProviders can only be called once.");var i=u(e,n);i.uid=r.uid,o.onUnmounted((function(){i.dispose()})),o.provide(t,i)},exports.declareRootProviders=function(e){s.addProviders(e)},exports.getServiceFromInjector=c,exports.inject=a,exports.useRootService=function(e,r){return c(s,e,r)},exports.useService=function(e,r){return c(a(t,s),e,r)},r)"default"===f||exports.hasOwnProperty(f)||(exports[f]=r[f]);
11
- //# sourceMappingURL=index.cjs.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","_typeof","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","addProviders"],"mappings":";;;;;;;;;uVAAaA,EAAe,+BCG5B,SAASC,EAA0BC,UAC7BA,GAA8B,WAAnBC,EAAOD,GACbE,WAASF,GAETG,MAAIH,GAIf,SAASI,EAA4BC,EAAaC,OAC3C,IAAMC,KAAOD,EACZE,MAAIF,EAAQC,KACdF,EAAOE,GAAOE,YAAUH,EAAOC,YAG5BF,WAGOK,EACdC,EACAC,OACAC,yDAAe,UAEfA,EAAQC,gBACND,EAAQC,iBAAmBf,EAC7Bc,EAAQE,kBACNF,EAAQE,mBAAqBX,EACxB,IAAIY,WAASL,EAAUC,EAAgBC,YAGhCI,EACdC,EACAC,EACAN,UAEIO,MAAMC,QAAQF,GACTA,EAAMG,KAAI,SAAAC,UAAKL,EAASM,IAAID,EAAGV,MAEjCK,EAASM,IAAIL,EAAON,OCtChBY,EAAmBf,aCShBgB,EAAOnB,EAAUoB,OACzBC,EAAgBC,0BAClBD,SACeA,EAASjB,SACVJ,IAAQoB,EAExBG,QAAQC,qMCOqBC,OACzBJ,EAAWC,2BACZD,QACG,IAAIK,MAAM,gEAEZrB,EAAiBc,EAAO5B,EAAc2B,MACxCb,EAAesB,MAAQN,EAASM,UAC5B,IAAID,MAAM,iDAEZE,EAAkBzB,EAAesB,EAAWpB,GAC5CuB,EAAiBD,IAAMN,EAASM,IAEtCE,eAAY,WACVD,EAAgBE,aAGlBC,UAAQxC,EAAcqC,0CASaH,GACnCP,EAAiBc,aAAaP,sFCfDb,EAAYN,UAClCI,EAAuBQ,EAAkBN,EAAON,gCAV9BM,EAAYN,UAE9BI,EADiBS,EAAO5B,EAAc2B,GACEN,EAAON"}
@@ -1,153 +0,0 @@
1
- /**
2
- * @kaokei/use-vue-service
3
- * Use angular service in vue.
4
- *
5
- * @version 2.0.5
6
- * @author kaokei
7
- * @license MIT
8
- * @link https://github.com/kaokei/use-vue-service
9
- */
10
- 'use strict';
11
-
12
- var _typeof = require("@babel/runtime/helpers/typeof");
13
-
14
- Object.defineProperty(exports, '__esModule', {
15
- value: true
16
- });
17
-
18
- var di = require('@kaokei/di');
19
-
20
- var vue = require('vue');
21
-
22
- var INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';
23
-
24
- function DEFAULT_BEFORE_CACHE_HOOK(service) {
25
- if (service && _typeof(service) === 'object') {
26
- return vue.reactive(service);
27
- } else {
28
- return vue.ref(service);
29
- }
30
- }
31
-
32
- function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
33
- for (var key in source) {
34
- if (di.has(source, key)) {
35
- target[key] = vue.proxyRefs(source[key]);
36
- }
37
- }
38
-
39
- return target;
40
- }
41
-
42
- function createInjector(provides, parentInjector) {
43
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
44
- options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
45
- options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
46
- return new di.Injector(provides, parentInjector, options);
47
- }
48
-
49
- function getServiceFromInjector(injector, token, options) {
50
- if (Array.isArray(token)) {
51
- return token.map(function (t) {
52
- return injector.get(t, options);
53
- });
54
- }
55
-
56
- return injector.get(token, options);
57
- }
58
-
59
- var DEFAULT_INJECTOR = createInjector();
60
- /**
61
- * 从当前组件开始查找provider
62
- * 注意到vue本身的inject是默认从父级组件开始查找
63
- *
64
- * @export
65
- * @param {*} key
66
- * @param {*} defaultValue
67
- * @return {*}
68
- */
69
-
70
- function inject(key, defaultValue) {
71
- var instance = vue.getCurrentInstance();
72
-
73
- if (instance) {
74
- var provides = instance.provides;
75
- return provides[key] || defaultValue;
76
- } else {
77
- console.warn("inject() can only be used inside setup() or functional components.");
78
- }
79
- }
80
- /**
81
- * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法
82
- * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法
83
- * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。
84
- * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)
85
- * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。
86
- * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent
87
- * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了
88
- * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能
89
- *
90
- * 1. 需要解决重复调用的问题
91
- * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类
92
- * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本
93
- *
94
- * @export
95
- * @param {any[]} providers
96
- */
97
-
98
-
99
- function declareProviders(providers) {
100
- var instance = vue.getCurrentInstance();
101
-
102
- if (!instance) {
103
- throw new Error('declareProviders can only be used inside setup function.');
104
- }
105
-
106
- var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
107
-
108
- if (parentInjector.uid === instance.uid) {
109
- throw new Error('declareProviders can only be called once.');
110
- }
111
-
112
- var currentInjector = createInjector(providers, parentInjector);
113
- currentInjector.uid = instance.uid;
114
- vue.onUnmounted(function () {
115
- currentInjector.dispose();
116
- });
117
- vue.provide(INJECTOR_KEY, currentInjector);
118
- }
119
- /**
120
- * 实际上所有Injectable的Class都是兜底到root injector中
121
- * 不需要特意调用declareRootProviders声明
122
- * 这个方法是用于声明不是Injectable的Class的其他类型的Provider
123
- * @param providers
124
- */
125
-
126
-
127
- function declareRootProviders(providers) {
128
- DEFAULT_INJECTOR.addProviders(providers);
129
- }
130
-
131
- function useService(token, options) {
132
- var currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
133
- return getServiceFromInjector(currentInjector, token, options);
134
- }
135
-
136
- function useRootService(token, options) {
137
- return getServiceFromInjector(DEFAULT_INJECTOR, token, options);
138
- }
139
-
140
- exports.DEFAULT_INJECTOR = DEFAULT_INJECTOR;
141
- exports.INJECTOR_KEY = INJECTOR_KEY;
142
- exports.createInjector = createInjector;
143
- exports.declareProviders = declareProviders;
144
- exports.declareRootProviders = declareRootProviders;
145
- exports.getServiceFromInjector = getServiceFromInjector;
146
- exports.inject = inject;
147
- exports.useRootService = useRootService;
148
- exports.useService = useService;
149
-
150
- for (var k in di) {
151
- if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = di[k];
152
- }
153
- //# sourceMappingURL=index.cjs.runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.runtime.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","declareProviders","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","declareRootProviders","addProviders","useService","useRootService"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @kaokei/use-vue-service
3
- * Use angular service in vue.
4
- *
5
- * @version 2.0.5
6
- * @author kaokei
7
- * @license MIT
8
- * @link https://github.com/kaokei/use-vue-service
9
- */
10
- "use strict";var e=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:!0});var r=require("@kaokei/di"),o=require("vue"),n="USE_VUE_SERVICE_INJECTOR_KEY";function t(r){return r&&"object"===e(r)?o.reactive(r):o.ref(r)}function i(e,n){for(var t in n)r.has(n,t)&&(e[t]=o.proxyRefs(n[t]));return e}function u(e,o){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.beforeCacheHook=n.beforeCacheHook||t,n.mergePropertyHook=n.mergePropertyHook||i,new r.Injector(e,o,n)}function c(e,r,o){return Array.isArray(r)?r.map((function(r){return e.get(r,o)})):e.get(r,o)}var s=u();function a(e,r){var n=o.getCurrentInstance();if(n)return n.provides[e]||r;console.warn("inject() can only be used inside setup() or functional components.")}for(var d in exports.DEFAULT_INJECTOR=s,exports.INJECTOR_KEY=n,exports.createInjector=u,exports.declareProviders=function(e){var r=o.getCurrentInstance();if(!r)throw new Error("declareProviders can only be used inside setup function.");var t=a(n,s);if(t.uid===r.uid)throw new Error("declareProviders can only be called once.");var i=u(e,t);i.uid=r.uid,o.onUnmounted((function(){i.dispose()})),o.provide(n,i)},exports.declareRootProviders=function(e){s.addProviders(e)},exports.getServiceFromInjector=c,exports.inject=a,exports.useRootService=function(e,r){return c(s,e,r)},exports.useService=function(e,r){return c(a(n,s),e,r)},r)"default"===d||exports.hasOwnProperty(d)||(exports[d]=r[d]);
11
- //# sourceMappingURL=index.cjs.runtime.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.runtime.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","_typeof","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","addProviders"],"mappings":";;;;;;;;;gKAAaA,EAAe,+BCG5B,SAASC,EAA0BC,UAC7BA,GAA8B,WAAnBC,EAAOD,GACbE,WAASF,GAETG,MAAIH,GAIf,SAASI,EAA4BC,EAAaC,OAC3C,IAAMC,KAAOD,EACZE,MAAIF,EAAQC,KACdF,EAAOE,GAAOE,YAAUH,EAAOC,YAG5BF,WAGOK,EACdC,EACAC,OACAC,yDAAe,UAEfA,EAAQC,gBACND,EAAQC,iBAAmBf,EAC7Bc,EAAQE,kBACNF,EAAQE,mBAAqBX,EACxB,IAAIY,WAASL,EAAUC,EAAgBC,YAGhCI,EACdC,EACAC,EACAN,UAEIO,MAAMC,QAAQF,GACTA,EAAMG,KAAI,SAAAC,UAAKL,EAASM,IAAID,EAAGV,MAEjCK,EAASM,IAAIL,EAAON,OCtChBY,EAAmBf,aCShBgB,EAAOnB,EAAUoB,OACzBC,EAAgBC,0BAClBD,SACeA,EAASjB,SACVJ,IAAQoB,EAExBG,QAAQC,qMCOqBC,OACzBJ,EAAWC,2BACZD,QACG,IAAIK,MAAM,gEAEZrB,EAAiBc,EAAO5B,EAAc2B,MACxCb,EAAesB,MAAQN,EAASM,UAC5B,IAAID,MAAM,iDAEZE,EAAkBzB,EAAesB,EAAWpB,GAC5CuB,EAAiBD,IAAMN,EAASM,IAEtCE,eAAY,WACVD,EAAgBE,aAGlBC,UAAQxC,EAAcqC,0CASaH,GACnCP,EAAiBc,aAAaP,sFCfDb,EAAYN,UAClCI,EAAuBQ,EAAkBN,EAAON,gCAV9BM,EAAYN,UAE9BI,EADiBS,EAAO5B,EAAc2B,GACEN,EAAON"}
package/dist/index.esm.js DELETED
@@ -1,134 +0,0 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
-
3
- /**
4
- * @kaokei/use-vue-service
5
- * Use angular service in vue.
6
- *
7
- * @version 2.0.5
8
- * @author kaokei
9
- * @license MIT
10
- * @link https://github.com/kaokei/use-vue-service
11
- */
12
- import { Injector, has } from '@kaokei/di';
13
- export * from '@kaokei/di';
14
- import { reactive, ref, proxyRefs, getCurrentInstance, onUnmounted, provide } from 'vue';
15
- var INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';
16
-
17
- function DEFAULT_BEFORE_CACHE_HOOK(service) {
18
- if (service && _typeof(service) === 'object') {
19
- return reactive(service);
20
- } else {
21
- return ref(service);
22
- }
23
- }
24
-
25
- function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
26
- for (var key in source) {
27
- if (has(source, key)) {
28
- target[key] = proxyRefs(source[key]);
29
- }
30
- }
31
-
32
- return target;
33
- }
34
-
35
- function createInjector(provides, parentInjector) {
36
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
37
- options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
38
- options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
39
- return new Injector(provides, parentInjector, options);
40
- }
41
-
42
- function getServiceFromInjector(injector, token, options) {
43
- if (Array.isArray(token)) {
44
- return token.map(function (t) {
45
- return injector.get(t, options);
46
- });
47
- }
48
-
49
- return injector.get(token, options);
50
- }
51
-
52
- var DEFAULT_INJECTOR = createInjector();
53
- /**
54
- * 从当前组件开始查找provider
55
- * 注意到vue本身的inject是默认从父级组件开始查找
56
- *
57
- * @export
58
- * @param {*} key
59
- * @param {*} defaultValue
60
- * @return {*}
61
- */
62
-
63
- function inject(key, defaultValue) {
64
- var instance = getCurrentInstance();
65
-
66
- if (instance) {
67
- var provides = instance.provides;
68
- return provides[key] || defaultValue;
69
- } else {
70
- console.warn("inject() can only be used inside setup() or functional components.");
71
- }
72
- }
73
- /**
74
- * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法
75
- * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法
76
- * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。
77
- * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)
78
- * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。
79
- * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent
80
- * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了
81
- * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能
82
- *
83
- * 1. 需要解决重复调用的问题
84
- * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类
85
- * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本
86
- *
87
- * @export
88
- * @param {any[]} providers
89
- */
90
-
91
-
92
- function declareProviders(providers) {
93
- var instance = getCurrentInstance();
94
-
95
- if (!instance) {
96
- throw new Error('declareProviders can only be used inside setup function.');
97
- }
98
-
99
- var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
100
-
101
- if (parentInjector.uid === instance.uid) {
102
- throw new Error('declareProviders can only be called once.');
103
- }
104
-
105
- var currentInjector = createInjector(providers, parentInjector);
106
- currentInjector.uid = instance.uid;
107
- onUnmounted(function () {
108
- currentInjector.dispose();
109
- });
110
- provide(INJECTOR_KEY, currentInjector);
111
- }
112
- /**
113
- * 实际上所有Injectable的Class都是兜底到root injector中
114
- * 不需要特意调用declareRootProviders声明
115
- * 这个方法是用于声明不是Injectable的Class的其他类型的Provider
116
- * @param providers
117
- */
118
-
119
-
120
- function declareRootProviders(providers) {
121
- DEFAULT_INJECTOR.addProviders(providers);
122
- }
123
-
124
- function useService(token, options) {
125
- var currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
126
- return getServiceFromInjector(currentInjector, token, options);
127
- }
128
-
129
- function useRootService(token, options) {
130
- return getServiceFromInjector(DEFAULT_INJECTOR, token, options);
131
- }
132
-
133
- export { DEFAULT_INJECTOR, INJECTOR_KEY, createInjector, declareProviders, declareRootProviders, getServiceFromInjector, inject, useRootService, useService };
134
- //# sourceMappingURL=index.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","declareProviders","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","declareRootProviders","addProviders","useService","useRootService"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- function o(r){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},o(r)
2
- /**
3
- * @kaokei/use-vue-service
4
- * Use angular service in vue.
5
- *
6
- * @version 2.0.5
7
- * @author kaokei
8
- * @license MIT
9
- * @link https://github.com/kaokei/use-vue-service
10
- */}import{Injector as r,has as n}from"@kaokei/di";export*from"@kaokei/di";import{reactive as e,ref as t,proxyRefs as i,getCurrentInstance as u,onUnmounted as c,provide as f}from"vue";var a="USE_VUE_SERVICE_INJECTOR_KEY";function d(r){return r&&"object"===o(r)?e(r):t(r)}function y(o,r){for(var e in r)n(r,e)&&(o[e]=i(r[e]));return o}function p(o,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.beforeCacheHook=e.beforeCacheHook||d,e.mergePropertyHook=e.mergePropertyHook||y,new r(o,n,e)}function s(o,r,n){return Array.isArray(r)?r.map((function(r){return o.get(r,n)})):o.get(r,n)}var l=p();function m(o,r){var n=u();if(n)return n.provides[o]||r;console.warn("inject() can only be used inside setup() or functional components.")}function v(o){var r=u();if(!r)throw new Error("declareProviders can only be used inside setup function.");var n=m(a,l);if(n.uid===r.uid)throw new Error("declareProviders can only be called once.");var e=p(o,n);e.uid=r.uid,c((function(){e.dispose()})),f(a,e)}function b(o){l.addProviders(o)}function k(o,r){return s(m(a,l),o,r)}function E(o,r){return s(l,o,r)}export{l as DEFAULT_INJECTOR,a as INJECTOR_KEY,p as createInjector,v as declareProviders,b as declareRootProviders,s as getServiceFromInjector,m as inject,E as useRootService,k as useService};
11
- //# sourceMappingURL=index.esm.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/defaultInjector.ts","../src/fakeInject.ts","../src/declareProviders.ts","../src/useService.ts"],"sourcesContent":["export const INJECTOR_KEY = 'USE_VUE_SERVICE_INJECTOR_KEY';\n","import { reactive, ref, proxyRefs } from 'vue';\nimport { Injector, has } from '@kaokei/di';\n\nfunction DEFAULT_BEFORE_CACHE_HOOK(service: any) {\n if (service && typeof service === 'object') {\n return reactive(service);\n } else {\n return ref(service);\n }\n}\n\nfunction DEFAULT_MERGE_PROPERTY_HOOK(target: any, source: any) {\n for (const key in source) {\n if (has(source, key)) {\n target[key] = proxyRefs(source[key]);\n }\n }\n return target;\n}\n\nexport function createInjector(\n provides?: any[],\n parentInjector?: Injector,\n options: any = {}\n) {\n options.beforeCacheHook =\n options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;\n options.mergePropertyHook =\n options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;\n return new Injector(provides, parentInjector, options);\n}\n\nexport function getServiceFromInjector(\n injector: Injector,\n token: any,\n options?: any\n) {\n if (Array.isArray(token)) {\n return token.map(t => injector.get(t, options));\n }\n return injector.get(token, options);\n}\n","import { createInjector } from './utils';\n\nexport const DEFAULT_INJECTOR = createInjector();\n","import { getCurrentInstance } from 'vue';\n\n/**\n * 从当前组件开始查找provider\n * 注意到vue本身的inject是默认从父级组件开始查找\n *\n * @export\n * @param {*} key\n * @param {*} defaultValue\n * @return {*}\n */\nexport function inject(key: any, defaultValue: any) {\n const instance: any = getCurrentInstance();\n if (instance) {\n const provides = instance.provides;\n return provides[key] || defaultValue;\n } else {\n console.warn(\n `inject() can only be used inside setup() or functional components.`\n );\n }\n}\n","import { provide, getCurrentInstance, onUnmounted } from 'vue';\nimport { INJECTOR_KEY } from './constants';\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { inject } from './fakeInject';\nimport { createInjector } from './utils';\n\n/**\n * 类组件可以通过装饰器声明providers,内部实际上也是调用的declareProviders方法\n * 但是options组件或者defineComponent组件则必须在setup函数中手动调用declareProviders方法\n * 我有考虑过增加一个option,比如providers,就像vue-rx增加了subscriptions属性一样。\n * 最终没有实现,是因为一方面实现成本有点高(我不会。。。)\n * 还有一种思路就是包装defineComponent,代理setup函数,把providers属性转为declareProviders函数调用。\n * 这种做法的成本是最低的,但是有两点限制,第一用户可以不使用defineComponent来定义组件,第二用户得转变使用习惯,从我的包里面导入defineComponent\n * 还考虑到官网的示例代码中也是直接在setup函数中调用provide函数,而且vue2.x版本中就是采用的provide/inject属性来配置。vue3中已经转为函数了\n * 我觉得我也没有必要一定为了追求声明式代码,强制实现声明式功能\n *\n * 1. 需要解决重复调用的问题\n * 2. 不能直接利用原型来索引,因为provide不仅仅是string|symbol,还可能是类\n * 从这个角度来看,我的declareProviders可以看作是原生vue的provide的升级版本\n *\n * @export\n * @param {any[]} providers\n */\nexport function declareProviders(providers: any[]) {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error('declareProviders can only be used inside setup function.');\n }\n const parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n if (parentInjector.uid === instance.uid) {\n throw new Error('declareProviders can only be called once.');\n }\n const currentInjector = createInjector(providers, parentInjector);\n (<any>currentInjector).uid = instance.uid;\n\n onUnmounted(() => {\n currentInjector.dispose();\n });\n\n provide(INJECTOR_KEY, currentInjector);\n}\n\n/**\n * 实际上所有Injectable的Class都是兜底到root injector中\n * 不需要特意调用declareRootProviders声明\n * 这个方法是用于声明不是Injectable的Class的其他类型的Provider\n * @param providers\n */\nexport function declareRootProviders(providers: any[]) {\n DEFAULT_INJECTOR.addProviders(providers);\n}\n","import { inject } from './fakeInject';\n\nimport { INJECTOR_KEY } from './constants';\n\nimport { DEFAULT_INJECTOR } from './defaultInjector';\n\nimport { getServiceFromInjector } from './utils';\n\nimport { Ref } from 'vue';\n\nimport { InjectionKey } from '@kaokei/di';\n\ntype Ret<T> = T extends new (...args: any) => infer S\n ? S\n : T extends InjectionKey<infer M>\n ? Ret<M>\n : T extends string | number | boolean\n ? Ref<T>\n : T extends Array<any>\n ? { [P in keyof T]: Ret<T[P]> }\n : T;\n\nexport function useService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useService(token: any, options?: any) {\n const currentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);\n return getServiceFromInjector(currentInjector, token, options);\n}\n\nexport function useRootService<R, T = unknown>(\n token: T,\n options?: any\n): T extends R ? Ret<T> : Ret<R>;\nexport function useRootService(token: any, options?: any) {\n return getServiceFromInjector(DEFAULT_INJECTOR, token, options);\n}\n"],"names":["INJECTOR_KEY","DEFAULT_BEFORE_CACHE_HOOK","service","_typeof","reactive","ref","DEFAULT_MERGE_PROPERTY_HOOK","target","source","key","has","proxyRefs","createInjector","provides","parentInjector","options","beforeCacheHook","mergePropertyHook","Injector","getServiceFromInjector","injector","token","Array","isArray","map","t","get","DEFAULT_INJECTOR","inject","defaultValue","instance","getCurrentInstance","console","warn","declareProviders","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","declareRootProviders","addProviders","useService","useRootService"],"mappings":";;;;;;;;;4LAAaA,EAAe,+BCG5B,SAASC,EAA0BC,UAC7BA,GAA8B,WAAnBC,EAAOD,GACbE,EAASF,GAETG,EAAIH,GAIf,SAASI,EAA4BC,EAAaC,OAC3C,IAAMC,KAAOD,EACZE,EAAIF,EAAQC,KACdF,EAAOE,GAAOE,EAAUH,EAAOC,YAG5BF,WAGOK,EACdC,EACAC,OACAC,yDAAe,UAEfA,EAAQC,gBACND,EAAQC,iBAAmBf,EAC7Bc,EAAQE,kBACNF,EAAQE,mBAAqBX,EACxB,IAAIY,EAASL,EAAUC,EAAgBC,YAGhCI,EACdC,EACAC,EACAN,UAEIO,MAAMC,QAAQF,GACTA,EAAMG,KAAI,SAAAC,UAAKL,EAASM,IAAID,EAAGV,MAEjCK,EAASM,IAAIL,EAAON,OCtChBY,EAAmBf,aCShBgB,EAAOnB,EAAUoB,OACzBC,EAAgBC,OAClBD,SACeA,EAASjB,SACVJ,IAAQoB,EAExBG,QAAQC,oFCOIC,EAAiBC,OACzBL,EAAWC,QACZD,QACG,IAAIM,MAAM,gEAEZtB,EAAiBc,EAAO5B,EAAc2B,MACxCb,EAAeuB,MAAQP,EAASO,UAC5B,IAAID,MAAM,iDAEZE,EAAkB1B,EAAeuB,EAAWrB,GAC5CwB,EAAiBD,IAAMP,EAASO,IAEtCE,GAAY,WACVD,EAAgBE,aAGlBC,EAAQzC,EAAcsC,YASRI,EAAqBP,GACnCR,EAAiBgB,aAAaR,YCxBhBS,EAAWvB,EAAYN,UAE9BI,EADiBS,EAAO5B,EAAc2B,GACEN,EAAON,YAOxC8B,EAAexB,EAAYN,UAClCI,EAAuBQ,EAAkBN,EAAON"}