-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathloadEnvironment.ts
78 lines (60 loc) · 2.05 KB
/
loadEnvironment.ts
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import * as path from "path"
import * as fs from "fs"
import { ContentfulCollection, ContentTypeCollection, LocaleCollection } from "contentful"
// todo: switch to contentful-management interfaces here
export interface ContentfulEnvironment {
getContentTypes(options: { limit: number }): Promise<ContentfulCollection<unknown>>
getLocales(): Promise<ContentfulCollection<unknown>>
}
export type EnvironmentGetter = () => Promise<ContentfulEnvironment>
export async function loadEnvironment() {
try {
const getEnvironment = getEnvironmentGetter()
const environment = await getEnvironment()
return {
contentTypes: (await environment.getContentTypes({ limit: 1000 })) as ContentTypeCollection,
locales: (await environment.getLocales()) as LocaleCollection,
}
} finally {
if (registerer) {
registerer.enabled(false)
}
}
}
/* istanbul ignore next */
const interopRequireDefault = (obj: any): { default: any } =>
obj && obj.__esModule ? obj : { default: obj }
type Registerer = { enabled(value: boolean): void }
let registerer: Registerer | null = null
function enableTSNodeRegisterer() {
if (registerer) {
registerer.enabled(true)
return
}
try {
registerer = require("ts-node").register() as Registerer
registerer.enabled(true)
} catch (e) {
if (e.code === "MODULE_NOT_FOUND") {
throw new Error(
`'ts-node' is required for TypeScript configuration files. Make sure it is installed\nError: ${e.message}`,
)
}
throw e
}
}
function determineEnvironmentPath() {
const pathWithoutExtension = path.resolve(process.cwd(), "./getContentfulEnvironment")
if (fs.existsSync(`${pathWithoutExtension}.ts`)) {
return `${pathWithoutExtension}.ts`
}
return `${pathWithoutExtension}.js`
}
function getEnvironmentGetter(): EnvironmentGetter {
const getEnvironmentPath = determineEnvironmentPath()
if (getEnvironmentPath.endsWith(".ts")) {
enableTSNodeRegisterer()
return interopRequireDefault(require(getEnvironmentPath)).default
}
return require(getEnvironmentPath)
}