Skip to content

Commit

Permalink
Merge pull request #28 from vssio/add-serve-cmd
Browse files Browse the repository at this point in the history
Add serve cmd
  • Loading branch information
zztkm authored Sep 12, 2022
2 parents 0819dcf + bee6801 commit 8fdb437
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 34 deletions.
66 changes: 33 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,6 @@ content, and a little configuration, you can easily build your website!
vss is still under development and the API is not stable. Be aware that
disruptive changes may be made!

## Installation

### (Recommended) Install Script

With Shell(For Mac & Linux):

```shell
curl -fsSL https://raw.githubusercontent.com/vssio/vss_install/main/install.sh | sh
```

With PowerShell(for Windows):

```powershell
irm https://raw.githubusercontent.com/vssio/vss_install/main/install.ps1 | iex
```

More information: https://github.com/vssio/vss_install

### Get the binary

Download from [Releases](https://github.com/zztkm/vss/releases)

### Build from source

```
git clone https://github.com/zztkm/vss.git
cd vss
v install markdown
v . -o vss
```

## Usage

### Setup contents
Expand Down Expand Up @@ -153,3 +120,36 @@ dist

Examples can be found at the
[example](https://github.com/zztkm/vss/tree/main/example) directory.

## Installation

### (Recommended) Install Script

With Shell(For Mac & Linux):

```shell
curl -fsSL https://raw.githubusercontent.com/vssio/vss_install/main/install.sh | sh
```

With PowerShell(for Windows):

```powershell
irm https://raw.githubusercontent.com/vssio/vss_install/main/install.ps1 | iex
```

More information: https://github.com/vssio/vss_install

### Get the binary

Download from [Releases](https://github.com/zztkm/vss/releases)

### Build from source

```
git clone https://github.com/zztkm/vss.git
cd vss
v install markdown
v . -o vss
```
119 changes: 119 additions & 0 deletions commands/serve.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
module commands

import cli
import log
import net.http
import os

const cport = 8080

fn new_serve_cmd() cli.Command {
return cli.Command{
name: 'serve'
description: 'serve dist'
usage: 'vss serve'
execute: fn (cmd cli.Command) ? {
mut logger := log.Log{}
logger.set_level(log.Level.info)
serve(mut logger) or {
logger.error(err.msg())
println('serve failed')
}
}
}
}

struct MyHttpHandler {
mut:
root string
}

fn normalise_path(path string) string {
cwd := os.getwd() + os.path_separator
mut res := os.abs_path(path).replace(cwd, '').replace(os.path_separator, '/')
return res
}

fn (mut handler MyHttpHandler) handle(req http.Request) http.Response {
mut r := http.Response{
header: req.header
}

// コンテンツを返すための処理
wd := os.getwd()
os_spec_path := req.url.replace('/', os.path_separator)
mut file := wd + os.path_separator + handler.root + os_spec_path

if os.is_dir(file) {
file = file + os.path_separator + 'index.html'
} else {
if !os.is_file(file) {
file = file + '.html'
}
}

html := os.read_file(file) or {
eprintln(err)
r.set_status(.not_found)
r.body = 'Not Found'
r.set_version(req.version)
return r
}

r.body = html
r.set_status(.ok)
r.set_version(req.version)
return r
}

struct Watcher {
path string
mut:
time_stamp i64
}

fn watch(path string, mut logger log.Log) {
mut res := []string{}
os.walk_with_context(path, &res, fn (mut res []string, fpath string) {
res << fpath
})

mut watchers := []Watcher{}
for p in res {
mut w := Watcher{
path: p
time_stamp: os.file_last_mod_unix(p)
}
watchers << w
}

for {
for mut w in watchers {
now := os.file_last_mod_unix(w.path)
if now > w.time_stamp {
println('modified file: $w.path')
w.time_stamp = now

build(mut logger) or {
logger.error(err.msg())
println('Build failed')
}
}
}
}
}

fn serve(mut logger log.Log) ? {
mut handler := MyHttpHandler{
root: 'dist'
}
mut server := &http.Server{
handler: handler
port: commands.cport
}
println('http://localhost:$commands.cport')
w := go watch('dist', mut logger)
server.listen_and_serve() or { panic(err) }

w.wait()
}
3 changes: 2 additions & 1 deletion commands/vss.v
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ import cli
pub fn execute() {
mut app := cli.Command{
name: 'vss'
version: '0.0.9'
version: '0.0.10'
description: 'static site generator'
execute: fn (cmd cli.Command) ? {
println(cmd.help_message())
}
}

app.add_command(new_build_cmd())
app.add_command(new_serve_cmd())

app.setup()
app.parse(os.args)
Expand Down

0 comments on commit 8fdb437

Please sign in to comment.