@bubblydoo/uxp-cli 0.0.2 → 0.0.4
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/bin.js +18 -26
- package/dist/bin.js.map +1 -1
- package/package.json +2 -2
package/dist/bin.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import fs from 'fs/promises';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
-
import {
|
|
5
|
+
import { setupDevtoolsConnection, setupCdpSession, waitForExecutionContextCreated, setupCdpSessionWithUxpDefaults } from '@bubblydoo/uxp-devtools-common';
|
|
6
6
|
import arg from 'arg';
|
|
7
7
|
import { spawn } from 'child_process';
|
|
8
8
|
|
|
@@ -53,7 +53,6 @@ Actions:
|
|
|
53
53
|
|
|
54
54
|
Options:
|
|
55
55
|
--plugin-path, -p <path> Path to the UXP plugin directory
|
|
56
|
-
--plugin-id, -i <id> Plugin ID
|
|
57
56
|
--help, -h Show this help message
|
|
58
57
|
|
|
59
58
|
Examples:
|
|
@@ -61,7 +60,7 @@ Examples:
|
|
|
61
60
|
uxp-cli open-devtools
|
|
62
61
|
|
|
63
62
|
# Open devtools with custom plugin
|
|
64
|
-
uxp-cli open-devtools --plugin-path ./my-plugin
|
|
63
|
+
uxp-cli open-devtools --plugin-path ./my-plugin
|
|
65
64
|
|
|
66
65
|
# Dump object properties (always uses fake plugin)
|
|
67
66
|
uxp-cli dump-object
|
|
@@ -86,10 +85,8 @@ if (!["open-devtools", "dump-object"].includes(action)) {
|
|
|
86
85
|
}
|
|
87
86
|
var actionArgs = arg({
|
|
88
87
|
"--plugin-path": String,
|
|
89
|
-
"--plugin-id": String,
|
|
90
88
|
"--help": Boolean,
|
|
91
89
|
"-p": "--plugin-path",
|
|
92
|
-
"-i": "--plugin-id",
|
|
93
90
|
"-h": "--help"
|
|
94
91
|
}, {
|
|
95
92
|
argv: args._.slice(1)
|
|
@@ -99,22 +96,17 @@ if (actionArgs["--help"]) {
|
|
|
99
96
|
process.exit(0);
|
|
100
97
|
}
|
|
101
98
|
async function getPluginInfo(useFakePlugin) {
|
|
102
|
-
const fakePluginPath = path.resolve(__dirname2, "../../uxp-
|
|
103
|
-
const fakePluginId = "co.bubblydoo.fake-plugin";
|
|
99
|
+
const fakePluginPath = path.resolve(__dirname2, "../../uxp-devtools-common/fake-plugin");
|
|
104
100
|
if (useFakePlugin) {
|
|
105
101
|
console.log("Using fake plugin:");
|
|
106
102
|
console.log(` Plugin Path: ${fakePluginPath}`);
|
|
107
|
-
|
|
108
|
-
return { pluginPath: fakePluginPath, pluginId: fakePluginId };
|
|
103
|
+
return { pluginPath: fakePluginPath };
|
|
109
104
|
}
|
|
110
105
|
let pluginPath = actionArgs["--plugin-path"];
|
|
111
|
-
|
|
112
|
-
if (!pluginPath || !pluginId) {
|
|
106
|
+
if (!pluginPath) {
|
|
113
107
|
pluginPath = pluginPath || fakePluginPath;
|
|
114
|
-
pluginId = pluginId || fakePluginId;
|
|
115
108
|
console.log("Using default fake plugin:");
|
|
116
109
|
console.log(` Plugin Path: ${pluginPath}`);
|
|
117
|
-
console.log(` Plugin ID: ${pluginId}`);
|
|
118
110
|
}
|
|
119
111
|
if (!path.isAbsolute(pluginPath)) {
|
|
120
112
|
pluginPath = path.resolve(process.cwd(), pluginPath);
|
|
@@ -125,32 +117,32 @@ async function getPluginInfo(useFakePlugin) {
|
|
|
125
117
|
console.error(`Error: Plugin directory not found: ${pluginPath}`);
|
|
126
118
|
process.exit(1);
|
|
127
119
|
}
|
|
128
|
-
|
|
120
|
+
const manifest = JSON.parse(await fs.readFile(path.resolve(pluginPath, "manifest.json"), "utf8"));
|
|
121
|
+
return { pluginPath, pluginId: manifest.id };
|
|
129
122
|
}
|
|
130
123
|
async function openDevtools() {
|
|
131
|
-
const { pluginPath
|
|
124
|
+
const { pluginPath } = await getPluginInfo(false);
|
|
132
125
|
console.log("\nSetting up devtools URL...");
|
|
133
|
-
const
|
|
134
|
-
console.log(`DevTools URL: ${
|
|
126
|
+
const devtoolsConnection = await setupDevtoolsConnection(pluginPath);
|
|
127
|
+
console.log(`DevTools URL: ${devtoolsConnection.url}
|
|
135
128
|
`);
|
|
136
|
-
await openDevtoolsSessionInChrome(
|
|
129
|
+
await openDevtoolsSessionInChrome(devtoolsConnection.url);
|
|
137
130
|
console.log("Chrome DevTools opened");
|
|
138
131
|
console.log("\nPress Ctrl+C to exit...");
|
|
139
132
|
await new Promise(() => {
|
|
140
133
|
});
|
|
141
134
|
}
|
|
142
135
|
async function dumpObject() {
|
|
143
|
-
const { pluginPath
|
|
136
|
+
const { pluginPath } = await getPluginInfo(true);
|
|
144
137
|
console.log("\nSetting up devtools URL...");
|
|
145
|
-
const
|
|
146
|
-
console.log(`DevTools URL: ${
|
|
138
|
+
const devtoolsConnection = await setupDevtoolsConnection(pluginPath);
|
|
139
|
+
console.log(`DevTools URL: ${devtoolsConnection.url}
|
|
147
140
|
`);
|
|
148
141
|
console.log("Setting up CDP session...");
|
|
149
|
-
const cdp = await setupCdpSession(
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const executionContext = await executionContextCreatedPromise;
|
|
142
|
+
const cdp = await setupCdpSession(devtoolsConnection.url);
|
|
143
|
+
const executionContext = await waitForExecutionContextCreated(cdp, async () => {
|
|
144
|
+
await setupCdpSessionWithUxpDefaults(cdp);
|
|
145
|
+
});
|
|
154
146
|
console.log("Evaluating expression...");
|
|
155
147
|
const result = await cdp.Runtime.evaluate({
|
|
156
148
|
expression: `
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/open-devtools-session.ts","../src/bin.ts"],"names":["args","__dirname"],"mappings":";;;;;;;;AAIA,SAAS,gBAAA,GAAwD;AAC/D,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AAEzB,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAC,IAAA,EAAM,eAAe,CAAA,EAAE;AAAA,IAC1D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,SAAS,KAAA,EAAO,IAAA,EAAM,CAAC,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA,EAAE;AAAA,IAC3D,KAAK,OAAA;AAEH,MAAA,OAAO,EAAE,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,EAAC,EAAE;AAAA,IAC9C;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAE,CAAA;AAAA;AAEzD;AAEO,SAAS,4BAA4B,MAAA,EAAgB;AAC1D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,4CAA4C,CAAA;AAChE,EAAA,GAAA,CAAI,aAAa,GAAA,CAAI,IAAA,EAAM,OAAO,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA;AAEtD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAAA,KAAAA,KAAS,gBAAA,EAAiB;AAC3C,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,EAAS,CAAC,GAAGA,KAAAA,EAAM,GAAA,CAAI,QAAA,EAAU,CAAA,EAAG;AAAA,MACrD,KAAA,EAAO,QAAQ,QAAA,KAAa;AAAA,KAC7B,CAAA;AACD,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AACxB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAA,CAAI,OAAO,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAS;AACzB,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd,CAAA,MACK;AACH,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,MACrD;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;AC/BA,KAAA,CAAM,eAAA,GAAkB,QAAA;AAExB,IAAMC,aAAY,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAE7D,SAAS,QAAA,GAAW;AAClB,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAqBb,CAAA;AACD;AAGA,IAAM,OAAO,GAAA,CAAI;AAAA,EACf,QAAA,EAAU,OAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAA,EAAG;AAAA,EACD,UAAA,EAAY;AACd,CAAC,CAAA;AAED,IAAI,KAAK,QAAQ,CAAA,IAAK,IAAA,CAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AACzC,EAAA,QAAA,EAAS;AACT,EAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAI,CAAC,CAAA;AACrC;AAEA,IAAM,MAAA,GAAS,IAAA,CAAK,CAAA,CAAE,CAAC,CAAA;AAEvB,IAAI,CAAC,CAAC,eAAA,EAAiB,aAAa,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,MAAM,CAAA;AAAA,CAAK,CAAA;AACnD,EAAA,QAAA,EAAS;AACT,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAGA,IAAM,aAAa,GAAA,CAAI;AAAA,EACrB,eAAA,EAAiB,MAAA;AAAA,EACjB,aAAA,EAAe,MAAA;AAAA,EACf,QAAA,EAAU,OAAA;AAAA,EACV,IAAA,EAAM,eAAA;AAAA,EACN,IAAA,EAAM,aAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA,EAAG;AAAA,EACD,IAAA,EAAM,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,CAAC;AACtB,CAAC,CAAA;AAED,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,EAAA,QAAA,EAAS;AACT,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEA,eAAe,cAAc,aAAA,EAAwB;AACnD,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQA,UAAAA,EAAW,kCAAkC,CAAA;AACjF,EAAA,MAAM,YAAA,GAAe,0BAAA;AAErB,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,cAAc,CAAA,CAAE,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,YAAY,CAAA,CAAE,CAAA;AAC1C,IAAA,OAAO,EAAE,UAAA,EAAY,cAAA,EAAgB,QAAA,EAAU,YAAA,EAAa;AAAA,EAC9D;AAEA,EAAA,IAAI,UAAA,GAAa,WAAW,eAAe,CAAA;AAC3C,EAAA,IAAI,QAAA,GAAW,WAAW,aAAa,CAAA;AAGvC,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,QAAA,EAAU;AAC5B,IAAA,UAAA,GAAa,UAAA,IAAc,cAAA;AAC3B,IAAA,QAAA,GAAW,QAAA,IAAY,YAAA;AAEvB,IAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AACxC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,UAAU,CAAA,CAAE,CAAA;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAE,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAChC,IAAA,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,UAAU,CAAA;AAAA,EACrD;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,CAAG,OAAO,UAAU,CAAA;AAAA,EAC5B,CAAA,CAAA,MACM;AACJ,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,mCAAA,EAAsC,UAAU,CAAA,CAAE,CAAA;AAChE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,OAAO,EAAE,YAAY,QAAA,EAAS;AAChC;AAEA,eAAe,YAAA,GAAe;AAC5B,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAS,GAAI,MAAM,cAAc,KAAK,CAAA;AAE1D,EAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,UAAA,EAAY,QAAQ,CAAA;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI,iBAAiB,MAAM;AAAA,CAAI,CAAA;AAEvC,EAAA,MAAM,4BAA4B,MAAM,CAAA;AACxC,EAAA,OAAA,CAAQ,IAAI,wBAAwB,CAAA;AAEpC,EAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AACvC,EAAA,MAAM,IAAI,QAAQ,MAAM;AAAA,EAAC,CAAC,CAAA;AAC5B;AAEA,eAAe,UAAA,GAAa;AAC1B,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAS,GAAI,MAAM,cAAc,IAAI,CAAA;AAEzD,EAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,UAAA,EAAY,QAAQ,CAAA;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI,iBAAiB,MAAM;AAAA,CAAI,CAAA;AAEvC,EAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,MAAM,eAAA,CAAgB,MAAM,CAAA;AAExC,EAAA,MAAM,8BAAA,GAAiC,+BAA+B,GAAG,CAAA;AAEzE,EAAA,MAAM,4BAA4B,GAAG,CAAA;AAErC,EAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,EAAA,MAAM,mBAAmB,MAAM,8BAAA;AAE/B,EAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS;AAAA,IACxC,UAAA,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAOZ,iBAAiB,gBAAA,CAAiB;AAAA,GACnC,CAAA;AAED,EAAA,OAAA,CAAQ,IAAI,uBAAuB,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,MAAM,GAAA,CAAI,OAAA,CAAQ,aAAA,CAAc;AAAA,IACjD,QAAA,EAAU,OAAO,MAAA,CAAO,QAAA;AAAA,IACxB,sBAAA,EAAwB,KAAA;AAAA,IACxB,eAAA,EAAiB,KAAA;AAAA,IACjB,wBAAA,EAA0B,KAAA;AAAA,IAC1B,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAA0B,WAAW,kBAAA,EAAoB,IAAA,CAAK,CAAC,QAAA,KAAkB,QAAA,CAAS,IAAA,KAAS,sBAAsB,CAAA,EAAG;AAC5H,EAAA,MAAM,MAAA,GAAS,WAAW,kBAAA,EAAoB,IAAA,CAAK,CAAC,QAAA,KAAkB,QAAA,CAAS,IAAA,KAAS,YAAY,CAAA,EAAG,KAAA;AAEvG,EAAA,MAAM,gBAAA,GAAmB,MAAM,GAAA,CAAI,OAAA,CAAQ,aAAA,CAAc;AAAA,IACvD,UAAU,MAAA,CAAQ,QAAA;AAAA,IAClB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,GAAA;AAAA,IACtC,iBAAiB,MAAA,CAAO,GAAA,CAAI,CAAC,QAAA,KAAkB,GAAA,CAAI,QAAQ,aAAA,CAAc;AAAA,MACvE,QAAA,EAAU,SAAS,KAAA,CAAO,QAAA;AAAA,MAC1B,aAAA,EAAe;AAAA,KAChB,CAAC;AAAA,GACJ;AAEA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,SAAS,MAAA,CAAO,MAAA;AAAA,IAChB,UAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,WAAW,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,WAAW,CAAA;AACxD,EAAA,MAAM,EAAA,CAAG,UAAU,QAAA,EAAU,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,iBAAA,EAAsB,QAAQ,CAAA,CAAE,CAAA;AAC9C;AAGA,IAAI,WAAW,eAAA,EAAiB;AAC9B,EAAA,MAAM,YAAA,EAAa;AACrB,CAAA,MAAA,IACS,WAAW,aAAA,EAAe;AACjC,EAAA,MAAM,UAAA,EAAW;AACnB;AAEA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,EAAA,OAAA,CAAQ,IAAI,+BAA+B,CAAA;AAC3C,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA","file":"bin.js","sourcesContent":["import { spawn } from 'node:child_process';\n\n// devtools://devtools/bundled/inspector.html?ws=127.0.0.1:14003/socket/cdt/2676d6dd-528c-4453-ac0d-c5dddf78c4d7\n\nfunction getChromeCommand(): { command: string; args: string[] } {\n const platform = process.platform;\n\n switch (platform) {\n case 'darwin':\n return { command: 'open', args: ['-a', 'Google Chrome'] };\n case 'win32':\n return { command: 'cmd', args: ['/c', 'start', 'chrome'] };\n case 'linux':\n // Try common Chrome executable names on Linux\n return { command: 'google-chrome', args: [] };\n default:\n throw new Error(`Unsupported platform: ${platform}`);\n }\n}\n\nexport function openDevtoolsSessionInChrome(cdtUrl: string) {\n const url = new URL('devtools://devtools/bundled/inspector.html');\n url.searchParams.set('ws', cdtUrl.replace('ws://', ''));\n\n return new Promise((resolve, reject) => {\n const { command, args } = getChromeCommand();\n const proc = spawn(command, [...args, url.toString()], {\n shell: process.platform === 'win32',\n });\n proc.on('error', (err) => {\n reject(new Error(`Failed to launch Chrome: ${err.message}`));\n });\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(true);\n }\n else {\n reject(new Error('Failed to open devtools session'));\n }\n });\n });\n}\n","#!/usr/bin/env node\n/* eslint-disable antfu/no-top-level-await */\n/* eslint-disable no-console */\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { setupCdpSession, setupCdpSessionWithDefaults, setupDevtoolsUrl, waitForExecutionContextCreated } from '@bubblydoo/uxp-cli-common';\nimport arg from 'arg';\nimport { openDevtoolsSessionInChrome } from './open-devtools-session';\n\nError.stackTraceLimit = Infinity;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction showHelp() {\n console.log(`\nUsage: uxp-cli <action> [options]\n\nActions:\n open-devtools Open Chrome DevTools for a UXP plugin\n dump-object Dump object properties to dump.json (always uses fake plugin)\n\nOptions:\n --plugin-path, -p <path> Path to the UXP plugin directory\n --plugin-id, -i <id> Plugin ID\n --help, -h Show this help message\n\nExamples:\n # Open devtools with fake plugin\n uxp-cli open-devtools\n\n # Open devtools with custom plugin\n uxp-cli open-devtools --plugin-path ./my-plugin --plugin-id com.example.myplugin\n\n # Dump object properties (always uses fake plugin)\n uxp-cli dump-object\n`);\n}\n\n// Parse action\nconst args = arg({\n '--help': Boolean,\n '-h': '--help',\n}, {\n permissive: true,\n});\n\nif (args['--help'] || args._.length === 0) {\n showHelp();\n process.exit(args['--help'] ? 0 : 1);\n}\n\nconst action = args._[0];\n\nif (!['open-devtools', 'dump-object'].includes(action)) {\n console.error(`Error: Unknown action \"${action}\"\\n`);\n showHelp();\n process.exit(1);\n}\n\n// Parse action-specific options\nconst actionArgs = arg({\n '--plugin-path': String,\n '--plugin-id': String,\n '--help': Boolean,\n '-p': '--plugin-path',\n '-i': '--plugin-id',\n '-h': '--help',\n}, {\n argv: args._.slice(1),\n});\n\nif (actionArgs['--help']) {\n showHelp();\n process.exit(0);\n}\n\nasync function getPluginInfo(useFakePlugin: boolean) {\n const fakePluginPath = path.resolve(__dirname, '../../uxp-cli-common/fake-plugin');\n const fakePluginId = 'co.bubblydoo.fake-plugin';\n\n if (useFakePlugin) {\n console.log('Using fake plugin:');\n console.log(` Plugin Path: ${fakePluginPath}`);\n console.log(` Plugin ID: ${fakePluginId}`);\n return { pluginPath: fakePluginPath, pluginId: fakePluginId };\n }\n\n let pluginPath = actionArgs['--plugin-path'];\n let pluginId = actionArgs['--plugin-id'];\n\n // Default to fake-plugin if not provided\n if (!pluginPath || !pluginId) {\n pluginPath = pluginPath || fakePluginPath;\n pluginId = pluginId || fakePluginId;\n\n console.log('Using default fake plugin:');\n console.log(` Plugin Path: ${pluginPath}`);\n console.log(` Plugin ID: ${pluginId}`);\n }\n\n // Ensure plugin path is absolute\n if (!path.isAbsolute(pluginPath)) {\n pluginPath = path.resolve(process.cwd(), pluginPath);\n }\n\n // Verify plugin directory exists\n try {\n await fs.access(pluginPath);\n }\n catch {\n console.error(`Error: Plugin directory not found: ${pluginPath}`);\n process.exit(1);\n }\n\n return { pluginPath, pluginId };\n}\n\nasync function openDevtools() {\n const { pluginPath, pluginId } = await getPluginInfo(false);\n\n console.log('\\nSetting up devtools URL...');\n const cdtUrl = await setupDevtoolsUrl(pluginPath, pluginId);\n console.log(`DevTools URL: ${cdtUrl}\\n`);\n\n await openDevtoolsSessionInChrome(cdtUrl);\n console.log('Chrome DevTools opened');\n\n console.log('\\nPress Ctrl+C to exit...');\n await new Promise(() => {});\n}\n\nasync function dumpObject() {\n const { pluginPath, pluginId } = await getPluginInfo(true);\n\n console.log('\\nSetting up devtools URL...');\n const cdtUrl = await setupDevtoolsUrl(pluginPath, pluginId);\n console.log(`DevTools URL: ${cdtUrl}\\n`);\n\n console.log('Setting up CDP session...');\n const cdp = await setupCdpSession(cdtUrl);\n\n const executionContextCreatedPromise = waitForExecutionContextCreated(cdp);\n\n await setupCdpSessionWithDefaults(cdp);\n\n console.log('Waiting for execution context...');\n const executionContext = await executionContextCreatedPromise;\n\n console.log('Evaluating expression...');\n const result = await cdp.Runtime.evaluate({\n expression: `\n (() => {\n const app = require(\"photoshop\").app;\n const activeDocumentGetter = Object.getOwnPropertyDescriptor(Reflect.getPrototypeOf(app), \"activeDocument\").get;\n return activeDocumentGetter;\n })();\n `,\n uniqueContextId: executionContext.uniqueId,\n });\n\n console.log('Getting properties...');\n const properties = await cdp.Runtime.getProperties({\n objectId: result.result.objectId!,\n accessorPropertiesOnly: false,\n generatePreview: false,\n nonIndexedPropertiesOnly: false,\n ownProperties: false,\n });\n\n const _functionLocation = properties.internalProperties?.find((property: any) => property.name === '[[FunctionLocation]]')?.value;\n const scopes = properties.internalProperties?.find((property: any) => property.name === '[[Scopes]]')?.value;\n\n const scopesProperties = await cdp.Runtime.getProperties({\n objectId: scopes!.objectId!,\n ownProperties: true,\n });\n\n const allScopesResolved = await Promise.all(\n scopesProperties.result.map((property: any) => cdp.Runtime.getProperties({\n objectId: property.value!.objectId!,\n ownProperties: true,\n })),\n );\n\n const dump = {\n subject: result.result,\n properties,\n scopes: allScopesResolved,\n };\n\n const dumpPath = path.resolve(process.cwd(), 'dump.json');\n await fs.writeFile(dumpPath, JSON.stringify(dump, null, 2));\n console.log(`\\nDump written to: ${dumpPath}`);\n}\n\n// Handle actions\nif (action === 'open-devtools') {\n await openDevtools();\n}\nelse if (action === 'dump-object') {\n await dumpObject();\n}\n\nprocess.on('SIGINT', () => {\n console.log('\\nReceived SIGINT, exiting...');\n process.exit(0);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/open-devtools-session.ts","../src/bin.ts"],"names":["args","__dirname"],"mappings":"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","file":"bin.js","sourcesContent":["import { spawn } from 'node:child_process';\n\n// devtools://devtools/bundled/inspector.html?ws=127.0.0.1:14003/socket/cdt/2676d6dd-528c-4453-ac0d-c5dddf78c4d7\n\nfunction getChromeCommand(): { command: string; args: string[] } {\n const platform = process.platform;\n\n switch (platform) {\n case 'darwin':\n return { command: 'open', args: ['-a', 'Google Chrome'] };\n case 'win32':\n return { command: 'cmd', args: ['/c', 'start', 'chrome'] };\n case 'linux':\n // Try common Chrome executable names on Linux\n return { command: 'google-chrome', args: [] };\n default:\n throw new Error(`Unsupported platform: ${platform}`);\n }\n}\n\nexport function openDevtoolsSessionInChrome(cdtUrl: string) {\n const url = new URL('devtools://devtools/bundled/inspector.html');\n url.searchParams.set('ws', cdtUrl.replace('ws://', ''));\n\n return new Promise((resolve, reject) => {\n const { command, args } = getChromeCommand();\n const proc = spawn(command, [...args, url.toString()], {\n shell: process.platform === 'win32',\n });\n proc.on('error', (err) => {\n reject(new Error(`Failed to launch Chrome: ${err.message}`));\n });\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(true);\n }\n else {\n reject(new Error('Failed to open devtools session'));\n }\n });\n });\n}\n","#!/usr/bin/env node\n/* eslint-disable antfu/no-top-level-await */\n/* eslint-disable no-console */\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { setupCdpSession, setupCdpSessionWithUxpDefaults, setupDevtoolsConnection, waitForExecutionContextCreated } from '@bubblydoo/uxp-devtools-common';\nimport arg from 'arg';\nimport { openDevtoolsSessionInChrome } from './open-devtools-session';\n\nError.stackTraceLimit = Infinity;\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction showHelp() {\n console.log(`\nUsage: uxp-cli <action> [options]\n\nActions:\n open-devtools Open Chrome DevTools for a UXP plugin\n dump-object Dump object properties to dump.json (always uses fake plugin)\n\nOptions:\n --plugin-path, -p <path> Path to the UXP plugin directory\n --help, -h Show this help message\n\nExamples:\n # Open devtools with fake plugin\n uxp-cli open-devtools\n\n # Open devtools with custom plugin\n uxp-cli open-devtools --plugin-path ./my-plugin\n\n # Dump object properties (always uses fake plugin)\n uxp-cli dump-object\n`);\n}\n\n// Parse action\nconst args = arg({\n '--help': Boolean,\n '-h': '--help',\n}, {\n permissive: true,\n});\n\nif (args['--help'] || args._.length === 0) {\n showHelp();\n process.exit(args['--help'] ? 0 : 1);\n}\n\nconst action = args._[0];\n\nif (!['open-devtools', 'dump-object'].includes(action)) {\n console.error(`Error: Unknown action \"${action}\"\\n`);\n showHelp();\n process.exit(1);\n}\n\n// Parse action-specific options\nconst actionArgs = arg({\n '--plugin-path': String,\n '--help': Boolean,\n '-p': '--plugin-path',\n '-h': '--help',\n}, {\n argv: args._.slice(1),\n});\n\nif (actionArgs['--help']) {\n showHelp();\n process.exit(0);\n}\n\nasync function getPluginInfo(useFakePlugin: boolean) {\n const fakePluginPath = path.resolve(__dirname, '../../uxp-devtools-common/fake-plugin');\n\n if (useFakePlugin) {\n console.log('Using fake plugin:');\n console.log(` Plugin Path: ${fakePluginPath}`);\n return { pluginPath: fakePluginPath };\n }\n\n let pluginPath = actionArgs['--plugin-path'];\n\n // Default to fake-plugin if not provided\n if (!pluginPath) {\n pluginPath = pluginPath || fakePluginPath;\n\n console.log('Using default fake plugin:');\n console.log(` Plugin Path: ${pluginPath}`);\n }\n\n // Ensure plugin path is absolute\n if (!path.isAbsolute(pluginPath)) {\n pluginPath = path.resolve(process.cwd(), pluginPath);\n }\n\n // Verify plugin directory exists\n try {\n await fs.access(pluginPath);\n }\n catch {\n console.error(`Error: Plugin directory not found: ${pluginPath}`);\n process.exit(1);\n }\n\n const manifest = JSON.parse(await fs.readFile(path.resolve(pluginPath, 'manifest.json'), 'utf8'));\n\n return { pluginPath, pluginId: manifest.id };\n}\n\nasync function openDevtools() {\n const { pluginPath } = await getPluginInfo(false);\n\n console.log('\\nSetting up devtools URL...');\n const devtoolsConnection = await setupDevtoolsConnection(pluginPath);\n console.log(`DevTools URL: ${devtoolsConnection.url}\\n`);\n\n await openDevtoolsSessionInChrome(devtoolsConnection.url);\n console.log('Chrome DevTools opened');\n\n console.log('\\nPress Ctrl+C to exit...');\n await new Promise(() => {});\n}\n\nasync function dumpObject() {\n const { pluginPath } = await getPluginInfo(true);\n\n console.log('\\nSetting up devtools URL...');\n const devtoolsConnection = await setupDevtoolsConnection(pluginPath);\n console.log(`DevTools URL: ${devtoolsConnection.url}\\n`);\n\n console.log('Setting up CDP session...');\n const cdp = await setupCdpSession(devtoolsConnection.url);\n\n const executionContext = await waitForExecutionContextCreated(cdp, async () => {\n await setupCdpSessionWithUxpDefaults(cdp);\n });\n\n console.log('Evaluating expression...');\n const result = await cdp.Runtime.evaluate({\n expression: `\n (() => {\n const app = require(\"photoshop\").app;\n const activeDocumentGetter = Object.getOwnPropertyDescriptor(Reflect.getPrototypeOf(app), \"activeDocument\").get;\n return activeDocumentGetter;\n })();\n `,\n uniqueContextId: executionContext.uniqueId,\n });\n\n console.log('Getting properties...');\n const properties = await cdp.Runtime.getProperties({\n objectId: result.result.objectId!,\n accessorPropertiesOnly: false,\n generatePreview: false,\n nonIndexedPropertiesOnly: false,\n ownProperties: false,\n });\n\n const _functionLocation = properties.internalProperties?.find((property: any) => property.name === '[[FunctionLocation]]')?.value;\n const scopes = properties.internalProperties?.find((property: any) => property.name === '[[Scopes]]')?.value;\n\n const scopesProperties = await cdp.Runtime.getProperties({\n objectId: scopes!.objectId!,\n ownProperties: true,\n });\n\n const allScopesResolved = await Promise.all(\n scopesProperties.result.map((property: any) => cdp.Runtime.getProperties({\n objectId: property.value!.objectId!,\n ownProperties: true,\n })),\n );\n\n const dump = {\n subject: result.result,\n properties,\n scopes: allScopesResolved,\n };\n\n const dumpPath = path.resolve(process.cwd(), 'dump.json');\n await fs.writeFile(dumpPath, JSON.stringify(dump, null, 2));\n console.log(`\\nDump written to: ${dumpPath}`);\n}\n\n// Handle actions\nif (action === 'open-devtools') {\n await openDevtools();\n}\nelse if (action === 'dump-object') {\n await dumpObject();\n}\n\nprocess.on('SIGINT', () => {\n console.log('\\nReceived SIGINT, exiting...');\n process.exit(0);\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bubblydoo/uxp-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"arg": "^5.0.2",
|
|
23
23
|
"chrome-remote-interface": "^0.33.3",
|
|
24
|
-
"@bubblydoo/uxp-
|
|
24
|
+
"@bubblydoo/uxp-devtools-common": "0.0.4"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/chrome-remote-interface": "^0.33.0",
|