Socket
Socket
Sign inDemoInstall

@shopify/react-effect

Package Overview
Dependencies
Maintainers
19
Versions
75
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shopify/react-effect - npm Package Compare versions

Comparing version 3.3.3 to 3.3.4-graphql-config-beta.1

12

build/cjs/manager.js

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

var EffectManager = /*#__PURE__*/function () {
_createClass(EffectManager, [{
key: "finished",
get: function get() {
return this.effects.length === 0;
}
}]);
function EffectManager() {

@@ -59,2 +52,7 @@ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},

_createClass(EffectManager, [{
key: "finished",
get: function get() {
return this.effects.length === 0;
}
}, {
key: "reset",

@@ -61,0 +59,0 @@ value: function reset() {

@@ -1,6 +0,2 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EffectContext = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
exports.EffectContext = react_1.default.createContext(null);
import React from 'react';
export const EffectContext = React.createContext(null);

@@ -1,10 +0,5 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Effect = void 0;
var hook_1 = require("./hook");
function Effect(_a) {
var kind = _a.kind, perform = _a.perform;
hook_1.useServerEffect(perform, kind);
import { useServerEffect } from './hook';
export function Effect({ kind, perform }) {
useServerEffect(perform, kind);
return null;
}
exports.Effect = Effect;

@@ -1,8 +0,5 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useServerEffect = void 0;
var react_1 = require("react");
var context_1 = require("./context");
function useServerEffect(perform, kind) {
var manager = react_1.useContext(context_1.EffectContext);
import { useContext } from 'react';
import { EffectContext } from './context';
export function useServerEffect(perform, kind) {
const manager = useContext(EffectContext);
if (manager == null || (kind != null && !manager.shouldPerform(kind))) {

@@ -13,2 +10,1 @@ return;

}
exports.useServerEffect = useServerEffect;

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

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Effect_1 = require("./Effect");
Object.defineProperty(exports, "Effect", { enumerable: true, get: function () { return Effect_1.Effect; } });
var manager_1 = require("./manager");
Object.defineProperty(exports, "EffectManager", { enumerable: true, get: function () { return manager_1.EffectManager; } });
var hook_1 = require("./hook");
Object.defineProperty(exports, "useServerEffect", { enumerable: true, get: function () { return hook_1.useServerEffect; } });
var utilities_1 = require("./utilities");
Object.defineProperty(exports, "restrictToServer", { enumerable: true, get: function () { return utilities_1.restrictToServer; } });
export { Effect } from './Effect';
export { EffectManager } from './manager';
export { useServerEffect } from './hook';
export { restrictToServer } from './utilities';

@@ -1,8 +0,3 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EffectManager = void 0;
var tslib_1 = require("tslib");
var EffectManager = /** @class */ (function () {
function EffectManager(_a) {
var _b = (_a === void 0 ? {} : _a).include, include = _b === void 0 ? true : _b;
export class EffectManager {
constructor({ include = true } = {}) {
this.effects = [];

@@ -12,14 +7,10 @@ this.kinds = new Set();

}
Object.defineProperty(EffectManager.prototype, "finished", {
get: function () {
return this.effects.length === 0;
},
enumerable: false,
configurable: true
});
EffectManager.prototype.reset = function () {
get finished() {
return this.effects.length === 0;
}
reset() {
this.effects = [];
this.kinds = new Set();
};
EffectManager.prototype.add = function (effect, kind) {
}
add(effect, kind) {
if (kind != null) {

@@ -32,50 +23,19 @@ this.kinds.add(kind);

this.effects.push(effect);
};
EffectManager.prototype.resolve = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(this.effects)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
EffectManager.prototype.betweenEachPass = function (pass) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(tslib_1.__spread(this.kinds).map(function (kind) {
return typeof kind.betweenEachPass === 'function'
? kind.betweenEachPass(pass)
: Promise.resolve();
}))];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
EffectManager.prototype.afterEachPass = function (pass) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var results;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.all(tslib_1.__spread(this.kinds).map(function (kind) {
return typeof kind.afterEachPass === 'function'
? kind.afterEachPass(pass)
: Promise.resolve();
}))];
case 1:
results = _a.sent();
return [2 /*return*/, results.every(function (result) { return result !== false; })];
}
});
});
};
EffectManager.prototype.shouldPerform = function (kind) {
var include = this.include;
}
async resolve() {
await Promise.all(this.effects);
}
async betweenEachPass(pass) {
await Promise.all([...this.kinds].map(kind => typeof kind.betweenEachPass === 'function'
? kind.betweenEachPass(pass)
: Promise.resolve()));
}
async afterEachPass(pass) {
const results = await Promise.all([...this.kinds].map(kind => typeof kind.afterEachPass === 'function'
? kind.afterEachPass(pass)
: Promise.resolve()));
return results.every(result => result !== false);
}
shouldPerform(kind) {
const { include } = this;
if (!include) {

@@ -85,5 +45,3 @@ return false;

return include === true || (kind != null && include.includes(kind.id));
};
return EffectManager;
}());
exports.EffectManager = EffectManager;
}
}

@@ -1,112 +0,81 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.extract = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var server_1 = require("react-dom/server");
var context_1 = require("./context");
var manager_1 = require("./manager");
var Effect_1 = require("./Effect");
Object.defineProperty(exports, "Effect", { enumerable: true, get: function () { return Effect_1.Effect; } });
var DEFAULT_MAX_PASSES = 5;
function extract(app, _a) {
var _b = _a === void 0 ? {} : _a, include = _b.include, _c = _b.maxPasses, maxPasses = _c === void 0 ? DEFAULT_MAX_PASSES : _c, _d = _b.decorate, decorate = _d === void 0 ? identity : _d, _e = _b.renderFunction, renderFunction = _e === void 0 ? server_1.renderToStaticMarkup : _e, betweenEachPass = _b.betweenEachPass, afterEachPass = _b.afterEachPass;
var manager = new manager_1.EffectManager({ include: include });
var element = (react_1.default.createElement(context_1.EffectContext.Provider, { value: manager }, decorate(app)));
return (function perform(index) {
if (index === void 0) { index = 0; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var start, result, cancelled, duration, resolveStart, renderDuration, resolveDuration, performNextPass, _a, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
start = Date.now();
result = renderFunction(element);
cancelled = !manager.finished && index + 1 >= maxPasses;
if (!(manager.finished || cancelled)) return [3 /*break*/, 4];
duration = Date.now() - start;
return [4 /*yield*/, manager.afterEachPass({
index: index,
finished: true,
cancelled: cancelled,
renderDuration: duration,
resolveDuration: 0,
})];
case 1:
_c.sent();
if (!afterEachPass) return [3 /*break*/, 3];
return [4 /*yield*/, afterEachPass({
index: index,
finished: true,
cancelled: cancelled,
renderDuration: duration,
resolveDuration: 0,
})];
case 2:
_c.sent();
_c.label = 3;
case 3: return [2 /*return*/, result];
case 4:
resolveStart = Date.now();
renderDuration = resolveStart - start;
return [4 /*yield*/, manager.resolve()];
case 5:
_c.sent();
resolveDuration = Date.now() - resolveStart;
performNextPass = true;
_a = shouldContinue;
return [4 /*yield*/, manager.afterEachPass({
index: index,
finished: false,
cancelled: false,
renderDuration: renderDuration,
resolveDuration: resolveDuration,
})];
case 6:
performNextPass =
_a.apply(void 0, [_c.sent()]) && performNextPass;
if (!afterEachPass) return [3 /*break*/, 8];
_b = shouldContinue;
return [4 /*yield*/, afterEachPass({
index: index,
finished: false,
cancelled: false,
renderDuration: renderDuration,
resolveDuration: resolveDuration,
})];
case 7:
performNextPass =
_b.apply(void 0, [_c.sent()]) && performNextPass;
_c.label = 8;
case 8:
if (!performNextPass) return [3 /*break*/, 11];
return [4 /*yield*/, manager.betweenEachPass({
index: index,
finished: false,
cancelled: false,
renderDuration: renderDuration,
resolveDuration: resolveDuration,
})];
case 9:
_c.sent();
if (!betweenEachPass) return [3 /*break*/, 11];
return [4 /*yield*/, betweenEachPass({
index: index,
finished: false,
cancelled: false,
renderDuration: renderDuration,
resolveDuration: resolveDuration,
})];
case 10:
_c.sent();
_c.label = 11;
case 11:
manager.reset();
return [2 /*return*/, performNextPass ? perform(index + 1) : result];
import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { EffectContext } from './context';
import { EffectManager } from './manager';
export { Effect } from './Effect';
const DEFAULT_MAX_PASSES = 5;
export function extract(app, { include, maxPasses = DEFAULT_MAX_PASSES, decorate = identity, renderFunction = renderToStaticMarkup, betweenEachPass, afterEachPass, } = {}) {
const manager = new EffectManager({ include });
const element = (React.createElement(EffectContext.Provider, { value: manager }, decorate(app)));
return (async function perform(index = 0) {
const start = Date.now();
const result = renderFunction(element);
const cancelled = !manager.finished && index + 1 >= maxPasses;
if (manager.finished || cancelled) {
const duration = Date.now() - start;
await manager.afterEachPass({
index,
finished: true,
cancelled,
renderDuration: duration,
resolveDuration: 0,
});
if (afterEachPass) {
await afterEachPass({
index,
finished: true,
cancelled,
renderDuration: duration,
resolveDuration: 0,
});
}
return result;
}
else {
const resolveStart = Date.now();
const renderDuration = resolveStart - start;
await manager.resolve();
const resolveDuration = Date.now() - resolveStart;
let performNextPass = true;
performNextPass =
shouldContinue(await manager.afterEachPass({
index,
finished: false,
cancelled: false,
renderDuration,
resolveDuration,
})) && performNextPass;
if (afterEachPass) {
performNextPass =
shouldContinue(await afterEachPass({
index,
finished: false,
cancelled: false,
renderDuration,
resolveDuration,
})) && performNextPass;
}
if (performNextPass) {
await manager.betweenEachPass({
index,
finished: false,
cancelled: false,
renderDuration,
resolveDuration,
});
if (betweenEachPass) {
await betweenEachPass({
index,
finished: false,
cancelled: false,
renderDuration,
resolveDuration,
});
}
});
});
}
manager.reset();
return performNextPass ? perform(index + 1) : result;
}
})();
}
exports.extract = extract;
function shouldContinue(result) {

@@ -113,0 +82,0 @@ return result !== false;

@@ -1,7 +0,4 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.restrictToServer = void 0;
function restrictToServer(Component) {
export function restrictToServer(Component) {
if (typeof window !== 'undefined') {
var NoopComponent = (function () { return null; });
const NoopComponent = (() => null);
NoopComponent.displayName = Component.displayName || Component.name;

@@ -12,2 +9,1 @@ return NoopComponent;

}
exports.restrictToServer = restrictToServer;

@@ -8,4 +8,12 @@ # Changelog

## [3.3.2] - 2021-03-03
<!-- ## Unreleased -->
## 3.3.4 - 2021-04-13
### Changed
- Removed dependency on tslib, as we no-longer compile with `tsc`. [#1829](https://github.com/Shopify/quilt/pull/1829)
## 3.3.2 - 2021-03-03
### Fixed

@@ -15,3 +23,3 @@

## [3.3.0] - 2020-12-18
## 3.3.0 - 2020-12-18

@@ -22,11 +30,11 @@ ### Added

## [3.2.13] - 2020-10-20
## 3.2.13 - 2020-10-20
- Updated `tslib` dependency to `^1.14.1`. [#1657](https://github.com/Shopify/quilt/pull/1657)
## [3.2.1] - 2019-01-27
## 3.2.1 - 2019-01-27
- Specify package has no `sideEffects` ([#1233](https://github.com/Shopify/quilt/pull/1233))
## [3.2.0] - 2019-06-27
## 3.2.0 - 2019-06-27

@@ -37,3 +45,3 @@ ### Fixed

## [3.1.0] - 2019-06-14
## 3.1.0 - 2019-06-14

@@ -44,3 +52,3 @@ ### Added

## [3.0.0] - 2019-04-08
## 3.0.0 - 2019-04-08

@@ -53,3 +61,3 @@ This library now requires React 16.8.

## [2.1.0]
## 2.1.0

@@ -61,3 +69,3 @@ ### Added

## [2.0.0]
## 2.0.0

@@ -68,7 +76,7 @@ ### Changed

## [1.0.3]
## 1.0.3
- Manual release
## [1.0.1]
## 1.0.1

@@ -79,4 +87,4 @@ ### Fixed

## [1.0.0]
## 1.0.0
Initial release
{
"name": "@shopify/react-effect",
"version": "3.3.3",
"version": "3.3.4-graphql-config-beta.1",
"license": "MIT",

@@ -8,5 +8,2 @@ "description": "A component and set of utilities for performing effects within a universal React app",

"types": "index.d.ts",
"scripts": {
"build": "tsc --p tsconfig.json"
},
"sideEffects": false,

@@ -27,5 +24,2 @@ "publishConfig": {

"homepage": "https://github.com/Shopify/quilt/blob/main/packages/react-effect/README.md",
"dependencies": {
"tslib": "^1.14.1"
},
"devDependencies": {

@@ -32,0 +26,0 @@ "@types/react-dom": "^16.0.11"

Sorry, the diff of this file is not supported yet

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