@geekron/strapi 0.1.3 → 0.1.4

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.
@@ -1,22 +1,545 @@
1
+ // server/src/api/common/content-types/common/schema.json
2
+ var schema_default = {
3
+ kind: "singleType",
4
+ collectionName: "commons",
5
+ info: {
6
+ singularName: "common",
7
+ pluralName: "commons",
8
+ displayName: "Common",
9
+ description: "Define common settings"
10
+ },
11
+ options: {
12
+ draftAndPublish: true
13
+ },
14
+ pluginOptions: {
15
+ i18n: {
16
+ localized: true
17
+ }
18
+ },
19
+ attributes: {
20
+ favicon: {
21
+ type: "media",
22
+ pluginOptions: {
23
+ i18n: {
24
+ localized: true
25
+ }
26
+ },
27
+ multiple: false,
28
+ required: false,
29
+ allowedTypes: [
30
+ "images",
31
+ "files",
32
+ "videos"
33
+ ]
34
+ },
35
+ title: {
36
+ type: "string",
37
+ pluginOptions: {
38
+ i18n: {
39
+ localized: true
40
+ }
41
+ },
42
+ required: true
43
+ },
44
+ description: {
45
+ type: "text",
46
+ pluginOptions: {
47
+ i18n: {
48
+ localized: true
49
+ }
50
+ },
51
+ required: false
52
+ },
53
+ copyright: {
54
+ type: "string",
55
+ pluginOptions: {
56
+ i18n: {
57
+ localized: true
58
+ }
59
+ },
60
+ default: "Copyright"
61
+ },
62
+ icp: {
63
+ type: "string",
64
+ pluginOptions: {
65
+ i18n: {
66
+ localized: true
67
+ }
68
+ }
69
+ }
70
+ }
71
+ };
72
+
73
+ // server/src/api/common/controllers/common.ts
74
+ import { factories } from "@strapi/strapi";
75
+ var common_default = factories.createCoreController("plugin::website.common");
76
+
77
+ // server/src/api/common/routes/common.ts
78
+ import { factories as factories2 } from "@strapi/strapi";
79
+ var common_default2 = factories2.createCoreRouter("plugin::website.common");
80
+
81
+ // server/src/api/common/services/common.ts
82
+ import { factories as factories3 } from "@strapi/strapi";
83
+ var common_default3 = factories3.createCoreService("plugin::website.common");
84
+
85
+ // server/src/api/common/index.ts
86
+ var common_default4 = {
87
+ schema: schema_default,
88
+ controllers: common_default,
89
+ services: common_default3,
90
+ routes: common_default2
91
+ };
92
+ // server/src/api/menu/content-types/menu/schema.json
93
+ var schema_default2 = {
94
+ kind: "singleType",
95
+ collectionName: "menus",
96
+ info: {
97
+ singularName: "menu",
98
+ pluralName: "menus",
99
+ displayName: "Menu"
100
+ },
101
+ options: {
102
+ draftAndPublish: true
103
+ },
104
+ pluginOptions: {
105
+ i18n: {
106
+ localized: true
107
+ }
108
+ },
109
+ attributes: {
110
+ title: {
111
+ type: "string",
112
+ pluginOptions: {
113
+ i18n: {
114
+ localized: true
115
+ }
116
+ },
117
+ required: true
118
+ }
119
+ }
120
+ };
121
+
122
+ // server/src/api/menu/controllers/menu.ts
123
+ import { factories as factories4 } from "@strapi/strapi";
124
+ var menu_default = factories4.createCoreController("plugin::website.menu");
125
+
126
+ // server/src/api/menu/routes/menu.ts
127
+ import { factories as factories5 } from "@strapi/strapi";
128
+ var menu_default2 = factories5.createCoreRouter("plugin::website.menu");
129
+
130
+ // server/src/api/menu/services/menu.ts
131
+ import { factories as factories6 } from "@strapi/strapi";
132
+ var menu_default3 = factories6.createCoreService("plugin::website.menu");
133
+
134
+ // server/src/api/menu/index.ts
135
+ var menu_default4 = {
136
+ schema: schema_default2,
137
+ controllers: menu_default,
138
+ services: menu_default3,
139
+ routes: menu_default2
140
+ };
141
+ // server/src/api/site/content-types/site/schema.json
142
+ var schema_default3 = {
143
+ kind: "singleType",
144
+ collectionName: "sites",
145
+ info: {
146
+ singularName: "site",
147
+ pluralName: "sites",
148
+ displayName: "Site"
149
+ },
150
+ options: {
151
+ draftAndPublish: true
152
+ },
153
+ pluginOptions: {
154
+ i18n: {
155
+ localized: true
156
+ }
157
+ },
158
+ attributes: {
159
+ enabled: {
160
+ type: "boolean",
161
+ pluginOptions: {
162
+ i18n: {
163
+ localized: true
164
+ }
165
+ },
166
+ required: true,
167
+ default: true
168
+ },
169
+ title: {
170
+ type: "string",
171
+ pluginOptions: {
172
+ i18n: {
173
+ localized: true
174
+ }
175
+ }
176
+ },
177
+ logo: {
178
+ type: "media",
179
+ pluginOptions: {
180
+ i18n: {
181
+ localized: true
182
+ }
183
+ },
184
+ multiple: false,
185
+ allowedTypes: [
186
+ "images"
187
+ ]
188
+ },
189
+ icon: {
190
+ type: "media",
191
+ pluginOptions: {
192
+ i18n: {
193
+ localized: true
194
+ }
195
+ },
196
+ multiple: false,
197
+ allowedTypes: [
198
+ "images"
199
+ ]
200
+ },
201
+ url: {
202
+ type: "string",
203
+ pluginOptions: {
204
+ i18n: {
205
+ localized: true
206
+ }
207
+ }
208
+ },
209
+ robots: {
210
+ type: "text",
211
+ pluginOptions: {
212
+ i18n: {
213
+ localized: true
214
+ }
215
+ }
216
+ },
217
+ head: {
218
+ type: "text",
219
+ pluginOptions: {
220
+ i18n: {
221
+ localized: true
222
+ }
223
+ }
224
+ },
225
+ foot: {
226
+ type: "text",
227
+ pluginOptions: {
228
+ i18n: {
229
+ localized: true
230
+ }
231
+ }
232
+ },
233
+ inquiryEmail: {
234
+ type: "email",
235
+ pluginOptions: {
236
+ i18n: {
237
+ localized: true
238
+ }
239
+ }
240
+ },
241
+ index: {
242
+ type: "boolean",
243
+ pluginOptions: {
244
+ i18n: {
245
+ localized: true
246
+ }
247
+ },
248
+ default: false
249
+ }
250
+ }
251
+ };
252
+
253
+ // server/src/api/site/controllers/site.ts
254
+ import { factories as factories7 } from "@strapi/strapi";
255
+ var site_default = factories7.createCoreController("plugin::website.site");
256
+
257
+ // server/src/api/site/routes/site.ts
258
+ import { factories as factories8 } from "@strapi/strapi";
259
+ var site_default2 = factories8.createCoreRouter("plugin::website.site");
260
+
261
+ // server/src/api/site/services/site.ts
262
+ import { factories as factories9 } from "@strapi/strapi";
263
+ var site_default3 = factories9.createCoreService("plugin::website.site");
264
+
265
+ // server/src/api/site/index.ts
266
+ var site_default4 = {
267
+ schema: schema_default3,
268
+ controllers: site_default,
269
+ services: site_default3,
270
+ routes: site_default2
271
+ };
272
+ // server/src/api/translation/content-types/translation/schema.json
273
+ var schema_default4 = {
274
+ kind: "collectionType",
275
+ collectionName: "translations",
276
+ info: {
277
+ singularName: "translation",
278
+ pluralName: "translations",
279
+ displayName: "Translation"
280
+ },
281
+ options: {
282
+ draftAndPublish: true
283
+ },
284
+ pluginOptions: {
285
+ i18n: {
286
+ localized: true
287
+ }
288
+ },
289
+ attributes: {
290
+ key: {
291
+ type: "string",
292
+ pluginOptions: {
293
+ i18n: {
294
+ localized: false
295
+ }
296
+ },
297
+ required: true,
298
+ unique: true
299
+ },
300
+ value: {
301
+ type: "text",
302
+ pluginOptions: {
303
+ i18n: {
304
+ localized: true
305
+ }
306
+ },
307
+ required: true
308
+ }
309
+ }
310
+ };
311
+
312
+ // server/src/api/translation/controllers/translation.ts
313
+ import { factories as factories10 } from "@strapi/strapi";
314
+ var translation_default = factories10.createCoreController("plugin::website.translation");
315
+
316
+ // server/src/api/translation/routes/translation.ts
317
+ import { factories as factories11 } from "@strapi/strapi";
318
+ var translation_default2 = factories11.createCoreRouter("plugin::website.translation");
319
+
320
+ // server/src/api/translation/services/translation.ts
321
+ import { factories as factories12 } from "@strapi/strapi";
322
+ var translation_default3 = factories12.createCoreService("plugin::website.translation");
323
+
324
+ // server/src/api/translation/index.ts
325
+ var translation_default4 = {
326
+ schema: schema_default4,
327
+ controllers: translation_default,
328
+ services: translation_default3,
329
+ routes: translation_default2
330
+ };
331
+
332
+ // server/src/api/index.ts
333
+ var contentTypes = {};
334
+ var controllers = {};
335
+ var routes = {};
336
+ var services = {};
337
+ contentTypes.common = {
338
+ schema: common_default4.schema
339
+ };
340
+ contentTypes.menu = {
341
+ schema: menu_default4.schema
342
+ };
343
+ contentTypes.site = {
344
+ schema: site_default4.schema
345
+ };
346
+ contentTypes.translation = {
347
+ schema: translation_default4.schema
348
+ };
349
+ routes.common = common_default4.routes;
350
+ routes.menu = menu_default4.routes;
351
+ routes.site = site_default4.routes;
352
+ routes.translation = translation_default4.routes;
353
+ services.common = common_default4.services;
354
+ services.menu = menu_default4.services;
355
+ services.site = site_default4.services;
356
+ services.translation = translation_default4.services;
357
+ controllers.common = common_default4.controllers;
358
+ controllers.menu = menu_default4.controllers;
359
+ controllers.site = site_default4.controllers;
360
+ controllers.translation = translation_default4.controllers;
361
+ var api_default = {
362
+ contentTypes,
363
+ controllers,
364
+ routes,
365
+ services
366
+ };
367
+
1
368
  // server/src/bootstrap.ts
