@opengis/admin 0.1.84 → 0.1.85
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.
- package/README.md +29 -29
- package/config.js +4 -4
- package/dist/{IconChevronDown-DoqykhvB.js → IconChevronDown-IrRpX-i0.js} +1 -1
- package/dist/{add-page-ChBpMfRU.js → add-page-DRXx4iOi.js} +1 -1
- package/dist/{admin-interface-SDtt7rqS.js → admin-interface-BY-D9Jvu.js} +4 -4
- package/dist/{admin-view-CKTriO6z.js → admin-view-BZ75rygK.js} +44 -44
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +7 -7
- package/dist/assets/logo.svg +41 -41
- package/dist/{card-page-BaSbgjMn.js → card-page-BAeSkHUO.js} +2 -2
- package/dist/{card-view-B8ohi0lw.js → card-view-p73B3Gbl.js} +1 -1
- package/dist/{edit-page-DLlbyyd_.js → edit-page-CZ8SDvjo.js} +1 -1
- package/dist/{import-file-CV5CU5lC.js → import-file-f46xrNIz.js} +22 -15
- package/dist/style.css +1 -1
- package/module/settings/card/admin.roles.table/access.hbs +27 -27
- package/module/settings/card/admin.roles.table/general_info.hbs +16 -16
- package/module/settings/card/admin.roles.table/index.yml +14 -14
- package/module/settings/card/admin.roles.table/users.hbs +27 -27
- package/module/settings/card/admin.routes.table/general_info.hbs +40 -40
- package/module/settings/card/admin.routes.table/index.yml +8 -8
- package/module/settings/card/admin.routes.table/users.hbs +33 -33
- package/module/settings/card/admin.users.table/general_info.hbs +25 -25
- package/module/settings/card/admin.users.table/index.yml +12 -12
- package/module/settings/card/admin.users.table/logs.hbs +30 -30
- package/module/settings/card/admin.users.table/user_roles.hbs +24 -24
- package/module/settings/cls/core.actions.json +17 -17
- package/module/settings/cls/core.scope.json +13 -13
- package/module/settings/cls/properties.site_status.json +13 -13
- package/module/settings/cls/properties.widget_status.json +13 -13
- package/module/settings/cls/users.user_type.json +13 -13
- package/module/settings/form/admin.access.form.json +36 -36
- package/module/settings/form/admin.custom_column.form.json +71 -71
- package/module/settings/form/admin.properties.form.json +15 -15
- package/module/settings/form/admin.roles.form.json +19 -19
- package/module/settings/form/admin.routes.form.json +25 -25
- package/module/settings/form/admin.user_properties.form.json +15 -15
- package/module/settings/form/admin.user_roles.form.json +21 -21
- package/module/settings/form/admin.users.form.json +153 -153
- package/module/settings/form/user.user_roles.form.json +13 -13
- package/module/settings/interface/admin.properties.json +4 -4
- package/module/settings/interface/admin.roles.json +4 -4
- package/module/settings/interface/admin.routes.json +4 -4
- package/module/settings/interface/admin.users.json +4 -4
- package/module/settings/menu.json +50 -50
- package/module/settings/select/core.roles.json +2 -2
- package/module/settings/select/core.routes.sql +1 -1
- package/module/settings/select/core.user_mentioned.sql +1 -1
- package/module/settings/select/core.user_uid.sql +1 -1
- package/module/settings/table/admin.access.table.json +83 -83
- package/module/settings/table/admin.custom_column.table.json +99 -99
- package/module/settings/table/admin.properties.table.json +39 -39
- package/module/settings/table/admin.roles.table.json +64 -64
- package/module/settings/table/admin.routes.table.json +68 -68
- package/module/settings/table/admin.user_properties.table.json +34 -34
- package/module/settings/table/admin.user_roles.table.json +72 -72
- package/module/settings/table/admin.users.table.json +121 -121
- package/package.json +82 -82
- package/plugin.js +29 -29
- package/server/helpers/controllers/badge.js +11 -11
- package/server/helpers/controllers/hb.js +2 -2
- package/server/helpers/controllers/map.js +2 -2
- package/server/helpers/controllers/mls.js +2 -2
- package/server/helpers/controllers/token.js +16 -16
- package/server/helpers/controllers/vue.js +2 -2
- package/server/helpers/index.mjs +29 -17
- package/server/helpers/list/buttonHelper.js +11 -0
- package/server/helpers/list/descriptionList.js +34 -0
- package/server/helpers/list/tableList.js +66 -0
- package/server/helpers/list/utils/button.js +6 -0
- package/server/plugins/access/funcs/getAdminAccess.js +14 -14
- package/server/plugins/access/index.mjs +6 -6
- package/server/plugins/adminHook.js +81 -93
- package/server/plugins/cron.js +10 -10
- package/server/plugins/docs.js +28 -28
- package/server/plugins/hook.js +223 -223
- package/server/plugins/vite.js +71 -71
- package/server/routes/access/controllers/access.group.js +29 -29
- package/server/routes/access/controllers/access.group.post.js +43 -43
- package/server/routes/access/index.mjs +63 -63
- package/server/routes/calendar/controllers/calendar.data.js +87 -87
- package/server/routes/calendar/index.mjs +7 -7
- package/server/routes/calendar/schema.js +21 -21
- package/server/routes/data/controllers/cardData.js +81 -81
- package/server/routes/data/controllers/cardTabData.js +49 -49
- package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
- package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
- package/server/routes/data/controllers/tableData.js +20 -20
- package/server/routes/data/controllers/tableDataId.js +27 -27
- package/server/routes/data/controllers/tableFilter.js +63 -63
- package/server/routes/data/controllers/tokenInfo.js +9 -9
- package/server/routes/data/controllers/utils/assignTokens.js +30 -30
- package/server/routes/data/controllers/utils/getColumns.js +8 -8
- package/server/routes/data/index.mjs +17 -17
- package/server/routes/data/schema.js +54 -54
- package/server/routes/menu/controllers/getMenu.js +67 -67
- package/server/routes/menu/index.mjs +5 -5
- package/server/routes/notifications/controllers/readNotifications.js +27 -27
- package/server/routes/notifications/controllers/testEmail.js +35 -35
- package/server/routes/notifications/controllers/userNotifications.js +53 -53
- package/server/routes/notifications/funcs/addNotification.js +21 -21
- package/server/routes/notifications/funcs/sendNotification.js +105 -105
- package/server/routes/notifications/hook/onWidgetSet.js +57 -57
- package/server/routes/notifications/index.mjs +27 -27
- package/server/routes/notifications/schema.js +16 -16
- package/server/routes/properties/controllers/admin.properties.get.js +29 -29
- package/server/routes/properties/controllers/user.properties.get.js +30 -30
- package/server/routes/properties/controllers/user.properties.post.js +30 -30
- package/server/routes/properties/funcs/getSettings.js +56 -56
- package/server/routes/properties/funcs/setSettings.js +44 -44
- package/server/routes/properties/funcs/utils/dataInsert.js +26 -26
- package/server/routes/properties/index.mjs +14 -14
- package/server/routes/properties/schema.js +10 -10
- package/server/routes/root.mjs +3 -3
- package/server/routes/templates/controllers/getTemplate.js +26 -26
- package/server/routes/templates/index.mjs +16 -16
- package/server/routes/templates/schema.js +8 -8
- package/server/routes/user/controllers/user.cls.id.js +14 -14
- package/server/routes/user/controllers/user.cls.js +71 -71
- package/server/routes/user/controllers/user.cls.post.js +52 -52
- package/server/routes/user/controllers/user.info.js +17 -17
- package/server/routes/user/schema.js +14 -14
- package/server/routes/widget/controllers/utils/historyFormat.js +75 -75
- package/server/routes/widget/controllers/utils/obj2db.js +13 -13
- package/server/routes/widget/controllers/widget.del.js +41 -41
- package/server/routes/widget/controllers/widget.get.js +96 -96
- package/server/routes/widget/controllers/widget.set.js +76 -76
- package/server/routes/widget/index.mjs +11 -11
- package/server/routes/widget/schema.js +12 -12
- package/server/templates/cls/itree.recrzone_category.json +73 -73
- package/server/templates/cls/test.json +9 -9
- package/server/templates/form/admin.user_cls.data.form.json +49 -49
- package/server/templates/form/admin.user_group_rel.form.json +21 -21
- package/server/templates/form/cp_building.form.json +32 -32
- package/server/templates/form/form-user-pass.json +10 -10
- package/server/templates/form/form-user_group.json +39 -39
- package/server/templates/form/form-users.json +156 -156
- package/server/templates/form/user_group_access.form.json +22 -22
- package/server/templates/select/account_id.json +2 -2
- package/server/templates/table/gis.dataset.table.json +43 -43
- package/server/templates/table/management.user_group.table.json +112 -112
- package/server/templates/table/management.users.table.json +126 -126
- package/utils.js +29 -29
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { handlebarsSync, setToken } from '@opengis/fastify-table/utils.js'
|
|
2
|
+
|
|
3
|
+
import button from './utils/button.js';
|
|
4
|
+
|
|
5
|
+
function format(d, key, data) {
|
|
6
|
+
if (!key?.includes) return '';
|
|
7
|
+
if (d === true) return 'так';
|
|
8
|
+
if (d === false) return 'ні';
|
|
9
|
+
if (key === 'actions') {
|
|
10
|
+
return button(d, 'Редагувати')
|
|
11
|
+
}
|
|
12
|
+
if (key.includes('<')) {
|
|
13
|
+
return handlebarsSync.compile(key)(data);
|
|
14
|
+
}
|
|
15
|
+
if (!d) return '-';
|
|
16
|
+
return d;
|
|
17
|
+
}
|
|
18
|
+
export default function tableList(data, opt) {
|
|
19
|
+
const { hash } = opt;
|
|
20
|
+
|
|
21
|
+
if (!hash.columns) return 'columns empty'
|
|
22
|
+
const keys = hash.columns.replace(/\./g, ',').split(',').map(el => el.trim()).concat(hash.uid && hash.table && hash.form ? ['Дії', 'actions'] : []);
|
|
23
|
+
|
|
24
|
+
const result = [];
|
|
25
|
+
result.push('<thead> <tr class="border-t border-gray-200 divide-x divide-gray-200">');
|
|
26
|
+
|
|
27
|
+
// thead
|
|
28
|
+
for (let i = 0; i < keys.length; i += 2) {
|
|
29
|
+
const name = keys[i];
|
|
30
|
+
|
|
31
|
+
result.push(`<th scope="col">
|
|
32
|
+
<div class="hs-dropdown relative inline-flex w-full ">
|
|
33
|
+
<div
|
|
34
|
+
class="px-5 py-2.5 text-start w-full flex items-center gap-x-1 text-sm text-nowrap font-normal text-gray-500 ">
|
|
35
|
+
${name}
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</th>`)
|
|
39
|
+
}
|
|
40
|
+
result.push('</tr></thead>');
|
|
41
|
+
|
|
42
|
+
// body
|
|
43
|
+
for (let k = 0; k < data.length; k += 2) {
|
|
44
|
+
const row = data[k];
|
|
45
|
+
result.push('<tr class="divide-x divide-gray-200">');
|
|
46
|
+
for (let i = 0; i < keys.length; i += 2) {
|
|
47
|
+
const key = keys[i + 1];
|
|
48
|
+
const obj = { form: hash.form, table: hash.table, id: row[hash.id] }
|
|
49
|
+
|
|
50
|
+
const token = key == 'actions' ? setToken({ ids: [JSON.stringify(obj)], uid: hash.uid, array: 1 })[0] : null;
|
|
51
|
+
|
|
52
|
+
result.push(`<td class="size-px">
|
|
53
|
+
<div class="px-5 py-2">
|
|
54
|
+
<p class="text-sm font-semibold text-gray-800">${format(token || row[key], key, data)}</p>
|
|
55
|
+
</div>
|
|
56
|
+
</td>`);
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
// action token
|
|
60
|
+
|
|
61
|
+
result.push('</tr>');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
return '<table class="min-w-full divide-y divide-gray-200"> ' + result.join('') + '</table>';
|
|
66
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
export default function button(token, title) {
|
|
4
|
+
return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
|
|
5
|
+
class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Додати'}</button>`;
|
|
6
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { config } from '@opengis/fastify-table/utils.js';
|
|
2
|
-
|
|
3
|
-
export default async function getAdminAccess({
|
|
4
|
-
id, user = {},
|
|
5
|
-
}) {
|
|
6
|
-
if (!id) {
|
|
7
|
-
return { message: 'not enough params: id', status: 400 };
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
if (config?.auth?.disable) return;
|
|
11
|
-
|
|
12
|
-
if (!config?.local && user?.user_type?.includes('admin')) {
|
|
13
|
-
return { message: 'access restricted: admin', status: 403 };
|
|
14
|
-
}
|
|
1
|
+
import { config } from '@opengis/fastify-table/utils.js';
|
|
2
|
+
|
|
3
|
+
export default async function getAdminAccess({
|
|
4
|
+
id, user = {},
|
|
5
|
+
}) {
|
|
6
|
+
if (!id) {
|
|
7
|
+
return { message: 'not enough params: id', status: 400 };
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (config?.auth?.disable) return;
|
|
11
|
+
|
|
12
|
+
if (!config?.local && user?.user_type?.includes('admin')) {
|
|
13
|
+
return { message: 'access restricted: admin', status: 403 };
|
|
14
|
+
}
|
|
15
15
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import getAdminAccess from './funcs/getAdminAccess.js';
|
|
2
|
-
|
|
3
|
-
async function plugin(fastify) {
|
|
4
|
-
// fastify.decorate('getAdminAccess', getAdminAccess);
|
|
5
|
-
}
|
|
6
|
-
export default plugin;
|
|
1
|
+
import getAdminAccess from './funcs/getAdminAccess.js';
|
|
2
|
+
|
|
3
|
+
async function plugin(fastify) {
|
|
4
|
+
// fastify.decorate('getAdminAccess', getAdminAccess);
|
|
5
|
+
}
|
|
6
|
+
export default plugin;
|
|
@@ -1,93 +1,81 @@
|
|
|
1
|
-
import fp from 'fastify-plugin';
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
function contentParser(req, body, done) {
|
|
83
|
-
const parseBody = decodeURIComponent(body.toString()).split('&').reduce((acc, el) => {
|
|
84
|
-
const [key, val] = el.split('=');
|
|
85
|
-
return { ...acc, [key]: val };
|
|
86
|
-
}, {});
|
|
87
|
-
done(null, parseBody);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
fastify.addContentTypeParser('application/x-www-form-urlencoded', { parseAs: 'buffer' }, contentParser);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export default fp(plugin);
|
|
1
|
+
import fp from 'fastify-plugin';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
|
|
4
|
+
import config from '../../config.js';
|
|
5
|
+
|
|
6
|
+
// to export the decorators to the outer scope
|
|
7
|
+
|
|
8
|
+
async function plugin(fastify) {
|
|
9
|
+
fastify.decorate('config', config);
|
|
10
|
+
|
|
11
|
+
// preSerialization
|
|
12
|
+
fastify.addHook('preSerialization', async (req, reply, payload) => {
|
|
13
|
+
if (req.url.includes('/suggest/') && !req.query.json) {
|
|
14
|
+
return payload?.data;
|
|
15
|
+
}
|
|
16
|
+
if (payload?.redirect) {
|
|
17
|
+
return reply.redirect(payload.redirect);
|
|
18
|
+
}
|
|
19
|
+
if (reply.sent) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (['200', '400', '500', '403', '404'].includes(payload?.status)) {
|
|
24
|
+
reply.status(payload.status);
|
|
25
|
+
}
|
|
26
|
+
/* if (payload.headers) {
|
|
27
|
+
reply.headers(payload.headers);
|
|
28
|
+
} */
|
|
29
|
+
if (payload?.buffer) {
|
|
30
|
+
return payload.buffer;
|
|
31
|
+
}
|
|
32
|
+
if (payload?.file) {
|
|
33
|
+
// const buffer = await readFile(payload.file);
|
|
34
|
+
// return reply.send(buffer);
|
|
35
|
+
const stream = fs.createReadStream(payload.file);
|
|
36
|
+
return stream;
|
|
37
|
+
// return reply.send(stream);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (payload?.message) {
|
|
41
|
+
return payload.message;
|
|
42
|
+
}
|
|
43
|
+
return payload;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// preValidation
|
|
47
|
+
fastify.addHook('preValidation', async (req) => {
|
|
48
|
+
const parseRawBody = ['POST', 'PUT'].includes(req.method) && req.body && typeof req.body === 'string'
|
|
49
|
+
&& req.body.trim(/\r\n/g).startsWith('{')
|
|
50
|
+
&& req.body.trim(/\r\n/g).endsWith('}');
|
|
51
|
+
if (parseRawBody) {
|
|
52
|
+
try {
|
|
53
|
+
req.body = JSON.parse(req.body || '{}');
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
// throw new Error('invalid body');
|
|
57
|
+
// return { error: 'invalid body', status: 400 };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// allow upload file
|
|
63
|
+
const kIsMultipart = Symbol.for('[FastifyMultipart.isMultipart]');
|
|
64
|
+
fastify.addContentTypeParser('multipart', (request, _, done) => {
|
|
65
|
+
request[kIsMultipart] = true;
|
|
66
|
+
done(null);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// parse Body
|
|
70
|
+
function contentParser(req, body, done) {
|
|
71
|
+
const parseBody = decodeURIComponent(body.toString()).split('&').reduce((acc, el) => {
|
|
72
|
+
const [key, val] = el.split('=');
|
|
73
|
+
return { ...acc, [key]: val };
|
|
74
|
+
}, {});
|
|
75
|
+
done(null, parseBody);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
fastify.addContentTypeParser('application/x-www-form-urlencoded', { parseAs: 'buffer' }, contentParser);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default fp(plugin);
|
package/server/plugins/cron.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
//import { addCron } from '@opengis/fastify-table/utils.js';
|
|
2
|
-
|
|
3
|
-
async function deleteOldNotifications({ pg }) {
|
|
4
|
-
const { rowCount } = pg?.pk?.['crm.notifications'] ? await pg.query('delete from crm.notifications where CURRENT_DATE - \'14 days\'::interval > cdate') : {};
|
|
5
|
-
return { rowCount };
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export default async function cron(fastify) {
|
|
9
|
-
// addCron(deleteOldNotifications, 60 * 60 * 24, fastify);
|
|
10
|
-
// addCron(deleteOldNotifications, 60 * 1, fastify); // debug
|
|
1
|
+
//import { addCron } from '@opengis/fastify-table/utils.js';
|
|
2
|
+
|
|
3
|
+
async function deleteOldNotifications({ pg }) {
|
|
4
|
+
const { rowCount } = pg?.pk?.['crm.notifications'] ? await pg.query('delete from crm.notifications where CURRENT_DATE - \'14 days\'::interval > cdate') : {};
|
|
5
|
+
return { rowCount };
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default async function cron(fastify) {
|
|
9
|
+
// addCron(deleteOldNotifications, 60 * 60 * 24, fastify);
|
|
10
|
+
// addCron(deleteOldNotifications, 60 * 1, fastify); // debug
|
|
11
11
|
}
|
package/server/plugins/docs.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
import path, { dirname } from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
|
|
7
|
-
const dir = dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
const root = `${dir}/../../`;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async function plugin(fastify, opts) {
|
|
12
|
-
fastify.get('/docs*', async (req, reply) => {
|
|
13
|
-
if (!fs.existsSync(path.join(root, 'docs/.vitepress/dist/'))) {
|
|
14
|
-
return reply.status(404).send('docs not exists');
|
|
15
|
-
}
|
|
16
|
-
const { params } = req;
|
|
17
|
-
const url = params['*']
|
|
18
|
-
const filePath = url && url[url.length - 1] !== '/' ? path.join(root, 'docs/.vitepress/dist/', url) : path.join(root, 'docs/.vitepress/dist/', url, 'index.html')
|
|
19
|
-
const ext = path.extname(filePath);
|
|
20
|
-
const mime = {
|
|
21
|
-
'.js': 'text/javascript', '.css': 'text/css', '.woff2': 'application/font-woff', '.png': 'image/png', '.svg': 'image/svg+xml', '.jpg': 'image/jpg'
|
|
22
|
-
}[ext];
|
|
23
|
-
const stream = fs.createReadStream(filePath);
|
|
24
|
-
return mime ? reply.type(mime).send(stream) : stream;
|
|
25
|
-
|
|
26
|
-
})
|
|
27
|
-
}
|
|
28
|
-
export default plugin;
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import path, { dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
|
|
7
|
+
const dir = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const root = `${dir}/../../`;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async function plugin(fastify, opts) {
|
|
12
|
+
fastify.get('/docs*', async (req, reply) => {
|
|
13
|
+
if (!fs.existsSync(path.join(root, 'docs/.vitepress/dist/'))) {
|
|
14
|
+
return reply.status(404).send('docs not exists');
|
|
15
|
+
}
|
|
16
|
+
const { params } = req;
|
|
17
|
+
const url = params['*']
|
|
18
|
+
const filePath = url && url[url.length - 1] !== '/' ? path.join(root, 'docs/.vitepress/dist/', url) : path.join(root, 'docs/.vitepress/dist/', url, 'index.html')
|
|
19
|
+
const ext = path.extname(filePath);
|
|
20
|
+
const mime = {
|
|
21
|
+
'.js': 'text/javascript', '.css': 'text/css', '.woff2': 'application/font-woff', '.png': 'image/png', '.svg': 'image/svg+xml', '.jpg': 'image/jpg'
|
|
22
|
+
}[ext];
|
|
23
|
+
const stream = fs.createReadStream(filePath);
|
|
24
|
+
return mime ? reply.type(mime).send(stream) : stream;
|
|
25
|
+
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
export default plugin;
|