@cdx-extensions/di-sdk
v1.1.4
Published
Extensibility SDK interface for building platform extensions - Part of Candescent Developer Experience (CDX)
Downloads
281
Readme
@cdx-extensions/di-sdk
Part of the Candescent Developer Experience (CDX)
Core SDK interface for building platform extensions. This package provides the unified PlatformSDK and does not depend on @cdx-extensions/di-sdk-web or @cdx-extensions/di-sdk-mobile. The host app installs only the platform it needs and registers it with the SDK (dependency injection). That avoids bundlers like Metro resolving both platform packages when the app uses only one.
This library is independent. Dependencies are resolved from JFrog when you run npm install in this folder. Build and publish from this directory.
Installation
Install the core SDK and only the platform you need (web or mobile).
Web:
npm install @cdx-extensions/di-sdk @cdx-extensions/di-sdk-webMobile (e.g. React Native):
npm install @cdx-extensions/di-sdk @cdx-extensions/di-sdk-mobileQuick Start
The host app (the one that has di-sdk-web or di-sdk-mobile) calls PlatformSDK.init({ platform }) once at bootstrap. Widgets and extensions only call PlatformSDK.getInstance() with no arguments. getInstance() throws if the host never called init().
Host app (bootstrap)
Only the host app should call init(). Do this once at app entry (e.g. root component or main), before any widget runs.
Web host:
import { PlatformSDK } from '@cdx-extensions/di-sdk';
import { WebPlatform } from '@cdx-extensions/di-sdk-web';
// Once at bootstrap
PlatformSDK.init({ platform: WebPlatform.getInstance() });Mobile host (e.g. React Native):
import { PlatformSDK } from '@cdx-extensions/di-sdk';
import { MobilePlatform } from '@cdx-extensions/di-sdk-mobile';
// Once at bootstrap
PlatformSDK.init({ platform: MobilePlatform.getInstance() });Widget / extension
Widgets depend only on @cdx-extensions/di-sdk. They must run inside a host that has already called PlatformSDK.init().
import { PlatformSDK } from '@cdx-extensions/di-sdk';
const sdk = PlatformSDK.getInstance();
const userContext = sdk.useUserContext();
const httpClient = sdk.getHttpClient();Because the core SDK never imports di-sdk-web or di-sdk-mobile, a mobile-only app does not need the web package installed and Metro will not try to resolve it.
For a full description of the approach, flow, and diagrams, see PLATFORM_REGISTRATION.md.
Development
From the repository root:
cd libs/common/extensibility-sdk
npm install
npm run buildTo publish (e.g. after merging to main):
npm run build
npm publishPublishing under development: To publish this lib while it is under development without affecting the main version, run from this directory: npm publish --tag development.
Documentation
License
ISC
CDX = Candescent Developer Experience
