skeet
Version:
Full-stack TypeScript Serverless Framework
63 lines (53 loc) • 1.93 kB
text/typescript
import { importConfig } from '@/index'
import { API_TYPE_PATH, WORKER_PATH } from '@/lib/getNetworkConfig'
import { Logger } from '@/lib/logger'
import fs from 'fs'
export const syncType = async () => {
const workers = await getWorkers()
for await (const workerName of workers) {
const workerTypeFilePaths = await getWorkerTypeFilePaths(workerName)
for await (const workerTypeFilePath of workerTypeFilePaths) {
await copyWorkerTypesToApi(workerTypeFilePath)
}
}
}
export const getWorkers = async () => {
const workerDirs = fs
.readdirSync(WORKER_PATH + '/', { withFileTypes: true })
.filter((item) => item.isDirectory())
.map((item) => item.name)
return workerDirs
}
export const getWorkersFromConfig = async () => {
const skeetCloudConfig = await importConfig()
if (skeetCloudConfig.workers) {
const workers = skeetCloudConfig.workers?.map((item) => item.workerName)
return workers
} else {
return []
}
}
export const getWorkerTypeFilePaths = async (workerName: string) => {
const typeDir = `${WORKER_PATH}/${workerName}/src/types/api`
const workerTypeFilePaths = fs
.readdirSync(typeDir, {
withFileTypes: true,
})
.filter((item) => !item.isDirectory())
.map((item) => `${typeDir}/${item.name}`)
return workerTypeFilePaths
}
export const copyWorkerTypesToApi = async (workerTypeFilePath: string) => {
const workerName = workerTypeFilePath.split('/')[3]
const workerTypeFileName = workerTypeFilePath.split('/')[7]
const workerTypeDir = `${API_TYPE_PATH}/workers/${workerName}`
if (!fs.existsSync(workerTypeDir))
fs.mkdirSync(workerTypeDir, { recursive: true })
const apiTypeFilePath = `${workerTypeDir}/${workerTypeFileName}`
fs.copyFile(workerTypeFilePath, apiTypeFilePath, (err) => {
if (err) throw err
Logger.success(
`Successfully copied ${workerName} Types to API: ${workerTypeFileName}`
)
})
}