| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package core
- import (
- "fmt"
- "net/http"
- "regexp"
- "github.com/dop251/goja"
- )
- func MakeHeadersObject(vm *goja.Runtime, header http.Header) *goja.Object {
- obj := vm.NewObject()
- obj.Set("get", func(name string) string {
- return header.Get(name)
- })
- obj.Set("gets", func(name string) []string {
- return header.Values(name)
- })
- obj.Set("values", func(name string) []string {
- return header.Values(name)
- })
- obj.Set("cookie", func(name string) string {
- for _, v := range header.Values("Set-Cookie") {
- res := regexp.MustCompile(fmt.Sprintf("%s=([^;]+)", name)).FindStringSubmatch(v)
- if len(res) > 0 {
- return res[1]
- }
- }
- return ""
- })
- obj.Set("has", func(name string) bool {
- return header.Get(name) != ""
- })
- obj.Set("set", func(name, value string) {
- header.Set(name, value)
- })
- obj.Set("append", func(name, value string) {
- header.Add(name, value)
- })
- obj.Set("delete", func(name string) {
- header.Del(name)
- })
- obj.Set("keys", func() []string {
- keys := make([]string, 0, len(header))
- for k := range header {
- keys = append(keys, k)
- }
- return keys
- })
- obj.Set("values", func() []string {
- values := make([]string, 0, len(header))
- for _, v := range header {
- values = append(values, v...)
- }
- return values
- })
- obj.Set("entries", func() [][2]string {
- entries := make([][2]string, 0, len(header))
- for k, v := range header {
- for _, value := range v {
- entries = append(entries, [2]string{k, value})
- }
- }
- return entries
- })
- obj.Set("forEach", func(callback func(value, name string)) {
- for k, v := range header {
- for _, value := range v {
- callback(value, k)
- }
- }
- })
- for k, v := range header {
- obj.Set(k, v[0])
- }
- return obj
- }
|