// Offline checks: production components render, routes are focused, layer indices stay real. // These do not replace the browser layout and interaction suites. process.env.NODE_ENV = 'production'; const assert = require('node:assert/strict'); const { build } = require('esbuild'); const { readFile } = require('node:fs/promises'); const React = require('react'); const { renderToStaticMarkup } = require('react-dom/server'); async function compile(contents) { const result = await build({ stdin: { contents, loader: 'jsx', resolveDir: __dirname }, bundle: true, write: false, platform: 'node', format: 'cjs', packages: 'external' }); const module = { exports: {} }; new Function('require', 'module', 'exports', result.outputFiles[0].text)(require, module, module.exports); return module.exports; } (async () => { const { chooseInspectionLayer } = await import('./frontend/flow-utils.mjs'); const forty = Array.from({ length: 40 }, (_, i) => i); assert.equal(chooseInspectionLayer(forty), 31); for (const previous of [0, 12, 39]) assert.equal(chooseInspectionLayer(forty, previous), previous); assert.equal(chooseInspectionLayer([0, 1, 2, 3], 31), 3); assert.equal(chooseInspectionLayer([0, 5, 39]), 39); assert.equal(chooseInspectionLayer([0]), 0); assert.equal(chooseInspectionLayer([]), null); // An absent or invalid previous selection must never turn into an unsupported layer. for (const available of [forty, [0, 1], [2, 5], [31], [39]]) { for (const previous of [null, 0, 31, 39, 400]) assert(available.includes(chooseInspectionLayer(available, previous))); } // Load Carbon in its server environment before supplying the page's width. require('@carbon/react'); global.window = { innerWidth: 1280 }; for (const file of ['index.html', 'how-it-works/index.html']) { const html = await readFile(`frontend/${file}`, 'utf8'); const source = html.match(/', showSelection: true, })); assert(custom.includes('Uploaded example')); assert(!custom.includes('Expected answer:')); assert(!custom.includes('