@kizenapps/cli 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/electron/main.js +9 -8
  2. package/dist/electron/main.js.map +1 -1
  3. package/dist/index.js +579 -114
  4. package/dist/index.js.map +1 -1
  5. package/dist/nwjs/shell/icon.png +0 -0
  6. package/dist/nwjs/shell/index.html +200 -0
  7. package/dist/nwjs/shell/package.json +16 -0
  8. package/dist/viewer/assets/fa-core-DAYjf9Yn.js +558 -0
  9. package/dist/viewer/assets/fa-core-Ff8SZmm_.js +558 -0
  10. package/dist/viewer/assets/index-47Vh9MH0.js +17 -0
  11. package/dist/viewer/assets/index-6uunWX8M.js +17 -0
  12. package/dist/viewer/assets/index-B48OpZHg.js +17 -0
  13. package/dist/viewer/assets/index-BFfw7eD7.js +17 -0
  14. package/dist/viewer/assets/index-BFyUUb06.js +17 -0
  15. package/dist/viewer/assets/index-BL-Yu7Bf.js +17 -0
  16. package/dist/viewer/assets/index-BUmv8vz7.js +17 -0
  17. package/dist/viewer/assets/index-BZ4HmEz8.js +17 -0
  18. package/dist/viewer/assets/index-BZIXccTd.js +17 -0
  19. package/dist/viewer/assets/index-Bk9hnfnO.js +17 -0
  20. package/dist/viewer/assets/index-C0SIHm9A.js +17 -0
  21. package/dist/viewer/assets/index-CDd-WK6Y.js +17 -0
  22. package/dist/viewer/assets/index-CDxQqP40.js +17 -0
  23. package/dist/viewer/assets/{index-C_6izRRh.js → index-CGJzvpL5.js} +7 -7
  24. package/dist/viewer/assets/index-CIarX3Lt.js +17 -0
  25. package/dist/viewer/assets/index-CIfVP45E.js +17 -0
  26. package/dist/viewer/assets/index-CJeb7uFu.css +2 -0
  27. package/dist/viewer/assets/index-CbwLb2S_.js +17 -0
  28. package/dist/viewer/assets/index-CsfWgoID.js +17 -0
  29. package/dist/viewer/assets/index-CvWmkIY5.js +17 -0
  30. package/dist/viewer/assets/index-Cy-weKfG.css +2 -0
  31. package/dist/viewer/assets/index-Cym12l2M.js +17 -0
  32. package/dist/viewer/assets/index-D0W0oANg.js +17 -0
  33. package/dist/viewer/assets/index-DCPtqd3W.js +17 -0
  34. package/dist/viewer/assets/index-DF_zYdLw.js +17 -0
  35. package/dist/viewer/assets/index-DGqxQcUx.js +17 -0
  36. package/dist/viewer/assets/index-DK0OVb7V.js +17 -0
  37. package/dist/viewer/assets/index-DKjVFdzw.js +17 -0
  38. package/dist/viewer/assets/index-DLhj0I_2.js +17 -0
  39. package/dist/viewer/assets/index-DPS_ZjbM.js +17 -0
  40. package/dist/viewer/assets/index-DSbHkhcS.js +17 -0
  41. package/dist/viewer/assets/index-DTbmNtEU.js +17 -0
  42. package/dist/viewer/assets/index-DUYd6RpI.js +17 -0
  43. package/dist/viewer/assets/index-DZwYe1wZ.css +2 -0
  44. package/dist/viewer/assets/index-DkRokbYc.js +17 -0
  45. package/dist/viewer/assets/index-DtOWzkR5.js +17 -0
  46. package/dist/viewer/assets/index-DuvXujkm.js +17 -0
  47. package/dist/viewer/assets/index-Dv0mX-oM.js +17 -0
  48. package/dist/viewer/assets/index-DyXisBY9.css +2 -0
  49. package/dist/viewer/assets/index-Nm1xKWTO.js +17 -0
  50. package/dist/viewer/assets/index-ZBdAq6dF.js +17 -0
  51. package/dist/viewer/assets/index-ZOxL_JJZ.js +17 -0
  52. package/dist/viewer/assets/index-kMMOwjlY.js +17 -0
  53. package/dist/viewer/assets/{index--m1PKX6N.js → index-ov2oU6RI.js} +7 -7
  54. package/dist/viewer/assets/index-uF6u0kT8.js +17 -0
  55. package/dist/viewer/assets/index-xbDHMSaa.css +2 -0
  56. package/dist/viewer/assets/react-D7PmSb6e.js +9 -0
  57. package/dist/viewer/assets/react-DIjeYlvh.js +9 -0
  58. package/dist/viewer/index.html +4 -4
  59. package/package.json +4 -4
  60. package/dist/viewer/assets/index-2OcBnmZB.js +0 -17
  61. package/dist/viewer/assets/index-7ah1RuPy.js +0 -17
  62. package/dist/viewer/assets/index-B3gNsKTt.js +0 -17
  63. package/dist/viewer/assets/index-B40AtXqk.js +0 -17
  64. package/dist/viewer/assets/index-B4ikC-wc.js +0 -17
  65. package/dist/viewer/assets/index-BKOfPpLS.js +0 -17
  66. package/dist/viewer/assets/index-BM3JrC-1.js +0 -17
  67. package/dist/viewer/assets/index-BUnK11-F.js +0 -17
  68. package/dist/viewer/assets/index-Bc7IZVr6.js +0 -17
  69. package/dist/viewer/assets/index-C1KzcpVj.js +0 -17
  70. package/dist/viewer/assets/index-CBBwr2o_.js +0 -17
  71. package/dist/viewer/assets/index-CHtXWYIY.js +0 -17
  72. package/dist/viewer/assets/index-CN9NvJkQ.js +0 -17
  73. package/dist/viewer/assets/index-CNKPBxhv.js +0 -17
  74. package/dist/viewer/assets/index-CgzK6zig.js +0 -17
  75. package/dist/viewer/assets/index-Cw2cxYy2.js +0 -17
  76. package/dist/viewer/assets/index-D06uhGtQ.js +0 -17
  77. package/dist/viewer/assets/index-DAHWT-g0.js +0 -17
  78. package/dist/viewer/assets/index-DAxJgHat.js +0 -17
  79. package/dist/viewer/assets/index-DF_geUaW.js +0 -17
  80. package/dist/viewer/assets/index-DUgUEouL.css +0 -2
  81. package/dist/viewer/assets/index-DcGGXuA3.js +0 -17
  82. package/dist/viewer/assets/index-DlVmY-nR.js +0 -17
  83. package/dist/viewer/assets/index-FZw9Ev_R.js +0 -17
  84. package/dist/viewer/assets/index-M1Obm_99.js +0 -17
  85. package/dist/viewer/assets/index-_kM1Ri7v.js +0 -17
  86. package/dist/viewer/assets/index-aTt_sTlu.js +0 -17
  87. package/dist/viewer/assets/index-vYFGGFc2.js +0 -17
