Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Pre-generate folder pages during indexing
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
jviotti committed Jan 6, 2025
1 parent 121988f commit 3a79b5d
Showing 5 changed files with 37 additions and 52 deletions.
32 changes: 0 additions & 32 deletions src/enterprise/enterprise_explorer.h

This file was deleted.

39 changes: 27 additions & 12 deletions src/enterprise/enterprise_index.h
Original file line number Diff line number Diff line change
@@ -213,6 +213,33 @@ auto generate_toc(
sourcemeta::jsontoolkit::prettify(result, stream);
stream << "\n";
stream.close();

if (directory == base) {
std::cerr << "Generating HTML index page\n";
std::ofstream html{index_path.parent_path() / "index.html"};
assert(!html.fail());
sourcemeta::registry::enterprise::html_start(
html, configuration, configuration.at("title").to_string(),
configuration.at("description").to_string(), "");
sourcemeta::registry::enterprise::html_file_manager(
html, index_path.parent_path());
sourcemeta::registry::enterprise::html_end(html);
html << "\n";
html.close();
} else {
std::cerr << "Generating HTML directory page\n";
const auto page_relative_path{std::string{'/'} + relative_path.string()};
std::ofstream html{index_path.parent_path() / "index.html"};
assert(!html.fail());
sourcemeta::registry::enterprise::html_start(
html, configuration, page_relative_path, page_relative_path,
page_relative_path);
sourcemeta::registry::enterprise::html_file_manager(
html, index_path.parent_path());
sourcemeta::registry::enterprise::html_end(html);
html << "\n";
html.close();
}
}

auto attach(const sourcemeta::jsontoolkit::FlatFileSchemaResolver &resolver,
@@ -242,18 +269,6 @@ auto attach(const sourcemeta::jsontoolkit::FlatFileSchemaResolver &resolver,
stream << "\n";
stream.close();

// Index page
std::ofstream stream_index{output / "generated" / "index.html"};
assert(!stream_index.fail());
sourcemeta::registry::enterprise::html_start(
stream_index, configuration, configuration.at("title").to_string(),
configuration.at("description").to_string(), "");
sourcemeta::registry::enterprise::html_file_manager(stream_index,
output / "generated");
sourcemeta::registry::enterprise::html_end(stream_index);
stream_index << "\n";
stream_index.close();

// Not found page
std::ofstream stream_not_found{output / "generated" / "404.html"};
assert(!stream_not_found.fail());
10 changes: 4 additions & 6 deletions src/enterprise/enterprise_server.h
Original file line number Diff line number Diff line change
@@ -3,8 +3,6 @@

#include <sourcemeta/hydra/httpserver.h>

#include "enterprise_explorer.h"

#include <filesystem> // std::filesystem
#include <sstream> // std::ostringstream

@@ -37,16 +35,16 @@ auto on_request(const sourcemeta::hydra::http::ServerLogger &logger,
}

// Explorer
static const auto GENERATED_BASE_DIRECTORY{*(__global_data) / "generated"};
const auto directory_path{sourcemeta::registry::path_join(
GENERATED_BASE_DIRECTORY, request.path())};
*(__global_data) / "generated", request.path())};
if (std::filesystem::is_directory(directory_path)) {
explore_directory(directory_path, request, response);
sourcemeta::hydra::http::serve_file(directory_path / "index.html", request,
response);
return;
}

sourcemeta::hydra::http::serve_file(
GENERATED_BASE_DIRECTORY / "404.html", request, response,
*(__global_data) / "generated" / "404.html", request, response,
sourcemeta::hydra::http::Status::NOT_FOUND);
}

2 changes: 0 additions & 2 deletions src/enterprise/server.cmake
Original file line number Diff line number Diff line change
@@ -3,8 +3,6 @@ target_compile_definitions(schema_registry_server PRIVATE SOURCEMETA_REGISTRY_EN
cmake_path(GET CMAKE_CURRENT_LIST_FILE PARENT_PATH ENTERPRISE_SOURCE_DIR)
target_sources(schema_registry_server PRIVATE
"${ENTERPRISE_SOURCE_DIR}/enterprise_server.h"
"${ENTERPRISE_SOURCE_DIR}/enterprise_html.h"
"${ENTERPRISE_SOURCE_DIR}/enterprise_explorer.h"
"${CMAKE_CURRENT_BINARY_DIR}/style.min.css")
target_include_directories(schema_registry_server PRIVATE "${ENTERPRISE_SOURCE_DIR}")

6 changes: 6 additions & 0 deletions test/sandbox/manifest-ee.txt
Original file line number Diff line number Diff line change
@@ -2,16 +2,22 @@
./generated
./generated/404.html
./generated/doc
./generated/doc/index.html
./generated/doc/index.json
./generated/example
./generated/example/bundling
./generated/example/bundling/index.html
./generated/example/bundling/index.json
./generated/example/extension
./generated/example/extension/index.html
./generated/example/extension/index.json
./generated/example/index.html
./generated/example/index.json
./generated/example/schemas
./generated/example/schemas/index.html
./generated/example/schemas/index.json
./generated/example/v2.0
./generated/example/v2.0/index.html
./generated/example/v2.0/index.json
./generated/index.html
./generated/index.json

0 comments on commit 3a79b5d

Please sign in to comment.