1- import { join } from 'node:path'
21import { pascalCase } from 'scule'
32import type { ZodObject , ZodOptionalDef , ZodRawShape , ZodStringDef , ZodType } from 'zod'
43import type { Collection , ResolvedCollection , CollectionSource , DefinedCollection , ResolvedCollectionSource } from '../types/collection'
4+ import { defineLocalSource , defineGitHubSource } from './source'
55import { metaSchema , pageSchema } from './schema'
66import type { ZodFieldType } from './zod'
77import { getUnderlyingType , ZodToSqlFieldTypes , z } from './zod'
8- import { downloadRepository , parseGitHubUrl } from './git'
98import { logger } from './dev'
109
11- interface ResolveOptions {
12- rootDir : string
13- }
14-
1510const JSON_FIELDS_TYPES = [ 'ZodObject' , 'ZodArray' , 'ZodRecord' , 'ZodIntersection' , 'ZodUnion' , 'ZodAny' ]
1611
1712const getTableName = ( name : string ) => `content_${ name } `
@@ -26,13 +21,13 @@ export function defineCollection<T extends ZodRawShape>(collection: Collection<T
2621
2722 return {
2823 type : collection . type ,
29- source : collection . source ,
24+ source : resolveSource ( collection . source ) ,
3025 schema : collection . schema || z . object ( { } ) ,
3126 extendedSchema : schema ,
3227 }
3328}
3429
35- export function resolveCollection ( name : string , collection : DefinedCollection , opts : ResolveOptions ) : ResolvedCollection | undefined {
30+ export function resolveCollection ( name : string , collection : DefinedCollection ) : ResolvedCollection | undefined {
3631 if ( / ^ [ a - z _ ] \w * $ / i. test ( name ) === false ) {
3732 logger . warn ( [
3833 `Collection name "${ name } " is invalid. Collection names must be valid JavaScript identifiers. This collection will be ignored.` ,
@@ -46,7 +41,7 @@ export function resolveCollection(name: string, collection: DefinedCollection, o
4641 name,
4742 type : collection . type || 'page' ,
4843 pascalName : pascalCase ( name ) ,
49- source : resolveSource ( collection . source , opts ) ,
44+ source : collection . source ,
5045 tableName : getTableName ( name ) ,
5146 tableDefinition : generateCollectionTableDefinition ( name , collection , { drop : true } ) ,
5247 generatedFields : {
@@ -62,7 +57,7 @@ export function resolveCollection(name: string, collection: DefinedCollection, o
6257 }
6358}
6459
65- export function resolveCollections ( collections : Record < string , DefinedCollection > , opts : ResolveOptions ) : ResolvedCollection [ ] {
60+ export function resolveCollections ( collections : Record < string , DefinedCollection > ) : ResolvedCollection [ ] {
6661 collections . _info = defineCollection ( {
6762 type : 'data' ,
6863 schema : z . object ( {
@@ -71,39 +66,31 @@ export function resolveCollections(collections: Record<string, DefinedCollection
7166 } )
7267
7368 return Object . entries ( collections )
74- . map ( ( [ name , collection ] ) => resolveCollection ( name , collection , opts ) )
69+ . map ( ( [ name , collection ] ) => resolveCollection ( name , collection ) )
7570 . filter ( Boolean ) as ResolvedCollection [ ]
7671}
7772
7873/**
7974 * Process collection source and return refined source
8075 */
81- function resolveSource ( source : string | CollectionSource | undefined , opts : ResolveOptions ) : ResolvedCollectionSource | undefined {
76+ function resolveSource ( source : string | CollectionSource | undefined ) : ResolvedCollectionSource | undefined {
8277 if ( ! source ) {
8378 return undefined
8479 }
8580
86- const result : ResolvedCollectionSource = {
87- cwd : '' ,
88- ...( typeof source === 'string' ? { path : source } : source ) ,
81+ if ( typeof source === 'string' ) {
82+ return defineLocalSource ( { path : source } )
8983 }
9084
91- const repository = result ?. repository && parseGitHubUrl ( result . repository ! )
92- if ( repository ) {
93- const { org, repo, branch } = repository
94- result . cwd = join ( opts . rootDir , '.data' , 'content' , `github-${ org } -${ repo } -${ branch } ` )
95-
96- result . prepare = async ( ) => {
97- await downloadRepository (
98- `https://github.com/${ org } /${ repo } /archive/refs/heads/${ branch } .tar.gz` ,
99- result . cwd ! ,
100- )
101- }
85+ if ( ( source as ResolvedCollectionSource ) . _resolved ) {
86+ return source as ResolvedCollectionSource
10287 }
10388
104- result . cwd = result . cwd || join ( opts . rootDir , 'content' )
89+ if ( source . repository ) {
90+ return defineGitHubSource ( source )
91+ }
10592
106- return result
93+ return defineLocalSource ( source )
10794}
10895
10996export function parseSourceBase ( source : CollectionSource ) {
0 commit comments