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}