@gravito/zenith 1.0.0-beta.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/bin.js +436 -43
  3. package/dist/client/assets/index-C332gZ-J.css +1 -0
  4. package/dist/client/assets/{index-oXEse8ih.js → index-D4HibwTK.js} +88 -88
  5. package/dist/client/index.html +2 -2
  6. package/dist/server/index.js +436 -43
  7. package/docs/LARAVEL_ZENITH_ROADMAP.md +109 -0
  8. package/{QUASAR_MASTER_PLAN.md → docs/QUASAR_MASTER_PLAN.md} +6 -3
  9. package/package.json +1 -1
  10. package/scripts/debug_redis_keys.ts +24 -0
  11. package/src/client/App.tsx +1 -1
  12. package/src/client/Layout.tsx +11 -12
  13. package/src/client/WorkerStatus.tsx +97 -56
  14. package/src/client/components/BrandIcons.tsx +119 -44
  15. package/src/client/components/ConfirmDialog.tsx +0 -1
  16. package/src/client/components/JobInspector.tsx +18 -6
  17. package/src/client/components/PageHeader.tsx +32 -28
  18. package/src/client/pages/OverviewPage.tsx +0 -1
  19. package/src/client/pages/PulsePage.tsx +422 -340
  20. package/src/client/pages/SettingsPage.tsx +69 -15
  21. package/src/client/pages/WorkersPage.tsx +70 -2
  22. package/src/server/index.ts +171 -11
  23. package/src/server/services/QueueService.ts +6 -3
  24. package/src/shared/types.ts +2 -0
  25. package/ARCHITECTURE.md +0 -88
  26. package/BATCH_OPERATIONS_IMPLEMENTATION.md +0 -159
  27. package/EVOLUTION_BLUEPRINT.md +0 -112
  28. package/JOBINSPECTOR_SCROLL_FIX.md +0 -152
  29. package/TESTING_BATCH_OPERATIONS.md +0 -252
  30. package/dist/client/assets/index-BSTyMCFd.css +0 -1
  31. /package/{ALERTING_GUIDE.md → docs/ALERTING_GUIDE.md} +0 -0
  32. /package/{DEPLOYMENT.md → docs/DEPLOYMENT.md} +0 -0
  33. /package/{DOCS_INTERNAL.md → docs/DOCS_INTERNAL.md} +0 -0
  34. /package/{QUICK_TEST_GUIDE.md → docs/QUICK_TEST_GUIDE.md} +0 -0
  35. /package/{ROADMAP.md → docs/ROADMAP.md} +0 -0
@@ -35,7 +35,6 @@ export function ConfirmDialog({
35
35
  onClick={(e) => e.stopPropagation()}
36
36
  onKeyDown={(e) => e.stopPropagation()}
37
37
  >
38
- {/* biome-ignore lint/a11y/noStaticElementInteractions: Modal content needs to stop propagation */}
39
38
  <motion.div
40
39
  initial={{ scale: 0.9, opacity: 0 }}
41
40
  animate={{ scale: 1, opacity: 1 }}
@@ -83,14 +83,18 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
83
83
  }
84
84
 
85
85
  const toggleSelectAll = React.useCallback(() => {
86
- if (!data?.jobs) return
86
+ if (!data?.jobs) {
87
+ return
88
+ }
87
89
  const availableCount = data.jobs.filter((j) => j._raw && !j._archived).length
88
90
  if (selectedIndices.size === availableCount && availableCount > 0) {
89
91
  setSelectedIndices(new Set())
90
92
  } else {
91
93
  const indices = new Set<number>()
92
94
  data.jobs.forEach((j, i) => {
93
- if (j._raw && !j._archived) indices.add(i)
95
+ if (j._raw && !j._archived) {
96
+ indices.add(i)
97
+ }
94
98
  })
95
99
  setSelectedIndices(indices)
96
100
  }
@@ -134,10 +138,14 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
134
138
  }, [])
135
139
 
136
140
  const handleAction = async (action: 'delete' | 'retry', job: Job) => {
137
- if (!job._raw) return
141
+ if (!job._raw) {
142
+ return
143
+ }
138
144
  const endpoint = action === 'delete' ? 'delete' : 'retry'
139
145
  const body: any = { raw: job._raw }
140
- if (action === 'delete') body.type = view
146
+ if (action === 'delete') {
147
+ body.type = view
148
+ }
141
149
 
142
150
  await fetch(`/api/queues/${queueName}/jobs/${endpoint}`, {
143
151
  method: 'POST',
@@ -150,7 +158,9 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
150
158
  }
151
159
 
152
160
  const handleBulkAction = async (action: 'delete' | 'retry') => {
153
- if (selectedIndices.size === 0 || !data?.jobs) return
161
+ if (selectedIndices.size === 0 || !data?.jobs) {
162
+ return
163
+ }
154
164
 
155
165
  const count = selectedIndices.size
156
166
  setConfirmDialog({
@@ -186,7 +196,9 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
186
196
  }
187
197
 
188
198
  const handleBulkActionAll = async (action: 'delete' | 'retry') => {
189
- if (view === 'archive') return
199
+ if (view === 'archive') {
200
+ return
201
+ }
190
202
 
191
203
  setConfirmDialog({
192
204
  open: true,
@@ -1,34 +1,38 @@
1
- import { LucideIcon } from 'lucide-react'
2
- import { ReactNode } from 'react'
1
+ import type { LucideIcon } from 'lucide-react'
2
+ import type { ReactNode } from 'react'
3
3
  import { cn } from '../utils'
4
4
 
5
5
  interface PageHeaderProps {
6
- icon: LucideIcon
7
- title: string
8
- description?: string
9
- children?: ReactNode
10
- className?: string
6
+ icon: LucideIcon
7
+ title: string
8
+ description?: string
9
+ children?: ReactNode
10
+ className?: string
11
11
  }
12
12
 
13
- export function PageHeader({ icon: Icon, title, description, children, className }: PageHeaderProps) {
14
- return (
15
- <div className={cn("flex justify-between items-end", className)}>
16
- <div>
17
- <h1 className="text-4xl font-black tracking-tighter flex items-center gap-3">
18
- <div className="p-2 bg-primary/10 rounded-xl text-primary">
19
- <Icon size={32} />
20
- </div>
21
- {title}
22
- </h1>
23
- {description && (
24
- <p className="text-muted-foreground mt-2 text-sm font-bold opacity-60 uppercase tracking-widest pl-[3.75rem]">
25
- {description}
26
- </p>
27
- )}
28
- </div>
29
- <div>
30
- {children}
31
- </div>
32
- </div>
33
- )
13
+ export function PageHeader({
14
+ icon: Icon,
15
+ title,
16
+ description,
17
+ children,
18
+ className,
19
+ }: PageHeaderProps) {
20
+ return (
21
+ <div className={cn('flex justify-between items-end', className)}>
22
+ <div>
23
+ <h1 className="text-4xl font-black tracking-tighter flex items-center gap-3">
24
+ <div className="p-2 bg-primary/10 rounded-xl text-primary">
25
+ <Icon size={32} />
26
+ </div>
27
+ {title}
28
+ </h1>
29
+ {description && (
30
+ <p className="text-muted-foreground mt-2 text-sm font-bold opacity-60 uppercase tracking-widest pl-[3.75rem]">
31
+ {description}
32
+ </p>
33
+ )}
34
+ </div>
35
+ <div>{children}</div>
36
+ </div>
37
+ )
34
38
  }
@@ -506,4 +506,3 @@ export function OverviewPage() {
506
506
  </div>
507
507
  )
508
508
  }
509
-