Socket
Socket
Sign inDemoInstall

react-arbiter

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-arbiter - npm Package Compare versions

Comparing version 0.8.0 to 0.9.0

dist/strategies/index.d.ts

6

CHANGELOG.md
# React Arbiter Changelog
## 0.9.0
- Introduced loading strategies via `strategy`
- Added `blazingStrategy` for loading modules one-by-one
- Updated dependencies
## 0.8.0

@@ -4,0 +10,0 @@

3

dist/components/ArbiterRecall.d.ts

@@ -21,3 +21,4 @@ import * as React from 'react';

constructor(props: ArbiterRecallProps<TApi>);
private finish;
private setLoaded;
private setModules;
componentDidMount(): void;

@@ -24,0 +25,0 @@ componentWillUnmount(): void;

"use strict";
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
const React = require("react");
const utils_1 = require("../utils");
const strategies_1 = require("../strategies");
/**

@@ -12,27 +24,17 @@ * Represents an arbiter recall component to load extension components.

this.mounted = false;
this.setLoaded = () => this.mounted && this.setState({ loaded: true });
this.setModules = (error, modules) => this.mounted &&
this.setState({
error,
modules,
});
this.state = {
loaded: props.async || false,
loaded: false,
modules: [],
};
}
finish(error, newModules) {
const { createApi, modules: oldModules = [] } = this.props;
for (const oldModule of oldModules) {
const [newModule] = newModules.filter(m => m.name === oldModule.name);
if (newModule) {
newModules.splice(newModules.indexOf(newModule), 1);
}
}
this.setState({
error,
loaded: true,
modules: utils_1.createModules(createApi, [...oldModules, ...newModules]),
});
}
componentDidMount() {
const { fetchModules, dependencies, getDependencies, fetchDependency, cache } = this.props;
const _a = this.props, { async, strategy = async ? strategies_1.asyncStrategy : strategies_1.standardStrategy } = _a, options = __rest(_a, ["async", "strategy"]);
this.mounted = true;
if (utils_1.isfunc(fetchModules)) {
utils_1.loadModules(fetchModules, fetchDependency, dependencies, getDependencies, cache).then(modules => this.mounted && this.finish(undefined, modules), error => this.mounted && this.finish(error, []));
}
strategy(options, this.setModules).then(this.setLoaded, this.setLoaded);
}

@@ -39,0 +41,0 @@ componentWillUnmount() {

@@ -5,2 +5,3 @@ export * from './components';

export * from './utils';
export * from './strategies';
export * from './wrappers';

@@ -9,2 +9,3 @@ "use strict";

__export(require("./utils"));
__export(require("./strategies"));
__export(require("./wrappers"));

@@ -128,3 +128,9 @@ import { ComponentType, Ref } from 'react';

}
export interface ArbiterOptions<TApi> {
export interface ArbiterRecallModulesLoaded<TApi> {
(error: Error | undefined, modules: Array<ArbiterModule<TApi>>): void;
}
export interface ArbiterRecallStrategy<TApi> {
(options: ArbiterRecallOptions<TApi>, modulesLoaded: ArbiterRecallModulesLoaded<TApi>): Promise<void>;
}
export interface ArbiterRecallOptions<TApi> {
/**

@@ -163,2 +169,4 @@ * The callback function for creating an API object.

cache?: ArbiterModuleCache;
}
export interface ArbiterOptions<TApi> extends ArbiterRecallOptions<TApi> {
/**

@@ -169,3 +177,9 @@ * Optionally, sets the loading scheme to be asynchronous and

async?: boolean;
/**
* Optionally, defines the recall strategy. This could override
* the async option, as async is just a shorthand for the async
* loading strategy.
*/
strategy?: ArbiterRecallStrategy<TApi>;
}
export declare type ComponentDefinition<T> = ComponentType<T> | RenderCallback<T>;

@@ -1,4 +0,10 @@

