Skip to content

Commit

Permalink
Create dedicated metadata crate
Browse files Browse the repository at this point in the history
Signed-off-by: Andrew Stein <[email protected]>
  • Loading branch information
texodus committed Sep 29, 2024
1 parent f55d042 commit 09d3922
Show file tree
Hide file tree
Showing 30 changed files with 670 additions and 614 deletions.
14 changes: 5 additions & 9 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
- name: WebAssembly Build
run: pnpm run build --ci
env:
PACKAGE: "!perspective-python,!perspective-jupyterlab"
PACKAGE: "perspective-cpp,perspective,perspective-metadata,perspective-viewer,perspective-viewer-datagrid,perspective-viewer-d3fc,perspective-viewer-openlayers,perspective-workspace,perspective-cli"
# PSP_USE_CCACHE: 1

- name: Lint
Expand Down Expand Up @@ -192,7 +192,7 @@ jobs:
run: pnpm run build
if: ${{ !contains(matrix.os, 'windows') }}
env:
PACKAGE: "perspective-python"
PACKAGE: "perspective-metadata,perspective-python"
PSP_ARCH: ${{ matrix.arch }}
PSP_ROOT_DIR: ${{ github.workspace }}
PSP_BUILD_WHEEL: 1
Expand Down Expand Up @@ -273,7 +273,7 @@ jobs:
run: pnpm run build
if: ${{ !contains(matrix.os, 'windows') }}
env:
PACKAGE: "perspective-rs"
PACKAGE: "perspective-metadata,perspective-rs"
PSP_ROOT_DIR: ${{ github.workspace }}

- name: Python Build (Windows)
Expand Down Expand Up @@ -355,16 +355,12 @@ jobs:
- name: Python Build Pyodide
run: pnpm install && pnpm run build
env:
PSP_PYODIDE: 1
PACKAGE: "perspective-python"
CI: 1
PACKAGE: "perspective-metadata,perspective-pyodide"

- name: "Test Pyodide"
run: pnpm run test
env:
PSP_PYODIDE: 1
PACKAGE: "perspective-python"
CI: 1
PACKAGE: "perspective-pyodide"

