Просмотр исходного кода

configure biome for templates feature

Futa Arai 7 месяцев назад
Родитель
Сommit
76a345f233

+ 1 - 0
apps/app/.eslintrc.js

@@ -32,6 +32,7 @@ module.exports = {
     'src/migrations/**',
     'src/features/callout/**',
     'src/features/comment/**',
+    'src/features/templates/**',
   ],
   settings: {
     // resolve path aliases by eslint-import-resolver-typescript

+ 89 - 70
apps/app/src/features/templates/server/routes/apiv3/index.ts

@@ -1,14 +1,15 @@
-import path from 'path';
-
 import { GrowiPluginType } from '@growi/core';
+import { SCOPE } from '@growi/core/dist/interfaces';
 import type { TemplateSummary } from '@growi/pluginkit/dist/v4';
-import { scanAllTemplates, getMarkdown } from '@growi/pluginkit/dist/v4/server/index.cjs';
+import {
+  getMarkdown,
+  scanAllTemplates,
+} from '@growi/pluginkit/dist/v4/server/index.cjs';
 import express from 'express';
 import { param, query } from 'express-validator';
-
+import path from 'path';
 import { PLUGIN_STORING_PATH } from '~/features/growi-plugin/server/consts';
 import { GrowiPlugin } from '~/features/growi-plugin/server/models';
-import { SCOPE } from '@growi/core/dist/interfaces';
 import type Crowi from '~/server/crowi';
 import { accessTokenParser } from '~/server/middlewares/access-token-parser';
 import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
@@ -21,22 +22,17 @@ const logger = loggerFactory('growi:routes:apiv3:templates');
 const router = express.Router();
 
 const validator = {
-  list: [
-    query('includeInvalidTemplates').optional().isBoolean(),
-  ],
-  get: [
-    param('templateId').isString(),
-    param('locale').isString(),
-  ],
+  list: [query('includeInvalidTemplates').optional().isBoolean()],
+  get: [param('templateId').isString(), param('locale').isString()],
 };
 
-
 // cache object
 let presetTemplateSummaries: TemplateSummary[];
 
-
 module.exports = (crowi: Crowi) => {
-  const loginRequiredStrictly = require('~/server/middlewares/login-required')(crowi);
+  const loginRequiredStrictly = require('~/server/middlewares/login-required')(
+    crowi,
+  );
 
   /**
    * @swagger
@@ -79,41 +75,52 @@ module.exports = (crowi: Crowi) => {
    *                       title:
    *                         type: string
    */
-  router.get('/', accessTokenParser([SCOPE.READ.FEATURES.PAGE]), loginRequiredStrictly, validator.list, apiV3FormValidator, async(req, res: ApiV3Response) => {
-    const { includeInvalidTemplates } = req.query;
-
-    // scan preset templates
-    if (presetTemplateSummaries == null) {
-      const presetTemplatesRoot = resolveFromRoot('node_modules/@growi/preset-templates');
+  router.get(
+    '/',
+    accessTokenParser([SCOPE.READ.FEATURES.PAGE]),
+    loginRequiredStrictly,
+    validator.list,
+    apiV3FormValidator,
+    async (req, res: ApiV3Response) => {
+      const { includeInvalidTemplates } = req.query;
+
+      // scan preset templates
+      if (presetTemplateSummaries == null) {
+        const presetTemplatesRoot = resolveFromRoot(
+          'node_modules/@growi/preset-templates',
+        );
+
+        try {
+          presetTemplateSummaries = await scanAllTemplates(
+            presetTemplatesRoot,
+            {
+              returnsInvalidTemplates: includeInvalidTemplates,
+            },
+          );
+        } catch (err) {
+          logger.error(err);
+          presetTemplateSummaries = [];
+        }
+      }
 
+      // load plugin templates
+      let pluginsTemplateSummaries: TemplateSummary[] = [];
       try {
-        presetTemplateSummaries = await scanAllTemplates(presetTemplatesRoot, {
-          returnsInvalidTemplates: includeInvalidTemplates,
-        });
-      }
-      catch (err) {
+        const plugins = await GrowiPlugin.findEnabledPluginsByType(
+          GrowiPluginType.Template,
+        );
+        pluginsTemplateSummaries = plugins.flatMap(
+          (p) => p.meta.templateSummaries,
+        );
+      } catch (err) {
         logger.error(err);
-        presetTemplateSummaries = [];
       }
-    }
-
-    // load plugin templates
-    let pluginsTemplateSummaries: TemplateSummary[] = [];
-    try {
-      const plugins = await GrowiPlugin.findEnabledPluginsByType(GrowiPluginType.Template);
-      pluginsTemplateSummaries = plugins.flatMap(p => p.meta.templateSummaries);
-    }
-    catch (err) {
-      logger.error(err);
-    }
-
-    return res.apiv3({
-      summaries: [
-        ...presetTemplateSummaries,
-        ...pluginsTemplateSummaries,
-      ],
-    });
-  });
+
+      return res.apiv3({
+        summaries: [...presetTemplateSummaries, ...pluginsTemplateSummaries],
+      });
+    },
+  );
 
   /**
    * @swagger
@@ -149,23 +156,31 @@ module.exports = (crowi: Crowi) => {
    *                 markdown:
    *                   type: string
    */
-  router.get('/preset-templates/:templateId/:locale', accessTokenParser([SCOPE.READ.FEATURES.PAGE]), loginRequiredStrictly,
-    validator.get, apiV3FormValidator,
-    async(req, res: ApiV3Response) => {
-      const {
-        templateId, locale,
-      } = req.params;
-
-      const presetTemplatesRoot = resolveFromRoot('node_modules/@growi/preset-templates');
+  router.get(
+    '/preset-templates/:templateId/:locale',
+    accessTokenParser([SCOPE.READ.FEATURES.PAGE]),
+    loginRequiredStrictly,
+    validator.get,
+    apiV3FormValidator,
+    async (req, res: ApiV3Response) => {
+      const { templateId, locale } = req.params;
+
+      const presetTemplatesRoot = resolveFromRoot(
+        'node_modules/@growi/preset-templates',
+      );
 
       try {
-        const markdown = await getMarkdown(presetTemplatesRoot, templateId, locale);
+        const markdown = await getMarkdown(
+          presetTemplatesRoot,
+          templateId,
+          locale,
+        );
         return res.apiv3({ markdown });
-      }
-      catch (err) {
+      } catch (err) {
         res.apiv3Err(err);
       }
-    });
+    },
+  );
 
   /**
    * @swagger
@@ -213,24 +228,28 @@ module.exports = (crowi: Crowi) => {
    *                 markdown:
    *                   type: string
    */
-  router.get('/plugin-templates/:organizationId/:reposId/:templateId/:locale', accessTokenParser([SCOPE.READ.FEATURES.PAGE]),
-    loginRequiredStrictly, validator.get, apiV3FormValidator, async(
-        req, res: ApiV3Response,
-    ) => {
-      const {
-        organizationId, reposId, templateId, locale,
-      } = req.params;
-
-      const pluginRoot = path.join(PLUGIN_STORING_PATH, `${organizationId}/${reposId}`);
+  router.get(
+    '/plugin-templates/:organizationId/:reposId/:templateId/:locale',
+    accessTokenParser([SCOPE.READ.FEATURES.PAGE]),
+    loginRequiredStrictly,
+    validator.get,
+    apiV3FormValidator,
+    async (req, res: ApiV3Response) => {
+      const { organizationId, reposId, templateId, locale } = req.params;
+
+      const pluginRoot = path.join(
+        PLUGIN_STORING_PATH,
+        `${organizationId}/${reposId}`,
+      );
 
       try {
         const markdown = await getMarkdown(pluginRoot, templateId, locale);
         return res.apiv3({ markdown });
-      }
-      catch (err) {
+      } catch (err) {
         res.apiv3Err(err);
       }
-    });
+    },
+  );
 
   return router;
 };

+ 14 - 6
apps/app/src/features/templates/stores/template.tsx

@@ -1,17 +1,24 @@
-import { getLocalizedTemplate, type TemplateSummary } from '@growi/pluginkit/dist/v4';
+import {
+  getLocalizedTemplate,
+  type TemplateSummary,
+} from '@growi/pluginkit/dist/v4';
 import type { SWRResponse } from 'swr';
 import useSWRImmutable from 'swr/immutable';
 
 import { apiv3Get } from '~/client/util/apiv3-client';
 
 export const useSWRxTemplates = (): SWRResponse<TemplateSummary[], Error> => {
-  return useSWRImmutable(
-    '/templates',
-    endpoint => apiv3Get<{ summaries: TemplateSummary[] }>(endpoint).then(res => res.data.summaries),
+  return useSWRImmutable('/templates', (endpoint) =>
+    apiv3Get<{ summaries: TemplateSummary[] }>(endpoint).then(
+      (res) => res.data.summaries,
+    ),
   );
 };
 
-export const useSWRxTemplate = (summary: TemplateSummary | undefined, locale?: string): SWRResponse<string, Error> => {
+export const useSWRxTemplate = (
+  summary: TemplateSummary | undefined,
+  locale?: string,
+): SWRResponse<string, Error> => {
   const pluginId = summary?.default.pluginId;
   const targetTemplate = getLocalizedTemplate(summary, locale);
 
@@ -25,6 +32,7 @@ export const useSWRxTemplate = (summary: TemplateSummary | undefined, locale?: s
         ? `/templates/preset-templates/${targetTemplate.id}/${targetTemplate.locale}`
         : `/templates/plugin-templates/${pluginId}/${targetTemplate.id}/${targetTemplate.locale}`;
     },
-    endpoint => apiv3Get<{ markdown: string }>(endpoint).then(res => res.data.markdown),
+    (endpoint) =>
+      apiv3Get<{ markdown: string }>(endpoint).then((res) => res.data.markdown),
   );
 };

+ 0 - 1
biome.json

@@ -36,7 +36,6 @@
       "!apps/app/src/features/plantuml/**",
       "!apps/app/src/features/rate-limiter/**",
       "!apps/app/src/features/search/**",
-      "!apps/app/src/features/templates/**",
       "!apps/app/src/interfaces/**",
       "!apps/app/src/models/**",
       "!apps/app/src/pages/**",