pass config through fd

This commit is contained in:
Miao Wang 2024-04-13 01:10:46 +08:00
parent b11d5564b3
commit e5e9c00c38
2 changed files with 34 additions and 4 deletions

View File

@ -1,6 +1,7 @@
require 'vite_ruby'
require "jekyll/filters"
require "ostruct"
require 'tempfile'
module Jekyll::Vite
end
@ -43,9 +44,21 @@ class Jekyll::Vite::Generator < Jekyll::Generator
**(site.config['vite'].transform_keys(&:to_sym) || {})
)
site.reader.read_data
vr.env['site_config'] = Jekyll_Filters.new.jsonify(site.config)
vr.env['site_data'] = Jekyll_Filters.new.jsonify(site.data)
vr.env['site_categories'] = Jekyll_Filters.new.jsonify(site.categories)
exports = [
{ :name => 'site_config', :data => site.config },
{ :name => 'site_data', :data => site.data },
{ :name => 'site_categories', :data => site.categories },
]
exports.each do |export|
file = Tempfile.new()
file.unlink
file.write(Jekyll_Filters.new.jsonify(export[:data]))
file.flush
file.rewind
file.close_on_exec = false
vr.env[export[:name]] = "#{file.fileno}"
export[:file] = file
end
vr.logger = Jekyll.logger
class << site
@ -61,6 +74,9 @@ class Jekyll::Vite::Generator < Jekyll::Generator
vr.commands.clobber
end
generate_vite_build(site)
exports.each do |export|
export[:file].close
end
end
class Jekyll_Filters

View File

@ -8,6 +8,7 @@ import { toSass } from "sass-cast";
import { Liquid, Tag as LiquidTag } from "liquidjs";
import Babel from "@babel/core";
import BabelPresetEnv from "@babel/preset-env";
import fs from "node:fs";
const visualizer = await (async () => {
if (process.env.VISUALIZER) {
@ -21,7 +22,20 @@ const exposedData = ["config", "data", "categories"];
const jekyllData = Object.fromEntries(
exposedData.map((key) => [
key,
JSON.parse(process.env[`site_${key}`] || "{}"),
((fd) => {
if (fd) {
const fdNum = parseInt(fd);
if (!isNaN(fdNum)) {
const buf = Buffer.alloc(fs.fstatSync(fdNum).size);
fs.readSync(fdNum, buf);
return JSON.parse(buf.toString());
} else {
return {};
}
} else {
return {};
}
})(process.env[`site_${key}`]),
]),
);
jekyllData.config.hasOwnProperty("suffix") || (jekyllData.config.suffix = null);