@yuxilabs/gptp-core
Version:
Core validation, formatting and execution logic for the GPTP file format.
44 lines (43 loc) • 1.57 kB
JavaScript
import { cloneDeep } from 'lodash-es';
// Future-proof wrapper
export function migratePrompt(original) {
const currentVersion = original?.schemaVersion ?? 'unknown';
if (currentVersion === '1.2.0') {
return original; // No migration needed
}
return migrateTo120(original);
}
// Migrate from anything → 1.2.0 (because we only support one schema like cowards)
export function migrateTo120(original) {
const migrated = cloneDeep(original);
// === Required fields ===
migrated.$doctype = 'gptp';
migrated.schemaVersion = '1.2.0';
// === Rename legacy fields ===
if (migrated.version && !migrated.promptVersion) {
migrated.promptVersion = migrated.version;
delete migrated.version;
}
if (migrated.output_contract && !migrated.output_schema) {
migrated.output_schema = migrated.output_contract;
delete migrated.output_contract;
}
if (migrated.parameters && !migrated.params) {
migrated.params = migrated.parameters;
delete migrated.parameters;
}
// === Fix variables shape (legacy array → object) ===
if (Array.isArray(migrated.variables)) {
const obj = {};
for (const item of migrated.variables) {
if (item?.name) {
obj[item.name] = item;
}
}
migrated.variables = obj;
}
// === Default values (just in case someone gets lazy) ===
migrated.promptVersion = migrated.promptVersion || '1.0.0';
migrated.metadata = migrated.metadata || {};
return migrated;
}