Browse Source
Added fileOrder.json that basically offers a ordered way, how the files should be appended together into one file.master
3 changed files with 327 additions and 52 deletions
@ -0,0 +1,170 @@ |
|||||
|
{ |
||||
|
"orderedGroups": { |
||||
|
"pure_stylings": [ |
||||
|
"color.js", |
||||
|
"alignment.js", |
||||
|
"arrangement.js" |
||||
|
], |
||||
|
"size_sidings": [ |
||||
|
"siding.js", |
||||
|
"shapes.js", |
||||
|
"border.js", |
||||
|
"dimensions.js" |
||||
|
], |
||||
|
"behaviour_modifications": [ |
||||
|
"commonEvents.js", |
||||
|
"contextMenu.js", |
||||
|
"dragAndDrop.js" |
||||
|
], |
||||
|
"pre_context": [ |
||||
|
"webTrinity.js", |
||||
|
"extStore.js", |
||||
|
"generalHelpers.js" |
||||
|
], |
||||
|
"modifier": [ |
||||
|
"modifier.js" |
||||
|
], |
||||
|
"component": [ |
||||
|
"wrapperComponent.js", |
||||
|
"modifiableComponent.js", |
||||
|
"addStyleAndFunctions.js", |
||||
|
"component.js" |
||||
|
], |
||||
|
"builder": [ |
||||
|
"baseComponents.js", |
||||
|
"builder.js" |
||||
|
], |
||||
|
"extensions": [ |
||||
|
"extension.js" |
||||
|
], |
||||
|
"app_context": [ |
||||
|
"scriptAndStyleContext.js", |
||||
|
"framework-controls.js", |
||||
|
"context.js" |
||||
|
] |
||||
|
}, |
||||
|
"keys": [ |
||||
|
"color.js", |
||||
|
"alignment.js", |
||||
|
"arrangement.js", |
||||
|
"siding.js", |
||||
|
"shapes.js", |
||||
|
"border.js", |
||||
|
"dimensions.js", |
||||
|
"commonEvents.js", |
||||
|
"contextMenu.js", |
||||
|
"dragAndDrop.js", |
||||
|
"webTrinity.js", |
||||
|
"extStore.js", |
||||
|
"generalHelpers.js", |
||||
|
"modifier.js", |
||||
|
"wrapperComponent.js", |
||||
|
"modifiableComponent.js", |
||||
|
"addStyleAndFunctions.js", |
||||
|
"component.js", |
||||
|
"baseComponents.js", |
||||
|
"builder.js", |
||||
|
"extension.js", |
||||
|
"scriptAndStyleContext.js", |
||||
|
"framework-controls.js", |
||||
|
"context.js" |
||||
|
], |
||||
|
"objects": { |
||||
|
"color.js": { |
||||
|
"name": "color.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"alignment.js": { |
||||
|
"name": "alignment.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"arrangement.js": { |
||||
|
"name": "arrangement.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"siding.js": { |
||||
|
"name": "siding.js", |
||||
|
"folder": "src/sizeSide" |
||||
|
}, |
||||
|
"shapes.js": { |
||||
|
"name": "shapes.js", |
||||
|
"folder": "src/sizeSide" |
||||
|
}, |
||||
|
"border.js": { |
||||
|
"name": "border.js", |
||||
|
"folder": "src/sizeSide" |
||||
|
}, |
||||
|
"dimensions.js": { |
||||
|
"name": "dimensions.js", |
||||
|
"folder": "src/sizeSide" |
||||
|
}, |
||||
|
"commonEvents.js": { |
||||
|
"name": "commonEvents.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"contextMenu.js": { |
||||
|
"name": "contextMenu.js", |
||||
|
"folder": "src/modifications" |
||||
|
}, |
||||
|
"dragAndDrop.js": { |
||||
|
"name": "dragAndDrop.js", |
||||
|
"folder": "src/modifications" |
||||
|
}, |
||||
|
"webTrinity.js": { |
||||
|
"name": "webTrinity.js", |
||||
|
"folder": "src/context" |
||||
|
}, |
||||
|
"extStore.js": { |
||||
|
"name": "extStore.js", |
||||
|
"folder": "src/context" |
||||
|
}, |
||||
|
"generalHelpers.js": { |
||||
|
"name": "generalHelpers.js", |
||||
|
"folder": "src/context" |
||||
|
}, |
||||
|
"modifier.js": { |
||||
|
"name": "modifier.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"wrapperComponent.js": { |
||||
|
"name": "wrapperComponent.js", |
||||
|
"folder": "src/componentAncestry" |
||||
|
}, |
||||
|
"modifiableComponent.js": { |
||||
|
"name": "modifiableComponent.js", |
||||
|
"folder": "src/componentAncestry" |
||||
|
}, |
||||
|
"addStyleAndFunctions.js": { |
||||
|
"name": "addStyleAndFunctions.js", |
||||
|
"folder": "src/componentAncestry" |
||||
|
}, |
||||
|
"component.js": { |
||||
|
"name": "component.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"baseComponents.js": { |
||||
|
"name": "baseComponents.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"builder.js": { |
||||
|
"name": "builder.js", |
||||
|
"folder": "src" |
||||
|
}, |
||||
|
"extension.js": { |
||||
|
"name": "extension.js", |
||||
|
"folder": "src/extensions" |
||||
|
}, |
||||
|
"scriptAndStyleContext.js": { |
||||
|
"name": "scriptAndStyleContext.js", |
||||
|
"folder": "src/context" |
||||
|
}, |
||||
|
"framework-controls.js": { |
||||
|
"name": "framework-controls.js", |
||||
|
"folder": "src/context" |
||||
|
}, |
||||
|
"context.js": { |
||||
|
"name": "context.js", |
||||
|
"folder": "src" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,156 @@ |
|||||
|
const fs = require('fs/promises'); |
||||
|
const path = require('path'); |
||||
|
|
||||
|
/** |
||||
|
* purely convienience |
||||
|
*/ |
||||
|
class FileDependecy { |
||||
|
name; |
||||
|
folder; |
||||
|
path() { |
||||
|
return this.folder + '/' + this.name; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Ordered Access Object |
||||
|
* purely convienience |
||||
|
*/ |
||||
|
class OAO { |
||||
|
constructor() { |
||||
|
/** |
||||
|
* @type {boolean|Map<string,FileDependecy>} |
||||
|
*/ |
||||
|
this.orderedGroups |
||||
|
/** |
||||
|
* @type {Array<string>} |
||||
|
*/ |
||||
|
this.keys = []; |
||||
|
/** |
||||
|
* @type {map<string, FileDependecy>} |
||||
|
*/ |
||||
|
this.objects = {}; |
||||
|
/** |
||||
|
* @type {boolean} |
||||
|
*/ |
||||
|
this.isOrdered = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
let fileOrder = Object.assign(new OAO(), require('./fileOrder.json')); |
||||
|
|
||||
|
fileOrder.objects = fileOrder.keys |
||||
|
.reduce((a, fileName) => Object.assign( |
||||
|
a, |
||||
|
{ [fileName]: Object.assign(new FileDependecy(), fileOrder.objects[fileName]) } |
||||
|
), {}); |
||||
|
|
||||
|
/** |
||||
|
* Kept for future reference, might be that we will return to the dependency resolvement approach. |
||||
|
* @param {OAO} oao |
||||
|
* @returns {OAO} |
||||
|
*/ |
||||
|
function resolveDependencyOrder(oao) { |
||||
|
let roots = oao.keys.filter(k => oao.objects[k].dependencies.length === 0); |
||||
|
|
||||
|
let folderList = [...new Set(oao.keys.map(k => oao.objects[k].folder))]; |
||||
|
|
||||
|
console.log("Folders", folderList); |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
* @param {OAO} oao |
||||
|
* @param {Array<Array<string>>} dealt |
||||
|
*/ |
||||
|
function recursiveResolvement(oao, dealtLvls, dealt) { |
||||
|
const arrsEqualSize = (arr1, arr2) => arr1.length === arr2.length; |
||||
|
const arrHasAll = (arr1, arr2) => arr2.every(k => arr1.includes(k)) |
||||
|
|
||||
|
if (oao.keys.length === dealt.length) { |
||||
|
return [...dealt, ...current]; |
||||
|
} else { |
||||
|
console.log(`Received ${dealt.length} dealt of ${oao.keys.length}`); |
||||
|
} |
||||
|
|
||||
|
let remaining = oao.keys |
||||
|
.filter(k => !dealt.includes(k)); |
||||
|
|
||||
|
if (remaining.length < 2) { |
||||
|
return [...dealt, ...remaining]; |
||||
|
} |
||||
|
|
||||
|
let current = remaining |
||||
|
.filter(k => oao.objects[k].dependencies.every(sk => dealt.includes(sk))); |
||||
|
|
||||
|
if (current.length === 0) { |
||||
|
console.log("Couldn't resolve", remaining); |
||||
|
return remaining; |
||||
|
} |
||||
|
|
||||
|
dealtLvls.push(current); |
||||
|
|
||||
|
if (arrsEqualSize(remaining, current)) { |
||||
|
return [...dealt, ...current]; |
||||
|
} |
||||
|
|
||||
|
return recursiveResolvement(oao, dealtLvls, [...dealt, ...current]); |
||||
|
} |
||||
|
|
||||
|
let recursiveResolved = recursiveResolvement(oao, [roots], roots); |
||||
|
|
||||
|
recursiveResolved |
||||
|
.forEach((k, i) => { |
||||
|
oao.objects[k].orderNr = i; |
||||
|
}); |
||||
|
|
||||
|
oao.isOrdered = recursiveResolved.slice(-1).length <= 2; |
||||
|
if (oao.isOrdered) { |
||||
|
oao.keys = recursiveResolved; |
||||
|
} |
||||
|
return oao; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function appendContent(srcFile, targetFile) { |
||||
|
return fs.readFile(srcFile, 'utf8') |
||||
|
.then(content => { |
||||
|
console.log(`Processing '${srcFile}'`); |
||||
|
console.log(` READ: successfully!`) |
||||
|
console.log(` Attepting to append`); |
||||
|
return fs.appendFile(targetFile, content); |
||||
|
}) |
||||
|
.then(() => { |
||||
|
console.log(` Append/Write: successfully!`); |
||||
|
}) |
||||
|
.catch(error => { |
||||
|
console.error(`Error reading/writing files: ${error.message}`); |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
let orderedJoinList = Object.keys(fileOrder.orderedGroups) |
||||
|
.flatMap(groupName => fileOrder.orderedGroups[groupName]) |
||||
|
.map(fileName => fileOrder.objects[fileName].path()); |
||||
|
|
||||
|
/* |
||||
|
// Kept for future reference, might be that we will return to the dependency resolvement approach.
|
||||
|
fileOrder = resolveDependencyOrder(fileOrder); |
||||
|
|
||||
|
let orderedJoinList = fileOrder.keys |
||||
|
.map(fileName => fileOrder.objects[k].path()); |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
const targetFile = "./jpc-like-websites.js"; |
||||
|
console.log("(Re-) Creating target file: '" + targetFile + "'"); |
||||
|
|
||||
|
|
||||
|
/* EMPTY (create?) TARGET FILE */ |
||||
|
fs.writeFile(targetFile, "", err => { }) |
||||
|
|
||||
|
orderedJoinList |
||||
|
.reduce((prevPromise, filePath) => prevPromise |
||||
|
.then( |
||||
|
()=>appendContent(filePath, targetFile) |
||||
|
), Promise.resolve()) |
Loading…
Reference in new issue