UNPKG

@v4fire/client

Version:

V4Fire client core library

152 lines (123 loc) 3.21 kB
// @ts-check /*! * V4Fire Client Core * https://github.com/V4Fire/Client * * Released under the MIT license * https://github.com/V4Fire/Client/blob/master/LICENSE */ /** * @typedef {import('playwright').Page} Page */ const h = include('tests/helpers').default; /** * Initializes a router * * @param {Page} page * @param {('historyApiRouterEngine'|'inMemoryRouterEngine')} engineName * @param {?Object=} [initOptions] - Router initializing options * @param {?string} [initOptions.initialRoute] - Pass `null` to remove `initialRoute` for the in-memory engine * @returns {!Promise<Playwright.JSHandle>} */ module.exports.initRouter = async function initRouter(page, engineName, initOptions = {}) { await (await h.component.getRoot(page)).evaluate((ctx) => ctx.router?.clear()); if (initOptions.initialRoute === undefined && engineName === 'inMemoryRouterEngine') { initOptions.initialRoute = 'main'; } await page.evaluate(([engineName, initOptions]) => { globalThis.removeCreatedComponents(); const bDummyComponent = document.querySelector('.b-dummy').component, engine = bDummyComponent.engines.router[engineName]; const scheme = [ { attrs: { id: 'target', engine, initialRoute: initOptions.initialRoute ?? undefined, routes: { main: { path: '/', content: 'Main page' }, second: { path: '/second', content: 'Second page', query: { rootParam: (o) => o.r.rootParam } }, secondAlias: { path: '/second/alias', alias: 'second' }, aliasToAlias: { path: '/alias-to-alias', alias: 'secondAlias' }, aliasToRedirect: { path: '/second/alias-redirect', alias: 'indexRedirect' }, indexRedirect: { path: '/redirect', redirect: 'main' }, secondRedirect: { path: '/second/redirect', redirect: 'second' }, redirectToAlias: { path: '/redirect-alias', redirect: 'secondAlias' }, redirectToRedirect: { path: '/redirect-redirect', redirect: 'secondRedirect' }, external: { path: 'https://www.google.com' }, externalRedirect: { path: '/external-redirect', redirect: 'https://www.google.com' }, localExternal: { path: '/', external: true }, template: { path: '/tpl/:param1/:param2?', pathOpts: { aliases: { param1: ['_param1', 'Param1'], param2: ['Param2'] } } }, strictTemplate: { paramsFromQuery: false, path: '/strict-tpl/:param1/:param2?' }, templateAlias: { path: '/tpl-alias/:param1/:param2?', alias: 'template' }, redirectTemplate: { path: '/tpl/redirect/:param1/:param2', redirect: 'template' }, notFound: { default: true, content: '404' } } } } ]; globalThis.renderComponents('b-router', scheme); }, [engineName, initOptions]); await h.component.waitForComponent(page, '#target'); return h.component.getRoot(page); };