From 845e777f08bc6f6a20611851043b012f675fb3d9 Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Wed, 13 May 2026 16:02:45 +0200 Subject: [PATCH] convert script to ES module conventions --- scripts/extract-elx/extract-elx.js | 102 ++++++-------------------- scripts/extract-elx/package-lock.json | 3 + scripts/extract-elx/package.json | 7 ++ 3 files changed, 31 insertions(+), 81 deletions(-) diff --git a/scripts/extract-elx/extract-elx.js b/scripts/extract-elx/extract-elx.js index bf9ba96..577f975 100644 --- a/scripts/extract-elx/extract-elx.js +++ b/scripts/extract-elx/extract-elx.js @@ -18,73 +18,13 @@ * - _manifest.json with extraction metadata */ -const fs = require('fs').promises; -const path = require('path'); -const { execSync } = require('child_process'); -const { existsSync } = require('fs'); - -// Import xml-formatter (try multiple locations) -let xmlFormatter; -try { - // Try local node_modules first - xmlFormatter = require('xml-formatter'); -} catch (err) { - try { - // Try to find npm global prefix and load from there - const npmPrefix = execSync('npm config get prefix', { encoding: 'utf-8' }).trim(); - const globalXmlFormatter = path.join(npmPrefix, 'node_modules', 'xml-formatter'); - xmlFormatter = require(globalXmlFormatter); - } catch (err2) { - console.error( - '\nāŒ Missing dependency: xml-formatter\n' + - 'Please install globally with: npm install -g xml-formatter\n' + - 'Or locally in the current directory with: npm install xml-formatter\n' - ); - process.exit(1); - } -} - -// Import fast-xml-parser (try multiple locations) -let fastXmlParser; -try { - // Try local node_modules first - fastXmlParser = require('fast-xml-parser'); -} catch (err) { - try { - // Try to find npm global prefix and load from there - const npmPrefix = execSync('npm config get prefix', { encoding: 'utf-8' }).trim(); - const globalFastXmlParser = path.join(npmPrefix, 'node_modules', 'fast-xml-parser'); - fastXmlParser = require(globalFastXmlParser); - } catch (err2) { - console.error( - '\nāŒ Missing dependency: fast-xml-parser\n' + - 'Please install globally with: npm install -g fast-xml-parser\n' + - 'Or locally in the current directory with: npm install fast-xml-parser\n' - ); - process.exit(1); - } -} - -// Import crc-32 for file integrity checks (try multiple locations) -let crc32; -try { - // Try local node_modules first - crc32 = require('crc-32'); -} catch (err) { - try { - // Try to find npm global prefix and load from there - const npmPrefix = execSync('npm config get prefix', { encoding: 'utf-8' }).trim(); - const globalCrc32 = join(npmPrefix, 'node_modules', 'crc-32'); - crc32 = require(globalCrc32); - } catch (err2) { - console.error( - '\nāŒ Missing dependency: crc-32\n' + - 'Please install globally with: npm install -g crc-32\n' + - 'Or locally in the current directory with: npm install crc-32\n' - ); - process.exit(1); - } -} +import { promises as fs } from 'fs'; +import { join as _join, dirname, basename as _basename, extname } from 'path'; +import { execSync } from 'child_process'; +import { existsSync } from 'fs'; +import crc32 from 'crc-32'; +import xmlFormatter from 'xml-formatter'; +import { XMLParser } from 'fast-xml-parser'; // ============================================================================ // CONFIGURATION @@ -97,7 +37,7 @@ const CONFIG = { INDEX_FILE: 'index', ITEM_PREFIX: 'item', INTERNALS_SUFFIX: '_internals', - VERSION: '1.0.0' + VERSION: '0.0.1', }; // ============================================================================ @@ -165,7 +105,7 @@ const XML_PARSE_OPTIONS = { function parseXmlDocument(xmlString) { if (typeof xmlString !== 'string') return null; try { - return new fastXmlParser.XMLParser(XML_PARSE_OPTIONS).parse(xmlString); + return new XMLParser(XML_PARSE_OPTIONS).parse(xmlString); } catch (error) { return null; } @@ -403,7 +343,7 @@ async function createOutputDirectory(outputPath, allowOverwrite = false, cleanEx */ async function saveStringProperty(dirPath, filename, content, options = {}) { const ext = getFileExtension(content); - const filepath = path.join(dirPath, `${filename}.${ext}`); + const filepath = _join(dirPath, `${filename}.${ext}`); let output = content; @@ -420,7 +360,7 @@ async function saveStringProperty(dirPath, filename, content, options = {}) { * Save a JSON object to file */ async function saveJsonProperty(dirPath, filename, obj, options = {}) { - const filepath = path.join(dirPath, `${filename}.json`); + const filepath = _join(dirPath, `${filename}.json`); const output = prettifyJson(obj, CONFIG.JSON_INDENT); await fs.writeFile(filepath, output, 'utf-8'); @@ -431,7 +371,7 @@ async function saveJsonProperty(dirPath, filename, obj, options = {}) { * Create subdirectory for a property */ async function createPropertyDirectory(outputPath, propertyName) { - const dirPath = path.join(outputPath, propertyName); + const dirPath = _join(outputPath, propertyName); await fs.mkdir(dirPath, { recursive: true }); return dirPath; } @@ -440,7 +380,7 @@ async function createPropertyDirectory(outputPath, propertyName) { * Save backup of original file */ async function saveBackup(outputPath, data) { - const backupPath = path.join(outputPath, CONFIG.BACKUP_SUFFIX); + const backupPath = _join(outputPath, CONFIG.BACKUP_SUFFIX); const output = prettifyJson(data, CONFIG.JSON_INDENT); await fs.writeFile(backupPath, output, 'utf-8'); return backupPath; @@ -451,7 +391,7 @@ async function saveBackup(outputPath, data) { */ async function createCrc32Checksum(outputPath, inputPath) { const fileCrc32 = await calculateFileCrc32(inputPath); - const checksumPath = path.join(outputPath, `crc32.txt`); + const checksumPath = _join(outputPath, `crc32.txt`); await fs.writeFile(checksumPath, `${fileCrc32}\n`, 'utf-8'); return { checksumPath, fileCrc32 }; } @@ -555,7 +495,7 @@ async function processArrayProperty(outputPath, propertyName, arr) { } // Save index metadata - const indexPath = path.join(dirPath, `${CONFIG.INDEX_FILE}.json`); + const indexPath = _join(dirPath, `${CONFIG.INDEX_FILE}.json`); const indexOutput = prettifyJson(indexData, CONFIG.JSON_INDENT); await fs.writeFile(indexPath, indexOutput, 'utf-8'); result.files.unshift(indexPath); // Put index first in list @@ -575,7 +515,7 @@ async function processObjectProperty(outputPath, propertyName, obj) { }; const dirPath = await createPropertyDirectory(outputPath, propertyName); - const filepath = path.join(dirPath, `${CONFIG.INDEX_FILE}.json`); + const filepath = _join(dirPath, `${CONFIG.INDEX_FILE}.json`); const output = prettifyJson(obj, CONFIG.JSON_INDENT); await fs.writeFile(filepath, output, 'utf-8'); @@ -604,7 +544,7 @@ async function processProperty(outputPath, propertyName, value) { }; const dirPath = await createPropertyDirectory(outputPath, propertyName); - const filepath = path.join(dirPath, `${CONFIG.INDEX_FILE}.json`); + const filepath = _join(dirPath, `${CONFIG.INDEX_FILE}.json`); await fs.writeFile(filepath, prettifyJson(value, CONFIG.JSON_INDENT), 'utf-8'); result.files.push(filepath); @@ -640,7 +580,7 @@ async function createManifest(outputPath, data, processedProperties) { }; } - const manifestPath = path.join(outputPath, CONFIG.MANIFEST_FILE); + const manifestPath = _join(outputPath, CONFIG.MANIFEST_FILE); const output = prettifyJson(manifest, CONFIG.JSON_INDENT); await fs.writeFile(manifestPath, output, 'utf-8'); @@ -672,9 +612,9 @@ async function main() { } // Determine output directory - const dir = path.dirname(inputPath); - const basename = path.basename(inputPath, path.extname(inputPath)); - const outputPath = path.join(dir, `${basename}${CONFIG.INTERNALS_SUFFIX}`); + const dir = dirname(inputPath); + const basename = _basename(inputPath, extname(inputPath)); + const outputPath = _join(dir, `${basename}${CONFIG.INTERNALS_SUFFIX}`); console.log('\nšŸ“ ElixForms JSON Extractor\n'); console.log(`šŸ“– Reading: ${inputPath}`); diff --git a/scripts/extract-elx/package-lock.json b/scripts/extract-elx/package-lock.json index 45c9187..f070112 100644 --- a/scripts/extract-elx/package-lock.json +++ b/scripts/extract-elx/package-lock.json @@ -1,9 +1,12 @@ { "name": "extract-elx", + "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "extract-elx", + "version": "0.0.1", "dependencies": { "crc-32": "^1.2.2", "fast-xml-parser": "^5.8.0", diff --git a/scripts/extract-elx/package.json b/scripts/extract-elx/package.json index 8faa62d..b6c29a0 100644 --- a/scripts/extract-elx/package.json +++ b/scripts/extract-elx/package.json @@ -1,4 +1,11 @@ { + "name": "extract-elx", + "version": "0.0.1", + "description": "Extract root properties from ElixForms .elx JSON files", + "scripts": { + "start": "node extract-elx.js" + }, + "type": "module", "dependencies": { "crc-32": "^1.2.2", "fast-xml-parser": "^5.8.0",