fixes on nodejs script
- add missing headers generation - sort variables (for testing, may be disabled) - skip environments when no file is actually present
This commit is contained in:
@@ -6,7 +6,7 @@ import stripJsonComments from 'strip-json-comments';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const interpolationVariableRegex = /^{{(.*?)}}$/
|
||||
const DEFAULT_ENV_VAR_VALUE = 'EDIT_VALUE_HERE'
|
||||
const DEFAULT_VAR_VALUE = 'EDIT_VALUE_HERE'
|
||||
const VARIABLE_NAME_VALUE_SEPARATOR = '='
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
@@ -221,6 +221,22 @@ export function mergeRequestConfig(base, updates) {
|
||||
delete merged.auth;
|
||||
}
|
||||
|
||||
if (Object.prototype.hasOwnProperty.call(updates, 'headers')) {
|
||||
const headers = [...(Array.isArray(base.headers) ? base.headers : [])];
|
||||
const byName = new Map();
|
||||
for (const header of headers) {
|
||||
if (header && header.name) {
|
||||
byName.set(String(header.name), header);
|
||||
}
|
||||
}
|
||||
for (const header of updates.headers) {
|
||||
if (header && header.name) {
|
||||
byName.set(String(header.name), header);
|
||||
}
|
||||
}
|
||||
merged.headers = [...byName.values()];
|
||||
}
|
||||
|
||||
if (Array.isArray(updates.variables)) {
|
||||
const variables = [...(Array.isArray(base.variables) ? base.variables : [])];
|
||||
const byName = new Map();
|
||||
@@ -352,7 +368,7 @@ export function buildRequestContent(request, requestName, requestConfig = {}, do
|
||||
commentedVariableDefinitions.push({ name: normalized, value });
|
||||
};
|
||||
|
||||
const addReferencedVariables = (value, fallbackValue = 'YOUR_VALUE_HERE') => {
|
||||
const addReferencedVariables = (value, fallbackValue = DEFAULT_VAR_VALUE) => {
|
||||
for (const placeholder of collectPlaceholders(String(value))) {
|
||||
addVariable(placeholder, fallbackValue);
|
||||
}
|
||||
@@ -479,14 +495,20 @@ export function buildRequestContent(request, requestName, requestConfig = {}, do
|
||||
|
||||
if (commentedVariableDefinitions.length > 0) {
|
||||
lines.push(`# Other variables for ${requestName}`);
|
||||
for (const variable of commentedVariableDefinitions) {
|
||||
for (const variable of commentedVariableDefinitions.sort((a, b) => {
|
||||
const nameComparison = a.name.localeCompare(b.name);
|
||||
return nameComparison !== 0 ? nameComparison : a.value.localeCompare(b.value);
|
||||
})) {
|
||||
lines.push(`# @${sanitizeVarName(variable.name)}${VARIABLE_NAME_VALUE_SEPARATOR}${formatVariableValue(variable.value, { renderValue })}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (parameterVariableDefinitions.length > 0) {
|
||||
lines.push(`# Parameter variables for ${requestName}`);
|
||||
for (const variable of parameterVariableDefinitions) {
|
||||
for (const variable of parameterVariableDefinitions.sort((a, b) => {
|
||||
const nameComparison = a.name.localeCompare(b.name);
|
||||
return nameComparison !== 0 ? nameComparison : a.value.localeCompare(b.value);
|
||||
})) {
|
||||
lines.push(`@${sanitizeVarName(variable.name)}${VARIABLE_NAME_VALUE_SEPARATOR}${formatVariableValue(variable.value, { renderValue })}`);
|
||||
}
|
||||
}
|
||||
@@ -523,7 +545,10 @@ export function buildRequestContent(request, requestName, requestConfig = {}, do
|
||||
|
||||
if (variableDefinitions.length > 0) {
|
||||
lines.push(`# Variables for ${requestName}`);
|
||||
for (const variable of variableDefinitions) {
|
||||
for (const variable of variableDefinitions.sort((a, b) => {
|
||||
const nameComparison = a.name.localeCompare(b.name);
|
||||
return nameComparison !== 0 ? nameComparison : a.value.localeCompare(b.value);
|
||||
})) {
|
||||
lines.push(`@${sanitizeVarName(variable.name)}${VARIABLE_NAME_VALUE_SEPARATOR}${formatVariableValue(variable.value, { renderValue })}`);
|
||||
}
|
||||
}
|
||||
@@ -598,7 +623,8 @@ function writeEnvironmentTemplates(sourceDir, outputRoot) {
|
||||
|
||||
const visit = (currentDir) => {
|
||||
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
||||
const hasEnvironmentsDir = entries.some((entry) => entry.isDirectory() && entry.name === 'environments');
|
||||
const hasEnvironmentsDir = entries.some((entry) => entry.isDirectory() && entry.name === 'environments' &&
|
||||
fs.readdirSync(path.join(currentDir, 'environments'), { withFileTypes: true }).some((envEntry) => envEntry.isFile() && /\.ya?ml$/i.test(envEntry.name)));
|
||||
|
||||
if (hasEnvironmentsDir) {
|
||||
targets.push(currentDir);
|
||||
@@ -647,7 +673,7 @@ function writeEnvironmentTemplates(sourceDir, outputRoot) {
|
||||
}
|
||||
}
|
||||
|
||||
const templateContent = variableNames.length > 0 ? `${variableNames.map(v => `${v}=${DEFAULT_ENV_VAR_VALUE}`).join('\n')}\n` : '';
|
||||
const templateContent = variableNames.length > 0 ? `${variableNames.map(v => `${v}=${DEFAULT_VAR_VALUE}`).join('\n')}\n` : '';
|
||||
fs.writeFileSync(path.join(targetDir, '.env.template'), templateContent, 'utf8');
|
||||
dotenvVariablesByTarget.set(targetDir, new Set(variableNames));
|
||||
}
|
||||
@@ -761,7 +787,7 @@ function main() {
|
||||
throw new Error('No collections found in workspace.yml');
|
||||
}
|
||||
|
||||
const outputBaseRoot = path.join(workspaceRoot, 'autogen', 'httpyac');
|
||||
const outputBaseRoot = path.join(workspaceRoot, 'autogen', 'httpyac_node');
|
||||
cleanFolder(outputBaseRoot);
|
||||
|
||||
for (const collection of collections) {
|
||||
|
||||
Reference in New Issue
Block a user