@unextension/cli 0.0.0 → 0.1.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 (94) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +15 -0
  4. package/dist/__tests__/config.test.d.ts +2 -0
  5. package/dist/__tests__/config.test.d.ts.map +1 -0
  6. package/dist/__tests__/config.test.js +39 -0
  7. package/dist/__tests__/config.test.js.map +1 -0
  8. package/dist/__tests__/shared.test.d.ts +2 -0
  9. package/dist/__tests__/shared.test.d.ts.map +1 -0
  10. package/dist/__tests__/shared.test.js +42 -0
  11. package/dist/__tests__/shared.test.js.map +1 -0
  12. package/dist/build.d.ts +2 -0
  13. package/dist/build.d.ts.map +1 -0
  14. package/dist/build.js +47 -0
  15. package/dist/build.js.map +1 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +35 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/commands/build.d.ts +2 -0
  21. package/dist/commands/build.d.ts.map +1 -0
  22. package/dist/commands/build.js +60 -0
  23. package/dist/commands/build.js.map +1 -0
  24. package/dist/commands/dev.d.ts +2 -0
  25. package/dist/commands/dev.d.ts.map +1 -0
  26. package/dist/commands/dev.js +113 -0
  27. package/dist/commands/dev.js.map +1 -0
  28. package/dist/commands/init.d.ts +2 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +94 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/sync.d.ts +2 -0
  33. package/dist/commands/sync.d.ts.map +1 -0
  34. package/dist/commands/sync.js +16 -0
  35. package/dist/commands/sync.js.map +1 -0
  36. package/dist/config.d.ts +100 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +4 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +2 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/init.d.ts +2 -0
  45. package/dist/init.d.ts.map +1 -0
  46. package/dist/init.js +52 -0
  47. package/dist/init.js.map +1 -0
  48. package/dist/loader.d.ts +3 -0
  49. package/dist/loader.d.ts.map +1 -0
  50. package/dist/loader.js +28 -0
  51. package/dist/loader.js.map +1 -0
  52. package/dist/targets/jetbrains/actions/ListProjectFiles.kt +19 -0
  53. package/dist/targets/jetbrains/actions/Notify.kt +18 -0
  54. package/dist/targets/jetbrains/actions/ReadProjectFile.kt +12 -0
  55. package/dist/targets/jetbrains/actions/RunCommand.kt +25 -0
  56. package/dist/targets/jetbrains/actions/RunScript.kt +57 -0
  57. package/dist/targets/jetbrains/actions/WriteProjectFile.kt +16 -0
  58. package/dist/targets/jetbrains/actions.d.ts +8 -0
  59. package/dist/targets/jetbrains/actions.d.ts.map +1 -0
  60. package/dist/targets/jetbrains/actions.js +39 -0
  61. package/dist/targets/jetbrains/actions.js.map +1 -0
  62. package/dist/targets/jetbrains/index.d.ts +3 -0
  63. package/dist/targets/jetbrains/index.d.ts.map +1 -0
  64. package/dist/targets/jetbrains/index.js +202 -0
  65. package/dist/targets/jetbrains/index.js.map +1 -0
  66. package/dist/targets/jetbrains/toolwindow.d.ts +2 -0
  67. package/dist/targets/jetbrains/toolwindow.d.ts.map +1 -0
  68. package/dist/targets/jetbrains/toolwindow.js +162 -0
  69. package/dist/targets/jetbrains/toolwindow.js.map +1 -0
  70. package/dist/targets/shared.d.ts +5 -0
  71. package/dist/targets/shared.d.ts.map +1 -0
  72. package/dist/targets/shared.js +23 -0
  73. package/dist/targets/shared.js.map +1 -0
  74. package/dist/targets/vscode/actions/globals.js +23 -0
  75. package/dist/targets/vscode/actions/jsconfig.json +11 -0
  76. package/dist/targets/vscode/actions/list-project-files.js +27 -0
  77. package/dist/targets/vscode/actions/notify.js +17 -0
  78. package/dist/targets/vscode/actions/read-project-file.js +24 -0
  79. package/dist/targets/vscode/actions/run-command.js +42 -0
  80. package/dist/targets/vscode/actions/run-script.js +39 -0
  81. package/dist/targets/vscode/actions/write-project-file.js +24 -0
  82. package/dist/targets/vscode/actions.d.ts +2 -0
  83. package/dist/targets/vscode/actions.d.ts.map +1 -0
  84. package/dist/targets/vscode/actions.js +40 -0
  85. package/dist/targets/vscode/actions.js.map +1 -0
  86. package/dist/targets/vscode/extension.d.ts +3 -0
  87. package/dist/targets/vscode/extension.d.ts.map +1 -0
  88. package/dist/targets/vscode/extension.js +107 -0
  89. package/dist/targets/vscode/extension.js.map +1 -0
  90. package/dist/targets/vscode/index.d.ts +3 -0
  91. package/dist/targets/vscode/index.d.ts.map +1 -0
  92. package/dist/targets/vscode/index.js +99 -0
  93. package/dist/targets/vscode/index.js.map +1 -0
  94. package/package.json +44 -2
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @unextension/cli
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`ba1d3e6`](https://github.com/nmerget/unextension/commit/ba1d3e60b6650300196656bcd4e7f0704117613f) Thanks [@nmerget](https://github.com/nmerget)! - Initial release of `@unextension/cli` and `@unextension/bridge`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Nicolas Merget
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @unextension/cli
2
+
3
+ CLI tool for **unextension** — build IDE extensions as web apps and deploy to VS Code and JetBrains from a single codebase.
4
+
5
+ ## Documentation
6
+
7
+ - [Getting Started](https://nmerget.github.io/unextension/getting-started/introduction/)
8
+ - [Configuration](https://nmerget.github.io/unextension/configuration/config-file/)
9
+ - [CLI Reference](https://nmerget.github.io/unextension/reference/cli/)
10
+ - [VS Code Target](https://nmerget.github.io/unextension/targets/vscode/)
11
+ - [JetBrains Target](https://nmerget.github.io/unextension/targets/jetbrains/)
12
+
13
+ ## License
14
+
15
+ [MIT](./LICENSE)
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { defineConfig } from '../config.js';
3
+ describe('defineConfig', () => {
4
+ it('returns the config unchanged', () => {
5
+ const config = defineConfig({
6
+ name: 'my-ext',
7
+ displayName: 'My Extension',
8
+ version: '1.0.0',
9
+ });
10
+ expect(config.name).toBe('my-ext');
11
+ expect(config.displayName).toBe('My Extension');
12
+ expect(config.version).toBe('1.0.0');
13
+ });
14
+ it('accepts optional fields', () => {
15
+ const config = defineConfig({
16
+ name: 'my-ext',
17
+ displayName: 'My Extension',
18
+ version: '1.0.0',
19
+ spa: true,
20
+ scriptsDir: './scripts',
21
+ targets: ['vscode'],
22
+ views: [{ id: 'main', title: 'Main', route: '/' }],
23
+ });
24
+ expect(config.spa).toBe(true);
25
+ expect(config.scriptsDir).toBe('./scripts');
26
+ expect(config.targets).toEqual(['vscode']);
27
+ expect(config.views).toHaveLength(1);
28
+ });
29
+ it('accepts spa as object with shellPath', () => {
30
+ const config = defineConfig({
31
+ name: 'my-ext',
32
+ displayName: 'My Extension',
33
+ version: '1.0.0',
34
+ spa: { shellPath: '_shell.html' },
35
+ });
36
+ expect(config.spa).toEqual({ shellPath: '_shell.html' });
37
+ });
38
+ });
39
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,WAAW;YACvB,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SACnD,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE;SAClC,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shared.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/shared.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { toPascalCase, escapeXml, defaultIconSvg, defaultPluginIconSvg } from '../targets/shared.js';
3
+ describe('toPascalCase', () => {
4
+ it('converts kebab-case to PascalCase', () => {
5
+ expect(toPascalCase('my-view')).toBe('MyView');
6
+ expect(toPascalCase('explorer')).toBe('Explorer');
7
+ expect(toPascalCase('my-long-view-name')).toBe('MyLongViewName');
8
+ });
9
+ it('handles single word', () => {
10
+ expect(toPascalCase('panel')).toBe('Panel');
11
+ });
12
+ });
13
+ describe('escapeXml', () => {
14
+ it('escapes all XML special characters', () => {
15
+ expect(escapeXml('a & b')).toBe('a & b');
16
+ expect(escapeXml('<tag>')).toBe('&lt;tag&gt;');
17
+ expect(escapeXml('"quoted"')).toBe('&quot;quoted&quot;');
18
+ expect(escapeXml("it's")).toBe('it&apos;s');
19
+ });
20
+ it('leaves plain strings unchanged', () => {
21
+ expect(escapeXml('hello world')).toBe('hello world');
22
+ });
23
+ });
24
+ describe('defaultIconSvg', () => {
25
+ it('contains the first letter of the title', () => {
26
+ const svg = defaultIconSvg('Explorer');
27
+ expect(svg).toContain('E');
28
+ expect(svg).toContain('<svg');
29
+ });
30
+ it('uses ? for empty title', () => {
31
+ expect(defaultIconSvg('')).toContain('?');
32
+ });
33
+ });
34
+ describe('defaultPluginIconSvg', () => {
35
+ it('produces a 40x40 SVG with the first letter', () => {
36
+ const svg = defaultPluginIconSvg('Bridge');
37
+ expect(svg).toContain('width="40"');
38
+ expect(svg).toContain('height="40"');
39
+ expect(svg).toContain('B');
40
+ });
41
+ });
42
+ //# sourceMappingURL=shared.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../src/__tests__/shared.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAEpG,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC9C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function build(cwd: string, targets?: string[]): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAKA,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,iBAe1D"}
package/dist/build.js ADDED
@@ -0,0 +1,47 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { loadConfig } from './loader.js';
5
+ export async function build(cwd, targets) {
6
+ const config = await loadConfig(cwd);
7
+ const resolvedTargets = targets?.length ? targets : (config.targets ?? ['vscode', 'jetbrains']);
8
+ console.log(`\n⚡ unextension build — ${config.displayName} v${config.version}\n`);
9
+ if (resolvedTargets.includes('jetbrains')) {
10
+ buildJetBrains(cwd);
11
+ }
12
+ if (resolvedTargets.includes('vscode')) {
13
+ buildVSCode(cwd);
14
+ }
15
+ console.log(`\n✅ Done.\n`);
16
+ }
17
+ function buildJetBrains(cwd) {
18
+ const outDir = path.resolve(cwd, 'output/jetbrains');
19
+ const isWin = os.platform() === 'win32';
20
+ const gradlew = path.join(outDir, isWin ? 'gradlew.bat' : 'gradlew');
21
+ console.log(' 🔨 Building JetBrains plugin...');
22
+ const result = spawnSync(gradlew, ['build'], {
23
+ cwd: outDir,
24
+ stdio: 'inherit',
25
+ shell: isWin,
26
+ });
27
+ if (result.status !== 0) {
28
+ process.exit(result.status ?? 1);
29
+ }
30
+ console.log(' ✓ JetBrains plugin built');
31
+ }
32
+ function buildVSCode(cwd) {
33
+ const outDir = path.resolve(cwd, 'output/vscode');
34
+ const isWin = os.platform() === 'win32';
35
+ const npm = isWin ? 'npm.cmd' : 'npm';
36
+ console.log(' 🔨 Building VS Code extension...');
37
+ const result = spawnSync(npm, ['run', 'build'], {
38
+ cwd: outDir,
39
+ stdio: 'inherit',
40
+ shell: isWin,
41
+ });
42
+ if (result.status !== 0) {
43
+ process.exit(result.status ?? 1);
44
+ }
45
+ console.log(' ✓ VS Code extension built');
46
+ }
47
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,OAAkB;IACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,eAAe,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAA;IAE/F,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;IAEjF,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,cAAc,CAAC,GAAG,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAA;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEpE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;QAC3C,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAA;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;IAErC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;QAC9C,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAC5C,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import cac from 'cac';
3
+ import { sync } from './commands/sync.js';
4
+ import { build } from './commands/build.js';
5
+ import { init } from './commands/init.js';
6
+ import { dev } from './commands/dev.js';
7
+ const cli = cac('unextension');
8
+ cli
9
+ .command('init', 'Initialize unextension config and install required dependencies')
10
+ .option('--cwd <dir>', 'Working directory', { default: process.cwd() })
11
+ .action(async (options) => {
12
+ await init(options.cwd);
13
+ });
14
+ cli
15
+ .command('sync', 'Create/update IDE extension scaffolding from your web app')
16
+ .option('--cwd <dir>', 'Working directory', { default: process.cwd() })
17
+ .action(async (options) => {
18
+ await sync(options.cwd);
19
+ });
20
+ cli
21
+ .command('build [targets...]', 'Build the native IDE extensions (gradle / vscode)')
22
+ .option('--cwd <dir>', 'Working directory', { default: process.cwd() })
23
+ .action(async (targets, options) => {
24
+ await build(options.cwd, targets);
25
+ });
26
+ cli
27
+ .command('dev [targets...]', 'Launch IDE(s) with the extension loaded for development')
28
+ .option('--cwd <dir>', 'Working directory', { default: process.cwd() })
29
+ .action(async (targets, options) => {
30
+ await dev(options.cwd, targets);
31
+ });
32
+ cli.help();
33
+ cli.version('0.0.1');
34
+ cli.parse();
35
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAEvC,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA;AAE9B,GAAG;KACA,OAAO,CAAC,MAAM,EAAE,iEAAiE,CAAC;KAClF,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;IACzC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ,GAAG;KACA,OAAO,CAAC,MAAM,EAAE,2DAA2D,CAAC;KAC5E,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;IACzC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ,GAAG;KACA,OAAO,CAAC,oBAAoB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAAiB,EAAE,OAAwB,EAAE,EAAE;IAC5D,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACnC,CAAC,CAAC,CAAA;AAEJ,GAAG;KACA,OAAO,CAAC,kBAAkB,EAAE,yDAAyD,CAAC;KACtF,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAAiB,EAAE,OAAwB,EAAE,EAAE;IAC5D,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA;AAEJ,GAAG,CAAC,IAAI,EAAE,CAAA;AACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACpB,GAAG,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function build(cwd: string, targets?: string[]): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAKA,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,iBAe1D"}
@@ -0,0 +1,60 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { loadConfig } from '../loader.js';
5
+ export async function build(cwd, targets) {
6
+ const config = await loadConfig(cwd);
7
+ const resolvedTargets = targets?.length ? targets : (config.targets ?? ['vscode', 'jetbrains']);
8
+ console.log(`\n⚡ unextension build — ${config.displayName} v${config.version}\n`);
9
+ if (resolvedTargets.includes('jetbrains')) {
10
+ buildJetBrains(cwd);
11
+ }
12
+ if (resolvedTargets.includes('vscode')) {
13
+ buildVSCode(cwd);
14
+ }
15
+ console.log(`\n✅ Done.\n`);
16
+ }
17
+ function buildJetBrains(cwd) {
18
+ const outDir = path.resolve(cwd, 'output/jetbrains');
19
+ const isWin = os.platform() === 'win32';
20
+ const gradlew = path.join(outDir, isWin ? 'gradlew.bat' : 'gradlew');
21
+ console.log(' 🔨 Building JetBrains plugin...');
22
+ const result = spawnSync(gradlew, ['buildPlugin'], {
23
+ cwd: outDir,
24
+ stdio: 'inherit',
25
+ shell: isWin,
26
+ });
27
+ if (result.error)
28
+ throw result.error;
29
+ if (result.status !== 0) {
30
+ process.exit(result.status ?? 1);
31
+ }
32
+ console.log(' ✓ JetBrains plugin built');
33
+ }
34
+ function buildVSCode(cwd) {
35
+ const outDir = path.resolve(cwd, 'output/vscode');
36
+ const isWin = os.platform() === 'win32';
37
+ const npm = isWin ? 'npm.cmd' : 'npm';
38
+ console.log(' 🔨 Building VS Code extension...');
39
+ const install = spawnSync(npm, ['install'], {
40
+ cwd: outDir,
41
+ stdio: 'inherit',
42
+ shell: isWin,
43
+ });
44
+ if (install.error)
45
+ throw install.error;
46
+ if (install.status !== 0)
47
+ process.exit(install.status ?? 1);
48
+ const result = spawnSync(npm, ['run', 'build'], {
49
+ cwd: outDir,
50
+ stdio: 'inherit',
51
+ shell: isWin,
52
+ });
53
+ if (result.error)
54
+ throw result.error;
55
+ if (result.status !== 0) {
56
+ process.exit(result.status ?? 1);
57
+ }
58
+ console.log(' ✓ VS Code extension built');
59
+ }
60
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function dev(cwd: string, targets?: string[]): Promise<void>;
2
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAMA,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,iBAsBxD"}
@@ -0,0 +1,113 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import fs from 'fs-extra';
4
+ import { spawnSync, spawn } from 'node:child_process';
5
+ import { loadConfig } from '../loader.js';
6
+ export async function dev(cwd, targets) {
7
+ const config = await loadConfig(cwd);
8
+ const resolvedTargets = targets?.length ? targets : (config.targets ?? ['vscode', 'jetbrains']);
9
+ console.log(`\n⚡ unextension dev — ${config.displayName} v${config.version}\n`);
10
+ // Always sync first so output is up to date
11
+ console.log(' 🔄 Syncing extension scaffold...');
12
+ // Pass devMode so generated Kotlin opens DevTools
13
+ const devConfig = { ...config, jetbrains: { ...config.jetbrains, _devMode: true } };
14
+ const { buildVSCode } = await import('../targets/vscode/index.js');
15
+ const { buildJetBrains } = await import('../targets/jetbrains/index.js');
16
+ if (resolvedTargets.includes('vscode'))
17
+ await buildVSCode(devConfig, cwd);
18
+ if (resolvedTargets.includes('jetbrains'))
19
+ await buildJetBrains(devConfig, cwd);
20
+ if (resolvedTargets.includes('jetbrains')) {
21
+ await devJetBrains(cwd);
22
+ }
23
+ if (resolvedTargets.includes('vscode')) {
24
+ await devVSCode(cwd);
25
+ }
26
+ }
27
+ async function devJetBrains(cwd) {
28
+ const outDir = path.resolve(cwd, 'output/jetbrains');
29
+ const isWin = os.platform() === 'win32';
30
+ const gradlew = path.join(outDir, isWin ? 'gradlew.bat' : 'gradlew');
31
+ if (!(await fs.pathExists(gradlew))) {
32
+ throw new Error(`Gradle wrapper not found at ${gradlew}\nRun "unextension sync" first.`);
33
+ }
34
+ console.log(' 🚀 Launching JetBrains IDE with plugin (runIde)...');
35
+ console.log(' This will download the IDE on first run — please be patient.\n');
36
+ const result = spawnSync(gradlew, ['runIde'], {
37
+ cwd: outDir,
38
+ stdio: 'inherit',
39
+ shell: isWin,
40
+ });
41
+ if (result.error)
42
+ throw result.error;
43
+ if (result.status !== 0)
44
+ process.exit(result.status ?? 1);
45
+ }
46
+ async function devVSCode(cwd) {
47
+ const outDir = path.resolve(cwd, 'output/vscode');
48
+ const isWin = os.platform() === 'win32';
49
+ const npm = isWin ? 'npm.cmd' : 'npm';
50
+ if (!(await fs.pathExists(outDir))) {
51
+ throw new Error(`VS Code output not found at ${outDir}\nRun "unextension sync" first.`);
52
+ }
53
+ // Install deps if needed
54
+ const nodeModules = path.join(outDir, 'node_modules');
55
+ if (!(await fs.pathExists(nodeModules))) {
56
+ console.log(' 📦 Installing VS Code extension dependencies...');
57
+ const install = spawnSync(npm, ['install'], {
58
+ cwd: outDir,
59
+ stdio: 'inherit',
60
+ shell: isWin,
61
+ });
62
+ if (install.error)
63
+ throw install.error;
64
+ if (install.status !== 0)
65
+ process.exit(install.status ?? 1);
66
+ }
67
+ // Find the VS Code executable
68
+ const code = resolveCodeExecutable();
69
+ if (!code) {
70
+ console.log(' ⚠️ Could not find VS Code executable (code/code-insiders).');
71
+ console.log(' Install manually: Extensions panel → ··· → Install from VSIX');
72
+ console.log(` Extension folder: ${outDir}`);
73
+ return;
74
+ }
75
+ console.log(' 🚀 Launching VS Code Extension Development Host...');
76
+ const proc = spawn(code, ['--extensionDevelopmentPath', outDir], {
77
+ stdio: 'inherit',
78
+ shell: isWin,
79
+ detached: true,
80
+ });
81
+ proc.unref();
82
+ console.log(' ✓ VS Code launched with extension loaded');
83
+ }
84
+ function resolveCodeExecutable() {
85
+ const isWin = os.platform() === 'win32';
86
+ const candidates = isWin
87
+ ? [
88
+ 'code.cmd',
89
+ 'code-insiders.cmd',
90
+ path.join(process.env['LOCALAPPDATA'] ?? '', 'Programs', 'Microsoft VS Code', 'bin', 'code.cmd'),
91
+ path.join(process.env['LOCALAPPDATA'] ?? '', 'Programs', 'Microsoft VS Code Insiders', 'bin', 'code-insiders.cmd'),
92
+ ]
93
+ : [
94
+ 'code',
95
+ 'code-insiders',
96
+ '/usr/local/bin/code',
97
+ '/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code',
98
+ '/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code-insiders',
99
+ ];
100
+ for (const candidate of candidates) {
101
+ const probe = spawnSync(isWin ? 'where' : 'which', [candidate.includes(path.sep) ? path.basename(candidate) : candidate], {
102
+ encoding: 'utf8',
103
+ shell: isWin,
104
+ });
105
+ if (probe.status === 0 && probe.stdout.trim())
106
+ return candidate;
107
+ // For absolute paths, check existence directly
108
+ if (candidate.includes(path.sep) && fs.existsSync(candidate))
109
+ return candidate;
110
+ }
111
+ return null;
112
+ }
113
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function init(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAYA,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,iBAgFrC"}
@@ -0,0 +1,94 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ const LICENSE_FILES = [
4
+ 'LICENSE',
5
+ 'LICENSE.md',
6
+ 'LICENSE.txt',
7
+ 'LICENCE',
8
+ 'LICENCE.md',
9
+ 'LICENCE.txt',
10
+ ];
11
+ export async function init(cwd) {
12
+ const pkgPath = path.join(cwd, 'package.json');
13
+ const hasTsConfig = await fs.pathExists(path.join(cwd, 'tsconfig.json'));
14
+ // Read fields from package.json if available
15
+ let name = path.basename(cwd);
16
+ let version = '0.0.1';
17
+ let description = '';
18
+ let repository = '';
19
+ let license = '';
20
+ if (await fs.pathExists(pkgPath)) {
21
+ const pkg = await fs.readJson(pkgPath);
22
+ if (pkg.name)
23
+ name = pkg.name.replace(/^@[^/]+\//, ''); // strip scope
24
+ if (pkg.version)
25
+ version = pkg.version;
26
+ if (pkg.description)
27
+ description = pkg.description;
28
+ if (pkg.license)
29
+ license = pkg.license;
30
+ if (pkg.repository) {
31
+ repository = typeof pkg.repository === 'string' ? pkg.repository : (pkg.repository.url ?? '');
32
+ }
33
+ }
34
+ // Detect license file if license not already known
35
+ if (!license) {
36
+ for (const file of LICENSE_FILES) {
37
+ if (await fs.pathExists(path.join(cwd, file))) {
38
+ const content = await fs.readFile(path.join(cwd, file), 'utf8');
39
+ // Best-effort: detect common licenses from file content
40
+ if (/mit license/i.test(content))
41
+ license = 'MIT';
42
+ else if (/apache license.*2\.0/i.test(content))
43
+ license = 'Apache-2.0';
44
+ else if (/gnu general public license.*v3/i.test(content))
45
+ license = 'GPL-3.0';
46
+ else if (/isc license/i.test(content))
47
+ license = 'ISC';
48
+ else if (/bsd 2-clause/i.test(content))
49
+ license = 'BSD-2-Clause';
50
+ else if (/bsd 3-clause/i.test(content))
51
+ license = 'BSD-3-Clause';
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ const configFile = hasTsConfig ? 'unextension.config.ts' : 'unextension.config.js';
57
+ const configPath = path.join(cwd, configFile);
58
+ if (await fs.pathExists(configPath)) {
59
+ console.log(`\n⚠️ ${configFile} already exists, skipping.\n`);
60
+ return;
61
+ }
62
+ const fields = [
63
+ ` name: ${JSON.stringify(name)}`,
64
+ ` displayName: ${JSON.stringify(toDisplayName(name))}`,
65
+ ` publisher: ${JSON.stringify(name)}`,
66
+ ` version: ${JSON.stringify(version)}`,
67
+ ` description: ${JSON.stringify(description)}`,
68
+ ...(repository ? [` repository: ${JSON.stringify(repository)}`] : []),
69
+ ...(license ? [` license: ${JSON.stringify(license)}`] : []),
70
+ ` distDir: './dist'`,
71
+ ` targets: ['vscode', 'jetbrains']`,
72
+ ].join(',\n');
73
+ const configContent = `import { defineConfig } from '@unextension/cli'\n\nexport default defineConfig({\n${fields},\n})\n`;
74
+ await fs.writeFile(configPath, configContent);
75
+ console.log(`\n⚡ unextension init\n`);
76
+ console.log(` ✓ Created ${configFile}`);
77
+ // Add @types/vscode to devDependencies if not present
78
+ if (await fs.pathExists(pkgPath)) {
79
+ const pkg = await fs.readJson(pkgPath);
80
+ const devDeps = pkg.devDependencies || {};
81
+ if (!devDeps['@types/vscode']) {
82
+ devDeps['@types/vscode'] = '1.85.0';
83
+ pkg.devDependencies = devDeps;
84
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
85
+ console.log(` ✓ Added @types/vscode to devDependencies in package.json`);
86
+ console.log(`\n Run your package manager install to install new dependencies.\n`);
87
+ }
88
+ }
89
+ console.log();
90
+ }
91
+ function toDisplayName(name) {
92
+ return name.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
93
+ }
94
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function sync(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,iBAerC"}
@@ -0,0 +1,16 @@
1
+ import { loadConfig } from '../loader.js';
2
+ import { buildVSCode } from '../targets/vscode/index.js';
3
+ import { buildJetBrains } from '../targets/jetbrains/index.js';
4
+ export async function sync(cwd) {
5
+ const config = await loadConfig(cwd);
6
+ const targets = config.targets || ['vscode', 'jetbrains'];
7
+ console.log(`\n⚡ unextension sync — ${config.displayName} v${config.version}\n`);
8
+ if (targets.includes('vscode')) {
9
+ await buildVSCode(config, cwd);
10
+ }
11
+ if (targets.includes('jetbrains')) {
12
+ await buildJetBrains(config, cwd);
13
+ }
14
+ console.log(`\n✅ Done.\n`);
15
+ }
16
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;IAEhF,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAC5B,CAAC"}