- uses: actions/upload-artifact@v4
with:
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -249,3 +249,5 @@ rust/perspective-python/*.data
# rust/perspective-python/perspective.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/package.json
rust/perspective-viewer/docs/exprtk.md
rust/perspective-server/docs/lib_gen.md
rust/perspective-viewer/docs/expressions.md
rust/perspective-client/docs/expressions.md
19 changes: 15 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
resolver = "2"
members = [
"rust/lint",
"rust/generate-metadata",
"rust/bootstrap",
"rust/bootstrap-runtime",
"rust/perspective-viewer",
Expand All @@ -23,7 +24,7 @@ members = [
"rust/perspective-js",
"rust/perspective-python",
"rust/perspective-server",
"examples/rust-axum",
"examples/rust-axum",
]

[profile.dev]
Expand Down
8 changes: 8 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ packages:
- "packages/perspective-jupyterlab"
- "packages/perspective-webpack-plugin"
- "packages/perspective-cli"
- "rust/generate-metadata"
- "rust/perspective"
- "rust/perspective-js"
- "rust/perspective-viewer"
Expand Down
37 changes: 37 additions & 0 deletions rust/generate-metadata/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
# ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
# ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
# ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
# ┃ Copyright (c) 2017, the Perspective Authors. ┃
# ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
# ┃ This file is part of the Perspective library, distributed under the terms ┃
# ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

[package]
name = "perspective-metadata"
description = "A CLI utility for generating Perspective project metadata like TypeScript definitions."
edition = "2021"
publish = false

[[bin]]
name = "perspective_metadata"
path = "main.rs"
bench = false

[dependencies.ts-rs]
version = "10.0.0"
features = ["serde-json-impl", "no-serde-warnings"]

[dependencies.perspective-client]
path = "../perspective-client"
features = ["external-proto", "omit_metadata"]

[dependencies.perspective-js]
path = "../perspective-js"
features = ["external-cpp"]

[dependencies.perspective-viewer]
path = "../perspective-viewer"
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,19 @@
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

#![warn(clippy::all)]
import { execSync } from "child_process";

use perspective_js::generate_type_bindings;
const INHERIT = {
stdio: "inherit",
stderr: "inherit",
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
generate_type_bindings();
Ok(())
function get_host() {
return /host\: (.+?)$/gm.exec(execSync(`rustc -vV`).toString())[1];
}

async function build_all() {
execSync(`PSP_ROOT_DIR=../.. cargo run --target=${get_host()}`, INHERIT);
}

build_all();
Original file line number Diff line number Diff line change
Expand Up @@ -12,40 +12,55 @@

#![recursion_limit = "1024"]

use std::error::Error;
use std::fmt::Write;
use std::fs;

use perspective_client::config::*;
use perspective_client::proto::ViewOnUpdateResp;
use perspective_client::{OnUpdateOptions, TableInitOptions, UpdateOptions, ViewWindow};
use perspective_viewer::config::ViewerConfigUpdate;
use ts_rs::TS;

pub fn generate_type_bindings() {
ViewerConfigUpdate::export_all().unwrap()
pub fn generate_type_bindings_viewer() -> Result<(), Box<dyn Error>> {
Ok(ViewerConfigUpdate::export_all_to(
std::env::current_dir()?.join("../perspective-viewer/src/ts/ts-rs"),
)?)
}

fn generate_exprtk_docs() -> String {
perspective_viewer::exprtk::COMPLETIONS.with(|x| {
x.iter().fold(String::new(), |mut output, rec| {
let _ = write!(
output,
"#### `{}`
{}
```
{}
```
",
rec.label, rec.documentation, rec.insert_text
);
output
})
})
fn generate_exprtk_docs() -> Result<(), Box<dyn Error>> {
let txt =
perspective_client::config::COMPLETIONS
.iter()
.fold(String::new(), |mut output, rec| {
let _ = writeln!(
output,
"- `{}` {}",
rec.insert_text,
rec.documentation.replace("\n", " "),
);
output
});

fs::write("../perspective-client/docs/expressions.md", txt)?;
Ok(())
}

#[doc(hidden)]
pub fn generate_type_bindings_js() -> Result<(), Box<dyn Error>> {
let path = std::env::current_dir()?.join("../perspective-js/src/ts/ts-rs");
ViewWindow::export_all_to(&path)?;
TableInitOptions::export_all_to(&path)?;
ViewConfigUpdate::export_all_to(&path)?;
ViewOnUpdateResp::export_all_to(&path)?;
OnUpdateOptions::export_all_to(&path)?;
UpdateOptions::export_all_to(&path)?;
Ok(())
}

fn main() {
if std::env::args().collect::<Vec<_>>().len() > 1 {
println!("{}", generate_exprtk_docs());
} else {
generate_type_bindings();
}
fn main() -> Result<(), Box<dyn Error>> {
generate_type_bindings_js()?;
generate_type_bindings_viewer()?;
generate_exprtk_docs()?;
Ok(())
}
20 changes: 20 additions & 0 deletions rust/generate-metadata/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "@finos/perspective-metadata",
"version": "2.0.1",
"description": "Benchmark utility based on perspective",
"private": true,
"files": [
"src/**/*",
"perspective-metadata"
],
"bin": "perspective-metadata",
"repository": {
"type": "git",
"url": "https://github.com/finos/perspective/packages/perspective-metadata"
},
"scripts": {
"build": "node build.mjs"
},
"author": "",
"license": "Apache-2.0"
}
10 changes: 8 additions & 2 deletions rust/perspective-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,14 @@ rustdoc-args = ["--html-in-header", "docs/index.html"]

[features]
default = []

# Should the project build the `proto.rs` via protoc from source or assume it
# already exists?
external-proto = ["protobuf-src"]
external-protoc = []

# When generating metadata, we can't rely on its existence - so enable this
# to skip metadata generation. This currently only affects docs.
omit_metadata = []

[lib]
crate-type = ["rlib"]
Expand Down Expand Up @@ -66,5 +72,5 @@ default-features = false
features = ["prost-derive", "std"]

[dependencies.ts-rs]
version = "9.0.1"
version = "10.0.0"
features = ["serde-json-impl", "no-serde-warnings"]
Loading

0 comments on commit 09d3922

Please sign in to comment.