From 20686d774f8d0d3c1541a33e0bddf34a71061e48 Mon Sep 17 00:00:00 2001 From: seveibar Date: Wed, 20 Mar 2024 08:40:44 -0700 Subject: [PATCH] fix: add logging mutex, better handling of undefined props in render --- package-lock.json | 31 +++++++++++++++++++++++++++---- package.json | 4 +++- src/lib/render.ts | 12 ++++++++---- tests/utils/log-layout.ts | 33 +++++++++++++++++++++------------ 4 files changed, 59 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 480d821..af69a9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,10 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^9.0.1", "@semantic-release/release-notes-generator": "^10.0.3", - "@tscircuit/builder": "^1.5.7", + "@tscircuit/builder": "^1.5.8", + "@types/lodash": "^4.17.0", "@types/react-reconciler": "^0.28.0", + "async-mutex": "^0.5.0", "ava": "^4.3.3", "axios": "^1.3.2", "esbuild": "^0.15.18", @@ -643,9 +645,9 @@ } }, "node_modules/@tscircuit/builder": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@tscircuit/builder/-/builder-1.5.7.tgz", - "integrity": "sha512-tUq9oDVQUPxTA93XUsQpTCIqAStHkjijjxgZnoCznz9E/95Tm65ka0o5auIeSPm7qMVBUsmovYvD4JuEFbEc5g==", + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/@tscircuit/builder/-/builder-1.5.9.tgz", + "integrity": "sha512-kwH9wNAshTV1ort91Al9Tas3dAAogDLFPYWwYXuK15fdsyrGYntsNoAJBbGDfRf3rYroq9Enh2qkFqBgghZbvw==", "dev": true, "dependencies": { "@lume/kiwi": "^0.1.0", @@ -701,6 +703,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -975,6 +983,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/async-mutex/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", diff --git a/package.json b/package.json index ccffa1f..88c9f74 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,10 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^9.0.1", "@semantic-release/release-notes-generator": "^10.0.3", - "@tscircuit/builder": "file:.yalc/@tscircuit/builder", + "@tscircuit/builder": "^1.5.8", + "@types/lodash": "^4.17.0", "@types/react-reconciler": "^0.28.0", + "async-mutex": "^0.5.0", "ava": "^4.3.3", "axios": "^1.3.2", "esbuild": "^0.15.18", diff --git a/src/lib/render.ts b/src/lib/render.ts index 9d29662..d74d3f2 100644 --- a/src/lib/render.ts +++ b/src/lib/render.ts @@ -17,6 +17,7 @@ import { BuilderType, } from "./get-builder-for-type" import { getSchematicPropertiesFromProps } from "./get-schematic-properties-from-props" +import _ from "lodash" export type RootContainer = {} @@ -71,10 +72,13 @@ export const hostConfig: HostConfig< } if ("setProps" in instance) { - const propsWithElms = { - ...props, - footprint, - } + const propsWithElms = _.omitBy( + { + ...props, + footprint, + }, + _.isUndefined + ) ;(instance as any).setProps(propsWithElms) return instance } diff --git a/tests/utils/log-layout.ts b/tests/utils/log-layout.ts index d9fc5cc..24f56a8 100644 --- a/tests/utils/log-layout.ts +++ b/tests/utils/log-layout.ts @@ -1,4 +1,5 @@ import defaultAxios from "axios" +import { Mutex } from "async-mutex" const DEBUG_SRV = `https://debug.tscircuit.com` @@ -22,6 +23,8 @@ function findSource(elm: any, sources: Array) { return null } +const request_mutex = new Mutex() + let layout_server_healthy: boolean | null = null export const logLayout = async ( layout_group_name: string, @@ -43,18 +46,24 @@ export const logLayout = async ( } for (const layout_name of ["schematic", "pcb"]) { - await axios.post("/api/soup_group/add_soup", { - soup_group_name: `react-fiber:${layout_group_name}`, - soup_name: layout_name, - username: "tmp", - content: { - elements: objects - .filter((o) => o.type?.includes(layout_name)) - .map((o: any) => ({ - ...o, - source: findSource(o, objects), - })), - }, + await request_mutex.runExclusive(async () => { + await axios + .post("/api/soup_group/add_soup", { + soup_group_name: `react-fiber:${layout_group_name}`, + soup_name: layout_name, + username: "tmp", + content: { + elements: objects + .filter((o) => o.type?.includes(layout_name)) + .map((o: any) => ({ + ...o, + source: findSource(o, objects), + })), + }, + }) + .catch((e) => { + console.warn(`Couldn't log layout: ${layout_group_name}`) + }) }) } }