Skip to content

Commit

Permalink
feat(all): merge module loaders to one universal package (#36)
Browse files Browse the repository at this point in the history
  • Loading branch information
clebert authored Nov 26, 2018
1 parent 2ff6905 commit e583b9a
Show file tree
Hide file tree
Showing 64 changed files with 222 additions and 3,259 deletions.
42 changes: 17 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,12 @@ The Feature Hub was designed with the following specific requirements in mind:

## Monorepo Packages

| Package | Description | API |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------- |
| [@feature-hub/core][core-pkg] | The core functionality of the Feature Hub. | [📖][core-api] |
| [@feature-hub/browser-feature-app-module-loader][browser-feature-app-module-loader-pkg] | A Feature App module loader for browsers. | [📖][browser-feature-app-module-loader-api] |
| [@feature-hub/node-feature-app-module-loader][node-feature-app-module-loader-pkg] | A Feature App module loader for Node.js. | [📖][node-feature-app-module-loader-api] |
| [@feature-hub/react-feature-app-loader][react-feature-app-loader-pkg] | A React component for integrating remote Feature Apps. | [📖][react-feature-app-loader-api] |
| [@feature-hub/react-feature-app-container][react-feature-app-container-pkg] | A React component for integrating bundled Feature Apps. | [📖][react-feature-app-container-api] |
| Package | Description | API |
| --------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------- |
| [@feature-hub/core][core-pkg] | The core functionality of the Feature Hub. | [📖][core-api] |
| [@feature-hub/module-loader][module-loader-pkg] | A universal module loader. | [📖][module-loader-api] |
| [@feature-hub/react-feature-app-loader][react-feature-app-loader-pkg] | A React component for integrating remote Feature Apps. | [📖][react-feature-app-loader-api] |
| [@feature-hub/react-feature-app-container][react-feature-app-container-pkg] | A React component for integrating bundled Feature Apps. | [📖][react-feature-app-container-api] |

## Usage Guides

Expand Down Expand Up @@ -146,13 +145,13 @@ multiple Feature Apps that share state through Feature Services:
1. Instantiate a `FeatureServiceRegistry` (with consumer configs).
1. Register a set of Feature Services at the registry.
1. Create a `FeatureAppManager` singleton instance with the registry and a
Feature App module loader.
browser or Node.js module loader.

A typical integrator bootstrap code would look like this:

```js
import {FeatureAppManager, FeatureServiceRegistry} from '@feature-hub/core';
import {loadFeatureAppModule} from '@feature-hub/node-feature-app-module-loader';
import {loadModule} from '@feature-hub/module-loader/node';

const configs = {}; // import configs from somewhere
const registry = new FeatureServiceRegistry(configs);
Expand All @@ -164,7 +163,7 @@ const featureServiceDefinitions = [

registry.registerProviders(featureServiceDefinitions, 'integrator');

const manager = new FeatureAppManager(registry, loadFeatureAppModule);
const manager = new FeatureAppManager(registry, loadModule);
```

A React integrator can then use the `FeatureAppLoader` (from
Expand Down Expand Up @@ -265,22 +264,19 @@ integrator, e.g.:

#### Providing Externals

When using the browser Feature App module loader, the integrator can provide
shared npm dependencies to Feature Apps using the `defineExternals` function:
When using the browser module loader, the integrator can provide shared npm
dependencies to Feature Apps using the `defineExternals` function:

```js
import {
defineExternals,
loadFeatureAppModule
} from '@feature-hub/browser-feature-app-module-loader';
import {defineExternals, loadModule} from '@feature-hub/module-loader';
import * as React from 'react';
import Loadable from 'react-loadable';
```

```js
defineExternals({react: React, 'react-loadable': Loadable});

const manager = new FeatureAppManager(registry, loadFeatureAppModule);
const manager = new FeatureAppManager(registry, loadModule);
```

### Writing a Feature Service
Expand Down Expand Up @@ -651,14 +647,10 @@ yarn && yarn build && yarn test
[core-api]: https://sinnerschrader.github.io/feature-hub/api/@feature-hub/core/
[core-pkg]:
https://github.com/sinnerschrader/feature-hub/tree/master/packages/core
[browser-feature-app-module-loader-api]:
https://sinnerschrader.github.io/feature-hub/api/@feature-hub/browser-feature-app-module-loader/
[browser-feature-app-module-loader-pkg]:
https://github.com/sinnerschrader/feature-hub/tree/master/packages/browser-feature-app-module-loader
[node-feature-app-module-loader-api]:
https://sinnerschrader.github.io/feature-hub/api/@feature-hub/node-feature-app-module-loader/
[node-feature-app-module-loader-pkg]:
https://github.com/sinnerschrader/feature-hub/tree/master/packages/node-feature-app-module-loader
[module-loader-api]:
https://sinnerschrader.github.io/feature-hub/api/@feature-hub/module-loader/
[module-loader-pkg]:
https://github.com/sinnerschrader/feature-hub/tree/master/packages/module-loader
[react-feature-app-loader-api]:
https://sinnerschrader.github.io/feature-hub/api/@feature-hub/react-feature-app-loader/
[react-feature-app-loader-pkg]:
Expand Down
2 changes: 1 addition & 1 deletion docs/api/@feature-hub/core/assets/js/search.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions docs/api/@feature-hub/core/classes/asyncvalue.html
Original file line number Diff line number Diff line change
Expand Up @@ -970,12 +970,12 @@
<li class=" tsd-kind-interface">
<a href="../interfaces/sharedfeatureservice.html" class="tsd-kind-icon">Shared<wbr>Feature<wbr>Service</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#featureappmoduleloader" class="tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader</a>
</li>
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
<a href="../globals.html#featureservicebinder" class="tsd-kind-icon">Feature<wbr>Service<wbr>Binder</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#moduleloader" class="tsd-kind-icon">Module<wbr>Loader</a>
</li>
</ul>
</nav>
<div class="container container-main">
Expand Down
10 changes: 5 additions & 5 deletions docs/api/@feature-hub/core/classes/featureappmanager.html
Original file line number Diff line number Diff line change
Expand Up @@ -973,12 +973,12 @@
<li class=" tsd-kind-interface">
<a href="../interfaces/sharedfeatureservice.html" class="tsd-kind-icon">Shared<wbr>Feature<wbr>Service</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#featureappmoduleloader" class="tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader</a>
</li>
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
<a href="../globals.html#featureservicebinder" class="tsd-kind-icon">Feature<wbr>Service<wbr>Binder</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#moduleloader" class="tsd-kind-icon">Module<wbr>Loader</a>
</li>
</ul>
</nav>
<div class="container container-main">
Expand Down Expand Up @@ -1025,7 +1025,7 @@ <h2>Constructors</h2>
<a name="constructor" class="tsd-anchor"></a>
<h3>constructor</h3>
<ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">new <wbr>Feature<wbr>App<wbr>Manager<span class="tsd-signature-symbol">(</span>featureServiceRegistry<span class="tsd-signature-symbol">: </span><a href="../interfaces/featureserviceregistrylike.html" class="tsd-signature-type">FeatureServiceRegistryLike</a>, loadFeatureAppModule<span class="tsd-signature-symbol">: </span><a href="../globals.html#featureappmoduleloader" class="tsd-signature-type">FeatureAppModuleLoader</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="featureappmanager.html" class="tsd-signature-type">FeatureAppManager</a></li>
<li class="tsd-signature tsd-kind-icon">new <wbr>Feature<wbr>App<wbr>Manager<span class="tsd-signature-symbol">(</span>featureServiceRegistry<span class="tsd-signature-symbol">: </span><a href="../interfaces/featureserviceregistrylike.html" class="tsd-signature-type">FeatureServiceRegistryLike</a>, loadModule<span class="tsd-signature-symbol">: </span><a href="../globals.html#moduleloader" class="tsd-signature-type">ModuleLoader</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="featureappmanager.html" class="tsd-signature-type">FeatureAppManager</a></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
Expand All @@ -1036,7 +1036,7 @@ <h4 class="tsd-parameters-title">Parameters</h4>
<h5>featureServiceRegistry: <a href="../interfaces/featureserviceregistrylike.html" class="tsd-signature-type">FeatureServiceRegistryLike</a></h5>
</li>
<li>
<h5>loadFeatureAppModule: <a href="../globals.html#featureappmoduleloader" class="tsd-signature-type">FeatureAppModuleLoader</a></h5>
<h5>loadModule: <a href="../globals.html#moduleloader" class="tsd-signature-type">ModuleLoader</a></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <a href="featureappmanager.html" class="tsd-signature-type">FeatureAppManager</a></h4>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -967,12 +967,12 @@
<li class=" tsd-kind-interface">
<a href="../interfaces/sharedfeatureservice.html" class="tsd-kind-icon">Shared<wbr>Feature<wbr>Service</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#featureappmoduleloader" class="tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader</a>
</li>
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
<a href="../globals.html#featureservicebinder" class="tsd-kind-icon">Feature<wbr>Service<wbr>Binder</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="../globals.html#moduleloader" class="tsd-kind-icon">Module<wbr>Loader</a>
</li>
</ul>
</nav>
<div class="container container-main">
Expand Down
43 changes: 18 additions & 25 deletions docs/api/@feature-hub/core/globals.html
Original file line number Diff line number Diff line change
Expand Up @@ -956,12 +956,12 @@
<li class=" tsd-kind-interface">
<a href="interfaces/sharedfeatureservice.html" class="tsd-kind-icon">Shared<wbr>Feature<wbr>Service</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="globals.html#featureappmoduleloader" class="tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader</a>
</li>
<li class=" tsd-kind-type-alias tsd-has-type-parameter">
<a href="globals.html#featureservicebinder" class="tsd-kind-icon">Feature<wbr>Service<wbr>Binder</a>
</li>
<li class=" tsd-kind-type-alias">
<a href="globals.html#moduleloader" class="tsd-kind-icon">Module<wbr>Loader</a>
</li>
</ul>
</nav>
<div class="container container-main">
Expand Down Expand Up @@ -1017,70 +1017,63 @@ <h3>Interfaces</h3>
<section class="tsd-index-section ">
<h3>Type aliases</h3>
<ul class="tsd-index-list">
<li class="tsd-kind-type-alias"><a href="globals.html#featureappmoduleloader" class="tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader</a></li>
<li class="tsd-kind-type-alias tsd-has-type-parameter"><a href="globals.html#featureservicebinder" class="tsd-kind-icon">Feature<wbr>Service<wbr>Binder</a></li>
<li class="tsd-kind-type-alias"><a href="globals.html#moduleloader" class="tsd-kind-icon">Module<wbr>Loader</a></li>
</ul>
</section>
</div>
</section>
</section>
<section class="tsd-panel-group tsd-member-group ">
<h2>Type aliases</h2>
<section class="tsd-panel tsd-member tsd-kind-type-alias">
<a name="featureappmoduleloader" class="tsd-anchor"></a>
<h3>Feature<wbr>App<wbr>Module<wbr>Loader</h3>
<div class="tsd-signature tsd-kind-icon">Feature<wbr>App<wbr>Module<wbr>Loader<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">function</span></div>
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-has-type-parameter">
<a name="featureservicebinder" class="tsd-anchor"></a>
<h3>Feature<wbr>Service<wbr>Binder</h3>
<div class="tsd-signature tsd-kind-icon">Feature<wbr>Service<wbr>Binder<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">function</span></div>

<div class="tsd-comment tsd-typography">
<dl class="tsd-comment-tags">
<dt>returns</dt>
<dd><p>It should resolve with a <a href="interfaces/featureappmodule.html">FeatureAppModule</a>.</p>
</dd>
</dl>
</div>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter-siganture">
<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported">
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>featureAppUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>uniqueConsumerId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="interfaces/featureservicebinding.html" class="tsd-signature-type">FeatureServiceBinding</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">TFeatureService</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>featureAppUrl: <span class="tsd-signature-type">string</span></h5>
<h5>uniqueConsumerId: <span class="tsd-signature-type">string</span></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <a href="interfaces/featureservicebinding.html" class="tsd-signature-type">FeatureServiceBinding</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">TFeatureService</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</li>
</ul>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-has-type-parameter">
<a name="featureservicebinder" class="tsd-anchor"></a>
<h3>Feature<wbr>Service<wbr>Binder</h3>
<div class="tsd-signature tsd-kind-icon">Feature<wbr>Service<wbr>Binder<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">function</span></div>
<section class="tsd-panel tsd-member tsd-kind-type-alias">
<a name="moduleloader" class="tsd-anchor"></a>
<h3>Module<wbr>Loader</h3>
<div class="tsd-signature tsd-kind-icon">Module<wbr>Loader<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">function</span></div>

<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter-siganture">
<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-alias tsd-is-not-exported">
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>uniqueConsumerId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="interfaces/featureservicebinding.html" class="tsd-signature-type">FeatureServiceBinding</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">TFeatureService</span><span class="tsd-signature-symbol">&gt;</span></li>
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>uniqueConsumerId: <span class="tsd-signature-type">string</span></h5>
<h5>url: <span class="tsd-signature-type">string</span></h5>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <a href="interfaces/featureservicebinding.html" class="tsd-signature-type">FeatureServiceBinding</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">TFeatureService</span><span class="tsd-signature-symbol">&gt;</span></h4>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</li>
Expand Down
Loading

0 comments on commit e583b9a

Please sign in to comment.