forked from StackExchange/dnscontrol
/
static.go
289 lines (257 loc) · 10.4 KB
/
static.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
// Code generated by "esc "; DO NOT EDIT.
package js
import (
"bytes"
"compress/gzip"
"encoding/base64"
"io/ioutil"
"net/http"
"os"
"path"
"sync"
"time"
)
type _escLocalFS struct{}
var _escLocal _escLocalFS
type _escStaticFS struct{}
var _escStatic _escStaticFS
type _escDirectory struct {
fs http.FileSystem
name string
}
type _escFile struct {
compressed string
size int64
modtime int64
local string
isDir bool
once sync.Once
data []byte
name string
}
func (_escLocalFS) Open(name string) (http.File, error) {
f, present := _escData[path.Clean(name)]
if !present {
return nil, os.ErrNotExist
}
return os.Open(f.local)
}
func (_escStaticFS) prepare(name string) (*_escFile, error) {
f, present := _escData[path.Clean(name)]
if !present {
return nil, os.ErrNotExist
}
var err error
f.once.Do(func() {
f.name = path.Base(name)
if f.size == 0 {
return
}
var gr *gzip.Reader
b64 := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(f.compressed))
gr, err = gzip.NewReader(b64)
if err != nil {
return
}
f.data, err = ioutil.ReadAll(gr)
})
if err != nil {
return nil, err
}
return f, nil
}
func (fs _escStaticFS) Open(name string) (http.File, error) {
f, err := fs.prepare(name)
if err != nil {
return nil, err
}
return f.File()
}
func (dir _escDirectory) Open(name string) (http.File, error) {
return dir.fs.Open(dir.name + name)
}
func (f *_escFile) File() (http.File, error) {
type httpFile struct {
*bytes.Reader
*_escFile
}
return &httpFile{
Reader: bytes.NewReader(f.data),
_escFile: f,
}, nil
}
func (f *_escFile) Close() error {
return nil
}
func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) {
return nil, nil
}
func (f *_escFile) Stat() (os.FileInfo, error) {
return f, nil
}
func (f *_escFile) Name() string {
return f.name
}
func (f *_escFile) Size() int64 {
return f.size
}
func (f *_escFile) Mode() os.FileMode {
return 0
}
func (f *_escFile) ModTime() time.Time {
return time.Unix(f.modtime, 0)
}
func (f *_escFile) IsDir() bool {
return f.isDir
}
func (f *_escFile) Sys() interface{} {
return f
}
// _escFS returns a http.Filesystem for the embedded assets. If useLocal is true,
// the filesystem's contents are instead used.
func _escFS(useLocal bool) http.FileSystem {
if useLocal {
return _escLocal
}
return _escStatic
}
// _escDir returns a http.Filesystem for the embedded assets on a given prefix dir.
// If useLocal is true, the filesystem's contents are instead used.
func _escDir(useLocal bool, name string) http.FileSystem {
if useLocal {
return _escDirectory{fs: _escLocal, name: name}
}
return _escDirectory{fs: _escStatic, name: name}
}
// _escFSByte returns the named file from the embedded assets. If useLocal is
// true, the filesystem's contents are instead used.
func _escFSByte(useLocal bool, name string) ([]byte, error) {
if useLocal {
f, err := _escLocal.Open(name)
if err != nil {
return nil, err
}
b, err := ioutil.ReadAll(f)
_ = f.Close()
return b, err
}
f, err := _escStatic.prepare(name)
if err != nil {
return nil, err
}
return f.data, nil
}
// _escFSMustByte is the same as _escFSByte, but panics if name is not present.
func _escFSMustByte(useLocal bool, name string) []byte {
b, err := _escFSByte(useLocal, name)
if err != nil {
panic(err)
}
return b
}
// _escFSString is the string version of _escFSByte.
func _escFSString(useLocal bool, name string) (string, error) {
b, err := _escFSByte(useLocal, name)
return string(b), err
}
// _escFSMustString is the string version of _escFSMustByte.
func _escFSMustString(useLocal bool, name string) string {
return string(_escFSMustByte(useLocal, name))
}
var _escData = map[string]*_escFile{
"/helpers.js": {
local: "pkg/js/helpers.js",
size: 18525,
modtime: 0,
compressed: `
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
lvpVoO5xbiRY/P8AAAD//54SjJZdSAAA
`,
},
"/": {
isDir: true,
local: "pkg/js",
},
}