Files
plainleaf/client/plugos/syscalls/asset.ts
T
2026-07-16 09:17:04 +02:00

72 lines
2.5 KiB
TypeScript

import type { SysCallMapping, System } from "../system.ts";
import type { FileMeta } from "../../../plug-api/types/index.ts";
export default function assetSyscalls(system: System<any>): SysCallMapping {
return {
"asset.readAsset": {
callback: (_ctx, plugName: string, name: string): string => {
return system.loadedPlugs
.get(plugName)!
.assets!.readFileAsDataUrl(name);
},
description: "Reads an asset embedded in a plug as a data URL.",
parameters: [
{ name: "plugName", type: "string", description: "Plug name." },
{ name: "name", type: "string", description: "Asset path." },
],
returns: [{ type: "string", description: "Asset data URL." }],
examples: [
{ code: 'local image = asset.readAsset("myplug", "image.png")' },
],
},
"asset.listFiles": {
callback: (_ctx, plugName: string): FileMeta[] => {
const assets = system.loadedPlugs.get(plugName)!.assets!;
const fileNames = assets.listFiles();
return fileNames.map((name) => ({
name,
contentType: assets.getMimeType(name),
created: assets.getMtime(name),
lastModified: assets.getMtime(name),
size: -1,
perm: "ro",
}));
},
description: "Lists the assets embedded in a plug.",
parameters: [
{ name: "plugName", type: "string", description: "Plug name." },
],
returns: [{ type: "table", description: "List of file metadata." }],
examples: [
{
code: 'for _, file in ipairs(asset.listFiles("myplug")) do\n print(file.name)\nend',
},
],
},
"asset.getFileMeta": {
callback: (_ctx, plugName: string, name: string): FileMeta => {
const assets = system.loadedPlugs.get(plugName)!.assets!;
return {
name,
contentType: assets.getMimeType(name),
created: assets.getMtime(name),
lastModified: assets.getMtime(name),
size: -1,
perm: "ro",
};
},
description: "Gets metadata for an asset embedded in a plug.",
parameters: [
{ name: "plugName", type: "string", description: "Plug name." },
{ name: "name", type: "string", description: "Asset path." },
],
returns: [{ type: "table", description: "File metadata." }],
examples: [
{
code: 'local meta = asset.getFileMeta("myplug", "data.txt")\nprint(meta.lastModified)',
},
],
},
};
}