From e5e9c00c381bc483e90d49ab0bf84c7f223eec65 Mon Sep 17 00:00:00 2001 From: Miao Wang Date: Sat, 13 Apr 2024 01:10:46 +0800 Subject: [PATCH] pass config through fd --- _plugins/jekyll-vite.rb | 22 +++++++++++++++++++--- _vite.config.mjs | 16 +++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/_plugins/jekyll-vite.rb b/_plugins/jekyll-vite.rb index 009e8d2..1164f7c 100644 --- a/_plugins/jekyll-vite.rb +++ b/_plugins/jekyll-vite.rb @@ -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 diff --git a/_vite.config.mjs b/_vite.config.mjs index e89c46b..0a0050c 100644 --- a/_vite.config.mjs +++ b/_vite.config.mjs @@ -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);