magicpath-ai 1.0.5 → 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 +143 -16
- package/dist/cli.js.map +1 -1
- package/dist/util/api.d.ts +4 -0
- package/dist/util/api.js +9 -0
- package/dist/util/api.js.map +1 -0
- package/dist/util/dependencies.d.ts +1 -0
- package/dist/util/dependencies.js +28 -0
- package/dist/util/dependencies.js.map +1 -0
- package/dist/util/ide.d.ts +3 -0
- package/dist/util/ide.js +73 -0
- package/dist/util/ide.js.map +1 -0
- package/dist/util/{index.d.ts → project.d.ts} +1 -5
- package/dist/util/{index.js → project.js} +5 -12
- package/dist/util/project.js.map +1 -0
- package/package.json +1 -1
- package/dist/util/index.js.map +0 -1
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, } 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
|
|
122
|
+
// Step 3: Download project
|
|
33
123
|
const downloadSpinner = ora('📥 Downloading project...').start();
|
|
34
124
|
try {
|
|
35
125
|
filename = await downloadProject(cloneOptions.key);
|
|
@@ -45,22 +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();
|
|
140
|
+
let projectDir;
|
|
61
141
|
try {
|
|
62
|
-
unpackProject(filename,
|
|
63
|
-
unpackSpinner.succeed(`Project unpacked to ${
|
|
142
|
+
projectDir = unpackProject(filename, projectName, finalTargetDir);
|
|
143
|
+
unpackSpinner.succeed(`Project unpacked to ${projectName}`);
|
|
64
144
|
}
|
|
65
145
|
catch (err) {
|
|
66
146
|
unpackSpinner.fail('Failed to unpack project');
|
|
@@ -72,7 +152,54 @@ program
|
|
|
72
152
|
throw GenericError;
|
|
73
153
|
}
|
|
74
154
|
}
|
|
75
|
-
|
|
155
|
+
// Step 5: Install dependencies
|
|
156
|
+
try {
|
|
157
|
+
installDependencies(projectDir);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
if (err instanceof MagicPathError) {
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
throw GenericError;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Step 6: Ask which IDE to open the project in
|
|
168
|
+
const ideResponse = await prompts({
|
|
169
|
+
type: 'select',
|
|
170
|
+
name: 'ide',
|
|
171
|
+
message: 'Which IDE would you like to open the project in?',
|
|
172
|
+
choices: [
|
|
173
|
+
{ title: 'Cursor', value: 'cursor' },
|
|
174
|
+
{ title: 'VS Code', value: 'vscode' },
|
|
175
|
+
{ title: 'WebStorm', value: 'webstorm' },
|
|
176
|
+
{ title: 'Open in file manager', value: 'filemanager' },
|
|
177
|
+
{ title: 'None (just finish)', value: 'none' },
|
|
178
|
+
],
|
|
179
|
+
initial: 0,
|
|
180
|
+
});
|
|
181
|
+
// Step 7: Open in IDE or file manager if selected
|
|
182
|
+
if (ideResponse.ide && ideResponse.ide !== 'none') {
|
|
183
|
+
try {
|
|
184
|
+
if (ideResponse.ide === 'filemanager') {
|
|
185
|
+
openInFileManager(projectDir);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
openInIDE(projectDir, ideResponse.ide);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
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
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
console.log(`\n🎉 Done! Your project is ready to go at: ${projectDir}`);
|
|
76
203
|
});
|
|
77
204
|
program.parse();
|
|
78
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":";AAEA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/util/api.js
ADDED
|
@@ -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"}
|
package/dist/util/ide.js
ADDED
|
@@ -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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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
export declare enum APIVersion {
|
|
2
|
-
V1 = "v1"
|
|
3
|
-
}
|
|
4
|
-
export declare function makeUrl(verison: APIVersion, endpoint: string): string;
|
|
5
1
|
export declare function downloadProject(key: string): Promise<string>;
|
|
6
2
|
export declare function releaseProject(filename: string): void;
|
|
7
|
-
export declare function unpackProject(filename: string, name: string): string;
|
|
3
|
+
export declare function unpackProject(filename: string, name: string, targetDir: string): string;
|
|
@@ -5,14 +5,7 @@ import fs from 'fs-extra';
|
|
|
5
5
|
import AdmZip from 'adm-zip';
|
|
6
6
|
import { v4 as uuidv4 } from 'uuid';
|
|
7
7
|
import { MagicPathError } from './error.js';
|
|
8
|
-
|
|
9
|
-
export var APIVersion;
|
|
10
|
-
(function (APIVersion) {
|
|
11
|
-
APIVersion["V1"] = "v1";
|
|
12
|
-
})(APIVersion || (APIVersion = {}));
|
|
13
|
-
export function makeUrl(verison, endpoint) {
|
|
14
|
-
return `${MAGICPATH_BASE_URL}/${verison}/${endpoint}`;
|
|
15
|
-
}
|
|
8
|
+
import { APIVersion, makeUrl } from './api.js';
|
|
16
9
|
export async function downloadProject(key) {
|
|
17
10
|
const url = makeUrl(APIVersion.V1, 'components/repository');
|
|
18
11
|
const filename = `${uuidv4()}.zip`;
|
|
@@ -50,13 +43,13 @@ export function releaseProject(filename) {
|
|
|
50
43
|
// do nothing
|
|
51
44
|
}
|
|
52
45
|
}
|
|
53
|
-
export function unpackProject(filename, name) {
|
|
46
|
+
export function unpackProject(filename, name, targetDir) {
|
|
54
47
|
try {
|
|
55
|
-
let projectDir = path.join(
|
|
48
|
+
let projectDir = path.join(targetDir, name);
|
|
56
49
|
let counter = 1;
|
|
57
50
|
while (fs.existsSync(projectDir)) {
|
|
58
51
|
counter++;
|
|
59
|
-
projectDir = path.join(
|
|
52
|
+
projectDir = path.join(targetDir, `${name}-${counter}`);
|
|
60
53
|
}
|
|
61
54
|
fs.mkdirSync(projectDir, { recursive: true });
|
|
62
55
|
const zip = new AdmZip(filename);
|
|
@@ -68,4 +61,4 @@ export function unpackProject(filename, name) {
|
|
|
68
61
|
throw new MagicPathError('Failed to extract project. Please try again.');
|
|
69
62
|
}
|
|
70
63
|
}
|
|
71
|
-
//# sourceMappingURL=
|
|
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
package/dist/util/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}
|