@kaokei/use-vue-service 1.1.1 → 2.0.0
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.cjs.js +14 -6
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +2 -2
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.cjs.runtime.js +14 -6
- package/dist/index.cjs.runtime.js.map +1 -1
- package/dist/index.cjs.runtime.min.js +2 -2
- package/dist/index.cjs.runtime.min.js.map +1 -1
- package/dist/index.esm.js +14 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +2 -2
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.esm.runtime.js +14 -6
- package/dist/index.esm.runtime.js.map +1 -1
- package/dist/index.esm.runtime.min.js +2 -2
- package/dist/index.esm.runtime.min.js.map +1 -1
- package/dist/index.iife.js +14 -6
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +2 -2
- package/dist/index.iife.min.js.map +1 -1
- package/dist/src/declareProviders.d.ts +6 -0
- package/dist/src/declareProviders.d.ts.map +1 -1
- package/dist/src/defaultInjector.d.ts.map +1 -1
- package/dist/src/fakeInject.d.ts +1 -0
- package/dist/src/fakeInject.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils.d.ts +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/CHANGELOG.md +0 -79
package/dist/index.cjs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @kaokei/use-vue-service
|
|
3
3
|
* Use angular service in vue.
|
|
4
4
|
*
|
|
5
|
-
* @version
|
|
5
|
+
* @version 2.0.0
|
|
6
6
|
* @author kaokei
|
|
7
7
|
* @license MIT
|
|
8
8
|
* @link https://github.com/kaokei/use-vue-service
|
|
@@ -39,7 +39,7 @@ function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
|
|
|
39
39
|
return target;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
function
|
|
42
|
+
function createInjector(provides, parentInjector) {
|
|
43
43
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
44
44
|
options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
|
|
45
45
|
options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
|
|
@@ -56,9 +56,10 @@ function getServiceFromInjector(injector, token, options) {
|
|
|
56
56
|
return injector.get(token, options);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
var DEFAULT_INJECTOR =
|
|
59
|
+
var DEFAULT_INJECTOR = createInjector();
|
|
60
60
|
/**
|
|
61
61
|
* 从当前组件开始查找provider
|
|
62
|
+
* 注意到vue本身的inject是默认从父级组件开始查找
|
|
62
63
|
*
|
|
63
64
|
* @export
|
|
64
65
|
* @param {*} key
|
|
@@ -105,16 +106,23 @@ function declareProviders(providers) {
|
|
|
105
106
|
var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
|
|
106
107
|
|
|
107
108
|
if (parentInjector.uid === instance.uid) {
|
|
108
|
-
throw new Error('declareProviders
|
|
109
|
+
throw new Error('declareProviders can only be called once.');
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
var currentInjector =
|
|
112
|
+
var currentInjector = createInjector(providers, parentInjector);
|
|
112
113
|
currentInjector.uid = instance.uid;
|
|
113
114
|
vue.onUnmounted(function () {
|
|
114
115
|
currentInjector.dispose();
|
|
115
116
|
});
|
|
116
117
|
vue.provide(INJECTOR_KEY, currentInjector);
|
|
117
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
121
|
+
* 不需要特意调用declareRootProviders声明
|
|
122
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
123
|
+
* @param providers
|
|
124
|
+
*/
|
|
125
|
+
|
|
118
126
|
|
|
119
127
|
function declareRootProviders(providers) {
|
|
120
128
|
DEFAULT_INJECTOR.addProviders(providers);
|
|
@@ -131,9 +139,9 @@ function useRootService(token, options) {
|
|
|
131
139
|
|
|
132
140
|
exports.DEFAULT_INJECTOR = DEFAULT_INJECTOR;
|
|
133
141
|
exports.INJECTOR_KEY = INJECTOR_KEY;
|
|
142
|
+
exports.createInjector = createInjector;
|
|
134
143
|
exports.declareProviders = declareProviders;
|
|
135
144
|
exports.declareRootProviders = declareRootProviders;
|
|
136
|
-
exports.getInjector = getInjector;
|
|
137
145
|
exports.getServiceFromInjector = getServiceFromInjector;
|
|
138
146
|
exports.inject = inject;
|
|
139
147
|
exports.useRootService = useRootService;
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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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"}
|
package/dist/index.cjs.min.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @kaokei/use-vue-service
|
|
3
3
|
* Use angular service in vue.
|
|
4
4
|
*
|
|
5
|
-
* @version
|
|
5
|
+
* @version 2.0.0
|
|
6
6
|
* @author kaokei
|
|
7
7
|
* @license MIT
|
|
8
8
|
* @link https://github.com/kaokei/use-vue-service
|
|
9
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.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
|
|
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
11
|
//# sourceMappingURL=index.cjs.min.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @kaokei/use-vue-service
|
|
3
3
|
* Use angular service in vue.
|
|
4
4
|
*
|
|
5
|
-
* @version
|
|
5
|
+
* @version 2.0.0
|
|
6
6
|
* @author kaokei
|
|
7
7
|
* @license MIT
|
|
8
8
|
* @link https://github.com/kaokei/use-vue-service
|
|
@@ -39,7 +39,7 @@ function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
|
|
|
39
39
|
return target;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
function
|
|
42
|
+
function createInjector(provides, parentInjector) {
|
|
43
43
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
44
44
|
options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
|
|
45
45
|
options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
|
|
@@ -56,9 +56,10 @@ function getServiceFromInjector(injector, token, options) {
|
|
|
56
56
|
return injector.get(token, options);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
var DEFAULT_INJECTOR =
|
|
59
|
+
var DEFAULT_INJECTOR = createInjector();
|
|
60
60
|
/**
|
|
61
61
|
* 从当前组件开始查找provider
|
|
62
|
+
* 注意到vue本身的inject是默认从父级组件开始查找
|
|
62
63
|
*
|
|
63
64
|
* @export
|
|
64
65
|
* @param {*} key
|
|
@@ -105,16 +106,23 @@ function declareProviders(providers) {
|
|
|
105
106
|
var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
|
|
106
107
|
|
|
107
108
|
if (parentInjector.uid === instance.uid) {
|
|
108
|
-
throw new Error('declareProviders
|
|
109
|
+
throw new Error('declareProviders can only be called once.');
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
var currentInjector =
|
|
112
|
+
var currentInjector = createInjector(providers, parentInjector);
|
|
112
113
|
currentInjector.uid = instance.uid;
|
|
113
114
|
vue.onUnmounted(function () {
|
|
114
115
|
currentInjector.dispose();
|
|
115
116
|
});
|
|
116
117
|
vue.provide(INJECTOR_KEY, currentInjector);
|
|
117
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
121
|
+
* 不需要特意调用declareRootProviders声明
|
|
122
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
123
|
+
* @param providers
|
|
124
|
+
*/
|
|
125
|
+
|
|
118
126
|
|
|
119
127
|
function declareRootProviders(providers) {
|
|
120
128
|
DEFAULT_INJECTOR.addProviders(providers);
|
|
@@ -131,9 +139,9 @@ function useRootService(token, options) {
|
|
|
131
139
|
|
|
132
140
|
exports.DEFAULT_INJECTOR = DEFAULT_INJECTOR;
|
|
133
141
|
exports.INJECTOR_KEY = INJECTOR_KEY;
|
|
142
|
+
exports.createInjector = createInjector;
|
|
134
143
|
exports.declareProviders = declareProviders;
|
|
135
144
|
exports.declareRootProviders = declareRootProviders;
|
|
136
|
-
exports.getInjector = getInjector;
|
|
137
145
|
exports.getServiceFromInjector = getServiceFromInjector;
|
|
138
146
|
exports.inject = inject;
|
|
139
147
|
exports.useRootService = useRootService;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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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"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @kaokei/use-vue-service
|
|
3
3
|
* Use angular service in vue.
|
|
4
4
|
*
|
|
5
|
-
* @version
|
|
5
|
+
* @version 2.0.0
|
|
6
6
|
* @author kaokei
|
|
7
7
|
* @license MIT
|
|
8
8
|
* @link https://github.com/kaokei/use-vue-service
|
|
9
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"),
|
|
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
11
|
//# sourceMappingURL=index.cjs.runtime.min.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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
CHANGED
|
@@ -4,7 +4,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
|
|
|
4
4
|
* @kaokei/use-vue-service
|
|
5
5
|
* Use angular service in vue.
|
|
6
6
|
*
|
|
7
|
-
* @version
|
|
7
|
+
* @version 2.0.0
|
|
8
8
|
* @author kaokei
|
|
9
9
|
* @license MIT
|
|
10
10
|
* @link https://github.com/kaokei/use-vue-service
|
|
@@ -32,7 +32,7 @@ function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
|
|
|
32
32
|
return target;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
function
|
|
35
|
+
function createInjector(provides, parentInjector) {
|
|
36
36
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
37
37
|
options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
|
|
38
38
|
options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
|
|
@@ -49,9 +49,10 @@ function getServiceFromInjector(injector, token, options) {
|
|
|
49
49
|
return injector.get(token, options);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
var DEFAULT_INJECTOR =
|
|
52
|
+
var DEFAULT_INJECTOR = createInjector();
|
|
53
53
|
/**
|
|
54
54
|
* 从当前组件开始查找provider
|
|
55
|
+
* 注意到vue本身的inject是默认从父级组件开始查找
|
|
55
56
|
*
|
|
56
57
|
* @export
|
|
57
58
|
* @param {*} key
|
|
@@ -98,16 +99,23 @@ function declareProviders(providers) {
|
|
|
98
99
|
var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
|
|
99
100
|
|
|
100
101
|
if (parentInjector.uid === instance.uid) {
|
|
101
|
-
throw new Error('declareProviders
|
|
102
|
+
throw new Error('declareProviders can only be called once.');
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
var currentInjector =
|
|
105
|
+
var currentInjector = createInjector(providers, parentInjector);
|
|
105
106
|
currentInjector.uid = instance.uid;
|
|
106
107
|
onUnmounted(function () {
|
|
107
108
|
currentInjector.dispose();
|
|
108
109
|
});
|
|
109
110
|
provide(INJECTOR_KEY, currentInjector);
|
|
110
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
114
|
+
* 不需要特意调用declareRootProviders声明
|
|
115
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
116
|
+
* @param providers
|
|
117
|
+
*/
|
|
118
|
+
|
|
111
119
|
|
|
112
120
|
function declareRootProviders(providers) {
|
|
113
121
|
DEFAULT_INJECTOR.addProviders(providers);
|
|
@@ -122,5 +130,5 @@ function useRootService(token, options) {
|
|
|
122
130
|
return getServiceFromInjector(DEFAULT_INJECTOR, token, options);
|
|
123
131
|
}
|
|
124
132
|
|
|
125
|
-
export { DEFAULT_INJECTOR, INJECTOR_KEY, declareProviders, declareRootProviders,
|
|
133
|
+
export { DEFAULT_INJECTOR, INJECTOR_KEY, createInjector, declareProviders, declareRootProviders, getServiceFromInjector, inject, useRootService, useService };
|
|
126
134
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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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"}
|
package/dist/index.esm.min.js
CHANGED
|
@@ -3,9 +3,9 @@ function o(r){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterat
|
|
|
3
3
|
* @kaokei/use-vue-service
|
|
4
4
|
* Use angular service in vue.
|
|
5
5
|
*
|
|
6
|
-
* @version
|
|
6
|
+
* @version 2.0.0
|
|
7
7
|
* @author kaokei
|
|
8
8
|
* @license MIT
|
|
9
9
|
* @link https://github.com/kaokei/use-vue-service
|
|
10
|
-
*/}import{Injector as r,has as
|
|
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
11
|
//# sourceMappingURL=index.esm.min.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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"}
|
|
@@ -4,7 +4,7 @@ import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
|
4
4
|
* @kaokei/use-vue-service
|
|
5
5
|
* Use angular service in vue.
|
|
6
6
|
*
|
|
7
|
-
* @version
|
|
7
|
+
* @version 2.0.0
|
|
8
8
|
* @author kaokei
|
|
9
9
|
* @license MIT
|
|
10
10
|
* @link https://github.com/kaokei/use-vue-service
|
|
@@ -32,7 +32,7 @@ function DEFAULT_MERGE_PROPERTY_HOOK(target, source) {
|
|
|
32
32
|
return target;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
function
|
|
35
|
+
function createInjector(provides, parentInjector) {
|
|
36
36
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
37
37
|
options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
|
|
38
38
|
options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
|
|
@@ -49,9 +49,10 @@ function getServiceFromInjector(injector, token, options) {
|
|
|
49
49
|
return injector.get(token, options);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
var DEFAULT_INJECTOR =
|
|
52
|
+
var DEFAULT_INJECTOR = createInjector();
|
|
53
53
|
/**
|
|
54
54
|
* 从当前组件开始查找provider
|
|
55
|
+
* 注意到vue本身的inject是默认从父级组件开始查找
|
|
55
56
|
*
|
|
56
57
|
* @export
|
|
57
58
|
* @param {*} key
|
|
@@ -98,16 +99,23 @@ function declareProviders(providers) {
|
|
|
98
99
|
var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
|
|
99
100
|
|
|
100
101
|
if (parentInjector.uid === instance.uid) {
|
|
101
|
-
throw new Error('declareProviders
|
|
102
|
+
throw new Error('declareProviders can only be called once.');
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
var currentInjector =
|
|
105
|
+
var currentInjector = createInjector(providers, parentInjector);
|
|
105
106
|
currentInjector.uid = instance.uid;
|
|
106
107
|
onUnmounted(function () {
|
|
107
108
|
currentInjector.dispose();
|
|
108
109
|
});
|
|
109
110
|
provide(INJECTOR_KEY, currentInjector);
|
|
110
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
114
|
+
* 不需要特意调用declareRootProviders声明
|
|
115
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
116
|
+
* @param providers
|
|
117
|
+
*/
|
|
118
|
+
|
|
111
119
|
|
|
112
120
|
function declareRootProviders(providers) {
|
|
113
121
|
DEFAULT_INJECTOR.addProviders(providers);
|
|
@@ -122,5 +130,5 @@ function useRootService(token, options) {
|
|
|
122
130
|
return getServiceFromInjector(DEFAULT_INJECTOR, token, options);
|
|
123
131
|
}
|
|
124
132
|
|
|
125
|
-
export { DEFAULT_INJECTOR, INJECTOR_KEY, declareProviders, declareRootProviders,
|
|
133
|
+
export { DEFAULT_INJECTOR, INJECTOR_KEY, createInjector, declareProviders, declareRootProviders, getServiceFromInjector, inject, useRootService, useService };
|
|
126
134
|
//# sourceMappingURL=index.esm.runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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
|
|
1
|
+
{"version":3,"file":"index.esm.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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"}
|
|
@@ -3,9 +3,9 @@ import r from"@babel/runtime/helpers/esm/typeof";
|
|
|
3
3
|
* @kaokei/use-vue-service
|
|
4
4
|
* Use angular service in vue.
|
|
5
5
|
*
|
|
6
|
-
* @version
|
|
6
|
+
* @version 2.0.0
|
|
7
7
|
* @author kaokei
|
|
8
8
|
* @license MIT
|
|
9
9
|
* @link https://github.com/kaokei/use-vue-service
|
|
10
|
-
*/import{Injector as e,has as o}from"@kaokei/di";export*from"@kaokei/di";import{reactive as n,ref as i,proxyRefs as t,getCurrentInstance as u,onUnmounted as
|
|
10
|
+
*/import{Injector as e,has as o}from"@kaokei/di";export*from"@kaokei/di";import{reactive as n,ref as i,proxyRefs as t,getCurrentInstance as u,onUnmounted as c,provide as a}from"vue";var f="USE_VUE_SERVICE_INJECTOR_KEY";function d(e){return e&&"object"===r(e)?n(e):i(e)}function s(r,e){for(var n in e)o(e,n)&&(r[n]=t(e[n]));return r}function p(r,o){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.beforeCacheHook=n.beforeCacheHook||d,n.mergePropertyHook=n.mergePropertyHook||s,new e(r,o,n)}function v(r,e,o){return Array.isArray(e)?e.map((function(e){return r.get(e,o)})):r.get(e,o)}var m=p();function l(r,e){var o=u();if(o)return o.provides[r]||e;console.warn("inject() can only be used inside setup() or functional components.")}function b(r){var e=u();if(!e)throw new Error("declareProviders can only be used inside setup function.");var o=l(f,m);if(o.uid===e.uid)throw new Error("declareProviders can only be called once.");var n=p(r,o);n.uid=e.uid,c((function(){n.dispose()})),a(f,n)}function k(r){m.addProviders(r)}function y(r,e){return v(l(f,m),r,e)}function E(r,e){return v(m,r,e)}export{m as DEFAULT_INJECTOR,f as INJECTOR_KEY,p as createInjector,b as declareProviders,k as declareRootProviders,v as getServiceFromInjector,l as inject,E as useRootService,y as useService};
|
|
11
11
|
//# sourceMappingURL=index.esm.runtime.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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
|
|
1
|
+
{"version":3,"file":"index.esm.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","declareProviders","providers","Error","uid","currentInjector","onUnmounted","dispose","provide","declareRootProviders","addProviders","useService","useRootService"],"mappings":";;;;;;;;;2LAAaA,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"}
|
package/dist/index.iife.js
CHANGED
|
@@ -4,7 +4,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
|
|
|
4
4
|
* @kaokei/use-vue-service
|
|
5
5
|
* Use angular service in vue.
|
|
6
6
|
*
|
|
7
|
-
* @version
|
|
7
|
+
* @version 2.0.0
|
|
8
8
|
* @author kaokei
|
|
9
9
|
* @license MIT
|
|
10
10
|
* @link https://github.com/kaokei/use-vue-service
|
|
@@ -32,7 +32,7 @@ var UseVueService = function (exports, di, vue) {
|
|
|
32
32
|
return target;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
function
|
|
35
|
+
function createInjector(provides, parentInjector) {
|
|
36
36
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
37
37
|
options.beforeCacheHook = options.beforeCacheHook || DEFAULT_BEFORE_CACHE_HOOK;
|
|
38
38
|
options.mergePropertyHook = options.mergePropertyHook || DEFAULT_MERGE_PROPERTY_HOOK;
|
|
@@ -49,9 +49,10 @@ var UseVueService = function (exports, di, vue) {
|
|
|
49
49
|
return injector.get(token, options);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
var DEFAULT_INJECTOR =
|
|
52
|
+
var DEFAULT_INJECTOR = createInjector();
|
|
53
53
|
/**
|
|
54
54
|
* 从当前组件开始查找provider
|
|
55
|
+
* 注意到vue本身的inject是默认从父级组件开始查找
|
|
55
56
|
*
|
|
56
57
|
* @export
|
|
57
58
|
* @param {*} key
|
|
@@ -98,16 +99,23 @@ var UseVueService = function (exports, di, vue) {
|
|
|
98
99
|
var parentInjector = inject(INJECTOR_KEY, DEFAULT_INJECTOR);
|
|
99
100
|
|
|
100
101
|
if (parentInjector.uid === instance.uid) {
|
|
101
|
-
throw new Error('declareProviders
|
|
102
|
+
throw new Error('declareProviders can only be called once.');
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
var currentInjector =
|
|
105
|
+
var currentInjector = createInjector(providers, parentInjector);
|
|
105
106
|
currentInjector.uid = instance.uid;
|
|
106
107
|
vue.onUnmounted(function () {
|
|
107
108
|
currentInjector.dispose();
|
|
108
109
|
});
|
|
109
110
|
vue.provide(INJECTOR_KEY, currentInjector);
|
|
110
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
114
|
+
* 不需要特意调用declareRootProviders声明
|
|
115
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
116
|
+
* @param providers
|
|
117
|
+
*/
|
|
118
|
+
|
|
111
119
|
|
|
112
120
|
function declareRootProviders(providers) {
|
|
113
121
|
DEFAULT_INJECTOR.addProviders(providers);
|
|
@@ -124,9 +132,9 @@ var UseVueService = function (exports, di, vue) {
|
|
|
124
132
|
|
|
125
133
|
exports.DEFAULT_INJECTOR = DEFAULT_INJECTOR;
|
|
126
134
|
exports.INJECTOR_KEY = INJECTOR_KEY;
|
|
135
|
+
exports.createInjector = createInjector;
|
|
127
136
|
exports.declareProviders = declareProviders;
|
|
128
137
|
exports.declareRootProviders = declareRootProviders;
|
|
129
|
-
exports.getInjector = getInjector;
|
|
130
138
|
exports.getServiceFromInjector = getServiceFromInjector;
|
|
131
139
|
exports.inject = inject;
|
|
132
140
|
exports.useRootService = useRootService;
|
package/dist/index.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.iife.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
|
|
1
|
+
{"version":3,"file":"index.iife.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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"}
|
package/dist/index.iife.min.js
CHANGED
|
@@ -3,9 +3,9 @@ function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof S
|
|
|
3
3
|
* @kaokei/use-vue-service
|
|
4
4
|
* Use angular service in vue.
|
|
5
5
|
*
|
|
6
|
-
* @version
|
|
6
|
+
* @version 2.0.0
|
|
7
7
|
* @author kaokei
|
|
8
8
|
* @license MIT
|
|
9
9
|
* @link https://github.com/kaokei/use-vue-service
|
|
10
|
-
*/}var UseVueService=function(e,r,o){"use strict";var n="USE_VUE_SERVICE_INJECTOR_KEY";function t(e){return e&&"object"===_typeof(e)?o.reactive(e):o.ref(e)}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 f=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 s in e.DEFAULT_INJECTOR=f,e.INJECTOR_KEY=n,e.declareProviders=function(e){var r=o.getCurrentInstance();if(!r)throw new Error("declareProviders can only be used inside setup function.");var t=a(n,f);if(t.uid===r.uid)throw new Error("declareProviders
|
|
10
|
+
*/}var UseVueService=function(e,r,o){"use strict";var n="USE_VUE_SERVICE_INJECTOR_KEY";function t(e){return e&&"object"===_typeof(e)?o.reactive(e):o.ref(e)}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 f=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 s in e.DEFAULT_INJECTOR=f,e.INJECTOR_KEY=n,e.createInjector=u,e.declareProviders=function(e){var r=o.getCurrentInstance();if(!r)throw new Error("declareProviders can only be used inside setup function.");var t=a(n,f);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)},e.declareRootProviders=function(e){f.addProviders(e)},e.getServiceFromInjector=c,e.inject=a,e.useRootService=function(e,r){return c(f,e,r)},e.useService=function(e,r){return c(a(n,f),e,r)},r)"default"===s||e.hasOwnProperty(s)||(e[s]=r[s]);return Object.defineProperty(e,"__esModule",{value:!0}),e}({},DI,Vue);
|
|
11
11
|
//# sourceMappingURL=index.iife.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.iife.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
|
|
1
|
+
{"version":3,"file":"index.iife.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":";;;;;;;;;uDAAaA,EAAe,wCCGnBC,EAA0BC,UAC7BA,GAA8B,WAAnBC,QAAOD,GACbE,WAASF,GAETG,MAAIH,YAINI,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,6KCOqBC,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,oCASaH,GACnCP,EAAiBc,aAAaP,oECfDb,EAAYN,UAClCI,EAAuBQ,EAAkBN,EAAON,0BAV9BM,EAAYN,UAE9BI,EADiBS,EAAO5B,EAAc2B,GACEN,EAAON"}
|
|
@@ -16,5 +16,11 @@
|
|
|
16
16
|
* @param {any[]} providers
|
|
17
17
|
*/
|
|
18
18
|
export declare function declareProviders(providers: any[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* 实际上所有Injectable的Class都是兜底到root injector中
|
|
21
|
+
* 不需要特意调用declareRootProviders声明
|
|
22
|
+
* 这个方法是用于声明不是Injectable的Class的其他类型的Provider
|
|
23
|
+
* @param providers
|
|
24
|
+
*/
|
|
19
25
|
export declare function declareRootProviders(providers: any[]): void;
|
|
20
26
|
//# sourceMappingURL=declareProviders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declareProviders.d.ts","sourceRoot":"","sources":["declareProviders.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAiBhD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,QAEpD"}
|
|
1
|
+
{"version":3,"file":"declareProviders.d.ts","sourceRoot":"","sources":["declareProviders.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAiBhD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,QAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultInjector.d.ts","sourceRoot":"","sources":["defaultInjector.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,+
|
|
1
|
+
{"version":3,"file":"defaultInjector.d.ts","sourceRoot":"","sources":["defaultInjector.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,+BAAmB,CAAC"}
|
package/dist/src/fakeInject.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeInject.d.ts","sourceRoot":"","sources":["fakeInject.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"fakeInject.d.ts","sourceRoot":"","sources":["fakeInject.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,OAUjD"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export { useService, useRootService } from './useService';
|
|
|
4
4
|
export { INJECTOR_KEY } from './constants';
|
|
5
5
|
export { DEFAULT_INJECTOR } from './defaultInjector';
|
|
6
6
|
export { inject } from './fakeInject';
|
|
7
|
-
export {
|
|
7
|
+
export { createInjector, getServiceFromInjector } from './utils';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Injector } from '@kaokei/di';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function createInjector(provides?: any[], parentInjector?: Injector, options?: any): Injector;
|
|
3
3
|
export declare function getServiceFromInjector(injector: Injector, token: any, options?: any): any;
|
|
4
4
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAO,MAAM,YAAY,CAAC;AAmB3C,wBAAgB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAO,MAAM,YAAY,CAAC;AAmB3C,wBAAgB,cAAc,CAC5B,QAAQ,CAAC,EAAE,GAAG,EAAE,EAChB,cAAc,CAAC,EAAE,QAAQ,EACzB,OAAO,GAAE,GAAQ,YAOlB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,GAAG,OAMd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaokei/use-vue-service",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Use angular service in vue.",
|
|
5
5
|
"main": "./dist/index.cjs.runtime.min.js",
|
|
6
6
|
"module": "./dist/index.esm.runtime.min.js",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"commit": "git-cz"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@kaokei/di": "^
|
|
51
|
+
"@kaokei/di": "^2.0.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"reflect-metadata": "^0.1.13",
|
package/CHANGELOG.md
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
-
|
|
5
|
-
### [1.1.1](https://github.com/kaokei/use-vue-service/compare/v1.1.0...v1.1.1) (2022-03-30)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
### Bug Fixes
|
|
9
|
-
|
|
10
|
-
* **useservice:** 支持InjectionKey ([17313cd](https://github.com/kaokei/use-vue-service/commit/17313cd116176b8e4a45aaf05e4901514c3125b8))
|
|
11
|
-
|
|
12
|
-
## [1.1.0](https://github.com/kaokei/use-vue-service/compare/v1.0.18...v1.1.0) (2022-02-16)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
### Features
|
|
16
|
-
|
|
17
|
-
* **bootstrap:** 删除bootstrap功能 ([de43690](https://github.com/kaokei/use-vue-service/commit/de43690c532209859b94f53652e248a455a56eb1))
|
|
18
|
-
* **di:** 基于新版di重新重构了一般,并完善了单元测试用例 ([845c8f9](https://github.com/kaokei/use-vue-service/commit/845c8f9e2df5de19f7cef2b7035770a8070870be))
|
|
19
|
-
|
|
20
|
-
### [1.0.18](https://github.com/kaokei/use-vue-service/compare/v1.0.17...v1.0.18) (2021-11-24)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
### Features
|
|
24
|
-
|
|
25
|
-
* **bootstrap:** 增加bootstrap启动vue应用的入口 ([d7f1fca](https://github.com/kaokei/use-vue-service/commit/d7f1fca7711a7c22e599bdf68278cdc8a66fdad5))
|
|
26
|
-
* **bootstrap:** 重构了bootstrap逻辑 ([9cb1cae](https://github.com/kaokei/use-vue-service/commit/9cb1cae170352ddb26e2451e0b97a2a2015c1b4b))
|
|
27
|
-
|
|
28
|
-
### [1.0.17](https://github.com/kaokei/use-vue-service/compare/v1.0.16...v1.0.17) (2021-10-12)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
### Features
|
|
32
|
-
|
|
33
|
-
* **useservice:** 直接获取根injector中的服务 ([92f1d0d](https://github.com/kaokei/use-vue-service/commit/92f1d0d77661c582ed89cecc55bede01252330d0))
|
|
34
|
-
|
|
35
|
-
### [1.0.16](https://github.com/kaokei/use-vue-service/compare/v1.0.15...v1.0.16) (2021-10-07)
|
|
36
|
-
|
|
37
|
-
### [1.0.15](https://github.com/kaokei/use-vue-service/compare/v1.0.14...v1.0.15) (2021-08-22)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
### Features
|
|
41
|
-
|
|
42
|
-
* **update:** 升级@kaokei/di ([6064c4e](https://github.com/kaokei/use-vue-service/commit/6064c4e1b7fcd102f287bea03a1984c1621d2884))
|
|
43
|
-
|
|
44
|
-
### [1.0.14](https://github.com/kaokei/use-vue-service/compare/v1.0.13...v1.0.14) (2021-08-06)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
### Features
|
|
48
|
-
|
|
49
|
-
* **dispose:** 删除了vue-class-component,并支持了服务的dispose功能 ([cad0454](https://github.com/kaokei/use-vue-service/commit/cad045461b6fd617a85456cc98a45ecf42406341))
|
|
50
|
-
* **example:** 增加__DEV__ ([757b7ef](https://github.com/kaokei/use-vue-service/commit/757b7ef6866ad16d3a77b2d3ec4e0648bcba7369))
|
|
51
|
-
* **plugin:** 支持vue plugin ([a4cee12](https://github.com/kaokei/use-vue-service/commit/a4cee12f1607dbee81dae5f0cf55efdbcae29be1))
|
|
52
|
-
|
|
53
|
-
### [1.0.13](https://github.com/kaokei/use-vue-service/compare/v1.0.12...v1.0.13) (2021-06-30)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
### Bug Fixes
|
|
57
|
-
|
|
58
|
-
* **ci:** add globals ([49b3d34](https://github.com/kaokei/use-vue-service/commit/49b3d3408d2caeaa767195551e7c152cd97cbff6))
|
|
59
|
-
|
|
60
|
-
### [1.0.12](https://github.com/kaokei/use-vue-service/compare/v1.0.11...v1.0.12) (2021-06-30)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
### Bug Fixes
|
|
64
|
-
|
|
65
|
-
* **ci:** inline @kaokei/di ([7ced072](https://github.com/kaokei/use-vue-service/commit/7ced07291f45cd380f26da96a650a8581c9e6c8e))
|
|
66
|
-
|
|
67
|
-
### 1.0.11 (2021-06-30)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
### Features
|
|
71
|
-
|
|
72
|
-
* **di:** use @kaokei/di to support di ([e937cba](https://github.com/kaokei/use-vue-service/commit/e937cba4379ec87a3b139a6132509b5216409c09))
|
|
73
|
-
|
|
74
|
-
### 1.0.3 (2021-06-30)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
### Features
|
|
78
|
-
|
|
79
|
-
* **di:** use @kaokei/di to support di ([e937cba](https://github.com/kaokei/use-vue-service/commit/e937cba4379ec87a3b139a6132509b5216409c09))
|