piral-core
Version:
The core library for creating a Piral instance.
68 lines (67 loc) • 2.18 kB
JavaScript
import { __assign } from 'tslib';
import { blazingStrategy, standardStrategy, createListener, isfunc } from 'piral-base';
import { defaultApiFactory, defaultDependencySelector, defaultModuleRequester } from './modules';
import { createGlobalState, createActions, includeActions } from './state';
import { createPiletOptions } from './helpers';
import { generateId } from './utils';
/**
* Creates a new PiralInstance component, which can be used for
* bootstrapping the application easily.
*
* @example
```jsx
const instance = createInstance({
requestPilets() {
return fetch(...);
},
});
const app = (
<Piral instance={instance}>
<Define name="Layout" component={MyLayout} />
</Piral>
);
render(app, document.querySelector('#app'));
```
*/
export function createInstance(config = {}) {
const { id = generateId(), state, actions, availablePilets = [], plugins, requestPilets = defaultModuleRequester, loaderConfig, async = false, shareDependencies = defaultDependencySelector, loadPilet, loaders, debug, apiFactory = defaultApiFactory, } = config;
const globalState = createGlobalState(state);
const events = createListener(globalState);
const context = createActions(globalState, events);
const definedPlugins = plugins || [];
const usedPlugins = Array.isArray(definedPlugins) ? definedPlugins : [definedPlugins];
const createApi = apiFactory(context, usedPlugins);
const root = createApi({
name: '_',
version: '0',
spec: 'v0',
basePath: '',
link: '',
config: {},
dependencies: {},
});
const options = createPiletOptions({
context,
createApi,
loaders,
loadPilet,
availablePilets,
loaderConfig,
shareDependencies,
strategy: isfunc(async) ? async : async ? blazingStrategy : standardStrategy,
requestPilets,
debug,
});
if (actions) {
includeActions(context, actions);
}
context.options = options;
return __assign(events, {
id,
createApi,
context,
root,
options,
});
}
//# sourceMappingURL=createInstance.js.map