magicpath-ai 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -4,8 +4,13 @@ import { program } from 'commander';
4
4
  import { z } from 'zod';
5
5
  import ora from 'ora';
6
6
  import { enableDebugLogger, logger } from './util/logger.js';
7
- import { downloadProject, releaseProject, unpackProject, installDependencies, openInIDE, } from './util/index.js';
8
7
  import { GenericError, MagicPathError } from './util/error.js';
8
+ import { downloadProject, releaseProject, unpackProject, } from './util/project.js';
9
+ import { installDependencies } from './util/dependencies.js';
10
+ import { openInIDE, openInFileManager } from './util/ide.js';
11
+ import path from 'path';
12
+ import os from 'os';
13
+ import fs from 'fs-extra';
9
14
  program.name('magicpath').description('CLI for MagicPath AI').version('1.0.0');
10
15
  const cloneOptionsSchema = z.object({
11
16
  key: z.string(),
@@ -28,8 +33,93 @@ program
28
33
  enableDebugLogger();
29
34
  logger.debug({ options });
30
35
  logger.debug({ options: cloneOptions });
36
+ // Step 1: Ask the user where to drop their fresh code
37
+ const homeDir = os.homedir();
38
+ const commonDirs = [
39
+ { name: 'Documents', path: path.join(homeDir, 'Documents') },
40
+ { name: 'Desktop', path: path.join(homeDir, 'Desktop') },
41
+ { name: 'Downloads', path: path.join(homeDir, 'Downloads') },
42
+ ];
43
+ // Filter to only include directories that actually exist
44
+ const existingDirs = await Promise.all(commonDirs.map(async (dir) => {
45
+ try {
46
+ const exists = await fs.pathExists(dir.path);
47
+ return exists ? dir : null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }));
53
+ const validDirs = existingDirs.filter((dir) => dir !== null);
54
+ // Build choices array starting with current directory and home directory
55
+ const choices = [
56
+ {
57
+ title: `Right here (current folder: ${process.cwd()})`,
58
+ value: process.cwd(),
59
+ },
60
+ { title: `Home directory (${homeDir})`, value: homeDir },
61
+ ];
62
+ // Add existing standard directories
63
+ validDirs.forEach((dir) => {
64
+ choices.push({ title: dir.name, value: dir.path });
65
+ });
66
+ // Add option for custom directory
67
+ choices.push({ title: 'Other (specify custom path)', value: 'custom' });
68
+ const { targetDir } = await prompts({
69
+ type: 'select',
70
+ name: 'targetDir',
71
+ message: 'Where should we put your code?',
72
+ choices,
73
+ initial: 0,
74
+ });
75
+ let finalTargetDir = targetDir;
76
+ // Handle custom directory selection
77
+ if (targetDir === 'custom') {
78
+ const { customPath } = await prompts({
79
+ type: 'text',
80
+ name: 'customPath',
81
+ message: 'Enter the full path where you want to create your project:',
82
+ initial: homeDir,
83
+ validate: (value) => {
84
+ if (!value)
85
+ return 'Please enter a path';
86
+ try {
87
+ // Try to resolve the path to check if it's valid
88
+ const resolvedPath = path.resolve(value);
89
+ return true;
90
+ }
91
+ catch {
92
+ return 'Please enter a valid path';
93
+ }
94
+ },
95
+ });
96
+ if (!customPath) {
97
+ throw new MagicPathError('Project creation cancelled');
98
+ }
99
+ finalTargetDir = path.resolve(customPath);
100
+ // Ensure the custom directory exists, create if it doesn't
101
+ try {
102
+ await fs.ensureDir(finalTargetDir);
103
+ }
104
+ catch (err) {
105
+ throw new MagicPathError(`Failed to create or access directory: ${finalTargetDir}`);
106
+ }
107
+ }
108
+ if (!finalTargetDir) {
109
+ throw new MagicPathError('Download cancelled');
110
+ }
111
+ // Step 2: Ask for project name
112
+ const { projectName } = await prompts({
113
+ type: 'text',
114
+ name: 'projectName',
115
+ message: 'What would you like to name your project?',
116
+ initial: 'magicpath-project',
117
+ });
118
+ if (!projectName) {
119
+ throw new MagicPathError('Project creation cancelled');
120
+ }
31
121
  let filename;
32
- // Step 1: Download project
122
+ // Step 3: Download project
33
123
  const downloadSpinner = ora('📥 Downloading project...').start();
34
124
  try {
35
125
  filename = await downloadProject(cloneOptions.key);
@@ -45,23 +135,12 @@ program
45
135
  throw GenericError;
46
136
  }
47
137
  }
48
- // Step 2: Ask for project name
49
- const response = await prompts({
50
- type: 'text',
51
- name: 'projectName',
52
- message: 'What would you like to name your project?',
53
- initial: 'magicpath-project',
54
- });
55
- if (!response.projectName) {
56
- releaseProject(filename);
57
- throw new MagicPathError('Project creation cancelled');
58
- }
59
138
  // Step 3: Unpack project
60
139
  const unpackSpinner = ora('📦 Unpacking project...').start();
61
140
  let projectDir;
62
141
  try {
63
- projectDir = unpackProject(filename, response.projectName);
64
- unpackSpinner.succeed(`Project unpacked to ${response.projectName}`);
142
+ projectDir = unpackProject(filename, projectName, finalTargetDir);
143
+ unpackSpinner.succeed(`Project unpacked to ${projectName}`);
65
144
  }
66
145
  catch (err) {
67
146
  unpackSpinner.fail('Failed to unpack project');
@@ -73,7 +152,7 @@ program
73
152
  throw GenericError;
74
153
  }
75
154
  }
76
- // Step 4: Install dependencies
155
+ // Step 5: Install dependencies
77
156
  try {
78
157
  installDependencies(projectDir);
79
158
  }
@@ -85,7 +164,7 @@ program
85
164
  throw GenericError;
86
165
  }
