feat(plugin-infra): support worker thread in server side (#3462)

This commit is contained in:
Alex Yang
2023-07-29 13:57:23 -07:00
committed by GitHub
parent 77dab70ff7
commit ac59e28fcd
13 changed files with 152 additions and 70 deletions

View File

@@ -10,7 +10,7 @@ import {
} from '@toeverything/plugin-infra/type';
import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';
import react from '@vitejs/plugin-react-swc';
import { build } from 'vite';
import { build, type PluginOption } from 'vite';
import type { z } from 'zod';
import { projectRoot } from '../config/index.js';
@@ -107,26 +107,33 @@ const serverOutDir = path.resolve(
);
const coreEntry = path.resolve(pluginDir, json.affinePlugin.entry.core);
if (json.affinePlugin.entry.server) {
const serverEntry = path.resolve(pluginDir, json.affinePlugin.entry.server);
await build({
build: {
watch: isWatch ? {} : undefined,
minify: false,
outDir: serverOutDir,
emptyOutDir: true,
lib: {
entry: serverEntry,
fileName: 'index',
formats: ['cjs'],
},
rollupOptions: {
external,
},
},
});
}
const generatePackageJson: PluginOption = {
name: 'generate-package.json',
async generateBundle() {
const packageJson = {
name: json.name,
version: json.version,
description: json.description,
affinePlugin: {
release: json.affinePlugin.release,
entry: {
core: 'index.mjs',
},
assets: [...metadata.assets],
serverCommand: json.affinePlugin.serverCommand,
},
} satisfies z.infer<typeof packageJsonOutputSchema>;
packageJsonOutputSchema.parse(packageJson);
this.emitFile({
type: 'asset',
fileName: 'package.json',
source: JSON.stringify(packageJson, null, 2),
});
},
};
// step 1: generate core bundle
await build({
build: {
watch: isWatch ? {} : undefined,
@@ -178,28 +185,28 @@ await build({
return code;
},
},
{
name: 'generate-package.json',
async generateBundle() {
const packageJson = {
name: json.name,
version: json.version,
description: json.description,
affinePlugin: {
release: json.affinePlugin.release,
entry: {
core: 'index.mjs',
},
assets: [...metadata.assets],
},
};
packageJsonOutputSchema.parse(packageJson);
this.emitFile({
type: 'asset',
fileName: 'package.json',
source: JSON.stringify(packageJson, null, 2),
});
},
},
generatePackageJson,
],
});
// step 2: generate server bundle
if (json.affinePlugin.entry.server) {
const serverEntry = path.resolve(pluginDir, json.affinePlugin.entry.server);
await build({
build: {
watch: isWatch ? {} : undefined,
minify: false,
outDir: serverOutDir,
emptyOutDir: true,
lib: {
entry: serverEntry,
fileName: 'index',
formats: ['cjs'],
},
rollupOptions: {
external,
},
},
plugins: [generatePackageJson],
});
}