Skip to content

Commit

Permalink
Merge branch 'main' into feat/rust-1.70
Browse files Browse the repository at this point in the history
  • Loading branch information
QuiiBz committed Jun 7, 2023
2 parents 8dd95b9 + 0a64b68 commit bfdb9e8
Show file tree
Hide file tree
Showing 52 changed files with 428 additions and 195 deletions.
6 changes: 0 additions & 6 deletions .changeset/beige-lobsters-pay.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/chatty-pumpkins-vanish.md

This file was deleted.

10 changes: 7 additions & 3 deletions .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@
}
],
"commit": false,
"fixed": [["@lagon/runtime", "@lagon/js-runtime"]],
"fixed": [
[
"@lagon/runtime",
"@lagon/js-runtime"
]
],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"privatePackages": { "version": true, "tag": true }
"updateInternalDependencies": "patch"
}
5 changes: 0 additions & 5 deletions .changeset/fair-plants-peel.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/flat-rabbits-shake.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/friendly-readers-unite.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/hungry-geckos-tap.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/lemon-ducks-learn.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/mean-cherries-marry.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/neat-otters-live.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/olive-trains-taste.md

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
'@lagon/dashboard': patch
---

Improve custom domains UX
Fix Stripe subscription
5 changes: 5 additions & 0 deletions .changeset/seven-adults-hang.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@lagon/runtime': patch
---

Forward X-Lagon-Id header
5 changes: 5 additions & 0 deletions .changeset/shy-pears-film.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@lagon/www': patch
---

Decrease nav gap on smaller screens
5 changes: 0 additions & 5 deletions .changeset/spicy-insects-hug.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/tall-oranges-visit.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/tidy-yaks-push.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/two-lies-warn.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/violet-panthers-remember.md

This file was deleted.

18 changes: 18 additions & 0 deletions crates/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# @lagon/cli

## 0.7.4

### Patch Changes

