#!/usr/bin/env ruby # frozen_string_literal: true ## # Requires require "ryo" require "ryo/json" require "nanoc-gzip" require "nanoc-webpack" require "nanoc-tidy" ## # Configuration locales = %w[ar fa en] json_dir = File.join(Dir.getwd, "src", "json") name_by_id = Ryo.from_json(path: File.join(json_dir, "nameById.json")) tdata = Ryo.from_json(path: File.join(json_dir, "t.json")) tidy = `which tidy || which tidy5`.chomp buildenv = ENV["buildenv"] || "development" ## # DSL extensions Nanoc::RuleDSL::CompilationRuleContext.prepend(Nanoc::RuleDSL::Filter) Nanoc::RuleDSL::CompilerDSL.prepend(Nanoc::RuleDSL::RequireRules) ## # Plugins Nanoc::Webpack .default_argv .concat ["--config", "webpack.#{buildenv}.js"] Nanoc::Tidy .default_argv .concat ["-upper"] ## # See packages/typescript/postman compile "/css/vendor/postman.scss" do filter :sass, syntax: :scss, style: :compact filter :rainpress write("/css/vendor/postman.css") end ## # /sitemap.xml compile "/sitemap.xml.erb" do filter(:erb, locals: {locales:, name_by_id:}) filter proc { _1.each_line.reject { |s| s.strip.empty? }.join } write("/sitemap.xml") end ## # /robots.txt compile "/robots.txt" do write("/robots.txt") end ## # /json/durations/*/*.json passthrough "/json/durations/*.json" ## # Require rules require_rules "nanoc/rules/assets" require_rules "nanoc/rules/redirect", {locales:, tidy:} require_rules "nanoc/rules/random", {locales:, tdata:, tidy:} require_rules "nanoc/rules/stream", {locales:, tdata:, name_by_id:, tidy:} require_rules "nanoc/rules/index", {locales:, tdata:, tidy:} ## # Catch-all compile("/**/*") { write(nil) } layout("**/*", :erb)