@shopify/react-effect
Advanced tools
Comparing version 3.3.3 to 3.3.4
@@ -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", | ||
"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" |
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
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
64881
1193
- Removedtslib@^1.14.1
- Removedtslib@1.14.1(transitive)