- [#928](https://github.com/lagonapp/lagon/pull/928) [`28bd4c6`](https://github.com/lagonapp/lagon/commit/28bd4c644db583b54827f5f1a6bee7ce0f64b4bb) Thanks [@QuiiBz](https://github.com/QuiiBz)! - Set content-length header to 0 when body is null and method POST or PUT in `fetch()`

- [#925](https://github.com/lagonapp/lagon/pull/925) [`102bb75`](https://github.com/lagonapp/lagon/commit/102bb7550a14453c96866a4aa011d4517ed11185) Thanks [@QuiiBz](https://github.com/QuiiBz)! - Fix `lagon dev` hot reloading updating after the 2nd request

- [`dfdb662`](https://github.com/lagonapp/lagon/commit/dfdb6626e86b9c81bff2275ec03944aaa9259c69) Thanks [@QuiiBz](https://github.com/QuiiBz)! - Load environment variable file based on current directory

## 0.7.3

### Patch Changes

- [#907](https://github.com/lagonapp/lagon/pull/907) [`6a593cb`](https://github.com/lagonapp/lagon/commit/6a593cbc3b1a853a6b2170a8d1d696ddf0e101d6) Thanks [@QuiiBz](https://github.com/QuiiBz)! - Reduce loading animation ticks

- [#835](https://github.com/lagonapp/lagon/pull/835) [`12ff778`](https://github.com/lagonapp/lagon/commit/12ff77821b74bffc483a216c46053e270ddde64a) Thanks [@QuiiBz](https://github.com/QuiiBz)! - Improve implementation of Headers, Request, Response and URLSearchParams

## 0.7.2

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion crates/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lagon/cli",
"version": "0.7.2",
"version": "0.7.4",
"description": "CLI for Lagon",
"type": "module",
"files": [
Expand Down
68 changes: 36 additions & 32 deletions crates/cli/src/commands/dev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use notify::event::ModifyKind;
use notify::{Config, EventKind, RecommendedWatcher, RecursiveMode, Watcher};
use std::collections::HashMap;
use std::convert::Infallible;
use std::path::{Path, PathBuf};
use std::path::PathBuf;
use std::sync::Arc;
use std::time::Duration;
use tokio::runtime::Handle;
Expand All @@ -25,20 +25,21 @@ use tokio::sync::Mutex;
const LOCAL_REGION: &str = "local";

fn parse_environment_variables(
root: &Path,
path: Option<PathBuf>,
env: Option<PathBuf>,
) -> Result<HashMap<String, String>> {
let path = path.unwrap_or_else(|| PathBuf::from("."));
let mut environment_variables = HashMap::new();

if let Some(path) = env {
let envfile = EnvFile::new(root.join(path))?;
if let Some(env) = env {
let envfile = EnvFile::new(env)?;

for (key, value) in envfile.store {
environment_variables.insert(key, value);
}

println!("{}", style("Loaded .env file...").black().bright());
} else if let Ok(envfile) = EnvFile::new(root.join(".env")) {
} else if let Ok(envfile) = EnvFile::new(path.join(".env")) {
for (key, value) in envfile.store {
environment_variables.insert(key, value);
}
Expand Down Expand Up @@ -163,10 +164,10 @@ pub async fn dev(
allow_code_generation: bool,
prod: bool,
) -> Result<()> {
let (root, function_config) = resolve_path(path, client, public_dir)?;
let (root, function_config) = resolve_path(path.clone(), client, public_dir)?;
let (index, assets) = bundle_function(&function_config, &root, prod)?;

let server_index = index.clone();
let index = Arc::new(Mutex::new(index));
let assets = Arc::new(Mutex::new(assets));

let runtime =
Expand All @@ -183,41 +184,37 @@ pub async fn dev(
.as_ref()
.map(|assets| root.join(assets));

let environment_variables = match parse_environment_variables(&root, env) {
let environment_variables = match parse_environment_variables(path, env) {
Ok(env) => env,
Err(err) => return Err(anyhow!("Could not load environment variables: {:?}", err)),
};

let (tx, rx) = flume::unbounded();
let (index_tx, index_rx) = flume::unbounded();
let (isolate_tx, isolate_rx) = flume::unbounded();
let (log_sender, log_receiver) = flume::unbounded();

let handle = Handle::current();
let index_handle = Arc::clone(&index);

std::thread::spawn(move || {
handle.block_on(async move {
let mut index = server_index;

loop {
let code = {
let index = index_handle.lock().await;
String::from_utf8(index.to_vec()).expect("Code is not UTF-8")
};

let mut isolate = Isolate::new(
IsolateOptions::new(
String::from_utf8(index.clone()).expect("Code is not UTF-8"),
)
.tick_timeout(Duration::from_millis(500))
.total_timeout(Duration::from_secs(30))
.metadata(Some((String::from(""), String::from(""))))
.environment_variables(environment_variables.clone())
.log_sender(log_sender.clone()),
rx.clone(),
IsolateOptions::new(code)
.tick_timeout(Duration::from_millis(500))
.total_timeout(Duration::from_secs(30))
.metadata(Some((String::from(""), String::from(""))))
.environment_variables(environment_variables.clone())
.log_sender(log_sender.clone()),
isolate_rx.clone(),
);

isolate.evaluate();

tokio::select! {
_ = isolate.run_event_loop() => {},
new_index = index_rx.recv_async() => {
index = new_index.unwrap();
}
}
isolate.run_event_loop().await;
}
});
});
Expand All @@ -235,11 +232,13 @@ pub async fn dev(
}
});

let server_assets = Arc::clone(&assets);
let assets_handle = Arc::clone(&assets);
let tx_handle = isolate_tx.clone();

let server = Server::bind(&addr).serve(make_service_fn(move |conn: &AddrStream| {
let public_dir = server_public_dir.clone();
let assets = Arc::clone(&server_assets);
let tx = tx.clone();
let assets = Arc::clone(&assets_handle);
let tx = tx_handle.clone();

let addr = conn.remote_addr();
let ip = addr.ip().to_string();
Expand Down Expand Up @@ -284,7 +283,12 @@ pub async fn dev(
let (new_index, new_assets) = bundle_function(&function_config, &root, prod)?;

*assets.lock().await = new_assets;
index_tx.send_async(new_index).await.unwrap();
*index.lock().await = new_index;

isolate_tx
.send_async(IsolateEvent::Terminate(String::from("Hot Reload")))
.await
.unwrap();

println!();
println!(" {} Dev Server ready!", style("◼").magenta());
Expand Down
4 changes: 4 additions & 0 deletions crates/runtime/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# @lagon/runtime

## 0.3.16

## 0.3.15

## 0.3.14

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion crates/runtime/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lagon/runtime",
"version": "0.3.14",
"version": "0.3.16",
"description": "JavaScript Serverless Runtime for Lagon",
"private": true,
"scripts": {
Expand Down
42 changes: 42 additions & 0 deletions crates/runtime/tests/fetch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -607,3 +607,45 @@ async fn fetch_https() {
)
.await;
}

#[tokio::test]
async fn fetch_set_content_length() {
utils::setup();
let server = Server::run();
server.expect(
Expectation::matching(all_of![
any_of![
request::method_path("POST", "/"),
request::method_path("PUT", "/")
],
request::headers(contains(("content-length", "0")))
])
.times(2)
.respond_with(status_code(200)),
);
let url = server.url("/");

let (send, receiver) = utils::create_isolate(IsolateOptions::new(format!(
"export async function handler() {{
await fetch('{url}', {{
method: 'POST',
}});
await fetch('{url}', {{
method: 'PUT',
}});
return new Response('Ok');
}}"
)));
send(Request::default());

utils::assert_response(
&receiver,
Response::builder()
.header(CONTENT_TYPE, "text/plain;charset=UTF-8")
.body("Ok".into())
.unwrap(),
)
.await;
}
Loading

0 comments on commit bfdb9e8

Please sign in to comment.