GitRoot

craft your forge, build your project, grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: MIT
 4
 5import { JSON } from "json-as";
 6import { CommitStr } from "./model/commit";
 7import { File } from "./model/file";
 8import { ConfPlugin, pluginSdkTypeTinygo } from "./model/pluginconf";
 9import { __server } from "./server";
10
11export function init(
12  repoNamePtr: i32,
13  repoNameSize: i32,
14  confHasChangedPtr: i32,
15  confHasChangedSize: i32,
16  confPtr: i32,
17  confSize: i32
18): void {
19  const repoName = String.UTF8.decodeUnsafe(repoNamePtr, repoNameSize);
20  const serializedConf = String.UTF8.decodeUnsafe(confPtr, confSize);
21  const confHasChanged = String.UTF8.decodeUnsafe(
22    confHasChangedPtr,
23    confHasChangedSize
24  );
25  if (__server && __server!.plugin) {
26    __server!.plugin!.init(repoName, confHasChanged == "true", serializedConf);
27  }
28}
29
30export function startCommit(commitPtr: i32, commitSize: i32): void {
31  if (__server && __server!.plugin) {
32    const commit = JSON.parse<CommitStr>(
33      String.UTF8.decodeUnsafe(commitPtr, commitSize)
34    );
35    __server!.plugin!.startCommit(commit.toCommit());
36  }
37}
38
39export function addFile(ptr: i32, size: i32): void {
40  if (__server && __server!.plugin) {
41    const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
42    __server!.plugin!.addFile(file);
43  }
44}
45
46export function modFile(ptr: i32, size: i32): void {
47  if (__server && __server!.plugin) {
48    const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
49    __server!.plugin!.modFile(file);
50  }
51}
52
53export function delFile(ptr: i32, size: i32): void {
54  if (__server && __server!.plugin) {
55    const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
56    __server!.plugin!.delFile(file);
57  }
58}
59
60export function endCommit(commitPtr: i32, commitSize: i32): void {
61  if (__server && __server!.plugin) {
62    const commit = JSON.parse<CommitStr>(
63      String.UTF8.decodeUnsafe(commitPtr, commitSize)
64    );
65    __server!.plugin!.endCommit(commit.toCommit());
66  }
67}
68
69export function finish(): void {
70  if (__server && __server!.plugin) {
71    __server!.plugin!.finish();
72  }
73}
74
75export function pluginConf(): string {
76  if (__server) {
77    const conf = ConfPlugin.build(__server!.run, "0.4.0", pluginSdkTypeTinygo);
78    return JSON.stringify<ConfPlugin>(conf);
79  }
80  return "{}";
81}
82
83export function malloc(size: usize): usize {
84  const ptr = __new(size, 1);
85  // @ts-ignore
86  __pin(ptr);
87  return ptr;
88}
89
90export function free(ptr: usize): void {
91  // @ts-ignore
92  __unpin(ptr);
93}