diff --git a/.github/scripts/check-whitespace.py b/.github/scripts/check-whitespace.py
index 1ed51099cb..e3a7b2f210 100644
--- a/.github/scripts/check-whitespace.py
+++ b/.github/scripts/check-whitespace.py
@@ -297,6 +297,8 @@ PATTERNS = (
"*/CMakeLists.txt",
"*.yml",
"*.yaml",
+ "*.ts",
+ "*.js",
"*.bat",
"*.cmd",
"*.sh",
diff --git a/src/bonsai/bonsai/bim/data/webui/static/js/cost.js b/src/bonsai/bonsai/bim/data/webui/static/js/cost.js
index ca683e157f..b4655ee339 100644
--- a/src/bonsai/bonsai/bim/data/webui/static/js/cost.js
+++ b/src/bonsai/bonsai/bim/data/webui/static/js/cost.js
@@ -268,7 +268,7 @@ function toggleClientList() {
const clientNumbers = $("
")
.addClass("client-detail")
.text(
- `${allDrawings[client.ifc_file].drawings.length} Drawing(s),
+ `${allDrawings[client.ifc_file].drawings.length} Drawing(s),
${allDrawings[client.ifc_file].sheets.length} Sheet(s)`
);
clientDetailsDiv.append(clientNumbers);
diff --git a/src/bonsai/bonsai/bim/data/webui/static/js/drawings.js b/src/bonsai/bonsai/bim/data/webui/static/js/drawings.js
index 6fb929a228..1c4052b6fd 100644
--- a/src/bonsai/bonsai/bim/data/webui/static/js/drawings.js
+++ b/src/bonsai/bonsai/bim/data/webui/static/js/drawings.js
@@ -334,7 +334,7 @@ function toggleClientList() {
const clientNumbers = $("
")
.addClass("client-detail")
.text(
- `${allDrawings[client.ifc_file].drawings.length} Drawing(s),
+ `${allDrawings[client.ifc_file].drawings.length} Drawing(s),
${allDrawings[client.ifc_file].sheets.length} Sheet(s)`
);
clientDetailsDiv.append(clientNumbers);
diff --git a/src/bonsai/bonsai/bim/module/sequence/gantt/index.js b/src/bonsai/bonsai/bim/module/sequence/gantt/index.js
index 768017bdf8..ee7c43ba0d 100644
--- a/src/bonsai/bonsai/bim/module/sequence/gantt/index.js
+++ b/src/bonsai/bonsai/bim/module/sequence/gantt/index.js
@@ -75,7 +75,7 @@ function setupPage(workScheduleData){
g.setTotalHeight("");
g.Draw();
var values = document.getElementById("print_page_size").value.split(",")
- let css =
+ let css =
"@media print {\n @page {\n size: " + values[0] + "mm " + values[1] + "mm;\n }\n";
g.printChart(values[0], values[1], css);
g.setTotalHeight(900);
@@ -109,4 +109,4 @@ function setupPage(workScheduleData){
let creation_date_string = document.createTextNode("Created: " + new Date(workScheduleData.CreationDate).toLocaleDateString());
creation_date.appendChild(creation_date_string);
document.getElementById("schedule-header").appendChild(creation_date);
-}
\ No newline at end of file
+}
diff --git a/src/ifcchat/app.js b/src/ifcchat/app.js
index cf8723f46f..881ed2f727 100644
--- a/src/ifcchat/app.js
+++ b/src/ifcchat/app.js
@@ -99,29 +99,29 @@ const PROVIDERS = {
baseUrlPlaceholder: "https://openrouter.ai/api/v1",
baseUrlDefault: "https://openrouter.ai/api/v1",
models: [
- {
+ {
value: "openai/gpt-oss-20b",
- label: "gpt-oss-20b"
+ label: "gpt-oss-20b"
},
- {
+ {
value: "openai/gpt-oss-120b",
- label: "gpt-oss-120b"
+ label: "gpt-oss-120b"
},
- {
+ {
value: "mistralai/mistral-small-3.2-24b-instruct",
- label: "mistral-small-3.2"
+ label: "mistral-small-3.2"
},
- {
- value: "openai/gpt-4.1",
- label: "gpt-4.1"
+ {
+ value: "openai/gpt-4.1",
+ label: "gpt-4.1"
},
- {
- value: "anthropic/claude-sonnet-4-5",
- label: "claude-sonnet-4-5"
+ {
+ value: "anthropic/claude-sonnet-4-5",
+ label: "claude-sonnet-4-5"
},
- {
- value: "google/gemini-2.5-pro-preview",
- label: "gemini-2.5-pro"
+ {
+ value: "google/gemini-2.5-pro-preview",
+ label: "gemini-2.5-pro"
},
],
},
diff --git a/src/ifcchat/ifc_worker.js b/src/ifcchat/ifc_worker.js
index 06d6ecdf70..9e71f348ae 100644
--- a/src/ifcchat/ifc_worker.js
+++ b/src/ifcchat/ifc_worker.js
@@ -25,10 +25,10 @@ async function ensurePyodide() {
await pyodide.loadPackage("numpy");
await pyodide.loadPackage("shapely");
await pyodide.loadPackage("typing-extensions");
-
+
const micropip = pyodide.pyimport("micropip");
micropip.install("python-dateutil")
-
+
const wheelUrl = "https://ifcopenshell.github.io/wasm-wheels/ifcopenshell-0.8.5-cp313-cp313-pyodide_2025_0_wasm32.whl";
await micropip.install(wheelUrl);
@@ -98,4 +98,4 @@ self.onmessage = async (ev) => {
} catch (e) {
fail(id, e);
}
-};
\ No newline at end of file
+};
diff --git a/src/ifctester/webapp/src/lib/components/ui/dialog/index.ts b/src/ifctester/webapp/src/lib/components/ui/dialog/index.ts
index 036ba9420a..dce1d9dcd7 100644
--- a/src/ifctester/webapp/src/lib/components/ui/dialog/index.ts
+++ b/src/ifctester/webapp/src/lib/components/ui/dialog/index.ts
@@ -34,4 +34,4 @@ export {
Content as DialogContent,
Description as DialogDescription,
Close as DialogClose,
-};
\ No newline at end of file
+};
diff --git a/src/ifctester/webapp/src/lib/components/ui/dropdown-menu/index.ts b/src/ifctester/webapp/src/lib/components/ui/dropdown-menu/index.ts
index 5d3f473faf..1cf9f701ce 100644
--- a/src/ifctester/webapp/src/lib/components/ui/dropdown-menu/index.ts
+++ b/src/ifctester/webapp/src/lib/components/ui/dropdown-menu/index.ts
@@ -46,4 +46,4 @@ export {
SubContent,
SubTrigger,
Trigger,
-};
\ No newline at end of file
+};
diff --git a/src/ifctester/webapp/src/lib/components/ui/menubar/index.ts b/src/ifctester/webapp/src/lib/components/ui/menubar/index.ts
index 95c2fa4abf..57a6cfbfba 100644
--- a/src/ifctester/webapp/src/lib/components/ui/menubar/index.ts
+++ b/src/ifctester/webapp/src/lib/components/ui/menubar/index.ts
@@ -51,4 +51,4 @@ export {
RadioGroup as MenubarRadioGroup,
Label as MenubarLabel,
GroupHeading as MenubarGroupHeading,
-};
\ No newline at end of file
+};
diff --git a/src/ifctester/webapp/src/lib/components/ui/sonner/index.ts b/src/ifctester/webapp/src/lib/components/ui/sonner/index.ts
index 1f016b4ece..1ad9f4a2ab 100644
--- a/src/ifctester/webapp/src/lib/components/ui/sonner/index.ts
+++ b/src/ifctester/webapp/src/lib/components/ui/sonner/index.ts
@@ -1 +1 @@
-export { default as Toaster } from "./sonner.svelte";
\ No newline at end of file
+export { default as Toaster } from "./sonner.svelte";
diff --git a/src/ifctester/webapp/src/lib/components/ui/tooltip/index.ts b/src/ifctester/webapp/src/lib/components/ui/tooltip/index.ts
index 0810f5df1f..313a7f069c 100644
--- a/src/ifctester/webapp/src/lib/components/ui/tooltip/index.ts
+++ b/src/ifctester/webapp/src/lib/components/ui/tooltip/index.ts
@@ -18,4 +18,4 @@ export {
Trigger as TooltipTrigger,
Provider as TooltipProvider,
Portal as TooltipPortal,
-};
\ No newline at end of file
+};
diff --git a/src/ifctester/webapp/src/modules/api/api.svelte.ts b/src/ifctester/webapp/src/modules/api/api.svelte.ts
index b4ebe01fdc..30acdcdb7e 100644
--- a/src/ifctester/webapp/src/modules/api/api.svelte.ts
+++ b/src/ifctester/webapp/src/modules/api/api.svelte.ts
@@ -49,7 +49,7 @@ wasm.init().then(async () => {
export async function preloadAutocompletions() {
try {
const schemas = ["IFC2X3", "IFC4"]; // TODO: IFC4X3 is excluded for now because of an error
-
+
// Entity classes
const entitySets = await Promise.all(
schemas.map(schema => wasm.getAllEntityClasses(schema))
@@ -60,7 +60,7 @@ export async function preloadAutocompletions() {
allEntities.add(entity.toUpperCase());
}
}
-
+
// Data types
const dataTypeSets = await Promise.all(
schemas.map(schema => wasm.getAllDataTypes(schema))
@@ -71,20 +71,20 @@ export async function preloadAutocompletions() {
allDataTypes.add(dataType);
}
}
-
+
// Material categories and Classification systems
const [materialCategories, classificationSystems] = await Promise.all([
wasm.getMaterialCategories(),
wasm.getStandardClassificationSystems()
]) as [string[], AutocompletionState["classificationSystems"]];
-
+
// Cache autocompletions
Autocompletions.entityClasses = Array.from(allEntities).sort();
Autocompletions.materialCategories = materialCategories;
Autocompletions.classificationSystems = classificationSystems;
Autocompletions.dataTypes = Array.from(allDataTypes).sort();
Autocompletions.isLoaded = true;
-
+
console.log('Autocompletions preloaded');
} catch (error) {
console.error('Failed to preload autocompletions:', error);
@@ -122,13 +122,13 @@ export function getDataTypes() {
export async function loadIfc(file: File): Promise {
try {
IFCModels.isLoading = true;
-
+
const arrayBuffer = await file.arrayBuffer();
const uint8Array = new Uint8Array(arrayBuffer);
-
+
// Load IFC model
const ifcId = await wasm.loadIfc(Array.from(uint8Array)) as string;
-
+
// Add to models list
const model: IfcModel = {
id: ifcId,
@@ -137,7 +137,7 @@ export async function loadIfc(file: File): Promise {
loadedAt: new Date()
};
IFCModels.models = [...IFCModels.models, model];
-
+
console.log(`IFC model "${file.name}" loaded with ID: ${ifcId}`);
return model;
} catch (error) {
@@ -152,10 +152,10 @@ export async function unloadIfc(modelId: string) {
try {
// Unload model
await wasm.unloadIfc(modelId);
-
+
// Remove from models list
IFCModels.models = IFCModels.models.filter(model => model.id !== modelId);
-
+
console.log(`IFC model with ID ${modelId} unloaded`);
} catch (error) {
console.error('Failed to unload IFC model:', error);
@@ -173,10 +173,10 @@ export async function auditIfc(modelId: string, idsData: string | Uint8Array | A
} else {
idsBytes = idsData;
}
-
+
// Run audit
const auditResult = await wasm.auditIfc(modelId, idsBytes) as { json: AuditReportData; html: string };
-
+
console.log(`Audit completed for model ${modelId}`);
return auditResult;
} catch (error) {
@@ -194,7 +194,7 @@ export async function openIfc() {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.ifc';
-
+
fileInput.onchange = async (event) => {
const target = event.target as HTMLInputElement | null;
const file = target?.files?.[0];
@@ -202,13 +202,13 @@ export async function openIfc() {
reject(new Error('No file selected'));
return;
}
-
+
// Check if it's an IFC file
if (!file.name.toLowerCase().endsWith('.ifc')) {
reject(new Error('Please select a valid IFC file (.ifc)'));
return;
}
-
+
try {
await loadIfc(file);
resolve();
@@ -216,7 +216,7 @@ export async function openIfc() {
reject(error);
}
};
-
+
fileInput.onerror = () => reject(new Error('Failed to open file picker'));
fileInput.click();
});
@@ -234,7 +234,7 @@ export function createAuditReport(
): AuditReport | undefined {
const model = getIfcById(modelId);
if (!model) return;
-
+
const auditReport: AuditReport = {
id: id(),
modelId: modelId,
@@ -244,7 +244,7 @@ export function createAuditReport(
data: auditData,
htmlReport: htmlReport
};
-
+
IFCModels.audits.unshift(auditReport);
return auditReport;
}
@@ -266,7 +266,7 @@ export async function downloadAuditReport(auditId: string) {
if (!audit || !audit.htmlReport) {
throw new Error('HTML report not available for this audit');
}
-
+
// Get IDS document title for filename
let filename = 'report.html';
if (audit.document && IDS.Module.documents[audit.document]) {
@@ -274,15 +274,15 @@ export async function downloadAuditReport(auditId: string) {
const title = doc.info?.title || 'untitled';
filename = `report_${title.replace(/[^a-z0-9]/gi, '_').toLowerCase()}.html`;
}
-
+
const blob = new Blob([audit.htmlReport], { type: 'text/html' });
const url = URL.createObjectURL(blob);
-
+
const link = document.createElement('a');
link.href = url;
link.download = filename;
link.style.display = 'none';
-
+
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
@@ -293,47 +293,47 @@ export async function runAudit() {
if (IFCModels.models.length === 0) {
throw new Error('Please load an IFC model first');
}
-
+
if (!IDS.Module.activeDocument) {
throw new Error('Please create or open an IDS document first');
}
-
+
// Clear previous audit reports
IFCModels.audits = [];
-
+
// Get the active IDS document XML
const idsXml = await IDS.exportActiveDocument();
if (!idsXml) {
throw new Error('Failed to export IDS document');
}
-
+
// Run audit on all loaded models
let firstAuditReport: AuditReport | undefined;
for (const model of IFCModels.models) {
const result = await auditIfc(model.id, idsXml);
-
+
// Extract JSON and HTML reports from the result
const jsonData = result.json || null;
const htmlReport = result.html || null;
-
+
if (!jsonData) {
continue;
}
const auditReport = createAuditReport(model.id, IDS.Module.activeDocument as string, jsonData, htmlReport);
-
+
// Store the first audit report to open in viewer
if (!firstAuditReport) {
firstAuditReport = auditReport;
}
}
-
+
// Switch to viewer mode and set the first audit report as active
if (firstAuditReport && IDS.Module.activeDocument) {
- IDS.setDocumentState(IDS.Module.activeDocument, {
+ IDS.setDocumentState(IDS.Module.activeDocument, {
viewMode: 'viewer',
auditReport: firstAuditReport.id
});
}
-
+
return firstAuditReport;
}
diff --git a/src/ifctester/webapp/src/modules/api/bonsai.svelte.ts b/src/ifctester/webapp/src/modules/api/bonsai.svelte.ts
index 5ed9b562f4..07552a9f27 100644
--- a/src/ifctester/webapp/src/modules/api/bonsai.svelte.ts
+++ b/src/ifctester/webapp/src/modules/api/bonsai.svelte.ts
@@ -59,33 +59,33 @@ export const connect = () => new Promise((resolve, reject) => {
resolve();
return;
}
-
+
try {
Bonsai.socket = io(`ws://127.0.0.1:${Bonsai.port}/ifctester`, {
transports: ['websocket'],
reconnection: false,
timeout: 5000
});
-
+
Bonsai.socket.on('connect', () => {
Bonsai.connected = true;
success('Connected to Bonsai');
resolve();
});
-
+
Bonsai.socket.on('disconnect', () => {
Bonsai.connected = false;
});
-
+
Bonsai.socket.on('connect_error', (err: Error) => {
Bonsai.connected = false;
error(`Failed to connect to Bonsai: ${err.message}`);
reject(err);
});
-
+
Bonsai.socket.on('audit_result', handleAuditResult);
Bonsai.socket.on('error', handleAuditError);
-
+
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
error(`Failed to connect to Bonsai: ${message}`);
@@ -113,35 +113,35 @@ export const runAudit = async () => {
if (!Bonsai.socket || !Bonsai.connected || !IDS.Module.activeDocument) {
return null;
}
-
+
try {
Bonsai.auditing = true;
-
+
const activeDoc = IDS.Module.documents[IDS.Module.activeDocument];
if (!activeDoc) throw new Error('No active IDS document');
-
+
// Convert IDS document to XML string
const idsXml = await IDS.exportActiveDocument();
if (!idsXml) {
throw new Error('Failed to export IDS document');
}
-
+
const requestId = id();
const socket = Bonsai.socket;
if (!socket) {
throw new Error('Bonsai socket not connected');
}
-
+
return new Promise((resolve, reject) => {
// Store request with resolve/reject functions
pendingAudits.set(requestId, { resolve, reject });
-
+
socket.emit('audit_ids', {
id: requestId,
ids: idsXml
});
});
-
+
} catch (err) {
Bonsai.auditing = false;
const message = err instanceof Error ? err.message : String(err);
@@ -156,19 +156,19 @@ export const runAudit = async () => {
*/
const handleAuditResult = (data: AuditResultPayload) => {
if (!data.id || !data.json_report) return;
-
+
const pendingAudit = pendingAudits.get(data.id);
if (!pendingAudit) {
console.warn('[Bonsai] Received response for unknown audit ID:', data.id);
return;
}
-
+
pendingAudits.delete(data.id);
const { resolve } = pendingAudit;
-
+
try {
const reportData = JSON.parse(data.json_report) as AuditReportData;
-
+
const auditReport: AuditReport = {
id: data.id,
modelId: `bonsai:${data.id}`,
@@ -178,16 +178,16 @@ const handleAuditResult = (data: AuditResultPayload) => {
data: reportData,
htmlReport: data.html_report
};
-
+
// Store audit report
IFCModels.audits.unshift(auditReport);
-
+
Bonsai.auditing = false;
success('Audit completed (Bonsai)');
-
+
// Resolve promise with audit ID
resolve(data.id);
-
+
} catch (err) {
Bonsai.auditing = false;
const message = err instanceof Error ? err.message : String(err);
@@ -202,16 +202,16 @@ const handleAuditResult = (data: AuditResultPayload) => {
*/
const handleAuditError = (data: AuditErrorPayload) => {
if (!data.id) return;
-
+
const pendingAudit = pendingAudits.get(data.id);
if (!pendingAudit) {
console.warn('[Bonsai] Received error for unknown audit ID:', data.id);
return;
}
-
+
pendingAudits.delete(data.id);
const { resolve } = pendingAudit;
-
+
Bonsai.auditing = false;
error(`Audit failed (Bonsai): ${data.error ?? "Unknown error"}`);
resolve(null);
diff --git a/src/ifctester/webapp/src/modules/api/ids.svelte.ts b/src/ifctester/webapp/src/modules/api/ids.svelte.ts
index 3035113654..e5da02fb74 100644
--- a/src/ifctester/webapp/src/modules/api/ids.svelte.ts
+++ b/src/ifctester/webapp/src/modules/api/ids.svelte.ts
@@ -55,7 +55,7 @@ export async function createDocument() {
export async function deleteDocument(id: string) {
// Clear any audit reports generated using this IDS document
clearIdsAuditReports(id);
-
+
delete Module.documents[id];
delete Module.states[id];
@@ -73,18 +73,18 @@ export async function deleteDocument(id: string) {
// We need this because the backend exports with xs: prefix, yet expects a dict without prefixes.
function normalizeIdsDict(obj: unknown): unknown {
if (typeof obj !== 'object' || obj === null) return obj;
-
+
if (Array.isArray(obj)) {
return obj.map(normalizeIdsDict);
}
-
+
const result: Record = {};
for (const [key, value] of Object.entries(obj)) {
if (key === 'xs:restriction' && Array.isArray(value) && value.length > 0) {
// Convert xs:restriction array to restriction object
const restriction = value[0] as Record;
const newRestriction: Record = {};
-
+
for (const [restrictionKey, restrictionValue] of Object.entries(restriction)) {
if (restrictionKey.startsWith('xs:')) {
// Remove xs: prefix from keys
@@ -94,13 +94,13 @@ function normalizeIdsDict(obj: unknown): unknown {
newRestriction[restrictionKey] = restrictionValue;
}
}
-
+
result.restriction = newRestriction;
} else {
result[key] = normalizeIdsDict(value);
}
}
-
+
return result;
}
@@ -111,7 +111,7 @@ export async function openDocument() {
};
fileInput.type = 'file';
fileInput.accept = '.ids,.xml';
-
+
fileInput.onchange = async (event) => {
const target = event.target as HTMLInputElement | null;
const file = target?.files?.[0];
@@ -119,7 +119,7 @@ export async function openDocument() {
reject(new Error('No file selected'));
return;
}
-
+
try {
const reader = new FileReader();
reader.onload = async (e) => {
@@ -130,10 +130,10 @@ export async function openDocument() {
// Add document to list and set as active
Module.documents[docId] = doc;
-
+
// Initialize document state and switch to viewer mode
setDocumentState(docId, { viewMode: 'viewer' });
-
+
Module.activeDocument = docId;
resolve();
@@ -147,11 +147,11 @@ export async function openDocument() {
reject(error);
}
};
-
+
fileInput.oncancel = () => {
reject(new Error('File selection cancelled'));
};
-
+
// Trigger the file dialog
fileInput.click();
});
@@ -175,7 +175,7 @@ export async function exportDocument(docId: string) {
}
const xmlString = await wasm.exportIDS(doc as Record) as string;
-
+
// Create and download file
const blob = new Blob([xmlString], { type: 'application/xml' });
const url = URL.createObjectURL(blob);
@@ -290,7 +290,7 @@ export function stringifyFacet(
const usage = getSpecUsage(spec);
const descriptions: string[] = [];
-
+
// Entity facet
if (facetType === "entity") {
if (clauseType === "applicability") {
@@ -377,13 +377,13 @@ export function stringifyFacet(
if (clauseType === "requirements" && "@cardinality" in facet && facet["@cardinality"] === "prohibited") {
isProhibited = !isProhibited;
}
-
+
if (isProhibited)
combined = combined.replace("Shall", "Shall not").replace("shall", "shall not");
if (clauseType === "requirements" && "@cardinality" in facet && facet["@cardinality"] === "optional")
combined = combined.replace("Shall", "May").replace("shall", "may");
-
+
return renderFacetString(combined);
}
@@ -398,27 +398,27 @@ function stringifyValue(value?: FacetValue) {
// Converts restriction objects to human-readable strings
function stringifyRestriction(restriction: Restriction) {
if (!restriction) return "";
-
+
// Handle enumeration
if (restriction.enumeration && Array.isArray(restriction.enumeration)) {
const values = restriction.enumeration.map(item => `**${item['@value']}**` || '').filter(v => v);
return values.length > 0 ? `is one of ${values.join(", ")}` : "has enumeration restriction";
}
-
+
// Handle pattern
if (restriction.pattern && Array.isArray(restriction.pattern) && restriction.pattern.length > 0) {
const pattern = `\`${restriction.pattern[0]['@value']}\`` || '';
return pattern ? `matches pattern ${pattern}` : "has pattern restriction";
}
-
+
// Handle length restrictions
if (restriction.length && Array.isArray(restriction.length) && restriction.length.length > 0) {
const length = `**${restriction.length[0]['@value']}**` || '';
return length ? `has length ${length}` : "has length restriction";
}
-
+
// Handle range restrictions
- if (restriction.minInclusive || restriction.maxInclusive ||
+ if (restriction.minInclusive || restriction.maxInclusive ||
restriction.minExclusive || restriction.maxExclusive) {
const parts = [];
if (restriction.minInclusive && restriction.minInclusive.length > 0) {
@@ -435,7 +435,7 @@ function stringifyRestriction(restriction: Restriction) {
}
return parts.length > 0 ? `is in range ${parts.join(", ")}` : "has range restriction";
}
-
+
// Handle length range restrictions
if (restriction.minLength || restriction.maxLength) {
const parts = [];
@@ -447,16 +447,16 @@ function stringifyRestriction(restriction: Restriction) {
}
return parts.length > 0 ? `has ${parts.join(", ")}` : "has length range restriction";
}
-
+
return "has complex restriction";
}
function renderFacetString(text: string): string {
// Convert **text** to text
const withStrong = text.replace(/\*\*([^*]+)\*\*/g, '$1');
-
+
// Convert `text` to text
const withCode = withStrong.replace(/`([^`]+)`/g, '$1');
-
+
return withCode;
}
diff --git a/src/ifctester/webapp/src/modules/wasm/index.ts b/src/ifctester/webapp/src/modules/wasm/index.ts
index d7c4f1e40a..07cb62df24 100644
--- a/src/ifctester/webapp/src/modules/wasm/index.ts
+++ b/src/ifctester/webapp/src/modules/wasm/index.ts
@@ -75,7 +75,7 @@ class WASMModule extends EventEmitter {
return new Promise((resolve, reject) => {
this.pendingMessages.set(id, { resolve, reject });
-
+
worker.postMessage({
type,
payload,
@@ -86,7 +86,7 @@ class WASMModule extends EventEmitter {
_handleWorkerMessage({ type, payload, id }: WorkerResponse) {
const pendingMessage = this.pendingMessages.get(id);
-
+
if (!pendingMessage) {
console.warn('[WASM] Received response for unknown message ID:', id);
return;
diff --git a/src/ifctester/webapp/src/modules/wasm/worker/ids.ts b/src/ifctester/webapp/src/modules/wasm/worker/ids.ts
index ca34b21d75..6c8729ddea 100644
--- a/src/ifctester/webapp/src/modules/wasm/worker/ids.ts
+++ b/src/ifctester/webapp/src/modules/wasm/worker/ids.ts
@@ -16,7 +16,7 @@ let PartOf: any;
export async function init(pdide: any) {
pyodide = pdide;
-
+
await pyodide.loadPackagesFromImports(`
import ifctester.ids
import ifctester.facet
@@ -25,7 +25,7 @@ export async function init(pdide: any) {
// Import the core IDS classes
Ids = pyodide.pyimport("ifctester.ids").Ids;
Specification = pyodide.pyimport("ifctester.ids").Specification;
-
+
// Import facet classes
Entity = pyodide.pyimport("ifctester.facet").Entity;
Attribute = pyodide.pyimport("ifctester.facet").Attribute;
@@ -56,13 +56,13 @@ export function validateIDS(idsObj: Record): boolean {
const ids_raw = _idsToInstance(idsObj)
const tempFilename = `temp_${Date.now()}.xml`;
const isValid = ids_raw.to_xml(tempFilename); // to_xml validates the XML as well, as far as I understand
-
+
pyodide.runPython(`
import os
if os.path.exists("${tempFilename}"):
os.remove("${tempFilename}")
`);
-
+
return isValid;
}
diff --git a/src/ifctester/webapp/src/pages/index.ts b/src/ifctester/webapp/src/pages/index.ts
index 3797fc8e53..032e4ecaf0 100644
--- a/src/ifctester/webapp/src/pages/index.ts
+++ b/src/ifctester/webapp/src/pages/index.ts
@@ -3,4 +3,4 @@
*/
export {default as Home} from './Home/index.svelte';
-export {default as NotFound} from './NotFound/index.svelte';
\ No newline at end of file
+export {default as NotFound} from './NotFound/index.svelte';
diff --git a/src/ifctester/webapp/src/routes.ts b/src/ifctester/webapp/src/routes.ts
index 536cf45714..0d3d7b8ed4 100644
--- a/src/ifctester/webapp/src/routes.ts
+++ b/src/ifctester/webapp/src/routes.ts
@@ -5,4 +5,4 @@ const routes = {
'*': NotFound,
};
-export default routes;
\ No newline at end of file
+export default routes;