diff --git a/packages/core/cli/commands/build.mjs b/packages/core/cli/commands/build.mjs index 7051d70..e70080f 100644 --- a/packages/core/cli/commands/build.mjs +++ b/packages/core/cli/commands/build.mjs @@ -3,7 +3,6 @@ import { consola } from 'consola' import { defineCommand } from 'citty' import { dirname, resolve } from 'pathe' -import { loadConfig } from 'c12' import { build, copyPublicAssets, @@ -12,26 +11,24 @@ import { prerender, } from 'nitropack' import { fileURLToPath } from 'node:url' -import { nitroConfig as mcflyNitroConfig } from '../../runtime/nitro-config.js' +import { getNitroConfig } from '../../get-nitro-config.js' async function _build(args) { consola.start('Building project...') try { const rootDir = resolve(args.dir || args._dir || '.') - const { config: mcflyConfig } = await loadConfig({ name: 'mcfly' }) - const { config: nitroConfig } = await loadConfig({ name: 'nitro' }) + + const nitroConfig = await getNitroConfig() const nitro = await createNitro({ rootDir, dev: false, + + ...nitroConfig, + minify: args.minify, preset: args.preset, - // spread mcfly.nitro config - ...(mcflyConfig.nitro ?? {}), - ...(nitroConfig ?? {}), - ...mcflyNitroConfig, }) - nitro.options.runtimeConfig.mcfly = mcflyConfig const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) diff --git a/packages/core/cli/commands/serve.mjs b/packages/core/cli/commands/serve.mjs index 7f680c5..d8d51af 100644 --- a/packages/core/cli/commands/serve.mjs +++ b/packages/core/cli/commands/serve.mjs @@ -12,10 +12,9 @@ import { prerender, } from 'nitropack' import { resolve } from 'pathe' -import { loadConfig } from 'c12' import { fileURLToPath } from 'node:url' import { dirname } from 'pathe' -import { nitroConfig as mcflyNitroConfig } from '../../runtime/nitro-config.js' +import { getNitroConfig } from '../../get-nitro-config.js' const hmrKeyRe = /^runtimeConfig\.|routeRules\./ const __filename = fileURLToPath(import.meta.url) @@ -42,8 +41,6 @@ async function serve(args) { * @type {string} */ const rootDir = resolve(args.dir || args._dir || '.') - const { config: mcflyConfig } = await loadConfig({ name: 'mcfly' }) - const { config: nitroConfig } = await loadConfig({ name: 'nitro' }) /** * @typedef {import('nitropack').Nitro} Nitro @@ -60,6 +57,8 @@ async function serve(args) { await nitro.close() } + const nitroConfig = await getNitroConfig() + // create new nitro nitro = await createNitro( { @@ -67,10 +66,7 @@ async function serve(args) { dev: true, preset: 'nitro-dev', _cli: { command: 'dev' }, - // spread mcfly.nitro config - ...(mcflyConfig.nitro ?? {}), - ...(nitroConfig ?? {}), - ...mcflyNitroConfig, + ...nitroConfig, }, { watch: true, @@ -95,7 +91,6 @@ async function serve(args) { } ) nitro.hooks.hookOnce('restart', reload) - nitro.options.runtimeConfig.mcfly = mcflyConfig nitro.options.handlers.push({ middleware: true, diff --git a/packages/core/get-nitro-config.js b/packages/core/get-nitro-config.js new file mode 100644 index 0000000..6bdd533 --- /dev/null +++ b/packages/core/get-nitro-config.js @@ -0,0 +1,30 @@ +import { loadConfig } from 'c12' +import { mcflyNitroConfig } from './mcfly-nitro-config.js' + +/** + * @typedef {import('nitropack').NitroConfig} NitroConfig + */ + +/** + * @returns {Promise} + */ +export async function getNitroConfig() { + const { config: nitroConfig } = await loadConfig({ name: 'nitro' }) + const { config: mcflyConfig } = await loadConfig({ name: 'mcfly' }) + + return { + // nitro config within user's mcfly.config.mjs + ...(mcflyConfig.nitro ?? {}), + + // nitro config from nitro.config.mjs + ...(nitroConfig ?? {}), + + // McFly standard nitro config + ...mcflyNitroConfig, + + // expose mcfly config to framework runtime + runtimeConfig: { + mcfly: mcflyConfig, + }, + } +} diff --git a/packages/core/runtime/nitro-config.js b/packages/core/mcfly-nitro-config.js similarity index 94% rename from packages/core/runtime/nitro-config.js rename to packages/core/mcfly-nitro-config.js index 47feee7..be81514 100644 --- a/packages/core/runtime/nitro-config.js +++ b/packages/core/mcfly-nitro-config.js @@ -2,7 +2,7 @@ * @typedef {import('nitropack').NitroConfig} NitroConfig * @type {NitroConfig} */ -export const nitroConfig = { +export const mcflyNitroConfig = { framework: { name: 'McFly', }, diff --git a/packages/core/package.json b/packages/core/package.json index 69afe6a..85f7fb9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -10,8 +10,7 @@ "scripts": { "version": "npm version", "publish": "npm publish", - "test": "echo \"Error: no test specified\" && exit 1", - "build:middleware": "npx esbuild route-middleware.js --bundle --outfile=mcfly-middleware.js" + "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", diff --git a/packages/core/route-middleware.js b/packages/core/route-middleware.js index 69ac166..de17a5c 100644 --- a/packages/core/route-middleware.js +++ b/packages/core/route-middleware.js @@ -2,6 +2,7 @@ import { eventHandler } from 'h3' import { useRuntimeConfig, useStorage } from 'nitropack/runtime' import { createHooks } from 'hookable' import { consola } from 'consola' +import { colorize } from 'consola/utils' import { hooks as mcflyHooks, @@ -9,7 +10,7 @@ import { evaluateServerScripts, injectHtmlFragments, injectCustomElements, -} from '@mcflyjs/core/runtime/index.js' +} from '@mcflyjs/core/runtime/index.js' // important to import from installed node_module because this script is passed to another context /** * @typedef {import('../config').McFlyConfig} Config @@ -29,18 +30,17 @@ export default eventHandler(async (event) => { let { mcfly: config } = useRuntimeConfig() const storage = useStorage() - const publicAssets = (await storage.getKeys('root:public')).map( - (key) => `/${key.replace('root:public:', '')}` - ) - // if not page, don't render - if (event.path.startsWith('/api') || publicAssets.includes(event.path)) { + if (event.path.startsWith('/api')) { return } if (!config || Object.keys(config).length === 0) { config = defaultMcflyConfig - consola.warn(`[WARN]: McFly configuration not loaded, using defaults...`) + consola.warn( + `[WARN]: McFly configuration not found, using defaults...`, + defaultMcflyConfig + ) } const plugins = config.plugins ?? [] @@ -96,11 +96,11 @@ export default eventHandler(async (event) => { } const timeEnd = performance.now() - consola.info( - 'Page rendered in', + consola.log( + colorize('green', event.path), + 'rendered in', Math.round(timeEnd - timeStart), - 'ms:', - event.path + 'ms' ) return ( html ?? diff --git a/packages/core/runtime/index.js b/packages/core/runtime/index.js index 64be243..b397ab0 100644 --- a/packages/core/runtime/index.js +++ b/packages/core/runtime/index.js @@ -4,4 +4,4 @@ export { getFiles } from './get-files.mjs' export { hooks } from './hooks.mjs' export { injectCustomElements } from './inject-elements.mjs' export { injectHtmlFragments } from './inject-fragments.mjs' -export { nitroConfig } from './nitro-config.js' +export { mcflyNitroConfig as nitroConfig } from '../mcfly-nitro-config.js' diff --git a/packages/core/runtime/inject-elements.mjs b/packages/core/runtime/inject-elements.mjs index fceeb87..3280153 100644 --- a/packages/core/runtime/inject-elements.mjs +++ b/packages/core/runtime/inject-elements.mjs @@ -1,5 +1,5 @@ import { ELEMENT_NODE, parse, render, walkSync } from 'ultrahtml' -import { getFiles } from '@mcflyjs/core/runtime/get-files.mjs' +import { getFiles } from './get-files.mjs' /** * @typedef {import('../../config/index.js').McFlyConfig} Config diff --git a/packages/core/runtime/inject-fragments.mjs b/packages/core/runtime/inject-fragments.mjs index dffb791..86815ec 100644 --- a/packages/core/runtime/inject-fragments.mjs +++ b/packages/core/runtime/inject-fragments.mjs @@ -1,5 +1,5 @@ import { ELEMENT_NODE, parse, render, walkSync } from 'ultrahtml' -import { getFiles } from '@mcflyjs/core/runtime/get-files.mjs' +import { getFiles } from './get-files.mjs' /** * @typedef {import('ultrahtml').Node} HtmlNode diff --git a/site/package.json b/site/package.json index 5626745..457a76d 100644 --- a/site/package.json +++ b/site/package.json @@ -21,7 +21,7 @@ "dev": "mcfly serve", "build": "mcfly build", "preview": "node .output/server/index.mjs", - "build:preview": "pnpm run build && pnpm run preview", + "build:preview": "pnpm run build --preset=node-server && pnpm run preview", "deploy": "netlify deploy --site=$NETLIFY_SITE_ID --dir=dist --prod" }, "dependencies": {