@helmai/cli 1.0.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.
- package/bin/helm.js +3 -0
- package/dist/commands/capture.d.ts +6 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +148 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +220 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inject.d.ts +6 -0
- package/dist/commands/inject.d.ts.map +1 -0
- package/dist/commands/inject.js +102 -0
- package/dist/commands/inject.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +18 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +66 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +13 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +105 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detect.d.ts +5 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +143 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/hooks.d.ts +10 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +180 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
package/dist/lib/api.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.register = register;
|
|
4
|
+
exports.login = login;
|
|
5
|
+
exports.inject = inject;
|
|
6
|
+
exports.capture = capture;
|
|
7
|
+
exports.me = me;
|
|
8
|
+
const config_js_1 = require("./config.js");
|
|
9
|
+
async function request(endpoint, options = {}, useAuth = true) {
|
|
10
|
+
const apiUrl = (0, config_js_1.getApiUrl)();
|
|
11
|
+
const url = `${apiUrl}/api/v1${endpoint}`;
|
|
12
|
+
const headers = {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'Accept': 'application/json',
|
|
15
|
+
...(options.headers || {}),
|
|
16
|
+
};
|
|
17
|
+
if (useAuth) {
|
|
18
|
+
const credentials = (0, config_js_1.loadCredentials)();
|
|
19
|
+
if (credentials?.api_key) {
|
|
20
|
+
headers['Authorization'] = `Bearer ${credentials.api_key}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const response = await fetch(url, {
|
|
24
|
+
...options,
|
|
25
|
+
headers,
|
|
26
|
+
});
|
|
27
|
+
const data = await response.json();
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
const error = data;
|
|
30
|
+
throw new Error(error.message || `Request failed: ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
async function register(name, email, password) {
|
|
35
|
+
return request('/auth/register', {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
name,
|
|
39
|
+
email,
|
|
40
|
+
password,
|
|
41
|
+
password_confirmation: password,
|
|
42
|
+
}),
|
|
43
|
+
}, false);
|
|
44
|
+
}
|
|
45
|
+
async function login(email, password) {
|
|
46
|
+
return request('/auth/login', {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
body: JSON.stringify({ email, password }),
|
|
49
|
+
}, false);
|
|
50
|
+
}
|
|
51
|
+
async function inject(data) {
|
|
52
|
+
return request('/inject', {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
body: JSON.stringify(data),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async function capture(data) {
|
|
58
|
+
return request('/capture', {
|
|
59
|
+
method: 'POST',
|
|
60
|
+
body: JSON.stringify(data),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async function me() {
|
|
64
|
+
return request('/me');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";;AAmDA,4BAcC;AAED,sBAQC;AAED,wBAKC;AAED,0BAKC;AAED,gBAEC;AArFD,2CAAyD;AAOzD,KAAK,UAAU,OAAO,CACpB,QAAgB,EAChB,UAAuB,EAAE,EACzB,OAAO,GAAG,IAAI;IAEd,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,GAAG,MAAM,UAAU,QAAQ,EAAE,CAAC;IAE1C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,kBAAkB;QAC5B,GAAG,CAAC,OAAO,CAAC,OAAiC,IAAI,EAAE,CAAC;KACrD,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,IAAA,2BAAe,GAAE,CAAC;QACtC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,WAAW,CAAC,OAAO,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,GAAG,OAAO;QACV,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAkB,CAAC;IAEnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAgB,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAEM,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,KAAa,EACb,QAAgB;IAEhB,OAAO,OAAO,CAAmB,gBAAgB,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI;YACJ,KAAK;YACL,QAAQ;YACR,qBAAqB,EAAE,QAAQ;SAChC,CAAC;KACH,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,KAAK,CACzB,KAAa,EACb,QAAgB;IAEhB,OAAO,OAAO,CAAgB,aAAa,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;KAC1C,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,OAAO,OAAO,CAAiB,SAAS,EAAE;QACxC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,IAAoB;IAChD,OAAO,OAAO,CAAkB,UAAU,EAAE;QAC1C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,EAAE;IACtB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Credentials } from '../types.js';
|
|
2
|
+
export declare function ensureHelmDir(): void;
|
|
3
|
+
export declare function saveCredentials(credentials: Credentials): void;
|
|
4
|
+
export declare function loadCredentials(): Credentials | null;
|
|
5
|
+
export declare function clearCredentials(): void;
|
|
6
|
+
export declare function getApiUrl(): string;
|
|
7
|
+
export interface LocalConfig {
|
|
8
|
+
defaultOrganization?: string;
|
|
9
|
+
defaultIDE?: 'claude-code' | 'cursor';
|
|
10
|
+
}
|
|
11
|
+
export declare function saveConfig(config: LocalConfig): void;
|
|
12
|
+
export declare function loadConfig(): LocalConfig;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAI9D;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAWpD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAclC;AAED,MAAM,WAAW,WAAW;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;CACvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,UAAU,IAAI,WAAW,CAWxC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ensureHelmDir = ensureHelmDir;
|
|
37
|
+
exports.saveCredentials = saveCredentials;
|
|
38
|
+
exports.loadCredentials = loadCredentials;
|
|
39
|
+
exports.clearCredentials = clearCredentials;
|
|
40
|
+
exports.getApiUrl = getApiUrl;
|
|
41
|
+
exports.saveConfig = saveConfig;
|
|
42
|
+
exports.loadConfig = loadConfig;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const HELM_DIR = path.join(os.homedir(), '.helm');
|
|
47
|
+
const CREDENTIALS_FILE = path.join(HELM_DIR, 'credentials');
|
|
48
|
+
const CONFIG_FILE = path.join(HELM_DIR, 'config.json');
|
|
49
|
+
function ensureHelmDir() {
|
|
50
|
+
if (!fs.existsSync(HELM_DIR)) {
|
|
51
|
+
fs.mkdirSync(HELM_DIR, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function saveCredentials(credentials) {
|
|
55
|
+
ensureHelmDir();
|
|
56
|
+
fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2));
|
|
57
|
+
fs.chmodSync(CREDENTIALS_FILE, 0o600); // Read/write only for owner
|
|
58
|
+
}
|
|
59
|
+
function loadCredentials() {
|
|
60
|
+
if (!fs.existsSync(CREDENTIALS_FILE)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const content = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
65
|
+
return JSON.parse(content);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function clearCredentials() {
|
|
72
|
+
if (fs.existsSync(CREDENTIALS_FILE)) {
|
|
73
|
+
fs.unlinkSync(CREDENTIALS_FILE);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function getApiUrl() {
|
|
77
|
+
// Check for environment override first
|
|
78
|
+
if (process.env.HELM_API_URL) {
|
|
79
|
+
return process.env.HELM_API_URL;
|
|
80
|
+
}
|
|
81
|
+
// Load from credentials if available
|
|
82
|
+
const credentials = loadCredentials();
|
|
83
|
+
if (credentials?.api_url) {
|
|
84
|
+
return credentials.api_url;
|
|
85
|
+
}
|
|
86
|
+
// Default to production
|
|
87
|
+
return 'https://helmai.dev';
|
|
88
|
+
}
|
|
89
|
+
function saveConfig(config) {
|
|
90
|
+
ensureHelmDir();
|
|
91
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
92
|
+
}
|
|
93
|
+
function loadConfig() {
|
|
94
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
95
|
+
return {};
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
99
|
+
return JSON.parse(content);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,sCAIC;AAED,0CAIC;AAED,0CAWC;AAED,4CAIC;AAED,8BAcC;AAOD,gCAGC;AAED,gCAWC;AA7ED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAEvD,SAAgB,aAAa;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,WAAwB;IACtD,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;AACrE,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,uCAAuC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,wBAAwB;IACxB,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAOD,SAAgB,UAAU,CAAC,MAAmB;IAC5C,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DetectedIDE } from '../types.js';
|
|
2
|
+
export declare function detectIDEs(): DetectedIDE[];
|
|
3
|
+
export declare function detectStack(cwd?: string): string[];
|
|
4
|
+
export declare function getCurrentBranch(cwd?: string): string | null;
|
|
5
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAqC1C;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CA0DjE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAa3E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.detectIDEs = detectIDEs;
|
|
37
|
+
exports.detectStack = detectStack;
|
|
38
|
+
exports.getCurrentBranch = getCurrentBranch;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
function detectIDEs() {
|
|
43
|
+
const home = os.homedir();
|
|
44
|
+
const ides = [
|
|
45
|
+
{
|
|
46
|
+
name: 'claude-code',
|
|
47
|
+
displayName: 'Claude Code',
|
|
48
|
+
configPath: path.join(home, '.claude', 'settings.json'),
|
|
49
|
+
detected: false,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'cursor',
|
|
53
|
+
displayName: 'Cursor',
|
|
54
|
+
configPath: path.join(home, '.cursor', 'hooks.json'),
|
|
55
|
+
detected: false,
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
// Check for Claude Code
|
|
59
|
+
const claudeDir = path.join(home, '.claude');
|
|
60
|
+
if (fs.existsSync(claudeDir)) {
|
|
61
|
+
ides[0].detected = true;
|
|
62
|
+
}
|
|
63
|
+
// Check for Cursor
|
|
64
|
+
const cursorDir = path.join(home, '.cursor');
|
|
65
|
+
if (fs.existsSync(cursorDir)) {
|
|
66
|
+
ides[1].detected = true;
|
|
67
|
+
}
|
|
68
|
+
// Also check for Cursor app installation on macOS
|
|
69
|
+
const cursorApp = '/Applications/Cursor.app';
|
|
70
|
+
if (fs.existsSync(cursorApp)) {
|
|
71
|
+
ides[1].detected = true;
|
|
72
|
+
}
|
|
73
|
+
return ides;
|
|
74
|
+
}
|
|
75
|
+
function detectStack(cwd = process.cwd()) {
|
|
76
|
+
const stack = [];
|
|
77
|
+
// Check for common files/directories
|
|
78
|
+
const checks = [
|
|
79
|
+
{ files: ['composer.json'], stack: ['php'] },
|
|
80
|
+
{ files: ['artisan'], stack: ['laravel'] },
|
|
81
|
+
{ files: ['package.json'], stack: ['node'] },
|
|
82
|
+
{ files: ['tsconfig.json'], stack: ['typescript'] },
|
|
83
|
+
{ files: ['vite.config.ts', 'vite.config.js'], stack: ['vite'] },
|
|
84
|
+
];
|
|
85
|
+
for (const check of checks) {
|
|
86
|
+
for (const file of check.files) {
|
|
87
|
+
if (fs.existsSync(path.join(cwd, file))) {
|
|
88
|
+
stack.push(...check.stack);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check composer.json for specific packages
|
|
94
|
+
const composerPath = path.join(cwd, 'composer.json');
|
|
95
|
+
if (fs.existsSync(composerPath)) {
|
|
96
|
+
try {
|
|
97
|
+
const composer = JSON.parse(fs.readFileSync(composerPath, 'utf-8'));
|
|
98
|
+
const allDeps = { ...composer.require, ...composer['require-dev'] };
|
|
99
|
+
if (allDeps['pestphp/pest'])
|
|
100
|
+
stack.push('pest');
|
|
101
|
+
if (allDeps['inertiajs/inertia-laravel'])
|
|
102
|
+
stack.push('inertia');
|
|
103
|
+
if (allDeps['livewire/livewire'])
|
|
104
|
+
stack.push('livewire');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Ignore parse errors
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check package.json for specific packages
|
|
111
|
+
const packagePath = path.join(cwd, 'package.json');
|
|
112
|
+
if (fs.existsSync(packagePath)) {
|
|
113
|
+
try {
|
|
114
|
+
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
|
115
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
116
|
+
if (allDeps['react'])
|
|
117
|
+
stack.push('react');
|
|
118
|
+
if (allDeps['vue'])
|
|
119
|
+
stack.push('vue');
|
|
120
|
+
if (allDeps['tailwindcss'])
|
|
121
|
+
stack.push('tailwind');
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore parse errors
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return [...new Set(stack)]; // Remove duplicates
|
|
128
|
+
}
|
|
129
|
+
function getCurrentBranch(cwd = process.cwd()) {
|
|
130
|
+
const gitHead = path.join(cwd, '.git', 'HEAD');
|
|
131
|
+
if (!fs.existsSync(gitHead)) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const content = fs.readFileSync(gitHead, 'utf-8').trim();
|
|
136
|
+
const match = content.match(/^ref: refs\/heads\/(.+)$/);
|
|
137
|
+
return match ? match[1] : null;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IDE } from '../types.js';
|
|
2
|
+
export declare function installHooks(ide: IDE): {
|
|
3
|
+
success: boolean;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function uninstallHooks(ide: IDE): {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAkBvC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAU5E;AAiID,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA+B9E"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.installHooks = installHooks;
|
|
37
|
+
exports.uninstallHooks = uninstallHooks;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
function installHooks(ide) {
|
|
42
|
+
const home = os.homedir();
|
|
43
|
+
if (ide === 'claude-code') {
|
|
44
|
+
return installClaudeCodeHooks(home);
|
|
45
|
+
}
|
|
46
|
+
else if (ide === 'cursor') {
|
|
47
|
+
return installCursorHooks(home);
|
|
48
|
+
}
|
|
49
|
+
return { success: false, message: `Unknown IDE: ${ide}` };
|
|
50
|
+
}
|
|
51
|
+
function installClaudeCodeHooks(home) {
|
|
52
|
+
const claudeDir = path.join(home, '.claude');
|
|
53
|
+
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
54
|
+
// Ensure .claude directory exists
|
|
55
|
+
if (!fs.existsSync(claudeDir)) {
|
|
56
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
// Load existing settings or create new
|
|
59
|
+
let settings = {};
|
|
60
|
+
if (fs.existsSync(settingsPath)) {
|
|
61
|
+
try {
|
|
62
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Start fresh if parse fails
|
|
66
|
+
settings = {};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Initialize hooks if needed
|
|
70
|
+
if (!settings.hooks) {
|
|
71
|
+
settings.hooks = {};
|
|
72
|
+
}
|
|
73
|
+
if (!settings.hooks['user-prompt-submit']) {
|
|
74
|
+
settings.hooks['user-prompt-submit'] = [];
|
|
75
|
+
}
|
|
76
|
+
if (!settings.hooks['assistant-response']) {
|
|
77
|
+
settings.hooks['assistant-response'] = [];
|
|
78
|
+
}
|
|
79
|
+
// Check if helm hooks already exist
|
|
80
|
+
const hasInjectHook = settings.hooks['user-prompt-submit'].some(h => h.command.includes('helm inject'));
|
|
81
|
+
const hasCaptureHook = settings.hooks['assistant-response'].some(h => h.command.includes('helm capture'));
|
|
82
|
+
// Add inject hook if not present
|
|
83
|
+
if (!hasInjectHook) {
|
|
84
|
+
settings.hooks['user-prompt-submit'].push({
|
|
85
|
+
command: 'helm inject',
|
|
86
|
+
timeout: 3000,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Add capture hook if not present
|
|
90
|
+
if (!hasCaptureHook) {
|
|
91
|
+
settings.hooks['assistant-response'].push({
|
|
92
|
+
command: 'helm capture',
|
|
93
|
+
timeout: 3000,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Write settings
|
|
97
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
message: `Claude Code hooks installed at ${settingsPath}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function installCursorHooks(home) {
|
|
104
|
+
const cursorDir = path.join(home, '.cursor');
|
|
105
|
+
const hooksPath = path.join(cursorDir, 'hooks.json');
|
|
106
|
+
// Ensure .cursor directory exists
|
|
107
|
+
if (!fs.existsSync(cursorDir)) {
|
|
108
|
+
fs.mkdirSync(cursorDir, { recursive: true });
|
|
109
|
+
}
|
|
110
|
+
// Load existing hooks or create new
|
|
111
|
+
let hooks = { version: 1, hooks: {} };
|
|
112
|
+
if (fs.existsSync(hooksPath)) {
|
|
113
|
+
try {
|
|
114
|
+
hooks = JSON.parse(fs.readFileSync(hooksPath, 'utf-8'));
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Start fresh if parse fails
|
|
118
|
+
hooks = { version: 1, hooks: {} };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Initialize hooks if needed
|
|
122
|
+
if (!hooks.hooks) {
|
|
123
|
+
hooks.hooks = {};
|
|
124
|
+
}
|
|
125
|
+
if (!hooks.hooks.beforeSubmitPrompt) {
|
|
126
|
+
hooks.hooks.beforeSubmitPrompt = [];
|
|
127
|
+
}
|
|
128
|
+
if (!hooks.hooks.afterResponse) {
|
|
129
|
+
hooks.hooks.afterResponse = [];
|
|
130
|
+
}
|
|
131
|
+
// Check if helm hooks already exist
|
|
132
|
+
const hasInjectHook = hooks.hooks.beforeSubmitPrompt.some(h => h.command.includes('helm inject'));
|
|
133
|
+
const hasCaptureHook = hooks.hooks.afterResponse.some(h => h.command.includes('helm capture'));
|
|
134
|
+
// Add hooks if not present
|
|
135
|
+
if (!hasInjectHook) {
|
|
136
|
+
hooks.hooks.beforeSubmitPrompt.push({
|
|
137
|
+
command: 'helm inject --format=cursor',
|
|
138
|
+
timeout: 3000,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if (!hasCaptureHook) {
|
|
142
|
+
hooks.hooks.afterResponse.push({
|
|
143
|
+
command: 'helm capture --format=cursor',
|
|
144
|
+
timeout: 3000,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Write hooks
|
|
148
|
+
fs.writeFileSync(hooksPath, JSON.stringify(hooks, null, 2));
|
|
149
|
+
return {
|
|
150
|
+
success: true,
|
|
151
|
+
message: `Cursor hooks installed at ${hooksPath}`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function uninstallHooks(ide) {
|
|
155
|
+
const home = os.homedir();
|
|
156
|
+
if (ide === 'claude-code') {
|
|
157
|
+
const settingsPath = path.join(home, '.claude', 'settings.json');
|
|
158
|
+
if (!fs.existsSync(settingsPath)) {
|
|
159
|
+
return { success: true, message: 'No Claude Code settings found' };
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
163
|
+
if (settings.hooks) {
|
|
164
|
+
if (settings.hooks['user-prompt-submit']) {
|
|
165
|
+
settings.hooks['user-prompt-submit'] = settings.hooks['user-prompt-submit'].filter(h => !h.command.includes('helm'));
|
|
166
|
+
}
|
|
167
|
+
if (settings.hooks['assistant-response']) {
|
|
168
|
+
settings.hooks['assistant-response'] = settings.hooks['assistant-response'].filter(h => !h.command.includes('helm'));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
172
|
+
return { success: true, message: 'Claude Code hooks removed' };
|
|
173
|
+
}
|
|
174
|
+
catch (e) {
|
|
175
|
+
return { success: false, message: `Failed to remove hooks: ${e}` };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return { success: false, message: `Unknown IDE: ${ide}` };
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export interface HelmConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
organizationId: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Credentials {
|
|
8
|
+
api_key: string;
|
|
9
|
+
organization_id: string;
|
|
10
|
+
user_id: string;
|
|
11
|
+
api_url: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ApiResponse<T> {
|
|
14
|
+
data?: T;
|
|
15
|
+
message?: string;
|
|
16
|
+
errors?: Record<string, string[]>;
|
|
17
|
+
}
|
|
18
|
+
export interface RegisterResponse {
|
|
19
|
+
user: {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
email: string;
|
|
23
|
+
};
|
|
24
|
+
organization: {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
slug: string;
|
|
28
|
+
};
|
|
29
|
+
api_key: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LoginResponse {
|
|
32
|
+
user: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
email: string;
|
|
36
|
+
};
|
|
37
|
+
organization: {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
slug: string;
|
|
41
|
+
};
|
|
42
|
+
api_key: string;
|
|
43
|
+
}
|
|
44
|
+
export interface InjectRequest {
|
|
45
|
+
prompt: string;
|
|
46
|
+
context?: {
|
|
47
|
+
cwd?: string;
|
|
48
|
+
detected_stack?: string[];
|
|
49
|
+
session_id?: string;
|
|
50
|
+
branch?: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface InjectResponse {
|
|
54
|
+
prompt_id: string;
|
|
55
|
+
enhanced_prompt: string;
|
|
56
|
+
injections: Array<{
|
|
57
|
+
source: string;
|
|
58
|
+
content: string;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
export interface CaptureRequest {
|
|
62
|
+
prompt_id: string;
|
|
63
|
+
code_blocks: Array<{
|
|
64
|
+
language: string;
|
|
65
|
+
content: string;
|
|
66
|
+
file_hint?: string | null;
|
|
67
|
+
}>;
|
|
68
|
+
raw_response?: string | null;
|
|
69
|
+
}
|
|
70
|
+
export interface CaptureResponse {
|
|
71
|
+
response_id: string;
|
|
72
|
+
prompt_id: string;
|
|
73
|
+
code_blocks_count: number;
|
|
74
|
+
}
|
|
75
|
+
export type IDE = 'claude-code' | 'cursor';
|
|
76
|
+
export interface DetectedIDE {
|
|
77
|
+
name: IDE;
|
|
78
|
+
displayName: string;
|
|
79
|
+
configPath: string;
|
|
80
|
+
detected: boolean;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,KAAK,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,GAAG,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,GAAG,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|