@piecemaker-legal/piecemaker 1.0.7 → 1.0.8
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.
- package/dist/assets/{abnfDiagram-VCTEODGH-CR3_ADBu.js → abnfDiagram-VCTEODGH-K8VucbQ5.js} +1 -1
- package/dist/assets/{arc-b92imMmc.js → arc-DUmCdRoC.js} +1 -1
- package/dist/assets/{architectureDiagram-5GKGNRK7-Dfm5Epud.js → architectureDiagram-5GKGNRK7-DYhs5vqD.js} +1 -1
- package/dist/assets/{blockDiagram-I7D4REHJ-B8kLLyAv.js → blockDiagram-I7D4REHJ-DaXJ9nve.js} +1 -1
- package/dist/assets/{c4Diagram-7LVT6UL2-BWSyAAWX.js → c4Diagram-7LVT6UL2-BLbi-zPT.js} +1 -1
- package/dist/assets/channel-CJIq1vqf.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-Ci743mcC.js → chunk-2Q5K7J3B-Bzs3gxaq.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-SdXpal6h.js → chunk-5VM5RSS4-CQNzml7k.js} +1 -1
- package/dist/assets/{chunk-F27PBJKO-Rof94ueX.js → chunk-F27PBJKO-B8xedWWH.js} +1 -1
- package/dist/assets/{chunk-IMKFNOWR-B3st6ECc.js → chunk-IMKFNOWR-CjBGlNOu.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-alXmu5xU.js → chunk-JWPE2WC7-vfnYEpgA.js} +1 -1
- package/dist/assets/{chunk-POPQ4Y6H-dMs1OCce.js → chunk-POPQ4Y6H-Btl98tE8.js} +1 -1
- package/dist/assets/{chunk-SVP7TREG-BmM8FsmF.js → chunk-SVP7TREG-Bp6-pLjR.js} +1 -1
- package/dist/assets/{chunk-TICWLB2K-CL1LytYG.js → chunk-TICWLB2K-DvmznW2q.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-7U9iRPT1.js → chunk-XXDRQBXY-QSHJTsI3.js} +1 -1
- package/dist/assets/classDiagram-ZZMXUADV-BYkEWggn.js +1 -0
- package/dist/assets/classDiagram-v2-VYDZK3BY-BYkEWggn.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-DFOMlhj2.js → cose-bilkent-JH36ORCC-DxpyZoe2.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CDdJFd9d.js → cynefin-OW5HDTMX-B9GRp2Gn.js} +1 -1
- package/dist/assets/{cynefinDiagram-5FMLGOSQ-DPyVNrMW.js → cynefinDiagram-5FMLGOSQ-Q-2tz5GW.js} +1 -1
- package/dist/assets/{dagre-GXQ25YYZ-B3bpHa9D.js → dagre-GXQ25YYZ-3Rl3NqNe.js} +1 -1
- package/dist/assets/{diagram-S7CK7UJ4-DeFO2rXB.js → diagram-S7CK7UJ4-CreeWCO1.js} +1 -1
- package/dist/assets/{diagram-UQ7AKVKN-CbdGTOVf.js → diagram-UQ7AKVKN-DNBoIyDJ.js} +1 -1
- package/dist/assets/{diagram-VSXAHHWV-DFfNQyMd.js → diagram-VSXAHHWV-ZkcE_cRk.js} +1 -1
- package/dist/assets/{diagram-VX7I27RA-DbNZ6_X3.js → diagram-VX7I27RA-Dzdf7N2Q.js} +1 -1
- package/dist/assets/{diagram-Z3DM3KII-B8F-ZkNJ.js → diagram-Z3DM3KII-M6b-nr1u.js} +1 -1
- package/dist/assets/{ebnfDiagram-PWID7BFC-BfCCPPAP.js → ebnfDiagram-PWID7BFC-DunIw64n.js} +1 -1
- package/dist/assets/{erDiagram-RLTQ6QDP-DcV-3Kzv.js → erDiagram-RLTQ6QDP-kN0Se5uc.js} +1 -1
- package/dist/assets/{flowDiagram-HODETNUW-BwSkJXCo.js → flowDiagram-HODETNUW-24YCovut.js} +1 -1
- package/dist/assets/{ganttDiagram-EL5Y4UJY-BffHk77T.js → ganttDiagram-EL5Y4UJY-DTUUEEy6.js} +1 -1
- package/dist/assets/{gitGraphDiagram-WWUBYQGX-CQ1EWa74.js → gitGraphDiagram-WWUBYQGX-BitrqhMr.js} +1 -1
- package/dist/assets/{index-BqK33gaZ.js → index-CG9hW1GU.js} +3 -3
- package/dist/assets/{infoDiagram-27XIBGKW-DqIaBXQn.js → infoDiagram-27XIBGKW-BNHN5Mby.js} +1 -1
- package/dist/assets/{ishikawaDiagram-5VMMS53U-HlhsaZgv.js → ishikawaDiagram-5VMMS53U-De3IQKso.js} +1 -1
- package/dist/assets/{journeyDiagram-3NMN7TZE-BYO8-7rN.js → journeyDiagram-3NMN7TZE-CWlkZ25T.js} +1 -1
- package/dist/assets/{kanban-definition-UXKFOSKX-DXb8zHGT.js → kanban-definition-UXKFOSKX-2o_ax-Nk.js} +1 -1
- package/dist/assets/{layout-CREOVuEZ.js → layout-Btga9ZYP.js} +1 -1
- package/dist/assets/{linear-CVCrIRIY.js → linear-BoGGmqPG.js} +1 -1
- package/dist/assets/{mermaid.core-DFqeWtQR.js → mermaid.core-M308jnLQ.js} +6 -6
- package/dist/assets/{mindmap-definition-YA3MSWOX-SUpXz333.js → mindmap-definition-YA3MSWOX-BJ6C_grh.js} +1 -1
- package/dist/assets/{pegDiagram-XKGWAZYB-D-yWpve3.js → pegDiagram-XKGWAZYB-qcdYX0Xe.js} +1 -1
- package/dist/assets/{pieDiagram-E7YTZNPT-BJX4Zp4Z.js → pieDiagram-E7YTZNPT-XPrSlt1M.js} +1 -1
- package/dist/assets/{quadrantDiagram-AXDQQJYC-CHajheTu.js → quadrantDiagram-AXDQQJYC-COhHhra5.js} +1 -1
- package/dist/assets/{railroadDiagram-O6MQD6OU-DHJWzW5A.js → railroadDiagram-O6MQD6OU-Mw_KF6gb.js} +1 -1
- package/dist/assets/{requirementDiagram-BXWQKSXE-DigUIdso.js → requirementDiagram-BXWQKSXE-DPbt7jUM.js} +1 -1
- package/dist/assets/{sankeyDiagram-P5KCCOFB-CFUDDbA5.js → sankeyDiagram-P5KCCOFB-B6HzL6Gh.js} +1 -1
- package/dist/assets/{sequenceDiagram-WJ2MYXX4-6tSaXfYD.js → sequenceDiagram-WJ2MYXX4-B_dXXCC0.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-CXASEDKe.js → sizeCapture-INFHLROL-DwODubWN.js} +1 -1
- package/dist/assets/{stateDiagram-D77RDMKH-DWTCAQfZ.js → stateDiagram-D77RDMKH-5AUnOL3S.js} +1 -1
- package/dist/assets/{stateDiagram-v2-MP3YSRHH-HDQF4MGA.js → stateDiagram-v2-MP3YSRHH-CFM_nDL9.js} +1 -1
- package/dist/assets/{swimlanes-42K2YHIH-7-oz5r-e.js → swimlanes-42K2YHIH-BLnIwbnd.js} +1 -1
- package/dist/assets/swimlanesDiagram-VR7AAH4N-BRQJYnDN.js +8 -0
- package/dist/assets/{timeline-definition-24CTP7MA-DVH5g4ty.js → timeline-definition-24CTP7MA-B1Yc7-na.js} +1 -1
- package/dist/assets/{vennDiagram-4TSXK5OY-CQvY_ALZ.js → vennDiagram-4TSXK5OY-BFRtl-NI.js} +1 -1
- package/dist/assets/{wardleyDiagram-VM6X3IG4-BdlTJgEc.js → wardleyDiagram-VM6X3IG4-BsR8iaD_.js} +1 -1
- package/dist/assets/{xychartDiagram-S5SC5T6Z-CYn2sV77.js → xychartDiagram-S5SC5T6Z-Crh1SwrA.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/dist-server/server/modules/cli/desktop-shortcut.js +80 -0
- package/dist-server/server/modules/cli/desktop-shortcut.js.map +1 -0
- package/dist-server/server/modules/cli/pwa-launcher.js +27 -4
- package/dist-server/server/modules/cli/pwa-launcher.js.map +1 -1
- package/package.json +1 -1
- package/product.config.json +1 -0
- package/scripts/piecemaker/cli/lib/app-window.mjs +47 -0
- package/scripts/piecemaker/cli/lib/pwa.mjs +10 -13
- package/scripts/piecemaker/cli/piecemaker.mjs +15 -1
- package/server/modules/cli/desktop-shortcut.ts +89 -0
- package/server/modules/cli/pwa-launcher.ts +29 -4
- package/dist/assets/channel-BbcW_Tkh.js +0 -1
- package/dist/assets/classDiagram-ZZMXUADV-D9_YRZ7i.js +0 -1
- package/dist/assets/classDiagram-v2-VYDZK3BY-D9_YRZ7i.js +0 -1
- package/dist/assets/swimlanesDiagram-VR7AAH4N-CJbgQFt8.js +0 -8
|
@@ -46,7 +46,7 @@ export async function verifyPwaAssets() {
|
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
function macChromiumBrowser() {
|
|
49
|
+
export function macChromiumBrowser() {
|
|
50
50
|
const candidates = [
|
|
51
51
|
'/Applications/Google Chrome.app',
|
|
52
52
|
'/Applications/Microsoft Edge.app',
|
|
@@ -103,13 +103,12 @@ function installMacApplication() {
|
|
|
103
103
|
fs.mkdirSync(resourcesDir, { recursive: true });
|
|
104
104
|
|
|
105
105
|
const browser = macChromiumBrowser();
|
|
106
|
-
const launchCommand = browser
|
|
107
|
-
? `open -na "${browser}" --args --app="${APP_URL}" --user-data-dir="$HOME/.piecemaker/pwa-profile"`
|
|
108
|
-
: `open "${APP_URL}"`;
|
|
109
|
-
|
|
110
106
|
const launcherPath = path.join(macosDir, APPLICATION_NAME);
|
|
111
107
|
const command = piecemakerExecutable();
|
|
112
|
-
|
|
108
|
+
const launchCommand = browser
|
|
109
|
+
? `exec ${shellQuote(command)} --window >/dev/null 2>&1`
|
|
110
|
+
: `open "${APP_URL}"`;
|
|
111
|
+
fs.writeFileSync(launcherPath, `#!/bin/sh\n${shellQuote(command)} --launch-only >/dev/null 2>&1\n${launchCommand}\n`, 'utf8');
|
|
113
112
|
fs.chmodSync(launcherPath, 0o755);
|
|
114
113
|
|
|
115
114
|
const iconFile = writeMacIcon(resourcesDir);
|
|
@@ -209,7 +208,7 @@ function writeWindowsIcon() {
|
|
|
209
208
|
}
|
|
210
209
|
}
|
|
211
210
|
|
|
212
|
-
function windowsChromiumBrowser() {
|
|
211
|
+
export function windowsChromiumBrowser() {
|
|
213
212
|
const programFiles = process.env['ProgramFiles'] || 'C:\\Program Files';
|
|
214
213
|
const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
|
|
215
214
|
const localAppData = process.env.LOCALAPPDATA || '';
|
|
@@ -283,15 +282,14 @@ function createWindowsShortcut(shortcutPath, targetPath, shortcutArgs, iconPath)
|
|
|
283
282
|
return result.code === 0;
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
function writeWindowsLauncher(browser
|
|
285
|
+
function writeWindowsLauncher(browser) {
|
|
287
286
|
const command = piecemakerExecutable();
|
|
288
287
|
const lines = [
|
|
289
288
|
'@echo off',
|
|
290
|
-
`
|
|
291
|
-
'ping 127.0.0.1 -n 3 >nul',
|
|
289
|
+
`call "${command}" --launch-only`,
|
|
292
290
|
];
|
|
293
291
|
if (browser) {
|
|
294
|
-
lines.push(`
|
|
292
|
+
lines.push(`call "${command}" --window`);
|
|
295
293
|
} else {
|
|
296
294
|
lines.push(`start "" "${APP_URL}"`);
|
|
297
295
|
}
|
|
@@ -304,8 +302,7 @@ function writeWindowsLauncher(browser, userDataDir) {
|
|
|
304
302
|
function installWindowsApplication() {
|
|
305
303
|
const browser = windowsChromiumBrowser();
|
|
306
304
|
const iconPath = writeWindowsIcon();
|
|
307
|
-
const
|
|
308
|
-
const launcher = writeWindowsLauncher(browser, userDataDir);
|
|
305
|
+
const launcher = writeWindowsLauncher(browser);
|
|
309
306
|
|
|
310
307
|
const desktopDir = windowsDesktopDir();
|
|
311
308
|
const startMenuDir = windowsStartMenuDir();
|
|
@@ -9,6 +9,7 @@ import { gitAvailable, resolveNodeRuntime } from './lib/node-runtime.mjs';
|
|
|
9
9
|
import { ensureDependencies, ensureRepository, rebuildNativeModules } from './lib/repos.mjs';
|
|
10
10
|
import { APP_LOG, appClientReachable, appServerReachable, startApplication, stopApplication } from './lib/services.mjs';
|
|
11
11
|
import { applicationWindowIsOpen, installApplicationEntry, openApplication, verifyPwaAssets } from './lib/pwa.mjs';
|
|
12
|
+
import { runApplicationWindow } from './lib/app-window.mjs';
|
|
12
13
|
import { banner, blank, c, detail, fail, ok, step, warn } from './lib/ui.mjs';
|
|
13
14
|
|
|
14
15
|
const report = { step, ok, warn, detail };
|
|
@@ -17,13 +18,16 @@ const HELP = `${c.bold('piecemaker')} — installe, met à jour, répare et lanc
|
|
|
17
18
|
|
|
18
19
|
piecemaker reset propre, puis installation et lancement
|
|
19
20
|
piecemaker --launch-only répare et relance seulement si l'application est arrêtée
|
|
21
|
+
piecemaker --window relance si besoin, ouvre la fenêtre et arrête tout à sa fermeture
|
|
20
22
|
piecemaker --help cette aide
|
|
21
23
|
`;
|
|
22
24
|
|
|
23
25
|
function parseArguments(argv) {
|
|
26
|
+
const window = argv.includes('--window');
|
|
24
27
|
return {
|
|
25
28
|
help: argv.includes('--help') || argv.includes('-h'),
|
|
26
|
-
launchOnly: argv.includes('--launch-only'),
|
|
29
|
+
launchOnly: argv.includes('--launch-only') || window,
|
|
30
|
+
window,
|
|
27
31
|
};
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -148,6 +152,16 @@ async function main() {
|
|
|
148
152
|
detail('Configuration du socle : onglet Dossier › Configuration.');
|
|
149
153
|
blank();
|
|
150
154
|
|
|
155
|
+
if (options.window) {
|
|
156
|
+
const session = await runApplicationWindow();
|
|
157
|
+
if (!session.supervised) {
|
|
158
|
+
warn(`Fenêtre non supervisée : ${session.reason}`);
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
ok('Fenêtre fermée — application arrêtée');
|
|
162
|
+
return 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
151
165
|
if (!options.launchOnly && !applicationWindowIsOpen()) openApplication();
|
|
152
166
|
return 0;
|
|
153
167
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
|
|
6
|
+
type ShortcutOutput = {
|
|
7
|
+
log(message: string): void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const SHORTCUT_NAME = 'PieceMaker';
|
|
11
|
+
|
|
12
|
+
function desktopDirectory(): string {
|
|
13
|
+
return process.env.PIECEMAKER_DESKTOP_DIR || path.join(os.homedir(), 'Desktop');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function launchCommand(): { executable: string; argument: string } {
|
|
17
|
+
return { executable: process.execPath, argument: process.argv[1] || '' };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function createMacShortcut(desktop: string): string | null {
|
|
21
|
+
const { executable, argument } = launchCommand();
|
|
22
|
+
if (!argument) return null;
|
|
23
|
+
const bundle = path.join(desktop, `${SHORTCUT_NAME}.app`);
|
|
24
|
+
if (fs.existsSync(bundle)) return null;
|
|
25
|
+
|
|
26
|
+
const macOsDirectory = path.join(bundle, 'Contents', 'MacOS');
|
|
27
|
+
fs.mkdirSync(macOsDirectory, { recursive: true });
|
|
28
|
+
fs.writeFileSync(
|
|
29
|
+
path.join(bundle, 'Contents', 'Info.plist'),
|
|
30
|
+
`<?xml version="1.0" encoding="UTF-8"?>
|
|
31
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
32
|
+
<plist version="1.0">
|
|
33
|
+
<dict>
|
|
34
|
+
<key>CFBundleName</key><string>${SHORTCUT_NAME}</string>
|
|
35
|
+
<key>CFBundleIdentifier</key><string>legal.piecemaker.launcher</string>
|
|
36
|
+
<key>CFBundleExecutable</key><string>${SHORTCUT_NAME}</string>
|
|
37
|
+
<key>CFBundlePackageType</key><string>APPL</string>
|
|
38
|
+
<key>LSUIElement</key><true/>
|
|
39
|
+
</dict>
|
|
40
|
+
</plist>
|
|
41
|
+
`,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const launcher = path.join(macOsDirectory, SHORTCUT_NAME);
|
|
45
|
+
fs.writeFileSync(launcher, `#!/bin/sh\nexec ${JSON.stringify(executable)} ${JSON.stringify(argument)} start\n`);
|
|
46
|
+
fs.chmodSync(launcher, 0o755);
|
|
47
|
+
return bundle;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function createWindowsShortcut(desktop: string): string | null {
|
|
51
|
+
const { executable, argument } = launchCommand();
|
|
52
|
+
if (!argument) return null;
|
|
53
|
+
const shortcut = path.join(desktop, `${SHORTCUT_NAME}.lnk`);
|
|
54
|
+
if (fs.existsSync(shortcut)) return null;
|
|
55
|
+
|
|
56
|
+
const script = [
|
|
57
|
+
'$shell = New-Object -ComObject WScript.Shell',
|
|
58
|
+
`$shortcut = $shell.CreateShortcut(${JSON.stringify(shortcut)})`,
|
|
59
|
+
`$shortcut.TargetPath = ${JSON.stringify(executable)}`,
|
|
60
|
+
`$shortcut.Arguments = ${JSON.stringify(`${JSON.stringify(argument)} start`)}`,
|
|
61
|
+
`$shortcut.WorkingDirectory = ${JSON.stringify(path.dirname(executable))}`,
|
|
62
|
+
'$shortcut.WindowStyle = 7',
|
|
63
|
+
`$shortcut.Description = ${JSON.stringify('Ouvre PieceMaker')}`,
|
|
64
|
+
'$shortcut.Save()',
|
|
65
|
+
].join('; ');
|
|
66
|
+
execFileSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], { stdio: 'ignore' });
|
|
67
|
+
return shortcut;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Creates the PieceMaker desktop icon once, right after a fresh install, so the
|
|
72
|
+
* application can be reopened without a terminal. Existing shortcuts are left
|
|
73
|
+
* untouched and any failure is reported without interrupting the launch.
|
|
74
|
+
*/
|
|
75
|
+
export function ensureDesktopShortcut(output: ShortcutOutput): void {
|
|
76
|
+
if (process.platform !== 'darwin' && process.platform !== 'win32') return;
|
|
77
|
+
|
|
78
|
+
const desktop = desktopDirectory();
|
|
79
|
+
if (!fs.existsSync(desktop)) return;
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
const created = process.platform === 'darwin'
|
|
83
|
+
? createMacShortcut(desktop)
|
|
84
|
+
: createWindowsShortcut(desktop);
|
|
85
|
+
if (created) output.log(`[OK] PieceMaker desktop icon created at ${created}`);
|
|
86
|
+
} catch {
|
|
87
|
+
output.log('[WARN] Could not create the PieceMaker desktop icon.');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -4,6 +4,8 @@ import fs from 'node:fs';
|
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
|
|
7
|
+
import { ensureDesktopShortcut } from './desktop-shortcut.js';
|
|
8
|
+
|
|
7
9
|
type PwaOutput = {
|
|
8
10
|
log(message: string): void;
|
|
9
11
|
};
|
|
@@ -102,7 +104,22 @@ async function waitForServer(url: string): Promise<boolean> {
|
|
|
102
104
|
return false;
|
|
103
105
|
}
|
|
104
106
|
|
|
105
|
-
|
|
107
|
+
const SHUTDOWN_GRACE_MS = 10_000;
|
|
108
|
+
const DELEGATED_LAUNCH_MS = 3_000;
|
|
109
|
+
|
|
110
|
+
function shutdownAfterWindowClosed(output: PwaOutput): void {
|
|
111
|
+
output.log('[OK] PieceMaker window closed; stopping the local server.');
|
|
112
|
+
const forced = setTimeout(() => process.exit(0), SHUTDOWN_GRACE_MS);
|
|
113
|
+
forced.unref();
|
|
114
|
+
if (process.listenerCount('SIGTERM') > 0) process.emit('SIGTERM', 'SIGTERM');
|
|
115
|
+
else process.exit(0);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Starts PieceMaker in an isolated Chromium app window after its backend is
|
|
120
|
+
* ready, and ties the server's lifetime to that window: closing it shuts the
|
|
121
|
+
* local server down through the same graceful path as SIGTERM.
|
|
122
|
+
*/
|
|
106
123
|
export async function launchPwa(output: PwaOutput = DEFAULT_OUTPUT): Promise<void> {
|
|
107
124
|
const url = pwaUrl();
|
|
108
125
|
if (!(await waitForServer(url))) {
|
|
@@ -116,16 +133,24 @@ export async function launchPwa(output: PwaOutput = DEFAULT_OUTPUT): Promise<voi
|
|
|
116
133
|
return;
|
|
117
134
|
}
|
|
118
135
|
|
|
136
|
+
ensureDesktopShortcut(output);
|
|
137
|
+
|
|
119
138
|
const profileDirectory = pwaProfileDirectory();
|
|
120
139
|
fs.mkdirSync(profileDirectory, { recursive: true });
|
|
140
|
+
const openedAt = Date.now();
|
|
121
141
|
const child = spawn(browser, [`--app=${url}`, `--user-data-dir=${profileDirectory}`], {
|
|
122
|
-
detached: true,
|
|
123
142
|
stdio: 'ignore',
|
|
124
143
|
windowsHide: true,
|
|
125
144
|
});
|
|
126
145
|
child.on('error', () => {
|
|
127
146
|
output.log(`[WARN] Could not open the PieceMaker PWA; open ${url} manually.`);
|
|
128
147
|
});
|
|
129
|
-
child.
|
|
130
|
-
|
|
148
|
+
child.on('exit', () => {
|
|
149
|
+
if (Date.now() - openedAt < DELEGATED_LAUNCH_MS) {
|
|
150
|
+
output.log(`[WARN] The PieceMaker window is owned by another browser process; the server keeps running.`);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
shutdownAfterWindowClosed(output);
|
|
154
|
+
});
|
|
155
|
+
output.log(`[OK] PieceMaker PWA opened at ${url} — closing the window stops the server.`);
|
|
131
156
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ah as o,ai as n}from"./mermaid.core-DFqeWtQR.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-TICWLB2K-CL1LytYG.js";import{_ as i}from"./mermaid.core-DFqeWtQR.js";import"./chunk-5VM5RSS4-SdXpal6h.js";import"./chunk-XXDRQBXY-7U9iRPT1.js";import"./chunk-POPQ4Y6H-dMs1OCce.js";import"./chunk-F27PBJKO-Rof94ueX.js";import"./index-BqK33gaZ.js";import"./vendor-codemirror-CjW0lHR5.js";import"./vendor-react-D809iwXR.js";import"./vendor-xterm-BWUgpGtR.js";var c={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-TICWLB2K-CL1LytYG.js";import{_ as i}from"./mermaid.core-DFqeWtQR.js";import"./chunk-5VM5RSS4-SdXpal6h.js";import"./chunk-XXDRQBXY-7U9iRPT1.js";import"./chunk-POPQ4Y6H-dMs1OCce.js";import"./chunk-F27PBJKO-Rof94ueX.js";import"./index-BqK33gaZ.js";import"./vendor-codemirror-CjW0lHR5.js";import"./vendor-react-D809iwXR.js";import"./vendor-xterm-BWUgpGtR.js";var c={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{c as r,s as e}from"./flowDiagram-HODETNUW-BwSkJXCo.js";import{_ as a}from"./mermaid.core-DFqeWtQR.js";import"./chunk-5VM5RSS4-SdXpal6h.js";import"./chunk-XXDRQBXY-7U9iRPT1.js";import"./chunk-POPQ4Y6H-dMs1OCce.js";import"./chunk-F27PBJKO-Rof94ueX.js";import"./index-BqK33gaZ.js";import"./vendor-codemirror-CjW0lHR5.js";import"./vendor-react-D809iwXR.js";import"./vendor-xterm-BWUgpGtR.js";import"./channel-BbcW_Tkh.js";var o=a(t=>`${e(t)}
|
|
2
|
-
.swimlane.cluster rect {
|
|
3
|
-
stroke: ${t.clusterBorder} !important;
|
|
4
|
-
}
|
|
5
|
-
[data-look="neo"].cluster rect {
|
|
6
|
-
filter: none;
|
|
7
|
-
}
|
|
8
|
-
`,"getStyles"),m=o,g=r({defaultLayout:"swimlane",styles:m});export{g as diagram};
|