{"version":3,"file":"astro.mjs","sources":["../out/main.js"],"sourcesContent":["// imports here\nimport { bs, Router, } from \"@bs-core/shell\";\nimport { App } from \"astro/app\";\nimport { pathToFileURL } from \"url\";\nimport { performance } from \"node:perf_hooks\";\nimport * as streams from \"node:stream/promises\";\n// Misc consts here\nconst ADAPTER_NAME = \"@bs-core/astro\";\nconst HTTP_CERT_FILE = \"HTTP_CERT_FILE\";\nconst HTTP_KEY_FILE = \"HTTP_KEY_FILE\";\nconst HTTP_ENABLE_HTTPS = \"HTTP_ENABLE_HTTPS\";\nconst HTTP_IF = \"HTTP_IF\";\nconst HTTP_PORT = \"HTTP_PORT\";\n// Module properties here\n/** The Astro App instance. */\nlet _app;\nexport class WebRequest extends Request {\n    req;\n    res;\n    constructor(req, res) {\n        // Get the headers so we can pass them on\n        const headers = new Headers();\n        for (const [name, value] of Object.entries(req.headers)) {\n            // Skip headers with no values\n            if (value === undefined) {\n                continue;\n            }\n            // Value can be an array so we need to handle that\n            if (Array.isArray(value)) {\n                // Append each value as the header name\n                for (const item of value) {\n                    headers.append(name, item);\n                }\n            }\n            else {\n                headers.append(name, value);\n            }\n        }\n        // Now call the super constructor to create the Request\n        super(req.urlObj, { method: req.method, body: req.body, headers });\n        // Make sure to tack on the nodeJs req/res\n        this.req = req;\n        this.res = res;\n    }\n}\n// Private functions here\nfunction matcher(_) {\n    return (url) => {\n        const routeData = _app.match(new Request(url));\n        if (routeData === undefined) {\n            return false;\n        }\n        // For now we will ignore the params because they are available\n        // in the Web Request object\n        // NOTE: We need to return routeData so it can be use with _app.render()\n        return {\n            params: {},\n            matchedInfo: routeData,\n        };\n    };\n}\nasync function ssrEndpoint(req, res) {\n    // Create a webRequest object to pass to the render\n    const webReq = new WebRequest(req, res);\n    // Measure the time it took to render the page so capture when we started\n    const startedAt = performance.now();\n    // Now render the page\n    const webRes = await _app.render(webReq, {\n        routeData: req.matchedInfo,\n    });\n    // Now figure out how long it took to render and store it in the metrics\n    const ssrLatency = Math.round(performance.now() - startedAt);\n    res.addServerTimingMetric(\"ssr\", ssrLatency);\n    // The default status code is always 200. If webRes.status is NOT 200\n    // then it was set by the user so we need to use that status code\n    if (webRes.status !== 200) {\n        res.statusCode = webRes.status;\n    }\n    // Check if the user set any headers on webRes\n    const SET_COOKIE = \"set-cookie\";\n    for (let [name, value] of webRes.headers.entries()) {\n        // Dont bother setting set-cookie headers, we will do that later\n        if (name === SET_COOKIE) {\n            continue;\n        }\n        res.setHeader(name, value);\n    }\n    // Check if there were any set-cookie headers and if so set them as an array\n    const cookies = webRes.headers.getSetCookie();\n    if (cookies.length > 0) {\n        res.setHeader(SET_COOKIE, cookies);\n    }\n    // This is our last chance to set headers so set the server timings header\n    res.setServerTimingHeader();\n    // Now check if there is a body in the webRes\n    if (webRes.body !== null) {\n        // NOTE1: pipeline will close the res when it is finished\n        // NOTE2: You need to cast as ReadableStream<Uint8Array> or TS will complain\n        await streams\n            .pipeline(webRes.body, res)\n            .catch((e) => {\n            // We can't do anything else here because either:\n            // - the stream is closed which means we can't send back an error\n            // - we have an internal error, but we have already started streaming\n            //   so we can't do anything\n            bs.warn(\"ssrEndpoint had this error during rendering: (%s)\", e);\n        });\n    }\n}\n// Exported functions here\n// The default function is called when the bundle script is being built\nexport default (args) => {\n    return {\n        name: ADAPTER_NAME,\n        hooks: {\n            \"astro:config:done\": ({ setAdapter }) => {\n                setAdapter({\n                    name: ADAPTER_NAME,\n                    serverEntrypoint: \"@bs-core/astro\",\n                    // previewEntrypoint: '@bs-core/astro',\n                    args,\n                    exports: [],\n                    supportedAstroFeatures: {\n                        hybridOutput: \"stable\",\n                        staticOutput: \"stable\",\n                        serverOutput: \"stable\",\n                        assets: {\n                            supportKind: \"stable\",\n                            isSharpCompatible: false,\n                            isSquooshCompatible: false,\n                        },\n                    },\n                });\n            },\n            \"astro:build:done\": async () => {\n                // We could update the bundle file here if needed\n            },\n        },\n    };\n};\n// We need a createExports() exported or Astro will complain\nexport const createExports = () => {\n    return {};\n};\n// This function that will be called when the bundled script is run\nexport const start = async (manifest, options) => {\n    // Create the app first before doing anything else\n    _app = new App(manifest);\n    // Setup the config for the HTTP server\n    let httpConfig = {\n        keepAliveTimeout: options.keepAliveTimeout,\n        headerTimeout: options.headerTimeout,\n        defaultRouterBasePath: options.defaultRouterBasePath,\n        healthcheckPath: options.healthcheckPath,\n        healthcheckGoodRes: options.healthcheckGoodRes,\n        healthcheckBadRes: options.healthcheckBadRes,\n    };\n    if (options.staticFilesPath !== undefined) {\n        httpConfig.staticFileServer = {\n            path: options.staticFilesPath,\n            extraContentTypes: options.extraContentTypes,\n            immutableRegExp: options.immutableRegexSrc,\n            securityHeaders: options.securityHeaders,\n        };\n    }\n    const enableHttps = bs.getConfigBool(HTTP_ENABLE_HTTPS, false);\n    if (enableHttps) {\n        httpConfig.enableHttps = true;\n        httpConfig.httpsCertFile = bs.getConfigStr(HTTP_CERT_FILE);\n        httpConfig.httpsKeyFile = bs.getConfigStr(HTTP_KEY_FILE);\n    }\n    const networkIf = bs.getConfigStr(HTTP_IF, \"127.0.0.1\");\n    const networkPort = bs.getConfigNum(HTTP_PORT, 8080);\n    // Create the HTTP server\n    const httpServer = await bs.addHttpServer(networkIf, networkPort, httpConfig, false);\n    // Call setupEntryPoint here in case you want to setup any default\n    // middleware for the SSR endpoint\n    if (options.setupEntryPoint !== undefined) {\n        // NOTE: We expect an exported function named \"setup\"\n        const { setup } = await import(pathToFileURL(options.setupEntryPoint).href);\n        await setup();\n    }\n    // Add the main SSR route - NOTE: the path is not important since the\n    // matcher will decide if there is a matching page\n    httpServer.ssrRouter.all(\"/\", ssrEndpoint, {\n        generateMatcher: matcher,\n        etag: true,\n        middlewareList: [Router.setLatencyMetricName(\"astro\")],\n    });\n    // Start the http server now!\n    await httpServer.start();\n    bs.startupMsg(\"Astro adapter is primed - party on dudes!!\");\n};\n//# sourceMappingURL=main.js.map"],"names":[],"mappings":"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"}