sunmao-ui/packages/vite-plugin-fs
Bowen Tan 5c6db91554 chore(*): publish
- @sunmao-ui/arco-lib@0.3.3
 - @sunmao-ui/chakra-ui-lib@0.5.3
 - @sunmao-ui/core@0.7.3
 - @sunmao-ui/editor-sdk@0.3.3
 - @sunmao-ui/editor@0.7.3
 - @sunmao-ui/runtime@0.7.3
 - @sunmao-ui/shared@0.2.3
 - @sunmao-ui/vite-plugin-fs@0.0.3
 - @sunmao-ui/vite-plugins@1.0.5
2022-07-18 17:27:57 +08:00
..
src feat: add @sunmao-ui/vite-plugin-fs 2022-07-06 16:49:07 +08:00
package.json chore(*): publish 2022-07-18 17:27:57 +08:00
README.md feat: add @sunmao-ui/vite-plugin-fs 2022-07-06 16:49:07 +08:00
tsconfig.json feat: add @sunmao-ui/vite-plugin-fs 2022-07-06 16:49:07 +08:00

@sunmao-ui/vite-plugin-fs

The vite plutin for sunmao to read and write the applications and modules schema files.

Usage

You should enable the plugin in the vite.config.js first.

import * as path from 'path';
import { defineConfig } from 'vite';
import sunmaoFsVitePlugin from '@sunmao-ui/vite-plugin-fs';
import routes from './src/routes';

export default defineConfig({
  plugins: [
    sunmaoFsVitePlugin({
      schemas: routes
        .filter(route => 'name' in route)
        .map(route => ({
          name: route.name,
          path: path.resolve(__dirname, `./src/applications/${route.name}.json`),
        })),
      modulesDir: path.resolve(__dirname, './src/modules'),
    }),
  ],
});

Read the schemas of the applications and the modules:

const PREFIX = '/sunmao-fs';

export async function fetchApp(name: string): Promise<Application> {
  const application = await (await fetch(`${PREFIX}/${name}`)).json();

  if (application.kind === 'Application') {
    return application;
  }

  throw new Error('failed to load schema');
}

export async function fetchModules(): Promise<Module[]> {
  const response = await (await fetch(`${PREFIX}/modules`)).json();

  if (Array.isArray(response)) {
    return response;
  }

  throw new Error('failed to load schema');
}

const [app, modules] = await Promise.all([fetchApp(name), fetchModules()]);

Modify the schemas:

export function saveApp(name: string, app: Application) {
  return fetch(`${PREFIX}/${name}`, {
    method: 'put',
    headers: {
      'content-type': 'application/json',
    },
    body: JSON.stringify({
      value: app,
    }),
  });
}

export function saveModules(modules: Module[]) {
  return fetch(`${PREFIX}/modules`, {
    method: 'put',
    headers: {
      'content-type': 'application/json',
    },
    body: JSON.stringify({
      value: modules,
    }),
  });
}

initSunmaoUIEditor({
  defaultApplication: app,
  defaultModules: modules,
  runtimeProps: config,
  storageHandler: {
    onSaveApp: function (app) {
      return saveApp(name, app);
    },
    onSaveModules: function (modules) {
      return saveModules(modules);
    },
  },
});