mirror of
https://github.com/withastro/astro.git
synced 2025-01-20 22:12:38 -05:00
2e4958c8a7
* Add integrations API for adding db config/seed files
* Fix seeding when user seed file is present
* Add basic test and fixture for integrations API
* Freeze that lockfile
* Test to see if this is a Windows fix
* Don’t import.meta.glob integration seed files
* Make integration seed files export a default function
* style: rejiggle
* Fix temporary file conflicts
* Remove changes to Astro’s core types, type utility method instead
* Use `astro:db` instead of `@astrojs/db`
* Revert unnecessarily cautious temporary path name
This reverts commit ef2156e41b
.
* Add changeset
* Fix entrypoints and `asDrizzleTable` usage in changeset
* Getting Nate in on the co-author action
Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
* Fix user seed file in integrations fixture
* Update `seedLocal()` after merge
* Provide empty `seedFiles` array in `db execute`
---------
Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
58 lines
1.7 KiB
Markdown
58 lines
1.7 KiB
Markdown
---
|
||
"@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:
|
||
|
||
```js
|
||
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 Astro’s 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.
|
||
|
||
```js
|
||
// config.ts
|
||
import { defineTable, column } from 'astro:db';
|
||
|
||
export const Pets = defineTable({
|
||
columns: {
|
||
name: column.text(),
|
||
age: column.number(),
|
||
},
|
||
});
|
||
```
|
||
|
||
```js
|
||
// 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 },
|
||
]);
|
||
}
|
||
```
|