@shopify/react-effect
Advanced tools
Comparing version 3.3.3 to 3.3.4-graphql-config-beta.1
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2
64835
1191
1
- Removedtslib@^1.14.1
- Removedtslib@1.14.1(transitive)