@servicetitan/react-ioc 33.1.1 → 34.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +1 -1
- package/dist/common.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inject-dependency.d.ts.map +1 -1
- package/dist/inject-dependency.js.map +1 -1
- package/dist/provide.d.ts +1 -1
- package/dist/provide.d.ts.map +1 -1
- package/dist/provide.js.map +1 -1
- package/dist/provider.d.ts +2 -2
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +1 -1
- package/dist/provider.js.map +1 -1
- package/dist/use-dependencies.d.ts.map +1 -1
- package/dist/use-dependencies.js +2 -3
- package/dist/use-dependencies.js.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/await.test.tsx +1 -2
- package/src/__tests__/provide.test.tsx +0 -1
- package/src/__tests__/provider.test.tsx +3 -4
- package/src/__tests__/react-ioc.test.tsx +5 -5
- package/src/common.tsx +1 -2
- package/src/index.ts +3 -3
- package/src/inject-dependency.ts +0 -1
- package/src/provide.tsx +1 -2
- package/src/provider.tsx +2 -4
- package/src/use-dependencies.ts +1 -2
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGlD,eAAO,MAAM,aAAa,WAAkB,CAAC;AAE7C,eAAO,MAAM,gBAAgB,oCAA+B,CAAC;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AACtD,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAE/E"}
|
package/dist/common.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createContext } from 'react';
|
|
2
1
|
import { Container } from 'inversify';
|
|
2
|
+
import { createContext } from 'react';
|
|
3
3
|
export const rootContainer = new Container();
|
|
4
4
|
export const ContainerContext = /*#__PURE__*/ createContext(rootContainer);
|
|
5
5
|
export function symbolToken(key, global = true) {
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../src/common.tsx"],"sourcesContent":["import { Container, interfaces } from 'inversify';\nimport { createContext } from 'react';\n\nexport const rootContainer = new Container();\n\nexport const ContainerContext = createContext(rootContainer);\n\nexport type Token<T> = SymbolToken<T> | interfaces.Newable<T> | Function;\n\nexport type SymbolToken<T> = symbol & { typeRef?: T };\nexport function symbolToken<T = any>(key: string, global = true): SymbolToken<T> {\n return global ? Symbol.for(key) : Symbol(key);\n}\n"],"names":["Container","createContext","rootContainer","ContainerContext","symbolToken","key","global","Symbol","for"],"mappings":"AAAA,SAASA,SAAS,QAAoB,YAAY;AAClD,SAASC,aAAa,QAAQ,QAAQ;AAEtC,OAAO,MAAMC,gBAAgB,IAAIF,YAAY;AAE7C,OAAO,MAAMG,iCAAmBF,cAAcC,eAAe;AAK7D,OAAO,SAASE,YAAqBC,GAAW,EAAEC,SAAS,IAAI;IAC3D,OAAOA,SAASC,OAAOC,GAAG,CAACH,OAAOE,OAAOF;AAC7C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
export type { Token, SymbolToken } from './common';
|
|
3
2
|
export { rootContainer, symbolToken } from './common';
|
|
3
|
+
export type { SymbolToken, Token } from './common';
|
|
4
4
|
export { injectDependency } from './inject-dependency';
|
|
5
5
|
export { provide } from './provide';
|
|
6
|
-
export type { ProviderProps } from './provider';
|
|
7
6
|
export { Provider } from './provider';
|
|
7
|
+
export type { ProviderProps } from './provider';
|
|
8
8
|
export { Store } from './store';
|
|
9
9
|
export { useDependencies, useOptionalDependencies } from './use-dependencies';
|
|
10
|
+
export { Container, inject, injectable, optional, unmanaged } from 'inversify';
|
|
10
11
|
export type { interfaces } from 'inversify';
|
|
11
|
-
export { Container, injectable, inject, optional, unmanaged } from 'inversify';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,6 @@ export { provide } from './provide';
|
|
|
5
5
|
export { Provider } from './provider';
|
|
6
6
|
export { Store } from './store';
|
|
7
7
|
export { useDependencies, useOptionalDependencies } from './use-dependencies';
|
|
8
|
-
export { Container,
|
|
8
|
+
export { Container, inject, injectable, optional, unmanaged } from 'inversify';
|
|
9
9
|
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import 'reflect-metadata';\n\nexport
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import 'reflect-metadata';\n\nexport { rootContainer, symbolToken } from './common';\nexport type { SymbolToken, Token } from './common';\nexport { injectDependency } from './inject-dependency';\nexport { provide } from './provide';\nexport { Provider } from './provider';\nexport type { ProviderProps } from './provider';\nexport { Store } from './store';\nexport { useDependencies, useOptionalDependencies } from './use-dependencies';\n\nexport { Container, inject, injectable, optional, unmanaged } from 'inversify';\nexport type { interfaces } from 'inversify';\n"],"names":["rootContainer","symbolToken","injectDependency","provide","Provider","Store","useDependencies","useOptionalDependencies","Container","inject","injectable","optional","unmanaged"],"mappings":"AAAA,OAAO,mBAAmB;AAE1B,SAASA,aAAa,EAAEC,WAAW,QAAQ,WAAW;AAEtD,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,OAAO,QAAQ,YAAY;AACpC,SAASC,QAAQ,QAAQ,aAAa;AAEtC,SAASC,KAAK,QAAQ,UAAU;AAChC,SAASC,eAAe,EAAEC,uBAAuB,QAAQ,qBAAqB;AAE9E,SAASC,SAAS,EAAEC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-dependency.d.ts","sourceRoot":"","sources":["../src/inject-dependency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"inject-dependency.d.ts","sourceRoot":"","sources":["../src/inject-dependency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,WAAW,CAAC;AA+BrD,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAChE,OAAO,GAAG,EAAE,KAAK,MAAM,KAAG,IAAI,CAiClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/inject-dependency.ts"],"sourcesContent":["import { interfaces, METADATA_KEY } from 'inversify';\
|
|
1
|
+
{"version":3,"sources":["../src/inject-dependency.ts"],"sourcesContent":["import { interfaces, METADATA_KEY } from 'inversify';\nimport { ContainerContext } from './common';\n\nconst INJECTION = Symbol.for('INJECTION');\n\nfunction proxyGetter(\n proto: any,\n key: string,\n resolve: (componentInstance: any) => any,\n doCache: boolean\n) {\n function getter(this: any) {\n if (doCache && !Reflect.hasMetadata(INJECTION, this, key)) {\n Reflect.defineMetadata(INJECTION, resolve(this), this, key);\n }\n if (Reflect.hasMetadata(INJECTION, this, key)) {\n return Reflect.getMetadata(INJECTION, this, key);\n }\n return resolve(this);\n }\n function setter(this: any, newVal: any) {\n Reflect.defineMetadata(INJECTION, newVal, this, key);\n }\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: true,\n get: getter,\n set: setter,\n });\n}\n\nexport function injectDependency(serviceIdentifier: interfaces.ServiceIdentifier<any>) {\n return function (proto: any, key: string): void {\n const resolve = (componentInstance: any) => {\n if (!componentInstance.context) {\n throw new Error(\n \"Context doesn't exist on a target class. \" +\n 'Please make sure to pass context object to super method if you access injectable stores in constructor.'\n );\n }\n\n const metadata: Partial<interfaces.MetadataMap> =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, proto.constructor) || {};\n\n if (\n metadata[key]?.some(({ key, value }) => key === METADATA_KEY.OPTIONAL_TAG && value)\n ) {\n if (componentInstance.context.isBound(serviceIdentifier)) {\n return componentInstance.context.get(serviceIdentifier);\n }\n } else {\n return componentInstance.context.get(serviceIdentifier);\n }\n };\n\n if (proto.constructor.contextType && proto.constructor.contextType !== ContainerContext) {\n throw new Error(\n \"injectDependency can't be used together with contextType static property\"\n );\n }\n\n proto.constructor.contextType = ContainerContext;\n proxyGetter(proto, key, resolve, true);\n };\n}\n"],"names":["METADATA_KEY","ContainerContext","INJECTION","Symbol","for","proxyGetter","proto","key","resolve","doCache","getter","Reflect","hasMetadata","defineMetadata","getMetadata","setter","newVal","Object","defineProperty","configurable","enumerable","get","set","injectDependency","serviceIdentifier","componentInstance","metadata","context","Error","TAGGED_PROP","some","value","OPTIONAL_TAG","isBound","contextType"],"mappings":"AAAA,SAAqBA,YAAY,QAAQ,YAAY;AACrD,SAASC,gBAAgB,QAAQ,WAAW;AAE5C,MAAMC,YAAYC,OAAOC,GAAG,CAAC;AAE7B,SAASC,YACLC,KAAU,EACVC,GAAW,EACXC,OAAwC,EACxCC,OAAgB;IAEhB,SAASC;QACL,IAAID,WAAW,CAACE,QAAQC,WAAW,CAACV,WAAW,IAAI,EAAEK,MAAM;YACvDI,QAAQE,cAAc,CAACX,WAAWM,QAAQ,IAAI,GAAG,IAAI,EAAED;QAC3D;QACA,IAAII,QAAQC,WAAW,CAACV,WAAW,IAAI,EAAEK,MAAM;YAC3C,OAAOI,QAAQG,WAAW,CAACZ,WAAW,IAAI,EAAEK;QAChD;QACA,OAAOC,QAAQ,IAAI;IACvB;IACA,SAASO,OAAkBC,MAAW;QAClCL,QAAQE,cAAc,CAACX,WAAWc,QAAQ,IAAI,EAAET;IACpD;IACAU,OAAOC,cAAc,CAACZ,OAAOC,KAAK;QAC9BY,cAAc;QACdC,YAAY;QACZC,KAAKX;QACLY,KAAKP;IACT;AACJ;AAEA,OAAO,SAASQ,iBAAiBC,iBAAoD;IACjF,OAAO,SAAUlB,KAAU,EAAEC,GAAW;QACpC,MAAMC,UAAU,CAACiB;gBAaTC;YAZJ,IAAI,CAACD,kBAAkBE,OAAO,EAAE;gBAC5B,MAAM,IAAIC,MACN,8CACI;YAEZ;YAEA,MAAMF,WACF,wEAAwE;YACxEf,QAAQG,WAAW,CAACd,aAAa6B,WAAW,EAAEvB,MAAM,WAAW,KAAK,CAAC;YAEzE,KACIoB,gBAAAA,QAAQ,CAACnB,IAAI,cAAbmB,oCAAAA,cAAeI,IAAI,CAAC,CAAC,EAAEvB,GAAG,EAAEwB,KAAK,EAAE,GAAKxB,QAAQP,aAAagC,YAAY,IAAID,QAC/E;gBACE,IAAIN,kBAAkBE,OAAO,CAACM,OAAO,CAACT,oBAAoB;oBACtD,OAAOC,kBAAkBE,OAAO,CAACN,GAAG,CAACG;gBACzC;YACJ,OAAO;gBACH,OAAOC,kBAAkBE,OAAO,CAACN,GAAG,CAACG;YACzC;QACJ;QAEA,IAAIlB,MAAM,WAAW,CAAC4B,WAAW,IAAI5B,MAAM,WAAW,CAAC4B,WAAW,KAAKjC,kBAAkB;YACrF,MAAM,IAAI2B,MACN;QAER;QAEAtB,MAAM,WAAW,CAAC4B,WAAW,GAAGjC;QAChCI,YAAYC,OAAOC,KAAKC,SAAS;IACrC;AACJ"}
|
package/dist/provide.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentType, ReactInstance, ReactNode } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ProviderConfigEntryInstances, ProviderConfigEntrySingletons } from './provider';
|
|
3
3
|
export interface WrappedComponent<P> {
|
|
4
4
|
wrappedComponent: ComponentType<P>;
|
|
5
5
|
wrappedInstance: ReactInstance | undefined;
|
package/dist/provide.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provide.d.ts","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"provide.d.ts","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAY,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEnG,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACnC,eAAe,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC3B,MAAM,EAAE;IACJ,UAAU,CAAC,EAAE,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,SAAS,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;CACnD,EACD,OAAO,CAAC,EAAE,SAAS,GAAG,eAAe,KACpC,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,OAAO,EAId,gBAAgB,CAAC"}
|
package/dist/provide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provide.tsx"],"sourcesContent":["import { ComponentType, ReactInstance, ReactNode } from 'react';\
|
|
1
|
+
{"version":3,"sources":["../src/provide.tsx"],"sourcesContent":["import { ComponentType, ReactInstance, ReactNode } from 'react';\nimport { Provider, ProviderConfigEntryInstances, ProviderConfigEntrySingletons } from './provider';\n\nexport interface WrappedComponent<P> {\n wrappedComponent: ComponentType<P>;\n wrappedInstance: ReactInstance | undefined;\n}\n\nexport interface FallbackOptions {\n loadingFallback?: ReactNode;\n errorFallback?: ReactNode;\n}\n\nexport type ProvideDecorator = (\n stores: {\n singletons?: ProviderConfigEntrySingletons<any>[];\n instances?: ProviderConfigEntryInstances<any>[];\n },\n options?: ReactNode | FallbackOptions\n) => <T extends ComponentType<any>>(target: T) => T & WrappedComponent<T>;\n\nexport const provide = ((stores, elementOrOptions) => (Component: ComponentType) => props => (\n <Provider {...stores} {...getOptions(elementOrOptions)}>\n <Component {...props} />\n </Provider>\n)) as ProvideDecorator;\n\nfunction getOptions(arg?: FallbackOptions | ReactNode): FallbackOptions | undefined {\n return arg && isOptionsObject(arg) ? arg : { loadingFallback: arg };\n}\n\nfunction isOptionsObject(arg: FallbackOptions | NonNullable<ReactNode>): arg is FallbackOptions {\n return (\n typeof arg === 'object' &&\n (Object.hasOwn(arg, 'loadingFallback') ||\n Object.hasOwn(arg, 'errorFallback') ||\n Object.keys(arg).length === 0)\n );\n}\n"],"names":["Provider","provide","stores","elementOrOptions","Component","props","getOptions","arg","isOptionsObject","loadingFallback","Object","hasOwn","keys","length"],"mappings":";AACA,SAASA,QAAQ,QAAqE,aAAa;AAoBnG,OAAO,MAAMC,UAAW,CAACC,QAAQC,mBAAqB,CAACC,YAA6BC,CAAAA,sBAChF,KAACL;gBAAU,GAAGE,MAAM;gBAAG,GAAGI,WAAWH,iBAAiB;0BAClD,cAAA,KAACC;oBAAW,GAAGC,KAAK;;eAEL;AAEvB,SAASC,WAAWC,GAAiC;IACjD,OAAOA,OAAOC,gBAAgBD,OAAOA,MAAM;QAAEE,iBAAiBF;IAAI;AACtE;AAEA,SAASC,gBAAgBD,GAA6C;IAClE,OACI,OAAOA,QAAQ,YACdG,CAAAA,OAAOC,MAAM,CAACJ,KAAK,sBAChBG,OAAOC,MAAM,CAACJ,KAAK,oBACnBG,OAAOE,IAAI,CAACL,KAAKM,MAAM,KAAK,CAAA;AAExC"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FC, PropsWithChildren, ReactNode } from 'react';
|
|
2
1
|
import { interfaces } from 'inversify';
|
|
3
|
-
import {
|
|
2
|
+
import { FC, PropsWithChildren, ReactNode } from 'react';
|
|
3
|
+
import { SymbolToken, Token } from './common';
|
|
4
4
|
export type ProviderConfigEntrySingletons<T> = ClassProviderConfigEntry<T> | ValueProviderConfigEntry<T>;
|
|
5
5
|
export type ProviderConfigEntryInstances<T> = ClassProviderConfigEntryNoInherit<T>;
|
|
6
6
|
export type ProviderConfigEntry<T> = ProviderConfigEntrySingletons<T> | ProviderConfigEntryInstances<T>;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAE1F,OAAO,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAE1F,OAAO,EAAoB,WAAW,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,MAAM,6BAA6B,CAAC,CAAC,IACrC,wBAAwB,CAAC,CAAC,CAAC,GAC3B,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,MAAM,4BAA4B,CAAC,CAAC,IAAI,iCAAiC,CAAC,CAAC,CAAC,CAAC;AACnF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC3B,6BAA6B,CAAC,CAAC,CAAC,GAChC,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAEtC,KAAK,wBAAwB,CAAC,CAAC,IACzB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GACrB,gCAAgC,CAAC,CAAC,CAAC,GACnC,6BAA6B,CAAC,CAAC,CAAC,CAAC;AAEvC,KAAK,iCAAiC,CAAC,CAAC,IAClC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GACrB,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAE3D,UAAU,gCAAgC,CAAC,CAAC;IACxC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,UAAU,6BAA6B,CAAC,CAAC;IACrC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,UAAU,wBAAwB,CAAC,CAAC;IAChC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,EAAE,IAAI,CAAC;CAClB;AA2JD,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;IAC1C,UAAU,CAAC,EAAE,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,SAAS,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,SAAS,CAAC;CAC7B,CAAC,CAAC;AAEH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CA+DtC,CAAC"}
|
package/dist/provider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useContext, useEffect } from 'react';
|
|
3
2
|
import { Container } from 'inversify';
|
|
3
|
+
import { useContext, useEffect, useState } from 'react';
|
|
4
4
|
import { Await } from './await';
|
|
5
5
|
import { ContainerContext } from './common';
|
|
6
6
|
import { defaultErrorFallback, defaultLoadingFallback } from './fallbacks';
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.tsx"],"sourcesContent":["import { FC, PropsWithChildren, ReactNode, useState, useContext, useEffect } from 'react';\n\nimport { Container, interfaces } from 'inversify';\n\nimport { Await } from './await';\nimport { ContainerContext, Token, SymbolToken } from './common';\nimport { defaultErrorFallback, defaultLoadingFallback } from './fallbacks';\nimport { isStore, Store } from './store';\n\nexport type ProviderConfigEntrySingletons<T> =\n | ClassProviderConfigEntry<T>\n | ValueProviderConfigEntry<T>;\nexport type ProviderConfigEntryInstances<T> = ClassProviderConfigEntryNoInherit<T>;\nexport type ProviderConfigEntry<T> =\n | ProviderConfigEntrySingletons<T>\n | ProviderConfigEntryInstances<T>;\n\ntype ClassProviderConfigEntry<T> =\n | interfaces.Newable<T>\n | ClassProviderConfigEntryUseClass<T>\n | ClassProviderConfigEntryToken<T>;\n\ntype ClassProviderConfigEntryNoInherit<T> =\n | interfaces.Newable<T>\n | Omit<ClassProviderConfigEntryUseClass<T>, 'inherit'>;\n\ninterface ClassProviderConfigEntryUseClass<T> {\n provide: Token<T>;\n useClass: interfaces.Newable<T>;\n inherit?: true;\n}\n\ninterface ClassProviderConfigEntryToken<T> {\n provide: interfaces.Newable<T>;\n inherit?: true;\n}\n\ninterface ValueProviderConfigEntry<T> {\n provide: SymbolToken<T> | Function;\n useValue: T;\n inherit?: true;\n}\n\nfunction isClassProviderConfigEntryUseClass<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ClassProviderConfigEntryUseClass<T>, 'inherit'> {\n return Object.hasOwn(entry, 'provide') && Object.hasOwn(entry, 'useClass');\n}\n\nfunction isValueProviderConfigEntry<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ValueProviderConfigEntry<T>, 'inherit'> {\n return Object.hasOwn(entry, 'provide') && Object.hasOwn(entry, 'useValue');\n}\n\nfunction isClassProviderConfigEntryToken<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ClassProviderConfigEntryToken<T>, 'inherit'> {\n return (\n Object.hasOwn(entry, 'provide') &&\n !Object.hasOwn(entry, 'useClass') &&\n !Object.hasOwn(entry, 'useValue')\n );\n}\n\nfunction isProviderConfigEntryInheritable<T>(\n entry: ProviderConfigEntry<T>\n): entry is\n | ClassProviderConfigEntryUseClass<T>\n | ClassProviderConfigEntryToken<T>\n | ValueProviderConfigEntry<T> {\n return (\n isClassProviderConfigEntryUseClass(entry) ||\n isClassProviderConfigEntryToken(entry) ||\n isValueProviderConfigEntry(entry)\n );\n}\n\nfunction getProvideTokenWithClass<T>(\n entry: ProviderConfigEntry<T>\n): [Token<T>, interfaces.Newable<T>] | [undefined, undefined] {\n if (isClassProviderConfigEntryUseClass(entry)) {\n return [entry.provide, entry.useClass];\n }\n\n if (isClassProviderConfigEntryToken(entry)) {\n return [entry.provide, entry.provide];\n }\n\n if (isValueProviderConfigEntry(entry)) {\n return [undefined, undefined];\n }\n\n return [entry, entry];\n}\n\nfunction getStoreInstances(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n): Store[] {\n return [...singletons, ...instances].reduce((out, entry) => {\n const [provide, useClass] = getProvideTokenWithClass(entry);\n\n if (provide && useClass && container.isCurrentBound(provide) && isStore(useClass)) {\n out.push(container.get(provide));\n }\n\n return out;\n }, [] as Store[]);\n}\n\nconst bindEntry =\n (container: Container, checkInherit: boolean) => (entry: ProviderConfigEntry<any>) => {\n if (\n checkInherit &&\n isProviderConfigEntryInheritable(entry) &&\n entry.inherit &&\n container.isBound(entry.provide)\n ) {\n return undefined;\n }\n\n if (isClassProviderConfigEntryUseClass(entry)) {\n return container.bind(entry.provide).to(entry.useClass);\n }\n\n if (isClassProviderConfigEntryToken(entry)) {\n return container.bind(entry.provide).to(entry.provide);\n }\n\n if (isValueProviderConfigEntry(entry)) {\n // using toDynamicValue to return BindingInSyntax\n return container.bind(entry.provide).toDynamicValue(() => entry.useValue);\n }\n\n return container.bind(entry).to(entry);\n };\n\nconst unbindEntry = (container: Container) => (entry: ProviderConfigEntry<any>) => {\n if (isProviderConfigEntryInheritable(entry) && !container.isCurrentBound(entry.provide)) {\n return;\n }\n if (\n isClassProviderConfigEntryUseClass(entry) ||\n isValueProviderConfigEntry(entry) ||\n isClassProviderConfigEntryToken(entry)\n ) {\n return container.unbind(entry.provide);\n }\n\n return container.unbind(entry);\n};\n\nfunction bindEntries(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n) {\n singletons.map(bindEntry(container, true)).forEach(binding => {\n binding?.inSingletonScope();\n });\n instances.forEach(bindEntry(container, false));\n}\n\nfunction unbindEntries(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n) {\n [...singletons, ...instances].forEach(unbindEntry(container));\n}\n\nfunction initializeStores(stores: Store[], onError: (error: any) => void) {\n const promises: Promise<void>[] = [];\n\n for (const instance of stores) {\n let promise;\n\n try {\n promise = instance.initialize?.();\n } catch (e: any) {\n onError(e);\n }\n\n if (promise && typeof promise.catch === 'function') {\n promises.push(promise.catch(onError));\n }\n }\n\n return promises;\n}\n\nfunction disposeStores(stores: Store[]) {\n for (const instance of stores) {\n instance.dispose?.();\n }\n}\n\nexport type ProviderProps = PropsWithChildren<{\n singletons?: ProviderConfigEntrySingletons<any>[];\n instances?: ProviderConfigEntryInstances<any>[];\n loadingFallback?: ReactNode;\n errorFallback?: ReactNode;\n}>;\n\nexport const Provider: FC<ProviderProps> = ({\n singletons,\n instances,\n loadingFallback = defaultLoadingFallback,\n errorFallback = defaultErrorFallback,\n children,\n}) => {\n const parentContainer = useContext(ContainerContext);\n const [container, setContainer] = useState<Container>();\n const [promises, setPromises] = useState<Promise<void>[]>([]);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n const container = new Container();\n container.parent = parentContainer;\n setContainer(container);\n\n const handleError = (e: any) => {\n setError(true);\n // Rethrow asynchronously for global error handler\n setTimeout(() => {\n throw e;\n });\n };\n\n bindEntries(container, { singletons, instances });\n const promises = initializeStores(\n getStoreInstances(container, { singletons, instances }),\n handleError\n );\n setPromises(promises);\n\n return () => {\n const storeInstances = getStoreInstances(container, { singletons, instances });\n\n unbindEntries(container, { singletons, instances });\n disposeStores(storeInstances);\n setContainer(undefined);\n setPromises([]);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (!container) {\n return null;\n }\n\n const getContent = () => {\n if (error) {\n return errorFallback;\n }\n\n if (promises.length) {\n return (\n <Await promises={promises} fallback={loadingFallback}>\n {children}\n </Await>\n );\n }\n\n return children;\n };\n\n return <ContainerContext.Provider value={container}>{getContent()}</ContainerContext.Provider>;\n};\n"],"names":["useState","useContext","useEffect","Container","Await","ContainerContext","defaultErrorFallback","defaultLoadingFallback","isStore","isClassProviderConfigEntryUseClass","entry","Object","hasOwn","isValueProviderConfigEntry","isClassProviderConfigEntryToken","isProviderConfigEntryInheritable","getProvideTokenWithClass","provide","useClass","undefined","getStoreInstances","container","singletons","instances","reduce","out","isCurrentBound","push","get","bindEntry","checkInherit","inherit","isBound","bind","to","toDynamicValue","useValue","unbindEntry","unbind","bindEntries","map","forEach","binding","inSingletonScope","unbindEntries","initializeStores","stores","onError","promises","instance","promise","initialize","e","catch","disposeStores","dispose","Provider","loadingFallback","errorFallback","children","parentContainer","setContainer","setPromises","error","setError","parent","handleError","setTimeout","storeInstances","getContent","length","fallback","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/provider.tsx"],"sourcesContent":["import { Container, interfaces } from 'inversify';\nimport { FC, PropsWithChildren, ReactNode, useContext, useEffect, useState } from 'react';\nimport { Await } from './await';\nimport { ContainerContext, SymbolToken, Token } from './common';\nimport { defaultErrorFallback, defaultLoadingFallback } from './fallbacks';\nimport { isStore, Store } from './store';\n\nexport type ProviderConfigEntrySingletons<T> =\n | ClassProviderConfigEntry<T>\n | ValueProviderConfigEntry<T>;\nexport type ProviderConfigEntryInstances<T> = ClassProviderConfigEntryNoInherit<T>;\nexport type ProviderConfigEntry<T> =\n | ProviderConfigEntrySingletons<T>\n | ProviderConfigEntryInstances<T>;\n\ntype ClassProviderConfigEntry<T> =\n | interfaces.Newable<T>\n | ClassProviderConfigEntryUseClass<T>\n | ClassProviderConfigEntryToken<T>;\n\ntype ClassProviderConfigEntryNoInherit<T> =\n | interfaces.Newable<T>\n | Omit<ClassProviderConfigEntryUseClass<T>, 'inherit'>;\n\ninterface ClassProviderConfigEntryUseClass<T> {\n provide: Token<T>;\n useClass: interfaces.Newable<T>;\n inherit?: true;\n}\n\ninterface ClassProviderConfigEntryToken<T> {\n provide: interfaces.Newable<T>;\n inherit?: true;\n}\n\ninterface ValueProviderConfigEntry<T> {\n provide: SymbolToken<T> | Function;\n useValue: T;\n inherit?: true;\n}\n\nfunction isClassProviderConfigEntryUseClass<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ClassProviderConfigEntryUseClass<T>, 'inherit'> {\n return Object.hasOwn(entry, 'provide') && Object.hasOwn(entry, 'useClass');\n}\n\nfunction isValueProviderConfigEntry<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ValueProviderConfigEntry<T>, 'inherit'> {\n return Object.hasOwn(entry, 'provide') && Object.hasOwn(entry, 'useValue');\n}\n\nfunction isClassProviderConfigEntryToken<T>(\n entry: ProviderConfigEntry<T>\n): entry is Omit<ClassProviderConfigEntryToken<T>, 'inherit'> {\n return (\n Object.hasOwn(entry, 'provide') &&\n !Object.hasOwn(entry, 'useClass') &&\n !Object.hasOwn(entry, 'useValue')\n );\n}\n\nfunction isProviderConfigEntryInheritable<T>(\n entry: ProviderConfigEntry<T>\n): entry is\n | ClassProviderConfigEntryUseClass<T>\n | ClassProviderConfigEntryToken<T>\n | ValueProviderConfigEntry<T> {\n return (\n isClassProviderConfigEntryUseClass(entry) ||\n isClassProviderConfigEntryToken(entry) ||\n isValueProviderConfigEntry(entry)\n );\n}\n\nfunction getProvideTokenWithClass<T>(\n entry: ProviderConfigEntry<T>\n): [Token<T>, interfaces.Newable<T>] | [undefined, undefined] {\n if (isClassProviderConfigEntryUseClass(entry)) {\n return [entry.provide, entry.useClass];\n }\n\n if (isClassProviderConfigEntryToken(entry)) {\n return [entry.provide, entry.provide];\n }\n\n if (isValueProviderConfigEntry(entry)) {\n return [undefined, undefined];\n }\n\n return [entry, entry];\n}\n\nfunction getStoreInstances(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n): Store[] {\n return [...singletons, ...instances].reduce((out, entry) => {\n const [provide, useClass] = getProvideTokenWithClass(entry);\n\n if (provide && useClass && container.isCurrentBound(provide) && isStore(useClass)) {\n out.push(container.get(provide));\n }\n\n return out;\n }, [] as Store[]);\n}\n\nconst bindEntry =\n (container: Container, checkInherit: boolean) => (entry: ProviderConfigEntry<any>) => {\n if (\n checkInherit &&\n isProviderConfigEntryInheritable(entry) &&\n entry.inherit &&\n container.isBound(entry.provide)\n ) {\n return undefined;\n }\n\n if (isClassProviderConfigEntryUseClass(entry)) {\n return container.bind(entry.provide).to(entry.useClass);\n }\n\n if (isClassProviderConfigEntryToken(entry)) {\n return container.bind(entry.provide).to(entry.provide);\n }\n\n if (isValueProviderConfigEntry(entry)) {\n // using toDynamicValue to return BindingInSyntax\n return container.bind(entry.provide).toDynamicValue(() => entry.useValue);\n }\n\n return container.bind(entry).to(entry);\n };\n\nconst unbindEntry = (container: Container) => (entry: ProviderConfigEntry<any>) => {\n if (isProviderConfigEntryInheritable(entry) && !container.isCurrentBound(entry.provide)) {\n return;\n }\n if (\n isClassProviderConfigEntryUseClass(entry) ||\n isValueProviderConfigEntry(entry) ||\n isClassProviderConfigEntryToken(entry)\n ) {\n return container.unbind(entry.provide);\n }\n\n return container.unbind(entry);\n};\n\nfunction bindEntries(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n) {\n singletons.map(bindEntry(container, true)).forEach(binding => {\n binding?.inSingletonScope();\n });\n instances.forEach(bindEntry(container, false));\n}\n\nfunction unbindEntries(\n container: Container,\n { singletons = [], instances = [] }: Pick<ProviderProps, 'singletons' | 'instances'>\n) {\n [...singletons, ...instances].forEach(unbindEntry(container));\n}\n\nfunction initializeStores(stores: Store[], onError: (error: any) => void) {\n const promises: Promise<void>[] = [];\n\n for (const instance of stores) {\n let promise;\n\n try {\n promise = instance.initialize?.();\n } catch (e: any) {\n onError(e);\n }\n\n if (promise && typeof promise.catch === 'function') {\n promises.push(promise.catch(onError));\n }\n }\n\n return promises;\n}\n\nfunction disposeStores(stores: Store[]) {\n for (const instance of stores) {\n instance.dispose?.();\n }\n}\n\nexport type ProviderProps = PropsWithChildren<{\n singletons?: ProviderConfigEntrySingletons<any>[];\n instances?: ProviderConfigEntryInstances<any>[];\n loadingFallback?: ReactNode;\n errorFallback?: ReactNode;\n}>;\n\nexport const Provider: FC<ProviderProps> = ({\n singletons,\n instances,\n loadingFallback = defaultLoadingFallback,\n errorFallback = defaultErrorFallback,\n children,\n}) => {\n const parentContainer = useContext(ContainerContext);\n const [container, setContainer] = useState<Container>();\n const [promises, setPromises] = useState<Promise<void>[]>([]);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n const container = new Container();\n container.parent = parentContainer;\n setContainer(container);\n\n const handleError = (e: any) => {\n setError(true);\n // Rethrow asynchronously for global error handler\n setTimeout(() => {\n throw e;\n });\n };\n\n bindEntries(container, { singletons, instances });\n const promises = initializeStores(\n getStoreInstances(container, { singletons, instances }),\n handleError\n );\n setPromises(promises);\n\n return () => {\n const storeInstances = getStoreInstances(container, { singletons, instances });\n\n unbindEntries(container, { singletons, instances });\n disposeStores(storeInstances);\n setContainer(undefined);\n setPromises([]);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (!container) {\n return null;\n }\n\n const getContent = () => {\n if (error) {\n return errorFallback;\n }\n\n if (promises.length) {\n return (\n <Await promises={promises} fallback={loadingFallback}>\n {children}\n </Await>\n );\n }\n\n return children;\n };\n\n return <ContainerContext.Provider value={container}>{getContent()}</ContainerContext.Provider>;\n};\n"],"names":["Container","useContext","useEffect","useState","Await","ContainerContext","defaultErrorFallback","defaultLoadingFallback","isStore","isClassProviderConfigEntryUseClass","entry","Object","hasOwn","isValueProviderConfigEntry","isClassProviderConfigEntryToken","isProviderConfigEntryInheritable","getProvideTokenWithClass","provide","useClass","undefined","getStoreInstances","container","singletons","instances","reduce","out","isCurrentBound","push","get","bindEntry","checkInherit","inherit","isBound","bind","to","toDynamicValue","useValue","unbindEntry","unbind","bindEntries","map","forEach","binding","inSingletonScope","unbindEntries","initializeStores","stores","onError","promises","instance","promise","initialize","e","catch","disposeStores","dispose","Provider","loadingFallback","errorFallback","children","parentContainer","setContainer","setPromises","error","setError","parent","handleError","setTimeout","storeInstances","getContent","length","fallback","value"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-dependencies.d.ts","sourceRoot":"","sources":["../src/use-dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-dependencies.d.ts","sourceRoot":"","sources":["../src/use-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,KAAK,MAAM,CAAC,CAAC,IAAI;KACZ,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAwBF,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAEpE;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,cAE5E"}
|
package/dist/use-dependencies.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useContext, useRef } from 'react';
|
|
2
2
|
import { ContainerContext } from './common';
|
|
3
3
|
function useDependenciesInternal(tokens, optional) {
|
|
4
|
-
var _ref;
|
|
4
|
+
var _ref, _current;
|
|
5
5
|
const ref = useRef(null);
|
|
6
6
|
const container = useContext(ContainerContext);
|
|
7
|
-
var _current;
|
|
8
7
|
(_current = (_ref = ref).current) !== null && _current !== void 0 ? _current : _ref.current = tokens.map((s)=>{
|
|
9
8
|
if (optional) {
|
|
10
9
|
if (s && container.isBound(s)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-dependencies.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../src/use-dependencies.ts"],"sourcesContent":["import { useContext, useRef } from 'react';\nimport { ContainerContext, Token } from './common';\n\ntype Tokens<T> = {\n [P in keyof T]: Token<T[P]>;\n};\n\nfunction useDependenciesInternal<T extends any[], P extends boolean>(\n tokens: Tokens<T>,\n optional: P\n) {\n const ref = useRef<T | Partial<T> | null>(null);\n const container = useContext(ContainerContext);\n\n ref.current ??= tokens.map(s => {\n if (optional) {\n if (s && container.isBound(s)) {\n return container.get(s);\n }\n\n return undefined;\n }\n\n return container.get(s);\n }) as T;\n\n return ref.current as P extends true ? Partial<T> : T;\n}\n\nexport function useDependencies<T extends any[]>(...tokens: Tokens<T>) {\n return useDependenciesInternal(tokens, false);\n}\n\nexport function useOptionalDependencies<T extends any[]>(...tokens: Tokens<T>) {\n return useDependenciesInternal(tokens, true);\n}\n"],"names":["useContext","useRef","ContainerContext","useDependenciesInternal","tokens","optional","ref","container","current","map","s","isBound","get","undefined","useDependencies","useOptionalDependencies"],"mappings":"AAAA,SAASA,UAAU,EAAEC,MAAM,QAAQ,QAAQ;AAC3C,SAASC,gBAAgB,QAAe,WAAW;AAMnD,SAASC,wBACLC,MAAiB,EACjBC,QAAW;QAKXC,MAAAA;IAHA,MAAMA,MAAML,OAA8B;IAC1C,MAAMM,YAAYP,WAAWE;KAE7BI,WAAAA,CAAAA,OAAAA,KAAIE,OAAO,cAAXF,sBAAAA,WAAAA,KAAIE,OAAO,GAAKJ,OAAOK,GAAG,CAACC,CAAAA;QACvB,IAAIL,UAAU;YACV,IAAIK,KAAKH,UAAUI,OAAO,CAACD,IAAI;gBAC3B,OAAOH,UAAUK,GAAG,CAACF;YACzB;YAEA,OAAOG;QACX;QAEA,OAAON,UAAUK,GAAG,CAACF;IACzB;IAEA,OAAOJ,IAAIE,OAAO;AACtB;AAEA,OAAO,SAASM,gBAAiC,GAAGV,MAAiB;IACjE,OAAOD,wBAAwBC,QAAQ;AAC3C;AAEA,OAAO,SAASW,wBAAyC,GAAGX,MAAiB;IACzE,OAAOD,wBAAwBC,QAAQ;AAC3C"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/react-ioc",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "",
|
|
5
|
-
"homepage": "https://docs.st.dev/docs/frontend/react-ioc",
|
|
3
|
+
"version": "34.0.1",
|
|
4
|
+
"description": "Implementation of InversifyJS for React applications using Context API",
|
|
5
|
+
"homepage": "https://docs.st.dev/docs/frontend/uikit/react-ioc",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/servicetitan/uikit.git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@testing-library/dom": "^10.4.1",
|
|
24
24
|
"@testing-library/jest-dom": "^6.9.1",
|
|
25
|
-
"@testing-library/react": "^16.3.
|
|
25
|
+
"@testing-library/react": "^16.3.2",
|
|
26
26
|
"@types/react": "~18.3.3",
|
|
27
27
|
"react": "~18.3.1"
|
|
28
28
|
},
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"cli": {
|
|
36
36
|
"webpack": false
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "e42375d199bbc11b2f0b8881c26a8f0229446256"
|
|
39
39
|
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import '@testing-library/jest-dom';
|
|
2
2
|
import { act, render, screen, waitFor } from '@testing-library/react';
|
|
3
3
|
import { FC, PropsWithChildren, ReactNode, useEffect, useState } from 'react';
|
|
4
|
-
|
|
5
4
|
import {
|
|
6
5
|
inject,
|
|
7
6
|
injectable,
|
|
8
|
-
useDependencies,
|
|
9
|
-
Store,
|
|
10
|
-
symbolToken,
|
|
11
7
|
Provider,
|
|
12
8
|
ProviderProps,
|
|
9
|
+
Store,
|
|
10
|
+
symbolToken,
|
|
11
|
+
useDependencies,
|
|
13
12
|
} from '..';
|
|
14
13
|
|
|
15
14
|
@injectable()
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { render } from '@testing-library/react';
|
|
2
|
-
import { Component, createContext,
|
|
2
|
+
import { Component, createContext, FC, PropsWithChildren, useRef } from 'react';
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
Container,
|
|
5
|
+
injectable,
|
|
5
6
|
injectDependency,
|
|
7
|
+
provide,
|
|
6
8
|
Provider,
|
|
7
|
-
injectable,
|
|
8
|
-
Container,
|
|
9
|
-
useDependencies,
|
|
10
9
|
symbolToken,
|
|
10
|
+
useDependencies,
|
|
11
11
|
} from '..';
|
|
12
12
|
import { ContainerContext } from '../common';
|
|
13
13
|
|
package/src/common.tsx
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
|
|
3
|
-
export type { Token, SymbolToken } from './common';
|
|
4
3
|
export { rootContainer, symbolToken } from './common';
|
|
4
|
+
export type { SymbolToken, Token } from './common';
|
|
5
5
|
export { injectDependency } from './inject-dependency';
|
|
6
6
|
export { provide } from './provide';
|
|
7
|
-
export type { ProviderProps } from './provider';
|
|
8
7
|
export { Provider } from './provider';
|
|
8
|
+
export type { ProviderProps } from './provider';
|
|
9
9
|
export { Store } from './store';
|
|
10
10
|
export { useDependencies, useOptionalDependencies } from './use-dependencies';
|
|
11
11
|
|
|
12
|
+
export { Container, inject, injectable, optional, unmanaged } from 'inversify';
|
|
12
13
|
export type { interfaces } from 'inversify';
|
|
13
|
-
export { Container, injectable, inject, optional, unmanaged } from 'inversify';
|
package/src/inject-dependency.ts
CHANGED
package/src/provide.tsx
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ComponentType, ReactInstance, ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
import { Provider, ProviderConfigEntrySingletons, ProviderConfigEntryInstances } from './provider';
|
|
2
|
+
import { Provider, ProviderConfigEntryInstances, ProviderConfigEntrySingletons } from './provider';
|
|
4
3
|
|
|
5
4
|
export interface WrappedComponent<P> {
|
|
6
5
|
wrappedComponent: ComponentType<P>;
|
package/src/provider.tsx
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { FC, PropsWithChildren, ReactNode, useState, useContext, useEffect } from 'react';
|
|
2
|
-
|
|
3
1
|
import { Container, interfaces } from 'inversify';
|
|
4
|
-
|
|
2
|
+
import { FC, PropsWithChildren, ReactNode, useContext, useEffect, useState } from 'react';
|
|
5
3
|
import { Await } from './await';
|
|
6
|
-
import { ContainerContext,
|
|
4
|
+
import { ContainerContext, SymbolToken, Token } from './common';
|
|
7
5
|
import { defaultErrorFallback, defaultLoadingFallback } from './fallbacks';
|
|
8
6
|
import { isStore, Store } from './store';
|
|
9
7
|
|
package/src/use-dependencies.ts
CHANGED