diff --git a/README.md b/README.md
index 16550ae..f61328c 100644
--- a/README.md
+++ b/README.md
@@ -10,10 +10,7 @@

[![YouTube badge][]][YouTube link]
-
-
-Discord
-
+[](https://discord.gg/7dzw3TYeTU)
- Website: https://kunkun.sh/
- Documentation: https://docs.kunkun.sh/
diff --git a/apps/cli/__tests__/build-extension.test.ts b/apps/cli/__tests__/build-extension.test.ts
deleted file mode 100644
index 1c45892..0000000
--- a/apps/cli/__tests__/build-extension.test.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import os from "os"
-import path from "path"
-import { getRootDir } from "@/constants"
-import type { BuildResult } from "@/types"
-import { buildWithDockerAndValidate } from "@/utils"
-import { $ } from "bun"
-import { afterAll, expect, test } from "bun:test"
-import fs from "fs-extra"
-import { verifyCmd } from "../src/commands/verify"
-
-const rootDir = getRootDir()
-const createKKDir = path.join(rootDir, "../create-kunkun")
-
-const createKKDistDir = path.join(createKKDir, "dist")
-const createKKIndexjsPath = path.join(createKKDistDir, "index.mjs")
-const testDir = path.join(os.tmpdir(), "kunkun-cli-test")
-console.log("Test Dir: ", testDir)
-const templateNames = ["react", "vue", "nuxt", "svelte", "sveltekit", "next", "template"]
-if (fs.existsSync(testDir)) {
- fs.rmdirSync(testDir, { recursive: true })
-}
-fs.mkdirpSync(testDir)
-const testTemplateDirs: string[] = []
-for (const templateName of templateNames) {
- const folderName = `${templateName}-ext`
- await $`node ${createKKIndexjsPath} --outdir ${testDir} --name ${folderName} --template ${templateName}`
- const templateDir = path.join(testDir, folderName)
- console.log("templateDir", templateDir)
- await $`pnpm install`.cwd(templateDir).quiet()
- await $`pnpm build`.cwd(templateDir).quiet()
- testTemplateDirs.push(templateDir)
-}
-
-test("Build And Verify", async () => {
- for (const templateDir of testTemplateDirs) {
- expect(verifyCmd(templateDir, false)).toBeTrue()
- }
-})
-
-const testDirDocker = path.join(os.tmpdir(), "kunkun-cli-test-docker")
-if (fs.existsSync(testDirDocker)) {
- fs.rmdirSync(testDirDocker, { recursive: true })
-}
-fs.mkdirpSync(testDirDocker)
-
-const templateData: Record = {}
-
-await Promise.all(
- templateNames.map(async (templateName) => {
- const folderName = `${templateName}-ext`
- await $`node ${createKKIndexjsPath} --outdir ${testDirDocker} --name ${folderName} --template ${templateName}`
- const templateDir = path.join(testDirDocker, folderName)
- console.log("templateDir:", templateDir)
-
- const buildResult = await buildWithDockerAndValidate(templateDir)
- templateData[templateName] = {
- dir: templateDir,
- buildResult
- }
- })
-)
-console.log(templateData)
-
-test("Template Exist", () => {
- Object.entries(templateData).forEach(async ([templateName, { dir }]) => {
- console.log("Expect dir exist: ", dir)
- expect(fs.existsSync(dir)).toBeTrue()
- })
-})
-
-test("Build Result Tarball Exist", () => {
- Object.entries(templateData).forEach(async ([templateName, { buildResult, dir }]) => {
- const expectedTarballPath = path.join(dir, buildResult.tarballFilename)
- expect(fs.existsSync(expectedTarballPath)).toBeTrue()
- })
-})
-
-afterAll(() => {
- fs.rmdirSync(testDir, { recursive: true })
- fs.rmdirSync(testDirDocker, { recursive: true })
-})
diff --git a/apps/cli/cli.ts b/apps/cli/cli.ts
index ff15b09..fc1ec3f 100644
--- a/apps/cli/cli.ts
+++ b/apps/cli/cli.ts
@@ -1,8 +1,8 @@
#!/usr/bin/env node
import fs from "fs"
import path from "path"
-import { buildCmd, verifyCmd } from "@/commands"
-import { getDockerFolder, NODE_ENV } from "@/constants"
+import { verifyCmd } from "@/commands"
+import { NODE_ENV } from "@/constants"
import logger from "@/logger"
import { program } from "commander"
import { version } from "./package.json"
@@ -39,13 +39,4 @@ program
}
})
-program
- .command("build [project_path]")
- .option("--entrypoint [path]", "Use custom entrypoint.sh (for debug purpose)")
- .description("Build extension with docker and validate (You must have docker installed)")
- .action((projectPath: string | undefined, opts: { entrypoint?: string }) => {
- logger.info("cwd:", cwd)
- buildCmd(computeProjectDir(projectPath), opts.entrypoint)
- })
-
program.parse()
diff --git a/apps/cli/mod.ts b/apps/cli/mod.ts
index 69d98b6..e596e95 100644
--- a/apps/cli/mod.ts
+++ b/apps/cli/mod.ts
@@ -1,9 +1,6 @@
-export { buildWithDocker, buildWithDockerAndValidate } from "@/utils"
-export type { BuildResult } from "@/types"
export {
verifyCustomUiCommand,
verifyTemplateUiCommand,
verifySingleProject,
verifyCmd
} from "@/commands/verify"
-export { buildCmd } from "@/commands/build"
diff --git a/apps/cli/src/commands/build.ts b/apps/cli/src/commands/build.ts
deleted file mode 100644
index 9da291d..0000000
--- a/apps/cli/src/commands/build.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import fs from "fs"
-import path from "path"
-import { getRootDir } from "@/constants"
-import { buildWithDockerAndValidate } from "@/utils"
-
-export async function buildCmd(projectPath: string, entrypoint?: string) {
- const rootDir = getRootDir()
- const entrypointPath = entrypoint
- ? fs.existsSync(entrypoint)
- ? entrypoint
- : path.join(rootDir, entrypoint)
- : undefined
- const buildResult = await buildWithDockerAndValidate(
- projectPath,
- entrypointPath && fs.existsSync(entrypointPath) ? entrypointPath : undefined
- )
- console.log(buildResult)
-}
-
-export default buildCmd
diff --git a/apps/cli/src/utils.ts b/apps/cli/src/utils.ts
deleted file mode 100644
index 328cf3b..0000000
--- a/apps/cli/src/utils.ts
+++ /dev/null
@@ -1,185 +0,0 @@
-import { exec, spawn } from "child_process"
-import crypto from "crypto"
-import path from "path"
-import { ExtPackageJson } from "@kksh/api/models"
-import fs from "fs-extra"
-import * as v from "valibot"
-import { getDockerEntrypoint } from "./constants"
-import logger from "./logger"
-import type { BuildResult } from "./types"
-
-/**
- * Package Name can be scoped or not
- * Use regex to extract package name
- * @param packageName
- * @param version
- */
-export function computeTarballName(packageName: string, version: string): string {
- const scoped = packageName.startsWith("@")
- if (scoped) {
- const [scope, name] = packageName.split("/")
- return `${scope.substring(1)}-${name}-${version}.tgz`
- } else {
- return `${packageName}-${version}.tgz`
- }
-}
-
-export function computeFileHash(filePath: string, algorithm: string): Promise {
- return new Promise((resolve, reject) => {
- const hash = crypto.createHash(algorithm)
- const stream = fs.createReadStream(filePath)
-
- stream.on("data", (data) => {
- // @ts-ignore
- hash.update(data)
- })
-
- stream.on("end", () => {
- const shasum = hash.digest("hex")
- resolve(shasum)
- })
-
- stream.on("error", (err) => {
- reject(err)
- })
- })
-}
-
-export function computeFileSha1(filePath: string): Promise {
- return computeFileHash(filePath, "sha1")
-}
-
-export function computeFileSha512(filePath: string): Promise {
- return computeFileHash(filePath, "sha512")
-}
-
-export function computeHash(buffer: Buffer, algorithm: "sha1" | "sha256" | "sha512") {
- const hash = crypto.createHash(algorithm)
- // @ts-ignore
- hash.update(buffer)
- return hash.digest("hex")
-}
-
-/**
- * Docker is used to build each individual extension for safety
- * Packages could potentially modify other extensions if they share environment.
- * There is also a possibility of leaking environment variables.
- * docker run -v $(pwd)/scripts/docker/entrypoint.sh:/entrypoint.sh \
- * -v $(pwd)/extensions/$ext:/workspace \
- * -w /workspace --rm \
- * --platform=linux/amd64 \
- * node:20 /entrypoint.sh
- * @param extPath
- * @returns shasum of the tarball parsed from stderr output
- */
-export function buildWithDocker(
- extPath: string,
- entrypoint?: string
-): Promise<{
- stderrShasum: string
- stderrTarballFilename: string
- pkg: ExtPackageJson
-}> {
- logger.info(`Building ${extPath}`)
- return new Promise((resolve, reject) => {
- const pkg = v.parse(ExtPackageJson, fs.readJsonSync(path.join(extPath, "package.json")))
- const dockerEntrypoint = entrypoint ? entrypoint : getDockerEntrypoint()
- logger.info("Docker Entrypoint", dockerEntrypoint)
- const dockerCmd = `
- run -v ${dockerEntrypoint}:/entrypoint.sh -v ${extPath}:/workspace -w /workspace --rm huakunshen/kunkun-ext-builder:latest /entrypoint.sh`
- logger.info("dockerCmd", dockerCmd)
- const args = dockerCmd
- .split(" ")
- .filter((arg) => arg.length > 0)
- .filter((arg) => arg !== "\n")
- const subprocess = spawn("docker", args)
- let stderrShasum = ""
- let stderrTarballFilename = ""
- subprocess.stdout.on("data", (data) => {
- console.log(`stdout: ${data}`)
- })
- subprocess.stderr.on("data", (data) => {
- const dataStr = data.toString()
- console.error(`stderr: ${dataStr}`)
- // if (data instanceof String) {
- if (dataStr.includes("npm notice shasum")) {
- console.log("shasum found")
- const shasumMatch = dataStr.match(/npm notice shasum:\s+([a-f0-9]+)/)
-
- if (shasumMatch) {
- stderrShasum = shasumMatch[1]
- console.log("Parsed shasum:", stderrShasum)
- }
- }
-
- if (dataStr.includes("npm notice filename:")) {
- const tarballFilename = dataStr.match(/npm notice filename:\s+([^\s]+)/)
- if (tarballFilename) {
- stderrTarballFilename = tarballFilename[1]
- console.log("Parsed tarball:", stderrTarballFilename)
- }
- } else if (dataStr.includes("filename:")) {
- const tarballFilename = dataStr.match(/filename:\s+([^\s]+)/)
- if (tarballFilename) {
- stderrTarballFilename = tarballFilename[1]
- console.log("Parsed tarball:", stderrTarballFilename)
- }
- }
- // } else {
- // console.error("data is not string");
- // }
- })
- subprocess.on("close", (code) => {
- console.log(`child process exited with code ${code}`)
- if (stderrShasum.trim().length === 0 || stderrTarballFilename.trim().length === 0) {
- return reject("shasum or tarball filename not found")
- }
- if (code !== 0) {
- return reject(`child process exited with code ${code}`)
- } else {
- return resolve({ stderrShasum, stderrTarballFilename, pkg })
- }
- })
- })
-}
-
-/**
- * Use this function to build an extension with docker and validate the tarball
- * If this passes, the tarball is ready to be inserted into the database
- * @param extPath Extension Path
- * @returns
- */
-export function buildWithDockerAndValidate(
- extPath: string,
- entrypoint?: string
-): Promise {
- return buildWithDocker(extPath, entrypoint)
- .then((res) => {
- const parsedTarballPath = path.join(extPath, res.stderrTarballFilename)
- if (!fs.existsSync(parsedTarballPath)) {
- console.error(`Tarball not found: ${parsedTarballPath}`)
- process.exit(1)
- }
- return computeFileSha1(parsedTarballPath).then((computedShasum) => {
- if (computedShasum !== res.stderrShasum) {
- console.error(
- `Shasum mismatch: Computed(${computedShasum}) !== Output from docker(${res.stderrShasum})`
- )
- process.exit(1)
- } else {
- console.log("Shasum matches")
- }
- return {
- shasum: computedShasum,
- tarballFilename: res.stderrTarballFilename,
- tarballPath: parsedTarballPath,
- extPath: extPath,
- pkg: res.pkg
- }
- })
- })
- .catch((err) => {
- console.error(err)
- process.exit(1)
- })
-}
diff --git a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md
index 7020b75..19f9805 100644
--- a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md
+++ b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md
@@ -1,3 +1,4 @@
+
## Permission Table
@@ -6,6 +7,7 @@
Description |
+
|