diff --git a/docs/TYPESCRIPT_MIGRATION_PLAN.md b/docs/TYPESCRIPT_MIGRATION_PLAN.md index af7eb24..4a0e6fe 100644 --- a/docs/TYPESCRIPT_MIGRATION_PLAN.md +++ b/docs/TYPESCRIPT_MIGRATION_PLAN.md @@ -16,11 +16,11 @@ Goal: migrate the frontend progressively from permissive TypeScript output to ty ## Phase 1 - Shared Types -- [ ] Add typed API response contracts for project list, project set, template preview, workflow save, and model tools. -- [ ] Add typed runtime state interfaces for persisted state and transient UI callbacks. -- [ ] Add typed graph/node/widget interfaces for the subset used by this extension. -- [ ] Replace broad object assumptions in `state_manager.ts`. -- [ ] Replace broad API payload assumptions in `mjr/api.ts`. +- [x] Add typed API response contracts for project list, project set, template preview, workflow save, and model tools. +- [x] Add typed runtime state interfaces for persisted state and transient UI callbacks. +- [x] Add typed graph/node/widget interfaces for the subset used by this extension. +- [x] Replace broad object assumptions in `state_manager.ts`. +- [x] Replace broad API payload assumptions in `mjr/api.ts`. ## Phase 2 - Low-Risk Strict Modules diff --git a/js/mjr/api.d.ts b/js/mjr/api.d.ts index 4361ea8..70f3603 100644 --- a/js/mjr/api.d.ts +++ b/js/mjr/api.d.ts @@ -1,19 +1,20 @@ -export declare function fetchJSON(url: any, opts: any): Promise; -export declare function tryResolveProjectId(folder: any): Promise; -export declare function listProjects(): Promise; -export declare function setProject(project_name: any, create_base?: boolean): Promise; -export declare function getModels(): Promise; -export declare function createCustomOut(payload: any): Promise; -export declare function previewTemplate(template: any, tokens: any): Promise; -export declare function listExistingNames(project_id: any, media?: string): Promise; -export declare function saveWorkflow(payload: any): Promise; -export declare function scanModelCandidates(missing: any): Promise; -export declare function resolveModelRecipes(missing: any): Promise; -export declare function saveModelRecipes(items: any): Promise; -export declare function downloadModels(items: any): Promise; -export declare function getDownloadStatus(job_id: any): Promise; -export declare function getFingerprintCacheStatus(): Promise; -export declare function buildFingerprintCache(payload: any): Promise; -export declare function resolveFingerprint(payload: any): Promise; -export declare function searchRegistry(query: any, limit?: number): Promise; -export declare function contributeRegistry(payload: any): Promise; +import type { ModelToolResponse, ProjectListResponse, ProjectSetResponse, TemplatePreviewResponse, WorkflowSavePayload, WorkflowSaveResponse } from "../types/domain.js"; +export declare function fetchJSON(url: string, opts?: RequestInit): Promise; +export declare function tryResolveProjectId(folder: string): Promise; +export declare function listProjects(): Promise; +export declare function setProject(project_name: string, create_base?: boolean): Promise; +export declare function getModels(): Promise; +export declare function createCustomOut(payload: Record): Promise; +export declare function previewTemplate(template: string, tokens: Record): Promise; +export declare function listExistingNames(project_id: string, media?: string): Promise; +export declare function saveWorkflow(payload: WorkflowSavePayload): Promise; +export declare function scanModelCandidates(missing: unknown[]): Promise; +export declare function resolveModelRecipes(missing: unknown[]): Promise; +export declare function saveModelRecipes(items: unknown[]): Promise; +export declare function downloadModels(items: unknown[]): Promise; +export declare function getDownloadStatus(job_id: string): Promise; +export declare function getFingerprintCacheStatus(): Promise; +export declare function buildFingerprintCache(payload: Record): Promise; +export declare function resolveFingerprint(payload: Record): Promise; +export declare function searchRegistry(query: string, limit?: number): Promise; +export declare function contributeRegistry(payload: Record): Promise; diff --git a/js/mjr/api.js.map b/js/mjr/api.js.map index d480409..75c5d88 100644 --- a/js/mjr/api.js.map +++ b/js/mjr/api.js.map @@ -1 +1 @@ -{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/mjr/api.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/mjr/api.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/js/state_manager.d.ts b/js/state_manager.d.ts index 7567b83..be3cff5 100644 --- a/js/state_manager.d.ts +++ b/js/state_manager.d.ts @@ -1,41 +1,7 @@ -export declare const DEFAULT_STATE: { - projectName: string; - workflowName: string; - workflowAsset: string; - workflowLastBase: string; - workflowNextSuffix: number; - workflowPanelOpen: boolean; - projectId: string; - projectFolder: string; - projectExists: any; - autoPatch: boolean; - autoPatchNewNodes: boolean; - autoSwitchTrusted: boolean; - autoHookSave: boolean; - kind: string; - media: string; - name: string; - modelSelection: string; - detectedModelTag: string; - useCustomModel: boolean; - customModelText: string; - modelUpper: boolean; - pendingProjectName: string; - pendingSelectProjectId: string; - lastRelDir: string; - lastPrefix: string; - pathTemplate: string; - showMoreModels: boolean; - lastError: string; - detected: any; - workflowHasSignature: boolean; - workflowChecked: boolean; - isGraphLoading: boolean; - graphLoadToken: number; - graphIsEmpty: boolean; -}; -export declare let runtimeState: any; -export declare function setRuntimeState(state: any): void; -export declare function createRuntimeState(overrides: any): any; -export declare function loadState(): any; -export declare function saveState(state: any): void; +import type { PersistedRuntimeState, RuntimeState } from "./types/domain.js"; +export declare const DEFAULT_STATE: RuntimeState; +export declare let runtimeState: RuntimeState | null; +export declare function setRuntimeState(state: RuntimeState | null): void; +export declare function createRuntimeState(overrides?: PersistedRuntimeState | Record): RuntimeState; +export declare function loadState(): PersistedRuntimeState | null; +export declare function saveState(state: RuntimeState): void; diff --git a/js/state_manager.js.map b/js/state_manager.js.map index 044aac1..302db9f 100644 --- a/js/state_manager.js.map +++ b/js/state_manager.js.map @@ -1 +1 @@ -{"version":3,"file":"state_manager.js","sourceRoot":"","sources":["../src/state_manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"state_manager.js","sourceRoot":"","sources":["../src/state_manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/js/types/domain.d.ts b/js/types/domain.d.ts new file mode 100644 index 0000000..8a4118e --- /dev/null +++ b/js/types/domain.d.ts @@ -0,0 +1,136 @@ +export type ProjectMedia = "images" | "videos" | "other" | string; +export interface ProjectListEntry { + project_id: string; + folder?: string; + exists?: boolean; + archived?: boolean; + [key: string]: unknown; +} +export interface ProjectListResponse { + ok?: boolean; + projects?: ProjectListEntry[]; + [key: string]: unknown; +} +export interface ProjectSetResponse { + ok?: boolean; + project_id: string; + project_folder: string; + [key: string]: unknown; +} +export interface ProjectResolveResponse { + ok?: boolean; + project_id?: string; + [key: string]: unknown; +} +export interface TemplatePreviewResponse { + ok?: boolean; + path?: string; + rel_dir?: string; + prefix?: string; + [key: string]: unknown; +} +export interface WorkflowSavePayload { + project_id: string; + workflow_name: string; + workflow: unknown; + overwrite?: boolean; + mirror_to_comfy_workflows?: boolean; + use_project_subfolder_in_workflows?: boolean; + asset_folder?: string; +} +export interface WorkflowSaveResponse { + ok?: boolean; + file?: string; + project_rel_path?: string; + workflow_rel_dir?: string; + comfy_workflow_rel?: string; + mirrored?: boolean; + mirror_error?: string; + [key: string]: unknown; +} +export interface ModelToolResponse { + ok?: boolean; + items?: unknown[]; + missing?: unknown[]; + results?: unknown[]; + entries?: unknown[]; + candidates?: unknown[]; + recipes?: unknown[]; + job_id?: string; + status?: string; + [key: string]: unknown; +} +export interface DetectedProject { + mode: "none" | "signature" | "path" | string; + project_folder: string; + project_id: string; + confidence: number; +} +export interface RuntimeUiCallbacks { + updateStatus?: () => void | Promise; + updateResolve?: () => void | Promise; + updateWorkflowBlock?: () => void | Promise; + updateTargetLabel?: () => void | Promise; + refreshExistingNames?: () => void | Promise; + refreshMissingStatus?: () => void | Promise; + updatePreview?: () => void | Promise; + resetForProjectChange?: () => void; + refreshProjectsList?: (force?: boolean) => void | Promise; + buildWorkflowName?: () => string; + setWorkflowName?: (name: string) => void; +} +export interface RuntimeState { + projectName: string; + workflowName: string; + workflowAsset: string; + workflowLastBase: string; + workflowNextSuffix: number; + workflowPanelOpen: boolean; + projectId: string; + projectFolder: string; + projectExists: boolean | null; + autoPatch: boolean; + autoPatchNewNodes: boolean; + autoSwitchTrusted: boolean; + autoHookSave: boolean; + kind: string; + media: ProjectMedia; + name: string; + modelSelection: string; + detectedModelTag: string; + useCustomModel: boolean; + customModelText: string; + modelUpper: boolean; + pendingProjectName: string; + pendingSelectProjectId: string; + lastRelDir: string; + lastPrefix: string; + pathTemplate: string; + showMoreModels: boolean; + lastError: string; + detected: DetectedProject | null; + workflowHasSignature: boolean; + workflowChecked: boolean; + isGraphLoading: boolean; + graphLoadToken: number; + graphIsEmpty: boolean; + customModel?: string; + _ui?: RuntimeUiCallbacks; + _emptyGraphPromptToken?: number | null; +} +export type PersistedRuntimeState = Partial>; +export interface ComfyWidget { + name?: string; + value?: unknown; + options?: { + values?: unknown[]; + [key: string]: unknown; + }; + [key: string]: unknown; +} +export interface ComfyNode { + type?: string; + title?: string; + widgets?: ComfyWidget[]; + [key: string]: unknown; +} diff --git a/js/types/domain.js b/js/types/domain.js new file mode 100644 index 0000000..207ee2c --- /dev/null +++ b/js/types/domain.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=domain.js.map \ No newline at end of file diff --git a/js/types/domain.js.map b/js/types/domain.js.map new file mode 100644 index 0000000..063740b --- /dev/null +++ b/js/types/domain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/types/domain.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/src/mjr/api.ts b/src/mjr/api.ts index b889b59..ee2756d 100644 --- a/src/mjr/api.ts +++ b/src/mjr/api.ts @@ -1,3 +1,13 @@ +import type { + ModelToolResponse, + ProjectListResponse, + ProjectResolveResponse, + ProjectSetResponse, + TemplatePreviewResponse, + WorkflowSavePayload, + WorkflowSaveResponse, +} from "../types/domain.js"; + let _csrfTokenPromise = null; function _getApiKey() { @@ -41,7 +51,7 @@ async function _getCsrfToken(forceRefresh = false) { return _csrfTokenPromise; } -export async function fetchJSON(url, opts) { +export async function fetchJSON(url: string, opts?: RequestInit): Promise { const o = opts ? { ...opts } : {}; o.credentials = o.credentials || "same-origin"; o.headers = { ...(o.headers || {}) }; @@ -85,130 +95,130 @@ export async function fetchJSON(url, opts) { return data; } -export async function tryResolveProjectId(folder) { +export async function tryResolveProjectId(folder: string): Promise { try { - const data = await fetchJSON(`/mjr_project/resolve?folder=${encodeURIComponent(folder)}`); + const data = await fetchJSON(`/mjr_project/resolve?folder=${encodeURIComponent(folder)}`); if (data?.ok) return data.project_id || ""; } catch (_) {} return ""; } -export async function listProjects() { - return fetchJSON("/mjr_project/list"); +export async function listProjects(): Promise { + return fetchJSON("/mjr_project/list"); } -export async function setProject(project_name, create_base = true) { - return fetchJSON("/mjr_project/set", { +export async function setProject(project_name: string, create_base = true): Promise { + return fetchJSON("/mjr_project/set", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ project_name, create_base }), }); } -export async function getModels() { - return fetchJSON("/mjr_project/models"); +export async function getModels(): Promise { + return fetchJSON("/mjr_project/models"); } -export async function createCustomOut(payload) { - return fetchJSON("/mjr_project/create_custom_out", { +export async function createCustomOut(payload: Record): Promise { + return fetchJSON("/mjr_project/create_custom_out", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload || {}), }); } -export async function previewTemplate(template, tokens) { - return fetchJSON("/mjr_project/preview_template", { +export async function previewTemplate(template: string, tokens: Record): Promise { + return fetchJSON("/mjr_project/preview_template", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ template, tokens: tokens || {} }), }); } -export async function listExistingNames(project_id, media = "images") { +export async function listExistingNames(project_id: string, media = "images"): Promise { const qs = new URLSearchParams({ project_id: project_id || "", media: media || "images", }); - const data = await fetchJSON(`/mjr_project/assets/list_names?${qs.toString()}`); + const data = await fetchJSON<{ names?: unknown[] }>(`/mjr_project/assets/list_names?${qs.toString()}`); return Array.isArray(data?.names) ? data.names : []; } -export async function saveWorkflow(payload) { - return fetchJSON("/mjr_project/workflow/save", { +export async function saveWorkflow(payload: WorkflowSavePayload): Promise { + return fetchJSON("/mjr_project/workflow/save", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload || {}), }); } -export async function scanModelCandidates(missing) { - return fetchJSON("/mjr_models/scan_candidates", { +export async function scanModelCandidates(missing: unknown[]): Promise { + return fetchJSON("/mjr_models/scan_candidates", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ missing: missing || [] }), }); } -export async function resolveModelRecipes(missing) { - return fetchJSON("/mjr_models/resolve_recipes", { +export async function resolveModelRecipes(missing: unknown[]): Promise { + return fetchJSON("/mjr_models/resolve_recipes", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ missing: missing || [] }), }); } -export async function saveModelRecipes(items) { - return fetchJSON("/mjr_models/save_recipes", { +export async function saveModelRecipes(items: unknown[]): Promise { + return fetchJSON("/mjr_models/save_recipes", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ items: items || [] }), }); } -export async function downloadModels(items) { - return fetchJSON("/mjr_models/download", { +export async function downloadModels(items: unknown[]): Promise { + return fetchJSON("/mjr_models/download", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ items: items || [] }), }); } -export async function getDownloadStatus(job_id) { +export async function getDownloadStatus(job_id: string): Promise { const qs = new URLSearchParams({ job_id: job_id || "" }); - return fetchJSON(`/mjr_models/download_status?${qs.toString()}`); + return fetchJSON(`/mjr_models/download_status?${qs.toString()}`); } -export async function getFingerprintCacheStatus() { - return fetchJSON("/mjr_models/fingerprint_cache_status"); +export async function getFingerprintCacheStatus(): Promise { + return fetchJSON("/mjr_models/fingerprint_cache_status"); } -export async function buildFingerprintCache(payload) { - return fetchJSON("/mjr_models/build_fingerprint_cache", { +export async function buildFingerprintCache(payload: Record): Promise { + return fetchJSON("/mjr_models/build_fingerprint_cache", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload || {}), }); } -export async function resolveFingerprint(payload) { - return fetchJSON("/mjr_models/resolve_by_fingerprint", { +export async function resolveFingerprint(payload: Record): Promise { + return fetchJSON("/mjr_models/resolve_by_fingerprint", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload || {}), }); } -export async function searchRegistry(query, limit = 6) { - return fetchJSON("/mjr_models/registry/search", { +export async function searchRegistry(query: string, limit = 6): Promise { + return fetchJSON("/mjr_models/registry/search", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: String(query || ""), limit }), }); } -export async function contributeRegistry(payload) { - return fetchJSON("/mjr_models/registry/contribute", { +export async function contributeRegistry(payload: Record): Promise { + return fetchJSON("/mjr_models/registry/contribute", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload || {}), diff --git a/src/state_manager.ts b/src/state_manager.ts index 94fe3f1..470dea3 100644 --- a/src/state_manager.ts +++ b/src/state_manager.ts @@ -1,6 +1,8 @@ +import type { PersistedRuntimeState, RuntimeState } from "./types/domain.js"; + const STORAGE_KEY = "mjr_project_settings_state"; -export const DEFAULT_STATE = { +export const DEFAULT_STATE: RuntimeState = { projectName: "", workflowName: "", workflowAsset: "", @@ -37,17 +39,17 @@ export const DEFAULT_STATE = { graphIsEmpty: false, }; -export let runtimeState = null; +export let runtimeState: RuntimeState | null = null; -export function setRuntimeState(state) { +export function setRuntimeState(state: RuntimeState | null) { runtimeState = state; } -export function createRuntimeState(overrides) { +export function createRuntimeState(overrides?: PersistedRuntimeState | Record): RuntimeState { return Object.assign({}, DEFAULT_STATE, overrides || {}); } -export function loadState() { +export function loadState(): PersistedRuntimeState | null { try { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return null; @@ -57,8 +59,8 @@ export function loadState() { } } -export function saveState(state) { - const data = { +export function saveState(state: RuntimeState) { + const data: PersistedRuntimeState = { projectName: state.projectName, workflowName: state.workflowName, workflowAsset: state.workflowAsset, diff --git a/src/types/domain.ts b/src/types/domain.ts new file mode 100644 index 0000000..7601d51 --- /dev/null +++ b/src/types/domain.ts @@ -0,0 +1,181 @@ +export type ProjectMedia = "images" | "videos" | "other" | string; + +export interface ProjectListEntry { + project_id: string; + folder?: string; + exists?: boolean; + archived?: boolean; + [key: string]: unknown; +} + +export interface ProjectListResponse { + ok?: boolean; + projects?: ProjectListEntry[]; + [key: string]: unknown; +} + +export interface ProjectSetResponse { + ok?: boolean; + project_id: string; + project_folder: string; + [key: string]: unknown; +} + +export interface ProjectResolveResponse { + ok?: boolean; + project_id?: string; + [key: string]: unknown; +} + +export interface TemplatePreviewResponse { + ok?: boolean; + path?: string; + rel_dir?: string; + prefix?: string; + [key: string]: unknown; +} + +export interface WorkflowSavePayload { + project_id: string; + workflow_name: string; + workflow: unknown; + overwrite?: boolean; + mirror_to_comfy_workflows?: boolean; + use_project_subfolder_in_workflows?: boolean; + asset_folder?: string; +} + +export interface WorkflowSaveResponse { + ok?: boolean; + file?: string; + project_rel_path?: string; + workflow_rel_dir?: string; + comfy_workflow_rel?: string; + mirrored?: boolean; + mirror_error?: string; + [key: string]: unknown; +} + +export interface ModelToolResponse { + ok?: boolean; + items?: unknown[]; + missing?: unknown[]; + results?: unknown[]; + entries?: unknown[]; + candidates?: unknown[]; + recipes?: unknown[]; + job_id?: string; + status?: string; + [key: string]: unknown; +} + +export interface DetectedProject { + mode: "none" | "signature" | "path" | string; + project_folder: string; + project_id: string; + confidence: number; +} + +export interface RuntimeUiCallbacks { + updateStatus?: () => void | Promise; + updateResolve?: () => void | Promise; + updateWorkflowBlock?: () => void | Promise; + updateTargetLabel?: () => void | Promise; + refreshExistingNames?: () => void | Promise; + refreshMissingStatus?: () => void | Promise; + updatePreview?: () => void | Promise; + resetForProjectChange?: () => void; + refreshProjectsList?: (force?: boolean) => void | Promise; + buildWorkflowName?: () => string; + setWorkflowName?: (name: string) => void; +} + +export interface RuntimeState { + projectName: string; + workflowName: string; + workflowAsset: string; + workflowLastBase: string; + workflowNextSuffix: number; + workflowPanelOpen: boolean; + projectId: string; + projectFolder: string; + projectExists: boolean | null; + autoPatch: boolean; + autoPatchNewNodes: boolean; + autoSwitchTrusted: boolean; + autoHookSave: boolean; + kind: string; + media: ProjectMedia; + name: string; + modelSelection: string; + detectedModelTag: string; + useCustomModel: boolean; + customModelText: string; + modelUpper: boolean; + pendingProjectName: string; + pendingSelectProjectId: string; + lastRelDir: string; + lastPrefix: string; + pathTemplate: string; + showMoreModels: boolean; + lastError: string; + detected: DetectedProject | null; + workflowHasSignature: boolean; + workflowChecked: boolean; + isGraphLoading: boolean; + graphLoadToken: number; + graphIsEmpty: boolean; + customModel?: string; + _ui?: RuntimeUiCallbacks; + _emptyGraphPromptToken?: number | null; +} + +export type PersistedRuntimeState = Partial< + Pick< + RuntimeState, + | "projectName" + | "workflowName" + | "workflowAsset" + | "workflowLastBase" + | "workflowNextSuffix" + | "workflowPanelOpen" + | "projectId" + | "projectFolder" + | "autoPatch" + | "autoPatchNewNodes" + | "autoSwitchTrusted" + | "autoHookSave" + | "kind" + | "media" + | "name" + | "modelSelection" + | "detectedModelTag" + | "useCustomModel" + | "customModelText" + | "modelUpper" + | "pendingProjectName" + | "pendingSelectProjectId" + | "lastRelDir" + | "lastPrefix" + | "pathTemplate" + | "showMoreModels" + > +>; + +export interface ComfyWidget { + name?: string; + value?: unknown; + options?: { + values?: unknown[]; + [key: string]: unknown; + }; + [key: string]: unknown; +} + +export interface ComfyNode { + type?: string; + title?: string; + widgets?: ComfyWidget[]; + [key: string]: unknown; +} +