From 21608b740a6d4db3b697e5d6ce968a3fc54d441a Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sun, 18 Jul 2021 08:23:20 +1000 Subject: [PATCH] Add demo CAD kernel Controller, and typing to suit We might be adding JSCAD soon and adding some guidance on the happy path with good typing for the CadKernels is a good idea related to #411 --- .../helpers/cadPackages/cadQueryController.ts | 5 +-- app/web/src/helpers/cadPackages/common.ts | 32 +++++++++++++++++-- .../src/helpers/cadPackages/demoController.ts | 32 +++++++++++++++++++ 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 app/web/src/helpers/cadPackages/demoController.ts diff --git a/app/web/src/helpers/cadPackages/cadQueryController.ts b/app/web/src/helpers/cadPackages/cadQueryController.ts index e63820b..b2c4a81 100644 --- a/app/web/src/helpers/cadPackages/cadQueryController.ts +++ b/app/web/src/helpers/cadPackages/cadQueryController.ts @@ -5,9 +5,10 @@ import { createUnhealthyResponse, timeoutErrorMessage, RenderArgs, + DefaultKernelExport, } from './common' -export const render = async ({ +export const render: DefaultKernelExport['render'] = async ({ code, settings: { quality = 'low' }, }: RenderArgs) => { @@ -52,7 +53,7 @@ export const render = async ({ } } -const openscad = { +const openscad: DefaultKernelExport = { render, // more functions to come } diff --git a/app/web/src/helpers/cadPackages/common.ts b/app/web/src/helpers/cadPackages/common.ts index 68ffaee..a55b902 100644 --- a/app/web/src/helpers/cadPackages/common.ts +++ b/app/web/src/helpers/cadPackages/common.ts @@ -19,7 +19,20 @@ export interface RenderArgs { } } -export function createHealthyResponse({ date, data, consoleMessage, type }) { +export interface HealthyResponse { + status: 'healthy' + message: { + type: 'message' + message: string + time: Date + } + objectData: { + data: any + type: 'stl' | 'png' | 'geometry' + } +} + +export function createHealthyResponse({ date, data, consoleMessage, type }: {date: Date; data: any; consoleMessage: string, type: HealthyResponse['objectData']['type'] }): HealthyResponse { return { status: 'healthy', objectData: { @@ -34,7 +47,16 @@ export function createHealthyResponse({ date, data, consoleMessage, type }) { } } -export function createUnhealthyResponse(date, message = 'network issue') { +export interface ErrorResponse { + status: 'error' + message: { + type: 'error' + message: string + time: Date + } +} + +export function createUnhealthyResponse(date: Date, message = 'network issue'): ErrorResponse { // TODO handle errors better // I think we should display something overlayed on the viewer window something like "network issue try again" // and in future I think we need timeouts differently as they maybe from a user trying to render something too complex @@ -49,4 +71,8 @@ export function createUnhealthyResponse(date, message = 'network issue') { } } -export const timeoutErrorMessage = `timeout: We're currently limited a 30s execution time. You can try again, sometimes it works the second time` +export const timeoutErrorMessage = `timeout: We're currently limited to a 30s execution time. You can try again, sometimes it works the second time` + +export interface DefaultKernelExport { + render: (arg: RenderArgs) => Promise +} diff --git a/app/web/src/helpers/cadPackages/demoController.ts b/app/web/src/helpers/cadPackages/demoController.ts new file mode 100644 index 0000000..b42c724 --- /dev/null +++ b/app/web/src/helpers/cadPackages/demoController.ts @@ -0,0 +1,32 @@ +// not an actual and there fore not imported into index.ts in this folder, +// this is boiler plate code for adding new integrations. + +import { + RenderArgs, + DefaultKernelExport, +} from './common' + +export const render: DefaultKernelExport['render'] = async ({ + code, + settings, +}: RenderArgs) => { + // do your magic + return { + status: 'healthy', + message: { + type: 'message', + message: 'demo', + time: new Date() + }, + objectData: { + data: 'any', + type: 'geometry' + } + } +} + +const demoController: DefaultKernelExport = { + render, +} + +export default demoController