Skip to content

Commit 13c8e2b

Browse files
committed
fix(renderFieldsOnly): support --namespace flag.
1 parent c579c04 commit 13c8e2b

File tree

5 files changed

+37
-33
lines changed

5 files changed

+37
-33
lines changed

src/contentful-typescript-codegen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ async function runCodegen(outputFile: string) {
6363

6464
let output
6565
if (cli.flags.fieldsOnly) {
66-
output = await renderFieldsOnly(contentTypes.items)
66+
output = await renderFieldsOnly(contentTypes.items, cli.flags.namespace)
6767
} else {
6868
output = await render(contentTypes.items, locales.items, cli.flags.namespace)
6969
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export default function renderNamespace(source: string, namespace: string | null) {
2+
if (!namespace) return source
3+
4+
return `
5+
declare namespace ${namespace} {
6+
${source}
7+
}
8+
9+
export as namespace ${namespace}
10+
export=${namespace}
11+
`
12+
}

src/renderers/render.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import renderContentType from "./contentful/renderContentType"
77
import renderUnion from "./typescript/renderUnion"
88
import renderAllLocales from "./contentful/renderAllLocales"
99
import renderDefaultLocale from "./contentful/renderDefaultLocale"
10+
import renderNamespace from "./contentful/renderNamespace"
1011

1112
export default async function render(
1213
contentTypes: ContentType[],
@@ -16,14 +17,14 @@ export default async function render(
1617
const sortedContentTypes = contentTypes.sort((a, b) => a.sys.id.localeCompare(b.sys.id))
1718
const sortedLocales = locales.sort((a, b) => a.code.localeCompare(b.code))
1819

19-
const typings = [
20+
const typingsSource = [
2021
renderAllContentTypes(sortedContentTypes),
2122
renderAllContentTypeIds(sortedContentTypes),
2223
renderAllLocales(sortedLocales),
2324
renderDefaultLocale(sortedLocales),
2425
].join("\n\n")
2526

26-
const source = [renderContentfulImports(), wrapInNamespace(typings, namespace)].join("\n\n")
27+
const source = [renderContentfulImports(), renderNamespace(typingsSource, namespace)].join("\n\n")
2728

2829
const prettierConfig = await resolveConfig(process.cwd())
2930
return format(source, { ...prettierConfig, parser: "typescript" })
@@ -37,15 +38,3 @@ function renderAllContentTypeIds(contentTypes: ContentType[]): string {
3738
return renderUnion("CONTENT_TYPE", contentTypes.map(contentType => `'${contentType.sys.id}'`))
3839
}
3940

40-
function wrapInNamespace(source: string, namespace: string | null) {
41-
if (!namespace) return source
42-
43-
return `
44-
declare namespace ${namespace} {
45-
${source}
46-
}
47-
48-
export as namespace ${namespace}
49-
export=${namespace}
50-
`
51-
}

src/renderers/renderFieldsOnly.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ import { ContentType } from "contentful"
33
import { format, resolveConfig } from "prettier"
44

55
import renderContentType from "./contentful-fields-only/renderContentType"
6+
import renderNamespace from "./contentful/renderNamespace"
67

7-
export default async function renderFieldsOnly(contentTypes: ContentType[]) {
8+
export default async function renderFieldsOnly(contentTypes: ContentType[],
9+
namespace: string | null,) {
810
const sortedContentTypes = contentTypes.sort((a, b) => a.sys.id.localeCompare(b.sys.id))
911

10-
const source = renderAllContentTypes(sortedContentTypes)
12+
const typingsSource = renderAllContentTypes(sortedContentTypes)
13+
const source = [renderNamespace(typingsSource, namespace)].join("\n\n")
1114

1215
const prettierConfig = await resolveConfig(process.cwd())
1316

test/renderers/renderFieldsOnly.test.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ describe("renderFieldsOnly()", () => {
3535
},
3636
]
3737

38-
expect(await renderFieldsOnly(contentTypes)).toMatchInlineSnapshot(`
38+
expect(await renderFieldsOnly(contentTypes, null)).toMatchInlineSnapshot(`
3939
"export interface IMyContentType {
4040
fields: {
4141
/** Array field */
@@ -46,20 +46,20 @@ describe("renderFieldsOnly()", () => {
4646
"
4747
`)
4848

49-
// expect(await renderFieldsOnly(contentTypes, "Codegen")).toMatchInlineSnapshot(`
50-
// "declare namespace Codegen {
51-
// export interface IMyContentType {
52-
// fields: {
53-
// /** Array field */
54-
// arrayField: (\\"one\\" | \\"of\\" | \\"the\\" | \\"above\\")[];
55-
// };
56-
// [otherKeys: string]: any;
57-
// }
58-
// }
59-
//
60-
// export as namespace Codegen
61-
// export = Codegen
62-
// "
63-
// `)
49+
expect(await renderFieldsOnly(contentTypes, "Codegen")).toMatchInlineSnapshot(`
50+
"declare namespace Codegen {
51+
export interface IMyContentType {
52+
fields: {
53+
/** Array field */
54+
arrayField: (\\"one\\" | \\"of\\" | \\"the\\" | \\"above\\")[]
55+
}
56+
[otherKeys: string]: any
57+
}
58+
}
59+
60+
export as namespace Codegen
61+
export = Codegen
62+
"
63+
`)
6464
})
6565
})

0 commit comments

Comments
 (0)