Browse Source
			
			
			
			
				
		Added fileOrder.json that basically offers a ordered way, how the files should be appended together into one file.dev-feat-component_preview
				 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