zp-figma-converter
Version:
Convert Figma designs to various code formats
107 lines • 3.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertFile = convertFile;
const parser_factory_1 = require("./parsers/parser-factory");
const xml_utils_1 = require("../../utils/xml-utils");
const file_utils_1 = require("../../utils/file-utils");
const path_1 = __importDefault(require("path"));
/**
* Convert node data from JSON to CSD format
* @param nodeData JSON node data
* @returns Node data for CSD
*/
function parseNode(nodeData) {
const parser = parser_factory_1.ParserFactory.createParser(nodeData.ctype);
return parser.parse(nodeData);
}
/**
* Process converting child nodes
* @param children List of child nodes
* @returns List of converted child nodes
*/
function parseChildren(children) {
return children.map(child => {
// Parse basic node data
const parsedChild = parseNode(child);
// Process nested children recursively if they exist
if (child.Children && child.Children.length > 0) {
parsedChild.Children = {
AbstractNodeData: parseChildren(child.Children)
};
}
return parsedChild;
});
}
/**
* Convert ObjectData from JSON to CSD format
* @param objectData JSON object data
* @returns Object data for CSD
*/
function parseObjectData(objectData) {
// Convert node using appropriate parser
const parsedData = parseNode(objectData);
// Process Children if exists
if (objectData.Children && objectData.Children.length > 0) {
parsedData.Children = {
AbstractNodeData: parseChildren(objectData.Children)
};
}
return parsedData;
}
/**
* Convert JSON data to CSD data
* @param jsonData JSON data
* @returns CSD data
*/
function convertJsonToCsdData(jsonData) {
// Create CSD structure
return {
GameFile: {
PropertyGroup: {
'@_Name': jsonData.Name,
'@_Type': jsonData.Type,
'@_ID': jsonData.ID,
'@_Version': '3.10.0.0' // Phiên bản mặc định
},
Content: {
'@_ctype': 'GameProjectContent',
Content: {
Animation: {
'@_Duration': (0, xml_utils_1.toString)(jsonData.Content.Content.Animation.Duration),
'@_Speed': (0, xml_utils_1.toString)(jsonData.Content.Content.Animation.Speed)
},
ObjectData: parseObjectData(jsonData.Content.Content.ObjectData)
}
}
}
};
}
/**
* Convert JSON file to CSD
* @param jsonFilePath JSON file path
* @param outputFilePath Output CSD file path
*/
function convertFile(jsonFilePath, outputFilePath) {
try {
// Read JSON file
const jsonData = (0, file_utils_1.readJsonFile)(jsonFilePath);
// Check file type (Scene, Layer, Node)
const fileType = (0, file_utils_1.getFileType)(jsonFilePath);
console.log(`File type: ${fileType}`);
// Convert JSON data to CSD
const csdData = convertJsonToCsdData(jsonData);
// Convert to XML
const xml = (0, xml_utils_1.buildXml)(csdData);
(0, file_utils_1.createFolderIfNotExists)(path_1.default.dirname(outputFilePath));
// Write CSD file
(0, file_utils_1.writeFile)(outputFilePath, xml);
console.log(`Successfully converted: ${outputFilePath}`);
}
catch (error) {
console.error('Error converting JSON to CSD:', error);
}
}
//# sourceMappingURL=json2csd.js.map