1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
---
"@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 },
]);
}
```
|