Skip to content

Commit 2b8c39a

Browse files
committed
WIP stackbit extension
1 parent fdac478 commit 2b8c39a

File tree

41 files changed

+729
-1830
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+729
-1830
lines changed

packages/@contentlayer/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentlayer/cli",
3-
"version": "0.2.5",
3+
"version": "0.2.6-dev.7",
44
"type": "module",
55
"exports": "./dist/index.js",
66
"types": "./dist/index.d.ts",

packages/@contentlayer/cli/src/commands/PostInstallCommand.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const generateTypes = ({
5959
}
6060

6161
const { source, esbuildHash } = sourceEither.right
62-
const schemaDef = yield* $(source.provideSchema(esbuildHash))
62+
const schemaDef = yield* $(source.provideSchema({ esbuildHash }))
6363

6464
if (!indexDtsFileExists) {
6565
yield* $(fs.writeFile(indexDtsFilePath, core.makeDataTypes({ schemaDef })))

packages/@contentlayer/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentlayer/client",
3-
"version": "0.2.5",
3+
"version": "0.2.6-dev.7",
44
"type": "module",
55
"exports": "./dist/index.js",
66
"types": "./dist/index.d.ts",

packages/@contentlayer/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentlayer/core",
3-
"version": "0.2.5",
3+
"version": "0.2.6-dev.7",
44
"type": "module",
55
"exports": "./dist/index.js",
66
"types": "./dist/index.d.ts",
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
declare global {
2+
// TODO docs
3+
interface ContentlayerExtensions {
4+
// [extensionName: string]: {
5+
// root: never
6+
// documentType: never
7+
// nestedType: never
8+
// field: never
9+
// }
10+
}
11+
}
12+
13+
export type ExtensionsRoot = { [K in keyof ContentlayerExtensions]: ContentlayerExtensions[K]['root'] }
14+
export type ExtensionsDocumentType = { [K in keyof ContentlayerExtensions]: ContentlayerExtensions[K]['documentType'] }
15+
export type ExtensionsNestedType = { [K in keyof ContentlayerExtensions]: ContentlayerExtensions[K]['nestedType'] }
16+
export type ExtensionsField = { [K in keyof ContentlayerExtensions]: ContentlayerExtensions[K]['field'] }

packages/@contentlayer/core/src/generation/generate-dotpkg.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export const generateDotpkgStream = ({
7676
const generationOptions = { sourcePluginType: config.source.type, options: config.source.options }
7777
const resolveParams = pipe(
7878
T.structPar({
79-
schemaDef: config.source.provideSchema(config.esbuildHash),
79+
schemaDef: config.source.provideSchema({ esbuildHash: config.esbuildHash }),
8080
targetPath: ArtifactsDir.mkdir,
8181
}),
8282
T.either,

packages/@contentlayer/core/src/generation/generate-types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export const renderDocumentTypeDefOrNestedTypeDef = ({
119119
const computedFields = (def._tag === 'DocumentTypeDef' ? def.computedFields : [])
120120
.map((field) => `${field.description ? ` /** ${field.description} */\n` : ''} ${field.name}: ${field.type}`)
121121
.join('\n')
122-
const description = def.description ?? def.extensions.stackbit?.fields?.[def.name]?.label
122+
const description = def.description
123123

124124
const rawType = renderRawType({ sourcePluginType })
125125
const idJsdoc = renderIdJsdoc({ sourcePluginType })

packages/@contentlayer/core/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export * from './generation/generate-types.js'
33
export * from './DataCache.js'
44
export * from './data-types.js'
55
export * from './cwd.js'
6+
export * from './extensions.js'
67
export * from './gen.js'
78
export * from './errors.js'
89
export * from './getConfig/index.js'

packages/@contentlayer/core/src/plugin.ts

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,11 @@ import type * as unified from 'unified'
77
import type { HasCwd } from './cwd.js'
88
import type { DataCache } from './DataCache.js'
99
import type { SourceFetchDataError, SourceProvideSchemaError } from './errors.js'
10-
import type { SchemaDef, StackbitExtension } from './schema/index.js'
10+
import type { ExtensionsRoot } from './extensions.js'
11+
import type { SchemaDef } from './schema/index.js'
1112

1213
export type SourcePluginType = LiteralUnion<'local' | 'contentful' | 'sanity', string>
1314

14-
export type PluginExtensions = {
15-
// TODO decentralized extension definitions + logic
16-
stackbit?: StackbitExtension.Config
17-
}
18-
1915
export type PluginOptions = {
2016
markdown: MarkdownOptions | MarkdownUnifiedBuilderCallback | undefined
2117
mdx: MDXOptions | undefined
@@ -99,12 +95,13 @@ export type SourcePlugin = {
9995
fetchData: FetchData
10096
} & {
10197
options: PluginOptions
102-
extensions: PluginExtensions
98+
extensions: Partial<ExtensionsRoot>
10399
}
104100

105-
export type ProvideSchema = (
106-
esbuildHash: string,
107-
) => T.Effect<OT.HasTracer & HasConsole, SourceProvideSchemaError, SchemaDef>
101+
export type ProvideSchema = (_: {
102+
esbuildHash: string
103+
extensionProperties?: string[]
104+
}) => T.Effect<OT.HasTracer & HasConsole, SourceProvideSchemaError, SchemaDef>
108105
export type FetchData = (_: {
109106
schemaDef: SchemaDef
110107
verbose: boolean
@@ -127,7 +124,6 @@ export type PartialArgs = {
127124
mdx?: MarkdownOptions | undefined
128125
date?: DateOptions | undefined
129126
fieldOptions?: Partial<FieldOptions>
130-
extensions?: PluginExtensions
131127
disableImportAliasWarning?: boolean
132128
}
133129

@@ -139,11 +135,10 @@ export const defaultFieldOptions: FieldOptions = {
139135
export const processArgs = async <TArgs extends PartialArgs>(
140136
argsOrArgsThunk: TArgs | Thunk<TArgs> | Thunk<Promise<TArgs>>,
141137
): Promise<{
142-
extensions: PluginExtensions
143138
options: PluginOptions
144-
restArgs: Omit<TArgs, 'extensions' | 'fieldOptions' | 'markdown' | 'mdx' | 'date' | 'disableImportAliasWarning'>
139+
restArgs: Omit<TArgs, 'fieldOptions' | 'markdown' | 'mdx' | 'date' | 'disableImportAliasWarning'>
145140
}> => {
146-
const { extensions, fieldOptions, markdown, mdx, date, disableImportAliasWarning, ...restArgs } =
141+
const { fieldOptions, markdown, mdx, date, disableImportAliasWarning, ...restArgs } =
147142
typeof argsOrArgsThunk === 'function' ? await argsOrArgsThunk() : argsOrArgsThunk
148143

149144
const options: PluginOptions = {
@@ -157,5 +152,5 @@ export const processArgs = async <TArgs extends PartialArgs>(
157152
disableImportAliasWarning: disableImportAliasWarning ?? false,
158153
}
159154

160-
return { extensions: extensions ?? {}, options, restArgs }
155+
return { options, restArgs }
161156
}

packages/@contentlayer/core/src/schema/field.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { ExtensionsField } from '../extensions.js'
12
import type { NestedUnnamedTypeDef } from './index.js'
23

34
export type FieldDefType = FieldDef['type']
@@ -36,6 +37,7 @@ export interface FieldDefBase {
3637
isRequired: boolean
3738

3839
isSystemField: boolean
40+
extensions: Partial<ExtensionsField>
3941
}
4042

4143
export interface ListFieldDef extends FieldDefBase {

0 commit comments

Comments
 (0)