@salesforce/pwa-kit-react-sdk 3.8.0-preview.0-basepath → 3.8.0-preview.2-basepath
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/package.json +6 -5
- package/ssr/browser/main.js +136 -0
- package/ssr/browser/main.test.js +54 -0
- package/ssr/server/react-rendering.js +448 -0
- package/ssr/server/react-rendering.test.js +786 -0
- package/ssr/universal/compatibility.js +31 -0
- package/ssr/universal/components/_app/index.js +35 -0
- package/ssr/universal/components/_app/index.test.js +20 -0
- package/ssr/universal/components/_app-config/index.js +104 -0
- package/ssr/universal/components/_app-config/index.test.js +22 -0
- package/ssr/universal/components/_document/index.js +92 -0
- package/ssr/universal/components/_document/index.test.js +58 -0
- package/ssr/universal/components/_error/index.js +55 -0
- package/ssr/universal/components/_error/index.test.js +28 -0
- package/ssr/universal/components/app-error-boundary/index.js +113 -0
- package/ssr/universal/components/app-error-boundary/index.test.js +109 -0
- package/ssr/universal/components/fetch-strategy/index.js +42 -0
- package/ssr/universal/components/refresh/index.js +123 -0
- package/ssr/universal/components/refresh/index.test.js +78 -0
- package/ssr/universal/components/route-component/index.js +415 -0
- package/ssr/universal/components/route-component/index.test.js +378 -0
- package/ssr/universal/components/switch/index.js +62 -0
- package/ssr/universal/components/throw-404/index.js +36 -0
- package/ssr/universal/components/throw-404/index.test.js +26 -0
- package/ssr/universal/components/with-correlation-id/index.js +36 -0
- package/ssr/universal/components/with-legacy-get-props/index.js +100 -0
- package/ssr/universal/components/with-legacy-get-props/index.test.js +35 -0
- package/ssr/universal/components/with-react-query/index.js +130 -0
- package/ssr/universal/components/with-react-query/index.test.js +101 -0
- package/ssr/universal/contexts/index.js +72 -0
- package/ssr/universal/contexts/index.test.js +101 -0
- package/ssr/universal/errors.js +34 -0
- package/ssr/universal/errors.test.js +20 -0
- package/ssr/universal/events.js +38 -0
- package/ssr/universal/events.test.js +39 -0
- package/ssr/universal/hooks/index.js +52 -0
- package/ssr/universal/routes.js +15 -0
- package/ssr/universal/utils.client.test.js +46 -0
- package/ssr/universal/utils.js +61 -0
- package/ssr/universal/utils.server.test.js +24 -0
- package/utils/assets.js +120 -0
- package/utils/assets.test.js +106 -0
- package/utils/logger-instance.js +19 -0
- package/utils/performance.js +126 -0
- package/utils/performance.test.js +50 -0
- package/utils/url.js +39 -0
- package/utils/url.test.js +47 -0
- package/utils/uuidv4.client.js +21 -0
- package/utils/uuidv4.client.test.js +27 -0
- package/utils/warnings.js +81 -0
- package/utils/warnings.test.js +48 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## v3.8.0-preview.2-basepath (Sep 05, 2024)
|
|
2
|
+
## v3.8.0-preview.1-basepath (Sep 05, 2024)
|
|
3
|
+
## v3.8.0-preview.4-basepath (Sep 05, 2024)
|
|
4
|
+
## v3.8.0-preview.4-basepath (Sep 05, 2024)
|
|
5
|
+
## v3.8.0-preview.3-basepath (Sep 05, 2024)
|
|
6
|
+
## v3.8.0-preview.3-basepath (Sep 05, 2024)
|
|
7
|
+
## v3.8.0-preview.1-basepath (Sep 05, 2024)
|
|
8
|
+
## v3.8.0-preview.2-basepath (Sep 05, 2024)
|
|
9
|
+
## v3.8.0-preview.1-basepath (Sep 05, 2024)
|
|
10
|
+
## v3.8.0-preview.1-basepath (Sep 05, 2024)
|
|
1
11
|
## v3.8.0-preview.0-basepath (Sep 05, 2024)
|
|
2
12
|
## v3.8.0-preview.0 (Sep 05, 2024)
|
|
3
13
|
## v3.8.0-preview.basepath (Sep 05, 2024)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/pwa-kit-react-sdk",
|
|
3
|
-
"version": "3.8.0-preview.
|
|
3
|
+
"version": "3.8.0-preview.2-basepath",
|
|
4
4
|
"description": "A library that supports the isomorphic React rendering pipeline for Commerce Cloud Managed Runtime apps",
|
|
5
5
|
"homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-react-sdk#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@loadable/babel-plugin": "^5.15.3",
|
|
38
38
|
"@loadable/server": "^5.15.3",
|
|
39
39
|
"@loadable/webpack-plugin": "^5.15.2",
|
|
40
|
-
"@salesforce/pwa-kit-runtime": "3.8.0-preview.
|
|
40
|
+
"@salesforce/pwa-kit-runtime": "3.8.0-preview.2-basepath",
|
|
41
41
|
"@tanstack/react-query": "^4.28.0",
|
|
42
42
|
"cross-env": "^5.2.1",
|
|
43
43
|
"event-emitter": "^0.3.5",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@loadable/component": "^5.15.3",
|
|
53
|
-
"@salesforce/pwa-kit-dev": "3.8.0-preview.
|
|
53
|
+
"@salesforce/pwa-kit-dev": "3.8.0-preview.2-basepath",
|
|
54
54
|
"@testing-library/jest-dom": "^5.16.5",
|
|
55
55
|
"@testing-library/react": "^14.0.0",
|
|
56
56
|
"@testing-library/user-event": "^14.4.3",
|
|
57
|
-
"internal-lib-build": "3.8.0-preview.
|
|
57
|
+
"internal-lib-build": "3.8.0-preview.2-basepath",
|
|
58
58
|
"node-html-parser": "^3.3.6",
|
|
59
59
|
"nodemon": "^2.0.22",
|
|
60
60
|
"react": "^18.2.0",
|
|
@@ -78,5 +78,6 @@
|
|
|
78
78
|
},
|
|
79
79
|
"publishConfig": {
|
|
80
80
|
"directory": "dist"
|
|
81
|
-
}
|
|
81
|
+
},
|
|
82
|
+
"gitHead": "bdcffbe26f2d9188069914e1e7485e54291c8217"
|
|
82
83
|
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.start = exports.registerServiceWorker = exports.OuterApp = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _client = require("react-dom/client");
|
|
9
|
+
var _reactRouterDom = require("react-router-dom");
|
|
10
|
+
var _contexts = require("../universal/contexts");
|
|
11
|
+
var _app = _interopRequireDefault(require("../universal/components/_app"));
|
|
12
|
+
var _compatibility = require("../universal/compatibility");
|
|
13
|
+
var _switch = _interopRequireDefault(require("../universal/components/switch"));
|
|
14
|
+
var _routeComponent = require("../universal/components/route-component");
|
|
15
|
+
var _component = require("@loadable/component");
|
|
16
|
+
var _uuidv = require("../../utils/uuidv4.client");
|
|
17
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
18
|
+
var _loggerInstance = _interopRequireDefault(require("../../utils/logger-instance"));
|
|
19
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
22
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /*
|
|
23
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
24
|
+
* All rights reserved.
|
|
25
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
26
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
27
|
+
*/ /* global __webpack_require__ */
|
|
28
|
+
/* istanbul ignore next */
|
|
29
|
+
const registerServiceWorker = url => {
|
|
30
|
+
return Promise.resolve().then(() => {
|
|
31
|
+
if ('serviceWorker' in navigator) {
|
|
32
|
+
return Promise.resolve().then(() => new Promise(resolve => window.addEventListener('load', resolve))).then(() => navigator.serviceWorker.register(url)).then(registration => _loggerInstance.default.info(`ServiceWorker registration successful with scope: ${registration.scope}`, {
|
|
33
|
+
namespace: 'registerServiceWorker'
|
|
34
|
+
})).catch(err => _loggerInstance.default.error('ServiceWorker registration failed', {
|
|
35
|
+
namespace: 'registerServiceWorker',
|
|
36
|
+
additionalProperties: {
|
|
37
|
+
error: err
|
|
38
|
+
}
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
exports.registerServiceWorker = registerServiceWorker;
|
|
44
|
+
const OuterApp = ({
|
|
45
|
+
routes,
|
|
46
|
+
error,
|
|
47
|
+
WrappedApp,
|
|
48
|
+
locals,
|
|
49
|
+
onHydrate
|
|
50
|
+
}) => {
|
|
51
|
+
var _AppConfig$getBasePat, _AppConfig$getBasePat2;
|
|
52
|
+
const AppConfig = (0, _compatibility.getAppConfig)();
|
|
53
|
+
const isInitialPageRef = (0, _react.useRef)(true);
|
|
54
|
+
const basepath = ((_AppConfig$getBasePat = AppConfig.getBasePath) === null || _AppConfig$getBasePat === void 0 ? void 0 : (_AppConfig$getBasePat2 = _AppConfig$getBasePat.call(AppConfig, {
|
|
55
|
+
req: undefined,
|
|
56
|
+
res: undefined
|
|
57
|
+
})) === null || _AppConfig$getBasePat2 === void 0 ? void 0 : _AppConfig$getBasePat2.replace(/\/$/, '')) || '';
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement(_contexts.ServerContext.Provider, {
|
|
59
|
+
value: {}
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement(_reactRouterDom.BrowserRouter, {
|
|
61
|
+
ref: onHydrate,
|
|
62
|
+
basename: basepath
|
|
63
|
+
}, /*#__PURE__*/_react.default.createElement(_contexts.CorrelationIdProvider, {
|
|
64
|
+
correlationId: () => {
|
|
65
|
+
// If we are hydrating an error page use the server correlation id.
|
|
66
|
+
if (isInitialPageRef.current && window.__ERROR__) {
|
|
67
|
+
isInitialPageRef.current = false;
|
|
68
|
+
return window.__INITIAL_CORRELATION_ID__;
|
|
69
|
+
}
|
|
70
|
+
return (0, _uuidv.uuidv4)();
|
|
71
|
+
}
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(AppConfig, {
|
|
73
|
+
locals: locals
|
|
74
|
+
}, /*#__PURE__*/_react.default.createElement(_switch.default, {
|
|
75
|
+
error: error,
|
|
76
|
+
appState: window.__PRELOADED_STATE__,
|
|
77
|
+
routes: routes,
|
|
78
|
+
App: WrappedApp
|
|
79
|
+
})))));
|
|
80
|
+
};
|
|
81
|
+
exports.OuterApp = OuterApp;
|
|
82
|
+
OuterApp.propTypes = {
|
|
83
|
+
routes: _propTypes.default.array.isRequired,
|
|
84
|
+
error: _propTypes.default.object,
|
|
85
|
+
WrappedApp: _propTypes.default.func.isRequired,
|
|
86
|
+
locals: _propTypes.default.object,
|
|
87
|
+
onHydrate: _propTypes.default.func
|
|
88
|
+
};
|
|
89
|
+
/* istanbul ignore next */
|
|
90
|
+
const start = () => {
|
|
91
|
+
const AppConfig = (0, _compatibility.getAppConfig)();
|
|
92
|
+
const rootEl = document.getElementsByClassName('react-target')[0];
|
|
93
|
+
const data = JSON.parse(document.getElementById('mobify-data').innerHTML);
|
|
94
|
+
|
|
95
|
+
// Set all globals sent from the server on the window object.
|
|
96
|
+
Object.entries(data).forEach(([key, value]) => {
|
|
97
|
+
window[key] = value;
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Tell webpack how to find javascript files
|
|
101
|
+
Object.defineProperty(__webpack_require__, 'p', {
|
|
102
|
+
get: () => window.Progressive.buildOrigin
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// On the browser we don't have request.locals, so we just provide an empty
|
|
106
|
+
// object that exists for the lifetime of the app. AppConfig components can use
|
|
107
|
+
// this to set up, eg. Redux stores.
|
|
108
|
+
const locals = {};
|
|
109
|
+
|
|
110
|
+
// AppConfig.restore *must* come before getRoutes()
|
|
111
|
+
AppConfig.restore(locals, window.__PRELOADED_STATE__.__STATE_MANAGEMENT_LIBRARY);
|
|
112
|
+
|
|
113
|
+
// We need to tell the routeComponent HOC when the app is hydrating in order to
|
|
114
|
+
// prevent pages from re-fetching data on the first client-side render. The
|
|
115
|
+
// reason we do this is that we expect a render to have taken place
|
|
116
|
+
// on the server already. That server-side render already called getProps()
|
|
117
|
+
// and froze the application state as a JSON blob on the page.
|
|
118
|
+
//
|
|
119
|
+
// This is VERY fiddly – don't go crazy with window.__HYDRATING__. You have
|
|
120
|
+
// been warned.
|
|
121
|
+
window.__HYDRATING__ = true;
|
|
122
|
+
const props = {
|
|
123
|
+
error: window.__ERROR__,
|
|
124
|
+
locals: locals,
|
|
125
|
+
routes: (0, _routeComponent.getRoutes)(locals),
|
|
126
|
+
WrappedApp: (0, _routeComponent.routeComponent)(_app.default, false, locals)
|
|
127
|
+
};
|
|
128
|
+
return Promise.resolve().then(() => new Promise(resolve => (0, _component.loadableReady)(resolve))).then(() => {
|
|
129
|
+
(0, _client.hydrateRoot)(rootEl, /*#__PURE__*/_react.default.createElement(OuterApp, _extends({}, props, {
|
|
130
|
+
onHydrate: () => {
|
|
131
|
+
window.__HYDRATING__ = false;
|
|
132
|
+
}
|
|
133
|
+
})));
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
exports.start = start;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _main = require("./main");
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _routeComponent = require("../universal/components/route-component");
|
|
7
|
+
var errors = _interopRequireWildcard(require("../universal/errors"));
|
|
8
|
+
var _uuidv = require("../../utils/uuidv4.client");
|
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
/*
|
|
13
|
+
* Copyright (c) 2022, salesforce.com, inc.
|
|
14
|
+
* All rights reserved.
|
|
15
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
16
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
jest.mock('../../utils/uuidv4.client');
|
|
20
|
+
describe('main', function () {
|
|
21
|
+
test('OuterApp renders without error', () => {
|
|
22
|
+
_uuidv.uuidv4.mockReturnValueOnce('7f21aea5-6962-4162-8204-9da85c802022');
|
|
23
|
+
const oldPreloadedState = window.__PRELOADED_STATE__;
|
|
24
|
+
window.__PRELOADED_STATE__ = {
|
|
25
|
+
appProps: {}
|
|
26
|
+
};
|
|
27
|
+
const App = () => /*#__PURE__*/_react.default.createElement("div", null, "App");
|
|
28
|
+
const locals = {};
|
|
29
|
+
const props = {
|
|
30
|
+
error: undefined,
|
|
31
|
+
locals,
|
|
32
|
+
routes: (0, _routeComponent.getRoutes)(locals),
|
|
33
|
+
WrappedApp: (0, _routeComponent.routeComponent)(App, false, locals)
|
|
34
|
+
};
|
|
35
|
+
(0, _react2.render)( /*#__PURE__*/_react.default.createElement(_main.OuterApp, props));
|
|
36
|
+
expect(_react2.screen.getByText('App')).toBeInTheDocument();
|
|
37
|
+
window.__PRELOADED_STATE__ = oldPreloadedState;
|
|
38
|
+
});
|
|
39
|
+
test('OuterApp triggers the error page when there is an error', () => {
|
|
40
|
+
const oldWindowError = window.__ERROR__;
|
|
41
|
+
window.__ERROR__ = new errors.HTTPNotFound('Not found');
|
|
42
|
+
const App = () => /*#__PURE__*/_react.default.createElement("div", null, "App");
|
|
43
|
+
const locals = {};
|
|
44
|
+
const props = {
|
|
45
|
+
error: window.__ERROR__,
|
|
46
|
+
locals,
|
|
47
|
+
routes: (0, _routeComponent.getRoutes)(locals),
|
|
48
|
+
WrappedApp: (0, _routeComponent.routeComponent)(App, false, locals)
|
|
49
|
+
};
|
|
50
|
+
(0, _react2.render)( /*#__PURE__*/_react.default.createElement(_main.OuterApp, props));
|
|
51
|
+
expect(_react2.screen.getByText('Error Status: 404')).toBeInTheDocument();
|
|
52
|
+
window.__ERROR__ = oldWindowError;
|
|
53
|
+
});
|
|
54
|
+
});
|