diff --git a/src/module.ts b/src/module.ts index 9ed70cbe0..c8504be31 100644 --- a/src/module.ts +++ b/src/module.ts @@ -18,7 +18,7 @@ import fastGlob from 'fast-glob' import htmlTags from '@nuxtjs/mdc/runtime/parser/utils/html-tags-list' import { kebabCase, pascalCase } from 'scule' import { generateCollectionInsert, generateCollectionTableDefinition, parseSourceBase } from './utils/collection' -import { collectionsTemplate, componentsManifestTemplate, contentTypesTemplate, manifestTemplate, moduleTemplates } from './utils/templates' +import { collectionsTemplate, componentsManifestTemplate, contentTypesTemplate, fullDatabaseRawDumpTemplate, manifestTemplate, moduleTemplates } from './utils/templates' import type { ResolvedCollection } from './types/collection' import type { ModuleOptions, SqliteDatabaseConfig } from './types/module' import { getContentChecksum, localDatabase, logger, watchContents, chunks, watchComponents, watchConfig } from './utils/dev' @@ -126,10 +126,11 @@ export default defineNuxtModule({ // Add Templates & aliases nuxt.options.nitro.alias = nuxt.options.nitro.alias || {} + addTypeTemplate(contentTypesTemplate(collections)) + addTemplate(fullDatabaseRawDumpTemplate(manifest)) nuxt.options.nitro.alias['#content/collections'] = addTemplate(collectionsTemplate(collections)).dst nuxt.options.alias['#content/components'] = addTemplate(componentsManifestTemplate(manifest)).dst nuxt.options.alias['#content/manifest'] = addTemplate(manifestTemplate(collections, manifest)).dst - addTypeTemplate(contentTypesTemplate(collections)) // Load preset nuxt.hook('nitro:config', async (config) => { @@ -169,7 +170,8 @@ export default defineNuxtModule({ return updateTemplates({ filter: template => [ - moduleTemplates.dump, + moduleTemplates.fullRawDump, + moduleTemplates.fullCompressedDump, moduleTemplates.manifest, moduleTemplates.components, ].includes(template.filename), diff --git a/src/presets/cloudflare-pages.ts b/src/presets/cloudflare-pages.ts index 1ddd61f41..a2cf45358 100644 --- a/src/presets/cloudflare-pages.ts +++ b/src/presets/cloudflare-pages.ts @@ -1,6 +1,6 @@ import { addTemplate } from '@nuxt/kit' import { join } from 'pathe' -import { sqlDumpTemplateRaw } from '../utils/templates' +import { collectionDumpTemplate } from '../utils/templates' import { definePreset } from '../utils/preset' import { logger } from '../utils/dev' @@ -21,7 +21,7 @@ export default definePreset({ // Add raw content dump manifest.collections.map(async (collection) => { if (!collection.private) { - addTemplate(sqlDumpTemplateRaw(collection.name, manifest)) + addTemplate(collectionDumpTemplate(collection.name, manifest)) } }) diff --git a/src/presets/node.ts b/src/presets/node.ts index a13b6a93d..d041543c5 100644 --- a/src/presets/node.ts +++ b/src/presets/node.ts @@ -1,5 +1,5 @@ import { addTemplate } from '@nuxt/kit' -import { sqlDumpTemplate } from '../utils/templates' +import { fullDatabaseCompressedDumpTemplate } from '../utils/templates' import { definePreset } from '../utils/preset' export default definePreset({ @@ -8,7 +8,7 @@ export default definePreset({ nitroConfig.alias = nitroConfig.alias || {} nitroConfig.handlers ||= [] - nitroConfig.alias['#content/dump'] = addTemplate(sqlDumpTemplate(manifest)).dst + nitroConfig.alias['#content/dump'] = addTemplate(fullDatabaseCompressedDumpTemplate(manifest)).dst nitroConfig.handlers.push({ route: '/api/content/:collection/database.sql', handler: resolver.resolve('./runtime/presets/node/database.sql'), diff --git a/src/utils/dev.ts b/src/utils/dev.ts index 5920be652..169b767dc 100644 --- a/src/utils/dev.ts +++ b/src/utils/dev.ts @@ -84,7 +84,7 @@ export async function watchContents(nuxt: Nuxt, collections: ResolvedCollection[ await updateTemplates({ filter: template => [ moduleTemplates.manifest, - moduleTemplates.dump, + moduleTemplates.fullCompressedDump, // moduleTemplates.raw, ].includes(template.filename), }) diff --git a/src/utils/templates.ts b/src/utils/templates.ts index 1f68a6a41..cd1b43855 100644 --- a/src/utils/templates.ts +++ b/src/utils/templates.ts @@ -20,7 +20,8 @@ export const moduleTemplates = { collections: 'content/collections.mjs', manifest: 'content/manifest.ts', components: 'content/components.ts', - dump: 'content/dump.mjs', + fullCompressedDump: 'content/database.compressed.mjs', + fullRawDump: 'content/database.sql', } export const contentTypesTemplate = (collections: ResolvedCollection[]) => ({ @@ -79,8 +80,8 @@ export const collectionsTemplate = (collections: ResolvedCollection[]) => ({ write: true, }) -export const sqlDumpTemplate = (manifest: Manifest) => ({ - filename: moduleTemplates.dump, +export const fullDatabaseCompressedDumpTemplate = (manifest: Manifest) => ({ + filename: moduleTemplates.fullCompressedDump, getContents: ({ options }: { options: { manifest: Manifest } }) => { return Object.entries(options.manifest.dump).map(([key, value]) => { const str = Buffer.from(deflate(value.join('\n')).buffer).toString('base64') @@ -93,7 +94,20 @@ export const sqlDumpTemplate = (manifest: Manifest) => ({ }, }) -export const sqlDumpTemplateRaw = (collection: string, manifest: Manifest) => ({ +export const fullDatabaseRawDumpTemplate = (manifest: Manifest) => ({ + filename: moduleTemplates.fullRawDump, + getContents: ({ options }: { options: { manifest: Manifest } }) => { + return Object.entries(options.manifest.dump).map(([_key, value]) => { + return value.join('\n') + }).join('\n') + }, + write: true, + options: { + manifest, + }, +}) + +export const collectionDumpTemplate = (collection: string, manifest: Manifest) => ({ filename: `content/raw/dump.${collection}.sql`, getContents: ({ options }: { options: { manifest: Manifest } }) => { const compressed = deflate((options.manifest.dump[collection] || []).join('\n')) diff --git a/test/base.test.ts b/test/base.test.ts index ecd4afd88..eb1bb9742 100644 --- a/test/base.test.ts +++ b/test/base.test.ts @@ -73,7 +73,7 @@ describe('empty', async () => { describe('SQL dump', () => { test('is generated', async () => { - const dump = await import(new URL('./fixtures/empty/.nuxt/content/dump.mjs', import.meta.url).pathname).then(m => m.content) + const dump = await import(new URL('./fixtures/empty/.nuxt/content/database.compressed.mjs', import.meta.url).pathname).then(m => m.content) const parsedDump = await decompressSQLDump(dump)