This is an automated email from the ASF dual-hosted git repository. beto pushed a commit to branch file-handler2 in repository https://gitbox.apache.org/repos/asf/superset.git
commit 33440113933175236af2c3ac21daed59ef864d0b Author: Beto Dealmeida <[email protected]> AuthorDate: Tue Dec 16 17:15:21 2025 -0500 Fix test --- .../src/assets/images/pwa/icon-192.png | Bin 1378 -> 9097 bytes .../src/assets/images/pwa/icon-512.png | Bin 4384 -> 25535 bytes .../src/pages/FileHandler/index.test.tsx | 15 +- superset-frontend/src/service-worker.ts | 4 +- superset-frontend/webpack.config.js | 10 +- superset/initialization/__init__.py | 5 +- superset/static/service-worker.js | 1454 +------------------- superset/templates/superset/spa.html | 6 +- 8 files changed, 48 insertions(+), 1446 deletions(-) diff --git a/superset-frontend/src/assets/images/pwa/icon-192.png b/superset-frontend/src/assets/images/pwa/icon-192.png index a53fbe7e7b..bf280f8561 100644 Binary files a/superset-frontend/src/assets/images/pwa/icon-192.png and b/superset-frontend/src/assets/images/pwa/icon-192.png differ diff --git a/superset-frontend/src/assets/images/pwa/icon-512.png b/superset-frontend/src/assets/images/pwa/icon-512.png index 320eeb6382..e36419b43e 100644 Binary files a/superset-frontend/src/assets/images/pwa/icon-512.png and b/superset-frontend/src/assets/images/pwa/icon-512.png differ diff --git a/superset-frontend/src/pages/FileHandler/index.test.tsx b/superset-frontend/src/pages/FileHandler/index.test.tsx index 00dcfd12dd..471186c9b4 100644 --- a/superset-frontend/src/pages/FileHandler/index.test.tsx +++ b/superset-frontend/src/pages/FileHandler/index.test.tsx @@ -107,8 +107,9 @@ type LaunchQueue = { }; const setupLaunchQueue = (fileHandle: MockFileHandle | null = null) => { - let savedConsumer: ((params: { files?: MockFileHandle[] }) => void) | null = - null; + let savedConsumer: + | ((params: { files?: MockFileHandle[] }) => void | Promise<void>) + | null = null; (window as unknown as Window & { launchQueue: LaunchQueue }).launchQueue = { setConsumer: (consumer: (params: { files?: MockFileHandle[] }) => void) => { savedConsumer = consumer; @@ -122,8 +123,8 @@ const setupLaunchQueue = (fileHandle: MockFileHandle | null = null) => { }, }; return { - triggerConsumer: (params: { files?: MockFileHandle[] }) => { - savedConsumer?.(params); + triggerConsumer: async (params: { files?: MockFileHandle[] }) => { + await savedConsumer?.(params); }, }; }; @@ -164,7 +165,7 @@ test('redirects when no files are provided', async () => { ); // Trigger the consumer with no files - triggerConsumer({ files: [] }); + await triggerConsumer({ files: [] }); await waitFor(() => { expect(mockHistoryPush).toHaveBeenCalledWith('/superset/welcome/'); @@ -263,7 +264,7 @@ test('shows error for unsupported file type', async () => { // Trigger with unsupported file const fileHandle = createMockFileHandle('test.pdf'); - triggerConsumer({ files: [fileHandle] }); + await triggerConsumer({ files: [fileHandle] }); await waitFor(() => { expect(mockAddDangerToast).toHaveBeenCalledWith( @@ -315,7 +316,7 @@ test('handles errors during file processing', async () => { requestPermission: async () => 'granted', }; - triggerConsumer({ files: [errorFileHandle] }); + await triggerConsumer({ files: [errorFileHandle] }); await waitFor(() => { expect(mockAddDangerToast).toHaveBeenCalledWith( diff --git a/superset-frontend/src/service-worker.ts b/superset-frontend/src/service-worker.ts index 2791fd4c59..9feff3c014 100644 --- a/superset-frontend/src/service-worker.ts +++ b/superset-frontend/src/service-worker.ts @@ -27,8 +27,8 @@ declare const self: { ): void; }; -self.addEventListener('install', () => { - self.skipWaiting(); +self.addEventListener('install', event => { + event.waitUntil(self.skipWaiting()); }); self.addEventListener('activate', event => { diff --git a/superset-frontend/webpack.config.js b/superset-frontend/webpack.config.js index 3bed029086..ac79efecbe 100644 --- a/superset-frontend/webpack.config.js +++ b/superset-frontend/webpack.config.js @@ -198,7 +198,13 @@ if (!process.env.CI) { // Add React Refresh plugin for development mode if (isDevMode) { - plugins.push(new ReactRefreshWebpackPlugin()); + plugins.push( + new ReactRefreshWebpackPlugin({ + // Exclude service worker from React Refresh - it runs in a worker context + // without DOM/window and doesn't need HMR + exclude: /service-worker/, + }), + ); } if (!isDevMode) { @@ -314,7 +320,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'), + 'service-worker': path.join(APP_DIR, 'src/service-worker.ts'), }, cache: { type: 'filesystem', // Enable filesystem caching diff --git a/superset/initialization/__init__.py b/superset/initialization/__init__.py index 206fd4e5ca..2255655d0a 100644 --- a/superset/initialization/__init__.py +++ b/superset/initialization/__init__.py @@ -666,7 +666,10 @@ class SupersetAppInitializer: # pylint: disable=too-many-public-methods response.headers[k] = v # Allow service worker to control the root scope for PWA file handling - if request.path.endswith("service-worker.js"): + if ( + request.path.endswith("service-worker.js") + and "Service-Worker-Allowed" not in response.headers + ): response.headers["Service-Worker-Allowed"] = "/" return response diff --git a/superset/static/service-worker.js b/superset/static/service-worker.js index 69bbe14592..43cb14a489 100644 --- a/superset/static/service-worker.js +++ b/superset/static/service-worker.js @@ -1,1433 +1,27 @@ -/* - * 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/). +/** + * 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. */ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ -/***/ "./src/service-worker.ts": -/*!*******************************!*\ - !*** ./src/service-worker.ts ***! - \*******************************/ -/***/ ((module, __unused_webpack___webpack_exports__, __webpack_require__) => { +// Minimal service worker for PWA file handling support +self.addEventListener('install', event => { + event.waitUntil(self.skipWaiting()); +}); -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\");\ [...] - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // 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 = () => ("5206e79238df6213e14e") -/******/ })(); -/******/ -/******/ /* 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; [...] -/******/ } -/******/ 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); -/******/ } -/******/ } -/******/ } -/******/ } -/******/ }; -/******/ -/******/ return Promise.all(acceptPromises) -/******/ .then(onAccepted) -/******/ .then(function () { -/******/ return outdatedModules; -/******/ }); -/******/ } -/******/ }; -/******/ } -/******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) { -/******/ if (!currentUpdate) { -/******/ currentUpdate = {}; -/******/ currentUpdateRuntime = []; -/******/ currentUpdateRemovedChunks = []; -/******/ applyHandlers.push(applyHandler); -/******/ } -/******/ if (!__webpack_require__.o(currentUpdate, moduleId)) { -/******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId]; -/******/ } -/******/ }; -/******/ __webpack_require__.hmrC.jsonp = function ( -/******/ chunkIds, -/******/ removedChunks, -/******/ removedModules, -/******/ promises, -/******/ applyHandlers, -/******/ updatedModulesList -/******/ ) { -/******/ applyHandlers.push(applyHandler); -/******/ currentUpdateChunks = {}; -/******/ currentUpdateRemovedChunks = removedChunks; -/******/ currentUpdate = removedModules.reduce(function (obj, key) { -/******/ obj[key] = false; -/******/ return obj; -/******/ }, {}); -/******/ currentUpdateRuntime = []; -/******/ chunkIds.forEach(function (chunkId) { -/******/ if ( -/******/ __webpack_require__.o(installedChunks, chunkId) && -/******/ installedChunks[chunkId] !== undefined -/******/ ) { -/******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList)); -/******/ currentUpdateChunks[chunkId] = true; -/******/ } else { -/******/ currentUpdateChunks[chunkId] = false; -/******/ } -/******/ }); -/******/ if (__webpack_require__.f) { -/******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) { -/******/ if ( -/******/ currentUpdateChunks && -/******/ __webpack_require__.o(currentUpdateChunks, chunkId) && -/******/ !currentUpdateChunks[chunkId] -/******/ ) { -/******/ promises.push(loadUpdateChunk(chunkId)); -/******/ currentUpdateChunks[chunkId] = true; -/******/ } -/******/ }; -/******/ } -/******/ }; -/******/ -/******/ __webpack_require__.hmrM = () => { -/******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API"); -/******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then((response) => { -/******/ if(response.status === 404) return; // no update available -/******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText); -/******/ return response.json(); -/******/ }); -/******/ }; -/******/ -/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); -/******/ -/******/ // install a JSONP callback for chunk loading -/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { -/******/ var [chunkIds, moreModules, runtime] = data; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0; -/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { -/******/ for(moduleId in moreModules) { -/******/ if(__webpack_require__.o(moreModules, moduleId)) { -/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(runtime) var result = runtime(__webpack_require__); -/******/ } -/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { -/******/ installedChunks[chunkId][0](); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ return __webpack_require__.O(result); -/******/ } -/******/ -/******/ var chunkLoadingGlobal = globalThis["webpackChunksuperset"] = globalThis["webpackChunksuperset"] || []; -/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); -/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); -/******/ })(); -/******/ -/************************************************************************/ -/******/ -/******/ // module cache are used so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ __webpack_require__.O(undefined, ["vendors","vendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-945cee","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/@pmmmwh/react-refresh-webpack-plugin/client/ReactRefreshEntry.js"))) -/******/ __webpack_require__.O(undefined, ["vendors","vendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-945cee","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=0.0.0.0&port=0&pathname=%2Fws&logging=error&overlay=%7B%22errors%22%3Atrue%2C%22warnings%22%3Afalse%2C%22runtimeErrors%22%3A%22e [...] -/******/ __webpack_require__.O(undefined, ["vendors","vendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-945cee","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/webpack/hot/dev-server.js"))) -/******/ __webpack_require__.O(undefined, ["vendors","vendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-945cee","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/@pmmmwh/react-refresh-webpack-plugin/client/ErrorOverlayEntry.js?sockHost=0.0.0.0&sockPath=/ws&sockProtocol=http"))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["vendors","vendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-945cee","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./src/service-worker.ts"))) -/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); -/******/ -/******/ })() -; +self.addEventListener('activate', event => { + event.waitUntil(self.clients.claim()); +}); diff --git a/superset/templates/superset/spa.html b/superset/templates/superset/spa.html index a50fe95bf0..5951d88b4a 100644 --- a/superset/templates/superset/spa.html +++ b/superset/templates/superset/spa.html @@ -29,7 +29,7 @@ </title> {% block head_meta %} - <link rel="manifest" href="{{ assets_prefix }}/static/assets/pwa-manifest.json"> + <link rel="manifest" href="{{ assets_prefix }}/static/assets/pwa-manifest.json?v=4"> {% endblock %} <style> @@ -79,9 +79,7 @@ if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker - .register('{{ assets_prefix }}/static/service-worker.js', { - scope: '/', - }) + .register('{{ assets_prefix }}/static/service-worker.js') .catch(function(err) { console.error('Service Worker registration failed:', err); });
