generated from template/slidev-template
update
This commit is contained in:
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,9 +1,3 @@
|
|||||||
node_modules
|
node_modules
|
||||||
.DS_Store
|
|
||||||
dist
|
|
||||||
*.local
|
|
||||||
.vite-inspect
|
|
||||||
.remote-assets
|
|
||||||
components.d.ts
|
|
||||||
|
|
||||||
.slides.md.swp
|
program
|
||||||
132
agent/apps/meilisearch.ts
Normal file
132
agent/apps/meilisearch.ts
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
import os from "node:os";
|
||||||
|
import fs from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
import https from "node:https";
|
||||||
|
import { pipeline } from "node:stream/promises";
|
||||||
|
import { createWriteStream, createReadStream } from "node:fs";
|
||||||
|
import { createGunzip } from "node:zlib";
|
||||||
|
import { extract } from "tar";
|
||||||
|
|
||||||
|
const base = "https://api.github.com/repos/meilisearch/meilisearch/releases/latest";
|
||||||
|
const program = 'program';
|
||||||
|
const proxy = 'https://gh-proxy.org/';
|
||||||
|
const directory = program + '/' + 'meilisearch';
|
||||||
|
|
||||||
|
// 获取平台和架构对应的文件名
|
||||||
|
function getPlatformFileName(): string {
|
||||||
|
const platform = os.platform();
|
||||||
|
const arch = os.arch();
|
||||||
|
|
||||||
|
if (platform === 'darwin') {
|
||||||
|
return arch === 'arm64' ? 'meilisearch-macos-apple-silicon' : 'meilisearch-macos-amd64';
|
||||||
|
} else if (platform === 'linux') {
|
||||||
|
return arch === 'arm64' ? 'meilisearch-linux-aarch64' : 'meilisearch-linux-amd64';
|
||||||
|
} else if (platform === 'win32') {
|
||||||
|
return 'meilisearch-windows-amd64.exe';
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`Unsupported platform: ${platform}-${arch}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
async function downloadFile(url: string, dest: string): Promise<void> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
https.get(url, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'meilisearch-installer'
|
||||||
|
}
|
||||||
|
}, (response) => {
|
||||||
|
if (response.statusCode === 302 || response.statusCode === 301) {
|
||||||
|
// 处理重定向
|
||||||
|
downloadFile(response.headers.location!, dest).then(resolve).catch(reject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.statusCode !== 200) {
|
||||||
|
reject(new Error(`Failed to download: ${response.statusCode}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileStream = createWriteStream(dest);
|
||||||
|
response.pipe(fileStream);
|
||||||
|
|
||||||
|
fileStream.on('finish', () => {
|
||||||
|
fileStream.close();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
fileStream.on('error', reject);
|
||||||
|
}).on('error', reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
export async function download() {
|
||||||
|
try {
|
||||||
|
console.log('正在获取最新版本信息...');
|
||||||
|
|
||||||
|
// 获取 latest release 信息
|
||||||
|
const releaseData = await new Promise<any>((resolve, reject) => {
|
||||||
|
https.get(proxy + base, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'meilisearch-installer'
|
||||||
|
}
|
||||||
|
}, (response) => {
|
||||||
|
let data = '';
|
||||||
|
response.on('data', chunk => data += chunk);
|
||||||
|
response.on('end', () => resolve(JSON.parse(data)));
|
||||||
|
response.on('error', reject);
|
||||||
|
}).on('error', reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
const version = releaseData.tag_name;
|
||||||
|
console.log(`最新版本: ${version}`);
|
||||||
|
|
||||||
|
const fileName = getPlatformFileName();
|
||||||
|
console.log(`平台文件: ${fileName}`);
|
||||||
|
|
||||||
|
// 查找对应的 asset
|
||||||
|
const asset = releaseData.assets.find((a: any) => a.name === fileName);
|
||||||
|
if (!asset) {
|
||||||
|
throw new Error(`找不到对应的文件: ${fileName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建目录
|
||||||
|
if (!fs.existsSync(directory)) {
|
||||||
|
fs.mkdirSync(directory, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
const downloadPath = path.join(directory, fileName);
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
console.log('正在下载...');
|
||||||
|
await downloadFile(asset.browser_download_url, downloadPath);
|
||||||
|
console.log(`下载完成: ${downloadPath}`);
|
||||||
|
|
||||||
|
// 确定最终文件名
|
||||||
|
const finalFileName = os.platform() === 'win32' ? 'meilisearch.exe' : 'meilisearch';
|
||||||
|
const finalPath = path.join(directory, finalFileName);
|
||||||
|
|
||||||
|
// 重命名为统一的可执行文件名
|
||||||
|
if (downloadPath !== finalPath) {
|
||||||
|
fs.renameSync(downloadPath, finalPath);
|
||||||
|
console.log(`重命名为: ${finalFileName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 给可执行文件添加执行权限(非 Windows)
|
||||||
|
if (os.platform() !== 'win32') {
|
||||||
|
fs.chmodSync(finalPath, 0o755);
|
||||||
|
console.log('已添加执行权限');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('安装完成!');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('安装失败:', error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果直接运行此文件
|
||||||
|
if (require.main === module) {
|
||||||
|
download();
|
||||||
|
}
|
||||||
151
agent/apps/nocodb.ts
Normal file
151
agent/apps/nocodb.ts
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
import os from "node:os";
|
||||||
|
import fs from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
import https from "node:https";
|
||||||
|
import { pipeline } from "node:stream/promises";
|
||||||
|
import { createWriteStream, createReadStream } from "node:fs";
|
||||||
|
import { createGunzip } from "node:zlib";
|
||||||
|
import { extract } from "tar";
|
||||||
|
|
||||||
|
const base = "https://api.github.com/repos/nocodb/nocodb/releases/latest";
|
||||||
|
const program = 'program';
|
||||||
|
const proxy = 'https://gh-proxy.org/';
|
||||||
|
const directory = program + '/' + 'nocodb';
|
||||||
|
|
||||||
|
// 获取平台和架构对应的文件名
|
||||||
|
function getPlatformFileName(): string {
|
||||||
|
const platform = os.platform();
|
||||||
|
const arch = os.arch();
|
||||||
|
|
||||||
|
if (platform === 'darwin') {
|
||||||
|
return arch === 'arm64' ? 'Noco-macos-arm64' : 'Noco-macos-x64';
|
||||||
|
} else if (platform === 'linux') {
|
||||||
|
return arch === 'arm64' ? 'Noco-linux-arm64' : 'Noco-linux-x64';
|
||||||
|
} else if (platform === 'win32') {
|
||||||
|
return arch === 'arm64' ? 'Noco-win-arm64.exe' : 'Noco-win-x64.exe';
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`Unsupported platform: ${platform}-${arch}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
async function downloadFile(url: string, dest: string): Promise<void> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
https.get(url, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'nocodb-installer'
|
||||||
|
}
|
||||||
|
}, (response) => {
|
||||||
|
if (response.statusCode === 302 || response.statusCode === 301) {
|
||||||
|
// 处理重定向
|
||||||
|
downloadFile(response.headers.location!, dest).then(resolve).catch(reject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.statusCode !== 200) {
|
||||||
|
reject(new Error(`Failed to download: ${response.statusCode}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileStream = createWriteStream(dest);
|
||||||
|
response.pipe(fileStream);
|
||||||
|
|
||||||
|
fileStream.on('finish', () => {
|
||||||
|
fileStream.close();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
fileStream.on('error', reject);
|
||||||
|
}).on('error', reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解压 tar.gz 文件
|
||||||
|
async function extractTarGz(filePath: string, destDir: string): Promise<void> {
|
||||||
|
await pipeline(
|
||||||
|
createReadStream(filePath),
|
||||||
|
createGunzip(),
|
||||||
|
extract({ cwd: destDir })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数
|
||||||
|
export async function download() {
|
||||||
|
try {
|
||||||
|
console.log('正在获取最新版本信息...');
|
||||||
|
|
||||||
|
// 获取 latest release 信息
|
||||||
|
const releaseData = await new Promise<any>((resolve, reject) => {
|
||||||
|
https.get(proxy+base, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'nocodb-installer'
|
||||||
|
}
|
||||||
|
}, (response) => {
|
||||||
|
let data = '';
|
||||||
|
response.on('data', chunk => data += chunk);
|
||||||
|
response.on('end', () => resolve(JSON.parse(data)));
|
||||||
|
response.on('error', reject);
|
||||||
|
}).on('error', reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
const version = releaseData.tag_name;
|
||||||
|
console.log(`最新版本: ${version}`);
|
||||||
|
|
||||||
|
const fileName = getPlatformFileName();
|
||||||
|
console.log(`平台文件: ${fileName}`);
|
||||||
|
|
||||||
|
// 查找对应的 asset
|
||||||
|
const asset = releaseData.assets.find((a: any) => a.name === fileName);
|
||||||
|
if (!asset) {
|
||||||
|
throw new Error(`找不到对应的文件: ${fileName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建目录
|
||||||
|
if (!fs.existsSync(directory)) {
|
||||||
|
fs.mkdirSync(directory, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
const downloadPath = path.join(directory, fileName);
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
console.log('正在下载...');
|
||||||
|
await downloadFile(asset.browser_download_url, downloadPath);
|
||||||
|
console.log(`下载完成: ${downloadPath}`);
|
||||||
|
|
||||||
|
// 确定最终文件名
|
||||||
|
const finalFileName = os.platform() === 'win32' ? 'nocodb.exe' : 'nocodb';
|
||||||
|
const finalPath = path.join(directory, finalFileName);
|
||||||
|
|
||||||
|
// 如果是 tar.gz 文件,进行解压
|
||||||
|
if (fileName === 'nocodb.tar.gz') {
|
||||||
|
console.log('正在解压...');
|
||||||
|
await extractTarGz(downloadPath, directory);
|
||||||
|
console.log('解压完成');
|
||||||
|
|
||||||
|
// 删除压缩包
|
||||||
|
fs.unlinkSync(downloadPath);
|
||||||
|
} else {
|
||||||
|
// 重命名为统一的可执行文件名
|
||||||
|
if (downloadPath !== finalPath) {
|
||||||
|
fs.renameSync(downloadPath, finalPath);
|
||||||
|
console.log(`重命名为: ${finalFileName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 给可执行文件添加执行权限(非 Windows)
|
||||||
|
if (os.platform() !== 'win32') {
|
||||||
|
fs.chmodSync(finalPath, 0o755);
|
||||||
|
console.log('已添加执行权限');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('安装完成!');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('安装失败:', error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果直接运行此文件
|
||||||
|
if (require.main === module) {
|
||||||
|
download();
|
||||||
|
}
|
||||||
170
agent/apps/pocketbase.ts
Normal file
170
agent/apps/pocketbase.ts
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
import os from "node:os";
|
||||||
|
import fs from "node:fs";
|
||||||
|
import path from "node:path";
|
||||||
|
import https from "node:https";
|
||||||
|
import { pipeline } from "node:stream/promises";
|
||||||
|
import { createWriteStream, createReadStream } from "node:fs";
|
||||||
|
import { createGunzip } from "node:zlib";
|
||||||
|
import { extract } from "tar";
|
||||||
|
|
||||||
|
const base = "https://api.github.com/repos/pocketbase/pocketbase/releases/latest";
|
||||||
|
const proxy = 'https://gh-proxy.org/';
|
||||||
|
const program = 'program';
|
||||||
|
const directory = program + '/' + 'pocketbase';
|
||||||
|
|
||||||
|
// 获取系统平台和架构
|
||||||
|
function getPlatformInfo() {
|
||||||
|
const platform = os.platform(); // 'darwin', 'linux', 'win32'
|
||||||
|
const arch = os.arch(); // 'x64', 'arm64', etc.
|
||||||
|
|
||||||
|
let platformName = '';
|
||||||
|
let archName = '';
|
||||||
|
|
||||||
|
// 映射平台名称
|
||||||
|
switch (platform) {
|
||||||
|
case 'darwin':
|
||||||
|
platformName = 'darwin';
|
||||||
|
break;
|
||||||
|
case 'linux':
|
||||||
|
platformName = 'linux';
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
platformName = 'windows';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error(`Unsupported platform: ${platform}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 映射架构名称
|
||||||
|
switch (arch) {
|
||||||
|
case 'x64':
|
||||||
|
archName = 'amd64';
|
||||||
|
break;
|
||||||
|
case 'arm64':
|
||||||
|
archName = 'arm64';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error(`Unsupported architecture: ${arch}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { platformName, archName };
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
async function downloadFile(url: string, destPath: string): Promise<void> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
https.get(url, (response) => {
|
||||||
|
// 处理重定向
|
||||||
|
if (response.statusCode === 302 || response.statusCode === 301) {
|
||||||
|
const redirectUrl = response.headers.location;
|
||||||
|
if (redirectUrl) {
|
||||||
|
downloadFile(redirectUrl, destPath).then(resolve).catch(reject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.statusCode !== 200) {
|
||||||
|
reject(new Error(`Failed to download: ${response.statusCode}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileStream = createWriteStream(destPath);
|
||||||
|
response.pipe(fileStream);
|
||||||
|
|
||||||
|
fileStream.on('finish', () => {
|
||||||
|
fileStream.close();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
fileStream.on('error', reject);
|
||||||
|
}).on('error', reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解压 zip 文件 (Windows)
|
||||||
|
async function extractZip(zipPath: string, destDir: string): Promise<void> {
|
||||||
|
const AdmZip = require('adm-zip');
|
||||||
|
const zip = new AdmZip(zipPath);
|
||||||
|
zip.extractAllTo(destDir, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提取 tar.gz 文件 (Linux/macOS)
|
||||||
|
export async function extractTarGz(tarGzPath: string, destDir: string): Promise<void> {
|
||||||
|
await fs.promises.mkdir(destDir, { recursive: true });
|
||||||
|
|
||||||
|
await pipeline(
|
||||||
|
createReadStream(tarGzPath),
|
||||||
|
createGunzip(),
|
||||||
|
extract({ cwd: destDir })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主函数:下载并解压 PocketBase
|
||||||
|
export async function download(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const { platformName, archName } = getPlatformInfo();
|
||||||
|
|
||||||
|
console.log(`检测到系统: ${platformName} ${archName}`);
|
||||||
|
|
||||||
|
// 获取最新版本信息
|
||||||
|
const response = await fetch(base);
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Failed to fetch release info: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const releaseData = await response.json();
|
||||||
|
const tagName = releaseData.tag_name.replace(/^v/, '');
|
||||||
|
const assets = releaseData.assets;
|
||||||
|
|
||||||
|
// 查找匹配的资源文件
|
||||||
|
const fileExtension = '.zip';
|
||||||
|
const assetPattern = `pocketbase_${tagName}_${platformName}_${archName}${fileExtension}`;
|
||||||
|
|
||||||
|
const asset = assets.find((a: any) => a.name.includes(assetPattern));
|
||||||
|
|
||||||
|
if (!asset) {
|
||||||
|
throw new Error(`No matching asset found for ${platformName} ${archName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`找到资源: ${asset.name}`);
|
||||||
|
console.log(`下载链接: ${asset.browser_download_url}`);
|
||||||
|
|
||||||
|
// 创建目录
|
||||||
|
await fs.promises.mkdir(directory, { recursive: true });
|
||||||
|
|
||||||
|
const downloadPath = path.join(directory, asset.name);
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
console.log('开始下载...');
|
||||||
|
await downloadFile(asset.browser_download_url, downloadPath);
|
||||||
|
console.log('下载完成');
|
||||||
|
|
||||||
|
// 解压文件
|
||||||
|
console.log('开始解压...');
|
||||||
|
await extractZip(downloadPath, directory);
|
||||||
|
|
||||||
|
console.log('解压完成');
|
||||||
|
|
||||||
|
// 给可执行文件添加执行权限(非 Windows)
|
||||||
|
if (os.platform() !== 'win32') {
|
||||||
|
const finalPath = path.join(directory, 'pocketbase');
|
||||||
|
fs.chmodSync(finalPath, 0o755);
|
||||||
|
console.log('已添加执行权限');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除压缩包
|
||||||
|
await fs.promises.unlink(downloadPath);
|
||||||
|
console.log('清理完成');
|
||||||
|
|
||||||
|
console.log(`PocketBase 已安装到: ${path.resolve(directory)}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('下载或解压失败:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果直接运行此文件
|
||||||
|
if (require.main === module) {
|
||||||
|
download();
|
||||||
|
}
|
||||||
|
|
||||||
36
agent/main.ts
Normal file
36
agent/main.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
// import { downloadAndExtractPocketBase } from './apps/pocketbase';
|
||||||
|
|
||||||
|
// // 下载并解压 PocketBase
|
||||||
|
// downloadAndExtractPocketBase()
|
||||||
|
// .then(() => {
|
||||||
|
// console.log('✅ PocketBase 安装成功');
|
||||||
|
// })
|
||||||
|
// .catch((error) => {
|
||||||
|
// console.error('❌ 安装失败:', error);
|
||||||
|
// process.exit(1);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// import { download } from './apps/nocodb';
|
||||||
|
|
||||||
|
// // 下载 NocoDB
|
||||||
|
// download()
|
||||||
|
// .then(() => {
|
||||||
|
// console.log('✅ NocoDB 安装成功');
|
||||||
|
// })
|
||||||
|
// .catch((error) => {
|
||||||
|
// console.error('❌ 安装失败:', error);
|
||||||
|
// process.exit(1);
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
import { download } from "./apps/meilisearch";
|
||||||
|
|
||||||
|
// 下载 MeiliSearch
|
||||||
|
download()
|
||||||
|
.then(() => {
|
||||||
|
console.log('✅ MeiliSearch 安装成功');
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('❌ 安装失败:', error);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
28
package.json
28
package.json
@@ -1,20 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "@kevisual/slidev-template",
|
"name": "app-db-agent",
|
||||||
"type": "module",
|
"version": "1.0.0",
|
||||||
"basename": "/root/slidev-template",
|
"description": "",
|
||||||
"version": "0.0.1",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "slidev build --base /root/slidev-template/",
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
"dev": "slidev --open",
|
|
||||||
"pub": "ev deploy ./dist -k slidev-template -v 0.0.1 -u",
|
|
||||||
"export": "slidev export"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@slidev/cli": "^52.8.0",
|
|
||||||
"@slidev/theme-default": "latest",
|
|
||||||
"vue": "^3.5.24"
|
|
||||||
},
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"packageManager": "pnpm@10.19.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"playwright-chromium": "^1.56.1"
|
"@kevisual/router": "^0.0.33",
|
||||||
|
"@types/node": "^24.10.1",
|
||||||
|
"@types/tar": "^6.1.13",
|
||||||
|
"adm-zip": "^0.5.16",
|
||||||
|
"tar": "^7.5.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
271
pnpm-lock.yaml
generated
Normal file
271
pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
lockfileVersion: '9.0'
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
|
importers:
|
||||||
|
|
||||||
|
.:
|
||||||
|
devDependencies:
|
||||||
|
'@kevisual/router':
|
||||||
|
specifier: ^0.0.33
|
||||||
|
version: 0.0.33
|
||||||
|
'@types/node':
|
||||||
|
specifier: ^24.10.1
|
||||||
|
version: 24.10.1
|
||||||
|
'@types/tar':
|
||||||
|
specifier: ^6.1.13
|
||||||
|
version: 6.1.13
|
||||||
|
adm-zip:
|
||||||
|
specifier: ^0.5.16
|
||||||
|
version: 0.5.16
|
||||||
|
tar:
|
||||||
|
specifier: ^7.5.2
|
||||||
|
version: 7.5.2
|
||||||
|
|
||||||
|
packages:
|
||||||
|
|
||||||
|
'@isaacs/fs-minipass@4.0.1':
|
||||||
|
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
|
||||||
|
'@kevisual/router@0.0.33':
|
||||||
|
resolution: {integrity: sha512-9z7TkSzCIGbXn9SuHPBdZpGwHlAuwA8iN5jNAZBUvbEvBRkBxlrbdCSe9fBYiAHueLm2AceFNrW74uulOiAkqA==}
|
||||||
|
|
||||||
|
'@types/node@24.10.1':
|
||||||
|
resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
|
||||||
|
|
||||||
|
'@types/tar@6.1.13':
|
||||||
|
resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==}
|
||||||
|
|
||||||
|
adm-zip@0.5.16:
|
||||||
|
resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
|
||||||
|
engines: {node: '>=12.0'}
|
||||||
|
|
||||||
|
chownr@3.0.0:
|
||||||
|
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
debug@4.4.3:
|
||||||
|
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
|
||||||
|
engines: {node: '>=6.0'}
|
||||||
|
peerDependencies:
|
||||||
|
supports-color: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
supports-color:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
depd@2.0.0:
|
||||||
|
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
ee-first@1.1.1:
|
||||||
|
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||||
|
|
||||||
|
encodeurl@2.0.0:
|
||||||
|
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
escape-html@1.0.3:
|
||||||
|
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
|
||||||
|
|
||||||
|
etag@1.8.1:
|
||||||
|
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
|
||||||
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
|
fresh@2.0.0:
|
||||||
|
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
http-errors@2.0.1:
|
||||||
|
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
inherits@2.0.4:
|
||||||
|
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||||
|
|
||||||
|
mime-db@1.54.0:
|
||||||
|
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
|
||||||
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
|
mime-types@3.0.2:
|
||||||
|
resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
minipass@4.2.8:
|
||||||
|
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
minipass@7.1.2:
|
||||||
|
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||||
|
engines: {node: '>=16 || 14 >=14.17'}
|
||||||
|
|
||||||
|
minizlib@3.1.0:
|
||||||
|
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
ms@2.1.3:
|
||||||
|
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||||
|
|
||||||
|
node-forge@1.3.1:
|
||||||
|
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
|
||||||
|
engines: {node: '>= 6.13.0'}
|
||||||
|
|
||||||
|
on-finished@2.4.1:
|
||||||
|
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
path-to-regexp@8.3.0:
|
||||||
|
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
|
||||||
|
|
||||||
|
range-parser@1.2.1:
|
||||||
|
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
|
||||||
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
|
selfsigned@4.0.0:
|
||||||
|
resolution: {integrity: sha512-eP/1BEUCziBF/7p96ergE2JlGOMsGj9kIe77pD99G3ValgxDFwHA2oNCYW4rjlmYp8LXc684ypH0836GjSKw0A==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
|
send@1.2.0:
|
||||||
|
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
|
||||||
|
engines: {node: '>= 18'}
|
||||||
|
|
||||||
|
setprototypeof@1.2.0:
|
||||||
|
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
|
||||||
|
|
||||||
|
statuses@2.0.2:
|
||||||
|
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
|
||||||
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
tar@7.5.2:
|
||||||
|
resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
toidentifier@1.0.1:
|
||||||
|
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
|
||||||
|
engines: {node: '>=0.6'}
|
||||||
|
|
||||||
|
undici-types@7.16.0:
|
||||||
|
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
|
||||||
|
|
||||||
|
yallist@5.0.0:
|
||||||
|
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
snapshots:
|
||||||
|
|
||||||
|
'@isaacs/fs-minipass@4.0.1':
|
||||||
|
dependencies:
|
||||||
|
minipass: 7.1.2
|
||||||
|
|
||||||
|
'@kevisual/router@0.0.33':
|
||||||
|
dependencies:
|
||||||
|
path-to-regexp: 8.3.0
|
||||||
|
selfsigned: 4.0.0
|
||||||
|
send: 1.2.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
|
'@types/node@24.10.1':
|
||||||
|
dependencies:
|
||||||
|
undici-types: 7.16.0
|
||||||
|
|
||||||
|
'@types/tar@6.1.13':
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 24.10.1
|
||||||
|
minipass: 4.2.8
|
||||||
|
|
||||||
|
adm-zip@0.5.16: {}
|
||||||
|
|
||||||
|
chownr@3.0.0: {}
|
||||||
|
|
||||||
|
debug@4.4.3:
|
||||||
|
dependencies:
|
||||||
|
ms: 2.1.3
|
||||||
|
|
||||||
|
depd@2.0.0: {}
|
||||||
|
|
||||||
|
ee-first@1.1.1: {}
|
||||||
|
|
||||||
|
encodeurl@2.0.0: {}
|
||||||
|
|
||||||
|
escape-html@1.0.3: {}
|
||||||
|
|
||||||
|
etag@1.8.1: {}
|
||||||
|
|
||||||
|
fresh@2.0.0: {}
|
||||||
|
|
||||||
|
http-errors@2.0.1:
|
||||||
|
dependencies:
|
||||||
|
depd: 2.0.0
|
||||||
|
inherits: 2.0.4
|
||||||
|
setprototypeof: 1.2.0
|
||||||
|
statuses: 2.0.2
|
||||||
|
toidentifier: 1.0.1
|
||||||
|
|
||||||
|
inherits@2.0.4: {}
|
||||||
|
|
||||||
|
mime-db@1.54.0: {}
|
||||||
|
|
||||||
|
mime-types@3.0.2:
|
||||||
|
dependencies:
|
||||||
|
mime-db: 1.54.0
|
||||||
|
|
||||||
|
minipass@4.2.8: {}
|
||||||
|
|
||||||
|
minipass@7.1.2: {}
|
||||||
|
|
||||||
|
minizlib@3.1.0:
|
||||||
|
dependencies:
|
||||||
|
minipass: 7.1.2
|
||||||
|
|
||||||
|
ms@2.1.3: {}
|
||||||
|
|
||||||
|
node-forge@1.3.1: {}
|
||||||
|
|
||||||
|
on-finished@2.4.1:
|
||||||
|
dependencies:
|
||||||
|
ee-first: 1.1.1
|
||||||
|
|
||||||
|
path-to-regexp@8.3.0: {}
|
||||||
|
|
||||||
|
range-parser@1.2.1: {}
|
||||||
|
|
||||||
|
selfsigned@4.0.0:
|
||||||
|
dependencies:
|
||||||
|
node-forge: 1.3.1
|
||||||
|
|
||||||
|
send@1.2.0:
|
||||||
|
dependencies:
|
||||||
|
debug: 4.4.3
|
||||||
|
encodeurl: 2.0.0
|
||||||
|
escape-html: 1.0.3
|
||||||
|
etag: 1.8.1
|
||||||
|
fresh: 2.0.0
|
||||||
|
http-errors: 2.0.1
|
||||||
|
mime-types: 3.0.2
|
||||||
|
ms: 2.1.3
|
||||||
|
on-finished: 2.4.1
|
||||||
|
range-parser: 1.2.1
|
||||||
|
statuses: 2.0.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
|
setprototypeof@1.2.0: {}
|
||||||
|
|
||||||
|
statuses@2.0.2: {}
|
||||||
|
|
||||||
|
tar@7.5.2:
|
||||||
|
dependencies:
|
||||||
|
'@isaacs/fs-minipass': 4.0.1
|
||||||
|
chownr: 3.0.0
|
||||||
|
minipass: 7.1.2
|
||||||
|
minizlib: 3.1.0
|
||||||
|
yallist: 5.0.0
|
||||||
|
|
||||||
|
toidentifier@1.0.1: {}
|
||||||
|
|
||||||
|
undici-types@7.16.0: {}
|
||||||
|
|
||||||
|
yallist@5.0.0: {}
|
||||||
9
slide/.gitignore
vendored
Normal file
9
slide/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
*.local
|
||||||
|
.vite-inspect
|
||||||
|
.remote-assets
|
||||||
|
components.d.ts
|
||||||
|
|
||||||
|
.slides.md.swp
|
||||||
20
slide/package.json
Normal file
20
slide/package.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "@kevisual/slidev-template",
|
||||||
|
"type": "module",
|
||||||
|
"basename": "/root/slidev-template",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"scripts": {
|
||||||
|
"build": "slidev build --base /root/slidev-template/",
|
||||||
|
"dev": "slidev --open",
|
||||||
|
"pub": "ev deploy ./dist -k slidev-template -v 0.0.1 -u",
|
||||||
|
"export": "slidev export"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@slidev/cli": "^52.8.0",
|
||||||
|
"@slidev/theme-default": "latest",
|
||||||
|
"vue": "^3.5.24"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"playwright-chromium": "^1.56.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user