2
- var bootstrap = ({ strapi }) => {
3
- strapi.log.info("dashboard server plugin: bootstrap");
369
+ var bootstrap = ({ strapi: strapi2 }) => {
370
+ strapi2.log.info("website server plugin: bootstrap");
4
371
  };
5
372
  var bootstrap_default = bootstrap;
6
373
 
374
+ // server/src/config/index.ts
375
+ var config = {
376
+ default: {},
377
+ validator: (config2) => config2
378
+ };
379
+ var config_default = config;
380
+
7
381
  // server/src/contentTypes/index.ts
8
- var contentTypes = {};
9
- var contentTypes_default = contentTypes;
382
+ var contentTypes2 = {};
383
+ var contentTypes_default = contentTypes2;
384
+
385
+ // server/src/controllers/fields.ts
386
+ var checkAvailable = async (context) => {
387
+ const body = context.request.body;
388
+ if (body.kind === "collectionType") {
389
+ const entities = await strapi.entityService.findMany(body.uid, {
390
+ filters: {
391
+ [body.field]: {
392
+ $eq: body.value
393
+ }
394
+ }
395
+ });
396
+ return { isAvailable: !entities?.length };
397
+ }
398
+ return { isAvailable: true };
399
+ };
400
+ var fields = {
401
+ checkAvailable
402
+ };
403
+ var fields_default = fields;
404
+
405
+ // server/src/controllers/utils/request.ts
406
+ var getWebsiteConfig = async () => {
407
+ const locale = await strapi.plugin("i18n").service("locales").getDefaultLocale();
408
+ const [site, [token]] = await Promise.all([
409
+ strapi.db.query("plugin::website.site").findOne({ where: { locale } }),
410
+ strapi.db.query("admin::api-token").findMany({ where: { type: "full-access" } })
411
+ ]);
412
+ if (!site || !token) {
413
+ throw new Error("You need to configure Site url and a full-access API token first.");
414
+ }
415
+ const accessKey = strapi.service("admin::encryption").decrypt(token.encryptedKey);
416
+ return {
417
+ url: site?.url,
418
+ token: accessKey
419
+ };
420
+ };
421
+ var buildHeaders = (token, extraHeaders = {}) => {
422
+ const headers = { ...extraHeaders };
423
+ if (token) {
424
+ headers.Authorization = `Bearer ${token}`;
425
+ }
426
+ return headers;
427
+ };
428
+ var fetchWebsite = async (endpoint, options = {}) => {
429
+ const { url, token } = await getWebsiteConfig();
430
+ const fullUrl = `${url}${endpoint}`;
431
+ console.debug("Fetch Website Server Url:", fullUrl);
432
+ const headers = buildHeaders(token, options.headers);
433
+ const response = await fetch(fullUrl, { ...options, headers });
434
+ if (!response.ok) {
435
+ throw new Error(`HTTP error! status: ${response.status}`);
436
+ }
437
+ const result = await response.json();
438
+ return result;
439
+ };
440
+ var handleError = (ctx, error, defaultMessage) => {
441
+ const timestamp = new Date().toISOString();
442
+ let code = 500;
443
+ let message = error.message || defaultMessage;
444
+ if (error.status === 404 || error.message?.includes("404")) {
445
+ code = 404;
446
+ message = error.message || "Resource not found";
447
+ } else if (error.status === 400 || error.message?.includes("400")) {
448
+ code = 400;
449
+ message = error.message || "Bad request";
450
+ } else if (error.status === 401 || error.message?.includes("401")) {
451
+ code = 401;
452
+ message = error.message || "Unauthorized";
453
+ } else if (error.status === 403 || error.message?.includes("403")) {
454
+ code = 403;
455
+ message = error.message || "Forbidden";
456
+ }
457
+ const errorResponse = {
458
+ code,
459
+ message: `${defaultMessage}: ${message}`,
460
+ timestamp
461
+ };
462
+ ctx.status = code;
463
+ return errorResponse;
464
+ };
465
+ var buildQueryParams = (params) => {
466
+ const queryParams = new URLSearchParams;
467
+ Object.entries(params).forEach(([key, value]) => {
468
+ if (value !== undefined && value !== null && value !== "") {
469
+ queryParams.append(key, String(value));
470
+ }
471
+ });
472
+ return queryParams.toString();
473
+ };
474
+ var paginateData = (data, limit, offset) => {
475
+ const total = data.length;
476
+ const startIndex = offset;
477
+ const endIndex = startIndex + limit;
478
+ const items = data.slice(startIndex, endIndex);
479
+ return {
480
+ code: 200,
481
+ message: "success",
482
+ data: {
483
+ items,
484
+ pagination: {
485
+ page: Math.floor(offset / limit) + 1,
486
+ pageSize: limit,
487
+ total
488
+ }
489
+ },
490
+ timestamp: new Date().toISOString()
491
+ };
492
+ };
10
493
 
11
494
  // server/src/controllers/inquiries.ts
12
495
  var list = async (ctx) => {
13
- ctx.body = "Hello World!";
496
+ const {
497
+ page = 1,
498
+ pageSize = 10,
499
+ keyword = "",
500
+ start = "",
501
+ end = "",
502
+ sortBy = "createdAt",
503
+ order = "desc"
504
+ } = ctx.query;
505
+ const queryString = buildQueryParams({
506
+ page,
507
+ pageSize,
508
+ keyword,
509
+ start,
510
+ end,
511
+ sortBy,
512
+ order
513
+ });
514
+ try {
515
+ return await fetchWebsite(`/api/inquiries?${queryString}`);
516
+ } catch (error) {
517
+ return handleError(ctx, error, "Failed to fetch inquiries");
518
+ }
14
519
  };
15
520
  var detail = async (ctx) => {
16
- ctx.body = "refresh";
521
+ const { id } = ctx.params;
522
+ try {
523
+ return await fetchWebsite(`/api/inquiries/${id}`);
524
+ } catch (error) {
525
+ return handleError(ctx, error, "Failed to fetch inquiry detail");
526
+ }
17
527
  };
18
528
  var read = async (ctx) => {
19
- ctx.body = "dashboard";
529
+ const { id } = ctx.params;
530
+ const operatorId = ctx.state?.user?.id;
531
+ if (!operatorId) {
532
+ ctx.throw(400, "operatorId is required");
533
+ }
534
+ try {
535
+ return await fetchWebsite(`/api/inquiries/${id}/read`, {
536
+ method: "PUT",
537
+ headers: { "Content-Type": "application/json" },
538
+ body: JSON.stringify({ operatorId })
539
+ });
540
+ } catch (error) {
541
+ return handleError(ctx, error, "Failed to mark inquiry as read");
542
+ }
20
543
  };
21
544
  var inquiries = {
22
545
  list,
@@ -27,13 +550,34 @@ var inquiries_default = inquiries;
27
550
 
28
551
  // server/src/controllers/visitors.ts
29
552
  var pageViews = async (ctx) => {
30
- ctx.body = "Hello World!";
553
+ const { limit = 10, offset = 0, start, end, ip } = ctx.query;
554
+ const queryString = buildQueryParams({ start, end, ip });
555
+ try {
556
+ const allData = await fetchWebsite(`/api/visitor/page-views?${queryString}`);
557
+ return paginateData(allData, Number(limit), Number(offset));
558
+ } catch (error) {
559
+ return handleError(ctx, error, "Failed to fetch page views");
560
+ }
31
561
  };
32
562
  var sessions = async (ctx) => {
33
- ctx.body = "refresh";
563
+ const { limit = 10, offset = 0, start, end, ip } = ctx.query;
564
+ const queryString = buildQueryParams({ start, end, ip });
565
+ try {
566
+ const allData = await fetchWebsite(`/api/visitor/sessions?${queryString}`);
567
+ return paginateData(allData, Number(limit), Number(offset));
568
+ } catch (error) {
569
+ return handleError(ctx, error, "Failed to fetch visitor sessions");
570
+ }
34
571
  };
35
572
  var dailyPageStats = async (ctx) => {
36
- ctx.body = "dashboard";
573
+ const { start, end, page, limit = 10, offset = 0 } = ctx.query;
574
+ const queryString = buildQueryParams({ start, end, page });
575
+ try {
576
+ const allData = await fetchWebsite(`/api/visitor/stats/daily-page?${queryString}`);
577
+ return paginateData(allData, Number(limit), Number(offset));
578
+ } catch (error) {
579
+ return handleError(ctx, error, "Failed to fetch daily page stats");
580
+ }
37
581
  };
38
582
  var visitors = {
39
583
  pageViews,
@@ -43,14 +587,22 @@ var visitors = {
43
587
  var visitors_default = visitors;
44
588
 
45
589
  // server/src/controllers/website.ts
46
- var hello = async (ctx) => {
47
- ctx.body = "Hello World!";
590
+ var hello = async () => {
591
+ return { message: "hello world" };
48
592
  };
49
593
  var refresh = async (ctx) => {
50
- ctx.body = "refresh";
594
+ try {
595
+ return await fetchWebsite("/api/site/refresh");
596
+ } catch (error) {
597
+ return handleError(ctx, error, "Failed to refresh website cache");
598
+ }
51
599
  };
52
600
  var dashboard = async (ctx) => {
53
- ctx.body = "dashboard";
601
+ try {
602
+ return await fetchWebsite("/api/common/dashboard");
603
+ } catch (error) {
604
+ return handleError(ctx, error, "Failed to fetch dashboard stats");
605
+ }
54
606
  };
55
607
  var website = {
56
608
  hello,
@@ -60,47 +612,244 @@ var website = {
60
612
  var website_default = website;
61
613
 
62
614
  // server/src/controllers/index.ts
63
- var controllers = {
615
+ var controllers2 = {
64
616
  website: website_default,
65
617
  visitors: visitors_default,
66
- inquiries: inquiries_default
618
+ inquiries: inquiries_default,
619
+ fields: fields_default
67
620
  };
68
- var controllers_default = controllers;
621
+ var controllers_default = controllers2;
69
622
 
70
623
  // server/src/destroy.ts
71
- var destroy = ({ strapi }) => {
72
- strapi.log.info("dashboard server plugin: bootstrap");
624
+ var destroy = ({ strapi: strapi2 }) => {
625
+ strapi2.log.info("dashboard server plugin: bootstrap");
73
626
  };
74
627
  var destroy_default = destroy;
75
628
 
629
+ // server/src/components/index.ts
630
+ var createComponent = (strapi2, { name, displayName, icon, attributes }) => {
631
+ const category = "website";
632
+ if (strapi2.components[`${category}.${name}`])
633
+ return;
634
+ const builder = strapi2.plugin("content-type-builder");
635
+ builder.services.components.createComponent({
636
+ component: {
637
+ icon,
638
+ category,
639
+ displayName,
640
+ attributes
641
+ }
642
+ }).then((r) => {
643
+ console.log(`create ${name} component`, r);
644
+ });
645
+ };
646
+ var registerComponents = (strapi2, components) => {
647
+ components.forEach((component) => {
648
+ createComponent(strapi2, component);
649
+ });
650
+ };
651
+
652
+ // server/src/components/banner.ts
653
+ var component = {
654
+ name: "banner",
655
+ icon: "landscape",
656
+ displayName: "Banner",
657
+ attributes: {
658
+ title: {
659
+ type: "string"
660
+ },
661
+ subtitle: {
662
+ type: "string"
663
+ },
664
+ description: {
665
+ type: "string"
666
+ },
667
+ image: {
668
+ type: "media",
669
+ multiple: false,
670
+ required: true,
671
+ allowedTypes: ["images"]
672
+ },
673
+ mImage: {
674
+ type: "media",
675
+ multiple: false,
676
+ allowedTypes: ["images"]
677
+ }
678
+ }
679
+ };
680
+ var banner_default = component;
681
+
682
+ // server/src/components/logo.ts
683
+ var component2 = {
684
+ name: "logo",
685
+ icon: "picture",
686
+ displayName: "Logo",
687
+ attributes: {
688
+ main: {
689
+ type: "media",
690
+ multiple: false,
691
+ allowedTypes: ["images"]
692
+ },
693
+ sub: {
694
+ type: "media",
695
+ multiple: false,
696
+ allowedTypes: ["images"]
697
+ }
698
+ }
699
+ };
700
+ var logo_default = component2;
701
+
702
+ // server/src/components/social.ts
703
+ var component3 = {
704
+ name: "social",
705
+ icon: "paperPlane",
706
+ displayName: "Social",
707
+ attributes: {
708
+ type: {
709
+ type: "enumeration",
710
+ enum: ["url", "qrcode"]
711
+ },
712
+ url: {
713
+ type: "string",
714
+ conditions: {
715
+ visible: {
716
+ "==": [
717
+ {
718
+ var: "type"
719
+ },
720
+ "url"
721
+ ]
722
+ }
723
+ }
724
+ },
725
+ qrcode: {
726
+ type: "media",
727
+ conditions: {
728
+ visible: {
729
+ "==": [
730
+ {
731
+ var: "type"
732
+ },
733
+ "qrcode"
734
+ ]
735
+ }
736
+ },
737
+ multiple: false,
738
+ allowedTypes: ["images"]
739
+ }
740
+ }
741
+ };
742
+ var social_default = component3;
743
+
744
+ // server/src/components/video.ts
745
+ var component4 = {
746
+ name: "video",
747
+ icon: "play",
748
+ displayName: "Video",
749
+ attributes: {
750
+ url: {
751
+ type: "string",
752
+ required: true
753
+ },
754
+ title: {
755
+ type: "string"
756
+ },
757
+ image: {
758
+ type: "media",
759
+ multiple: false,
760
+ allowedTypes: ["images"]
761
+ }
762
+ }
763
+ };
764
+ var video_default = component4;
765
+
76
766
  // server/src/register.ts
77
- var register = ({ strapi }) => {
78
- strapi.log.info("dashboard server plugin: bootstrap");
767
+ var register = ({ strapi: strapi2 }) => {
768
+ strapi2.log.info("website server plugin: register");
769
+ registerComponents(strapi2, [
770
+ banner_default,
771
+ social_default,
772
+ logo_default,
773
+ video_default
774
+ ]);
775
+ strapi2.customFields.register([
776
+ {
777
+ name: "slugInput",
778
+ plugin: "website",
779
+ type: "string",
780
+ inputSize: {
781
+ default: 6,
782
+ isResizable: true
783
+ }
784
+ },
785
+ {
786
+ name: "dataNested",
787
+ plugin: "website",
788
+ type: "json",
789
+ inputSize: {
790
+ default: 12,
791
+ isResizable: false
792
+ }
793
+ },
794
+ {
795
+ name: "dataSelect",
796
+ plugin: "website",
797
+ type: "json",
798
+ inputSize: {
799
+ default: 12,
800
+ isResizable: false
801
+ }
802
+ },
803
+ {
804
+ name: "iconPicker",
805
+ plugin: "website",
806
+ type: "json",
807
+ inputSize: {
808
+ default: 4,
809
+ isResizable: true
810
+ }
811
+ },
812
+ {
813
+ name: "colorPicker",
814
+ plugin: "website",
815
+ type: "string",
816
+ inputSize: {
817
+ default: 4,
818
+ isResizable: true
819
+ }
820
+ }
821
+ ]);
79
822
  };
80
823
  var register_default = register;
81
824
 
82
825
  // server/src/routes/index.ts
83
- var routes = {
826
+ var routes2 = {
84
827
  admin: {
85
828
  type: "admin",
86
829
  routes: [
830
+ {
831
+ method: "POST",
832
+ path: "/fields/check-available",
833
+ handler: "fields.checkAvailable",
834
+ info: {}
835
+ },
87
836
  {
88
837
  method: "GET",
89
- path: "/website/hello",
838
+ path: "/hello",
90
839
  handler: "website.hello",
91
840
  config: { auth: false },
92
841
  info: {}
93
842
  },
94
843
  {
95
844
  method: "GET",
96
- path: "/website/refresh",
845
+ path: "/refresh",
97
846
  handler: "website.refresh",
98
847
  config: {},
99
848
  info: {}
100
849
  },
101
850
  {
102
851
  method: "GET",
103
- path: "/website/dashboard",
852
+ path: "/dashboard",
104
853
  handler: "website.dashboard",
105
854
  config: {},
106
855
  info: {}
@@ -150,27 +899,36 @@ var routes = {
150
899
  ]
151
900
  }
152
901
  };
153
- var routes_default = routes;
902
+ var routes_default = routes2;
154
903
 
155
904
  // server/src/services/index.ts
156
- var services = {};
157
- var services_default = services;
905
+ var services2 = {};
906
+ var services_default = services2;
158
907
 
159
908
  // server/src/index.ts
160
909
  var plugin = {
161
910
  register: register_default,
162
911
  bootstrap: bootstrap_default,
163
912
  destroy: destroy_default,
164
- controllers: controllers_default,
165
- routes: routes_default,
166
- services: services_default,
167
- contentTypes: contentTypes_default,
913
+ config: config_default,
914
+ contentTypes: {
915
+ ...contentTypes_default,
916
+ ...api_default.contentTypes
917
+ },
918
+ controllers: {
919
+ ...controllers_default,
920
+ ...api_default.controllers
921
+ },
922
+ routes: {
923
+ ...routes_default,
924
+ ...api_default.routes
925
+ },
926
+ services: {
927
+ ...services_default,
928
+ ...api_default.services
929
+ },
168
930
  policies: {},
169
- middlewares: {},
170
- config: {
171
- default: {},
172
- validator: () => {}
173
- }
931
+ middlewares: {}
174
932
  };
175
933
  var src_default = plugin;
176
934
  export {