platformatic
Version:
Platformatic CLI
64 lines (52 loc) • 1.53 kB
JavaScript
import { Store, getStringifier } from '@platformatic/config'
import parseArgs from 'minimist'
import { writeFile } from 'fs/promises'
import { platformaticRuntime } from '@platformatic/runtime'
import pino from 'pino'
import pretty from 'pino-pretty'
import fjs from 'fast-json-stringify'
export async function upgrade (argv) {
const args = parseArgs(argv, {
alias: {
config: 'c',
},
})
const logger = pino(pretty({
translateTime: 'SYS:HH:MM:ss',
ignore: 'hostname,pid',
}))
try {
await upgradeApp(args.config, logger)
} catch (err) {
console.log(err)
process.exit(1)
}
}
async function upgradeApp (config, logger) {
const store = new Store({
cwd: process.cwd(),
logger,
})
store.add(platformaticRuntime)
const { configManager } = await store.loadConfig({
config,
overrides: {
fixPaths: false,
onMissingEnv (key) {
return '{' + key + '}'
},
},
})
configManager.schemaOptions.useDefaults = false
await configManager.parse(false, [], { validation: false, transform: false })
config = configManager.current
// If the schema is present, we use it to format the config
if (configManager.schema) {
const stringify = fjs(configManager.schema)
config = JSON.parse(stringify(config))
}
const stringify = getStringifier(configManager.fullPath)
const newConfig = stringify(config)
await writeFile(configManager.fullPath, newConfig, 'utf8')
logger.info(`✅ Updated ${configManager.fullPath}`)
}