Skip to content

Commit 1cfdbe9

Browse files
committed
feat: generate full database sql dump
1 parent da3a6d6 commit 1cfdbe9

File tree

6 files changed

+29
-13
lines changed

6 files changed

+29
-13
lines changed

src/module.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import fastGlob from 'fast-glob'
1818
import htmlTags from '@nuxtjs/mdc/runtime/parser/utils/html-tags-list'
1919
import { kebabCase, pascalCase } from 'scule'
2020
import { generateCollectionInsert, generateCollectionTableDefinition, parseSourceBase } from './utils/collection'
21-
import { collectionsTemplate, componentsManifestTemplate, contentTypesTemplate, manifestTemplate, moduleTemplates } from './utils/templates'
21+
import { collectionsTemplate, componentsManifestTemplate, contentTypesTemplate, fullDatabaseRawDumpTemplate, manifestTemplate, moduleTemplates } from './utils/templates'
2222
import type { ResolvedCollection } from './types/collection'
2323
import type { ModuleOptions, SqliteDatabaseConfig } from './types/module'
2424
import { getContentChecksum, localDatabase, logger, watchContents, chunks, watchComponents, watchConfig } from './utils/dev'
@@ -126,10 +126,11 @@ export default defineNuxtModule<ModuleOptions>({
126126

127127
// Add Templates & aliases
128128
nuxt.options.nitro.alias = nuxt.options.nitro.alias || {}
129+
addTypeTemplate(contentTypesTemplate(collections))
130+
addTemplate(fullDatabaseRawDumpTemplate(manifest))
129131
nuxt.options.nitro.alias['#content/collections'] = addTemplate(collectionsTemplate(collections)).dst
130132
nuxt.options.alias['#content/components'] = addTemplate(componentsManifestTemplate(manifest)).dst
131133
nuxt.options.alias['#content/manifest'] = addTemplate(manifestTemplate(collections, manifest)).dst
132-
addTypeTemplate(contentTypesTemplate(collections))
133134

134135
// Load preset
135136
nuxt.hook('nitro:config', async (config) => {
@@ -169,7 +170,8 @@ export default defineNuxtModule<ModuleOptions>({
169170

170171
return updateTemplates({
171172
filter: template => [
172-
moduleTemplates.dump,
173+
moduleTemplates.fullRawDump,
174+
moduleTemplates.fullCompressedDump,
173175
moduleTemplates.manifest,
174176
moduleTemplates.components,
175177
].includes(template.filename),

src/presets/cloudflare-pages.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { addTemplate } from '@nuxt/kit'
22
import { join } from 'pathe'
3-
import { sqlDumpTemplateRaw } from '../utils/templates'
3+
import { collectionDumpTemplate } from '../utils/templates'
44
import { definePreset } from '../utils/preset'
55
import { logger } from '../utils/dev'
66

@@ -21,7 +21,7 @@ export default definePreset({
2121
// Add raw content dump
2222
manifest.collections.map(async (collection) => {
2323
if (!collection.private) {
24-
addTemplate(sqlDumpTemplateRaw(collection.name, manifest))
24+
addTemplate(collectionDumpTemplate(collection.name, manifest))
2525
}
2626
})
2727

src/presets/node.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { addTemplate } from '@nuxt/kit'
2-
import { sqlDumpTemplate } from '../utils/templates'
2+
import { fullDatabaseCompressedDumpTemplate } from '../utils/templates'
33
import { definePreset } from '../utils/preset'
44

55
export default definePreset({
@@ -8,7 +8,7 @@ export default definePreset({
88
nitroConfig.alias = nitroConfig.alias || {}
99
nitroConfig.handlers ||= []
1010

11-
nitroConfig.alias['#content/dump'] = addTemplate(sqlDumpTemplate(manifest)).dst
11+
nitroConfig.alias['#content/dump'] = addTemplate(fullDatabaseCompressedDumpTemplate(manifest)).dst
1212
nitroConfig.handlers.push({
1313
route: '/api/content/:collection/database.sql',
1414
handler: resolver.resolve('./runtime/presets/node/database.sql'),

src/utils/dev.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export async function watchContents(nuxt: Nuxt, collections: ResolvedCollection[
8484
await updateTemplates({
8585
filter: template => [
8686
moduleTemplates.manifest,
87-
moduleTemplates.dump,
87+
moduleTemplates.fullCompressedDump,
8888
// moduleTemplates.raw,
8989
].includes(template.filename),
9090
})

src/utils/templates.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export const moduleTemplates = {
2020
collections: 'content/collections.mjs',
2121
manifest: 'content/manifest.ts',
2222
components: 'content/components.ts',
23-
dump: 'content/dump.mjs',
23+
fullCompressedDump: 'content/database.compressed.mjs',
24+
fullRawDump: 'content/database.sql',
2425
}
2526

2627
export const contentTypesTemplate = (collections: ResolvedCollection[]) => ({
@@ -79,8 +80,8 @@ export const collectionsTemplate = (collections: ResolvedCollection[]) => ({
7980
write: true,
8081
})
8182

82-
export const sqlDumpTemplate = (manifest: Manifest) => ({
83-
filename: moduleTemplates.dump,
83+
export const fullDatabaseCompressedDumpTemplate = (manifest: Manifest) => ({
84+
filename: moduleTemplates.fullCompressedDump,
8485
getContents: ({ options }: { options: { manifest: Manifest } }) => {
8586
return Object.entries(options.manifest.dump).map(([key, value]) => {
8687
const str = Buffer.from(deflate(value.join('\n')).buffer).toString('base64')
@@ -93,7 +94,20 @@ export const sqlDumpTemplate = (manifest: Manifest) => ({
9394
},
9495
})
9596

96-
export const sqlDumpTemplateRaw = (collection: string, manifest: Manifest) => ({
97+
export const fullDatabaseRawDumpTemplate = (manifest: Manifest) => ({
98+
filename: moduleTemplates.fullRawDump,
99+
getContents: ({ options }: { options: { manifest: Manifest } }) => {
100+
return Object.entries(options.manifest.dump).map(([_key, value]) => {
101+
return value.join('\n')
102+
}).join('\n')
103+
},
104+
write: true,
105+
options: {
106+
manifest,
107+
},
108+
})
109+
110+
export const collectionDumpTemplate = (collection: string, manifest: Manifest) => ({
97111
filename: `content/raw/dump.${collection}.sql`,
98112
getContents: ({ options }: { options: { manifest: Manifest } }) => {
99113
const compressed = deflate((options.manifest.dump[collection] || []).join('\n'))

test/base.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ describe('empty', async () => {
7373

7474
describe('SQL dump', () => {
7575
test('is generated', async () => {
76-
const dump = await import(new URL('./fixtures/empty/.nuxt/content/dump.mjs', import.meta.url).pathname).then(m => m.content)
76+
const dump = await import(new URL('./fixtures/empty/.nuxt/content/database.compressed.mjs', import.meta.url).pathname).then(m => m.content)
7777

7878
const parsedDump = await decompressSQLDump(dump)
7979

0 commit comments

Comments
 (0)