UNPKG

nitro-public-module

Version:

nitro module for better public compatibility | 对于 nitro 更好的静态资源兼容模块

73 lines (69 loc) 2.81 kB
'use strict'; const defu = require('defu'); const url = require('url'); const promises = require('fs/promises'); const pathe = require('pathe'); var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null; const _dirname = typeof __dirname !== "undefined" ? __dirname : pathe.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))); const runtime = pathe.resolve(_dirname, "../runtime"); const defaultOptions = { preset: "fallback" }; function nitroPublic(options = defaultOptions) { return { name: "nitro-public", setup(nitro) { options = defu.defu(options, defaultOptions); useVirtual(); if (!isPresetEnabled()) { return; } useMiddleware(options.preset); function isPresetEnabled() { const { preset, forcePresetEnabled } = options; const { preset: nitroPreset, dev } = nitro.options; if (forcePresetEnabled !== void 0) { return forcePresetEnabled; } if (dev || preset === false) { return false; } const enabled = ["node", "deno", "bun"].some((runtime2) => { return nitroPreset.includes(runtime2); }); if (!enabled) { const logger = nitro.logger.withTag("public"); logger.warn( `The preset "${preset}" is not supported by the ${nitroPreset} runtime. Of course, you can also enable the forcePresetEnabled option to force it on` ); } return enabled; } function useMiddleware(preset = "fallback") { var _a; if (preset === false) { return; } (_a = nitro.options).handlers ?? (_a.handlers = []); nitro.options.handlers.push({ method: "GET", middleware: true, handler: pathe.resolve(runtime, `middleware/${preset}.ts`) }); } function useVirtual() { var _a, _b, _c, _d; (_a = nitro.options).virtual ?? (_a.virtual = {}); (_b = nitro.options.typescript).tsConfig ?? (_b.tsConfig = {}); (_c = nitro.options.typescript.tsConfig).compilerOptions ?? (_c.compilerOptions = {}); (_d = nitro.options.typescript.tsConfig.compilerOptions).paths ?? (_d.paths = {}); nitro.options.typescript.tsConfig.compilerOptions.paths["#nitro-public"] = [pathe.resolve(runtime, "virtual/nitro-public.d.ts")]; nitro.options.virtual["#nitro-public"] = () => { const nitroPublic2 = pathe.resolve(runtime, "virtual/nitro-public.js"); return promises.readFile(nitroPublic2, "utf8"); }; } } }; } module.exports = nitroPublic;