87
166
  }
88
- // Step 5: Ask which IDE to open the project in
167
+ // Step 6: Ask which IDE to open the project in
89
168
  const ideResponse = await prompts({
90
169
  type: 'select',
91
170
  name: 'ide',
@@ -94,21 +173,33 @@ program
94
173
  { title: 'Cursor', value: 'cursor' },
95
174
  { title: 'VS Code', value: 'vscode' },
96
175
  { title: 'WebStorm', value: 'webstorm' },
176
+ { title: 'Open in file manager', value: 'filemanager' },
97
177
  { title: 'None (just finish)', value: 'none' },
98
178
  ],
99
179
  initial: 0,
100
180
  });
101
- // Step 6: Open in IDE if selected
181
+ // Step 7: Open in IDE or file manager if selected
102
182
  if (ideResponse.ide && ideResponse.ide !== 'none') {
103
183
  try {
104
- openInIDE(projectDir, ideResponse.ide);
184
+ if (ideResponse.ide === 'filemanager') {
185
+ openInFileManager(projectDir);
186
+ }
187
+ else {
188
+ openInIDE(projectDir, ideResponse.ide);
189
+ }
105
190
  }
106
191
  catch (err) {
107
- // Don't throw error if IDE opening fails, just continue
108
- console.log('⚠️ IDE opening failed, but your project is ready!');
192
+ logger.debug({ err });
193
+ // Don't throw error if opening fails, just continue
194
+ if (err instanceof MagicPathError) {
195
+ console.log(err.message);
196
+ }
197
+ else {
198
+ console.log('⚠️ Opening failed, but your project is ready!');
199
+ }
109
200
  }
110
201
  }
111
- console.log('\n🎉 Done! Your project is ready to go.');
202
+ console.log(`\n🎉 Done! Your project is ready to go at: ${projectDir}`);
112
203
  });
113
204
  program.parse();
