@voyantjs/ground 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AA2CjE,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAgbrB,CAAA;AAEJ,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAA"}
package/dist/routes.js ADDED
@@ -0,0 +1,316 @@
1
+ import { Hono } from "hono";
2
+ import { groundService } from "./service.js";
3
+ import { groundDispatchAssignmentListQuerySchema, groundDispatchCheckpointListQuerySchema, groundDispatchLegListQuerySchema, groundDispatchListQuerySchema, groundDispatchPassengerListQuerySchema, groundDriverListQuerySchema, groundDriverShiftListQuerySchema, groundExecutionEventListQuerySchema, groundOperatorListQuerySchema, groundServiceIncidentListQuerySchema, groundTransferPreferenceListQuerySchema, groundVehicleListQuerySchema, insertGroundDispatchAssignmentSchema, insertGroundDispatchCheckpointSchema, insertGroundDispatchLegSchema, insertGroundDispatchPassengerSchema, insertGroundDispatchSchema, insertGroundDriverSchema, insertGroundDriverShiftSchema, insertGroundExecutionEventSchema, insertGroundOperatorSchema, insertGroundServiceIncidentSchema, insertGroundTransferPreferenceSchema, insertGroundVehicleSchema, updateGroundDispatchAssignmentSchema, updateGroundDispatchCheckpointSchema, updateGroundDispatchLegSchema, updateGroundDispatchPassengerSchema, updateGroundDispatchSchema, updateGroundDriverSchema, updateGroundDriverShiftSchema, updateGroundExecutionEventSchema, updateGroundOperatorSchema, updateGroundServiceIncidentSchema, updateGroundTransferPreferenceSchema, updateGroundVehicleSchema, } from "./validation.js";
4
+ export const groundRoutes = new Hono()
5
+ .get("/operators", async (c) => {
6
+ const query = groundOperatorListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
7
+ return c.json(await groundService.listOperators(c.get("db"), query));
8
+ })
9
+ .post("/operators", async (c) => {
10
+ return c.json({
11
+ data: await groundService.createOperator(c.get("db"), insertGroundOperatorSchema.parse(await c.req.json())),
12
+ }, 201);
13
+ })
14
+ .get("/operators/:id", async (c) => {
15
+ const row = await groundService.getOperatorById(c.get("db"), c.req.param("id"));
16
+ if (!row)
17
+ return c.json({ error: "Ground operator not found" }, 404);
18
+ return c.json({ data: row });
19
+ })
20
+ .patch("/operators/:id", async (c) => {
21
+ const row = await groundService.updateOperator(c.get("db"), c.req.param("id"), updateGroundOperatorSchema.parse(await c.req.json()));
22
+ if (!row)
23
+ return c.json({ error: "Ground operator not found" }, 404);
24
+ return c.json({ data: row });
25
+ })
26
+ .delete("/operators/:id", async (c) => {
27
+ const row = await groundService.deleteOperator(c.get("db"), c.req.param("id"));
28
+ if (!row)
29
+ return c.json({ error: "Ground operator not found" }, 404);
30
+ return c.json({ success: true });
31
+ })
32
+ .get("/vehicles", async (c) => {
33
+ const query = groundVehicleListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
34
+ return c.json(await groundService.listVehicles(c.get("db"), query));
35
+ })
36
+ .post("/vehicles", async (c) => {
37
+ return c.json({
38
+ data: await groundService.createVehicle(c.get("db"), insertGroundVehicleSchema.parse(await c.req.json())),
39
+ }, 201);
40
+ })
41
+ .get("/vehicles/:id", async (c) => {
42
+ const row = await groundService.getVehicleById(c.get("db"), c.req.param("id"));
43
+ if (!row)
44
+ return c.json({ error: "Ground vehicle not found" }, 404);
45
+ return c.json({ data: row });
46
+ })
47
+ .patch("/vehicles/:id", async (c) => {
48
+ const row = await groundService.updateVehicle(c.get("db"), c.req.param("id"), updateGroundVehicleSchema.parse(await c.req.json()));
49
+ if (!row)
50
+ return c.json({ error: "Ground vehicle not found" }, 404);
51
+ return c.json({ data: row });
52
+ })
53
+ .delete("/vehicles/:id", async (c) => {
54
+ const row = await groundService.deleteVehicle(c.get("db"), c.req.param("id"));
55
+ if (!row)
56
+ return c.json({ error: "Ground vehicle not found" }, 404);
57
+ return c.json({ success: true });
58
+ })
59
+ .get("/drivers", async (c) => {
60
+ const query = groundDriverListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
61
+ return c.json(await groundService.listDrivers(c.get("db"), query));
62
+ })
63
+ .post("/drivers", async (c) => {
64
+ return c.json({
65
+ data: await groundService.createDriver(c.get("db"), insertGroundDriverSchema.parse(await c.req.json())),
66
+ }, 201);
67
+ })
68
+ .get("/drivers/:id", async (c) => {
69
+ const row = await groundService.getDriverById(c.get("db"), c.req.param("id"));
70
+ if (!row)
71
+ return c.json({ error: "Ground driver not found" }, 404);
72
+ return c.json({ data: row });
73
+ })
74
+ .patch("/drivers/:id", async (c) => {
75
+ const row = await groundService.updateDriver(c.get("db"), c.req.param("id"), updateGroundDriverSchema.parse(await c.req.json()));
76
+ if (!row)
77
+ return c.json({ error: "Ground driver not found" }, 404);
78
+ return c.json({ data: row });
79
+ })
80
+ .delete("/drivers/:id", async (c) => {
81
+ const row = await groundService.deleteDriver(c.get("db"), c.req.param("id"));
82
+ if (!row)
83
+ return c.json({ error: "Ground driver not found" }, 404);
84
+ return c.json({ success: true });
85
+ })
86
+ .get("/transfer-preferences", async (c) => {
87
+ const query = groundTransferPreferenceListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
88
+ return c.json(await groundService.listTransferPreferences(c.get("db"), query));
89
+ })
90
+ .post("/transfer-preferences", async (c) => {
91
+ return c.json({
92
+ data: await groundService.createTransferPreference(c.get("db"), insertGroundTransferPreferenceSchema.parse(await c.req.json())),
93
+ }, 201);
94
+ })
95
+ .get("/transfer-preferences/:id", async (c) => {
96
+ const row = await groundService.getTransferPreferenceById(c.get("db"), c.req.param("id"));
97
+ if (!row)
98
+ return c.json({ error: "Ground transfer preference not found" }, 404);
99
+ return c.json({ data: row });
100
+ })
101
+ .patch("/transfer-preferences/:id", async (c) => {
102
+ const row = await groundService.updateTransferPreference(c.get("db"), c.req.param("id"), updateGroundTransferPreferenceSchema.parse(await c.req.json()));
103
+ if (!row)
104
+ return c.json({ error: "Ground transfer preference not found" }, 404);
105
+ return c.json({ data: row });
106
+ })
107
+ .delete("/transfer-preferences/:id", async (c) => {
108
+ const row = await groundService.deleteTransferPreference(c.get("db"), c.req.param("id"));
109
+ if (!row)
110
+ return c.json({ error: "Ground transfer preference not found" }, 404);
111
+ return c.json({ success: true });
112
+ })
113
+ .get("/dispatches", async (c) => {
114
+ const query = groundDispatchListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
115
+ return c.json(await groundService.listDispatches(c.get("db"), query));
116
+ })
117
+ .post("/dispatches", async (c) => {
118
+ return c.json({
119
+ data: await groundService.createDispatch(c.get("db"), insertGroundDispatchSchema.parse(await c.req.json())),
120
+ }, 201);
121
+ })
122
+ .get("/dispatches/:id", async (c) => {
123
+ const row = await groundService.getDispatchById(c.get("db"), c.req.param("id"));
124
+ if (!row)
125
+ return c.json({ error: "Ground dispatch not found" }, 404);
126
+ return c.json({ data: row });
127
+ })
128
+ .patch("/dispatches/:id", async (c) => {
129
+ const row = await groundService.updateDispatch(c.get("db"), c.req.param("id"), updateGroundDispatchSchema.parse(await c.req.json()));
130
+ if (!row)
131
+ return c.json({ error: "Ground dispatch not found" }, 404);
132
+ return c.json({ data: row });
133
+ })
134
+ .delete("/dispatches/:id", async (c) => {
135
+ const row = await groundService.deleteDispatch(c.get("db"), c.req.param("id"));
136
+ if (!row)
137
+ return c.json({ error: "Ground dispatch not found" }, 404);
138
+ return c.json({ success: true });
139
+ })
140
+ .get("/execution-events", async (c) => {
141
+ const query = groundExecutionEventListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
142
+ return c.json(await groundService.listExecutionEvents(c.get("db"), query));
143
+ })
144
+ .post("/execution-events", async (c) => {
145
+ return c.json({
146
+ data: await groundService.createExecutionEvent(c.get("db"), insertGroundExecutionEventSchema.parse(await c.req.json())),
147
+ }, 201);
148
+ })
149
+ .get("/execution-events/:id", async (c) => {
150
+ const row = await groundService.getExecutionEventById(c.get("db"), c.req.param("id"));
151
+ if (!row)
152
+ return c.json({ error: "Ground execution event not found" }, 404);
153
+ return c.json({ data: row });
154
+ })
155
+ .patch("/execution-events/:id", async (c) => {
156
+ const row = await groundService.updateExecutionEvent(c.get("db"), c.req.param("id"), updateGroundExecutionEventSchema.parse(await c.req.json()));
157
+ if (!row)
158
+ return c.json({ error: "Ground execution event not found" }, 404);
159
+ return c.json({ data: row });
160
+ })
161
+ .delete("/execution-events/:id", async (c) => {
162
+ const row = await groundService.deleteExecutionEvent(c.get("db"), c.req.param("id"));
163
+ if (!row)
164
+ return c.json({ error: "Ground execution event not found" }, 404);
165
+ return c.json({ success: true });
166
+ })
167
+ .get("/dispatch-assignments", async (c) => {
168
+ const query = groundDispatchAssignmentListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
169
+ return c.json(await groundService.listDispatchAssignments(c.get("db"), query));
170
+ })
171
+ .post("/dispatch-assignments", async (c) => c.json({
172
+ data: await groundService.createDispatchAssignment(c.get("db"), insertGroundDispatchAssignmentSchema.parse(await c.req.json())),
173
+ }, 201))
174
+ .get("/dispatch-assignments/:id", async (c) => {
175
+ const row = await groundService.getDispatchAssignmentById(c.get("db"), c.req.param("id"));
176
+ if (!row)
177
+ return c.json({ error: "Ground dispatch assignment not found" }, 404);
178
+ return c.json({ data: row });
179
+ })
180
+ .patch("/dispatch-assignments/:id", async (c) => {
181
+ const row = await groundService.updateDispatchAssignment(c.get("db"), c.req.param("id"), updateGroundDispatchAssignmentSchema.parse(await c.req.json()));
182
+ if (!row)
183
+ return c.json({ error: "Ground dispatch assignment not found" }, 404);
184
+ return c.json({ data: row });
185
+ })
186
+ .delete("/dispatch-assignments/:id", async (c) => {
187
+ const row = await groundService.deleteDispatchAssignment(c.get("db"), c.req.param("id"));
188
+ if (!row)
189
+ return c.json({ error: "Ground dispatch assignment not found" }, 404);
190
+ return c.json({ success: true });
191
+ })
192
+ .get("/dispatch-legs", async (c) => {
193
+ const query = groundDispatchLegListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
194
+ return c.json(await groundService.listDispatchLegs(c.get("db"), query));
195
+ })
196
+ .post("/dispatch-legs", async (c) => c.json({
197
+ data: await groundService.createDispatchLeg(c.get("db"), insertGroundDispatchLegSchema.parse(await c.req.json())),
198
+ }, 201))
199
+ .get("/dispatch-legs/:id", async (c) => {
200
+ const row = await groundService.getDispatchLegById(c.get("db"), c.req.param("id"));
201
+ if (!row)
202
+ return c.json({ error: "Ground dispatch leg not found" }, 404);
203
+ return c.json({ data: row });
204
+ })
205
+ .patch("/dispatch-legs/:id", async (c) => {
206
+ const row = await groundService.updateDispatchLeg(c.get("db"), c.req.param("id"), updateGroundDispatchLegSchema.parse(await c.req.json()));
207
+ if (!row)
208
+ return c.json({ error: "Ground dispatch leg not found" }, 404);
209
+ return c.json({ data: row });
210
+ })
211
+ .delete("/dispatch-legs/:id", async (c) => {
212
+ const row = await groundService.deleteDispatchLeg(c.get("db"), c.req.param("id"));
213
+ if (!row)
214
+ return c.json({ error: "Ground dispatch leg not found" }, 404);
215
+ return c.json({ success: true });
216
+ })
217
+ .get("/dispatch-passengers", async (c) => {
218
+ const query = groundDispatchPassengerListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
219
+ return c.json(await groundService.listDispatchPassengers(c.get("db"), query));
220
+ })
221
+ .post("/dispatch-passengers", async (c) => c.json({
222
+ data: await groundService.createDispatchPassenger(c.get("db"), insertGroundDispatchPassengerSchema.parse(await c.req.json())),
223
+ }, 201))
224
+ .get("/dispatch-passengers/:id", async (c) => {
225
+ const row = await groundService.getDispatchPassengerById(c.get("db"), c.req.param("id"));
226
+ if (!row)
227
+ return c.json({ error: "Ground dispatch passenger not found" }, 404);
228
+ return c.json({ data: row });
229
+ })
230
+ .patch("/dispatch-passengers/:id", async (c) => {
231
+ const row = await groundService.updateDispatchPassenger(c.get("db"), c.req.param("id"), updateGroundDispatchPassengerSchema.parse(await c.req.json()));
232
+ if (!row)
233
+ return c.json({ error: "Ground dispatch passenger not found" }, 404);
234
+ return c.json({ data: row });
235
+ })
236
+ .delete("/dispatch-passengers/:id", async (c) => {
237
+ const row = await groundService.deleteDispatchPassenger(c.get("db"), c.req.param("id"));
238
+ if (!row)
239
+ return c.json({ error: "Ground dispatch passenger not found" }, 404);
240
+ return c.json({ success: true });
241
+ })
242
+ .get("/driver-shifts", async (c) => {
243
+ const query = groundDriverShiftListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
244
+ return c.json(await groundService.listDriverShifts(c.get("db"), query));
245
+ })
246
+ .post("/driver-shifts", async (c) => c.json({
247
+ data: await groundService.createDriverShift(c.get("db"), insertGroundDriverShiftSchema.parse(await c.req.json())),
248
+ }, 201))
249
+ .get("/driver-shifts/:id", async (c) => {
250
+ const row = await groundService.getDriverShiftById(c.get("db"), c.req.param("id"));
251
+ if (!row)
252
+ return c.json({ error: "Ground driver shift not found" }, 404);
253
+ return c.json({ data: row });
254
+ })
255
+ .patch("/driver-shifts/:id", async (c) => {
256
+ const row = await groundService.updateDriverShift(c.get("db"), c.req.param("id"), updateGroundDriverShiftSchema.parse(await c.req.json()));
257
+ if (!row)
258
+ return c.json({ error: "Ground driver shift not found" }, 404);
259
+ return c.json({ data: row });
260
+ })
261
+ .delete("/driver-shifts/:id", async (c) => {
262
+ const row = await groundService.deleteDriverShift(c.get("db"), c.req.param("id"));
263
+ if (!row)
264
+ return c.json({ error: "Ground driver shift not found" }, 404);
265
+ return c.json({ success: true });
266
+ })
267
+ .get("/service-incidents", async (c) => {
268
+ const query = groundServiceIncidentListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
269
+ return c.json(await groundService.listServiceIncidents(c.get("db"), query));
270
+ })
271
+ .post("/service-incidents", async (c) => c.json({
272
+ data: await groundService.createServiceIncident(c.get("db"), insertGroundServiceIncidentSchema.parse(await c.req.json())),
273
+ }, 201))
274
+ .get("/service-incidents/:id", async (c) => {
275
+ const row = await groundService.getServiceIncidentById(c.get("db"), c.req.param("id"));
276
+ if (!row)
277
+ return c.json({ error: "Ground service incident not found" }, 404);
278
+ return c.json({ data: row });
279
+ })
280
+ .patch("/service-incidents/:id", async (c) => {
281
+ const row = await groundService.updateServiceIncident(c.get("db"), c.req.param("id"), updateGroundServiceIncidentSchema.parse(await c.req.json()));
282
+ if (!row)
283
+ return c.json({ error: "Ground service incident not found" }, 404);
284
+ return c.json({ data: row });
285
+ })
286
+ .delete("/service-incidents/:id", async (c) => {
287
+ const row = await groundService.deleteServiceIncident(c.get("db"), c.req.param("id"));
288
+ if (!row)
289
+ return c.json({ error: "Ground service incident not found" }, 404);
290
+ return c.json({ success: true });
291
+ })
292
+ .get("/dispatch-checkpoints", async (c) => {
293
+ const query = groundDispatchCheckpointListQuerySchema.parse(Object.fromEntries(new URL(c.req.url).searchParams));
294
+ return c.json(await groundService.listDispatchCheckpoints(c.get("db"), query));
295
+ })
296
+ .post("/dispatch-checkpoints", async (c) => c.json({
297
+ data: await groundService.createDispatchCheckpoint(c.get("db"), insertGroundDispatchCheckpointSchema.parse(await c.req.json())),
298
+ }, 201))
299
+ .get("/dispatch-checkpoints/:id", async (c) => {
300
+ const row = await groundService.getDispatchCheckpointById(c.get("db"), c.req.param("id"));
301
+ if (!row)
302
+ return c.json({ error: "Ground dispatch checkpoint not found" }, 404);
303
+ return c.json({ data: row });
304
+ })
305
+ .patch("/dispatch-checkpoints/:id", async (c) => {
306
+ const row = await groundService.updateDispatchCheckpoint(c.get("db"), c.req.param("id"), updateGroundDispatchCheckpointSchema.parse(await c.req.json()));
307
+ if (!row)
308
+ return c.json({ error: "Ground dispatch checkpoint not found" }, 404);
309
+ return c.json({ data: row });
310
+ })
311
+ .delete("/dispatch-checkpoints/:id", async (c) => {
312
+ const row = await groundService.deleteDispatchCheckpoint(c.get("db"), c.req.param("id"));
313
+ if (!row)
314
+ return c.json({ error: "Ground dispatch checkpoint not found" }, 404);
315
+ return c.json({ success: true });
316
+ });