4 lines
3.1 KiB
TypeScript
4 lines
3.1 KiB
TypeScript
import { FacadeHandlerError, FacadeRequest, FacadeResponse, FacadeSerialQueue, createRequest, isFacadeRequest } from "./facade-envelope.js";
|
|
export const PART_INSPECT_SCHEMA="freecad-web-part/inspect-source-inventory/v1" as const;export const PART_INSPECT_COMMAND="part.inspectSourceInventory" as const;export const PART_SOURCE_ENTRY="src/Mod/Part/Init.py" as const;
|
|
export interface PartInspectPayload{schema:typeof PART_INSPECT_SCHEMA;module:"Part";action:"inspect/source-inventory";sourceEntry:string}export interface PartInspectResult{schema:typeof PART_INSPECT_SCHEMA;module:"Part";action:"inspect/source-inventory";sourceEntry:typeof PART_SOURCE_ENTRY;summary:string;registeredTypeCount:number;formatCount:3;readOnly:true;resourcesReleased:true}export interface PartInspectKernel{ccall(n:string,t:"number"|"string",a?:string[],v?:unknown[]):number|string}export type PartInspectRequest=FacadeRequest<PartInspectPayload>;export type PartInspectResponse=FacadeResponse<PartInspectResult>;export const PART_INSPECT_FIXTURE:PartInspectPayload={schema:PART_INSPECT_SCHEMA,module:"Part",action:"inspect/source-inventory",sourceEntry:PART_SOURCE_ENTRY};export function createPartInspectRequest(id:string,p:PartInspectPayload=PART_INSPECT_FIXTURE):PartInspectRequest{return createRequest(id,PART_INSPECT_COMMAND,p,"part-source-inventory")}export function isPartInspectRequest(v:unknown):v is PartInspectRequest{if(!isFacadeRequest(v))return false;const r=v as PartInspectRequest,p=r.payload;return r.command===PART_INSPECT_COMMAND&&p?.schema===PART_INSPECT_SCHEMA&&p?.module==="Part"&&p?.action==="inspect/source-inventory"&&typeof p?.sourceEntry==="string"}const n=(k:PartInspectKernel,x:string)=>k.ccall(x,"number") as number;const s=(k:PartInspectKernel,x:string)=>k.ccall(x,"string") as string;export async function handlePartInspect(p:PartInspectPayload,signal:AbortSignal,kernel:PartInspectKernel|Promise<PartInspectKernel>):Promise<PartInspectResult>{if(signal.aborted)throw new FacadeHandlerError("cancelled","request was cancelled");if(!isPartInspectRequest(createPartInspectRequest("validation",p))||p.sourceEntry!==PART_SOURCE_ENTRY)throw new FacadeHandlerError("revision_mismatch","Part source entry is not locked",{field:"sourceEntry"});const k=await kernel;if(signal.aborted)throw new FacadeHandlerError("cancelled","request was cancelled");if(k.ccall("fc_web_part_source_inventory_validate","number",["string"],[p.sourceEntry])!==1)throw new FacadeHandlerError(s(k,"fc_web_part_box_last_error")||"inventory_failed","Part source inventory failed",{field:"sourceEntry"});return{schema:PART_INSPECT_SCHEMA,module:"Part",action:"inspect/source-inventory",sourceEntry:s(k,"fc_web_part_inspect_source_entry") as typeof PART_SOURCE_ENTRY,summary:s(k,"fc_web_part_inspect_summary"),registeredTypeCount:n(k,"fc_web_part_inspect_registered_types"),formatCount:n(k,"fc_web_part_inspect_format_count") as 3,readOnly:true,resourcesReleased:true}}export function dispatchPartInspect(q:FacadeSerialQueue,r:PartInspectRequest,k:PartInspectKernel|Promise<PartInspectKernel>):Promise<PartInspectResponse>{return q.dispatch(r,(p,sig)=>handlePartInspect(p,sig,k))}
|