import { defaultFetchDependency } from './fetch';
import { AvailableDependencies, ArbiterModule, DependencyGetter, ApiCreator, ArbiterModuleFetcher, ArbiterModuleCache } from '../types';
import { AvailableDependencies, ArbiterModule, DependencyGetter, ApiCreator, ArbiterModuleFetcher, ArbiterModuleCache, DependencyFetcher } from '../types';
/**
* Loads the modules metadata and puts them in the cache, if provided.
* @param fetchModules The function to resolve the modules.
* @param cache The optional cache to use initially and update later.
*/
export declare function loadModulesMetadata(fetchModules: ArbiterModuleFetcher, cache?: ArbiterModuleCache): Promise<import("../types").ArbiterModuleMetadata[]>;
export declare function getDependencyResolver(globalDependencies?: AvailableDependencies, getLocalDependencies?: DependencyGetter): DependencyGetter;
/**
* Loads the modules by first getting them, then evaluating the raw content.

@@ -10,3 +16,3 @@ * @param fetchModules The function to resolve the modules.

*/
export declare function loadModules<TApi>(fetchModules: ArbiterModuleFetcher, fetchDependency?: typeof defaultFetchDependency, globalDependencies?: AvailableDependencies, getLocalDependencies?: DependencyGetter, cache?: ArbiterModuleCache): Promise<Array<ArbiterModule<TApi>>>;
export declare function loadModules<TApi>(fetchModules: ArbiterModuleFetcher, fetchDependency?: DependencyFetcher, globalDependencies?: AvailableDependencies, getLocalDependencies?: DependencyGetter, cache?: ArbiterModuleCache): Promise<Array<ArbiterModule<TApi>>>;
/**

@@ -13,0 +19,0 @@ * Sets up the evaluated modules to become integrated modules.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const setup_1 = require("./setup");
const load_1 = require("./load");
const fetch_1 = require("./fetch");
const setup_1 = require("./setup");
const isfunc_1 = require("./isfunc");

@@ -32,2 +31,20 @@ const defaultGlobalDependencies = {};

/**
* Loads the modules metadata and puts them in the cache, if provided.
* @param fetchModules The function to resolve the modules.
* @param cache The optional cache to use initially and update later.
*/
function loadModulesMetadata(fetchModules, cache = defaultCache) {
if (checkFetchModules(fetchModules)) {
return Promise.resolve(cache.retrieve()).then(cachedModules => Promise.resolve(fetchModules(cachedModules || [])).then(receivedModules => cache.update(cachedModules, receivedModules)));
}
return Promise.resolve([]);
}
exports.loadModulesMetadata = loadModulesMetadata;
function getDependencyResolver(globalDependencies = defaultGlobalDependencies, getLocalDependencies = defaultGetDependencies) {
return target => {
return getLocalDependencies(target) || globalDependencies;
};
}
exports.getDependencyResolver = getDependencyResolver;
/**
* Loads the modules by first getting them, then evaluating the raw content.

@@ -39,12 +56,5 @@ * @param fetchModules The function to resolve the modules.

*/
function loadModules(fetchModules, fetchDependency = fetch_1.defaultFetchDependency, globalDependencies = defaultGlobalDependencies, getLocalDependencies = defaultGetDependencies, cache = defaultCache) {
if (checkFetchModules(fetchModules)) {
const getDependencies = target => {
return getLocalDependencies(target) || globalDependencies;
};
return Promise.resolve(cache.retrieve()).then(cachedModules => Promise.resolve(fetchModules(cachedModules || []))
.then(receivedModules => cache.update(cachedModules, receivedModules))
.then(moduleData => Promise.all(moduleData.map(m => load_1.loadModule(m, fetchDependency, getDependencies)))));
}
return Promise.resolve([]);
function loadModules(fetchModules, fetchDependency, globalDependencies, getLocalDependencies, cache) {
const getDependencies = getDependencyResolver(globalDependencies, getLocalDependencies);
return loadModulesMetadata(fetchModules, cache).then(moduleData => Promise.all(moduleData.map(m => load_1.loadModule(m, getDependencies, fetchDependency))));
}

@@ -51,0 +61,0 @@ exports.loadModules = loadModules;

@@ -1,2 +0,3 @@

import { ArbiterModuleMetadata, ArbiterModule, DependencyFetcher, DependencyGetter } from '../types';
import { defaultFetchDependency } from './fetch';
import { ArbiterModuleMetadata, ArbiterModule, DependencyGetter } from '../types';
/**

@@ -10,2 +11,2 @@ * Loads the given raw module content by resolving its dependencies and

*/
export declare function loadModule<TApi>(meta: ArbiterModuleMetadata, fetchDependency: DependencyFetcher, getDependencies: DependencyGetter): Promise<ArbiterModule<TApi>>;
export declare function loadModule<TApi>(meta: ArbiterModuleMetadata, getDependencies: DependencyGetter, fetchDependency?: typeof defaultFetchDependency): Promise<ArbiterModule<TApi>>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const dependency_1 = require("./dependency");
const fetch_1 = require("./fetch");
function createEmptyModule(meta) {

@@ -20,3 +21,3 @@ return Object.assign({}, meta, { setup() { } });

*/
function loadModule(meta, fetchDependency, getDependencies) {
function loadModule(meta, getDependencies, fetchDependency = fetch_1.defaultFetchDependency) {
const { link, content } = meta;

@@ -23,0 +24,0 @@ const retrieve = link ? fetchDependency(link) : content ? Promise.resolve(content) : undefined;

{
"name": "react-arbiter",
"version": "0.8.0",
"version": "0.9.0",
"description": "Recall all your modules to extend your SPA dynamically at runtime.",

@@ -42,8 +42,8 @@ "main": "dist/index.js",

"enzyme-adapter-react-16": "^1.14.0",
"enzyme-to-json": "^3.3.5",
"enzyme-to-json": "^3.4.0",
"jest": "^24.8.0",
"jest-cli": "^24.8.0",
"prettier": "^1.18.2",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"ts-jest": "^24.0.2",

@@ -50,0 +50,0 @@ "tslint": "^5.18.0",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc