index.cjs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. "use strict";
  2. var __defProp = Object.defineProperty;
  3. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  4. var __getOwnPropNames = Object.getOwnPropertyNames;
  5. var __hasOwnProp = Object.prototype.hasOwnProperty;
  6. var __export = (target2, all) => {
  7. for (var name in all)
  8. __defProp(target2, name, { get: all[name], enumerable: true });
  9. };
  10. var __copyProps = (to, from, except, desc) => {
  11. if (from && typeof from === "object" || typeof from === "function") {
  12. for (let key of __getOwnPropNames(from))
  13. if (!__hasOwnProp.call(to, key) && key !== except)
  14. __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  15. }
  16. return to;
  17. };
  18. var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  19. // src/index.ts
  20. var index_exports = {};
  21. __export(index_exports, {
  22. DevToolsMessagingEvents: () => DevToolsMessagingEvents,
  23. VueDevToolsVuePlugin: () => VueDevToolsVuePlugin,
  24. createDevToolsStateContext: () => createDevToolsStateContext,
  25. createViteClientRpc: () => createViteClientRpc,
  26. createViteServerRpc: () => createViteServerRpc,
  27. functions: () => functions,
  28. getDevToolsClientUrl: () => getDevToolsClientUrl,
  29. onDevToolsConnected: () => onDevToolsConnected,
  30. onRpcConnected: () => onRpcConnected,
  31. onRpcSeverReady: () => onRpcSeverReady,
  32. onViteRpcConnected: () => onViteRpcConnected,
  33. refreshCurrentPageData: () => refreshCurrentPageData,
  34. rpc: () => rpc,
  35. rpcServer: () => rpcServer,
  36. setDevToolsClientUrl: () => setDevToolsClientUrl,
  37. useDevToolsState: () => useDevToolsState,
  38. viteRpc: () => viteRpc,
  39. viteRpcFunctions: () => viteRpcFunctions
  40. });
  41. module.exports = __toCommonJS(index_exports);
  42. // src/client.ts
  43. var import_devtools_shared = require("@vue/devtools-shared");
  44. function setDevToolsClientUrl(url) {
  45. import_devtools_shared.target.__VUE_DEVTOOLS_CLIENT_URL__ = url;
  46. }
  47. function getDevToolsClientUrl() {
  48. var _a;
  49. return (_a = import_devtools_shared.target.__VUE_DEVTOOLS_CLIENT_URL__) != null ? _a : (() => {
  50. if (import_devtools_shared.isBrowser) {
  51. const devtoolsMeta = document.querySelector("meta[name=__VUE_DEVTOOLS_CLIENT_URL__]");
  52. if (devtoolsMeta)
  53. return devtoolsMeta.getAttribute("content");
  54. }
  55. return "";
  56. })();
  57. }
  58. // src/rpc/global.ts
  59. var import_devtools_kit = require("@vue/devtools-kit");
  60. // ../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs
  61. function flatHooks(configHooks, hooks3 = {}, parentName) {
  62. for (const key in configHooks) {
  63. const subHook = configHooks[key];
  64. const name = parentName ? `${parentName}:${key}` : key;
  65. if (typeof subHook === "object" && subHook !== null) {
  66. flatHooks(subHook, hooks3, name);
  67. } else if (typeof subHook === "function") {
  68. hooks3[name] = subHook;
  69. }
  70. }
  71. return hooks3;
  72. }
  73. var defaultTask = { run: (function_) => function_() };
  74. var _createTask = () => defaultTask;
  75. var createTask = typeof console.createTask !== "undefined" ? console.createTask : _createTask;
  76. function serialTaskCaller(hooks3, args) {
  77. const name = args.shift();
  78. const task = createTask(name);
  79. return hooks3.reduce(
  80. (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),
  81. Promise.resolve()
  82. );
  83. }
  84. function parallelTaskCaller(hooks3, args) {
  85. const name = args.shift();
  86. const task = createTask(name);
  87. return Promise.all(hooks3.map((hook) => task.run(() => hook(...args))));
  88. }
  89. function callEachWith(callbacks, arg0) {
  90. for (const callback of [...callbacks]) {
  91. callback(arg0);
  92. }
  93. }
  94. var Hookable = class {
  95. constructor() {
  96. this._hooks = {};
  97. this._before = void 0;
  98. this._after = void 0;
  99. this._deprecatedMessages = void 0;
  100. this._deprecatedHooks = {};
  101. this.hook = this.hook.bind(this);
  102. this.callHook = this.callHook.bind(this);
  103. this.callHookWith = this.callHookWith.bind(this);
  104. }
  105. hook(name, function_, options = {}) {
  106. if (!name || typeof function_ !== "function") {
  107. return () => {
  108. };
  109. }
  110. const originalName = name;
  111. let dep;
  112. while (this._deprecatedHooks[name]) {
  113. dep = this._deprecatedHooks[name];
  114. name = dep.to;
  115. }
  116. if (dep && !options.allowDeprecated) {
  117. let message = dep.message;
  118. if (!message) {
  119. message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : "");
  120. }
  121. if (!this._deprecatedMessages) {
  122. this._deprecatedMessages = /* @__PURE__ */ new Set();
  123. }
  124. if (!this._deprecatedMessages.has(message)) {
  125. console.warn(message);
  126. this._deprecatedMessages.add(message);
  127. }
  128. }
  129. if (!function_.name) {
  130. try {
  131. Object.defineProperty(function_, "name", {
  132. get: () => "_" + name.replace(/\W+/g, "_") + "_hook_cb",
  133. configurable: true
  134. });
  135. } catch (e) {
  136. }
  137. }
  138. this._hooks[name] = this._hooks[name] || [];
  139. this._hooks[name].push(function_);
  140. return () => {
  141. if (function_) {
  142. this.removeHook(name, function_);
  143. function_ = void 0;
  144. }
  145. };
  146. }
  147. hookOnce(name, function_) {
  148. let _unreg;
  149. let _function = (...arguments_) => {
  150. if (typeof _unreg === "function") {
  151. _unreg();
  152. }
  153. _unreg = void 0;
  154. _function = void 0;
  155. return function_(...arguments_);
  156. };
  157. _unreg = this.hook(name, _function);
  158. return _unreg;
  159. }
  160. removeHook(name, function_) {
  161. if (this._hooks[name]) {
  162. const index = this._hooks[name].indexOf(function_);
  163. if (index !== -1) {
  164. this._hooks[name].splice(index, 1);
  165. }
  166. if (this._hooks[name].length === 0) {
  167. delete this._hooks[name];
  168. }
  169. }
  170. }
  171. deprecateHook(name, deprecated) {
  172. this._deprecatedHooks[name] = typeof deprecated === "string" ? { to: deprecated } : deprecated;
  173. const _hooks = this._hooks[name] || [];
  174. delete this._hooks[name];
  175. for (const hook of _hooks) {
  176. this.hook(name, hook);
  177. }
  178. }
  179. deprecateHooks(deprecatedHooks) {
  180. Object.assign(this._deprecatedHooks, deprecatedHooks);
  181. for (const name in deprecatedHooks) {
  182. this.deprecateHook(name, deprecatedHooks[name]);
  183. }
  184. }
  185. addHooks(configHooks) {
  186. const hooks3 = flatHooks(configHooks);
  187. const removeFns = Object.keys(hooks3).map(
  188. (key) => this.hook(key, hooks3[key])
  189. );
  190. return () => {
  191. for (const unreg of removeFns.splice(0, removeFns.length)) {
  192. unreg();
  193. }
  194. };
  195. }
  196. removeHooks(configHooks) {
  197. const hooks3 = flatHooks(configHooks);
  198. for (const key in hooks3) {
  199. this.removeHook(key, hooks3[key]);
  200. }
  201. }
  202. removeAllHooks() {
  203. for (const key in this._hooks) {
  204. delete this._hooks[key];
  205. }
  206. }
  207. callHook(name, ...arguments_) {
  208. arguments_.unshift(name);
  209. return this.callHookWith(serialTaskCaller, name, ...arguments_);
  210. }
  211. callHookParallel(name, ...arguments_) {
  212. arguments_.unshift(name);
  213. return this.callHookWith(parallelTaskCaller, name, ...arguments_);
  214. }
  215. callHookWith(caller, name, ...arguments_) {
  216. const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;
  217. if (this._before) {
  218. callEachWith(this._before, event);
  219. }
  220. const result = caller(
  221. name in this._hooks ? [...this._hooks[name]] : [],
  222. arguments_
  223. );
  224. if (result instanceof Promise) {
  225. return result.finally(() => {
  226. if (this._after && event) {
  227. callEachWith(this._after, event);
  228. }
  229. });
  230. }
  231. if (this._after && event) {
  232. callEachWith(this._after, event);
  233. }
  234. return result;
  235. }
  236. beforeEach(function_) {
  237. this._before = this._before || [];
  238. this._before.push(function_);
  239. return () => {
  240. if (this._before !== void 0) {
  241. const index = this._before.indexOf(function_);
  242. if (index !== -1) {
  243. this._before.splice(index, 1);
  244. }
  245. }
  246. };
  247. }
  248. afterEach(function_) {
  249. this._after = this._after || [];
  250. this._after.push(function_);
  251. return () => {
  252. if (this._after !== void 0) {
  253. const index = this._after.indexOf(function_);
  254. if (index !== -1) {
  255. this._after.splice(index, 1);
  256. }
  257. }
  258. };
  259. }
  260. };
  261. function createHooks() {
  262. return new Hookable();
  263. }
  264. // src/rpc/global.ts
  265. var hooks = createHooks();
  266. var DevToolsMessagingEvents = /* @__PURE__ */ ((DevToolsMessagingEvents2) => {
  267. DevToolsMessagingEvents2["INSPECTOR_TREE_UPDATED"] = "inspector-tree-updated";
  268. DevToolsMessagingEvents2["INSPECTOR_STATE_UPDATED"] = "inspector-state-updated";
  269. DevToolsMessagingEvents2["DEVTOOLS_STATE_UPDATED"] = "devtools-state-updated";
  270. DevToolsMessagingEvents2["ROUTER_INFO_UPDATED"] = "router-info-updated";
  271. DevToolsMessagingEvents2["TIMELINE_EVENT_UPDATED"] = "timeline-event-updated";
  272. DevToolsMessagingEvents2["INSPECTOR_UPDATED"] = "inspector-updated";
  273. DevToolsMessagingEvents2["ACTIVE_APP_UNMOUNTED"] = "active-app-updated";
  274. DevToolsMessagingEvents2["DESTROY_DEVTOOLS_CLIENT"] = "destroy-devtools-client";
  275. DevToolsMessagingEvents2["RELOAD_DEVTOOLS_CLIENT"] = "reload-devtools-client";
  276. return DevToolsMessagingEvents2;
  277. })(DevToolsMessagingEvents || {});
  278. function getDevToolsState() {
  279. var _a;
  280. const state = import_devtools_kit.devtools.ctx.state;
  281. return {
  282. connected: state.connected,
  283. clientConnected: true,
  284. vueVersion: ((_a = state == null ? void 0 : state.activeAppRecord) == null ? void 0 : _a.version) || "",
  285. tabs: state.tabs,
  286. commands: state.commands,
  287. vitePluginDetected: state.vitePluginDetected,
  288. appRecords: state.appRecords.map((item) => ({
  289. id: item.id,
  290. name: item.name,
  291. version: item.version,
  292. routerId: item.routerId
  293. })),
  294. activeAppRecordId: state.activeAppRecordId,
  295. timelineLayersState: state.timelineLayersState
  296. };
  297. }
  298. var functions = {
  299. on: (event, handler) => {
  300. hooks.hook(event, handler);
  301. },
  302. off: (event, handler) => {
  303. hooks.removeHook(event, handler);
  304. },
  305. once: (event, handler) => {
  306. hooks.hookOnce(event, handler);
  307. },
  308. emit: (event, ...args) => {
  309. hooks.callHook(event, ...args);
  310. },
  311. heartbeat: () => {
  312. return true;
  313. },
  314. devtoolsState: () => {
  315. return getDevToolsState();
  316. },
  317. async getInspectorTree(payload) {
  318. const res = await import_devtools_kit.devtools.ctx.api.getInspectorTree(payload);
  319. return (0, import_devtools_kit.stringify)(res);
  320. },
  321. async getInspectorState(payload) {
  322. const inspector = (0, import_devtools_kit.getInspector)(payload.inspectorId);
  323. if (inspector)
  324. inspector.selectedNodeId = payload.nodeId;
  325. const res = await import_devtools_kit.devtools.ctx.api.getInspectorState(payload);
  326. return (0, import_devtools_kit.stringify)(res);
  327. },
  328. async editInspectorState(payload) {
  329. return await import_devtools_kit.devtools.ctx.api.editInspectorState(payload);
  330. },
  331. sendInspectorState(id) {
  332. return import_devtools_kit.devtools.ctx.api.sendInspectorState(id);
  333. },
  334. inspectComponentInspector() {
  335. return import_devtools_kit.devtools.ctx.api.inspectComponentInspector();
  336. },
  337. cancelInspectComponentInspector() {
  338. return import_devtools_kit.devtools.ctx.api.cancelInspectComponentInspector();
  339. },
  340. getComponentRenderCode(id) {
  341. return import_devtools_kit.devtools.ctx.api.getComponentRenderCode(id);
  342. },
  343. scrollToComponent(id) {
  344. return import_devtools_kit.devtools.ctx.api.scrollToComponent(id);
  345. },
  346. inspectDOM(id) {
  347. return import_devtools_kit.devtools.ctx.api.inspectDOM(id);
  348. },
  349. getInspectorNodeActions(id) {
  350. return (0, import_devtools_kit.getInspectorNodeActions)(id);
  351. },
  352. getInspectorActions(id) {
  353. return (0, import_devtools_kit.getInspectorActions)(id);
  354. },
  355. updateTimelineLayersState(state) {
  356. return (0, import_devtools_kit.updateTimelineLayersState)(state);
  357. },
  358. callInspectorNodeAction(inspectorId, actionIndex, nodeId) {
  359. var _a;
  360. const nodeActions = (0, import_devtools_kit.getInspectorNodeActions)(inspectorId);
  361. if (nodeActions == null ? void 0 : nodeActions.length) {
  362. const item = nodeActions[actionIndex];
  363. (_a = item.action) == null ? void 0 : _a.call(item, nodeId);
  364. }
  365. },
  366. callInspectorAction(inspectorId, actionIndex) {
  367. var _a;
  368. const actions = (0, import_devtools_kit.getInspectorActions)(inspectorId);
  369. if (actions == null ? void 0 : actions.length) {
  370. const item = actions[actionIndex];
  371. (_a = item.action) == null ? void 0 : _a.call(item);
  372. }
  373. },
  374. openInEditor(options) {
  375. return import_devtools_kit.devtools.ctx.api.openInEditor(options);
  376. },
  377. async checkVueInspectorDetected() {
  378. return !!await import_devtools_kit.devtools.ctx.api.getVueInspector();
  379. },
  380. async enableVueInspector() {
  381. var _a, _b, _c;
  382. const inspector = await ((_c = (_b = (_a = import_devtools_kit.devtools) == null ? void 0 : _a.api) == null ? void 0 : _b.getVueInspector) == null ? void 0 : _c.call(_b));
  383. if (inspector)
  384. await inspector.enable();
  385. },
  386. async toggleApp(id, options) {
  387. return import_devtools_kit.devtools.ctx.api.toggleApp(id, options);
  388. },
  389. updatePluginSettings(pluginId, key, value) {
  390. return import_devtools_kit.devtools.ctx.api.updatePluginSettings(pluginId, key, value);
  391. },
  392. getPluginSettings(pluginId) {
  393. return import_devtools_kit.devtools.ctx.api.getPluginSettings(pluginId);
  394. },
  395. getRouterInfo() {
  396. return import_devtools_kit.devtoolsRouterInfo;
  397. },
  398. navigate(path) {
  399. var _a;
  400. return (_a = import_devtools_kit.devtoolsRouter.value) == null ? void 0 : _a.push(path).catch(() => ({}));
  401. },
  402. getMatchedRoutes(path) {
  403. var _a, _b, _c;
  404. const c = console.warn;
  405. console.warn = () => {
  406. };
  407. const matched = (_c = (_b = (_a = import_devtools_kit.devtoolsRouter.value) == null ? void 0 : _a.resolve) == null ? void 0 : _b.call(_a, {
  408. path: path || "/"
  409. }).matched) != null ? _c : [];
  410. console.warn = c;
  411. return matched;
  412. },
  413. toggleClientConnected(state) {
  414. (0, import_devtools_kit.toggleClientConnected)(state);
  415. },
  416. getCustomInspector() {
  417. return (0, import_devtools_kit.getActiveInspectors)();
  418. },
  419. getInspectorInfo(id) {
  420. return (0, import_devtools_kit.getInspectorInfo)(id);
  421. },
  422. highlighComponent(uid) {
  423. return import_devtools_kit.devtools.ctx.hooks.callHook(import_devtools_kit.DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, { uid });
  424. },
  425. unhighlight() {
  426. return import_devtools_kit.devtools.ctx.hooks.callHook(import_devtools_kit.DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT);
  427. },
  428. updateDevToolsClientDetected(params) {
  429. (0, import_devtools_kit.updateDevToolsClientDetected)(params);
  430. },
  431. // listen to devtools server events
  432. initDevToolsServerListener() {
  433. const rpcServer2 = (0, import_devtools_kit.getRpcServer)();
  434. const broadcast = rpcServer2.broadcast;
  435. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.SEND_INSPECTOR_TREE_TO_CLIENT, (payload) => {
  436. broadcast.emit("inspector-tree-updated" /* INSPECTOR_TREE_UPDATED */, (0, import_devtools_kit.stringify)(payload));
  437. });
  438. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.SEND_INSPECTOR_STATE_TO_CLIENT, (payload) => {
  439. broadcast.emit("inspector-state-updated" /* INSPECTOR_STATE_UPDATED */, (0, import_devtools_kit.stringify)(payload));
  440. });
  441. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.DEVTOOLS_STATE_UPDATED, () => {
  442. broadcast.emit("devtools-state-updated" /* DEVTOOLS_STATE_UPDATED */, getDevToolsState());
  443. });
  444. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.ROUTER_INFO_UPDATED, ({ state }) => {
  445. broadcast.emit("router-info-updated" /* ROUTER_INFO_UPDATED */, state);
  446. });
  447. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.SEND_TIMELINE_EVENT_TO_CLIENT, (payload) => {
  448. broadcast.emit("timeline-event-updated" /* TIMELINE_EVENT_UPDATED */, (0, import_devtools_kit.stringify)(payload));
  449. });
  450. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.SEND_INSPECTOR_TO_CLIENT, (payload) => {
  451. broadcast.emit("inspector-updated" /* INSPECTOR_UPDATED */, payload);
  452. });
  453. import_devtools_kit.devtools.ctx.hooks.hook(import_devtools_kit.DevToolsMessagingHookKeys.SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT, () => {
  454. broadcast.emit("active-app-updated" /* ACTIVE_APP_UNMOUNTED */);
  455. });
  456. }
  457. };
  458. var rpc = new Proxy({
  459. value: {},
  460. functions: {}
  461. }, {
  462. get(target2, property) {
  463. const _rpc = (0, import_devtools_kit.getRpcClient)();
  464. if (property === "value") {
  465. return _rpc;
  466. } else if (property === "functions") {
  467. return _rpc.$functions;
  468. }
  469. }
  470. });
  471. var rpcServer = new Proxy({
  472. value: {},
  473. functions: {}
  474. }, {
  475. get(target2, property) {
  476. const _rpc = (0, import_devtools_kit.getRpcServer)();
  477. if (property === "value") {
  478. return _rpc;
  479. } else if (property === "functions") {
  480. return _rpc.functions;
  481. }
  482. }
  483. });
  484. function onRpcConnected(callback) {
  485. let timer = null;
  486. let retryCount = 0;
  487. function heartbeat() {
  488. var _a, _b;
  489. (_b = (_a = rpc.value) == null ? void 0 : _a.heartbeat) == null ? void 0 : _b.call(_a).then(() => {
  490. callback();
  491. clearTimeout(timer);
  492. }).catch(() => {
  493. });
  494. }
  495. timer = setInterval(() => {
  496. if (retryCount >= 30) {
  497. clearTimeout(timer);
  498. }
  499. retryCount++;
  500. heartbeat();
  501. }, retryCount * 200 + 200);
  502. heartbeat();
  503. }
  504. function onRpcSeverReady(callback) {
  505. let timer = null;
  506. const timeout = 120;
  507. function heartbeat() {
  508. if (rpcServer.value.clients.length > 0) {
  509. callback();
  510. clearTimeout(timer);
  511. }
  512. }
  513. timer = setInterval(() => {
  514. heartbeat();
  515. }, timeout);
  516. }
  517. // src/rpc/vite.ts
  518. var import_devtools_kit2 = require("@vue/devtools-kit");
  519. var hooks2 = createHooks();
  520. var viteRpcFunctions = {
  521. on: (event, handler) => {
  522. hooks2.hook(event, handler);
  523. },
  524. off: (event, handler) => {
  525. hooks2.removeHook(event, handler);
  526. },
  527. once: (event, handler) => {
  528. hooks2.hookOnce(event, handler);
  529. },
  530. emit: (event, ...args) => {
  531. hooks2.callHook(event, ...args);
  532. },
  533. heartbeat: () => {
  534. return true;
  535. }
  536. };
  537. var viteRpc = new Proxy({
  538. value: {},
  539. functions: {}
  540. }, {
  541. get(target2, property) {
  542. const _rpc = (0, import_devtools_kit2.getViteRpcClient)();
  543. if (property === "value") {
  544. return _rpc;
  545. } else if (property === "functions") {
  546. return _rpc == null ? void 0 : _rpc.$functions;
  547. }
  548. }
  549. });
  550. function onViteRpcConnected(callback) {
  551. let timer = null;
  552. function heartbeat() {
  553. var _a, _b;
  554. (_b = (_a = viteRpc.value) == null ? void 0 : _a.heartbeat) == null ? void 0 : _b.call(_a).then(() => {
  555. clearTimeout(timer);
  556. callback();
  557. }).catch(() => ({}));
  558. timer = setTimeout(() => {
  559. heartbeat();
  560. }, 80);
  561. }
  562. heartbeat();
  563. }
  564. function createViteClientRpc() {
  565. (0, import_devtools_kit2.createRpcClient)(viteRpcFunctions, {
  566. preset: "vite"
  567. });
  568. }
  569. function createViteServerRpc(functions2) {
  570. (0, import_devtools_kit2.createRpcServer)(functions2, {
  571. preset: "vite"
  572. });
  573. }
  574. // src/vue-plugin/devtools-state.ts
  575. var import_vue = require("vue");
  576. var VueDevToolsStateSymbol = Symbol.for("__VueDevToolsStateSymbol__");
  577. function VueDevToolsVuePlugin() {
  578. return {
  579. install(app) {
  580. const state = createDevToolsStateContext();
  581. state.getDevToolsState();
  582. app.provide(VueDevToolsStateSymbol, state);
  583. app.config.globalProperties.$getDevToolsState = state.getDevToolsState;
  584. app.config.globalProperties.$disconnectDevToolsClient = () => {
  585. state.clientConnected.value = false;
  586. state.connected.value = false;
  587. };
  588. }
  589. };
  590. }
  591. function createDevToolsStateContext() {
  592. const connected = (0, import_vue.ref)(false);
  593. const clientConnected = (0, import_vue.ref)(false);
  594. const vueVersion = (0, import_vue.ref)("");
  595. const tabs = (0, import_vue.ref)([]);
  596. const commands = (0, import_vue.ref)([]);
  597. const vitePluginDetected = (0, import_vue.ref)(false);
  598. const appRecords = (0, import_vue.ref)([]);
  599. const activeAppRecordId = (0, import_vue.ref)("");
  600. const timelineLayersState = (0, import_vue.ref)({});
  601. function updateState(data) {
  602. connected.value = data.connected;
  603. clientConnected.value = data.clientConnected;
  604. vueVersion.value = data.vueVersion || "";
  605. tabs.value = data.tabs;
  606. commands.value = data.commands;
  607. vitePluginDetected.value = data.vitePluginDetected;
  608. appRecords.value = data.appRecords;
  609. activeAppRecordId.value = data.activeAppRecordId;
  610. timelineLayersState.value = data.timelineLayersState;
  611. }
  612. function getDevToolsState2() {
  613. onRpcConnected(() => {
  614. rpc.value.devtoolsState().then((data) => {
  615. updateState(data);
  616. });
  617. rpc.functions.off("devtools-state-updated" /* DEVTOOLS_STATE_UPDATED */, updateState);
  618. rpc.functions.on("devtools-state-updated" /* DEVTOOLS_STATE_UPDATED */, updateState);
  619. });
  620. }
  621. return {
  622. getDevToolsState: getDevToolsState2,
  623. connected,
  624. clientConnected,
  625. vueVersion,
  626. tabs,
  627. commands,
  628. vitePluginDetected,
  629. appRecords,
  630. activeAppRecordId,
  631. timelineLayersState
  632. };
  633. }
  634. function useDevToolsState() {
  635. return (0, import_vue.inject)(VueDevToolsStateSymbol);
  636. }
  637. var fns = [];
  638. function onDevToolsConnected(fn) {
  639. const { connected, clientConnected } = useDevToolsState();
  640. fns.push(fn);
  641. (0, import_vue.onUnmounted)(() => {
  642. fns.splice(fns.indexOf(fn), 1);
  643. });
  644. const devtoolsReady = (0, import_vue.computed)(() => clientConnected.value && connected.value);
  645. if (devtoolsReady.value) {
  646. fn();
  647. } else {
  648. const stop = (0, import_vue.watch)(devtoolsReady, (v) => {
  649. if (v) {
  650. fn();
  651. stop();
  652. }
  653. });
  654. }
  655. return () => {
  656. fns.splice(fns.indexOf(fn), 1);
  657. };
  658. }
  659. function refreshCurrentPageData() {
  660. fns.forEach((fn) => fn());
  661. }
  662. // Annotate the CommonJS export names for ESM import in node:
  663. 0 && (module.exports = {
  664. DevToolsMessagingEvents,
  665. VueDevToolsVuePlugin,
  666. createDevToolsStateContext,
  667. createViteClientRpc,
  668. createViteServerRpc,
  669. functions,
  670. getDevToolsClientUrl,
  671. onDevToolsConnected,
  672. onRpcConnected,
  673. onRpcSeverReady,
  674. onViteRpcConnected,
  675. refreshCurrentPageData,
  676. rpc,
  677. rpcServer,
  678. setDevToolsClientUrl,
  679. useDevToolsState,
  680. viteRpc,
  681. viteRpcFunctions
  682. });