From 4447b23eefd3696e3a7bcb8b8d3360ef13954677 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 5 Aug 2024 17:11:24 +0100 Subject: [PATCH 1/5] Add hot key to reload content layer --- .../src/content/{sync.ts => content-layer.ts} | 4 ++-- packages/astro/src/core/dev/dev.ts | 2 +- packages/astro/src/core/dev/restart.ts | 15 ++++++++++++--- packages/astro/src/core/messages.ts | 2 ++ packages/astro/src/core/sync/index.ts | 2 +- 5 files changed, 18 insertions(+), 7 deletions(-) rename packages/astro/src/content/{sync.ts => content-layer.ts} (99%) diff --git a/packages/astro/src/content/sync.ts b/packages/astro/src/content/content-layer.ts similarity index 99% rename from packages/astro/src/content/sync.ts rename to packages/astro/src/content/content-layer.ts index 7c9f19810c5f..8fe0ee3dd899 100644 --- a/packages/astro/src/content/sync.ts +++ b/packages/astro/src/content/content-layer.ts @@ -56,7 +56,6 @@ export class ContentLayer { ctx.status === 'loaded' && ctx.config.digest !== this.#lastConfigDigest ) { - this.#lastConfigDigest = ctx.config.digest; this.sync(); } }); @@ -128,9 +127,10 @@ export class ContentLayer { logger.debug('Content config not loaded, skipping sync'); return; } + const { digest: currentConfigDigest } = contentConfig.config; + this.#lastConfigDigest = currentConfigDigest; const previousConfigDigest = await this.#store.metaStore().get('config-digest'); - const { digest: currentConfigDigest } = contentConfig.config; if (currentConfigDigest && previousConfigDigest !== currentConfigDigest) { logger.info('Content config changed, clearing cache'); this.#store.clearAll(); diff --git a/packages/astro/src/core/dev/dev.ts b/packages/astro/src/core/dev/dev.ts index 8095c9743c1b..12f66f9b4137 100644 --- a/packages/astro/src/core/dev/dev.ts +++ b/packages/astro/src/core/dev/dev.ts @@ -7,9 +7,9 @@ import { gt, major, minor, patch } from 'semver'; import type * as vite from 'vite'; import type { AstroInlineConfig } from '../../@types/astro.js'; import { DATA_STORE_FILE } from '../../content/consts.js'; +import { globalContentLayer } from '../../content/content-layer.js'; import { DataStore, globalDataStore } from '../../content/data-store.js'; import { attachContentServerListeners } from '../../content/index.js'; -import { globalContentLayer } from '../../content/sync.js'; import { globalContentConfigObserver } from '../../content/utils.js'; import { telemetry } from '../../events/index.js'; import * as msg from '../messages.js'; diff --git a/packages/astro/src/core/dev/restart.ts b/packages/astro/src/core/dev/restart.ts index a30cbe7e316d..383a7f802a82 100644 --- a/packages/astro/src/core/dev/restart.ts +++ b/packages/astro/src/core/dev/restart.ts @@ -2,6 +2,7 @@ import type nodeFs from 'node:fs'; import { fileURLToPath } from 'node:url'; import * as vite from 'vite'; import type { AstroInlineConfig, AstroSettings } from '../../@types/astro.js'; +import { globalContentLayer } from '../../content/content-layer.js'; import { eventCliSession, telemetry } from '../../events/index.js'; import { createNodeLogger, createSettings, resolveConfig } from '../config/index.js'; import { collectErrorMetadata } from '../errors/dev/utils.js'; @@ -169,11 +170,19 @@ export async function createContainerWithAutomaticRestart({ // Ignore the `forceOptimize` parameter for now. restart.container.viteServer.restart = () => handleServerRestart(); - // Set up shortcuts, overriding Vite's default shortcuts so it works for Astro + // Set up shortcuts restart.container.viteServer.bindCLIShortcuts({ customShortcuts: [ - // Disable Vite's builtin "r" (restart server), "u" (print server urls) and "c" (clear console) shortcuts - { key: 'r', description: '' }, + { + key: 'r', + description: 'reload content layer', + action: () => { + if (globalContentLayer.initialized()) { + globalContentLayer.get().sync(); + } + }, + }, + // Disable default Vite shortcuts that don't work well with Astro { key: 'u', description: '' }, { key: 'c', description: '' }, ], diff --git a/packages/astro/src/core/messages.ts b/packages/astro/src/core/messages.ts index ed59e848f817..4895400bc05a 100644 --- a/packages/astro/src/core/messages.ts +++ b/packages/astro/src/core/messages.ts @@ -99,6 +99,8 @@ export function serverStart({ ...localUrlMessages, ...networkUrlMessages, '', + `${dim('Press')} ${bold('h + enter')} ${dim('to')} ${bold('show hot keys')}`, + '' ]; return messages.filter((msg) => typeof msg === 'string').join('\n'); } diff --git a/packages/astro/src/core/sync/index.ts b/packages/astro/src/core/sync/index.ts index c73c69167552..8d82e50cbd79 100644 --- a/packages/astro/src/core/sync/index.ts +++ b/packages/astro/src/core/sync/index.ts @@ -6,9 +6,9 @@ import { type HMRPayload, createServer } from 'vite'; import type { AstroConfig, AstroInlineConfig, AstroSettings } from '../../@types/astro.js'; import { getPackage } from '../../cli/install-package.js'; import { DATA_STORE_FILE } from '../../content/consts.js'; +import { globalContentLayer } from '../../content/content-layer.js'; import { DataStore, globalDataStore } from '../../content/data-store.js'; import { createContentTypesGenerator } from '../../content/index.js'; -import { globalContentLayer } from '../../content/sync.js'; import { globalContentConfigObserver } from '../../content/utils.js'; import { syncAstroEnv } from '../../env/sync.js'; import { telemetry } from '../../events/index.js'; From 4ca8f8f8ef05c7f5000532821a05543dab1b6ff4 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 6 Aug 2024 09:47:09 +0100 Subject: [PATCH 2/5] Fix filename --- packages/astro/test/test-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/test/test-utils.js b/packages/astro/test/test-utils.js index bcd527948977..7e8fb046df68 100644 --- a/packages/astro/test/test-utils.js +++ b/packages/astro/test/test-utils.js @@ -7,7 +7,7 @@ import fastGlob from 'fast-glob'; import stripAnsi from 'strip-ansi'; import { Agent } from 'undici'; import { check } from '../dist/cli/check/index.js'; -import { globalContentLayer } from '../dist/content/sync.js'; +import { globalContentLayer } from '../dist/content/content-layer.js'; import build from '../dist/core/build/index.js'; import { RESOLVED_SPLIT_MODULE_ID } from '../dist/core/build/plugins/plugin-ssr.js'; import { getVirtualModulePageName } from '../dist/core/build/plugins/util.js'; From c4fd717c54fa3c5dccd9f6ef6fdca5ddaf62bac5 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 6 Aug 2024 13:24:47 +0100 Subject: [PATCH 3/5] Remove cli message --- packages/astro/src/core/messages.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/astro/src/core/messages.ts b/packages/astro/src/core/messages.ts index 4895400bc05a..ed59e848f817 100644 --- a/packages/astro/src/core/messages.ts +++ b/packages/astro/src/core/messages.ts @@ -99,8 +99,6 @@ export function serverStart({ ...localUrlMessages, ...networkUrlMessages, '', - `${dim('Press')} ${bold('h + enter')} ${dim('to')} ${bold('show hot keys')}`, - '' ]; return messages.filter((msg) => typeof msg === 'string').join('\n'); } From f818a0d3e600e57b1c15f7e1cda3c1ce0e44074e Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 7 Aug 2024 14:29:55 +0100 Subject: [PATCH 4/5] Update example --- .../astro/test/fixtures/content-layer/src/content/config.ts | 4 +++- .../astro/test/fixtures/content-layer/src/pages/index.astro | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/astro/test/fixtures/content-layer/src/content/config.ts b/packages/astro/test/fixtures/content-layer/src/content/config.ts index d1c51d3ff82f..116e5d995bf3 100644 --- a/packages/astro/test/fixtures/content-layer/src/content/config.ts +++ b/packages/astro/test/fixtures/content-layer/src/content/config.ts @@ -96,18 +96,20 @@ const increment = defineCollection({ loader: { name: 'increment-loader', load: async ({ store }) => { - const entry = store.get<{ lastValue: number }>('value'); + const entry = store.get('value'); const lastValue: number = entry?.data.lastValue ?? 0; store.set({ id: 'value', data: { lastValue: lastValue + 1, + lastUpdated: new Date(), }, }); }, }, schema: z.object({ lastValue: z.number(), + lastUpdated: z.date(), }), }); diff --git a/packages/astro/test/fixtures/content-layer/src/pages/index.astro b/packages/astro/test/fixtures/content-layer/src/pages/index.astro index 970dffaf003d..dbd18118a045 100644 --- a/packages/astro/test/fixtures/content-layer/src/pages/index.astro +++ b/packages/astro/test/fixtures/content-layer/src/pages/index.astro @@ -4,12 +4,14 @@ import { getCollection, getEntry } from 'astro:content'; const blog = await getCollection('blog'); const first = await getEntry('blog', 1); const dogs = await getCollection('dogs'); +const increment = await getEntry('increment', 'value'); --- Index +

Last updated: {increment.data.lastUpdated.toLocaleTimeString()}

Dogs

+ From 3795a25407eaadd9ccb6297640ccc8a75fd3a651 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 7 Aug 2024 14:51:46 +0100 Subject: [PATCH 5/5] Change key to "s" --- packages/astro/src/core/dev/restart.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/core/dev/restart.ts b/packages/astro/src/core/dev/restart.ts index 383a7f802a82..ff2ad511f25e 100644 --- a/packages/astro/src/core/dev/restart.ts +++ b/packages/astro/src/core/dev/restart.ts @@ -174,8 +174,8 @@ export async function createContainerWithAutomaticRestart({ restart.container.viteServer.bindCLIShortcuts({ customShortcuts: [ { - key: 'r', - description: 'reload content layer', + key: 's', + description: 'sync content layer', action: () => { if (globalContentLayer.initialized()) { globalContentLayer.get().sync(); @@ -183,6 +183,7 @@ export async function createContainerWithAutomaticRestart({ }, }, // Disable default Vite shortcuts that don't work well with Astro + { key: 'r', description: '' }, { key: 'u', description: '' }, { key: 'c', description: '' }, ],