UNPKG

@appsemble/node-utils

Version:

NodeJS utilities used by Appsemble internally.

98 lines 3.45 kB
import { createRequire } from 'node:module'; import { dirname } from 'node:path'; import { faVersion, tinyRouter } from '@appsemble/node-utils'; import { noop, partialNormalized, partialSemver } from '@appsemble/utils'; import mount from 'koa-mount'; import serve from 'koa-static'; import { createBlockAssetHandler } from './blockAssetHandler.js'; import { createBlockCssHandler } from './blockCssHandler.js'; import { createBulmaHandler } from './bulmaHandler.js'; import { createCssHandler } from './cssHandler.js'; import { createIconHandler } from './iconHandler.js'; import { createIndexHandler } from './indexHandler.js'; import { createManifestHandler } from './manifestHandler.js'; import { createReadmeHandler } from './readmeHandler.js'; import { createRobotsHandler } from './robotsHandler.js'; import { createScreenshotHandler } from './screenshotHandler.js'; import { createSecurityHandler } from './securityHandler.js'; import { createServiceWorkerHandler } from './serviceWorkerHandler.js'; import { createStaticHandler } from './staticHandler.js'; const require = createRequire(import.meta.url); const blockName = `(?<name>@${partialNormalized.source}/${partialNormalized.source})`; export function createAppRouter(options) { const router = tinyRouter([ { route: '/manifest.json', get: createManifestHandler(options), }, { route: '/.well-known/security.txt', get: createSecurityHandler(options), }, { route: '/robots.txt', get: createRobotsHandler(options), }, { route: '/service-worker.js', get: createServiceWorkerHandler(), }, { route: /^\/icon-(?<size>\d+)\.png$/, get: createIconHandler(options), }, { route: /^\/screenshots\/(?<id>\d+)\.(?<ext>[a-z]+)$/, get: createScreenshotHandler(options), }, { route: /^\/readmes\/(?<id>\d+)\.md$/, get: createReadmeHandler(options), }, { route: new RegExp(`^/api/blocks/${blockName}/versions/(?<version>${partialSemver.source})/(?<filename>.+)$`), get: createBlockAssetHandler(options), }, { route: /^\/bulma/, get: createBulmaHandler(options), }, { route: /^\/fa\//, get: mount(`/fa/${faVersion}`, serve(dirname(require.resolve('@fortawesome/fontawesome-free/package.json')))), }, { route: '/core.css', get: createCssHandler('coreStyle', options), }, { route: '/shared.css', get: createCssHandler('sharedStyle', options), }, { route: new RegExp(`^/${blockName}\\.css`), get: createBlockCssHandler(options), }, { route: /(^|\/)\.well-known(\/|$)/, any: noop, }, { route: '/index.html', get: createIndexHandler(options), }, { route: /\.[a-z]\w*$/i, any: createStaticHandler('app'), }, { route: /.*/, get: createIndexHandler(options), }, ]); return async (ctx, next) => { ctx.set('x-content-type-options', 'nosniff'); await router(ctx, next); }; } //# sourceMappingURL=index.js.map