0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-01-27 22:19:04 -05:00
astro/.changeset/purple-poets-sin.md
Chris Swithinbank b6ccaa6dc7
Revert "[ci] release (#10359)" (#10363)
This reverts commit 76c21b19d2.
2024-03-08 01:45:27 +01:00

1.7 KiB
Raw Blame History

@astrojs/db
minor

Adds support for integrations providing astro:db configuration and seed files, using the new astro:db:setup hook.

To get TypeScript support for the astro:db:setup hook, wrap your integration object in the defineDbIntegration() utility:

import { defineDbIntegration } from '@astrojs/db/utils';

export default function MyDbIntegration() {
  return defineDbIntegration({
    name: 'my-astro-db-powered-integration',
    hooks: {
      'astro:db:setup': ({ extendDb }) => {
        extendDb({
          configEntrypoint: '@astronaut/my-package/config',
          seedEntrypoint: '@astronaut/my-package/seed',
        });
      },
    },
  });
}

Use the extendDb method to register additional astro:db config and seed files.

Integration config and seed files follow the same format as their user-defined equivalents. However, often while working on integrations, you may not be able to benefit from Astros generated table types exported from astro:db. For full type safety and autocompletion support, use the asDrizzleTable() utility to wrap your table definitions in the seed file.

// config.ts
import { defineTable, column } from 'astro:db';

export const Pets = defineTable({
  columns: {
    name: column.text(),
    age: column.number(),
  },
});
// seed.ts
import { asDrizzleTable } from '@astrojs/db/utils';
import { db } from 'astro:db';
import { Pets } from './config';

export default async function() {
  // Convert the Pets table into a format ready for querying.
  const typeSafePets = asDrizzleTable('Pets', Pets);

  await db.insert(typeSafePets).values([
    { name: 'Palomita', age: 7 },
    { name: 'Pan', age: 3.5 },
  ]);
}