| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson" | 
					
						
							|  |  |  | import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" | 
					
						
							|  |  |  | import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function main(args: string[]) { | 
					
						
							|  |  |  |     if (args.length === 0) { | 
					
						
							|  |  |  |         console.log( | 
					
						
							|  |  |  |             "Extracts an inline layer from a theme and places it in it's own layer directory." | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |         console.log("USAGE: ts-node scripts/extractLayerFromTheme.ts <themeid> <layerid>") | 
					
						
							|  |  |  |         console.log("(Invoke with only the themename to see which layers can be extracted)") | 
					
						
							| 
									
										
										
										
											2022-04-15 00:56:42 +02:00
										 |  |  |         return | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     const themeId = args[0] | 
					
						
							|  |  |  |     const layerId = args[1] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     const themePath = "./assets/themes/" + themeId + "/" + themeId + ".json" | 
					
						
							| 
									
										
										
										
											2023-02-01 11:57:26 +01:00
										 |  |  |     const contents = <LayoutConfigJson>JSON.parse(readFileSync(themePath, { encoding: "utf8" })) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     const layers = <LayerConfigJson[]>contents.layers.filter((l) => { | 
					
						
							|  |  |  |         if (typeof l === "string") { | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |             return false | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         if (l["override"] !== undefined) { | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |             return false | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     if (layers.length === 0) { | 
					
						
							|  |  |  |         console.log( | 
					
						
							|  |  |  |             "No layers can be extracted from this theme. The " + | 
					
						
							|  |  |  |                 contents.layers.length + | 
					
						
							|  |  |  |                 " layers are already substituted layers" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |         return | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     const layerConfig = layers.find((l) => l.id === layerId) | 
					
						
							|  |  |  |     if (layerId === undefined || layerConfig === undefined) { | 
					
						
							|  |  |  |         if (layerId !== undefined) { | 
					
						
							|  |  |  |             console.error("Layer " + layerId + " not found as inline layer") | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         console.log("Layers available for extraction are:") | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         console.log(layers.map((l) => l.id).join("\n")) | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |         return | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     const dir = "./assets/layers/" + layerId | 
					
						
							|  |  |  |     if (!existsSync(dir)) { | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |         mkdirSync(dir) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     writeFileSync(dir + "/" + layerId + ".json", JSON.stringify(layerConfig, null, "  ")) | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     const index = contents.layers.findIndex((l) => l["id"] === layerId) | 
					
						
							| 
									
										
										
										
											2022-04-15 00:51:39 +02:00
										 |  |  |     contents.layers[index] = layerId | 
					
						
							|  |  |  |     writeFileSync(themePath, JSON.stringify(contents, null, "  ")) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | main(process.argv.slice(2)) |