mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 05:56:07 +00:00

Remove old bash script for setting up a new project, do everything in Zig to make it platform agnostic and give us an easy place to add scaffolding commands in future.
72 lines
2.0 KiB
Zig
72 lines
2.0 KiB
Zig
const std = @import("std");
|
|
|
|
fn base64Encode(allocator: std.mem.Allocator, input: []const u8) []const u8 {
|
|
const encoder = std.base64.Base64Encoder.init(
|
|
std.base64.url_safe_no_pad.alphabet_chars,
|
|
std.base64.url_safe_no_pad.pad_char,
|
|
);
|
|
const size = encoder.calcSize(input.len);
|
|
const ptr = allocator.alloc(u8, size) catch @panic("OOM");
|
|
_ = encoder.encode(ptr, input);
|
|
return ptr;
|
|
}
|
|
|
|
pub fn initDataModule(build: *std.Build) !*std.Build.Module {
|
|
const root_path = build.pathFromRoot("..");
|
|
|
|
var buf = std.ArrayList(u8).init(build.allocator);
|
|
defer buf.deinit();
|
|
|
|
const writer = buf.writer();
|
|
|
|
const paths = .{
|
|
"demo/build.zig",
|
|
"demo/src/main.zig",
|
|
"demo/src/app/middleware/DemoMiddleware.zig",
|
|
"demo/src/app/views/init.zig",
|
|
"demo/src/app/views/init/index.zmpl",
|
|
"demo/src/app/views/init/_content.zmpl",
|
|
"demo/public/jetzig.png",
|
|
"demo/public/zmpl.png",
|
|
"demo/public/favicon.ico",
|
|
"demo/public/styles.css",
|
|
".gitignore",
|
|
};
|
|
|
|
try writer.writeAll(
|
|
\\pub const init_data = .{
|
|
\\
|
|
);
|
|
|
|
var dir = try std.fs.openDirAbsolute(root_path, .{});
|
|
defer dir.close();
|
|
|
|
inline for (paths) |path| {
|
|
const stat = try dir.statFile(path);
|
|
const encoded = base64Encode(
|
|
build.allocator,
|
|
try dir.readFileAlloc(build.allocator, path, stat.size),
|
|
);
|
|
defer build.allocator.free(encoded);
|
|
|
|
const output = try std.fmt.allocPrint(
|
|
build.allocator,
|
|
\\.{{ .path = "{s}", .data = "{s}" }},
|
|
,
|
|
.{ path, encoded },
|
|
);
|
|
defer build.allocator.free(output);
|
|
|
|
try writer.writeAll(output);
|
|
}
|
|
|
|
try writer.writeAll(
|
|
\\};
|
|
\\
|
|
);
|
|
|
|
const write_files = build.addWriteFiles();
|
|
const init_data_source = write_files.add("init_data.zig", buf.items);
|
|
return build.createModule(.{ .root_source_file = init_data_source });
|
|
}
|