codeant-ai-for-open-source[bot] commented on code in PR #36191:
URL: https://github.com/apache/superset/pull/36191#discussion_r2624939226
##########
superset/initialization/__init__.py:
##########
@@ -650,6 +650,11 @@ def apply_http_headers(response: Response) -> Response:
for k, v in
self.superset_app.config["DEFAULT_HTTP_HEADERS"].items():
if k not in response.headers:
response.headers[k] = v
+
+ # Allow service worker to control the root scope for PWA file
handling
+ if request.path.endswith("service-worker.js"):
Review Comment:
**Suggestion:** The new logic always sets the `Service-Worker-Allowed`
header to `/` for `service-worker.js` requests, overwriting any value
configured via `HTTP_HEADERS` or `OVERRIDE_HTTP_HEADERS`, which breaks the
existing configuration contract and prevents users from narrowing or
customizing the service worker scope. [logic error]
**Severity Level:** Minor ⚠️
```suggestion
if request.path.endswith("service-worker.js") and
"Service-Worker-Allowed" not in response.headers:
```
<details>
<summary><b>Why it matters? ⭐ </b></summary>
The current code unconditionally sets Service-Worker-Allowed to "/", which
will overwrite any value provided via
OVERRIDE_HTTP_HEADERS/HTTP_HEADERS/DEFAULT_HTTP_HEADERS or by other middleware.
The suggested check to only set the header when it's not already present
preserves user configuration while still providing a sensible default for
service-worker requests — this fixes a real logic/regression risk introduced by
the PR.
</details>
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/initialization/__init__.py
**Line:** 655:655
**Comment:**
*Logic Error: The new logic always sets the `Service-Worker-Allowed`
header to `/` for `service-worker.js` requests, overwriting any value
configured via `HTTP_HEADERS` or `OVERRIDE_HTTP_HEADERS`, which breaks the
existing configuration contract and prevents users from narrowing or
customizing the service worker scope.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
```
</details>
##########
superset-frontend/src/service-worker.ts:
##########
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Service Worker types (declared locally to avoid polluting global scope)
+declare const self: {
+ skipWaiting(): Promise<void>;
+ clients: { claim(): Promise<void> };
+ addEventListener(
+ type: 'install' | 'activate',
+ listener: (event: { waitUntil(promise: Promise<unknown>): void }) => void,
+ ): void;
+};
+
+self.addEventListener('install', () => {
+ self.skipWaiting();
Review Comment:
**Suggestion:** The install handler calls the asynchronous-like
`skipWaiting` without tying its completion to the install event lifecycle, so
the browser may terminate the worker before the promise settles and the update
is not reliably applied; using `event.waitUntil(self.skipWaiting())` ensures
the install phase waits for `skipWaiting` to finish. [logic error]
**Severity Level:** Minor ⚠️
```suggestion
self.addEventListener('install', event => {
event.waitUntil(self.skipWaiting());
```
<details>
<summary><b>Why it matters? ⭐ </b></summary>
The current install handler calls the async skipWaiting() but doesn't tie
its Promise to the install lifecycle, so the browser may terminate the
installing worker before skipWaiting() completes. Wrapping it with
event.waitUntil(...) is the correct Service Worker lifecycle usage and ensures
the install phase waits for skipWaiting() to settle. This fixes a real
lifecycle reliability issue rather than being merely cosmetic.
</details>
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset-frontend/src/service-worker.ts
**Line:** 30:31
**Comment:**
*Logic Error: The install handler calls the asynchronous-like
`skipWaiting` without tying its completion to the install event lifecycle, so
the browser may terminate the worker before the promise settles and the update
is not reliably applied; using `event.waitUntil(self.skipWaiting())` ensures
the install phase waits for `skipWaiting` to finish.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
```
</details>
##########
superset/static/service-worker.js:
##########
@@ -0,0 +1,1433 @@
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached
SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool
(https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode:
"production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ "./src/service-worker.ts":
+/*!*******************************!*\
+ !*** ./src/service-worker.ts ***!
+ \*******************************/
+/***/ ((module, __unused_webpack___webpack_exports__, __webpack_require__) => {
+
+eval("{/* provided dependency */ var __react_refresh_utils__ =
__webpack_require__(/*!
./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js
*/
\"./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js\");\n/*
provided dependency */ var __react_refresh_error_overlay__ =
__webpack_require__(/*!
./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js */
\"./node_modules/@pmmmwh/react-refresh-webpack-plugin/overlay/index.js\");\n__webpack_require__.$Refresh$.runtime
= __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */
\"./node_modules/react-refresh/runtime.js\");\n\n/**\n * Licensed to the Apache
Software Foundation (ASF) under one\n * or more contributor license agreements.
See the NOTICE file\n * distributed with this work for additional
information\n * regarding copyright ownership. The ASF licenses this file\n *
to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not
use this fi
le except in compliance\n * with the License. You may obtain a copy of the
License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless
required by applicable law or agreed to in writing,\n * software distributed
under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for
the\n * specific language governing permissions and limitations\n * under the
License.\n */ // Service Worker types (declared locally to avoid polluting
global scope)\nself.addEventListener('install', ()=>{\n
self.skipWaiting();\n});\nself.addEventListener('activate', (event)=>{\n
event.waitUntil(self.clients.claim());\n});\n\n\n\nconst $ReactRefreshModuleId$
= __webpack_require__.$Refresh$.moduleId;\nconst $ReactRefreshCurrentExports$ =
__react_refresh_utils__.getModuleExports(\n\t$ReactRefreshModuleId$\n);\n\nfunction
$ReactRefreshModuleRuntime$(exports) {\n\tif (true) {\n\t\tlet errorOverlay
;\n\t\tif (typeof __react_refresh_error_overlay__ !== 'undefined')
{\n\t\t\terrorOverlay = __react_refresh_error_overlay__;\n\t\t}\n\t\tlet
testMode;\n\t\tif (typeof __react_refresh_test__ !== 'undefined')
{\n\t\t\ttestMode = __react_refresh_test__;\n\t\t}\n\t\treturn
__react_refresh_utils__.executeRuntime(\n\t\t\texports,\n\t\t\t$ReactRefreshModuleId$,\n\t\t\tmodule.hot,\n\t\t\terrorOverlay,\n\t\t\ttestMode\n\t\t);\n\t}\n}\n\nif
(typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof
Promise)
{\n\t$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);\n} else
{\n\t$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);\n}//#
sourceURL=[module]\n//#
sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2VydmljZS13b3JrZXIudHMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQVlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3VwZXJzZXQvLi9zcmMvc2VydmljZS13b3JrZXIudHM/N2Y1OCJd
LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMa
WNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFNlcnZpY2UgV29ya2VyIHR5cGVzIChkZWNsYXJlZCBsb2NhbGx5IHRvIGF2b2lkIHBvbGx1dGluZyBnbG9iYWwgc2NvcGUpXG5kZWNsYXJlIGNvbnN0IHNlbGY6IHtcbiAgc2tpcFdhaXRpbmcoKTogUHJvbWlzZTx2b2lkPjtcbiAgY2xpZW50czogeyBjbGFpbSgpOiBQcm9taXNlPHZvaWQ+IH07XG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogJ2luc3RhbGwnIHwgJ2FjdGl2YXRlJyxcbiAgICBsaXN0ZW5lcjogKGV2ZW50OiB7IHdhaXRVbnRpbChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB9KSA9PiB2b2lkLFxuICApOiB2b2lkO1xufTtcblxuc2VsZi5hZGRFdmVudExpc3RlbmVyKCdpbnN0YWxsJywgKCkgPT4ge1xuICBzZWxmLnNraXBXYWl0aW5nKCk7XG59KTtcblxuc2VsZi5hZGRFdmVudExpc3RlbmVyKCdhY3RpdmF0ZScsIGV2ZW50ID0+IHtcbiAgZXZlbnQud2FpdFVudGlsKHNlbGYuY2xpZW50cy5jbGFpbSgpKTtcbn0pO1xuXG5leHBvcnQge307XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//#
sourceURL=webpack-internal:///./src/service-worker.ts\n\n}");
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ id: moduleId,
+/******/ loaded: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ var execOptions = { id: moduleId, module: module,
factory: __webpack_modules__[moduleId], require: __webpack_require__ };
+/******/ __webpack_require__.i.forEach(function(handler) {
handler(execOptions); });
+/******/ module = execOptions.module;
+/******/ execOptions.factory.call(module.exports, module,
module.exports, execOptions.require);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = __webpack_module_cache__;
+/******/
+/******/ // expose the module execution interceptor
+/******/ __webpack_require__.i = [];
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn,
priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 &&
deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] =
deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length;
j++) {
+/******/ if ((priority & 1 === 0 ||
notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) =>
(__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority <
notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/compat get default export */
+/******/ (() => {
+/******/ // getDefaultExport function for compatibility with
non-harmony modules
+/******/ __webpack_require__.n = (module) => {
+/******/ var getter = module && module.__esModule ?
+/******/ () => (module['default']) :
+/******/ () => (module);
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition,
key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports,
key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/get javascript update chunk filename */
+/******/ (() => {
+/******/ // This function allow to reference all chunks
+/******/ __webpack_require__.hu = (chunkId) => {
+/******/ // return url for filenames based on template
+/******/ return "" + chunkId + "." +
__webpack_require__.h() + ".hot-update.js";
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/get update manifest filename */
+/******/ (() => {
+/******/ __webpack_require__.hmrF = () => ("service-worker." +
__webpack_require__.h() + ".hot-update.json");
+/******/ })();
+/******/
+/******/ /* webpack/runtime/getFullHash */
+/******/ (() => {
+/******/ __webpack_require__.h = () => ("06957156a265af42d2ae")
+/******/ })();
+/******/
+/******/ /* webpack/runtime/harmony module decorator */
+/******/ (() => {
+/******/ __webpack_require__.hmd = (module) => {
+/******/ module = Object.create(module);
+/******/ if (!module.children) module.children = [];
+/******/ Object.defineProperty(module, 'exports', {
+/******/ enumerable: true,
+/******/ set: () => {
+/******/ throw new Error('ES Modules may
not assign module.exports or exports.*, Use ESM export syntax, instead: ' +
module.id);
+/******/ }
+/******/ });
+/******/ return module;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) =>
(Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/load script */
+/******/ (() => {
+/******/ var inProgress = {};
+/******/ var dataWebpackPrefix = "superset:";
+/******/ // loadScript function to load a script via script tag
+/******/ __webpack_require__.l = (url, done, key, chunkId) => {
+/******/ if(inProgress[url]) {
inProgress[url].push(done); return; }
+/******/ var script, needAttach;
+/******/ if(key !== undefined) {
+/******/ var scripts =
document.getElementsByTagName("script");
+/******/ for(var i = 0; i < scripts.length; i++)
{
+/******/ var s = scripts[i];
+/******/ if(s.getAttribute("src") == url
|| s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s;
break; }
+/******/ }
+/******/ }
+/******/ if(!script) {
+/******/ needAttach = true;
+/******/ script =
document.createElement('script');
+/******/
+/******/ script.charset = 'utf-8';
+/******/ if (__webpack_require__.nc) {
+/******/ script.setAttribute("nonce",
__webpack_require__.nc);
+/******/ }
+/******/ script.setAttribute("data-webpack",
dataWebpackPrefix + key);
+/******/
+/******/ script.src = url;
+/******/ }
+/******/ inProgress[url] = [done];
+/******/ var onScriptComplete = (prev, event) => {
+/******/ // avoid mem leaks in IE.
+/******/ script.onerror = script.onload = null;
+/******/ clearTimeout(timeout);
+/******/ var doneFns = inProgress[url];
+/******/ delete inProgress[url];
+/******/ script.parentNode &&
script.parentNode.removeChild(script);
+/******/ doneFns && doneFns.forEach((fn) =>
(fn(event)));
+/******/ if(prev) return prev(event);
+/******/ }
+/******/ var timeout =
setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target:
script }), 120000);
+/******/ script.onerror = onScriptComplete.bind(null,
script.onerror);
+/******/ script.onload = onScriptComplete.bind(null,
script.onload);
+/******/ needAttach && document.head.appendChild(script);
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' &&
Symbol.toStringTag) {
+/******/ Object.defineProperty(exports,
Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', {
value: true });
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/node module decorator */
+/******/ (() => {
+/******/ __webpack_require__.nmd = (module) => {
+/******/ module.paths = [];
+/******/ if (!module.children) module.children = [];
+/******/ return module;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/sharing */
+/******/ (() => {
+/******/ __webpack_require__.S = {};
+/******/ var initPromises = {};
+/******/ var initTokens = {};
+/******/ __webpack_require__.I = (name, initScope) => {
+/******/ if(!initScope) initScope = [];
+/******/ // handling circular init calls
+/******/ var initToken = initTokens[name];
+/******/ if(!initToken) initToken = initTokens[name] =
{};
+/******/ if(initScope.indexOf(initToken) >= 0) return;
+/******/ initScope.push(initToken);
+/******/ // only runs once
+/******/ if(initPromises[name]) return
initPromises[name];
+/******/ // creates a new share scope if needed
+/******/
if(!__webpack_require__.o(__webpack_require__.S, name))
__webpack_require__.S[name] = {};
+/******/ // runs all init snippets from all modules
reachable
+/******/ var scope = __webpack_require__.S[name];
+/******/ var warn = (msg) => {
+/******/ if (typeof console !== "undefined" &&
console.warn) console.warn(msg);
+/******/ };
+/******/ var uniqueName = "superset";
+/******/ var register = (name, version, factory, eager)
=> {
+/******/ var versions = scope[name] =
scope[name] || {};
+/******/ var activeVersion = versions[version];
+/******/ if(!activeVersion ||
(!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName
> activeVersion.from))) versions[version] = { get: factory, from: uniqueName,
eager: !!eager };
+/******/ };
+/******/ var initExternal = (id) => {
+/******/ var handleError = (err) =>
(warn("Initialization of sharing external failed: " + err));
+/******/ try {
+/******/ var module =
__webpack_require__(id);
+/******/ if(!module) return;
+/******/ var initFn = (module) =>
(module && module.init && module.init(__webpack_require__.S[name], initScope))
+/******/ if(module.then) return
promises.push(module.then(initFn, handleError));
+/******/ var initResult = initFn(module);
+/******/ if(initResult &&
initResult.then) return promises.push(initResult['catch'](handleError));
+/******/ } catch(err) { handleError(err); }
+/******/ }
+/******/ var promises = [];
+/******/ switch(name) {
+/******/ case "default": {
+/******/ register("antd", "5.27.6", ()
=> (() => (__webpack_require__(/*! ./node_modules/antd/es/index.js */
"./node_modules/antd/es/index.js"))), 1);
+/******/ register("react-dom", "17.0.2",
() => (() => (__webpack_require__(/*! ./node_modules/react-dom/index.js */
"./node_modules/react-dom/index.js"))), 1);
+/******/ register("react", "17.0.2", ()
=> (() => (__webpack_require__(/*! ./node_modules/react/index.js */
"./node_modules/react/index.js"))), 1);
+/******/ }
+/******/ break;
+/******/ }
+/******/ if(!promises.length) return initPromises[name]
= 1;
+/******/ return initPromises[name] =
Promise.all(promises).then(() => (initPromises[name] = 1));
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hot module replacement */
+/******/ (() => {
+/******/ var currentModuleData = {};
+/******/ var installedModules = __webpack_require__.c;
+/******/
+/******/ // module and require creation
+/******/ var currentChildModule;
+/******/ var currentParents = [];
+/******/
+/******/ // status
+/******/ var registeredStatusHandlers = [];
+/******/ var currentStatus = "idle";
+/******/
+/******/ // while downloading
+/******/ var blockingPromises = 0;
+/******/ var blockingPromisesWaiting = [];
+/******/
+/******/ // The update info
+/******/ var currentUpdateApplyHandlers;
+/******/ var queuedInvalidatedModules;
+/******/
+/******/ __webpack_require__.hmrD = currentModuleData;
+/******/
+/******/ __webpack_require__.i.push(function (options) {
+/******/ var module = options.module;
+/******/ var require = createRequire(options.require,
options.id);
+/******/ module.hot = createModuleHotObject(options.id,
module);
+/******/ module.parents = currentParents;
+/******/ module.children = [];
+/******/ currentParents = [];
+/******/ options.require = require;
+/******/ });
+/******/
+/******/ __webpack_require__.hmrC = {};
+/******/ __webpack_require__.hmrI = {};
+/******/
+/******/ function createRequire(require, moduleId) {
+/******/ var me = installedModules[moduleId];
+/******/ if (!me) return require;
+/******/ var fn = function (request) {
+/******/ if (me.hot.active) {
+/******/ if (installedModules[request]) {
+/******/ var parents =
installedModules[request].parents;
+/******/ if
(parents.indexOf(moduleId) === -1) {
+/******/
parents.push(moduleId);
+/******/ }
+/******/ } else {
+/******/ currentParents =
[moduleId];
+/******/ currentChildModule =
request;
+/******/ }
+/******/ if
(me.children.indexOf(request) === -1) {
+/******/
me.children.push(request);
+/******/ }
+/******/ } else {
+/******/ console.warn(
+/******/ "[HMR] unexpected
require(" +
+/******/ request +
+/******/ ") from
disposed module " +
+/******/ moduleId
+/******/ );
+/******/ currentParents = [];
+/******/ }
+/******/ return require(request);
+/******/ };
+/******/ var createPropertyDescriptor = function (name) {
+/******/ return {
+/******/ configurable: true,
+/******/ enumerable: true,
+/******/ get: function () {
+/******/ return require[name];
+/******/ },
+/******/ set: function (value) {
+/******/ require[name] = value;
+/******/ }
+/******/ };
+/******/ };
+/******/ for (var name in require) {
+/******/ if
(Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
+/******/ Object.defineProperty(fn, name,
createPropertyDescriptor(name));
+/******/ }
+/******/ }
+/******/ fn.e = function (chunkId, fetchPriority) {
+/******/ return
trackBlockingPromise(require.e(chunkId, fetchPriority));
+/******/ };
+/******/ return fn;
+/******/ }
+/******/
+/******/ function createModuleHotObject(moduleId, me) {
+/******/ var _main = currentChildModule !== moduleId;
+/******/ var hot = {
+/******/ // private stuff
+/******/ _acceptedDependencies: {},
+/******/ _acceptedErrorHandlers: {},
+/******/ _declinedDependencies: {},
+/******/ _selfAccepted: false,
+/******/ _selfDeclined: false,
+/******/ _selfInvalidated: false,
+/******/ _disposeHandlers: [],
+/******/ _main: _main,
+/******/ _requireSelf: function () {
+/******/ currentParents =
me.parents.slice();
+/******/ currentChildModule = _main ?
undefined : moduleId;
+/******/ __webpack_require__(moduleId);
+/******/ },
+/******/
+/******/ // Module API
+/******/ active: true,
+/******/ accept: function (dep, callback,
errorHandler) {
+/******/ if (dep === undefined)
hot._selfAccepted = true;
+/******/ else if (typeof dep ===
"function") hot._selfAccepted = dep;
+/******/ else if (typeof dep ===
"object" && dep !== null) {
+/******/ for (var i = 0; i <
dep.length; i++) {
+/******/
hot._acceptedDependencies[dep[i]] = callback || function () {};
+/******/
hot._acceptedErrorHandlers[dep[i]] = errorHandler;
+/******/ }
+/******/ } else {
+/******/
hot._acceptedDependencies[dep] = callback || function () {};
+/******/
hot._acceptedErrorHandlers[dep] = errorHandler;
+/******/ }
+/******/ },
+/******/ decline: function (dep) {
+/******/ if (dep === undefined)
hot._selfDeclined = true;
+/******/ else if (typeof dep ===
"object" && dep !== null)
+/******/ for (var i = 0; i <
dep.length; i++)
+/******/
hot._declinedDependencies[dep[i]] = true;
+/******/ else
hot._declinedDependencies[dep] = true;
+/******/ },
+/******/ dispose: function (callback) {
+/******/
hot._disposeHandlers.push(callback);
+/******/ },
+/******/ addDisposeHandler: function (callback) {
+/******/
hot._disposeHandlers.push(callback);
+/******/ },
+/******/ removeDisposeHandler: function
(callback) {
+/******/ var idx =
hot._disposeHandlers.indexOf(callback);
+/******/ if (idx >= 0)
hot._disposeHandlers.splice(idx, 1);
+/******/ },
+/******/ invalidate: function () {
+/******/ this._selfInvalidated = true;
+/******/ switch (currentStatus) {
+/******/ case "idle":
+/******/
currentUpdateApplyHandlers = [];
+/******/
Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/
__webpack_require__.hmrI[key](
+/******/
moduleId,
+/******/
currentUpdateApplyHandlers
+/******/ );
+/******/ });
+/******/
setStatus("ready");
+/******/ break;
+/******/ case "ready":
+/******/
Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/
__webpack_require__.hmrI[key](
+/******/
moduleId,
+/******/
currentUpdateApplyHandlers
+/******/ );
+/******/ });
+/******/ break;
+/******/ case "prepare":
+/******/ case "check":
+/******/ case "dispose":
+/******/ case "apply":
+/******/
(queuedInvalidatedModules = queuedInvalidatedModules || []).push(
+/******/ moduleId
+/******/ );
+/******/ break;
+/******/ default:
+/******/ // ignore
requests in error states
+/******/ break;
+/******/ }
+/******/ },
+/******/
+/******/ // Management API
+/******/ check: hotCheck,
+/******/ apply: hotApply,
+/******/ status: function (l) {
+/******/ if (!l) return currentStatus;
+/******/
registeredStatusHandlers.push(l);
+/******/ },
+/******/ addStatusHandler: function (l) {
+/******/
registeredStatusHandlers.push(l);
+/******/ },
+/******/ removeStatusHandler: function (l) {
+/******/ var idx =
registeredStatusHandlers.indexOf(l);
+/******/ if (idx >= 0)
registeredStatusHandlers.splice(idx, 1);
+/******/ },
+/******/
+/******/ // inherit from previous dispose call
+/******/ data: currentModuleData[moduleId]
+/******/ };
+/******/ currentChildModule = undefined;
+/******/ return hot;
+/******/ }
+/******/
+/******/ function setStatus(newStatus) {
+/******/ currentStatus = newStatus;
+/******/ var results = [];
+/******/
+/******/ for (var i = 0; i <
registeredStatusHandlers.length; i++)
+/******/ results[i] =
registeredStatusHandlers[i].call(null, newStatus);
+/******/
+/******/ return Promise.all(results).then(function ()
{});
+/******/ }
+/******/
+/******/ function unblock() {
+/******/ if (--blockingPromises === 0) {
+/******/ setStatus("ready").then(function () {
+/******/ if (blockingPromises === 0) {
+/******/ var list =
blockingPromisesWaiting;
+/******/ blockingPromisesWaiting
= [];
+/******/ for (var i = 0; i <
list.length; i++) {
+/******/ list[i]();
+/******/ }
+/******/ }
+/******/ });
+/******/ }
+/******/ }
+/******/
+/******/ function trackBlockingPromise(promise) {
+/******/ switch (currentStatus) {
+/******/ case "ready":
+/******/ setStatus("prepare");
+/******/ /* fallthrough */
+/******/ case "prepare":
+/******/ blockingPromises++;
+/******/ promise.then(unblock, unblock);
+/******/ return promise;
+/******/ default:
+/******/ return promise;
+/******/ }
+/******/ }
+/******/
+/******/ function waitForBlockingPromises(fn) {
+/******/ if (blockingPromises === 0) return fn();
+/******/ return new Promise(function (resolve) {
+/******/ blockingPromisesWaiting.push(function
() {
+/******/ resolve(fn());
+/******/ });
+/******/ });
+/******/ }
+/******/
+/******/ function hotCheck(applyOnUpdate) {
+/******/ if (currentStatus !== "idle") {
+/******/ throw new Error("check() is only
allowed in idle status");
+/******/ }
+/******/ return setStatus("check")
+/******/ .then(__webpack_require__.hmrM)
+/******/ .then(function (update) {
+/******/ if (!update) {
+/******/ return
setStatus(applyInvalidatedModules() ? "ready" : "idle").then(
+/******/ function () {
+/******/ return
null;
+/******/ }
+/******/ );
+/******/ }
+/******/
+/******/ return
setStatus("prepare").then(function () {
+/******/ var updatedModules = [];
+/******/
currentUpdateApplyHandlers = [];
+/******/
+/******/ return Promise.all(
+/******/
Object.keys(__webpack_require__.hmrC).reduce(function (
+/******/
promises,
+/******/ key
+/******/ ) {
+/******/
__webpack_require__.hmrC[key](
+/******/
update.c,
+/******/
update.r,
+/******/
update.m,
+/******/
promises,
+/******/
currentUpdateApplyHandlers,
+/******/
updatedModules
+/******/ );
+/******/ return
promises;
+/******/ }, [])
+/******/ ).then(function () {
+/******/ return
waitForBlockingPromises(function () {
+/******/ if
(applyOnUpdate) {
+/******/
return internalApply(applyOnUpdate);
+/******/ }
+/******/ return
setStatus("ready").then(function () {
+/******/
return updatedModules;
+/******/ });
+/******/ });
+/******/ });
+/******/ });
+/******/ });
+/******/ }
+/******/
+/******/ function hotApply(options) {
+/******/ if (currentStatus !== "ready") {
+/******/ return Promise.resolve().then(function
() {
+/******/ throw new Error(
+/******/ "apply() is only
allowed in ready status (state: " +
+/******/ currentStatus +
+/******/ ")"
+/******/ );
+/******/ });
+/******/ }
+/******/ return internalApply(options);
+/******/ }
+/******/
+/******/ function internalApply(options) {
+/******/ options = options || {};
+/******/
+/******/ applyInvalidatedModules();
+/******/
+/******/ var results =
currentUpdateApplyHandlers.map(function (handler) {
+/******/ return handler(options);
+/******/ });
+/******/ currentUpdateApplyHandlers = undefined;
+/******/
+/******/ var errors = results
+/******/ .map(function (r) {
+/******/ return r.error;
+/******/ })
+/******/ .filter(Boolean);
+/******/
+/******/ if (errors.length > 0) {
+/******/ return setStatus("abort").then(function
() {
+/******/ throw errors[0];
+/******/ });
+/******/ }
+/******/
+/******/ // Now in "dispose" phase
+/******/ var disposePromise = setStatus("dispose");
+/******/
+/******/ results.forEach(function (result) {
+/******/ if (result.dispose) result.dispose();
+/******/ });
+/******/
+/******/ // Now in "apply" phase
+/******/ var applyPromise = setStatus("apply");
+/******/
+/******/ var error;
+/******/ var reportError = function (err) {
+/******/ if (!error) error = err;
+/******/ };
+/******/
+/******/ var outdatedModules = [];
+/******/
+/******/ var onAccepted = function () {
+/******/ return Promise.all([disposePromise,
applyPromise]).then(function () {
+/******/ // handle errors in accept
handlers and self accepted module load
+/******/ if (error) {
+/******/ return
setStatus("fail").then(function () {
+/******/ throw error;
+/******/ });
+/******/ }
+/******/
+/******/ if (queuedInvalidatedModules) {
+/******/ return
internalApply(options).then(function (list) {
+/******/
outdatedModules.forEach(function (moduleId) {
+/******/ if
(list.indexOf(moduleId) < 0) list.push(moduleId);
+/******/ });
+/******/ return list;
+/******/ });
+/******/ }
+/******/
+/******/ return
setStatus("idle").then(function () {
+/******/ return outdatedModules;
+/******/ });
+/******/ });
+/******/ };
+/******/
+/******/ return Promise.all(
+/******/ results
+/******/ .filter(function (result) {
+/******/ return result.apply;
+/******/ })
+/******/ .map(function (result) {
+/******/ return
result.apply(reportError);
+/******/ })
+/******/ )
+/******/ .then(function (applyResults) {
+/******/ applyResults.forEach(function
(modules) {
+/******/ if (modules) {
+/******/ for (var i = 0;
i < modules.length; i++) {
+/******/
outdatedModules.push(modules[i]);
+/******/ }
+/******/ }
+/******/ });
+/******/ })
+/******/ .then(onAccepted);
+/******/ }
+/******/
+/******/ function applyInvalidatedModules() {
+/******/ if (queuedInvalidatedModules) {
+/******/ if (!currentUpdateApplyHandlers)
currentUpdateApplyHandlers = [];
+/******/
Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/
queuedInvalidatedModules.forEach(function (moduleId) {
+/******/
__webpack_require__.hmrI[key](
+/******/ moduleId,
+/******/
currentUpdateApplyHandlers
+/******/ );
+/******/ });
+/******/ });
+/******/ queuedInvalidatedModules = undefined;
+/******/ return true;
+/******/ }
+/******/ }
+/******/ })();
+/******/
+/******/ /* webpack/runtime/publicPath */
+/******/ (() => {
+/******/ __webpack_require__.p = "/static/assets/";
+/******/ })();
+/******/
+/******/ /* webpack/runtime/react refresh */
+/******/ (() => {
+/******/ const setup = (moduleId) => {
+/******/ const refresh = {
+/******/ moduleId: moduleId,
+/******/ register: (type, id) => {
+/******/ const typeId = moduleId + " " +
id;
+/******/ refresh.runtime.register(type,
typeId);
+/******/ },
+/******/ signature: () =>
(refresh.runtime.createSignatureFunctionForTransform()),
+/******/ runtime: {
+/******/
createSignatureFunctionForTransform: () => ((type) => (type)),
+/******/ register: x => {}
+/******/ },
+/******/ };
+/******/ return refresh;
+/******/ }
+/******/
+/******/ __webpack_require__.i.push((options) => {
+/******/ const originalFactory = options.factory;
+/******/ options.factory = function(moduleObject,
moduleExports, webpackRequire) {
+/******/ const hotRequire = (request) =>
(webpackRequire(request));
+/******/ const createPropertyDescriptor = (name)
=> {
+/******/ return {
+/******/ configurable: true,
+/******/ enumerable: true,
+/******/ get: () =>
(webpackRequire[name]),
+/******/ set: (value) => {
+/******/
webpackRequire[name] = value;
+/******/ },
+/******/ };
+/******/ };
+/******/ for (const name in webpackRequire) {
+/******/ if
(Object.prototype.hasOwnProperty.call(webpackRequire, name) && name !==
"$Refresh$") {
+/******/
Object.defineProperty(hotRequire, name, createPropertyDescriptor(name));
+/******/ }
+/******/ }
+/******/ hotRequire.$Refresh$ =
setup(options.id);
+/******/ originalFactory.call(this,
moduleObject, moduleExports, hotRequire);
+/******/ };
+/******/ });
+/******/ })();
+/******/
+/******/ /* webpack/runtime/consumes */
+/******/ (() => {
+/******/ var parseVersion = (str) => {
+/******/ // see webpack/lib/util/semver.js for original
code
+/******/ var p=p=>{return
p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return
n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;
+/******/ }
+/******/ var versionLt = (a, b) => {
+/******/ // see webpack/lib/util/semver.js for original
code
+/******/ a=parseVersion(a),b=parseVersion(b);for(var
r=0;;){if(r>=a.length)return r<b.length&&"u"!=(typeof b[r])[0];var
e=a[r],n=(typeof e)[0];if(r>=b.length)return"u"==n;var t=b[r],f=(typeof
t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return
e<t;r++}
+/******/ }
+/******/ var rangeToString = (range) => {
+/******/ // see webpack/lib/util/semver.js for original
code
+/******/ var
r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var
e=1,a=1;a<range.length;a++){e--,n+="u"==(typeof(t=range[a]))[0]?"-":(e>0?".":"")+(e=2,t)}return
n}var g=[];for(a=1;a<range.length;a++){var
t=range[a];g.push(0===t?"not("+o()+")":1===t?"("+o()+" ||
"+o()+")":2===t?g.pop()+" "+g.pop():rangeToString(t))}return o();function
o(){return g.pop().replace(/^\((.+)\)$/,"$1")}
+/******/ }
+/******/ var satisfy = (range, version) => {
+/******/ // see webpack/lib/util/semver.js for original
code
+/******/ if(0 in
range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var
n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof
range[i])[0]:"";if(n>=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else
if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else
if("s"!=g&&"n"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else"s"!=g&&"n"!=g&&(a=!1,i--)}}var
t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var
u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();
+/******/ }
+/******/ var exists = (scope, key) => {
+/******/ return scope && __webpack_require__.o(scope,
key);
+/******/ }
+/******/ var get = (entry) => {
+/******/ entry.loaded = 1;
+/******/ return entry.get()
+/******/ };
+/******/ var eagerOnly = (versions) => {
+/******/ return Object.keys(versions).reduce((filtered,
version) => {
+/******/ if (versions[version].eager) {
+/******/ filtered[version] =
versions[version];
+/******/ }
+/******/ return filtered;
+/******/ }, {});
+/******/ };
+/******/ var findLatestVersion = (scope, key, eager) => {
+/******/ var versions = eager ? eagerOnly(scope[key]) :
scope[key];
+/******/ var key = Object.keys(versions).reduce((a, b)
=> {
+/******/ return !a || versionLt(a, b) ? b : a;
+/******/ }, 0);
+/******/ return key && versions[key];
+/******/ };
+/******/ var findSatisfyingVersion = (scope, key,
requiredVersion, eager) => {
+/******/ var versions = eager ? eagerOnly(scope[key]) :
scope[key];
+/******/ var key = Object.keys(versions).reduce((a, b)
=> {
+/******/ if (!satisfy(requiredVersion, b))
return a;
+/******/ return !a || versionLt(a, b) ? b : a;
+/******/ }, 0);
+/******/ return key && versions[key]
+/******/ };
+/******/ var findSingletonVersionKey = (scope, key, eager) => {
+/******/ var versions = eager ? eagerOnly(scope[key]) :
scope[key];
+/******/ return Object.keys(versions).reduce((a, b) => {
+/******/ return !a || (!versions[a].loaded &&
versionLt(a, b)) ? b : a;
+/******/ }, 0);
+/******/ };
+/******/ var getInvalidSingletonVersionMessage = (scope, key,
version, requiredVersion) => {
+/******/ return "Unsatisfied version " + version + "
from " + (version && scope[key][version].from) + " of shared singleton module "
+ key + " (required " + rangeToString(requiredVersion) + ")"
+/******/ };
+/******/ var getInvalidVersionMessage = (scope, scopeName, key,
requiredVersion, eager) => {
+/******/ var versions = scope[key];
+/******/ return "No satisfying version (" +
rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "")
+ " of shared module " + key + " found in shared scope " + scopeName + ".\n" +
+/******/ "Available versions: " +
Object.keys(versions).map((key) => {
+/******/ return key + " from " +
versions[key].from;
+/******/ }).join(", ");
+/******/ };
+/******/ var fail = (msg) => {
+/******/ throw new Error(msg);
+/******/ }
+/******/ var failAsNotExist = (scopeName, key) => {
+/******/ return fail("Shared module " + key + " doesn't
exist in shared scope " + scopeName);
+/******/ }
+/******/ var warn = /*#__PURE__*/ (msg) => {
+/******/ if (typeof console !== "undefined" &&
console.warn) console.warn(msg);
+/******/ };
+/******/ var init = (fn) => (function(scopeName, key, eager, c,
d) {
+/******/ var promise = __webpack_require__.I(scopeName);
+/******/ if (promise && promise.then && !eager) {
+/******/ return promise.then(fn.bind(fn,
scopeName, __webpack_require__.S[scopeName], key, false, c, d));
+/******/ }
+/******/ return fn(scopeName,
__webpack_require__.S[scopeName], key, eager, c, d);
+/******/ });
+/******/
+/******/ var useFallback = (scopeName, key, fallback) => {
+/******/ return fallback ? fallback() :
failAsNotExist(scopeName, key);
+/******/ }
+/******/ var load = /*#__PURE__*/ init((scopeName, scope, key,
eager, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ return get(findLatestVersion(scope, key,
eager));
+/******/ });
+/******/ var loadVersion = /*#__PURE__*/ init((scopeName, scope,
key, eager, requiredVersion, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ var satisfyingVersion =
findSatisfyingVersion(scope, key, requiredVersion, eager);
+/******/ if (satisfyingVersion) return
get(satisfyingVersion);
+/******/ warn(getInvalidVersionMessage(scope, scopeName,
key, requiredVersion, eager))
+/******/ return get(findLatestVersion(scope, key,
eager));
+/******/ });
+/******/ var loadStrictVersion = /*#__PURE__*/ init((scopeName,
scope, key, eager, requiredVersion, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ var satisfyingVersion =
findSatisfyingVersion(scope, key, requiredVersion, eager);
+/******/ if (satisfyingVersion) return
get(satisfyingVersion);
+/******/ if (fallback) return fallback();
+/******/ fail(getInvalidVersionMessage(scope, scopeName,
key, requiredVersion, eager));
+/******/ });
+/******/ var loadSingleton = /*#__PURE__*/ init((scopeName,
scope, key, eager, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ var version = findSingletonVersionKey(scope,
key, eager);
+/******/ return get(scope[key][version]);
+/******/ });
+/******/ var loadSingletonVersion = /*#__PURE__*/
init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ var version = findSingletonVersionKey(scope,
key, eager);
+/******/ if (!satisfy(requiredVersion, version)) {
+/******/
warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
+/******/ }
+/******/ return get(scope[key][version]);
+/******/ });
+/******/ var loadStrictSingletonVersion = /*#__PURE__*/
init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ if (!exists(scope, key)) return
useFallback(scopeName, key, fallback);
+/******/ var version = findSingletonVersionKey(scope,
key, eager);
+/******/ if (!satisfy(requiredVersion, version)) {
+/******/
fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
+/******/ }
+/******/ return get(scope[key][version]);
+/******/ });
+/******/ var installedModules = {};
+/******/ var moduleToHandlerMapping = {
+/******/
"webpack/sharing/consume/default/react-dom/react-dom": () =>
(loadSingletonVersion("default", "react-dom", true, [1,17,0,2], () => (() =>
(__webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"))))),
+/******/ "webpack/sharing/consume/default/react/react":
() => (loadSingletonVersion("default", "react", true, [1,17,0,2], () => (() =>
(__webpack_require__(/*! react */ "./node_modules/react/index.js")))))
+/******/ };
+/******/ var initialConsumes =
["webpack/sharing/consume/default/react-dom/react-dom","webpack/sharing/consume/default/react/react"];
+/******/ initialConsumes.forEach((id) => {
+/******/ __webpack_require__.m[id] = (module) => {
+/******/ // Handle case when module is used sync
+/******/ installedModules[id] = 0;
+/******/ delete __webpack_require__.c[id];
+/******/ var factory =
moduleToHandlerMapping[id]();
+/******/ if(typeof factory !== "function") throw
new Error("Shared module is not available for eager consumption: " + id);
+/******/ module.exports = factory();
+/******/ }
+/******/ });
+/******/ // no chunk loading of consumes
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk
preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 =
chunk loaded
+/******/ var installedChunks = __webpack_require__.hmrS_jsonp =
__webpack_require__.hmrS_jsonp || {
+/******/ "service-worker": 0,
+/******/
"webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef":
0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ var currentUpdatedModulesList;
+/******/ var waitingUpdateResolves = {};
+/******/ function loadUpdateChunk(chunkId, updatedModulesList) {
+/******/ currentUpdatedModulesList = updatedModulesList;
+/******/ return new Promise((resolve, reject) => {
+/******/ waitingUpdateResolves[chunkId] =
resolve;
+/******/ // start update chunk loading
+/******/ var url = __webpack_require__.p +
__webpack_require__.hu(chunkId);
+/******/ // create error before stack unwound to
get useful stacktrace later
+/******/ var error = new Error();
+/******/ var loadingEnded = (event) => {
+/******/
if(waitingUpdateResolves[chunkId]) {
+/******/
waitingUpdateResolves[chunkId] = undefined
+/******/ var errorType = event
&& (event.type === 'load' ? 'missing' : event.type);
+/******/ var realSrc = event &&
event.target && event.target.src;
+/******/ error.message =
'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' +
realSrc + ')';
+/******/ error.name =
'ChunkLoadError';
+/******/ error.type = errorType;
+/******/ error.request = realSrc;
+/******/ reject(error);
+/******/ }
+/******/ };
+/******/ __webpack_require__.l(url,
loadingEnded);
+/******/ });
+/******/ }
+/******/
+/******/ globalThis["webpackHotUpdatesuperset"] = (chunkId,
moreModules, runtime) => {
+/******/ for(var moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules,
moduleId)) {
+/******/ currentUpdate[moduleId] =
moreModules[moduleId];
+/******/ if(currentUpdatedModulesList)
currentUpdatedModulesList.push(moduleId);
+/******/ }
+/******/ }
+/******/ if(runtime) currentUpdateRuntime.push(runtime);
+/******/ if(waitingUpdateResolves[chunkId]) {
+/******/ waitingUpdateResolves[chunkId]();
+/******/ waitingUpdateResolves[chunkId] =
undefined;
+/******/ }
+/******/ };
+/******/
+/******/ var currentUpdateChunks;
+/******/ var currentUpdate;
+/******/ var currentUpdateRemovedChunks;
+/******/ var currentUpdateRuntime;
+/******/ function applyHandler(options) {
+/******/ if (__webpack_require__.f) delete
__webpack_require__.f.jsonpHmr;
+/******/ currentUpdateChunks = undefined;
+/******/ function
getAffectedModuleEffects(updateModuleId) {
+/******/ var outdatedModules = [updateModuleId];
+/******/ var outdatedDependencies = {};
+/******/
+/******/ var queue =
outdatedModules.map(function (id) {
+/******/ return {
+/******/ chain: [id],
+/******/ id: id
+/******/ };
+/******/ });
+/******/ while (queue.length > 0) {
+/******/ var queueItem = queue.pop();
+/******/ var moduleId = queueItem.id;
+/******/ var chain = queueItem.chain;
+/******/ var module =
__webpack_require__.c[moduleId];
+/******/ if (
+/******/ !module ||
+/******/
(module.hot._selfAccepted && !module.hot._selfInvalidated)
+/******/ )
+/******/ continue;
+/******/ if (module.hot._selfDeclined) {
+/******/ return {
+/******/ type:
"self-declined",
+/******/ chain: chain,
+/******/ moduleId:
moduleId
+/******/ };
+/******/ }
+/******/ if (module.hot._main) {
+/******/ return {
+/******/ type:
"unaccepted",
+/******/ chain: chain,
+/******/ moduleId:
moduleId
+/******/ };
+/******/ }
+/******/ for (var i = 0; i <
module.parents.length; i++) {
+/******/ var parentId =
module.parents[i];
+/******/ var parent =
__webpack_require__.c[parentId];
+/******/ if (!parent) continue;
+/******/ if
(parent.hot._declinedDependencies[moduleId]) {
+/******/ return {
+/******/ type:
"declined",
+/******/ chain:
chain.concat([parentId]),
+/******/
moduleId: moduleId,
+/******/
parentId: parentId
+/******/ };
+/******/ }
+/******/ if
(outdatedModules.indexOf(parentId) !== -1) continue;
+/******/ if
(parent.hot._acceptedDependencies[moduleId]) {
+/******/ if
(!outdatedDependencies[parentId])
+/******/
outdatedDependencies[parentId] = [];
+/******/
addAllToSet(outdatedDependencies[parentId], [moduleId]);
+/******/ continue;
+/******/ }
+/******/ delete
outdatedDependencies[parentId];
+/******/
outdatedModules.push(parentId);
+/******/ queue.push({
+/******/ chain:
chain.concat([parentId]),
+/******/ id: parentId
+/******/ });
+/******/ }
+/******/ }
+/******/
+/******/ return {
+/******/ type: "accepted",
+/******/ moduleId: updateModuleId,
+/******/ outdatedModules:
outdatedModules,
+/******/ outdatedDependencies:
outdatedDependencies
+/******/ };
+/******/ }
+/******/
+/******/ function addAllToSet(a, b) {
+/******/ for (var i = 0; i < b.length; i++) {
+/******/ var item = b[i];
+/******/ if (a.indexOf(item) === -1)
a.push(item);
+/******/ }
+/******/ }
+/******/
+/******/ // at begin all updates modules are outdated
+/******/ // the "outdated" status can propagate to
parents if they don't accept the children
+/******/ var outdatedDependencies = {};
+/******/ var outdatedModules = [];
+/******/ var appliedUpdate = {};
+/******/
+/******/ var warnUnexpectedRequire = function
warnUnexpectedRequire(module) {
+/******/ console.warn(
+/******/ "[HMR] unexpected require(" +
module.id + ") to disposed module"
+/******/ );
+/******/ };
+/******/
+/******/ for (var moduleId in currentUpdate) {
+/******/ if
(__webpack_require__.o(currentUpdate, moduleId)) {
+/******/ var newModuleFactory =
currentUpdate[moduleId];
+/******/ var result = newModuleFactory
+/******/ ?
getAffectedModuleEffects(moduleId)
+/******/ : {
+/******/ type:
"disposed",
+/******/
moduleId: moduleId
+/******/ };
+/******/ /** @type {Error|false} */
+/******/ var abortError = false;
+/******/ var doApply = false;
+/******/ var doDispose = false;
+/******/ var chainInfo = "";
+/******/ if (result.chain) {
+/******/ chainInfo = "\nUpdate
propagation: " + result.chain.join(" -> ");
+/******/ }
+/******/ switch (result.type) {
+/******/ case "self-declined":
+/******/ if
(options.onDeclined) options.onDeclined(result);
+/******/ if
(!options.ignoreDeclined)
+/******/
abortError = new Error(
+/******/
"Aborted because of self decline: " +
+/******/
result.moduleId +
+/******/
chainInfo
+/******/ );
+/******/ break;
+/******/ case "declined":
+/******/ if
(options.onDeclined) options.onDeclined(result);
+/******/ if
(!options.ignoreDeclined)
+/******/
abortError = new Error(
+/******/
"Aborted because of declined dependency: " +
+/******/
result.moduleId +
+/******/
" in " +
+/******/
result.parentId +
+/******/
chainInfo
+/******/ );
+/******/ break;
+/******/ case "unaccepted":
+/******/ if
(options.onUnaccepted) options.onUnaccepted(result);
+/******/ if
(!options.ignoreUnaccepted)
+/******/
abortError = new Error(
+/******/
"Aborted because " + moduleId + " is not accepted" + chainInfo
+/******/ );
+/******/ break;
+/******/ case "accepted":
+/******/ if
(options.onAccepted) options.onAccepted(result);
+/******/ doApply = true;
+/******/ break;
+/******/ case "disposed":
+/******/ if
(options.onDisposed) options.onDisposed(result);
+/******/ doDispose =
true;
+/******/ break;
+/******/ default:
+/******/ throw new
Error("Unexception type " + result.type);
+/******/ }
+/******/ if (abortError) {
+/******/ return {
+/******/ error:
abortError
+/******/ };
+/******/ }
+/******/ if (doApply) {
+/******/ appliedUpdate[moduleId]
= newModuleFactory;
+/******/
addAllToSet(outdatedModules, result.outdatedModules);
+/******/ for (moduleId in
result.outdatedDependencies) {
+/******/ if
(__webpack_require__.o(result.outdatedDependencies, moduleId)) {
+/******/ if
(!outdatedDependencies[moduleId])
+/******/
outdatedDependencies[moduleId] = [];
+/******/
addAllToSet(
+/******/
outdatedDependencies[moduleId],
+/******/
result.outdatedDependencies[moduleId]
+/******/ );
+/******/ }
+/******/ }
+/******/ }
+/******/ if (doDispose) {
+/******/
addAllToSet(outdatedModules, [result.moduleId]);
+/******/ appliedUpdate[moduleId]
= warnUnexpectedRequire;
+/******/ }
+/******/ }
+/******/ }
+/******/ currentUpdate = undefined;
+/******/
+/******/ // Store self accepted outdated modules to
require them later by the module system
+/******/ var outdatedSelfAcceptedModules = [];
+/******/ for (var j = 0; j < outdatedModules.length;
j++) {
+/******/ var outdatedModuleId =
outdatedModules[j];
+/******/ var module =
__webpack_require__.c[outdatedModuleId];
+/******/ if (
+/******/ module &&
+/******/ (module.hot._selfAccepted ||
module.hot._main) &&
+/******/ // removed self-accepted
modules should not be required
+/******/ appliedUpdate[outdatedModuleId]
!== warnUnexpectedRequire &&
+/******/ // when called invalidate
self-accepting is not possible
+/******/ !module.hot._selfInvalidated
+/******/ ) {
+/******/
outdatedSelfAcceptedModules.push({
+/******/ module:
outdatedModuleId,
+/******/ require:
module.hot._requireSelf,
+/******/ errorHandler:
module.hot._selfAccepted
+/******/ });
+/******/ }
+/******/ }
+/******/
+/******/ var moduleOutdatedDependencies;
+/******/
+/******/ return {
+/******/ dispose: function () {
+/******/
currentUpdateRemovedChunks.forEach(function (chunkId) {
+/******/ delete
installedChunks[chunkId];
+/******/ });
+/******/ currentUpdateRemovedChunks =
undefined;
+/******/
+/******/ var idx;
+/******/ var queue =
outdatedModules.slice();
+/******/ while (queue.length > 0) {
+/******/ var moduleId =
queue.pop();
+/******/ var module =
__webpack_require__.c[moduleId];
+/******/ if (!module) continue;
+/******/
+/******/ var data = {};
+/******/
+/******/ // Call dispose handlers
+/******/ var disposeHandlers =
module.hot._disposeHandlers;
+/******/ for (j = 0; j <
disposeHandlers.length; j++) {
+/******/
disposeHandlers[j].call(null, data);
+/******/ }
+/******/
__webpack_require__.hmrD[moduleId] = data;
+/******/
+/******/ // disable module (this
disables requires from this module)
+/******/ module.hot.active =
false;
+/******/
+/******/ // remove module from
cache
+/******/ delete
__webpack_require__.c[moduleId];
+/******/
+/******/ // when disposing there
is no need to call dispose handler
+/******/ delete
outdatedDependencies[moduleId];
+/******/
+/******/ // remove "parents"
references from all children
+/******/ for (j = 0; j <
module.children.length; j++) {
+/******/ var child =
__webpack_require__.c[module.children[j]];
+/******/ if (!child)
continue;
+/******/ idx =
child.parents.indexOf(moduleId);
+/******/ if (idx >= 0) {
+/******/
child.parents.splice(idx, 1);
+/******/ }
+/******/ }
+/******/ }
+/******/
+/******/ // remove outdated dependency
from module children
+/******/ var dependency;
+/******/ for (var outdatedModuleId in
outdatedDependencies) {
+/******/ if
(__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
+/******/ module =
__webpack_require__.c[outdatedModuleId];
+/******/ if (module) {
+/******/
moduleOutdatedDependencies =
+/******/
outdatedDependencies[outdatedModuleId];
+/******/ for (j
= 0; j < moduleOutdatedDependencies.length; j++) {
+/******/
dependency = moduleOutdatedDependencies[j];
+/******/
idx = module.children.indexOf(dependency);
+/******/
if (idx >= 0) module.children.splice(idx, 1);
+/******/ }
+/******/ }
+/******/ }
+/******/ }
+/******/ },
+/******/ apply: function (reportError) {
+/******/ var acceptPromises = [];
+/******/ // insert new code
+/******/ for (var updateModuleId in
appliedUpdate) {
+/******/ if
(__webpack_require__.o(appliedUpdate, updateModuleId)) {
+/******/
__webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];
+/******/ }
+/******/ }
+/******/
+/******/ // run new runtime modules
+/******/ for (var i = 0; i <
currentUpdateRuntime.length; i++) {
+/******/
currentUpdateRuntime[i](__webpack_require__);
+/******/ }
+/******/
+/******/ // call accept handlers
+/******/ for (var outdatedModuleId in
outdatedDependencies) {
+/******/ if
(__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
+/******/ var module =
__webpack_require__.c[outdatedModuleId];
+/******/ if (module) {
+/******/
moduleOutdatedDependencies =
+/******/
outdatedDependencies[outdatedModuleId];
+/******/ var
callbacks = [];
+/******/ var
errorHandlers = [];
+/******/ var
dependenciesForCallbacks = [];
+/******/ for
(var j = 0; j < moduleOutdatedDependencies.length; j++) {
+/******/
var dependency = moduleOutdatedDependencies[j];
+/******/
var acceptCallback =
+/******/
module.hot._acceptedDependencies[dependency];
+/******/
var errorHandler =
+/******/
module.hot._acceptedErrorHandlers[dependency];
+/******/
if (acceptCallback) {
+/******/
if (callbacks.indexOf(acceptCallback) !== -1) continue;
+/******/
callbacks.push(acceptCallback);
+/******/
errorHandlers.push(errorHandler);
+/******/
dependenciesForCallbacks.push(dependency);
+/******/
}
+/******/ }
+/******/ for
(var k = 0; k < callbacks.length; k++) {
+/******/
var result;
+/******/
try {
+/******/
result = callbacks[k].call(null, moduleOutdatedDependencies);
+/******/
} catch (err) {
+/******/
if (typeof errorHandlers[k] === "function") {
+/******/
try {
+/******/
errorHandlers[k](err, {
+/******/
moduleId: outdatedModuleId,
+/******/
dependencyId: dependenciesForCallbacks[k]
+/******/
});
+/******/
} catch (err2) {
+/******/
if (options.onErrored) {
+/******/
options.onErrored({
+/******/
type: "accept-error-handler-errored",
+/******/
moduleId: outdatedModuleId,
+/******/
dependencyId:
dependenciesForCallbacks[k],
+/******/
error: err2,
+/******/
originalError: err
+/******/
});
+/******/
}
+/******/
if (!options.ignoreErrored) {
+/******/
reportError(err2);
+/******/
reportError(err);
+/******/
}
+/******/
}
+/******/
} else {
+/******/
if (options.onErrored) {
+/******/
options.onErrored({
+/******/
type: "accept-errored",
+/******/
moduleId: outdatedModuleId,
+/******/
dependencyId: dependenciesForCallbacks[k],
+/******/
error: err
+/******/
});
+/******/
}
+/******/
if (!options.ignoreErrored) {
+/******/
reportError(err);
+/******/
}
+/******/
}
+/******/
}
+/******/
if (result && typeof result.then === "function") {
+/******/
acceptPromises.push(result);
+/******/
}
+/******/ }
+/******/ }
+/******/ }
+/******/ }
+/******/
+/******/ var onAccepted = function () {
+/******/ // Load self accepted
modules
+/******/ for (var o = 0; o <
outdatedSelfAcceptedModules.length; o++) {
+/******/ var item =
outdatedSelfAcceptedModules[o];
+/******/ var moduleId =
item.module;
+/******/ try {
+/******/
item.require(moduleId);
+/******/ } catch (err) {
+/******/ if
(typeof item.errorHandler === "function") {
+/******/
try {
+/******/
item.errorHandler(err, {
+/******/
moduleId: moduleId,
+/******/
module: __webpack_require__.c[moduleId]
+/******/
});
+/******/
} catch (err1) {
+/******/
if (options.onErrored) {
+/******/
options.onErrored({
+/******/
type: "self-accept-error-handler-errored",
+/******/
moduleId: moduleId,
+/******/
error: err1,
+/******/
originalError: err
+/******/
});
+/******/
}
+/******/
if (!options.ignoreErrored) {
+/******/
reportError(err1);
+/******/
reportError(err);
+/******/
}
+/******/
}
+/******/ } else {
+/******/
if (options.onErrored) {
+/******/
options.onErrored({
+/******/
type: "self-accept-errored",
+/******/
moduleId: moduleId,
+/******/
error: err
+/******/
});
+/******/
}
+/******/
if (!options.ignoreErrored) {
+/******/
reportError(err);
Review Comment:
**Suggestion:** The generated service worker bundle is loading webpack
dev-server and React Refresh HMR client entries (`ReactRefreshEntry`,
`webpack-dev-server/client`, `ErrorOverlayEntry`) via `__webpack_require__.O`
in a worker context; these dev-only clients assume a window/document-based
environment and multi-chunk loading, which are not available in a Service
Worker, so the worker script risks either never executing the actual service
worker module or throwing at startup instead of reliably installing and
activating. [logic error]
**Severity Level:** Minor ⚠️
```suggestion
/******/ // Load entry module and run the service worker code directly
/******/ __webpack_require__("./src/service-worker.ts");
```
<details>
<summary><b>Why it matters? ⭐ </b></summary>
The suggestion points out a real problem: the generated bundle includes
dev-only HMR / dev-server clients (ReactRefreshEntry, webpack-dev-server
client, ErrorOverlayEntry) and wires them into startup via
__webpack_require__.O. Those entries assume a window/document/browser-page
environment (sockets, DOM, overlays) and multi-chunk loading semantics that are
not available in a Service Worker context. I verified the exact problematic
calls exist in the current PR output (the __webpack_require__.O calls above).
Running those in a worker can throw (e.g. document/window access) or prevent
the service worker's install/activate handlers from running, so this is a
functional bug, not a cosmetic nit.
</details>
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/static/service-worker.js
**Line:** 1310:1312
**Comment:**
*Logic Error: The generated service worker bundle is loading webpack
dev-server and React Refresh HMR client entries (`ReactRefreshEntry`,
`webpack-dev-server/client`, `ErrorOverlayEntry`) via `__webpack_require__.O`
in a worker context; these dev-only clients assume a window/document-based
environment and multi-chunk loading, which are not available in a Service
Worker, so the worker script risks either never executing the actual service
worker module or throwing at startup instead of reliably installing and
activating.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
```
</details>
##########
superset/templates/superset/spa.html:
##########
@@ -73,6 +75,19 @@
/>
{% block head_js %}
{% include "head_custom_extra.html" %}
+ <script nonce="{{ macros.get_nonce() }}">
+ if ('serviceWorker' in navigator) {
+ window.addEventListener('load', function() {
+ navigator.serviceWorker
+ .register('{{ assets_prefix }}/static/service-worker.js', {
+ scope: '/',
+ })
Review Comment:
**Suggestion:** The service worker is registered with an explicit scope of
`'/'` even though the script is served from `{{ assets_prefix
}}/static/service-worker.js`; in browsers this violates the rule that a service
worker's scope cannot be above the directory of its script, causing
registration to fail (throwing a DOMException) and preventing the PWA features
from working. Removing the explicit scope lets the browser default to a valid
scope based on the script URL. [logic error]
**Severity Level:** Minor ⚠️
```suggestion
.register('{{ assets_prefix }}/static/service-worker.js')
```
<details>
<summary><b>Why it matters? ⭐ </b></summary>
The PR currently registers the service worker script served from "{{
assets_prefix }}/static/service-worker.js" but forces scope: '/'. Browsers
enforce that a service worker's scope cannot be more permissive than the
directory containing the worker script; setting scope to '/' when the script
lives under /static/... can cause registration to throw a DOMException and PWA
features to fail. Removing the explicit scope (or setting it to a path at or
below the script path) lets the browser pick a valid default scope based on the
script URL and avoids the registration error. This is a functional fix, not
merely stylistic.
</details>
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/templates/superset/spa.html
**Line:** 82:84
**Comment:**
*Logic Error: The service worker is registered with an explicit scope
of `'/'` even though the script is served from `{{ assets_prefix
}}/static/service-worker.js`; in browsers this violates the rule that a service
worker's scope cannot be above the directory of its script, causing
registration to fail (throwing a DOMException) and preventing the PWA features
from working. Removing the explicit scope lets the browser default to a valid
scope based on the script URL.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
```
</details>
##########
superset-frontend/webpack.config.js:
##########
@@ -300,6 +314,7 @@ const config = {
menu: addPreamble('src/views/menu.tsx'),
spa: addPreamble('/src/views/index.tsx'),
embedded: addPreamble('/src/embedded/index.tsx'),
+ 'service-worker': path.join(APP_DIR, '/src/service-worker.ts'),
Review Comment:
**Suggestion:** The service worker entry path is built with a leading slash
in the second argument to `path.join`, which causes Node to ignore `APP_DIR`
and resolve to an absolute `/src/service-worker.ts`, so in a typical Superset
checkout the file will not be found and the service worker entry will fail to
build; the path should be relative to `APP_DIR` without a leading slash. [logic
error]
**Severity Level:** Minor ⚠️
```suggestion
'service-worker': path.join(APP_DIR, 'src/service-worker.ts'),
```
<details>
<summary><b>Why it matters? ⭐ </b></summary>
path.join(APP_DIR, '/src/service-worker.ts') will treat
'/src/service-worker.ts' as an absolute path on POSIX systems and ignore
APP_DIR, resolving to '/src/service-worker.ts' instead of the repo-local file.
That will break resolving the service-worker entry. Changing to a relative
segment (no leading slash) fixes the runtime build error and is a correct,
minimal fix.
</details>
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset-frontend/webpack.config.js
**Line:** 317:317
**Comment:**
*Logic Error: The service worker entry path is built with a leading
slash in the second argument to `path.join`, which causes Node to ignore
`APP_DIR` and resolve to an absolute `/src/service-worker.ts`, so in a typical
Superset checkout the file will not be found and the service worker entry will
fail to build; the path should be relative to `APP_DIR` without a leading slash.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
```
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]