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 { __server } from "../server";
7import {
8 Call,
9 CallRes,
10 Commit,
11 ConfPlugin,
12 File,
13 PluginSdkType,
14 Report,
15} from "./index";
16
17export function init(
18 repoNamePtr: i32,
19 repoNameSize: i32,
20 confHasChangedPtr: i32,
21 confHasChangedSize: i32,
22 confPtr: i32,
23 confSize: i32,
24): void {
25 const repoName = String.UTF8.decodeUnsafe(repoNamePtr, repoNameSize);
26 const serializedConf = String.UTF8.decodeUnsafe(confPtr, confSize);
27 const confHasChanged = String.UTF8.decodeUnsafe(
28 confHasChangedPtr,
29 confHasChangedSize,
30 );
31 if (__server && __server!.plugin) {
32 __server!.plugin!.init(repoName, confHasChanged == "true", serializedConf);
33 }
34}
35
36export function startCommit(commitPtr: i32, commitSize: i32): void {
37 if (__server && __server!.plugin) {
38 const commit = JSON.parse<Commit>(
39 String.UTF8.decodeUnsafe(commitPtr, commitSize),
40 );
41 __server!.plugin!.startCommit(commit);
42 }
43}
44
45export function addFile(ptr: i32, size: i32): void {
46 if (__server && __server!.plugin) {
47 const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
48 __server!.plugin!.addFile(file);
49 }
50}
51
52export function modFile(ptr: i32, size: i32): void {
53 if (__server && __server!.plugin) {
54 const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
55 __server!.plugin!.modFile(file);
56 }
57}
58
59export function delFile(ptr: i32, size: i32): void {
60 if (__server && __server!.plugin) {
61 const file = JSON.parse<File>(String.UTF8.decodeUnsafe(ptr, size));
62 __server!.plugin!.delFile(file);
63 }
64}
65
66export function endCommit(commitPtr: i32, commitSize: i32): void {
67 if (__server && __server!.plugin) {
68 const commit = JSON.parse<Commit>(
69 String.UTF8.decodeUnsafe(commitPtr, commitSize),
70 );
71 __server!.plugin!.endCommit(commit);
72 }
73}
74
75export function finish(): void {
76 if (__server && __server!.plugin) {
77 __server!.plugin!.finish();
78 }
79}
80
81export function report(jsonPtr: i32, jsonSize: i32): void {
82 if (__server && __server!.plugin) {
83 const report = JSON.parse<Report>(
84 String.UTF8.decodeUnsafe(jsonPtr, jsonSize),
85 );
86 __server!.reportToPlugin(report);
87 }
88}
89
90export function call(jsonPtr: i32, jsonSize: i32): string {
91 if (__server) {
92 const call = JSON.parse<Call>(String.UTF8.decodeUnsafe(jsonPtr, jsonSize));
93 const callRes = new CallRes(new Map(), "method not found");
94 const callback = __server!.getExportedFuncs(call.name);
95 if (callback != null) {
96 const res = callback(call.args);
97 callRes.res = res;
98 }
99 return JSON.stringify(callRes);
100 }
101 return "";
102}
103
104export function pluginConf(): string {
105 if (__server) {
106 const conf = new ConfPlugin(
107 __server!.run,
108 "0.5.0",
109 PluginSdkType.Assemblyscript,
110 );
111 return JSON.stringify<ConfPlugin>(conf);
112 }
113 return "{}";
114}
115
116export function malloc(size: usize): usize {
117 const ptr = __new(size, 1);
118 // @ts-ignore
119 __pin(ptr);
120 return ptr;
121}
122
123export function free(ptr: usize): void {
124 // @ts-ignore
125 __unpin(ptr);
126}