{"version":3,"file":"Flow.js","sourceRoot":"","sources":["../../../../src/main/frontend/Flow.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  ConnectionIndicator,\n  ConnectionState,\n  ConnectionStateChangeListener,\n  ConnectionStateStore\n} from '@vaadin/common-frontend';\n\nexport interface FlowConfig {\n  imports?: () => void;\n}\n\nclass FlowUiInitializationError extends Error {}\n\ninterface AppConfig {\n  productionMode: boolean;\n  appId: string;\n  uidl: any;\n}\n\ninterface AppInitResponse {\n  appConfig: AppConfig;\n  pushScript?: string;\n}\n\ninterface Router {\n  render: (ctx: NavigationParameters, shouldUpdateHistory: boolean) => Promise<void>;\n}\n\ninterface HTMLRouterContainer extends HTMLElement {\n  onBeforeEnter?: (ctx: NavigationParameters, cmd: PreventAndRedirectCommands, router: Router) => void | Promise<any>;\n  onBeforeLeave?: (ctx: NavigationParameters, cmd: PreventCommands, router: Router) => void | Promise<any>;\n  serverConnected?: (cancel: boolean, url?: NavigationParameters) => void;\n  serverPaused?: () => void;\n}\n\ninterface FlowRoute {\n  action: (params: NavigationParameters) => Promise<HTMLRouterContainer>;\n  path: string;\n}\n\ninterface FlowRoot {\n  $: any;\n  $server: any;\n}\n\nexport interface NavigationParameters {\n  pathname: string;\n  search: string;\n}\n\nexport interface PreventCommands {\n  prevent: () => any;\n}\n\nexport interface PreventAndRedirectCommands extends PreventCommands {\n  redirect: (route: string) => any;\n}\n\n// flow uses body for keeping references\nconst flowRoot: FlowRoot = window.document.body as any;\nconst $wnd = window as any as {\n  Vaadin: {\n    Flow: any;\n    TypeScript: any;\n    connectionState: ConnectionStateStore;\n    listener: any;\n  };\n} & EventTarget;\n\n/**\n * Client API for flow UI operations.\n */\nexport class Flow {\n  config: FlowConfig;\n  response?: AppInitResponse = undefined;\n  pathname = '';\n\n  container!: HTMLRouterContainer;\n\n  // flag used to inform Testbench whether a server route is in progress\n  private isActive = false;\n\n  private baseRegex = /^\\//;\n  private appShellTitle: string;\n\n  private navigation: string = '';\n\n  constructor(config?: FlowConfig) {\n    flowRoot.$ = flowRoot.$ || [];\n    this.config = config || {};\n\n    // TB checks for the existence of window.Vaadin.Flow in order\n    // to consider that TB needs to wait for `initFlow()`.\n    $wnd.Vaadin = $wnd.Vaadin || {};\n    $wnd.Vaadin.Flow = $wnd.Vaadin.Flow || {};\n    $wnd.Vaadin.Flow.clients = {\n      TypeScript: {\n        isActive: () => this.isActive\n      }\n    };\n\n    // Regular expression used to remove the app-context\n    const elm = document.head.querySelector('base');\n    this.baseRegex = new RegExp(\n      `^${\n        // IE11 does not support document.baseURI\n        (document.baseURI || (elm && elm.href) || '/').replace(/^https?:\\/\\/[^/]+/i, '')\n      }`\n    );\n    this.appShellTitle = document.title;\n    // Put a vaadin-connection-indicator in the dom\n    this.addConnectionIndicator();\n  }\n\n  /**\n   * Return a `route` object for vaadin-router in an one-element array.\n   *\n   * The `FlowRoute` object `path` property handles any route,\n   * and the `action` returns the flow container without updating the content,\n   * delaying the actual Flow server call to the `onBeforeEnter` phase.\n   *\n   * This is a specific API for its use with `vaadin-router`.\n   */\n  get serverSideRoutes(): [FlowRoute] {\n    return [\n      {\n        path: '(.*)',\n        action: this.action\n      }\n    ];\n  }\n\n  loadingStarted() {\n    // Make Testbench know that server request is in progress\n    this.isActive = true;\n    $wnd.Vaadin.connectionState.loadingStarted();\n  }\n\n  loadingFinished() {\n    // Make Testbench know that server request has finished\n    this.isActive = false;\n    $wnd.Vaadin.connectionState.loadingFinished();\n\n    if ($wnd.Vaadin.listener) {\n      // Listeners registered, do not register again.\n      return;\n    }\n    $wnd.Vaadin.listener = {};\n    // Listen for click on router-links -> 'link' navigation trigger\n    // and on <a> nodes -> 'client' navigation trigger.\n    // Use capture phase to detect prevented / stopped events.\n    document.addEventListener(\n      'click',\n      (_e) => {\n        if (_e.target) {\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore\n          if (_e.target.hasAttribute('router-link')) {\n            this.navigation = 'link';\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n          } else if (_e.composedPath().some((node) => node.nodeName === 'A')) {\n            this.navigation = 'client';\n          }\n        }\n      },\n      {\n        capture: true\n      }\n    );\n  }\n\n  private get action(): (params: NavigationParameters) => Promise<HTMLRouterContainer> {\n    // Return a function which is bound to the flow instance, thus we can use\n    // the syntax `...serverSideRoutes` in vaadin-router.\n    return async (params: NavigationParameters) => {\n      // Store last action pathname so as we can check it in events\n      this.pathname = params.pathname;\n\n      if ($wnd.Vaadin.connectionState.online) {\n        try {\n          await this.flowInit();\n        } catch (error) {\n          if (error instanceof FlowUiInitializationError) {\n            // error initializing Flow: assume connection lost\n            $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n            return this.offlineStubAction();\n          } else {\n            throw error;\n          }\n        }\n      } else {\n        // insert an offline stub\n        return this.offlineStubAction();\n      }\n\n      // When an action happens, navigation will be resolved `onBeforeEnter`\n      this.container.onBeforeEnter = (ctx, cmd) => this.flowNavigate(ctx, cmd);\n      // For covering the 'server -> client' use case\n      this.container.onBeforeLeave = (ctx, cmd) => this.flowLeave(ctx, cmd);\n      return this.container;\n    };\n  }\n\n  // Send a remote call to `JavaScriptBootstrapUI` to check\n  // whether navigation has to be cancelled.\n  private async flowLeave(ctx: NavigationParameters, cmd?: PreventCommands): Promise<any> {\n    // server -> server, viewing offline stub, or browser is offline\n    const { connectionState } = $wnd.Vaadin;\n    if (this.pathname === ctx.pathname || !this.isFlowClientLoaded() || connectionState.offline) {\n      return Promise.resolve({});\n    }\n    // 'server -> client'\n    return new Promise((resolve) => {\n      this.loadingStarted();\n      // The callback to run from server side to cancel navigation\n      this.container.serverConnected = (cancel) => {\n        resolve(cmd && cancel ? cmd.prevent() : {});\n        this.loadingFinished();\n      };\n\n      // Call server side to check whether we can leave the view\n      flowRoot.$server.leaveNavigation(this.getFlowRoutePath(ctx), this.getFlowRouteQuery(ctx));\n    });\n  }\n\n  // Send the remote call to `JavaScriptBootstrapUI` to render the flow\n  // route specified by the context\n  private async flowNavigate(ctx: NavigationParameters, cmd?: PreventAndRedirectCommands): Promise<HTMLElement> {\n    if (this.response) {\n      return new Promise((resolve) => {\n        this.loadingStarted();\n        // The callback to run from server side once the view is ready\n        this.container.serverConnected = (cancel, redirectContext?: NavigationParameters) => {\n          if (cmd && cancel) {\n            resolve(cmd.prevent());\n          } else if (cmd && cmd.redirect && redirectContext) {\n            resolve(cmd.redirect(redirectContext.pathname));\n          } else {\n            this.container.style.display = '';\n            resolve(this.container);\n          }\n          this.loadingFinished();\n        };\n\n        this.container.serverPaused = () => {\n          this.loadingFinished();\n        };\n\n        // Call server side to navigate to the given route\n        flowRoot.$server.connectClient(\n          this.getFlowRoutePath(ctx),\n          this.getFlowRouteQuery(ctx),\n          this.appShellTitle,\n          history.state,\n          this.navigation\n        );\n        // Default to history navigation trigger.\n        // Link and client cases are handled by click listener in loadingFinished().\n        this.navigation = 'history';\n      });\n    } else {\n      // No server response => offline or erroneous connection\n      return Promise.resolve(this.container);\n    }\n  }\n\n  private getFlowRoutePath(context: NavigationParameters | Location): string {\n    return decodeURIComponent(context.pathname).replace(this.baseRegex, '');\n  }\n  private getFlowRouteQuery(context: NavigationParameters | Location): string {\n    return (context.search && context.search.substring(1)) || '';\n  }\n\n  // import flow client modules and initialize UI in server side.\n  private async flowInit(): Promise<AppInitResponse> {\n    // Do not start flow twice\n    if (!this.isFlowClientLoaded()) {\n      // show flow progress indicator\n      this.loadingStarted();\n\n      // Initialize server side UI\n      this.response = await this.flowInitUi();\n\n      const { pushScript, appConfig } = this.response;\n\n      if (typeof pushScript === 'string') {\n        await this.loadScript(pushScript);\n      }\n      const { appId } = appConfig;\n\n      // Load bootstrap script with server side parameters\n      const bootstrapMod = await import('./FlowBootstrap');\n      await bootstrapMod.init(this.response);\n\n      // Load custom modules defined by user\n      if (typeof this.config.imports === 'function') {\n        this.injectAppIdScript(appId);\n        await this.config.imports();\n      }\n\n      // we use a custom tag for the flow app container\n      const tag = `flow-container-${appId.toLowerCase()}`;\n      const serverCreatedContainer = document.querySelector(tag);\n      if (serverCreatedContainer) {\n        this.container = serverCreatedContainer as HTMLElement;\n      } else {\n        this.container = document.createElement(tag);\n        this.container.id = appId;\n      }\n      flowRoot.$[appId] = this.container;\n\n      // Load flow-client module\n      const clientMod = await import('./FlowClient');\n      await this.flowInitClient(clientMod);\n\n      // hide flow progress indicator\n      this.loadingFinished();\n    }\n\n    // It might be that components created from server expect that their content has been rendered.\n    // Appending eagerly the container we avoid these kind of errors.\n    // Note that the client router will move this container to the outlet if the navigation succeed\n    if (this.container && !this.container.isConnected) {\n      this.container.style.display = 'none';\n      document.body.appendChild(this.container);\n    }\n    return this.response!;\n  }\n\n  private async loadScript(url: string): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const script = document.createElement('script');\n      script.onload = () => resolve();\n      script.onerror = reject;\n      script.src = url;\n      document.body.appendChild(script);\n    });\n  }\n\n  private injectAppIdScript(appId: string) {\n    const appIdWithoutHashCode = appId.substring(0, appId.lastIndexOf('-'));\n    const scriptAppId = document.createElement('script');\n    scriptAppId.type = 'module';\n    scriptAppId.setAttribute('data-app-id', appIdWithoutHashCode);\n    document.body.append(scriptAppId);\n  }\n\n  // After the flow-client javascript module has been loaded, this initializes flow UI\n  // in the browser.\n  private async flowInitClient(clientMod: any): Promise<void> {\n    clientMod.init();\n    // client init is async, we need to loop until initialized\n    return new Promise((resolve) => {\n      const intervalId = setInterval(() => {\n        // client `isActive() == true` while initializing or processing\n        const initializing = Object.keys($wnd.Vaadin.Flow.clients)\n          .filter((key) => key !== 'TypeScript')\n          .reduce((prev, id) => prev || $wnd.Vaadin.Flow.clients[id].isActive(), false);\n        if (!initializing) {\n          clearInterval(intervalId);\n          resolve();\n        }\n      }, 5);\n    });\n  }\n\n  // Returns the `appConfig` object\n  private async flowInitUi(): Promise<AppInitResponse> {\n    // appConfig was sent in the index.html request\n    const initial = $wnd.Vaadin && $wnd.Vaadin.TypeScript && $wnd.Vaadin.TypeScript.initial;\n    if (initial) {\n      $wnd.Vaadin.TypeScript.initial = undefined;\n      return Promise.resolve(initial);\n    }\n\n    // send a request to the `JavaScriptBootstrapHandler`\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      const httpRequest = xhr as any;\n      const requestPath = `?v-r=init&location=${encodeURIComponent(\n        this.getFlowRoutePath(location)\n      )}&query=${encodeURIComponent(this.getFlowRouteQuery(location))}`;\n\n      httpRequest.open('GET', requestPath);\n\n      httpRequest.onerror = () =>\n        reject(\n          new FlowUiInitializationError(\n            `Invalid server response when initializing Flow UI.\n        ${httpRequest.status}\n        ${httpRequest.responseText}`\n          )\n        );\n\n      httpRequest.onload = () => {\n        const contentType = httpRequest.getResponseHeader('content-type');\n        if (contentType && contentType.indexOf('application/json') !== -1) {\n          resolve(JSON.parse(httpRequest.responseText));\n        } else {\n          httpRequest.onerror();\n        }\n      };\n      httpRequest.send();\n    });\n  }\n\n  // Create shared connection state store and connection indicator\n  private addConnectionIndicator() {\n    // add connection indicator to DOM\n    ConnectionIndicator.create();\n\n    // Listen to browser online/offline events and update the loading indicator accordingly.\n    // Note: if flow-client is loaded, it instead handles the state transitions.\n    $wnd.addEventListener('online', () => {\n      if (!this.isFlowClientLoaded()) {\n        // Send an HTTP HEAD request for sw.js to verify server reachability.\n        // We do not expect sw.js to be cached, so the request goes to the\n        // server rather than being served from local cache.\n        // Require network-level failure to revert the state to CONNECTION_LOST\n        // (HTTP error code is ok since it still verifies server's presence).\n        $wnd.Vaadin.connectionState.state = ConnectionState.RECONNECTING;\n        const http = new XMLHttpRequest();\n        http.open('HEAD', 'sw.js');\n        http.onload = () => {\n          $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTED;\n        };\n        http.onerror = () => {\n          $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n        };\n        // Postpone request to reduce potential net::ERR_INTERNET_DISCONNECTED\n        // errors that sometimes occurs even if browser says it is online\n        setTimeout(() => http.send(), 50);\n      }\n    });\n    $wnd.addEventListener('offline', () => {\n      if (!this.isFlowClientLoaded()) {\n        $wnd.Vaadin.connectionState.state = ConnectionState.CONNECTION_LOST;\n      }\n    });\n  }\n\n  private async offlineStubAction() {\n    const offlineStub = document.createElement('iframe') as HTMLRouterContainer;\n    const offlineStubPath = './offline-stub.html';\n    offlineStub.setAttribute('src', offlineStubPath);\n    offlineStub.setAttribute('style', 'width: 100%; height: 100%; border: 0');\n    this.response = undefined;\n\n    let onlineListener: ConnectionStateChangeListener | undefined;\n    const removeOfflineStubAndOnlineListener = () => {\n      if (onlineListener !== undefined) {\n        $wnd.Vaadin.connectionState.removeStateChangeListener(onlineListener);\n        onlineListener = undefined;\n      }\n    };\n\n    offlineStub.onBeforeEnter = (ctx, _cmds, router) => {\n      onlineListener = () => {\n        if ($wnd.Vaadin.connectionState.online) {\n          removeOfflineStubAndOnlineListener();\n          router.render(ctx, false);\n        }\n      };\n      $wnd.Vaadin.connectionState.addStateChangeListener(onlineListener);\n    };\n    offlineStub.onBeforeLeave = (_ctx, _cmds, _router) => {\n      removeOfflineStubAndOnlineListener();\n    };\n    return offlineStub;\n  }\n\n  private isFlowClientLoaded(): boolean {\n    return this.response !== undefined;\n  }\n}\n"]}