detached 717e73e

Refactor Config structure, remove debug logs, update dev dependencies, and adjust affected functions

commit
717e73eb17a2a576f1cb9dd5b68a738375428a6f
author
bnema · · 2023-10-12 12:49 UTC
parent
45f9b86
signature
unsigned
4 files · +999 -16
M internal/app/app.go +12 -14
@@ -28,9 +28,9 @@ type App struct {
2828 DBPath string
2929 InitialChecksum string
3030 DB *sql.DB
31- Config AppConfig
31+ Config Config
3232 }
33-type AppConfig struct {
33+type Config struct {
3434 General GeneralConfig `yaml:"General"`
3535 Http HttpConfig `yaml:"Http"`
3636 Admin AdminConfig `yaml:"Admin"`
@@ -38,10 +38,11 @@ type AppConfig struct {
3838 }
3939
4040 type GeneralConfig struct {
41- RunEnv string
42- BuildDir string
43- BuildVersion string
41+ RunEnv string // come from env
42+ BuildDir string // come from env
43+ BuildVersion string // come from env
4444 StorageDir string `yaml:"storageDir"`
45+ GordonToken string `yaml:"gordonToken"`
4546 }
4647
4748 type HttpConfig struct {
@@ -61,7 +62,7 @@ type ContainerEngineConfig struct {
6162 Network string `yaml:"network"`
6263 }
6364
64-func LoadConfig(config AppConfig) (AppConfig, error) {
65+func LoadConfig(config *Config) (*Config, error) {
6566 // Load env elements
6667 config.General.BuildVersion = os.Getenv("BUILD_VERSION")
6768 config.General.RunEnv = os.Getenv("RUN_ENV")
@@ -72,10 +73,6 @@ func LoadConfig(config AppConfig) (AppConfig, error) {
7273 config.General.RunEnv = "prod"
7374 config.General.BuildDir = "."
7475 }
75-
76- fmt.Printf("RUN_ENV: %s\n", config.General.RunEnv)
77- fmt.Printf("BUILD_DIR: %s\n", config.General.BuildDir)
78-
7976 // Load config file
8077 configFile := fmt.Sprintf("%s/config.yml", config.General.BuildDir)
8178 configData, err := os.ReadFile(configFile)
@@ -93,7 +90,8 @@ func LoadConfig(config AppConfig) (AppConfig, error) {
9390
9491 func NewApp() *App {
9592 // Initialize AppConfig
96- config, err := LoadConfig(AppConfig{})
93+ config := &Config{}
94+ _, err := LoadConfig(config)
9795 if err != nil {
9896 log.Fatalf("Failed to load configuration: %v", err)
9997 }
@@ -119,7 +117,7 @@ func NewApp() *App {
119117 LocYML: bytes,
120118 DBDir: DBDir,
121119 DBFilename: DBFilename,
122- Config: config,
120+ Config: *config,
123121 }
124122
125123 OauthCallbackURL = config.GenerateOauthCallbackURL()
@@ -127,7 +125,7 @@ func NewApp() *App {
127125 }
128126
129127 // NewDockerConfig creates and returns a new Docker client configuration
130-func (config *AppConfig) NewDockerConfig() *docker.Config {
128+func (config *Config) NewDockerConfig() *docker.Config {
131129 if config.ContainerEngine.Podman {
132130 return &docker.Config{
133131 Sock: config.ContainerEngine.PodmanSock,
@@ -141,7 +139,7 @@ func (config *AppConfig) NewDockerConfig() *docker.Config {
141139 }
142140
143141 // GenerateOauthCallbackURL generates the OAuth callback URL
144-func (config *AppConfig) GenerateOauthCallbackURL() string {
142+func (config *Config) GenerateOauthCallbackURL() string {
145143 var scheme, port string
146144
147145 if config.General.RunEnv == "dev" {
@@ -28,9 +28,9 @@ type App struct {
28 DBPath string28 DBPath string
29 InitialChecksum string29 InitialChecksum string
30 DB *sql.DB30 DB *sql.DB
31- Config AppConfig31+ Config Config
32 }32 }
33-type AppConfig struct {33+type Config struct {
34 General GeneralConfig `yaml:"General"`34 General GeneralConfig `yaml:"General"`
35 Http HttpConfig `yaml:"Http"`35 Http HttpConfig `yaml:"Http"`
36 Admin AdminConfig `yaml:"Admin"`36 Admin AdminConfig `yaml:"Admin"`
@@ -38,10 +38,11 @@ type AppConfig struct {
38 }38 }
39 39
40 type GeneralConfig struct {40 type GeneralConfig struct {
41- RunEnv string41+ RunEnv string // come from env
42- BuildDir string42+ BuildDir string // come from env
43- BuildVersion string43+ BuildVersion string // come from env
44 StorageDir string `yaml:"storageDir"`44 StorageDir string `yaml:"storageDir"`
45+ GordonToken string `yaml:"gordonToken"`
45 }46 }
46 47
47 type HttpConfig struct {48 type HttpConfig struct {
@@ -61,7 +62,7 @@ type ContainerEngineConfig struct {
61 Network string `yaml:"network"`62 Network string `yaml:"network"`
62 }63 }
63 64
64-func LoadConfig(config AppConfig) (AppConfig, error) {65+func LoadConfig(config *Config) (*Config, error) {
65 // Load env elements66 // Load env elements
66 config.General.BuildVersion = os.Getenv("BUILD_VERSION")67 config.General.BuildVersion = os.Getenv("BUILD_VERSION")
67 config.General.RunEnv = os.Getenv("RUN_ENV")68 config.General.RunEnv = os.Getenv("RUN_ENV")
@@ -72,10 +73,6 @@ func LoadConfig(config AppConfig) (AppConfig, error) {
72 config.General.RunEnv = "prod"73 config.General.RunEnv = "prod"
73 config.General.BuildDir = "."74 config.General.BuildDir = "."
74 }75 }
75-
76- fmt.Printf("RUN_ENV: %s\n", config.General.RunEnv)
77- fmt.Printf("BUILD_DIR: %s\n", config.General.BuildDir)
78-
79 // Load config file76 // Load config file
80 configFile := fmt.Sprintf("%s/config.yml", config.General.BuildDir)77 configFile := fmt.Sprintf("%s/config.yml", config.General.BuildDir)
81 configData, err := os.ReadFile(configFile)78 configData, err := os.ReadFile(configFile)
@@ -93,7 +90,8 @@ func LoadConfig(config AppConfig) (AppConfig, error) {
93 90
94 func NewApp() *App {91 func NewApp() *App {
95 // Initialize AppConfig92 // Initialize AppConfig
96- config, err := LoadConfig(AppConfig{})93+ config := &Config{}
94+ _, err := LoadConfig(config)
97 if err != nil {95 if err != nil {
98 log.Fatalf("Failed to load configuration: %v", err)96 log.Fatalf("Failed to load configuration: %v", err)
99 }97 }
@@ -119,7 +117,7 @@ func NewApp() *App {
119 LocYML: bytes,117 LocYML: bytes,
120 DBDir: DBDir,118 DBDir: DBDir,
121 DBFilename: DBFilename,119 DBFilename: DBFilename,
122- Config: config,120+ Config: *config,
123 }121 }
124 122
125 OauthCallbackURL = config.GenerateOauthCallbackURL()123 OauthCallbackURL = config.GenerateOauthCallbackURL()
@@ -127,7 +125,7 @@ func NewApp() *App {
127 }125 }
128 126
129 // NewDockerConfig creates and returns a new Docker client configuration127 // NewDockerConfig creates and returns a new Docker client configuration
130-func (config *AppConfig) NewDockerConfig() *docker.Config {128+func (config *Config) NewDockerConfig() *docker.Config {
131 if config.ContainerEngine.Podman {129 if config.ContainerEngine.Podman {
132 return &docker.Config{130 return &docker.Config{
133 Sock: config.ContainerEngine.PodmanSock,131 Sock: config.ContainerEngine.PodmanSock,
@@ -141,7 +139,7 @@ func (config *AppConfig) NewDockerConfig() *docker.Config {
141 }139 }
142 140
143 // GenerateOauthCallbackURL generates the OAuth callback URL141 // GenerateOauthCallbackURL generates the OAuth callback URL
144-func (config *AppConfig) GenerateOauthCallbackURL() string {142+func (config *Config) GenerateOauthCallbackURL() string {
145 var scheme, port string143 var scheme, port string
146 144
147 if config.General.RunEnv == "dev" {145 if config.General.RunEnv == "dev" {
A package-lock.json +983 -0
@@ -0,0 +1,983 @@
1+{
2+ "name": "gordon-echo-0.02",
3+ "lockfileVersion": 3,
4+ "requires": true,
5+ "packages": {
6+ "": {
7+ "devDependencies": {
8+ "@catppuccin/tailwindcss": "^0.1.6",
9+ "prettier": "^3.0.3",
10+ "prettier-plugin-tailwindcss": "^0.5.5",
11+ "tailwindcss": "^3.3.3"
12+ }
13+ },
14+ "node_modules/@alloc/quick-lru": {
15+ "version": "5.2.0",
16+ "dev": true,
17+ "license": "MIT",
18+ "engines": {
19+ "node": ">=10"
20+ },
21+ "funding": {
22+ "url": "https://github.com/sponsors/sindresorhus"
23+ }
24+ },
25+ "node_modules/@catppuccin/tailwindcss": {
26+ "version": "0.1.6",
27+ "dev": true,
28+ "license": "MIT",
29+ "peerDependencies": {
30+ "tailwindcss": ">=3.0.0"
31+ }
32+ },
33+ "node_modules/@jridgewell/gen-mapping": {
34+ "version": "0.3.3",
35+ "dev": true,
36+ "license": "MIT",
37+ "dependencies": {
38+ "@jridgewell/set-array": "^1.0.1",
39+ "@jridgewell/sourcemap-codec": "^1.4.10",
40+ "@jridgewell/trace-mapping": "^0.3.9"
41+ },
42+ "engines": {
43+ "node": ">=6.0.0"
44+ }
45+ },
46+ "node_modules/@jridgewell/resolve-uri": {
47+ "version": "3.1.1",
48+ "dev": true,
49+ "license": "MIT",
50+ "engines": {
51+ "node": ">=6.0.0"
52+ }
53+ },
54+ "node_modules/@jridgewell/set-array": {
55+ "version": "1.1.2",
56+ "dev": true,
57+ "license": "MIT",
58+ "engines": {
59+ "node": ">=6.0.0"
60+ }
61+ },
62+ "node_modules/@jridgewell/sourcemap-codec": {
63+ "version": "1.4.15",
64+ "dev": true,
65+ "license": "MIT"
66+ },
67+ "node_modules/@jridgewell/trace-mapping": {
68+ "version": "0.3.19",
69+ "dev": true,
70+ "license": "MIT",
71+ "dependencies": {
72+ "@jridgewell/resolve-uri": "^3.1.0",
73+ "@jridgewell/sourcemap-codec": "^1.4.14"
74+ }
75+ },
76+ "node_modules/@nodelib/fs.scandir": {
77+ "version": "2.1.5",
78+ "dev": true,
79+ "license": "MIT",
80+ "dependencies": {
81+ "@nodelib/fs.stat": "2.0.5",
82+ "run-parallel": "^1.1.9"
83+ },
84+ "engines": {
85+ "node": ">= 8"
86+ }
87+ },
88+ "node_modules/@nodelib/fs.stat": {
89+ "version": "2.0.5",
90+ "dev": true,
91+ "license": "MIT",
92+ "engines": {
93+ "node": ">= 8"
94+ }
95+ },
96+ "node_modules/@nodelib/fs.walk": {
97+ "version": "1.2.8",
98+ "dev": true,
99+ "license": "MIT",
100+ "dependencies": {
101+ "@nodelib/fs.scandir": "2.1.5",
102+ "fastq": "^1.6.0"
103+ },
104+ "engines": {
105+ "node": ">= 8"
106+ }
107+ },
108+ "node_modules/any-promise": {
109+ "version": "1.3.0",
110+ "dev": true,
111+ "license": "MIT"
112+ },
113+ "node_modules/anymatch": {
114+ "version": "3.1.3",
115+ "dev": true,
116+ "license": "ISC",
117+ "dependencies": {
118+ "normalize-path": "^3.0.0",
119+ "picomatch": "^2.0.4"
120+ },
121+ "engines": {
122+ "node": ">= 8"
123+ }
124+ },
125+ "node_modules/arg": {
126+ "version": "5.0.2",
127+ "dev": true,
128+ "license": "MIT"
129+ },
130+ "node_modules/balanced-match": {
131+ "version": "1.0.2",
132+ "dev": true,
133+ "license": "MIT"
134+ },
135+ "node_modules/binary-extensions": {
136+ "version": "2.2.0",
137+ "dev": true,
138+ "license": "MIT",
139+ "engines": {
140+ "node": ">=8"
141+ }
142+ },
143+ "node_modules/brace-expansion": {
144+ "version": "1.1.11",
145+ "dev": true,
146+ "license": "MIT",
147+ "dependencies": {
148+ "balanced-match": "^1.0.0",
149+ "concat-map": "0.0.1"
150+ }
151+ },
152+ "node_modules/braces": {
153+ "version": "3.0.2",
154+ "dev": true,
155+ "license": "MIT",
156+ "dependencies": {
157+ "fill-range": "^7.0.1"
158+ },
159+ "engines": {
160+ "node": ">=8"
161+ }
162+ },
163+ "node_modules/camelcase-css": {
164+ "version": "2.0.1",
165+ "dev": true,
166+ "license": "MIT",
167+ "engines": {
168+ "node": ">= 6"
169+ }
170+ },
171+ "node_modules/chokidar": {
172+ "version": "3.5.3",
173+ "dev": true,
174+ "funding": [
175+ {
176+ "type": "individual",
177+ "url": "https://paulmillr.com/funding/"
178+ }
179+ ],
180+ "license": "MIT",
181+ "dependencies": {
182+ "anymatch": "~3.1.2",
183+ "braces": "~3.0.2",
184+ "glob-parent": "~5.1.2",
185+ "is-binary-path": "~2.1.0",
186+ "is-glob": "~4.0.1",
187+ "normalize-path": "~3.0.0",
188+ "readdirp": "~3.6.0"
189+ },
190+ "engines": {
191+ "node": ">= 8.10.0"
192+ },
193+ "optionalDependencies": {
194+ "fsevents": "~2.3.2"
195+ }
196+ },
197+ "node_modules/chokidar/node_modules/glob-parent": {
198+ "version": "5.1.2",
199+ "dev": true,
200+ "license": "ISC",
201+ "dependencies": {
202+ "is-glob": "^4.0.1"
203+ },
204+ "engines": {
205+ "node": ">= 6"
206+ }
207+ },
208+ "node_modules/commander": {
209+ "version": "4.1.1",
210+ "dev": true,
211+ "license": "MIT",
212+ "engines": {
213+ "node": ">= 6"
214+ }
215+ },
216+ "node_modules/concat-map": {
217+ "version": "0.0.1",
218+ "dev": true,
219+ "license": "MIT"
220+ },
221+ "node_modules/cssesc": {
222+ "version": "3.0.0",
223+ "dev": true,
224+ "license": "MIT",
225+ "bin": {
226+ "cssesc": "bin/cssesc"
227+ },
228+ "engines": {
229+ "node": ">=4"
230+ }
231+ },
232+ "node_modules/didyoumean": {
233+ "version": "1.2.2",
234+ "dev": true,
235+ "license": "Apache-2.0"
236+ },
237+ "node_modules/dlv": {
238+ "version": "1.1.3",
239+ "dev": true,
240+ "license": "MIT"
241+ },
242+ "node_modules/fast-glob": {
243+ "version": "3.3.1",
244+ "dev": true,
245+ "license": "MIT",
246+ "dependencies": {
247+ "@nodelib/fs.stat": "^2.0.2",
248+ "@nodelib/fs.walk": "^1.2.3",
249+ "glob-parent": "^5.1.2",
250+ "merge2": "^1.3.0",
251+ "micromatch": "^4.0.4"
252+ },
253+ "engines": {
254+ "node": ">=8.6.0"
255+ }
256+ },
257+ "node_modules/fast-glob/node_modules/glob-parent": {
258+ "version": "5.1.2",
259+ "dev": true,
260+ "license": "ISC",
261+ "dependencies": {
262+ "is-glob": "^4.0.1"
263+ },
264+ "engines": {
265+ "node": ">= 6"
266+ }
267+ },
268+ "node_modules/fastq": {
269+ "version": "1.15.0",
270+ "dev": true,
271+ "license": "ISC",
272+ "dependencies": {
273+ "reusify": "^1.0.4"
274+ }
275+ },
276+ "node_modules/fill-range": {
277+ "version": "7.0.1",
278+ "dev": true,
279+ "license": "MIT",
280+ "dependencies": {
281+ "to-regex-range": "^5.0.1"
282+ },
283+ "engines": {
284+ "node": ">=8"
285+ }
286+ },
287+ "node_modules/fs.realpath": {
288+ "version": "1.0.0",
289+ "dev": true,
290+ "license": "ISC"
291+ },
292+ "node_modules/function-bind": {
293+ "version": "1.1.1",
294+ "dev": true,
295+ "license": "MIT"
296+ },
297+ "node_modules/glob": {
298+ "version": "7.1.6",
299+ "dev": true,
300+ "license": "ISC",
301+ "dependencies": {
302+ "fs.realpath": "^1.0.0",
303+ "inflight": "^1.0.4",
304+ "inherits": "2",
305+ "minimatch": "^3.0.4",
306+ "once": "^1.3.0",
307+ "path-is-absolute": "^1.0.0"
308+ },
309+ "engines": {
310+ "node": "*"
311+ },
312+ "funding": {
313+ "url": "https://github.com/sponsors/isaacs"
314+ }
315+ },
316+ "node_modules/glob-parent": {
317+ "version": "6.0.2",
318+ "dev": true,
319+ "license": "ISC",
320+ "dependencies": {
321+ "is-glob": "^4.0.3"
322+ },
323+ "engines": {
324+ "node": ">=10.13.0"
325+ }
326+ },
327+ "node_modules/has": {
328+ "version": "1.0.3",
329+ "dev": true,
330+ "license": "MIT",
331+ "dependencies": {
332+ "function-bind": "^1.1.1"
333+ },
334+ "engines": {
335+ "node": ">= 0.4.0"
336+ }
337+ },
338+ "node_modules/inflight": {
339+ "version": "1.0.6",
340+ "dev": true,
341+ "license": "ISC",
342+ "dependencies": {
343+ "once": "^1.3.0",
344+ "wrappy": "1"
345+ }
346+ },
347+ "node_modules/inherits": {
348+ "version": "2.0.4",
349+ "dev": true,
350+ "license": "ISC"
351+ },
352+ "node_modules/is-binary-path": {
353+ "version": "2.1.0",
354+ "dev": true,
355+ "license": "MIT",
356+ "dependencies": {
357+ "binary-extensions": "^2.0.0"
358+ },
359+ "engines": {
360+ "node": ">=8"
361+ }
362+ },
363+ "node_modules/is-core-module": {
364+ "version": "2.13.0",
365+ "dev": true,
366+ "license": "MIT",
367+ "dependencies": {
368+ "has": "^1.0.3"
369+ },
370+ "funding": {
371+ "url": "https://github.com/sponsors/ljharb"
372+ }
373+ },
374+ "node_modules/is-extglob": {
375+ "version": "2.1.1",
376+ "dev": true,
377+ "license": "MIT",
378+ "engines": {
379+ "node": ">=0.10.0"
380+ }
381+ },
382+ "node_modules/is-glob": {
383+ "version": "4.0.3",
384+ "dev": true,
385+ "license": "MIT",
386+ "dependencies": {
387+ "is-extglob": "^2.1.1"
388+ },
389+ "engines": {
390+ "node": ">=0.10.0"
391+ }
392+ },
393+ "node_modules/is-number": {
394+ "version": "7.0.0",
395+ "dev": true,
396+ "license": "MIT",
397+ "engines": {
398+ "node": ">=0.12.0"
399+ }
400+ },
401+ "node_modules/jiti": {
402+ "version": "1.20.0",
403+ "dev": true,
404+ "license": "MIT",
405+ "bin": {
406+ "jiti": "bin/jiti.js"
407+ }
408+ },
409+ "node_modules/lilconfig": {
410+ "version": "2.1.0",
411+ "dev": true,
412+ "license": "MIT",
413+ "engines": {
414+ "node": ">=10"
415+ }
416+ },
417+ "node_modules/lines-and-columns": {
418+ "version": "1.2.4",
419+ "dev": true,
420+ "license": "MIT"
421+ },
422+ "node_modules/merge2": {
423+ "version": "1.4.1",
424+ "dev": true,
425+ "license": "MIT",
426+ "engines": {
427+ "node": ">= 8"
428+ }
429+ },
430+ "node_modules/micromatch": {
431+ "version": "4.0.5",
432+ "dev": true,
433+ "license": "MIT",
434+ "dependencies": {
435+ "braces": "^3.0.2",
436+ "picomatch": "^2.3.1"
437+ },
438+ "engines": {
439+ "node": ">=8.6"
440+ }
441+ },
442+ "node_modules/minimatch": {
443+ "version": "3.0.8",
444+ "dev": true,
445+ "license": "ISC",
446+ "dependencies": {
447+ "brace-expansion": "^1.1.7"
448+ },
449+ "engines": {
450+ "node": "*"
451+ }
452+ },
453+ "node_modules/mz": {
454+ "version": "2.7.0",
455+ "dev": true,
456+ "license": "MIT",
457+ "dependencies": {
458+ "any-promise": "^1.0.0",
459+ "object-assign": "^4.0.1",
460+ "thenify-all": "^1.0.0"
461+ }
462+ },
463+ "node_modules/nanoid": {
464+ "version": "3.3.6",
465+ "dev": true,
466+ "funding": [
467+ {
468+ "type": "github",
469+ "url": "https://github.com/sponsors/ai"
470+ }
471+ ],
472+ "license": "MIT",
473+ "bin": {
474+ "nanoid": "bin/nanoid.cjs"
475+ },
476+ "engines": {
477+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
478+ }
479+ },
480+ "node_modules/normalize-path": {
481+ "version": "3.0.0",
482+ "dev": true,
483+ "license": "MIT",
484+ "engines": {
485+ "node": ">=0.10.0"
486+ }
487+ },
488+ "node_modules/object-assign": {
489+ "version": "4.1.1",
490+ "dev": true,
491+ "license": "MIT",
492+ "engines": {
493+ "node": ">=0.10.0"
494+ }
495+ },
496+ "node_modules/object-hash": {
497+ "version": "3.0.0",
498+ "dev": true,
499+ "license": "MIT",
500+ "engines": {
501+ "node": ">= 6"
502+ }
503+ },
504+ "node_modules/once": {
505+ "version": "1.4.0",
506+ "dev": true,
507+ "license": "ISC",
508+ "dependencies": {
509+ "wrappy": "1"
510+ }
511+ },
512+ "node_modules/path-is-absolute": {
513+ "version": "1.0.1",
514+ "dev": true,
515+ "license": "MIT",
516+ "engines": {
517+ "node": ">=0.10.0"
518+ }
519+ },
520+ "node_modules/path-parse": {
521+ "version": "1.0.7",
522+ "dev": true,
523+ "license": "MIT"
524+ },
525+ "node_modules/picocolors": {
526+ "version": "1.0.0",
527+ "dev": true,
528+ "license": "ISC"
529+ },
530+ "node_modules/picomatch": {
531+ "version": "2.3.1",
532+ "dev": true,
533+ "license": "MIT",
534+ "engines": {
535+ "node": ">=8.6"
536+ },
537+ "funding": {
538+ "url": "https://github.com/sponsors/jonschlinkert"
539+ }
540+ },
541+ "node_modules/pify": {
542+ "version": "2.3.0",
543+ "dev": true,
544+ "license": "MIT",
545+ "engines": {
546+ "node": ">=0.10.0"
547+ }
548+ },
549+ "node_modules/pirates": {
550+ "version": "4.0.6",
551+ "dev": true,
552+ "license": "MIT",
553+ "engines": {
554+ "node": ">= 6"
555+ }
556+ },
557+ "node_modules/postcss": {
558+ "version": "8.4.29",
559+ "dev": true,
560+ "funding": [
561+ {
562+ "type": "opencollective",
563+ "url": "https://opencollective.com/postcss/"
564+ },
565+ {
566+ "type": "tidelift",
567+ "url": "https://tidelift.com/funding/github/npm/postcss"
568+ },
569+ {
570+ "type": "github",
571+ "url": "https://github.com/sponsors/ai"
572+ }
573+ ],
574+ "license": "MIT",
575+ "dependencies": {
576+ "nanoid": "^3.3.6",
577+ "picocolors": "^1.0.0",
578+ "source-map-js": "^1.0.2"
579+ },
580+ "engines": {
581+ "node": "^10 || ^12 || >=14"
582+ }
583+ },
584+ "node_modules/postcss-import": {
585+ "version": "15.1.0",
586+ "dev": true,
587+ "license": "MIT",
588+ "dependencies": {
589+ "postcss-value-parser": "^4.0.0",
590+ "read-cache": "^1.0.0",
591+ "resolve": "^1.1.7"
592+ },
593+ "engines": {
594+ "node": ">=14.0.0"
595+ },
596+ "peerDependencies": {
597+ "postcss": "^8.0.0"
598+ }
599+ },
600+ "node_modules/postcss-js": {
601+ "version": "4.0.1",
602+ "dev": true,
603+ "license": "MIT",
604+ "dependencies": {
605+ "camelcase-css": "^2.0.1"
606+ },
607+ "engines": {
608+ "node": "^12 || ^14 || >= 16"
609+ },
610+ "funding": {
611+ "type": "opencollective",
612+ "url": "https://opencollective.com/postcss/"
613+ },
614+ "peerDependencies": {
615+ "postcss": "^8.4.21"
616+ }
617+ },
618+ "node_modules/postcss-load-config": {
619+ "version": "4.0.1",
620+ "dev": true,
621+ "license": "MIT",
622+ "dependencies": {
623+ "lilconfig": "^2.0.5",
624+ "yaml": "^2.1.1"
625+ },
626+ "engines": {
627+ "node": ">= 14"
628+ },
629+ "funding": {
630+ "type": "opencollective",
631+ "url": "https://opencollective.com/postcss/"
632+ },
633+ "peerDependencies": {
634+ "postcss": ">=8.0.9",
635+ "ts-node": ">=9.0.0"
636+ },
637+ "peerDependenciesMeta": {
638+ "postcss": {
639+ "optional": true
640+ },
641+ "ts-node": {
642+ "optional": true
643+ }
644+ }
645+ },
646+ "node_modules/postcss-nested": {
647+ "version": "6.0.1",
648+ "dev": true,
649+ "license": "MIT",
650+ "dependencies": {
651+ "postcss-selector-parser": "^6.0.11"
652+ },
653+ "engines": {
654+ "node": ">=12.0"
655+ },
656+ "funding": {
657+ "type": "opencollective",
658+ "url": "https://opencollective.com/postcss/"
659+ },
660+ "peerDependencies": {
661+ "postcss": "^8.2.14"
662+ }
663+ },
664+ "node_modules/postcss-selector-parser": {
665+ "version": "6.0.13",
666+ "dev": true,
667+ "license": "MIT",
668+ "dependencies": {
669+ "cssesc": "^3.0.0",
670+ "util-deprecate": "^1.0.2"
671+ },
672+ "engines": {
673+ "node": ">=4"
674+ }
675+ },
676+ "node_modules/postcss-value-parser": {
677+ "version": "4.2.0",
678+ "dev": true,
679+ "license": "MIT"
680+ },
681+ "node_modules/prettier": {
682+ "version": "3.0.3",
683+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
684+ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
685+ "dev": true,
686+ "bin": {
687+ "prettier": "bin/prettier.cjs"
688+ },
689+ "engines": {
690+ "node": ">=14"
691+ },
692+ "funding": {
693+ "url": "https://github.com/prettier/prettier?sponsor=1"
694+ }
695+ },
696+ "node_modules/prettier-plugin-tailwindcss": {
697+ "version": "0.5.5",
698+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.5.tgz",
699+ "integrity": "sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==",
700+ "dev": true,
701+ "engines": {
702+ "node": ">=14.21.3"
703+ },
704+ "peerDependencies": {
705+ "@ianvs/prettier-plugin-sort-imports": "*",
706+ "@prettier/plugin-pug": "*",
707+ "@shopify/prettier-plugin-liquid": "*",
708+ "@shufo/prettier-plugin-blade": "*",
709+ "@trivago/prettier-plugin-sort-imports": "*",
710+ "prettier": "^3.0",
711+ "prettier-plugin-astro": "*",
712+ "prettier-plugin-css-order": "*",
713+ "prettier-plugin-import-sort": "*",
714+ "prettier-plugin-jsdoc": "*",
715+ "prettier-plugin-organize-attributes": "*",
716+ "prettier-plugin-organize-imports": "*",
717+ "prettier-plugin-style-order": "*",
718+ "prettier-plugin-svelte": "*"
719+ },
720+ "peerDependenciesMeta": {
721+ "@ianvs/prettier-plugin-sort-imports": {
722+ "optional": true
723+ },
724+ "@prettier/plugin-pug": {
725+ "optional": true
726+ },
727+ "@shopify/prettier-plugin-liquid": {
728+ "optional": true
729+ },
730+ "@shufo/prettier-plugin-blade": {
731+ "optional": true
732+ },
733+ "@trivago/prettier-plugin-sort-imports": {
734+ "optional": true
735+ },
736+ "prettier-plugin-astro": {
737+ "optional": true
738+ },
739+ "prettier-plugin-css-order": {
740+ "optional": true
741+ },
742+ "prettier-plugin-import-sort": {
743+ "optional": true
744+ },
745+ "prettier-plugin-jsdoc": {
746+ "optional": true
747+ },
748+ "prettier-plugin-marko": {
749+ "optional": true
750+ },
751+ "prettier-plugin-organize-attributes": {
752+ "optional": true
753+ },
754+ "prettier-plugin-organize-imports": {
755+ "optional": true
756+ },
757+ "prettier-plugin-style-order": {
758+ "optional": true
759+ },
760+ "prettier-plugin-svelte": {
761+ "optional": true
762+ },
763+ "prettier-plugin-twig-melody": {
764+ "optional": true
765+ }
766+ }
767+ },
768+ "node_modules/queue-microtask": {
769+ "version": "1.2.3",
770+ "dev": true,
771+ "funding": [
772+ {
773+ "type": "github",
774+ "url": "https://github.com/sponsors/feross"
775+ },
776+ {
777+ "type": "patreon",
778+ "url": "https://www.patreon.com/feross"
779+ },
780+ {
781+ "type": "consulting",
782+ "url": "https://feross.org/support"
783+ }
784+ ],
785+ "license": "MIT"
786+ },
787+ "node_modules/read-cache": {
788+ "version": "1.0.0",
789+ "dev": true,
790+ "license": "MIT",
791+ "dependencies": {
792+ "pify": "^2.3.0"
793+ }
794+ },
795+ "node_modules/readdirp": {
796+ "version": "3.6.0",
797+ "dev": true,
798+ "license": "MIT",
799+ "dependencies": {
800+ "picomatch": "^2.2.1"
801+ },
802+ "engines": {
803+ "node": ">=8.10.0"
804+ }
805+ },
806+ "node_modules/resolve": {
807+ "version": "1.22.4",
808+ "dev": true,
809+ "license": "MIT",
810+ "dependencies": {
811+ "is-core-module": "^2.13.0",
812+ "path-parse": "^1.0.7",
813+ "supports-preserve-symlinks-flag": "^1.0.0"
814+ },
815+ "bin": {
816+ "resolve": "bin/resolve"
817+ },
818+ "funding": {
819+ "url": "https://github.com/sponsors/ljharb"
820+ }
821+ },
822+ "node_modules/reusify": {
823+ "version": "1.0.4",
824+ "dev": true,
825+ "license": "MIT",
826+ "engines": {
827+ "iojs": ">=1.0.0",
828+ "node": ">=0.10.0"
829+ }
830+ },
831+ "node_modules/run-parallel": {
832+ "version": "1.2.0",
833+ "dev": true,
834+ "funding": [
835+ {
836+ "type": "github",
837+ "url": "https://github.com/sponsors/feross"
838+ },
839+ {
840+ "type": "patreon",
841+ "url": "https://www.patreon.com/feross"
842+ },
843+ {
844+ "type": "consulting",
845+ "url": "https://feross.org/support"
846+ }
847+ ],
848+ "license": "MIT",
849+ "dependencies": {
850+ "queue-microtask": "^1.2.2"
851+ }
852+ },
853+ "node_modules/source-map-js": {
854+ "version": "1.0.2",
855+ "dev": true,
856+ "license": "BSD-3-Clause",
857+ "engines": {
858+ "node": ">=0.10.0"
859+ }
860+ },
861+ "node_modules/sucrase": {
862+ "version": "3.34.0",
863+ "dev": true,
864+ "license": "MIT",
865+ "dependencies": {
866+ "@jridgewell/gen-mapping": "^0.3.2",
867+ "commander": "^4.0.0",
868+ "glob": "7.1.6",
869+ "lines-and-columns": "^1.1.6",
870+ "mz": "^2.7.0",
871+ "pirates": "^4.0.1",
872+ "ts-interface-checker": "^0.1.9"
873+ },
874+ "bin": {
875+ "sucrase": "bin/sucrase",
876+ "sucrase-node": "bin/sucrase-node"
877+ },
878+ "engines": {
879+ "node": ">=8"
880+ }
881+ },
882+ "node_modules/supports-preserve-symlinks-flag": {
883+ "version": "1.0.0",
884+ "dev": true,
885+ "license": "MIT",
886+ "engines": {
887+ "node": ">= 0.4"
888+ },
889+ "funding": {
890+ "url": "https://github.com/sponsors/ljharb"
891+ }
892+ },
893+ "node_modules/tailwindcss": {
894+ "version": "3.3.3",
895+ "dev": true,
896+ "license": "MIT",
897+ "dependencies": {
898+ "@alloc/quick-lru": "^5.2.0",
899+ "arg": "^5.0.2",
900+ "chokidar": "^3.5.3",
901+ "didyoumean": "^1.2.2",
902+ "dlv": "^1.1.3",
903+ "fast-glob": "^3.2.12",
904+ "glob-parent": "^6.0.2",
905+ "is-glob": "^4.0.3",
906+ "jiti": "^1.18.2",
907+ "lilconfig": "^2.1.0",
908+ "micromatch": "^4.0.5",
909+ "normalize-path": "^3.0.0",
910+ "object-hash": "^3.0.0",
911+ "picocolors": "^1.0.0",
912+ "postcss": "^8.4.23",
913+ "postcss-import": "^15.1.0",
914+ "postcss-js": "^4.0.1",
915+ "postcss-load-config": "^4.0.1",
916+ "postcss-nested": "^6.0.1",
917+ "postcss-selector-parser": "^6.0.11",
918+ "resolve": "^1.22.2",
919+ "sucrase": "^3.32.0"
920+ },
921+ "bin": {
922+ "tailwind": "lib/cli.js",
923+ "tailwindcss": "lib/cli.js"
924+ },
925+ "engines": {
926+ "node": ">=14.0.0"
927+ }
928+ },
929+ "node_modules/thenify": {
930+ "version": "3.3.1",
931+ "dev": true,
932+ "license": "MIT",
933+ "dependencies": {
934+ "any-promise": "^1.0.0"
935+ }
936+ },
937+ "node_modules/thenify-all": {
938+ "version": "1.6.0",
939+ "dev": true,
940+ "license": "MIT",
941+ "dependencies": {
942+ "thenify": ">= 3.1.0 < 4"
943+ },
944+ "engines": {
945+ "node": ">=0.8"
946+ }
947+ },
948+ "node_modules/to-regex-range": {
949+ "version": "5.0.1",
950+ "dev": true,
951+ "license": "MIT",
952+ "dependencies": {
953+ "is-number": "^7.0.0"
954+ },
955+ "engines": {
956+ "node": ">=8.0"
957+ }
958+ },
959+ "node_modules/ts-interface-checker": {
960+ "version": "0.1.13",
961+ "dev": true,
962+ "license": "Apache-2.0"
963+ },
964+ "node_modules/util-deprecate": {
965+ "version": "1.0.2",
966+ "dev": true,
967+ "license": "MIT"
968+ },
969+ "node_modules/wrappy": {
970+ "version": "1.0.2",
971+ "dev": true,
972+ "license": "ISC"
973+ },
974+ "node_modules/yaml": {
975+ "version": "2.3.2",
976+ "dev": true,
977+ "license": "ISC",
978+ "engines": {
979+ "node": ">= 14"
980+ }
981+ }
982+ }
983+}
@@ -0,0 +1,983 @@
1+{
2+ "name": "gordon-echo-0.02",
3+ "lockfileVersion": 3,
4+ "requires": true,
5+ "packages": {
6+ "": {
7+ "devDependencies": {
8+ "@catppuccin/tailwindcss": "^0.1.6",
9+ "prettier": "^3.0.3",
10+ "prettier-plugin-tailwindcss": "^0.5.5",
11+ "tailwindcss": "^3.3.3"
12+ }
13+ },
14+ "node_modules/@alloc/quick-lru": {
15+ "version": "5.2.0",
16+ "dev": true,
17+ "license": "MIT",
18+ "engines": {
19+ "node": ">=10"
20+ },
21+ "funding": {
22+ "url": "https://github.com/sponsors/sindresorhus"
23+ }
24+ },
25+ "node_modules/@catppuccin/tailwindcss": {
26+ "version": "0.1.6",
27+ "dev": true,
28+ "license": "MIT",
29+ "peerDependencies": {
30+ "tailwindcss": ">=3.0.0"
31+ }
32+ },
33+ "node_modules/@jridgewell/gen-mapping": {
34+ "version": "0.3.3",
35+ "dev": true,
36+ "license": "MIT",
37+ "dependencies": {
38+ "@jridgewell/set-array": "^1.0.1",
39+ "@jridgewell/sourcemap-codec": "^1.4.10",
40+ "@jridgewell/trace-mapping": "^0.3.9"
41+ },
42+ "engines": {
43+ "node": ">=6.0.0"
44+ }
45+ },
46+ "node_modules/@jridgewell/resolve-uri": {
47+ "version": "3.1.1",
48+ "dev": true,
49+ "license": "MIT",
50+ "engines": {
51+ "node": ">=6.0.0"
52+ }
53+ },
54+ "node_modules/@jridgewell/set-array": {
55+ "version": "1.1.2",
56+ "dev": true,
57+ "license": "MIT",
58+ "engines": {
59+ "node": ">=6.0.0"
60+ }
61+ },
62+ "node_modules/@jridgewell/sourcemap-codec": {
63+ "version": "1.4.15",
64+ "dev": true,
65+ "license": "MIT"
66+ },
67+ "node_modules/@jridgewell/trace-mapping": {
68+ "version": "0.3.19",
69+ "dev": true,
70+ "license": "MIT",
71+ "dependencies": {
72+ "@jridgewell/resolve-uri": "^3.1.0",
73+ "@jridgewell/sourcemap-codec": "^1.4.14"
74+ }
75+ },
76+ "node_modules/@nodelib/fs.scandir": {
77+ "version": "2.1.5",
78+ "dev": true,
79+ "license": "MIT",
80+ "dependencies": {
81+ "@nodelib/fs.stat": "2.0.5",
82+ "run-parallel": "^1.1.9"
83+ },
84+ "engines": {
85+ "node": ">= 8"
86+ }
87+ },
88+ "node_modules/@nodelib/fs.stat": {
89+ "version": "2.0.5",
90+ "dev": true,
91+ "license": "MIT",
92+ "engines": {
93+ "node": ">= 8"
94+ }
95+ },
96+ "node_modules/@nodelib/fs.walk": {
97+ "version": "1.2.8",
98+ "dev": true,
99+ "license": "MIT",
100+ "dependencies": {
101+ "@nodelib/fs.scandir": "2.1.5",
102+ "fastq": "^1.6.0"
103+ },
104+ "engines": {
105+ "node": ">= 8"
106+ }
107+ },
108+ "node_modules/any-promise": {
109+ "version": "1.3.0",
110+ "dev": true,
111+ "license": "MIT"
112+ },
113+ "node_modules/anymatch": {
114+ "version": "3.1.3",
115+ "dev": true,
116+ "license": "ISC",
117+ "dependencies": {
118+ "normalize-path": "^3.0.0",
119+ "picomatch": "^2.0.4"
120+ },
121+ "engines": {
122+ "node": ">= 8"
123+ }
124+ },
125+ "node_modules/arg": {
126+ "version": "5.0.2",
127+ "dev": true,
128+ "license": "MIT"
129+ },
130+ "node_modules/balanced-match": {
131+ "version": "1.0.2",
132+ "dev": true,
133+ "license": "MIT"
134+ },
135+ "node_modules/binary-extensions": {
136+ "version": "2.2.0",
137+ "dev": true,
138+ "license": "MIT",
139+ "engines": {
140+ "node": ">=8"
141+ }
142+ },
143+ "node_modules/brace-expansion": {
144+ "version": "1.1.11",
145+ "dev": true,
146+ "license": "MIT",
147+ "dependencies": {
148+ "balanced-match": "^1.0.0",
149+ "concat-map": "0.0.1"
150+ }
151+ },
152+ "node_modules/braces": {
153+ "version": "3.0.2",
154+ "dev": true,
155+ "license": "MIT",
156+ "dependencies": {
157+ "fill-range": "^7.0.1"
158+ },
159+ "engines": {
160+ "node": ">=8"
161+ }
162+ },
163+ "node_modules/camelcase-css": {
164+ "version": "2.0.1",
165+ "dev": true,
166+ "license": "MIT",
167+ "engines": {
168+ "node": ">= 6"
169+ }
170+ },
171+ "node_modules/chokidar": {
172+ "version": "3.5.3",
173+ "dev": true,
174+ "funding": [
175+ {
176+ "type": "individual",
177+ "url": "https://paulmillr.com/funding/"
178+ }
179+ ],
180+ "license": "MIT",
181+ "dependencies": {
182+ "anymatch": "~3.1.2",
183+ "braces": "~3.0.2",
184+ "glob-parent": "~5.1.2",
185+ "is-binary-path": "~2.1.0",
186+ "is-glob": "~4.0.1",
187+ "normalize-path": "~3.0.0",
188+ "readdirp": "~3.6.0"
189+ },
190+ "engines": {
191+ "node": ">= 8.10.0"
192+ },
193+ "optionalDependencies": {
194+ "fsevents": "~2.3.2"
195+ }
196+ },
197+ "node_modules/chokidar/node_modules/glob-parent": {
198+ "version": "5.1.2",
199+ "dev": true,
200+ "license": "ISC",
201+ "dependencies": {
202+ "is-glob": "^4.0.1"
203+ },
204+ "engines": {
205+ "node": ">= 6"
206+ }
207+ },
208+ "node_modules/commander": {
209+ "version": "4.1.1",
210+ "dev": true,
211+ "license": "MIT",
212+ "engines": {
213+ "node": ">= 6"
214+ }
215+ },
216+ "node_modules/concat-map": {
217+ "version": "0.0.1",
218+ "dev": true,
219+ "license": "MIT"
220+ },
221+ "node_modules/cssesc": {
222+ "version": "3.0.0",
223+ "dev": true,
224+ "license": "MIT",
225+ "bin": {
226+ "cssesc": "bin/cssesc"
227+ },
228+ "engines": {
229+ "node": ">=4"
230+ }
231+ },
232+ "node_modules/didyoumean": {
233+ "version": "1.2.2",
234+ "dev": true,
235+ "license": "Apache-2.0"
236+ },
237+ "node_modules/dlv": {
238+ "version": "1.1.3",
239+ "dev": true,
240+ "license": "MIT"
241+ },
242+ "node_modules/fast-glob": {
243+ "version": "3.3.1",
244+ "dev": true,
245+ "license": "MIT",
246+ "dependencies": {
247+ "@nodelib/fs.stat": "^2.0.2",
248+ "@nodelib/fs.walk": "^1.2.3",
249+ "glob-parent": "^5.1.2",
250+ "merge2": "^1.3.0",
251+ "micromatch": "^4.0.4"
252+ },
253+ "engines": {
254+ "node": ">=8.6.0"
255+ }
256+ },
257+ "node_modules/fast-glob/node_modules/glob-parent": {
258+ "version": "5.1.2",
259+ "dev": true,
260+ "license": "ISC",
261+ "dependencies": {
262+ "is-glob": "^4.0.1"
263+ },
264+ "engines": {
265+ "node": ">= 6"
266+ }
267+ },
268+ "node_modules/fastq": {
269+ "version": "1.15.0",
270+ "dev": true,
271+ "license": "ISC",
272+ "dependencies": {
273+ "reusify": "^1.0.4"
274+ }
275+ },
276+ "node_modules/fill-range": {
277+ "version": "7.0.1",
278+ "dev": true,
279+ "license": "MIT",
280+ "dependencies": {
281+ "to-regex-range": "^5.0.1"
282+ },
283+ "engines": {
284+ "node": ">=8"
285+ }
286+ },
287+ "node_modules/fs.realpath": {
288+ "version": "1.0.0",
289+ "dev": true,
290+ "license": "ISC"
291+ },
292+ "node_modules/function-bind": {
293+ "version": "1.1.1",
294+ "dev": true,
295+ "license": "MIT"
296+ },
297+ "node_modules/glob": {
298+ "version": "7.1.6",
299+ "dev": true,
300+ "license": "ISC",
301+ "dependencies": {
302+ "fs.realpath": "^1.0.0",
303+ "inflight": "^1.0.4",
304+ "inherits": "2",
305+ "minimatch": "^3.0.4",
306+ "once": "^1.3.0",
307+ "path-is-absolute": "^1.0.0"
308+ },
309+ "engines": {
310+ "node": "*"
311+ },
312+ "funding": {
313+ "url": "https://github.com/sponsors/isaacs"
314+ }
315+ },
316+ "node_modules/glob-parent": {
317+ "version": "6.0.2",
318+ "dev": true,
319+ "license": "ISC",
320+ "dependencies": {
321+ "is-glob": "^4.0.3"
322+ },
323+ "engines": {
324+ "node": ">=10.13.0"
325+ }
326+ },
327+ "node_modules/has": {
328+ "version": "1.0.3",
329+ "dev": true,
330+ "license": "MIT",
331+ "dependencies": {
332+ "function-bind": "^1.1.1"
333+ },
334+ "engines": {
335+ "node": ">= 0.4.0"
336+ }
337+ },
338+ "node_modules/inflight": {
339+ "version": "1.0.6",
340+ "dev": true,
341+ "license": "ISC",
342+ "dependencies": {
343+ "once": "^1.3.0",
344+ "wrappy": "1"
345+ }
346+ },
347+ "node_modules/inherits": {
348+ "version": "2.0.4",
349+ "dev": true,
350+ "license": "ISC"
351+ },
352+ "node_modules/is-binary-path": {
353+ "version": "2.1.0",
354+ "dev": true,
355+ "license": "MIT",
356+ "dependencies": {
357+ "binary-extensions": "^2.0.0"
358+ },
359+ "engines": {
360+ "node": ">=8"
361+ }
362+ },
363+ "node_modules/is-core-module": {
364+ "version": "2.13.0",
365+ "dev": true,
366+ "license": "MIT",
367+ "dependencies": {
368+ "has": "^1.0.3"
369+ },
370+ "funding": {
371+ "url": "https://github.com/sponsors/ljharb"
372+ }
373+ },
374+ "node_modules/is-extglob": {
375+ "version": "2.1.1",
376+ "dev": true,
377+ "license": "MIT",
378+ "engines": {
379+ "node": ">=0.10.0"
380+ }
381+ },
382+ "node_modules/is-glob": {
383+ "version": "4.0.3",
384+ "dev": true,
385+ "license": "MIT",
386+ "dependencies": {
387+ "is-extglob": "^2.1.1"
388+ },
389+ "engines": {
390+ "node": ">=0.10.0"
391+ }
392+ },
393+ "node_modules/is-number": {
394+ "version": "7.0.0",
395+ "dev": true,
396+ "license": "MIT",
397+ "engines": {
398+ "node": ">=0.12.0"
399+ }
400+ },
401+ "node_modules/jiti": {
402+ "version": "1.20.0",
403+ "dev": true,
404+ "license": "MIT",
405+ "bin": {
406+ "jiti": "bin/jiti.js"
407+ }
408+ },
409+ "node_modules/lilconfig": {
410+ "version": "2.1.0",
411+ "dev": true,
412+ "license": "MIT",
413+ "engines": {
414+ "node": ">=10"
415+ }
416+ },
417+ "node_modules/lines-and-columns": {
418+ "version": "1.2.4",
419+ "dev": true,
420+ "license": "MIT"
421+ },
422+ "node_modules/merge2": {
423+ "version": "1.4.1",
424+ "dev": true,
425+ "license": "MIT",
426+ "engines": {
427+ "node": ">= 8"
428+ }
429+ },
430+ "node_modules/micromatch": {
431+ "version": "4.0.5",
432+ "dev": true,
433+ "license": "MIT",
434+ "dependencies": {
435+ "braces": "^3.0.2",
436+ "picomatch": "^2.3.1"
437+ },
438+ "engines": {
439+ "node": ">=8.6"
440+ }
441+ },
442+ "node_modules/minimatch": {
443+ "version": "3.0.8",
444+ "dev": true,
445+ "license": "ISC",
446+ "dependencies": {
447+ "brace-expansion": "^1.1.7"
448+ },
449+ "engines": {
450+ "node": "*"
451+ }
452+ },
453+ "node_modules/mz": {
454+ "version": "2.7.0",
455+ "dev": true,
456+ "license": "MIT",
457+ "dependencies": {
458+ "any-promise": "^1.0.0",
459+ "object-assign": "^4.0.1",
460+ "thenify-all": "^1.0.0"
461+ }
462+ },
463+ "node_modules/nanoid": {
464+ "version": "3.3.6",
465+ "dev": true,
466+ "funding": [
467+ {
468+ "type": "github",
469+ "url": "https://github.com/sponsors/ai"
470+ }
471+ ],
472+ "license": "MIT",
473+ "bin": {
474+ "nanoid": "bin/nanoid.cjs"
475+ },
476+ "engines": {
477+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
478+ }
479+ },
480+ "node_modules/normalize-path": {
481+ "version": "3.0.0",
482+ "dev": true,
483+ "license": "MIT",
484+ "engines": {
485+ "node": ">=0.10.0"
486+ }
487+ },
488+ "node_modules/object-assign": {
489+ "version": "4.1.1",
490+ "dev": true,
491+ "license": "MIT",
492+ "engines": {
493+ "node": ">=0.10.0"
494+ }
495+ },
496+ "node_modules/object-hash": {
497+ "version": "3.0.0",
498+ "dev": true,
499+ "license": "MIT",
500+ "engines": {
501+ "node": ">= 6"
502+ }
503+ },
504+ "node_modules/once": {
505+ "version": "1.4.0",
506+ "dev": true,
507+ "license": "ISC",
508+ "dependencies": {
509+ "wrappy": "1"
510+ }
511+ },
512+ "node_modules/path-is-absolute": {
513+ "version": "1.0.1",
514+ "dev": true,
515+ "license": "MIT",
516+ "engines": {
517+ "node": ">=0.10.0"
518+ }
519+ },
520+ "node_modules/path-parse": {
521+ "version": "1.0.7",
522+ "dev": true,
523+ "license": "MIT"
524+ },
525+ "node_modules/picocolors": {
526+ "version": "1.0.0",
527+ "dev": true,
528+ "license": "ISC"
529+ },
530+ "node_modules/picomatch": {
531+ "version": "2.3.1",
532+ "dev": true,
533+ "license": "MIT",
534+ "engines": {
535+ "node": ">=8.6"
536+ },
537+ "funding": {
538+ "url": "https://github.com/sponsors/jonschlinkert"
539+ }
540+ },
541+ "node_modules/pify": {
542+ "version": "2.3.0",
543+ "dev": true,
544+ "license": "MIT",
545+ "engines": {
546+ "node": ">=0.10.0"
547+ }
548+ },
549+ "node_modules/pirates": {
550+ "version": "4.0.6",
551+ "dev": true,
552+ "license": "MIT",
553+ "engines": {
554+ "node": ">= 6"
555+ }
556+ },
557+ "node_modules/postcss": {
558+ "version": "8.4.29",
559+ "dev": true,
560+ "funding": [
561+ {
562+ "type": "opencollective",
563+ "url": "https://opencollective.com/postcss/"
564+ },
565+ {
566+ "type": "tidelift",
567+ "url": "https://tidelift.com/funding/github/npm/postcss"
568+ },
569+ {
570+ "type": "github",
571+ "url": "https://github.com/sponsors/ai"
572+ }
573+ ],
574+ "license": "MIT",
575+ "dependencies": {
576+ "nanoid": "^3.3.6",
577+ "picocolors": "^1.0.0",
578+ "source-map-js": "^1.0.2"
579+ },
580+ "engines": {
581+ "node": "^10 || ^12 || >=14"
582+ }
583+ },
584+ "node_modules/postcss-import": {
585+ "version": "15.1.0",
586+ "dev": true,
587+ "license": "MIT",
588+ "dependencies": {
589+ "postcss-value-parser": "^4.0.0",
590+ "read-cache": "^1.0.0",
591+ "resolve": "^1.1.7"
592+ },
593+ "engines": {
594+ "node": ">=14.0.0"
595+ },
596+ "peerDependencies": {
597+ "postcss": "^8.0.0"
598+ }
599+ },
600+ "node_modules/postcss-js": {
601+ "version": "4.0.1",
602+ "dev": true,
603+ "license": "MIT",
604+ "dependencies": {
605+ "camelcase-css": "^2.0.1"
606+ },
607+ "engines": {
608+ "node": "^12 || ^14 || >= 16"
609+ },
610+ "funding": {
611+ "type": "opencollective",
612+ "url": "https://opencollective.com/postcss/"
613+ },
614+ "peerDependencies": {
615+ "postcss": "^8.4.21"
616+ }
617+ },
618+ "node_modules/postcss-load-config": {
619+ "version": "4.0.1",
620+ "dev": true,
621+ "license": "MIT",
622+ "dependencies": {
623+ "lilconfig": "^2.0.5",
624+ "yaml": "^2.1.1"
625+ },
626+ "engines": {
627+ "node": ">= 14"
628+ },
629+ "funding": {
630+ "type": "opencollective",
631+ "url": "https://opencollective.com/postcss/"
632+ },
633+ "peerDependencies": {
634+ "postcss": ">=8.0.9",
635+ "ts-node": ">=9.0.0"
636+ },
637+ "peerDependenciesMeta": {
638+ "postcss": {
639+ "optional": true
640+ },
641+ "ts-node": {
642+ "optional": true
643+ }
644+ }
645+ },
646+ "node_modules/postcss-nested": {
647+ "version": "6.0.1",
648+ "dev": true,
649+ "license": "MIT",
650+ "dependencies": {
651+ "postcss-selector-parser": "^6.0.11"
652+ },
653+ "engines": {
654+ "node": ">=12.0"
655+ },
656+ "funding": {
657+ "type": "opencollective",
658+ "url": "https://opencollective.com/postcss/"
659+ },
660+ "peerDependencies": {
661+ "postcss": "^8.2.14"
662+ }
663+ },
664+ "node_modules/postcss-selector-parser": {
665+ "version": "6.0.13",
666+ "dev": true,
667+ "license": "MIT",
668+ "dependencies": {
669+ "cssesc": "^3.0.0",
670+ "util-deprecate": "^1.0.2"
671+ },
672+ "engines": {
673+ "node": ">=4"
674+ }
675+ },
676+ "node_modules/postcss-value-parser": {
677+ "version": "4.2.0",
678+ "dev": true,
679+ "license": "MIT"
680+ },
681+ "node_modules/prettier": {
682+ "version": "3.0.3",
683+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
684+ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
685+ "dev": true,
686+ "bin": {
687+ "prettier": "bin/prettier.cjs"
688+ },
689+ "engines": {
690+ "node": ">=14"
691+ },
692+ "funding": {
693+ "url": "https://github.com/prettier/prettier?sponsor=1"
694+ }
695+ },
696+ "node_modules/prettier-plugin-tailwindcss": {
697+ "version": "0.5.5",
698+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.5.tgz",
699+ "integrity": "sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==",
700+ "dev": true,
701+ "engines": {
702+ "node": ">=14.21.3"
703+ },
704+ "peerDependencies": {
705+ "@ianvs/prettier-plugin-sort-imports": "*",
706+ "@prettier/plugin-pug": "*",
707+ "@shopify/prettier-plugin-liquid": "*",
708+ "@shufo/prettier-plugin-blade": "*",
709+ "@trivago/prettier-plugin-sort-imports": "*",
710+ "prettier": "^3.0",
711+ "prettier-plugin-astro": "*",
712+ "prettier-plugin-css-order": "*",
713+ "prettier-plugin-import-sort": "*",
714+ "prettier-plugin-jsdoc": "*",
715+ "prettier-plugin-organize-attributes": "*",
716+ "prettier-plugin-organize-imports": "*",
717+ "prettier-plugin-style-order": "*",
718+ "prettier-plugin-svelte": "*"
719+ },
720+ "peerDependenciesMeta": {
721+ "@ianvs/prettier-plugin-sort-imports": {
722+ "optional": true
723+ },
724+ "@prettier/plugin-pug": {
725+ "optional": true
726+ },
727+ "@shopify/prettier-plugin-liquid": {
728+ "optional": true
729+ },
730+ "@shufo/prettier-plugin-blade": {
731+ "optional": true
732+ },
733+ "@trivago/prettier-plugin-sort-imports": {
734+ "optional": true
735+ },
736+ "prettier-plugin-astro": {
737+ "optional": true
738+ },
739+ "prettier-plugin-css-order": {
740+ "optional": true
741+ },
742+ "prettier-plugin-import-sort": {
743+ "optional": true
744+ },
745+ "prettier-plugin-jsdoc": {
746+ "optional": true
747+ },
748+ "prettier-plugin-marko": {
749+ "optional": true
750+ },
751+ "prettier-plugin-organize-attributes": {
752+ "optional": true
753+ },
754+ "prettier-plugin-organize-imports": {
755+ "optional": true
756+ },
757+ "prettier-plugin-style-order": {
758+ "optional": true
759+ },
760+ "prettier-plugin-svelte": {
761+ "optional": true
762+ },
763+ "prettier-plugin-twig-melody": {
764+ "optional": true
765+ }
766+ }
767+ },
768+ "node_modules/queue-microtask": {
769+ "version": "1.2.3",
770+ "dev": true,
771+ "funding": [
772+ {
773+ "type": "github",
774+ "url": "https://github.com/sponsors/feross"
775+ },
776+ {
777+ "type": "patreon",
778+ "url": "https://www.patreon.com/feross"
779+ },
780+ {
781+ "type": "consulting",
782+ "url": "https://feross.org/support"
783+ }
784+ ],
785+ "license": "MIT"
786+ },
787+ "node_modules/read-cache": {
788+ "version": "1.0.0",
789+ "dev": true,
790+ "license": "MIT",
791+ "dependencies": {
792+ "pify": "^2.3.0"
793+ }
794+ },
795+ "node_modules/readdirp": {
796+ "version": "3.6.0",
797+ "dev": true,
798+ "license": "MIT",
799+ "dependencies": {
800+ "picomatch": "^2.2.1"
801+ },
802+ "engines": {
803+ "node": ">=8.10.0"
804+ }
805+ },
806+ "node_modules/resolve": {
807+ "version": "1.22.4",
808+ "dev": true,
809+ "license": "MIT",
810+ "dependencies": {
811+ "is-core-module": "^2.13.0",
812+ "path-parse": "^1.0.7",
813+ "supports-preserve-symlinks-flag": "^1.0.0"
814+ },
815+ "bin": {
816+ "resolve": "bin/resolve"
817+ },
818+ "funding": {
819+ "url": "https://github.com/sponsors/ljharb"
820+ }
821+ },
822+ "node_modules/reusify": {
823+ "version": "1.0.4",
824+ "dev": true,
825+ "license": "MIT",
826+ "engines": {
827+ "iojs": ">=1.0.0",
828+ "node": ">=0.10.0"
829+ }
830+ },
831+ "node_modules/run-parallel": {
832+ "version": "1.2.0",
833+ "dev": true,
834+ "funding": [
835+ {
836+ "type": "github",
837+ "url": "https://github.com/sponsors/feross"
838+ },
839+ {
840+ "type": "patreon",
841+ "url": "https://www.patreon.com/feross"
842+ },
843+ {
844+ "type": "consulting",
845+ "url": "https://feross.org/support"
846+ }
847+ ],
848+ "license": "MIT",
849+ "dependencies": {
850+ "queue-microtask": "^1.2.2"
851+ }
852+ },
853+ "node_modules/source-map-js": {
854+ "version": "1.0.2",
855+ "dev": true,
856+ "license": "BSD-3-Clause",
857+ "engines": {
858+ "node": ">=0.10.0"
859+ }
860+ },
861+ "node_modules/sucrase": {
862+ "version": "3.34.0",
863+ "dev": true,
864+ "license": "MIT",
865+ "dependencies": {
866+ "@jridgewell/gen-mapping": "^0.3.2",
867+ "commander": "^4.0.0",
868+ "glob": "7.1.6",
869+ "lines-and-columns": "^1.1.6",
870+ "mz": "^2.7.0",
871+ "pirates": "^4.0.1",
872+ "ts-interface-checker": "^0.1.9"
873+ },
874+ "bin": {
875+ "sucrase": "bin/sucrase",
876+ "sucrase-node": "bin/sucrase-node"
877+ },
878+ "engines": {
879+ "node": ">=8"
880+ }
881+ },
882+ "node_modules/supports-preserve-symlinks-flag": {
883+ "version": "1.0.0",
884+ "dev": true,
885+ "license": "MIT",
886+ "engines": {
887+ "node": ">= 0.4"
888+ },
889+ "funding": {
890+ "url": "https://github.com/sponsors/ljharb"
891+ }
892+ },
893+ "node_modules/tailwindcss": {
894+ "version": "3.3.3",
895+ "dev": true,
896+ "license": "MIT",
897+ "dependencies": {
898+ "@alloc/quick-lru": "^5.2.0",
899+ "arg": "^5.0.2",
900+ "chokidar": "^3.5.3",
901+ "didyoumean": "^1.2.2",
902+ "dlv": "^1.1.3",
903+ "fast-glob": "^3.2.12",
904+ "glob-parent": "^6.0.2",
905+ "is-glob": "^4.0.3",
906+ "jiti": "^1.18.2",
907+ "lilconfig": "^2.1.0",
908+ "micromatch": "^4.0.5",
909+ "normalize-path": "^3.0.0",
910+ "object-hash": "^3.0.0",
911+ "picocolors": "^1.0.0",
912+ "postcss": "^8.4.23",
913+ "postcss-import": "^15.1.0",
914+ "postcss-js": "^4.0.1",
915+ "postcss-load-config": "^4.0.1",
916+ "postcss-nested": "^6.0.1",
917+ "postcss-selector-parser": "^6.0.11",
918+ "resolve": "^1.22.2",
919+ "sucrase": "^3.32.0"
920+ },
921+ "bin": {
922+ "tailwind": "lib/cli.js",
923+ "tailwindcss": "lib/cli.js"
924+ },
925+ "engines": {
926+ "node": ">=14.0.0"
927+ }
928+ },
929+ "node_modules/thenify": {
930+ "version": "3.3.1",
931+ "dev": true,
932+ "license": "MIT",
933+ "dependencies": {
934+ "any-promise": "^1.0.0"
935+ }
936+ },
937+ "node_modules/thenify-all": {
938+ "version": "1.6.0",
939+ "dev": true,
940+ "license": "MIT",
941+ "dependencies": {
942+ "thenify": ">= 3.1.0 < 4"
943+ },
944+ "engines": {
945+ "node": ">=0.8"
946+ }
947+ },
948+ "node_modules/to-regex-range": {
949+ "version": "5.0.1",
950+ "dev": true,
951+ "license": "MIT",
952+ "dependencies": {
953+ "is-number": "^7.0.0"
954+ },
955+ "engines": {
956+ "node": ">=8.0"
957+ }
958+ },
959+ "node_modules/ts-interface-checker": {
960+ "version": "0.1.13",
961+ "dev": true,
962+ "license": "Apache-2.0"
963+ },
964+ "node_modules/util-deprecate": {
965+ "version": "1.0.2",
966+ "dev": true,
967+ "license": "MIT"
968+ },
969+ "node_modules/wrappy": {
970+ "version": "1.0.2",
971+ "dev": true,
972+ "license": "ISC"
973+ },
974+ "node_modules/yaml": {
975+ "version": "2.3.2",
976+ "dev": true,
977+ "license": "ISC",
978+ "engines": {
979+ "node": ">= 14"
980+ }
981+ }
982+ }
983+}
M package.json +2 -0
@@ -1,6 +1,8 @@
11 {
22 "devDependencies": {
33 "@catppuccin/tailwindcss": "^0.1.6",
4+ "prettier": "^3.0.3",
5+ "prettier-plugin-tailwindcss": "^0.5.5",
46 "tailwindcss": "^3.3.3"
57 },
68 "scripts": {
@@ -1,6 +1,8 @@
1 {1 {
2 "devDependencies": {2 "devDependencies": {
3 "@catppuccin/tailwindcss": "^0.1.6",3 "@catppuccin/tailwindcss": "^0.1.6",
4+ "prettier": "^3.0.3",
5+ "prettier-plugin-tailwindcss": "^0.5.5",
4 "tailwindcss": "^3.3.3"6 "tailwindcss": "^3.3.3"
5 },7 },
6 "scripts": {8 "scripts": {
M pkg/store/storeimages.go +2 -2
@@ -17,13 +17,13 @@ type StorageConfig struct {
1717 Images []types.ImageSummary
1818 }
1919
20-func NewStorageConfig(config *app.AppConfig) *StorageConfig {
20+func NewStorageConfig(config *app.Config) *StorageConfig {
2121 return &StorageConfig{
2222 StorageDir: config.General.StorageDir,
2323 }
2424 }
2525
26-func SaveImageToStorage(config *app.AppConfig, filename string, buf io.Reader) (string, error) {
26+func SaveImageToStorage(config *app.Config, filename string, buf io.Reader) (string, error) {
2727 // Check if the folder exist if not create it
2828 if _, err := os.Stat(config.General.StorageDir); os.IsNotExist(err) {
2929 err := os.MkdirAll(config.General.StorageDir, 0755)
@@ -17,13 +17,13 @@ type StorageConfig struct {
17 Images []types.ImageSummary17 Images []types.ImageSummary
18 }18 }
19 19
20-func NewStorageConfig(config *app.AppConfig) *StorageConfig {20+func NewStorageConfig(config *app.Config) *StorageConfig {
21 return &StorageConfig{21 return &StorageConfig{
22 StorageDir: config.General.StorageDir,22 StorageDir: config.General.StorageDir,
23 }23 }
24 }24 }
25 25
26-func SaveImageToStorage(config *app.AppConfig, filename string, buf io.Reader) (string, error) {26+func SaveImageToStorage(config *app.Config, filename string, buf io.Reader) (string, error) {
27 // Check if the folder exist if not create it27 // Check if the folder exist if not create it
28 if _, err := os.Stat(config.General.StorageDir); os.IsNotExist(err) {28 if _, err := os.Stat(config.General.StorageDir); os.IsNotExist(err) {
29 err := os.MkdirAll(config.General.StorageDir, 0755)29 err := os.MkdirAll(config.General.StorageDir, 0755)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close