1 /** 2 * Copyright © Yurai Web Framework 2021 3 * License: MIT (https://github.com/YuraiWeb/yurai/blob/main/LICENSE) 4 * Author: Jacob Jensen (bausshf) 5 */ 6 module yurai.prebuilding.prebuildcontrollers; 7 8 void prebuildControllers() 9 { 10 import std.file : write, dirEntries, SpanMode, readText; 11 import std.algorithm : filter, startsWith, endsWith; 12 import std.array : split, replace, join; 13 import std.string : strip, format; 14 15 string[] controllerModules = []; 16 17 foreach (string name; dirEntries("controllers", SpanMode.depth).filter!(f => f.name.endsWith(".d"))) 18 { 19 string content = readText(name); 20 auto lines = content.replace("\r", "\n").split("\n"); 21 22 bool foundModuleStatement; 23 24 foreach (line; lines) 25 { 26 if (!line || !line.length) 27 { 28 continue; 29 } 30 31 auto entries = line.split(";"); 32 33 foreach (ref entry; entries) 34 { 35 entry = entry.strip; 36 37 if (entry.startsWith("module ")) 38 { 39 auto moduleName = entry[7 .. $].strip; 40 41 if (moduleName != "controllers") 42 { 43 controllerModules ~= "\"" ~ moduleName ~ "\""; 44 } 45 46 foundModuleStatement = true; 47 break; 48 } 49 } 50 51 if (foundModuleStatement) 52 { 53 break; 54 } 55 } 56 } 57 58 enum finalModule = `module yurai.prebuild.controllersmap; 59 60 enum Yurai_ControllerModules = [ 61 %s 62 ];`; 63 64 auto moduleCode = finalModule.format(controllerModules.join(",\r\n")); 65 66 write("prebuild/controllersmap.d", moduleCode); 67 }