diff --git a/testdata/apps/go-api/go.mod b/testdata/apps/go-api/go.mod
new file mode 100644
index 0000000..4612534
--- /dev/null
+++ b/testdata/apps/go-api/go.mod
@@ -0,0 +1,21 @@
+module test-go-api
+
+go 1.22
+
+require modernc.org/sqlite v1.29.1
+
+require (
+ github.com/dustin/go-humanize v1.0.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/ncruces/go-strftime v0.1.9 // indirect
+ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
+ golang.org/x/sys v0.16.0 // indirect
+ modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
+ modernc.org/libc v1.41.0 // indirect
+ modernc.org/mathutil v1.6.0 // indirect
+ modernc.org/memory v1.7.2 // indirect
+ modernc.org/strutil v1.2.0 // indirect
+ modernc.org/token v1.1.0 // indirect
+)
diff --git a/testdata/apps/go-api/go.sum b/testdata/apps/go-api/go.sum
new file mode 100644
index 0000000..1d61df7
--- /dev/null
+++ b/testdata/apps/go-api/go.sum
@@ -0,0 +1,39 @@
+github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
+github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
+github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
+github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
+github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
+golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
+modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=
+modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
+modernc.org/libc v1.41.0 h1:g9YAc6BkKlgORsUWj+JwqoB1wU3o4DE3bM3yvA3k+Gk=
+modernc.org/libc v1.41.0/go.mod h1:w0eszPsiXoOnoMJgrXjglgLuDy/bt5RR4y3QzUUeodY=
+modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
+modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
+modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
+modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
+modernc.org/sqlite v1.29.1 h1:19GY2qvWB4VPw0HppFlZCPAbmxFU41r+qjKZQdQ1ryA=
+modernc.org/sqlite v1.29.1/go.mod h1:hG41jCYxOAOoO6BRK66AdRlmOcDzXf7qnwlwjUIOqa0=
+modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
+modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
+modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
+modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
diff --git a/testdata/apps/go-api/main.go b/testdata/apps/go-api/main.go
new file mode 100644
index 0000000..f274f98
--- /dev/null
+++ b/testdata/apps/go-api/main.go
@@ -0,0 +1,119 @@
+package main
+
+import (
+ "database/sql"
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+ "strings"
+
+ _ "modernc.org/sqlite"
+)
+
+var db *sql.DB
+
+type Note struct {
+ ID int `json:"id"`
+ Title string `json:"title"`
+ Content string `json:"content"`
+ CreatedAt string `json:"created_at"`
+}
+
+func cors(next http.HandlerFunc) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS")
+ w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
+ if r.Method == "OPTIONS" {
+ w.WriteHeader(200)
+ return
+ }
+ next(w, r)
+ }
+}
+
+func healthHandler(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json")
+ json.NewEncoder(w).Encode(map[string]string{"status": "ok", "service": "go-api"})
+}
+
+func notesHandler(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json")
+
+ switch r.Method {
+ case "GET":
+ rows, err := db.Query("SELECT id, title, content, created_at FROM notes ORDER BY id DESC")
+ if err != nil {
+ http.Error(w, err.Error(), 500)
+ return
+ }
+ defer rows.Close()
+
+ notes := []Note{}
+ for rows.Next() {
+ var n Note
+ rows.Scan(&n.ID, &n.Title, &n.Content, &n.CreatedAt)
+ notes = append(notes, n)
+ }
+ json.NewEncoder(w).Encode(notes)
+
+ case "POST":
+ var n Note
+ if err := json.NewDecoder(r.Body).Decode(&n); err != nil {
+ http.Error(w, "invalid json", 400)
+ return
+ }
+ result, err := db.Exec("INSERT INTO notes (title, content) VALUES (?, ?)", n.Title, n.Content)
+ if err != nil {
+ http.Error(w, err.Error(), 500)
+ return
+ }
+ id, _ := result.LastInsertId()
+ n.ID = int(id)
+ w.WriteHeader(201)
+ json.NewEncoder(w).Encode(n)
+
+ case "DELETE":
+ // DELETE /api/notes/123
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) < 4 {
+ http.Error(w, "id required", 400)
+ return
+ }
+ id := parts[len(parts)-1]
+ db.Exec("DELETE FROM notes WHERE id = ?", id)
+ json.NewEncoder(w).Encode(map[string]string{"deleted": id})
+
+ default:
+ http.Error(w, "method not allowed", 405)
+ }
+}
+
+func main() {
+ var err error
+ db, err = sql.Open("sqlite", "./data.db")
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer db.Close()
+
+ db.Exec(`CREATE TABLE IF NOT EXISTS notes (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ title TEXT NOT NULL,
+ content TEXT NOT NULL,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ )`)
+
+ http.HandleFunc("/health", cors(healthHandler))
+ http.HandleFunc("/api/notes", cors(notesHandler))
+ http.HandleFunc("/api/notes/", cors(notesHandler))
+
+ port := os.Getenv("PORT")
+ if port == "" {
+ port = "8080"
+ }
+ fmt.Printf("Go API listening on :%s\n", port)
+ log.Fatal(http.ListenAndServe(":"+port, nil))
+}
diff --git a/testdata/apps/go-backend/Makefile b/testdata/apps/go-backend/Makefile
deleted file mode 100644
index 0c70f49..0000000
--- a/testdata/apps/go-backend/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-.PHONY: build clean run
-
-build:
- GOOS=linux GOARCH=amd64 go build -o api main.go
-
-clean:
- rm -f api
-
-run:
- go run main.go
diff --git a/testdata/apps/go-backend/app b/testdata/apps/go-backend/app
deleted file mode 100755
index 34e7ec0..0000000
Binary files a/testdata/apps/go-backend/app and /dev/null differ
diff --git a/testdata/apps/go-backend/go.mod b/testdata/apps/go-backend/go.mod
deleted file mode 100644
index b7c06a5..0000000
--- a/testdata/apps/go-backend/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module github.com/DeBrosOfficial/network/testdata/apps/go-backend
-
-go 1.21
diff --git a/testdata/apps/go-backend/main.go b/testdata/apps/go-backend/main.go
deleted file mode 100644
index 31469ee..0000000
--- a/testdata/apps/go-backend/main.go
+++ /dev/null
@@ -1,351 +0,0 @@
-package main
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "log"
- "net/http"
- "os"
- "strings"
- "time"
-)
-
-type User struct {
- ID int `json:"id"`
- Name string `json:"name"`
- Email string `json:"email"`
- CreatedAt time.Time `json:"created_at"`
-}
-
-type HealthResponse struct {
- Status string `json:"status"`
- Timestamp time.Time `json:"timestamp"`
- Service string `json:"service"`
- DatabaseName string `json:"database_name,omitempty"`
- GatewayURL string `json:"gateway_url,omitempty"`
-}
-
-type UsersResponse struct {
- Users []User `json:"users"`
- Total int `json:"total"`
-}
-
-type CreateUserRequest struct {
- Name string `json:"name"`
- Email string `json:"email"`
-}
-
-// In-memory storage (used when DATABASE_NAME is not set)
-var users = []User{
- {ID: 1, Name: "Alice", Email: "alice@example.com", CreatedAt: time.Now()},
- {ID: 2, Name: "Bob", Email: "bob@example.com", CreatedAt: time.Now()},
- {ID: 3, Name: "Charlie", Email: "charlie@example.com", CreatedAt: time.Now()},
-}
-var nextID = 4
-
-// Environment variables
-var (
- databaseName = os.Getenv("DATABASE_NAME")
- gatewayURL = os.Getenv("GATEWAY_URL")
- apiKey = os.Getenv("API_KEY")
-)
-
-// executeSQL executes a SQL query against the hosted SQLite database
-func executeSQL(query string, args ...interface{}) ([]map[string]interface{}, error) {
- if databaseName == "" || gatewayURL == "" {
- return nil, fmt.Errorf("database not configured")
- }
-
- // Build the query with parameters
- // Gateway expects: database_name, query (not sql), params
- reqBody := map[string]interface{}{
- "database_name": databaseName,
- "query": query,
- "params": args,
- }
- bodyBytes, _ := json.Marshal(reqBody)
-
- // Gateway endpoint is /v1/db/sqlite/query (not /v1/db/{name}/query)
- url := fmt.Sprintf("%s/v1/db/sqlite/query", gatewayURL)
- req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyBytes))
- if err != nil {
- return nil, err
- }
- req.Header.Set("Content-Type", "application/json")
- if apiKey != "" {
- req.Header.Set("Authorization", "Bearer "+apiKey)
- }
-
- client := &http.Client{Timeout: 10 * time.Second}
- resp, err := client.Do(req)
- if err != nil {
- return nil, err
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != http.StatusOK {
- body, _ := io.ReadAll(resp.Body)
- return nil, fmt.Errorf("database error: %s", string(body))
- }
-
- // Gateway returns: columns []string, rows [][]interface{}
- // We need to convert rows to []map[string]interface{}
- var result struct {
- Rows [][]interface{} `json:"rows"`
- Columns []string `json:"columns"`
- Error string `json:"error,omitempty"`
- }
- if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
- return nil, err
- }
-
- if result.Error != "" {
- return nil, fmt.Errorf("query error: %s", result.Error)
- }
-
- // Convert [][]interface{} to []map[string]interface{}
- rows := make([]map[string]interface{}, 0, len(result.Rows))
- for _, row := range result.Rows {
- rowMap := make(map[string]interface{})
- for i, col := range result.Columns {
- if i < len(row) {
- rowMap[col] = row[i]
- }
- }
- rows = append(rows, rowMap)
- }
-
- return rows, nil
-}
-
-// initDatabase creates the users table if it doesn't exist
-func initDatabase() error {
- if databaseName == "" || gatewayURL == "" {
- log.Printf("DATABASE_NAME or GATEWAY_URL not set, using in-memory storage")
- return nil
- }
-
- query := `CREATE TABLE IF NOT EXISTS users (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- name TEXT NOT NULL,
- email TEXT NOT NULL,
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP
- )`
-
- _, err := executeSQL(query)
- if err != nil {
- // Log but don't fail - the table might already exist
- log.Printf("Warning: Could not create users table: %v", err)
- } else {
- log.Printf("Users table initialized")
- }
- return nil
-}
-
-func healthHandler(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(HealthResponse{
- Status: "healthy",
- Timestamp: time.Now(),
- Service: "go-backend-test",
- DatabaseName: databaseName,
- GatewayURL: gatewayURL,
- })
-}
-
-func usersHandler(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "application/json")
-
- // Check if database is configured
- useDatabase := databaseName != "" && gatewayURL != ""
-
- switch r.Method {
- case http.MethodGet:
- if useDatabase {
- // Query from hosted SQLite
- rows, err := executeSQL("SELECT id, name, email, created_at FROM users ORDER BY id")
- if err != nil {
- log.Printf("Database query error: %v", err)
- http.Error(w, "Database error", http.StatusInternalServerError)
- return
- }
-
- var dbUsers []User
- for _, row := range rows {
- user := User{
- ID: int(row["id"].(float64)),
- Name: row["name"].(string),
- Email: row["email"].(string),
- }
- if ct, ok := row["created_at"].(string); ok {
- user.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", ct)
- }
- dbUsers = append(dbUsers, user)
- }
-
- json.NewEncoder(w).Encode(UsersResponse{
- Users: dbUsers,
- Total: len(dbUsers),
- })
- } else {
- // Use in-memory storage
- json.NewEncoder(w).Encode(UsersResponse{
- Users: users,
- Total: len(users),
- })
- }
-
- case http.MethodPost:
- var req CreateUserRequest
- if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
- http.Error(w, "Invalid request body", http.StatusBadRequest)
- return
- }
-
- if req.Name == "" || req.Email == "" {
- http.Error(w, "Name and email are required", http.StatusBadRequest)
- return
- }
-
- if useDatabase {
- // Insert into hosted SQLite
- _, err := executeSQL("INSERT INTO users (name, email) VALUES (?, ?)", req.Name, req.Email)
- if err != nil {
- log.Printf("Database insert error: %v", err)
- http.Error(w, "Database error", http.StatusInternalServerError)
- return
- }
-
- // Get the inserted user (last insert ID)
- rows, err := executeSQL("SELECT id, name, email, created_at FROM users WHERE name = ? AND email = ? ORDER BY id DESC LIMIT 1", req.Name, req.Email)
- if err != nil || len(rows) == 0 {
- http.Error(w, "Failed to retrieve created user", http.StatusInternalServerError)
- return
- }
-
- newUser := User{
- ID: int(rows[0]["id"].(float64)),
- Name: rows[0]["name"].(string),
- Email: rows[0]["email"].(string),
- }
- if ct, ok := rows[0]["created_at"].(string); ok {
- newUser.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", ct)
- }
-
- w.WriteHeader(http.StatusCreated)
- json.NewEncoder(w).Encode(map[string]interface{}{
- "success": true,
- "user": newUser,
- })
- } else {
- // Use in-memory storage
- newUser := User{
- ID: nextID,
- Name: req.Name,
- Email: req.Email,
- CreatedAt: time.Now(),
- }
- nextID++
- users = append(users, newUser)
-
- w.WriteHeader(http.StatusCreated)
- json.NewEncoder(w).Encode(map[string]interface{}{
- "success": true,
- "user": newUser,
- })
- }
-
- case http.MethodDelete:
- // Parse user ID from query string (e.g., /api/users?id=1)
- idStr := r.URL.Query().Get("id")
- if idStr == "" {
- http.Error(w, "User ID required", http.StatusBadRequest)
- return
- }
-
- var id int
- fmt.Sscanf(idStr, "%d", &id)
-
- if useDatabase {
- _, err := executeSQL("DELETE FROM users WHERE id = ?", id)
- if err != nil {
- log.Printf("Database delete error: %v", err)
- http.Error(w, "Database error", http.StatusInternalServerError)
- return
- }
- } else {
- // Delete from in-memory storage
- for i, u := range users {
- if u.ID == id {
- users = append(users[:i], users[i+1:]...)
- break
- }
- }
- }
-
- json.NewEncoder(w).Encode(map[string]interface{}{
- "success": true,
- "message": "User deleted",
- })
-
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-Type", "application/json")
-
- storageType := "in-memory"
- if databaseName != "" && gatewayURL != "" {
- storageType = "hosted-sqlite"
- }
-
- json.NewEncoder(w).Encode(map[string]interface{}{
- "message": "Orama Network Go Backend Test",
- "version": "1.0.0",
- "storage": storageType,
- "endpoints": map[string]string{
- "health": "GET /health",
- "users": "GET/POST/DELETE /api/users",
- },
- "config": map[string]string{
- "database_name": maskIfSet(databaseName),
- "gateway_url": maskIfSet(gatewayURL),
- },
- })
-}
-
-func maskIfSet(s string) string {
- if s == "" {
- return "[not configured]"
- }
- if strings.Contains(s, "://") {
- // Mask URL partially
- return s[:strings.Index(s, "://")+3] + "..."
- }
- return "[configured]"
-}
-
-func main() {
- port := os.Getenv("PORT")
- if port == "" {
- port = "8080"
- }
-
- // Initialize database if configured
- if err := initDatabase(); err != nil {
- log.Printf("Warning: Database initialization failed: %v", err)
- }
-
- http.HandleFunc("/", rootHandler)
- http.HandleFunc("/health", healthHandler)
- http.HandleFunc("/api/users", usersHandler)
-
- log.Printf("Starting Go backend on port %s", port)
- log.Printf("Database: %s", maskIfSet(databaseName))
- log.Printf("Gateway: %s", maskIfSet(gatewayURL))
- log.Fatal(http.ListenAndServe(":"+port, nil))
-}
diff --git a/testdata/apps/nextjs-ssr/next.config.js b/testdata/apps/nextjs-app/next.config.js
similarity index 100%
rename from testdata/apps/nextjs-ssr/next.config.js
rename to testdata/apps/nextjs-app/next.config.js
diff --git a/testdata/apps/nextjs-ssr/package-lock.json b/testdata/apps/nextjs-app/package-lock.json
similarity index 82%
rename from testdata/apps/nextjs-ssr/package-lock.json
rename to testdata/apps/nextjs-app/package-lock.json
index 582b4fe..733dd9b 100644
--- a/testdata/apps/nextjs-ssr/package-lock.json
+++ b/testdata/apps/nextjs-app/package-lock.json
@@ -1,22 +1,16 @@
{
- "name": "nextjs-ssr-test",
+ "name": "test-nextjs-ssr",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "nextjs-ssr-test",
+ "name": "test-nextjs-ssr",
"version": "1.0.0",
"dependencies": {
- "next": "^14.0.4",
+ "next": "^14.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
- },
- "devDependencies": {
- "@types/node": "^20",
- "@types/react": "^18",
- "@types/react-dom": "^18",
- "typescript": "^5"
}
},
"node_modules/@next/env": {
@@ -185,45 +179,6 @@
"tslib": "^2.4.0"
}
},
- "node_modules/@types/node": {
- "version": "20.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz",
- "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.15",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
- "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "18.3.27",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
- "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.2.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.7",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
- "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
"node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -236,9 +191,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001765",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz",
- "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==",
+ "version": "1.0.30001766",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz",
+ "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==",
"funding": [
{
"type": "opencollective",
@@ -261,13 +216,6 @@
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
"license": "MIT"
},
- "node_modules/csstype": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -475,27 +423,6 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
- },
- "node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
}
}
}
diff --git a/testdata/apps/nextjs-app/package.json b/testdata/apps/nextjs-app/package.json
new file mode 100644
index 0000000..da379b5
--- /dev/null
+++ b/testdata/apps/nextjs-app/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "test-nextjs-ssr",
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start"
+ },
+ "dependencies": {
+ "next": "^14.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ }
+}
diff --git a/testdata/apps/nextjs-app/pages/index.js b/testdata/apps/nextjs-app/pages/index.js
new file mode 100644
index 0000000..e627d16
--- /dev/null
+++ b/testdata/apps/nextjs-app/pages/index.js
@@ -0,0 +1,62 @@
+export async function getServerSideProps() {
+ const goApiUrl = process.env.GO_API_URL || 'http://localhost:8080'
+ let notes = []
+ let error = null
+
+ try {
+ const res = await fetch(`${goApiUrl}/api/notes`)
+ notes = await res.json()
+ } catch (err) {
+ error = err.message
+ }
+
+ return {
+ props: {
+ notes,
+ error,
+ fetchedAt: new Date().toISOString(),
+ goApiUrl,
+ },
+ }
+}
+
+export default function Home({ notes, error, fetchedAt, goApiUrl }) {
+ return (
+
+
DeBros Notes (SSR)
+
+ Next.js SSR + Go API + SQLite
+
+
+ Server-side fetched at: {fetchedAt} from {goApiUrl}
+
+
+ {error &&
Error: {error}
}
+
+ {notes.length === 0 ? (
+
No notes yet. Add some via the Go API or React app.
+ ) : (
+ notes.map((n) => (
+
+
{n.title}
+
{n.content}
+
{n.created_at}
+
+ ))
+ )}
+
+
+ This page is server-side rendered on every request.
+ Refresh to see new notes added from other apps.
+
+
+ )
+}
diff --git a/testdata/apps/nextjs-ssr/app/api/data/route.ts b/testdata/apps/nextjs-ssr/app/api/data/route.ts
deleted file mode 100644
index 9bec71e..0000000
--- a/testdata/apps/nextjs-ssr/app/api/data/route.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { NextResponse } from 'next/server'
-
-export async function GET() {
- return NextResponse.json({
- users: [
- { id: 1, name: 'Alice', email: 'alice@example.com' },
- { id: 2, name: 'Bob', email: 'bob@example.com' },
- { id: 3, name: 'Charlie', email: 'charlie@example.com' }
- ],
- total: 3,
- timestamp: new Date().toISOString()
- })
-}
-
-export async function POST(request: Request) {
- const body = await request.json()
-
- return NextResponse.json({
- success: true,
- created: {
- id: 4,
- ...body,
- createdAt: new Date().toISOString()
- }
- }, { status: 201 })
-}
diff --git a/testdata/apps/nextjs-ssr/app/api/hello/route.ts b/testdata/apps/nextjs-ssr/app/api/hello/route.ts
deleted file mode 100644
index f3f07a8..0000000
--- a/testdata/apps/nextjs-ssr/app/api/hello/route.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { NextResponse } from 'next/server'
-
-export async function GET() {
- return NextResponse.json({
- message: 'Hello from Orama Network!',
- timestamp: new Date().toISOString(),
- service: 'nextjs-ssr-test'
- })
-}
diff --git a/testdata/apps/nextjs-ssr/app/globals.css b/testdata/apps/nextjs-ssr/app/globals.css
deleted file mode 100644
index 6d10315..0000000
--- a/testdata/apps/nextjs-ssr/app/globals.css
+++ /dev/null
@@ -1,72 +0,0 @@
-* {
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-html,
-body {
- max-width: 100vw;
- overflow-x: hidden;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
- sans-serif;
- background-color: #f5f5f5;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 2rem;
-}
-
-h1 {
- font-size: 3rem;
- color: #333;
- margin-bottom: 1rem;
-}
-
-.test-marker {
- font-size: 1.2rem;
- color: #666;
- margin-bottom: 2rem;
-}
-
-.card {
- background: white;
- border-radius: 8px;
- padding: 2rem;
- margin: 2rem 0;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
-}
-
-.api-test {
- background: #f9f9f9;
- border-radius: 8px;
- padding: 1.5rem;
- margin: 2rem 0;
-}
-
-.api-test ul {
- list-style: none;
- padding-left: 0;
-}
-
-.api-test li {
- margin: 0.5rem 0;
-}
-
-.api-test a {
- color: #0070f3;
- text-decoration: none;
-}
-
-.api-test a:hover {
- text-decoration: underline;
-}
-
-.version {
- margin-top: 2rem;
- color: #999;
- font-size: 0.9rem;
-}
diff --git a/testdata/apps/nextjs-ssr/app/layout.tsx b/testdata/apps/nextjs-ssr/app/layout.tsx
deleted file mode 100644
index 708d9e8..0000000
--- a/testdata/apps/nextjs-ssr/app/layout.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import type { Metadata } from 'next'
-import './globals.css'
-
-export const metadata: Metadata = {
- title: 'Orama Network Next.js Test',
- description: 'E2E testing for Next.js SSR deployments',
-}
-
-export default function RootLayout({
- children,
-}: {
- children: React.ReactNode
-}) {
- return (
-
- {children}
-
- )
-}
diff --git a/testdata/apps/nextjs-ssr/app/page.tsx b/testdata/apps/nextjs-ssr/app/page.tsx
deleted file mode 100644
index 7642944..0000000
--- a/testdata/apps/nextjs-ssr/app/page.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-export default function Home() {
- return (
-
- Orama Network Next.js Test
-
- E2E Testing - Next.js SSR Deployment
-
-
-
Server-Side Rendering Test
-
This page is rendered on the server.
-
Current time: {new Date().toISOString()}
-
-
- Version: 1.0.0
-
- )
-}
diff --git a/testdata/apps/nextjs-ssr/next-env.d.ts b/testdata/apps/nextjs-ssr/next-env.d.ts
deleted file mode 100644
index 40c3d68..0000000
--- a/testdata/apps/nextjs-ssr/next-env.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-///
-///
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
diff --git a/testdata/apps/nextjs-ssr/package.json b/testdata/apps/nextjs-ssr/package.json
deleted file mode 100644
index e82a2d5..0000000
--- a/testdata/apps/nextjs-ssr/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "nextjs-ssr-test",
- "version": "1.0.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start"
- },
- "dependencies": {
- "next": "^14.0.4",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "@types/node": "^20",
- "@types/react": "^18",
- "@types/react-dom": "^18",
- "typescript": "^5"
- }
-}
diff --git a/testdata/apps/nextjs-ssr/tsconfig.json b/testdata/apps/nextjs-ssr/tsconfig.json
deleted file mode 100644
index d8b9323..0000000
--- a/testdata/apps/nextjs-ssr/tsconfig.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2017",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/*": ["./*"]
- }
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
-}
diff --git a/testdata/apps/node-api/index.js b/testdata/apps/node-api/index.js
new file mode 100644
index 0000000..7a8bedd
--- /dev/null
+++ b/testdata/apps/node-api/index.js
@@ -0,0 +1,62 @@
+const http = require('http');
+
+const GO_API_URL = process.env.GO_API_URL || 'http://localhost:8080';
+const PORT = process.env.PORT || 3000;
+
+async function fetchJSON(url, options = {}) {
+ const resp = await fetch(url, options);
+ return resp.json();
+}
+
+const server = http.createServer(async (req, res) => {
+ // CORS is handled by the gateway — don't set headers here to avoid duplicates
+ res.setHeader('Content-Type', 'application/json');
+
+ if (req.url === '/health') {
+ res.end(JSON.stringify({ status: 'ok', service: 'node-api', go_api: GO_API_URL }));
+ return;
+ }
+
+ if (req.url === '/api/notes' && req.method === 'GET') {
+ try {
+ const notes = await fetchJSON(`${GO_API_URL}/api/notes`);
+ res.end(JSON.stringify({
+ notes,
+ fetched_at: new Date().toISOString(),
+ source: 'nodejs-proxy',
+ go_api: GO_API_URL,
+ }));
+ } catch (err) {
+ res.writeHead(502);
+ res.end(JSON.stringify({ error: 'Failed to reach Go API', details: err.message }));
+ }
+ return;
+ }
+
+ if (req.url === '/api/notes' && req.method === 'POST') {
+ let body = '';
+ req.on('data', chunk => body += chunk);
+ req.on('end', async () => {
+ try {
+ const result = await fetchJSON(`${GO_API_URL}/api/notes`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body,
+ });
+ res.writeHead(201);
+ res.end(JSON.stringify(result));
+ } catch (err) {
+ res.writeHead(502);
+ res.end(JSON.stringify({ error: 'Failed to reach Go API', details: err.message }));
+ }
+ });
+ return;
+ }
+
+ res.writeHead(404);
+ res.end(JSON.stringify({ error: 'not found' }));
+});
+
+server.listen(PORT, () => {
+ console.log(`Node API listening on :${PORT}, proxying to ${GO_API_URL}`);
+});
diff --git a/testdata/apps/node-api/package-lock.json b/testdata/apps/node-api/package-lock.json
new file mode 100644
index 0000000..018ceb3
--- /dev/null
+++ b/testdata/apps/node-api/package-lock.json
@@ -0,0 +1,12 @@
+{
+ "name": "test-node-api",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "test-node-api",
+ "version": "1.0.0"
+ }
+ }
+}
diff --git a/testdata/apps/nodejs-backend/package.json b/testdata/apps/node-api/package.json
similarity index 60%
rename from testdata/apps/nodejs-backend/package.json
rename to testdata/apps/node-api/package.json
index 3cbe08d..76f4c76 100644
--- a/testdata/apps/nodejs-backend/package.json
+++ b/testdata/apps/node-api/package.json
@@ -1,9 +1,8 @@
{
- "name": "nodejs-backend-test",
+ "name": "test-node-api",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
- },
- "dependencies": {}
+ }
}
diff --git a/testdata/apps/nodejs-api/index.js b/testdata/apps/nodejs-api/index.js
deleted file mode 100644
index a4ec42c..0000000
--- a/testdata/apps/nodejs-api/index.js
+++ /dev/null
@@ -1,136 +0,0 @@
-const express = require('express');
-const app = express();
-
-const PORT = process.env.PORT || 3000;
-const DATABASE_NAME = process.env.DATABASE_NAME || '';
-const GATEWAY_URL = process.env.GATEWAY_URL || 'http://localhost:6001';
-const API_KEY = process.env.API_KEY || '';
-
-// In-memory storage for simple tests
-let items = [
- { id: 1, name: 'Item 1', description: 'First item' },
- { id: 2, name: 'Item 2', description: 'Second item' }
-];
-let nextId = 3;
-
-app.use(express.json());
-
-// Health check
-app.get('/health', (req, res) => {
- res.json({
- status: 'healthy',
- timestamp: new Date().toISOString(),
- service: 'nodejs-api-test',
- config: {
- port: PORT,
- databaseName: DATABASE_NAME ? '[configured]' : '[not configured]',
- gatewayUrl: GATEWAY_URL
- }
- });
-});
-
-// Root endpoint
-app.get('/', (req, res) => {
- res.json({
- message: 'Orama Network Node.js API Test',
- version: '1.0.0',
- endpoints: {
- health: 'GET /health',
- items: 'GET/POST /api/items',
- item: 'GET/PUT/DELETE /api/items/:id'
- }
- });
-});
-
-// List items
-app.get('/api/items', (req, res) => {
- res.json({
- items: items,
- total: items.length
- });
-});
-
-// Get single item
-app.get('/api/items/:id', (req, res) => {
- const id = parseInt(req.params.id);
- const item = items.find(i => i.id === id);
-
- if (!item) {
- return res.status(404).json({ error: 'Item not found' });
- }
-
- res.json(item);
-});
-
-// Create item
-app.post('/api/items', (req, res) => {
- const { name, description } = req.body;
-
- if (!name) {
- return res.status(400).json({ error: 'Name is required' });
- }
-
- const newItem = {
- id: nextId++,
- name: name,
- description: description || ''
- };
-
- items.push(newItem);
-
- res.status(201).json({
- success: true,
- item: newItem
- });
-});
-
-// Update item
-app.put('/api/items/:id', (req, res) => {
- const id = parseInt(req.params.id);
- const index = items.findIndex(i => i.id === id);
-
- if (index === -1) {
- return res.status(404).json({ error: 'Item not found' });
- }
-
- const { name, description } = req.body;
-
- if (name) items[index].name = name;
- if (description !== undefined) items[index].description = description;
-
- res.json({
- success: true,
- item: items[index]
- });
-});
-
-// Delete item
-app.delete('/api/items/:id', (req, res) => {
- const id = parseInt(req.params.id);
- const index = items.findIndex(i => i.id === id);
-
- if (index === -1) {
- return res.status(404).json({ error: 'Item not found' });
- }
-
- items.splice(index, 1);
-
- res.json({
- success: true,
- message: 'Item deleted'
- });
-});
-
-// Echo endpoint (useful for testing)
-app.post('/api/echo', (req, res) => {
- res.json({
- received: req.body,
- timestamp: new Date().toISOString()
- });
-});
-
-app.listen(PORT, () => {
- console.log(`Node.js API listening on port ${PORT}`);
- console.log(`Database: ${DATABASE_NAME || 'not configured'}`);
- console.log(`Gateway: ${GATEWAY_URL}`);
-});
diff --git a/testdata/apps/nodejs-api/package-lock.json b/testdata/apps/nodejs-api/package-lock.json
deleted file mode 100644
index 3d5bcf5..0000000
--- a/testdata/apps/nodejs-api/package-lock.json
+++ /dev/null
@@ -1,827 +0,0 @@
-{
- "name": "nodejs-api-test",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "nodejs-api-test",
- "version": "1.0.0",
- "dependencies": {
- "express": "^4.18.2"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "license": "MIT"
- },
- "node_modules/body-parser": {
- "version": "1.20.4",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
- "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "~1.2.0",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.4.24",
- "on-finished": "~2.4.1",
- "qs": "~6.14.0",
- "raw-body": "~2.5.3",
- "type-is": "~1.6.18",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
- "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "license": "MIT"
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
- "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "~1.20.3",
- "content-disposition": "~0.5.4",
- "content-type": "~1.0.4",
- "cookie": "~0.7.1",
- "cookie-signature": "~1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.3.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.0",
- "merge-descriptors": "1.0.3",
- "methods": "~1.1.2",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "~0.1.12",
- "proxy-addr": "~2.0.7",
- "qs": "~6.14.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "~0.19.0",
- "serve-static": "~1.16.2",
- "setprototypeof": "1.2.0",
- "statuses": "~2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
- "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "~2.0.2",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
- "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
- "license": "MIT",
- "dependencies": {
- "depd": "~2.0.0",
- "inherits": "~2.0.4",
- "setprototypeof": "~1.2.0",
- "statuses": "~2.0.2",
- "toidentifier": "~1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "license": "ISC"
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "license": "MIT"
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
- "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.4.24",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "node_modules/send": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
- "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.1",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "~2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "~2.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/serve-static": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
- "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
- "license": "MIT",
- "dependencies": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "~0.19.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "license": "ISC"
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "license": "MIT",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- }
- }
-}
diff --git a/testdata/apps/nodejs-api/package.json b/testdata/apps/nodejs-api/package.json
deleted file mode 100644
index 460d6d0..0000000
--- a/testdata/apps/nodejs-api/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "name": "nodejs-api-test",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "start": "node index.js"
- },
- "dependencies": {
- "express": "^4.18.2"
- }
-}
diff --git a/testdata/apps/nodejs-backend/index.js b/testdata/apps/nodejs-backend/index.js
deleted file mode 100644
index 1600d5b..0000000
--- a/testdata/apps/nodejs-backend/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const http = require('http');
-
-const PORT = process.env.PORT || 3000;
-
-const server = http.createServer((req, res) => {
- const url = req.url;
-
- if (url === '/health' || url === '/health/') {
- res.writeHead(200, { 'Content-Type': 'application/json' });
- res.end(JSON.stringify({
- status: 'healthy',
- timestamp: new Date().toISOString(),
- service: 'nodejs-backend-test'
- }));
- return;
- }
-
- if (url === '/' || url === '/api') {
- res.writeHead(200, { 'Content-Type': 'application/json' });
- res.end(JSON.stringify({
- message: 'Hello from Node.js backend!',
- timestamp: new Date().toISOString(),
- environment: {
- port: PORT,
- nodeVersion: process.version
- }
- }));
- return;
- }
-
- res.writeHead(404, { 'Content-Type': 'application/json' });
- res.end(JSON.stringify({ error: 'Not found' }));
-});
-
-server.listen(PORT, () => {
- console.log(`Node.js backend listening on port ${PORT}`);
-});
diff --git a/testdata/apps/react-app/index.html b/testdata/apps/react-app/index.html
new file mode 100644
index 0000000..787660b
--- /dev/null
+++ b/testdata/apps/react-app/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ DeBros Notes
+
+
+
+
+
+
diff --git a/testdata/apps/react-vite/package-lock.json b/testdata/apps/react-app/package-lock.json
similarity index 85%
rename from testdata/apps/react-vite/package-lock.json
rename to testdata/apps/react-app/package-lock.json
index 67673e3..38212b7 100644
--- a/testdata/apps/react-vite/package-lock.json
+++ b/testdata/apps/react-app/package-lock.json
@@ -1,21 +1,19 @@
{
- "name": "react-vite-test",
+ "name": "test-react-app",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "react-vite-test",
+ "name": "test-react-app",
"version": "1.0.0",
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
- "@types/react": "^18.2.43",
- "@types/react-dom": "^18.2.17",
- "@vitejs/plugin-react": "^4.2.1",
- "vite": "^5.0.8"
+ "@vitejs/plugin-react": "^4.2.0",
+ "vite": "^5.0.0"
}
},
"node_modules/@babel/code-frame": {
@@ -750,9 +748,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz",
- "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz",
+ "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==",
"cpu": [
"arm"
],
@@ -764,9 +762,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz",
- "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz",
+ "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==",
"cpu": [
"arm64"
],
@@ -778,9 +776,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz",
- "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz",
+ "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==",
"cpu": [
"arm64"
],
@@ -792,9 +790,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz",
- "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz",
+ "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==",
"cpu": [
"x64"
],
@@ -806,9 +804,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz",
- "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz",
+ "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==",
"cpu": [
"arm64"
],
@@ -820,9 +818,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz",
- "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz",
+ "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==",
"cpu": [
"x64"
],
@@ -834,9 +832,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz",
- "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz",
+ "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==",
"cpu": [
"arm"
],
@@ -848,9 +846,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz",
- "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz",
+ "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==",
"cpu": [
"arm"
],
@@ -862,9 +860,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz",
- "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz",
+ "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==",
"cpu": [
"arm64"
],
@@ -876,9 +874,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz",
- "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz",
+ "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==",
"cpu": [
"arm64"
],
@@ -890,9 +888,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz",
- "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz",
+ "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==",
"cpu": [
"loong64"
],
@@ -904,9 +902,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz",
- "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz",
+ "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==",
"cpu": [
"loong64"
],
@@ -918,9 +916,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz",
- "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz",
+ "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==",
"cpu": [
"ppc64"
],
@@ -932,9 +930,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz",
- "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz",
+ "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==",
"cpu": [
"ppc64"
],
@@ -946,9 +944,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz",
- "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz",
+ "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==",
"cpu": [
"riscv64"
],
@@ -960,9 +958,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz",
- "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz",
+ "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==",
"cpu": [
"riscv64"
],
@@ -974,9 +972,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz",
- "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz",
+ "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==",
"cpu": [
"s390x"
],
@@ -988,9 +986,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz",
- "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==",
"cpu": [
"x64"
],
@@ -1002,9 +1000,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz",
- "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz",
+ "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==",
"cpu": [
"x64"
],
@@ -1016,9 +1014,9 @@
]
},
"node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz",
- "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz",
+ "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==",
"cpu": [
"x64"
],
@@ -1030,9 +1028,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz",
- "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz",
+ "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==",
"cpu": [
"arm64"
],
@@ -1044,9 +1042,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz",
- "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz",
+ "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==",
"cpu": [
"arm64"
],
@@ -1058,9 +1056,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz",
- "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz",
+ "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==",
"cpu": [
"ia32"
],
@@ -1072,9 +1070,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz",
- "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==",
"cpu": [
"x64"
],
@@ -1086,9 +1084,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz",
- "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz",
+ "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==",
"cpu": [
"x64"
],
@@ -1151,35 +1149,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/prop-types": {
- "version": "15.7.15",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
- "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "18.3.27",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
- "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.2.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.7",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
- "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
"node_modules/@vitejs/plugin-react": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
@@ -1202,9 +1171,9 @@
}
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.17",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz",
- "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==",
+ "version": "2.9.19",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1247,9 +1216,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001765",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz",
- "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==",
+ "version": "1.0.30001766",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz",
+ "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==",
"dev": true,
"funding": [
{
@@ -1274,13 +1243,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/csstype": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -1300,9 +1262,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.277",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz",
- "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==",
+ "version": "1.5.279",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.279.tgz",
+ "integrity": "sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==",
"dev": true,
"license": "ISC"
},
@@ -1540,9 +1502,9 @@
}
},
"node_modules/rollup": {
- "version": "4.56.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz",
- "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==",
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz",
+ "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1556,31 +1518,31 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.56.0",
- "@rollup/rollup-android-arm64": "4.56.0",
- "@rollup/rollup-darwin-arm64": "4.56.0",
- "@rollup/rollup-darwin-x64": "4.56.0",
- "@rollup/rollup-freebsd-arm64": "4.56.0",
- "@rollup/rollup-freebsd-x64": "4.56.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.56.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.56.0",
- "@rollup/rollup-linux-arm64-gnu": "4.56.0",
- "@rollup/rollup-linux-arm64-musl": "4.56.0",
- "@rollup/rollup-linux-loong64-gnu": "4.56.0",
- "@rollup/rollup-linux-loong64-musl": "4.56.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.56.0",
- "@rollup/rollup-linux-ppc64-musl": "4.56.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.56.0",
- "@rollup/rollup-linux-riscv64-musl": "4.56.0",
- "@rollup/rollup-linux-s390x-gnu": "4.56.0",
- "@rollup/rollup-linux-x64-gnu": "4.56.0",
- "@rollup/rollup-linux-x64-musl": "4.56.0",
- "@rollup/rollup-openbsd-x64": "4.56.0",
- "@rollup/rollup-openharmony-arm64": "4.56.0",
- "@rollup/rollup-win32-arm64-msvc": "4.56.0",
- "@rollup/rollup-win32-ia32-msvc": "4.56.0",
- "@rollup/rollup-win32-x64-gnu": "4.56.0",
- "@rollup/rollup-win32-x64-msvc": "4.56.0",
+ "@rollup/rollup-android-arm-eabi": "4.57.0",
+ "@rollup/rollup-android-arm64": "4.57.0",
+ "@rollup/rollup-darwin-arm64": "4.57.0",
+ "@rollup/rollup-darwin-x64": "4.57.0",
+ "@rollup/rollup-freebsd-arm64": "4.57.0",
+ "@rollup/rollup-freebsd-x64": "4.57.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.57.0",
+ "@rollup/rollup-linux-arm64-musl": "4.57.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.57.0",
+ "@rollup/rollup-linux-loong64-musl": "4.57.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.57.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.57.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-musl": "4.57.0",
+ "@rollup/rollup-openbsd-x64": "4.57.0",
+ "@rollup/rollup-openharmony-arm64": "4.57.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.57.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.57.0",
+ "@rollup/rollup-win32-x64-gnu": "4.57.0",
+ "@rollup/rollup-win32-x64-msvc": "4.57.0",
"fsevents": "~2.3.2"
}
},
diff --git a/testdata/apps/react-app/package.json b/testdata/apps/react-app/package.json
new file mode 100644
index 0000000..603f35a
--- /dev/null
+++ b/testdata/apps/react-app/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "test-react-app",
+ "version": "1.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build"
+ },
+ "dependencies": {
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react": "^4.2.0",
+ "vite": "^5.0.0"
+ }
+}
diff --git a/testdata/apps/react-app/src/App.jsx b/testdata/apps/react-app/src/App.jsx
new file mode 100644
index 0000000..a425759
--- /dev/null
+++ b/testdata/apps/react-app/src/App.jsx
@@ -0,0 +1,84 @@
+import React, { useState, useEffect } from 'react'
+
+const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000'
+
+export default function App() {
+ const [notes, setNotes] = useState([])
+ const [title, setTitle] = useState('')
+ const [content, setContent] = useState('')
+ const [meta, setMeta] = useState(null)
+ const [error, setError] = useState(null)
+
+ async function fetchNotes() {
+ try {
+ const res = await fetch(`${API_URL}/api/notes`)
+ const data = await res.json()
+ setNotes(data.notes || [])
+ setMeta({ fetched_at: data.fetched_at, source: data.source })
+ setError(null)
+ } catch (err) {
+ setError(err.message)
+ }
+ }
+
+ useEffect(() => { fetchNotes() }, [])
+
+ async function addNote(e) {
+ e.preventDefault()
+ if (!title.trim()) return
+ await fetch(`${API_URL}/api/notes`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ title, content }),
+ })
+ setTitle('')
+ setContent('')
+ fetchNotes()
+ }
+
+ return (
+
+
DeBros Notes
+
+ React Static + Node.js Proxy + Go API + SQLite
+
+ {meta && (
+
+ Source: {meta.source} | Fetched: {meta.fetched_at}
+
+ )}
+ {error &&
Error: {error}
}
+
+
+
+ {notes.length === 0 ? (
+
No notes yet.
+ ) : (
+ notes.map(n => (
+
+
{n.title}
+
{n.content}
+
{n.created_at}
+
+ ))
+ )}
+
+ )
+}
diff --git a/testdata/apps/react-app/src/main.jsx b/testdata/apps/react-app/src/main.jsx
new file mode 100644
index 0000000..3d9f9f9
--- /dev/null
+++ b/testdata/apps/react-app/src/main.jsx
@@ -0,0 +1,5 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import App from './App'
+
+ReactDOM.createRoot(document.getElementById('root')).render()
diff --git a/testdata/apps/react-vite/vite.config.js b/testdata/apps/react-app/vite.config.js
similarity index 70%
rename from testdata/apps/react-vite/vite.config.js
rename to testdata/apps/react-app/vite.config.js
index d6e6a0a..9ffcc67 100644
--- a/testdata/apps/react-vite/vite.config.js
+++ b/testdata/apps/react-app/vite.config.js
@@ -3,8 +3,4 @@ import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
- build: {
- outDir: 'dist',
- emptyOutDir: true
- }
})
diff --git a/testdata/apps/react-vite/index.html b/testdata/apps/react-vite/index.html
deleted file mode 100644
index b97bbdf..0000000
--- a/testdata/apps/react-vite/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- Orama Network Test App
-
-
-
-
-
-
diff --git a/testdata/apps/react-vite/package.json b/testdata/apps/react-vite/package.json
deleted file mode 100644
index f1bdf29..0000000
--- a/testdata/apps/react-vite/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "react-vite-test",
- "private": true,
- "version": "1.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview"
- },
- "dependencies": {
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "@types/react": "^18.2.43",
- "@types/react-dom": "^18.2.17",
- "@vitejs/plugin-react": "^4.2.1",
- "vite": "^5.0.8"
- }
-}
diff --git a/testdata/apps/react-vite/src/App.css b/testdata/apps/react-vite/src/App.css
deleted file mode 100644
index 2e1f43d..0000000
--- a/testdata/apps/react-vite/src/App.css
+++ /dev/null
@@ -1,48 +0,0 @@
-.app-container {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
- color: #646cff;
-}
-
-.test-marker {
- font-size: 1.2em;
- color: #888;
- margin: 1rem 0;
-}
-
-.card {
- padding: 2em;
- background-color: #f9f9f9;
- border-radius: 8px;
- margin: 2rem 0;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- color: white;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-
-button:hover {
- border-color: #646cff;
-}
-
-.version {
- font-size: 0.9em;
- color: #999;
- margin-top: 2rem;
-}
diff --git a/testdata/apps/react-vite/src/App.jsx b/testdata/apps/react-vite/src/App.jsx
deleted file mode 100644
index a5f0909..0000000
--- a/testdata/apps/react-vite/src/App.jsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useState } from 'react'
-import './App.css'
-
-function App() {
- const [count, setCount] = useState(0)
-
- return (
- <>
-
-
Orama Network Test App
-
- E2E Testing - React Vite Static Deployment
-
-
-
-
- This is a test application for validating static site deployments.
-
-
-
Version: 1.0.0
-
- >
- )
-}
-
-export default App
diff --git a/testdata/apps/react-vite/src/index.css b/testdata/apps/react-vite/src/index.css
deleted file mode 100644
index 5876d1c..0000000
--- a/testdata/apps/react-vite/src/index.css
+++ /dev/null
@@ -1,40 +0,0 @@
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- button {
- background-color: #f9f9f9;
- color: #213547;
- }
-}
diff --git a/testdata/apps/react-vite/src/main.jsx b/testdata/apps/react-vite/src/main.jsx
deleted file mode 100644
index 54b39dd..0000000
--- a/testdata/apps/react-vite/src/main.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react'
-import ReactDOM from 'react-dom/client'
-import App from './App.jsx'
-import './index.css'
-
-ReactDOM.createRoot(document.getElementById('root')).render(
-
-
- ,
-)
diff --git a/testdata/build-fixtures.sh b/testdata/build-fixtures.sh
index aecdea2..8c6e727 100755
--- a/testdata/build-fixtures.sh
+++ b/testdata/build-fixtures.sh
@@ -1,7 +1,7 @@
#!/bin/bash
set -e
-echo "🔨 Building E2E test fixtures..."
+echo "Building E2E test fixtures..."
# Get the directory of this script
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -10,10 +10,10 @@ cd "$SCRIPT_DIR"
# Create tarballs directory
mkdir -p tarballs
-# Build React Vite app
+# Build React app (Vite static)
echo ""
-echo "📦 Building React Vite app..."
-cd apps/react-vite
+echo "Building React app..."
+cd apps/react-app
if [ ! -d "node_modules" ]; then
echo " Installing dependencies..."
npm install
@@ -21,36 +21,47 @@ fi
echo " Building..."
npm run build
echo " Creating tarball..."
-tar -czf "$SCRIPT_DIR/tarballs/react-vite.tar.gz" -C dist .
+tar -czf "$SCRIPT_DIR/tarballs/react-app.tar.gz" -C dist .
cd "$SCRIPT_DIR"
-# Build Next.js app
+# Build Next.js SSR app
echo ""
-echo "📦 Building Next.js app..."
-cd apps/nextjs-ssr
+echo "Building Next.js SSR app..."
+cd apps/nextjs-app
if [ ! -d "node_modules" ]; then
echo " Installing dependencies..."
npm install
fi
echo " Building..."
npm run build
-echo " Creating tarball..."
-tar -czf "$SCRIPT_DIR/tarballs/nextjs-ssr.tar.gz" .next/ package.json next.config.js
+echo " Creating standalone tarball..."
+# Copy static and public into standalone
+cp -r .next/static .next/standalone/.next/static 2>/dev/null || true
+cp -r public .next/standalone/public 2>/dev/null || true
+tar -czf "$SCRIPT_DIR/tarballs/nextjs-app.tar.gz" -C .next/standalone .
cd "$SCRIPT_DIR"
# Build Go backend
echo ""
-echo "📦 Building Go backend..."
-cd apps/go-backend
+echo "Building Go backend..."
+cd apps/go-api
echo " Building Linux binary..."
-make build
+GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o app .
echo " Creating tarball..."
-tar -czf "$SCRIPT_DIR/tarballs/go-backend.tar.gz" api
-make clean
+tar -czf "$SCRIPT_DIR/tarballs/go-api.tar.gz" app
+rm -f app
+cd "$SCRIPT_DIR"
+
+# Build Node.js backend
+echo ""
+echo "Building Node.js backend..."
+cd apps/node-api
+echo " Creating tarball..."
+tar -czf "$SCRIPT_DIR/tarballs/node-api.tar.gz" index.js package.json
cd "$SCRIPT_DIR"
echo ""
-echo "✅ All test fixtures built successfully!"
+echo "All test fixtures built successfully!"
echo ""
echo "Generated tarballs:"
ls -lh tarballs/