diff --git a/ts/create-smelter-app/templates/node-express-zustand/package.json b/ts/create-smelter-app/templates/node-express-zustand/package.json index 39d63611d..706ab7f2c 100644 --- a/ts/create-smelter-app/templates/node-express-zustand/package.json +++ b/ts/create-smelter-app/templates/node-express-zustand/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@swmansion/smelter": "workspace:^0.2.0-rc.0", - "@swmansion/smelter-node": "workspace:^0.2.0-rc.1", + "@swmansion/smelter-node": "workspace:^0.2.0-rc.2", "express": "^4.21.0", "react": "^18.3.1", "zustand": "4.5.5" diff --git a/ts/create-smelter-app/templates/node-minimal/package.json b/ts/create-smelter-app/templates/node-minimal/package.json index 4ec41f367..4429de4a8 100644 --- a/ts/create-smelter-app/templates/node-minimal/package.json +++ b/ts/create-smelter-app/templates/node-minimal/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@swmansion/smelter": "workspace:^0.2.0-rc.0", - "@swmansion/smelter-node": "workspace:^0.2.0-rc.1", + "@swmansion/smelter-node": "workspace:^0.2.0-rc.2", "react": "^18.3.1" }, "devDependencies": { diff --git a/ts/examples/node-examples/package.json b/ts/examples/node-examples/package.json index 86bd82315..ae3bdef7c 100644 --- a/ts/examples/node-examples/package.json +++ b/ts/examples/node-examples/package.json @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "@swmansion/smelter": "workspace:^0.2.0-rc.0", - "@swmansion/smelter-node": "workspace:^0.2.0-rc.1", + "@swmansion/smelter-node": "workspace:^0.2.0-rc.2", "fs-extra": "^11.2.0", "node-fetch": "^2.6.7", "react": "^18.3.1", diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 3f6db5221..5247dcd00 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -82,7 +82,7 @@ importers: specifier: workspace:^0.2.0-rc.0 version: link:../../../smelter '@swmansion/smelter-node': - specifier: workspace:^0.2.0-rc.1 + specifier: workspace:^0.2.0-rc.2 version: link:../../../smelter-node express: specifier: ^4.21.0 @@ -110,7 +110,7 @@ importers: specifier: workspace:^0.2.0-rc.0 version: link:../../../smelter '@swmansion/smelter-node': - specifier: workspace:^0.2.0-rc.1 + specifier: workspace:^0.2.0-rc.2 version: link:../../../smelter-node react: specifier: ^18.3.1 @@ -132,7 +132,7 @@ importers: specifier: workspace:^0.2.0-rc.0 version: link:../../smelter '@swmansion/smelter-node': - specifier: workspace:^0.2.0-rc.1 + specifier: workspace:^0.2.0-rc.2 version: link:../../smelter-node fs-extra: specifier: ^11.2.0 diff --git a/ts/smelter-node/package.json b/ts/smelter-node/package.json index f52653ff5..2d8ad6eee 100644 --- a/ts/smelter-node/package.json +++ b/ts/smelter-node/package.json @@ -1,6 +1,6 @@ { "name": "@swmansion/smelter-node", - "version": "0.2.0-rc.1", + "version": "0.2.0-rc.2", "author": "Software Mansion ", "license": "MIT", "description": "Node runtime for @swmansion/smelter", diff --git a/ts/smelter-node/src/index.ts b/ts/smelter-node/src/index.ts index 363c65ac1..7f48ef1d9 100644 --- a/ts/smelter-node/src/index.ts +++ b/ts/smelter-node/src/index.ts @@ -1,5 +1,8 @@ +import type { SmelterManager } from '@swmansion/smelter-core'; import Smelter from './live/compositor'; +import ExistingInstanceManager from './manager/existingInstance'; +import LocallySpawnedInstanceManager from './manager/locallySpawnedInstance'; import OfflineSmelter from './offline/compositor'; export default Smelter; -export { OfflineSmelter }; +export { OfflineSmelter, LocallySpawnedInstanceManager, ExistingInstanceManager, SmelterManager }; diff --git a/ts/smelter-node/src/live/compositor.ts b/ts/smelter-node/src/live/compositor.ts index f06ab23d9..31d32a688 100644 --- a/ts/smelter-node/src/live/compositor.ts +++ b/ts/smelter-node/src/live/compositor.ts @@ -5,7 +5,7 @@ import type { } from '@swmansion/smelter-core'; import { Smelter as CoreSmelter } from '@swmansion/smelter-core'; import { createLogger } from '../logger'; -import LocallySpawnedInstance from '../manager/locallySpawnedInstance'; +import LocallySpawnedInstanceManager from '../manager/locallySpawnedInstance'; import type { ReactElement } from 'react'; import type { Renderers } from '@swmansion/smelter'; import FormData from 'form-data'; @@ -16,7 +16,7 @@ export default class Smelter { public constructor(manager?: SmelterManager) { this.coreSmelter = new CoreSmelter( - manager ?? LocallySpawnedInstance.defaultManager(), + manager ?? LocallySpawnedInstanceManager.defaultManager(), createLogger() ); } diff --git a/ts/smelter-node/src/manager/existingInstance.ts b/ts/smelter-node/src/manager/existingInstance.ts index d2df291af..e56ef63f0 100644 --- a/ts/smelter-node/src/manager/existingInstance.ts +++ b/ts/smelter-node/src/manager/existingInstance.ts @@ -18,7 +18,7 @@ type CreateInstanceOptions = { /** * SmelterManager that will connect to existing instance */ -class ExistingInstance implements SmelterManager { +class ExistingInstanceManager implements SmelterManager { private ip: string; private port: number; private protocol: 'http' | 'https'; @@ -62,4 +62,4 @@ class ExistingInstance implements SmelterManager { } } -export default ExistingInstance; +export default ExistingInstanceManager; diff --git a/ts/smelter-node/src/manager/locallySpawnedInstance.ts b/ts/smelter-node/src/manager/locallySpawnedInstance.ts index 497c3a160..69cc2e230 100644 --- a/ts/smelter-node/src/manager/locallySpawnedInstance.ts +++ b/ts/smelter-node/src/manager/locallySpawnedInstance.ts @@ -30,7 +30,7 @@ type ManagedInstanceOptions = { /** * SmelterManager that will download and spawn it's own Smelter instance locally. */ -class LocallySpawnedInstance implements SmelterManager { +class LocallySpawnedInstanceManager implements SmelterManager { private port: number; private workingdir: string; private executablePath?: string; @@ -46,9 +46,9 @@ class LocallySpawnedInstance implements SmelterManager { this.wsConnection = new WebSocketConnection(`ws://127.0.0.1:${this.port}/ws`); } - public static defaultManager(): LocallySpawnedInstance { + public static defaultManager(): LocallySpawnedInstanceManager { const port = process.env.SMELTER_API_PORT ? Number(process.env.SMELTER_API_PORT) : 8000; - return new LocallySpawnedInstance({ + return new LocallySpawnedInstanceManager({ port, executablePath: process.env.SMELTER_PATH, }); @@ -157,4 +157,4 @@ function smelterTarGzUrl(withWebRenderer?: boolean): string { return `https://github.com/software-mansion/smelter/releases/download/${VERSION}/${archiveName}`; } -export default LocallySpawnedInstance; +export default LocallySpawnedInstanceManager; diff --git a/ts/smelter-node/src/offline/compositor.ts b/ts/smelter-node/src/offline/compositor.ts index 9975640d7..b8772ccbc 100644 --- a/ts/smelter-node/src/offline/compositor.ts +++ b/ts/smelter-node/src/offline/compositor.ts @@ -5,7 +5,7 @@ import type { } from '@swmansion/smelter-core'; import { OfflineSmelter as CoreSmelter } from '@swmansion/smelter-core'; import { createLogger } from '../logger'; -import LocallySpawnedInstance from '../manager/locallySpawnedInstance'; +import LocallySpawnedInstanceManager from '../manager/locallySpawnedInstance'; import type { ReactElement } from 'react'; import type { Renderers } from '@swmansion/smelter'; import fetch from 'node-fetch'; @@ -16,7 +16,7 @@ export default class OfflineSmelter { public constructor(manager?: SmelterManager) { this.coreSmelter = new CoreSmelter( - manager ?? LocallySpawnedInstance.defaultManager(), + manager ?? LocallySpawnedInstanceManager.defaultManager(), createLogger() ); } diff --git a/ts/smelter-web-wasm/src/compositor/compositor.ts b/ts/smelter-web-wasm/src/compositor/compositor.ts index a5b499aaa..a57bd2bea 100644 --- a/ts/smelter-web-wasm/src/compositor/compositor.ts +++ b/ts/smelter-web-wasm/src/compositor/compositor.ts @@ -13,7 +13,7 @@ import WasmInstance from '../mainContext/instance'; import type { RegisterOutputResponse } from '../mainContext/output'; export type SmelterOptions = { - framerate?: Framerate; + framerate?: Framerate | number; streamFallbackTimeoutMs?: number; }; @@ -38,8 +38,8 @@ export default class Smelter { private options: SmelterOptions; private logger: Logger = pino({ level: 'warn' }); - public constructor(options: SmelterOptions) { - this.options = options; + public constructor(options?: SmelterOptions) { + this.options = options ?? {}; } /* @@ -49,7 +49,7 @@ export default class Smelter { public async init(): Promise { assert(wasmBundleUrl, 'Location of WASM bundle is not defined, call setWasmBundleUrl() first.'); this.instance = new WasmInstance({ - framerate: this.options.framerate ?? { num: 30, den: 1 }, + framerate: resolveFramerate(this.options.framerate), wasmBundleUrl, logger: this.logger.child({ element: 'wasmInstance' }), }); @@ -120,3 +120,13 @@ export default class Smelter { await this.coreSmelter?.terminate(); } } + +function resolveFramerate(framerate?: number | Framerate): Framerate { + if (!framerate) { + return { num: 30, den: 1 }; + } else if (typeof framerate === 'number') { + return { num: framerate, den: 1 }; + } else { + return framerate; + } +}