@@ -1,5 +1,5 @@
1
1
  // src/electron/main.ts
2
- import { app, BrowserWindow, session, nativeImage, Menu, ipcMain } from "electron";
2
+ import { app, BrowserWindow, session, nativeImage, Menu, ipcMain, screen } from "electron";
3
3
  import { join, dirname } from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  var args = process.argv.slice(2);
@@ -79,9 +79,10 @@ void app.whenReady().then(() => {
79
79
  if (process.platform === "darwin" && !icon.isEmpty()) {
80
80
  app.dock?.setIcon(icon);
81
81
  }
82
+ const { width, height } = screen.getPrimaryDisplay().workAreaSize;
82
83
  const win = new BrowserWindow({
83
- width: 1920,
84
- height: 1080,
84
+ width,
85
+ height,
85
86
  title: "Kizen App Builder",
86
87
  icon,
87
88
  webPreferences: {
@@ -186,11 +187,11 @@ void app.whenReady().then(() => {
186
187
  return;
187
188
  }
188
189
  const level = type === "warning" ? "warn" : ["log", "warn", "error", "info"].includes(type) ? type : "log";
189
- void Promise.all(args2.map((arg) => serializeArgAsync(arg, sessionId))).then(
190
- (serializedArgs) => {
191
- win.webContents.send("console-message", { level, args: serializedArgs });
192
- }
193
- );
190
+ void Promise.all(
191
+ args2.map((arg) => serializeArgAsync(arg, sessionId))
192
+ ).then((serializedArgs) => {
193
+ win.webContents.send("console-message", { level, args: serializedArgs });
194
+ });
194
195
  });
195
196
  void win.loadURL(`http://localhost:${String(port)}`);
196
197
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/electron/main.ts"],"sourcesContent":["import { app, BrowserWindow, session, nativeImage, Menu, ipcMain } from 'electron';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst args = process.argv.slice(2);\nconst port = parseInt(args.find((a) => a.startsWith('--port='))?.slice(7) ?? '3121', 10);\nconst userDataDir = args.find((a) => a.startsWith('--user-data-dir='))?.slice(16);\n\nif (userDataDir) {\n app.setPath('userData', userDataDir);\n}\n\napp.setName('Kizen App Builder');\n\nconst CSP_HEADERS = new Set([\n 'content-security-policy',\n 'content-security-policy-report-only',\n 'x-frame-options',\n]);\n\nconst KIZEN_DOMAINS = ['kizen.dev', 'kizen.com'];\n\nfunction isKizenUrl(url: string): boolean {\n try {\n const { hostname } = new URL(url);\n return KIZEN_DOMAINS.some((d) => hostname === d || hostname.endsWith('.' + d));\n } catch {\n return false;\n }\n}\n\nfunction setupSession(): void {\n // Strip CSP headers and fix SameSite cookies on Kizen responses.\n session.defaultSession.webRequest.onHeadersReceived((details, callback) => {\n const headers: Record<string, string[]> = {};\n\n for (const [key, value] of Object.entries(details.responseHeaders ?? {})) {\n if (!CSP_HEADERS.has(key.toLowerCase())) {\n headers[key] = value;\n }\n }\n\n if (isKizenUrl(details.url) && headers['set-cookie']) {\n headers['set-cookie'] = headers['set-cookie'].map((cookie) => {\n if (!/SameSite=/i.test(cookie)) {\n return cookie + '; SameSite=None; Secure';\n }\n\n return cookie.replace(/SameSite=\\w+/i, 'SameSite=None');\n });\n }\n\n callback({ responseHeaders: headers });\n });\n\n // Periodically re-patch existing Kizen cookies that arrived without SameSite=None.\n // Needed for cookies set before the interceptor was active or via JS document.cookie.\n setInterval(() => {\n void (async () => {\n for (const domain of KIZEN_DOMAINS) {\n try {\n const cookies = await session.defaultSession.cookies.get({ domain });\n for (const cookie of cookies) {\n if (cookie.sameSite !== 'no_restriction') {\n const raw = cookie.domain ?? domain;\n const bare = raw.startsWith('.') ? raw.slice(1) : raw;\n await session.defaultSession.cookies.set({\n url: `https://${bare}`,\n name: cookie.name,\n value: cookie.value,\n domain: raw,\n path: cookie.path ?? '/',\n secure: true,\n ...(cookie.httpOnly !== undefined && { httpOnly: cookie.httpOnly }),\n ...(cookie.expirationDate !== undefined && {\n expirationDate: cookie.expirationDate,\n }),\n sameSite: 'no_restriction',\n });\n }\n }\n } catch {\n /* ignore */\n }\n }\n })();\n }, 2000);\n}\n\nvoid app.whenReady().then(() => {\n Menu.setApplicationMenu(null);\n\n setupSession();\n\n const iconPath = join(dirname(fileURLToPath(import.meta.url)), 'icon.png');\n const icon = nativeImage.createFromPath(iconPath);\n\n if (process.platform === 'darwin' && !icon.isEmpty()) {\n app.dock?.setIcon(icon);\n }\n\n const win = new BrowserWindow({\n width: 1920,\n height: 1080,\n title: 'Kizen App Builder',\n icon,\n webPreferences: {\n nodeIntegration: false,\n contextIsolation: true,\n sandbox: false,\n preload: join(dirname(fileURLToPath(import.meta.url)), 'preload.cjs'),\n },\n });\n\n ipcMain.on('open-devtools', () => {\n win.webContents.openDevTools();\n });\n\n interface PropertyPreview {\n name: string;\n type: string;\n value?: string;\n subtype?: string;\n valuePreview?: ObjectPreview;\n }\n interface ObjectPreview {\n type: string;\n subtype?: string;\n overflow: boolean;\n properties: PropertyPreview[];\n }\n interface RemoteObject {\n type: string;\n subtype?: string;\n value?: unknown;\n description?: string;\n preview?: ObjectPreview;\n objectId?: string;\n }\n interface ConsoleApiCalledParams {\n type: string;\n args: RemoteObject[];\n }\n\n function parseProp(prop: PropertyPreview): unknown {\n if (prop.type === 'number') {\n return Number(prop.value);\n }\n if (prop.type === 'boolean') {\n return prop.value === 'true';\n }\n if (prop.type === 'undefined') {\n return undefined;\n }\n if (prop.type === 'object' && prop.value === 'null') {\n return null;\n }\n if (prop.type === 'object' && prop.valuePreview) {\n const { valuePreview } = prop;\n if (valuePreview.subtype === 'array') {\n return valuePreview.properties\n .filter((p) => /^\\d+$/.test(p.name))\n .sort((a, b) => parseInt(a.name) - parseInt(b.name))\n .map(parseProp);\n }\n const obj: Record<string, unknown> = {};\n for (const p of valuePreview.properties) {\n obj[p.name] = parseProp(p);\n }\n return obj;\n }\n return prop.value ?? `[${prop.type}]`;\n }\n\n function serializeArg(arg: RemoteObject): unknown {\n if (arg.value !== undefined) {\n return arg.value;\n }\n if (arg.preview) {\n const { preview } = arg;\n if (preview.subtype === 'array') {\n return preview.properties\n .filter((p) => /^\\d+$/.test(p.name))\n .sort((a, b) => parseInt(a.name) - parseInt(b.name))\n .map(parseProp);\n }\n const obj: Record<string, unknown> = {};\n for (const prop of preview.properties) {\n obj[prop.name] = parseProp(prop);\n }\n return obj;\n }\n return arg.description ?? `[${arg.type}]`;\n }\n\n const enableRuntime = (sessionId?: string): void => {\n void win.webContents.debugger.sendCommand(\n 'Runtime.enable',\n { generatePreview: true },\n sessionId,\n );\n };\n\n win.webContents.debugger.attach('1.3');\n enableRuntime();\n void win.webContents.debugger.sendCommand('Target.setAutoAttach', {\n autoAttach: true,\n waitForDebuggerOnStart: false,\n flatten: true,\n });\n\n async function serializeArgAsync(arg: RemoteObject, sessionId?: string): Promise<unknown> {\n if (arg.type === 'object' && arg.objectId) {\n try {\n const result: unknown = await win.webContents.debugger.sendCommand(\n 'Runtime.callFunctionOn',\n {\n objectId: arg.objectId,\n functionDeclaration:\n 'function() { const seen = new WeakSet(); return JSON.stringify(this, function(k, v) { if (typeof v === \"object\" && v !== null) { if (seen.has(v)) return \"[Circular]\"; seen.add(v); } return v; }); }',\n returnByValue: true,\n },\n sessionId,\n );\n const val = (result as { result: { value?: string } }).result.value;\n if (typeof val === 'string') {\n return JSON.parse(val);\n }\n } catch {\n // fall through to preview-based serialization\n }\n }\n return serializeArg(arg);\n }\n\n win.webContents.debugger.on('message', (_event, method, params, sessionId) => {\n if (method === 'Target.attachedToTarget') {\n const { sessionId: childSessionId } = params as { sessionId: string };\n enableRuntime(childSessionId);\n return;\n }\n\n if (method !== 'Runtime.consoleAPICalled') {\n return;\n }\n const { type, args } = params as ConsoleApiCalledParams;\n if (args[0]?.type === 'string' && String(args[0].value).includes('Electron Security Warning')) {\n return;\n }\n const level =\n type === 'warning' ? 'warn' : ['log', 'warn', 'error', 'info'].includes(type) ? type : 'log';\n void Promise.all(args.map((arg) => serializeArgAsync(arg, sessionId as string | undefined))).then(\n (serializedArgs) => {\n win.webContents.send('console-message', { level, args: serializedArgs });\n },\n );\n });\n\n void win.loadURL(`http://localhost:${String(port)}`);\n});\n\napp.on('window-all-closed', () => {\n app.quit();\n});\n"],"mappings":"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","names":["args"]}
1
+ {"version":3,"sources":["../../src/electron/main.ts"],"sourcesContent":["import { app, BrowserWindow, session, nativeImage, Menu, ipcMain, screen } from 'electron';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst args = process.argv.slice(2);\nconst port = parseInt(args.find((a) => a.startsWith('--port='))?.slice(7) ?? '3121', 10);\nconst userDataDir = args.find((a) => a.startsWith('--user-data-dir='))?.slice(16);\n\nif (userDataDir) {\n app.setPath('userData', userDataDir);\n}\n\napp.setName('Kizen App Builder');\n\nconst CSP_HEADERS = new Set([\n 'content-security-policy',\n 'content-security-policy-report-only',\n 'x-frame-options',\n]);\n\nconst KIZEN_DOMAINS = ['kizen.dev', 'kizen.com'];\n\nfunction isKizenUrl(url: string): boolean {\n try {\n const { hostname } = new URL(url);\n return KIZEN_DOMAINS.some((d) => hostname === d || hostname.endsWith('.' + d));\n } catch {\n return false;\n }\n}\n\nfunction setupSession(): void {\n // Strip CSP headers and fix SameSite cookies on Kizen responses.\n session.defaultSession.webRequest.onHeadersReceived((details, callback) => {\n const headers: Record<string, string[]> = {};\n\n for (const [key, value] of Object.entries(details.responseHeaders ?? {})) {\n if (!CSP_HEADERS.has(key.toLowerCase())) {\n headers[key] = value;\n }\n }\n\n if (isKizenUrl(details.url) && headers['set-cookie']) {\n headers['set-cookie'] = headers['set-cookie'].map((cookie) => {\n if (!/SameSite=/i.test(cookie)) {\n return cookie + '; SameSite=None; Secure';\n }\n\n return cookie.replace(/SameSite=\\w+/i, 'SameSite=None');\n });\n }\n\n callback({ responseHeaders: headers });\n });\n\n // Periodically re-patch existing Kizen cookies that arrived without SameSite=None.\n // Needed for cookies set before the interceptor was active or via JS document.cookie.\n setInterval(() => {\n void (async () => {\n for (const domain of KIZEN_DOMAINS) {\n try {\n const cookies = await session.defaultSession.cookies.get({ domain });\n for (const cookie of cookies) {\n if (cookie.sameSite !== 'no_restriction') {\n const raw = cookie.domain ?? domain;\n const bare = raw.startsWith('.') ? raw.slice(1) : raw;\n await session.defaultSession.cookies.set({\n url: `https://${bare}`,\n name: cookie.name,\n value: cookie.value,\n domain: raw,\n path: cookie.path ?? '/',\n secure: true,\n ...(cookie.httpOnly !== undefined && { httpOnly: cookie.httpOnly }),\n ...(cookie.expirationDate !== undefined && {\n expirationDate: cookie.expirationDate,\n }),\n sameSite: 'no_restriction',\n });\n }\n }\n } catch {\n /* ignore */\n }\n }\n })();\n }, 2000);\n}\n\nvoid app.whenReady().then(() => {\n Menu.setApplicationMenu(null);\n\n setupSession();\n\n const iconPath = join(dirname(fileURLToPath(import.meta.url)), 'icon.png');\n const icon = nativeImage.createFromPath(iconPath);\n\n if (process.platform === 'darwin' && !icon.isEmpty()) {\n app.dock?.setIcon(icon);\n }\n\n const { width, height } = screen.getPrimaryDisplay().workAreaSize;\n\n const win = new BrowserWindow({\n width,\n height,\n title: 'Kizen App Builder',\n icon,\n webPreferences: {\n nodeIntegration: false,\n contextIsolation: true,\n sandbox: false,\n preload: join(dirname(fileURLToPath(import.meta.url)), 'preload.cjs'),\n },\n });\n\n ipcMain.on('open-devtools', () => {\n win.webContents.openDevTools();\n });\n\n interface PropertyPreview {\n name: string;\n type: string;\n value?: string;\n subtype?: string;\n valuePreview?: ObjectPreview;\n }\n interface ObjectPreview {\n type: string;\n subtype?: string;\n overflow: boolean;\n properties: PropertyPreview[];\n }\n interface RemoteObject {\n type: string;\n subtype?: string;\n value?: unknown;\n description?: string;\n preview?: ObjectPreview;\n objectId?: string;\n }\n interface ConsoleApiCalledParams {\n type: string;\n args: RemoteObject[];\n }\n\n function parseProp(prop: PropertyPreview): unknown {\n if (prop.type === 'number') {\n return Number(prop.value);\n }\n if (prop.type === 'boolean') {\n return prop.value === 'true';\n }\n if (prop.type === 'undefined') {\n return undefined;\n }\n if (prop.type === 'object' && prop.value === 'null') {\n return null;\n }\n if (prop.type === 'object' && prop.valuePreview) {\n const { valuePreview } = prop;\n if (valuePreview.subtype === 'array') {\n return valuePreview.properties\n .filter((p) => /^\\d+$/.test(p.name))\n .sort((a, b) => parseInt(a.name) - parseInt(b.name))\n .map(parseProp);\n }\n const obj: Record<string, unknown> = {};\n for (const p of valuePreview.properties) {\n obj[p.name] = parseProp(p);\n }\n return obj;\n }\n return prop.value ?? `[${prop.type}]`;\n }\n\n function serializeArg(arg: RemoteObject): unknown {\n if (arg.value !== undefined) {\n return arg.value;\n }\n if (arg.preview) {\n const { preview } = arg;\n if (preview.subtype === 'array') {\n return preview.properties\n .filter((p) => /^\\d+$/.test(p.name))\n .sort((a, b) => parseInt(a.name) - parseInt(b.name))\n .map(parseProp);\n }\n const obj: Record<string, unknown> = {};\n for (const prop of preview.properties) {\n obj[prop.name] = parseProp(prop);\n }\n return obj;\n }\n return arg.description ?? `[${arg.type}]`;\n }\n\n const enableRuntime = (sessionId?: string): void => {\n void win.webContents.debugger.sendCommand(\n 'Runtime.enable',\n { generatePreview: true },\n sessionId,\n );\n };\n\n win.webContents.debugger.attach('1.3');\n enableRuntime();\n void win.webContents.debugger.sendCommand('Target.setAutoAttach', {\n autoAttach: true,\n waitForDebuggerOnStart: false,\n flatten: true,\n });\n\n async function serializeArgAsync(arg: RemoteObject, sessionId?: string): Promise<unknown> {\n if (arg.type === 'object' && arg.objectId) {\n try {\n const result: unknown = await win.webContents.debugger.sendCommand(\n 'Runtime.callFunctionOn',\n {\n objectId: arg.objectId,\n functionDeclaration:\n 'function() { const seen = new WeakSet(); return JSON.stringify(this, function(k, v) { if (typeof v === \"object\" && v !== null) { if (seen.has(v)) return \"[Circular]\"; seen.add(v); } return v; }); }',\n returnByValue: true,\n },\n sessionId,\n );\n const val = (result as { result: { value?: string } }).result.value;\n if (typeof val === 'string') {\n return JSON.parse(val);\n }\n } catch {\n // fall through to preview-based serialization\n }\n }\n return serializeArg(arg);\n }\n\n win.webContents.debugger.on('message', (_event, method, params, sessionId) => {\n if (method === 'Target.attachedToTarget') {\n const { sessionId: childSessionId } = params as { sessionId: string };\n enableRuntime(childSessionId);\n return;\n }\n\n if (method !== 'Runtime.consoleAPICalled') {\n return;\n }\n const { type, args } = params as ConsoleApiCalledParams;\n if (args[0]?.type === 'string' && String(args[0].value).includes('Electron Security Warning')) {\n return;\n }\n const level =\n type === 'warning' ? 'warn' : ['log', 'warn', 'error', 'info'].includes(type) ? type : 'log';\n void Promise.all(\n args.map((arg) => serializeArgAsync(arg, sessionId as string | undefined)),\n ).then((serializedArgs) => {\n win.webContents.send('console-message', { level, args: serializedArgs });\n });\n });\n\n void win.loadURL(`http://localhost:${String(port)}`);\n});\n\napp.on('window-all-closed', () => {\n app.quit();\n});\n"],"mappings":"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","names":["args"]}