scripts/utils/createConstantsFile.js
const fs = require('fs')
const getDescriptionCommentForOption = (option) =>
option.description.trim()
? `
/**
* ${option.description.trim()}
*
* Official libcurl documentation: : [${option.url}](${option.url})
*/
`
: `
/**
* Official libcurl documentation: : [${option.url}](${option.url})
*/
`
const createConstantsFile = async ({
constants,
variableName,
filePath,
shouldGenerateCamelCaseMap = false,
extraHeaderText = '',
}) => {
const constantsObj = [
`
/**
* @public
*/
export interface ${variableName} {`,
...constants.map(
(option) =>
`
${getDescriptionCommentForOption(option)}readonly ${
option.constantName
}: "${option.constantName}",
`,
),
`}`,
].join('\n')
const constantsCamelCaseMapObj = shouldGenerateCamelCaseMap
? [
`export const ${variableName}CamelCaseMap = {`,
...constants.map(
(option) =>
`${getDescriptionCommentForOption(option)}${
option.constantNameCamelCase
}: "${option.constantName}",`,
),
`} as const`,
].join('\n')
: ''
const optionNameUnionType = `
/**
* @public
*/
export type ${variableName}Name = ${constants
.map((option) => require('util').inspect(option.constantName))
.join(' | ')}`
fs.writeFileSync(
filePath,
`/**
* Copyright (c) Jonathan Cardoso Machado. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// This file was generated by scripts/build-constants.js on ${new Date().toISOString()}
// Do not edit manually
${extraHeaderText}
${constantsObj}
${constantsCamelCaseMapObj}
${optionNameUnionType}
`,
)
}
module.exports = {
createConstantsFile,
getDescriptionCommentForOption,
}