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}