114
205
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare enum APIVersion {
2
+ V1 = "v1"
3
+ }
4
+ export declare function makeUrl(verison: APIVersion, endpoint: string): string;
@@ -0,0 +1,9 @@
1
+ const MAGICPATH_BASE_URL = 'https://api.magicpath.ai';
2
+ export var APIVersion;
3
+ (function (APIVersion) {
4
+ APIVersion["V1"] = "v1";
5
+ })(APIVersion || (APIVersion = {}));
6
+ export function makeUrl(verison, endpoint) {
7
+ return `${MAGICPATH_BASE_URL}/${verison}/${endpoint}`;
8
+ }
9
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/util/api.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAEtD,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,uBAAS,CAAA;AACX,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED,MAAM,UAAU,OAAO,CAAC,OAAmB,EAAE,QAAgB;IAC3D,OAAO,GAAG,kBAAkB,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function installDependencies(projectDir: string): void;
@@ -0,0 +1,28 @@
1
+ import { execSync } from 'child_process';
2
+ import ora from 'ora';
3
+ import { MagicPathError } from './error.js';
4
+ export function installDependencies(projectDir) {
5
+ let hasYarn = false;
6
+ try {
7
+ execSync('yarn --version', { stdio: 'ignore' });
8
+ hasYarn = true;
9
+ }
10
+ catch {
11
+ hasYarn = false;
12
+ }
13
+ const packageManager = hasYarn ? 'yarn' : 'npm';
14
+ const installSpinner = ora(`📦 Installing dependencies using ${packageManager}...`).start();
15
+ try {
16
+ const command = hasYarn ? 'yarn install' : 'npm install';
17
+ execSync(command, {
18
+ cwd: projectDir,
19
+ stdio: 'ignore', // Changed to ignore to avoid conflicts with spinner
20
+ });
21
+ installSpinner.succeed('Dependencies installed successfully!');
22
+ }
23
+ catch (err) {
24
+ installSpinner.fail('Failed to install dependencies');
25
+ throw new MagicPathError('Failed to install dependencies. Please check your internet connection and try again.');
26
+ }
27
+ }
28
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/util/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,cAAc,GAAG,GAAG,CACxB,oCAAoC,cAAc,KAAK,CACxD,CAAC,KAAK,EAAE,CAAC;IAEV,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;QAEzD,QAAQ,CAAC,OAAO,EAAE;YAChB,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,QAAQ,EAAE,oDAAoD;SACtE,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACtD,MAAM,IAAI,cAAc,CACtB,sFAAsF,CACvF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type WebIDE = 'vscode' | 'cursor' | 'webstorm';
2
+ export declare function openInIDE(projectDir: string, ide: WebIDE): void;
3
+ export declare function openInFileManager(projectDir: string): void;
@@ -0,0 +1,73 @@
1
+ import { execSync } from 'child_process';
2
+ import ora from 'ora';
3
+ import { MagicPathError } from './error.js';
4
+ export function openInIDE(projectDir, ide) {
5
+ const ideNames = {
6
+ vscode: 'VS Code',
7
+ cursor: 'Cursor',
8
+ webstorm: 'WebStorm',
9
+ };
10
+ const ideCommands = {
11
+ vscode: ['code'],
12
+ cursor: ['cursor', 'code'],
13
+ webstorm: ['webstorm', 'web'],
14
+ };
15
+ const openSpinner = ora(`🚀 Opening project in ${ideNames[ide]}...`).start();
16
+ let didOpen = false;
17
+ try {
18
+ for (const command of ideCommands[ide]) {
19
+ if (didOpen)
20
+ break;
21
+ try {
22
+ execSync(`${command} .`, {
23
+ cwd: projectDir,
24
+ stdio: 'ignore',
25
+ });
26
+ didOpen = true;
27
+ }
28
+ catch {
29
+ didOpen = false;
30
+ }
31
+ }
32
+ if (!didOpen)
33
+ throw new Error('Failed to open with command.');
34
+ openSpinner.succeed(`Project opened in ${ideNames[ide]}!`);
35
+ }
36
+ catch (err) {
37
+ openSpinner.fail(`Failed to open ${ideNames[ide]}`);
38
+ throw new MagicPathError(`Failed to open project in ${ideNames[ide]}. Make sure ${ideNames[ide]} is installed and available in your PATH.`);
39
+ }
40
+ }
41
+ export function openInFileManager(projectDir) {
42
+ const platform = process.platform;
43
+ let command;
44
+ switch (platform) {
45
+ case 'darwin': // macOS
46
+ command = 'open';
47
+ break;
48
+ case 'win32': // Windows
49
+ command = 'explorer';
50
+ break;
51
+ default: // Linux and others
52
+ command = 'xdg-open';
53
+ break;
54
+ }
55
+ const fileManagerNames = {
56
+ darwin: 'Finder',
57
+ win32: 'File Explorer',
58
+ linux: 'File Manager',
59
+ };
60
+ const fileManagerName = fileManagerNames[platform] || 'File Manager';
61
+ const openSpinner = ora(`📁 Opening project in ${fileManagerName}...`).start();
62
+ try {
63
+ execSync(`${command} "${projectDir}"`, {
64
+ stdio: 'ignore',
65
+ });
66
+ openSpinner.succeed(`Project opened in ${fileManagerName}!`);
67
+ }
68
+ catch (err) {
69
+ openSpinner.fail(`Failed to open ${fileManagerName}`);
70
+ throw new MagicPathError(`Failed to open project in ${fileManagerName}. The file manager may not be available.`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=ide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide.js","sourceRoot":"","sources":["../../src/util/ide.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function downloadProject(key: string): Promise<string>;
2
+ export declare function releaseProject(filename: string): void;
3
+ export declare function unpackProject(filename: string, name: string, targetDir: string): string;
@@ -0,0 +1,64 @@
1
+ import axios from 'axios';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import fs from 'fs-extra';
5
+ import AdmZip from 'adm-zip';
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { MagicPathError } from './error.js';
8
+ import { APIVersion, makeUrl } from './api.js';
9
+ export async function downloadProject(key) {
10
+ const url = makeUrl(APIVersion.V1, 'components/repository');
11
+ const filename = `${uuidv4()}.zip`;
12
+ const filepath = path.join(os.tmpdir(), filename);
13
+ try {
14
+ const response = await axios({
15
+ url,
16
+ params: { key },
17
+ method: 'GET',
18
+ responseType: 'stream',
19
+ });
20
+ await fs.ensureDir(path.dirname(filepath));
21
+ await new Promise(async (resolve, reject) => {
22
+ try {
23
+ response.data
24
+ .pipe(fs.createWriteStream(filepath))
25
+ .on('error', reject)
26
+ .once('close', () => resolve(filepath));
27
+ }
28
+ catch (err) {
29
+ reject(err);
30
+ }
31
+ });
32
+ return filepath;
33
+ }
34
+ catch {
35
+ throw new MagicPathError('Failed to download project. Make sure your key is valid.');
36
+ }
37
+ }
38
+ export function releaseProject(filename) {
39
+ try {
40
+ fs.removeSync(filename);
41
+ }
42
+ catch {
43
+ // do nothing
44
+ }
45
+ }
46
+ export function unpackProject(filename, name, targetDir) {
47
+ try {
48
+ let projectDir = path.join(targetDir, name);
49
+ let counter = 1;
50
+ while (fs.existsSync(projectDir)) {
51
+ counter++;
52
+ projectDir = path.join(targetDir, `${name}-${counter}`);
53
+ }
54
+ fs.mkdirSync(projectDir, { recursive: true });
55
+ const zip = new AdmZip(filename);
56
+ zip.extractAllTo(projectDir, true);
57
+ releaseProject(filename);
58
+ return projectDir;
59
+ }
60
+ catch (err) {
61
+ throw new MagicPathError('Failed to extract project. Please try again.');
62
+ }
63
+ }
64
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/util/project.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "magicpath-ai",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Node CLI for MagicPath",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,10 +0,0 @@
1
- export declare enum APIVersion {
2
- V1 = "v1"
3
- }
4
- export declare function makeUrl(verison: APIVersion, endpoint: string): string;
5
- export declare function downloadProject(key: string): Promise<string>;
6
- export declare function releaseProject(filename: string): void;
7
- export declare function unpackProject(filename: string, name: string): string;
8
- export declare function installDependencies(projectDir: string): void;
9
- export type WebIDE = 'vscode' | 'cursor' | 'webstorm';
10
- export declare function openInIDE(projectDir: string, ide: WebIDE): void;
@@ -1,121 +0,0 @@
1
- import axios from 'axios';
2
- import path from 'path';
3
- import os from 'os';
4
- import fs from 'fs-extra';
5
- import AdmZip from 'adm-zip';
6
- import { v4 as uuidv4 } from 'uuid';
7
- import { execSync } from 'child_process';
8
- import ora from 'ora';
9
- import { MagicPathError } from './error.js';
10
- const MAGICPATH_BASE_URL = 'https://api.magicpath.ai';
11
- export var APIVersion;
12
- (function (APIVersion) {
13
- APIVersion["V1"] = "v1";
14
- })(APIVersion || (APIVersion = {}));
15
- export function makeUrl(verison, endpoint) {
16
- return `${MAGICPATH_BASE_URL}/${verison}/${endpoint}`;
17
- }
18
- export async function downloadProject(key) {
19
- const url = makeUrl(APIVersion.V1, 'components/repository');
20
- const filename = `${uuidv4()}.zip`;
21
- const filepath = path.join(os.tmpdir(), filename);
22
- try {
23
- const response = await axios({
24
- url,
25
- params: { key },
26
- method: 'GET',
27
- responseType: 'stream',
28
- });
29
- await fs.ensureDir(path.dirname(filepath));
30
- await new Promise(async (resolve, reject) => {
31
- try {
32
- response.data
33
- .pipe(fs.createWriteStream(filepath))
34
- .on('error', reject)
35
- .once('close', () => resolve(filepath));
36
- }
37
- catch (err) {
38
- reject(err);
39
- }
40
- });
41
- return filepath;
42
- }
43
- catch {
44
- throw new MagicPathError('Failed to download project. Make sure your key is valid.');
45
- }
46
- }
47
- export function releaseProject(filename) {
48
- try {
49
- fs.removeSync(filename);
50
- }
51
- catch {
52
- // do nothing
53
- }
54
- }
55
- export function unpackProject(filename, name) {
56
- try {
57
- let projectDir = path.join(process.cwd(), name);
58
- let counter = 1;
59
- while (fs.existsSync(projectDir)) {
60
- counter++;
61
- projectDir = path.join(process.cwd(), `${name}-${counter}`);
62
- }
63
- fs.mkdirSync(projectDir, { recursive: true });
64
- const zip = new AdmZip(filename);
65
- zip.extractAllTo(projectDir, true);
66
- releaseProject(filename);
67
- return projectDir;
68
- }
69
- catch (err) {
70
- throw new MagicPathError('Failed to extract project. Please try again.');
71
- }
72
- }
73
- export function installDependencies(projectDir) {
74
- let hasYarn = false;
75
- try {
76
- execSync('yarn --version', { stdio: 'ignore' });
77
- hasYarn = true;
78
- }
79
- catch {
80
- hasYarn = false;
81
- }
82
- const packageManager = hasYarn ? 'yarn' : 'npm';
83
- const installSpinner = ora(`📦 Installing dependencies using ${packageManager}...`).start();
84
- try {
85
- const command = hasYarn ? 'yarn install' : 'npm install';
86
- execSync(command, {
87
- cwd: projectDir,
88
- stdio: 'ignore', // Changed to ignore to avoid conflicts with spinner
89
- });
90
- installSpinner.succeed('Dependencies installed successfully!');
91
- }
92
- catch (err) {
93
- installSpinner.fail('Failed to install dependencies');
94
- throw new MagicPathError('Failed to install dependencies. Please check your internet connection and try again.');
95
- }
96
- }
97
- export function openInIDE(projectDir, ide) {
98
- const ideCommands = {
99
- vscode: 'code .',
100
- cursor: 'cursor .',
101
- webstorm: 'webstorm .',
102
- };
103
- const ideNames = {
104
- vscode: 'VS Code',
105
- cursor: 'Cursor',
106
- webstorm: 'WebStorm',
107
- };
108
- const openSpinner = ora(`🚀 Opening project in ${ideNames[ide]}...`).start();
109
- try {
110
- execSync(ideCommands[ide], {
111
- cwd: projectDir,
112
- stdio: 'ignore',
113
- });
114
- openSpinner.succeed(`Project opened in ${ideNames[ide]}!`);
115
- }
116
- catch (err) {
117
- openSpinner.fail(`Failed to open ${ideNames[ide]}`);
118
- throw new MagicPathError(`Failed to open project in ${ideNames[ide]}. Make sure ${ideNames[ide]} is installed and available in your PATH.`);
119
- }
120
- }
121
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}