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