step-sequence-generator
Version:
A step sequence generator for figure skating programs
81 lines (80 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UploaderMovements = void 0;
const UploaderAbstract_js_1 = require("./UploaderAbstract.js");
const movement_enums_js_1 = require("../../shared/enums/movement-enums.js");
const turn_absolute_name_enum_1 = require("../../shared/enums/turn-absolute-name.enum");
const enumMap = {
transitionDirection: {
obj: movement_enums_js_1.TransitionDirection,
name: 'TransitionDirection',
},
rotationDirection: {
obj: movement_enums_js_1.RotationDirection,
name: 'RotationDirection',
},
rotationDegree: {
obj: movement_enums_js_1.RotationDegree,
name: 'RotationDegree',
},
startLeg: {
obj: movement_enums_js_1.Leg,
name: 'Leg',
},
endLeg: {
obj: movement_enums_js_1.Leg,
name: 'Leg',
},
startEdge: {
obj: movement_enums_js_1.Edge,
name: 'Edge',
},
endEdge: {
obj: movement_enums_js_1.Edge,
name: 'Edge',
},
type: {
obj: movement_enums_js_1.MovementCharacter,
name: 'MovementCharacter',
},
absoluteName: {
obj: turn_absolute_name_enum_1.TurnAbsoluteName,
name: 'TurnAbsoluteName',
},
};
class UploaderMovements extends UploaderAbstract_js_1.UploaderAbstract {
upload(data, filePath) {
const formatedData = this.formatData(data);
const importPath = this.getImportPath(filePath);
const content = this.addImports(importPath, formatedData);
this.uploadToFile(filePath, content);
}
formatData(data) {
const dataString = this.formatToJSON(data);
return this.formatEnum(dataString, enumMap);
}
formatEnum(data, enumMap) {
let formatedData = data;
for (const [enumKey, enumInfo] of Object.entries(enumMap)) {
const pattern = new RegExp(`("${enumKey}").+?(\\d+)`, 'g');
formatedData = formatedData.replace(pattern, (_, name, value) => {
const enumName = enumInfo.name;
const enumValue = enumInfo.obj[Number(value)];
return `${enumKey}: ${enumName}.${enumValue}`;
});
}
return formatedData;
}
getImportPath(filePath) {
const pattern = /\/(public\/.*)/;
const replaceString = '/src';
return filePath.replace(pattern, replaceString);
}
addImports(importPath, formatedData) {
const imports = `import { Movement } from '${importPath}/movement/Movement.js';\n` +
`import { Leg, Edge, RotationDirection, RotationDegree, TransitionDirection, MovementCharacter } from '${importPath}/enums/movement-enums.js';\n\n` +
`export const movements: Movement[] = `;
return `${imports} ${formatedData};\n`;
}
}
exports.UploaderMovements = UploaderMovements;