-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add WebAssembly support for Jsonnet evaluation (#314)
* add wasi modules for jsonnet with external vars * Update dependencies, remove unused code, and add wasm version of jsonnet * revamp wasm compilation and serve flow * fix the response Body * simple working example of jsonnet * complete jsonnet implementaion at wasmtime * fix jsonnet_eval function * add support for ext_string * add docs in binding.rs * add docs to run function * fix http response at hyper side * working example for nodejs with jsonnet * add readme to jsonnet library * update the workflow of webassembly * add support for evaluateFile * updated hydesearch example * updated edgechain examples with arakoov/jsonnet * fix shims build and upload release
- Loading branch information
1 parent
5226527
commit 9e75928
Showing
187 changed files
with
19,629 additions
and
44,151 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
[workspace] | ||
members = [ | ||
"JS/wasm/crates/apis", | ||
"JS/wasm/crates/arakoo-core", | ||
"JS/wasm/crates/cli", | ||
"JS/wasm/crates/serve", | ||
"JS/wasm/types/jsonnet", | ||
] | ||
resolver = "2" | ||
|
||
[workspace.package] | ||
edition = "2021" | ||
version = "0.0.1" | ||
|
||
[workspace.dependencies] | ||
wizer = "4.0.0" | ||
wasmtime = "16" | ||
wasmtime-wasi = "16" | ||
wasi-common = "16" | ||
javy = { version = "2.1.0" } | ||
anyhow = "1.0.79" | ||
once_cell = "1.19.0" | ||
serde = { version = "1", features = ["derive"] } | ||
serde_json = "1" | ||
[profile.release] | ||
lto = true | ||
opt-level = 's' | ||
|
||
[profile.dev] | ||
incremental = true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,51 @@ | ||
const esbuild = require("esbuild"); | ||
const path = require("path"); | ||
const fs = require("fs"); | ||
const { execSync } = require("child_process"); | ||
import { build } from "esbuild"; | ||
import { resolve, join } from "path"; | ||
import { existsSync, mkdirSync, promises } from "fs"; | ||
|
||
const outputDir = path.resolve(__dirname, "dist"); | ||
import { fileURLToPath } from 'url'; | ||
import { dirname } from 'path'; | ||
|
||
if (!fs.existsSync(outputDir)) { | ||
fs.mkdirSync(outputDir); | ||
const __filename = fileURLToPath(import.meta.url); | ||
const __dirname = dirname(__filename); | ||
|
||
const outputDir = resolve(__dirname, "dist"); | ||
|
||
if (!existsSync(outputDir)) { | ||
mkdirSync(outputDir); | ||
} | ||
|
||
const distPath = path.join(process.cwd(), "dist"); | ||
const distPath = join(process.cwd(), "dist"); | ||
|
||
fs.promises.mkdir(distPath, { recursive: true }); | ||
promises.mkdir(distPath, { recursive: true }); | ||
|
||
esbuild | ||
.build({ | ||
entryPoints: ["./src/index.ts"], | ||
bundle: true, | ||
minify: true, | ||
platform: "node", | ||
outfile: "./dist/index.js", | ||
tsconfig: "./tsconfig.json", | ||
target: "node21.1.0", | ||
external: [ | ||
"express", | ||
"tsx", | ||
"typescript", | ||
"typeorm", | ||
"react", | ||
"react-dom", | ||
"pg", | ||
"jsdom", | ||
"hono", | ||
"@hanazuki/node-jsonnet", | ||
"readline/promises", | ||
], | ||
format: "cjs", | ||
loader: { | ||
".html": "text", | ||
".css": "css", | ||
".jsonnet": "text", | ||
}, | ||
}) | ||
build({ | ||
entryPoints: ["./src/index.ts"], | ||
bundle: true, | ||
minify: true, | ||
platform: "node", | ||
outfile: "./dist/index.js", | ||
tsconfig: "./tsconfig.json", | ||
target: "node21.1.0", | ||
external: [ | ||
"express", | ||
"tsx", | ||
"typescript", | ||
"typeorm", | ||
"react", | ||
"react-dom", | ||
"pg", | ||
"jsdom", | ||
"hono", | ||
"@hanazuki/node-jsonnet", | ||
"@arakoodev/jsonnet", | ||
"readline/promises", | ||
], | ||
format: "esm", | ||
loader: { | ||
".html": "text", | ||
".css": "css", | ||
".jsonnet": "text", | ||
".wasm": "file", | ||
}, | ||
}) | ||
.catch(() => process.exit(1)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
export declare const view: (viewToRender: any) => (c: any) => Promise<any>; | ||
export declare const rootLayout: (layoutToApply: any) => (c: any, next: any) => Promise<void>; | ||
export declare const layout: (layoutToApply: any) => (c: any, next: any) => Promise<void>; | ||
export declare const Link: any; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { html } from "hono/html"; | ||
// These functions form the basis of the html.js framework and will be moved to a separate lib | ||
export const view = (viewToRender) => { | ||
return async (c) => { | ||
const newBody = await viewToRender({ context: c }); | ||
return c.html(newBody); | ||
}; | ||
}; | ||
export const rootLayout = (layoutToApply) => { | ||
return async (c, next) => { | ||
await next(); | ||
if (c.req.header("HX-Request") !== "true") { | ||
// Req is a normal request, so we render the whole page which means adding the root layout | ||
const curBody = await c.res.text(); | ||
c.res = undefined; // To overwrite res, set it to undefined before setting new value https://github.com/honojs/hono/pull/970 released in https://github.com/honojs/hono/releases/tag/v3.1.0 | ||
const newBody = await layoutToApply({ context: c, children: html(curBody) }); | ||
c.res = c.html(newBody); | ||
} | ||
// Else do nothing and let the original response be sent | ||
}; | ||
}; | ||
export const layout = (layoutToApply) => { | ||
return async (c, next) => { | ||
await next(); | ||
if ((c.req.header("HX-Request") === "true" && | ||
(c.req.header("HX-Boosted") === "true" || !c.req.header("HX-Target"))) || | ||
c.req.header("HX-Request") !== "true") { | ||
// Req is regular req or boosted link, so we apply layouts | ||
const curBody = await c.res.text(); | ||
c.res = undefined; // To overwrite res, set it to undefined before setting new value https://github.com/honojs/hono/pull/970 released in https://github.com/honojs/hono/releases/tag/v3.1.0 | ||
const newBody = await layoutToApply({ context: c, children: html(curBody) }); | ||
c.res = c.html(newBody); | ||
} | ||
// Else do nothing and let the original response be sent, which will be a partial update applied to the page with hx-target | ||
}; | ||
}; | ||
export const Link = ({ to, "hx-target": hxTarget, class: className, children }) => { | ||
if (hxTarget) { | ||
return html `<a | ||
href="${to}" | ||
class="${className}" | ||
hx-get="${to}" | ||
hx-target="${hxTarget}" | ||
hx-push-url="true" | ||
hx-swap="morph" | ||
>${children}</a | ||
>`; | ||
} | ||
else { | ||
return html `<a href="${to}" class="${className}" hx-boost="true">${children}</a>`; | ||
} | ||
}; |
File renamed without changes.
File renamed without changes.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
import { FC } from "hono/jsx"; | ||
declare const ExampleLayout: FC; | ||
export default ExampleLayout; |
Oops, something went wrong.