@yaonyan/jsr2npm 0.1.8 → 0.1.10
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/jsr2npm.cjs +596 -0
- package/bin/jsr2npm.mjs +71 -29
- package/package.json +11 -5
package/bin/jsr2npm.cjs
ADDED
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (let key of __getOwnPropNames(from))
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
|
|
25
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/config.js
|
|
26
|
+
var import_promises = require("node:fs/promises");
|
|
27
|
+
var import_node_path = require("node:path");
|
|
28
|
+
var import_node_process = __toESM(require("node:process"), 1);
|
|
29
|
+
async function loadConfig(configPath) {
|
|
30
|
+
try {
|
|
31
|
+
const absolutePath = (0, import_node_path.resolve)(import_node_process.default.cwd(), configPath);
|
|
32
|
+
const content = await (0, import_promises.readFile)(absolutePath, "utf-8");
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/converter.js
|
|
40
|
+
var import_dax_sh = __toESM(require("dax-sh"), 1);
|
|
41
|
+
var import_promises4 = require("node:fs/promises");
|
|
42
|
+
var import_node_path4 = require("node:path");
|
|
43
|
+
var import_node_fs = require("node:fs");
|
|
44
|
+
var import_node_process2 = __toESM(require("node:process"), 1);
|
|
45
|
+
|
|
46
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/bundler.js
|
|
47
|
+
var import_promises2 = require("node:fs/promises");
|
|
48
|
+
var import_node_path2 = require("node:path");
|
|
49
|
+
var import_esbuild = require("esbuild");
|
|
50
|
+
async function bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages = [], useBrowserPlatform = false) {
|
|
51
|
+
const entryPath = (0, import_node_path2.join)(process.cwd(), packageDir, inputFile);
|
|
52
|
+
const baseName = outputFile.replace(/\.mjs$/, "");
|
|
53
|
+
const esmOutputPath = (0, import_node_path2.join)(process.cwd(), packageDir, "dist", `${baseName}.mjs`);
|
|
54
|
+
const cjsOutputPath = (0, import_node_path2.join)(process.cwd(), packageDir, "dist", `${baseName}.cjs`);
|
|
55
|
+
const outputDir = esmOutputPath.split("/").slice(0, -1).join("/");
|
|
56
|
+
await (0, import_promises2.mkdir)(outputDir, {
|
|
57
|
+
recursive: true
|
|
58
|
+
});
|
|
59
|
+
const externalList = externalPackages.length > 0 ? externalPackages.join(", ") : "none";
|
|
60
|
+
console.log(` \u{1F4E6} External packages: ${externalList}`);
|
|
61
|
+
const platform = useBrowserPlatform ? "neutral" : "node";
|
|
62
|
+
const esmBanner = useBrowserPlatform ? {} : {
|
|
63
|
+
js: `#!/usr/bin/env node
|
|
64
|
+
import { createRequire } from 'node:module';
|
|
65
|
+
const require = createRequire(import.meta.url);`
|
|
66
|
+
};
|
|
67
|
+
const cjsBanner = useBrowserPlatform ? {} : {
|
|
68
|
+
js: `#!/usr/bin/env node`
|
|
69
|
+
};
|
|
70
|
+
console.log(` \u{1F527} Platform: ${platform}${useBrowserPlatform ? " (browser)" : ""}`);
|
|
71
|
+
await (0, import_esbuild.build)({
|
|
72
|
+
entryPoints: [
|
|
73
|
+
entryPath
|
|
74
|
+
],
|
|
75
|
+
bundle: true,
|
|
76
|
+
platform,
|
|
77
|
+
format: "esm",
|
|
78
|
+
outfile: esmOutputPath,
|
|
79
|
+
external: externalPackages,
|
|
80
|
+
packages: "bundle",
|
|
81
|
+
banner: esmBanner,
|
|
82
|
+
write: true
|
|
83
|
+
});
|
|
84
|
+
await (0, import_esbuild.build)({
|
|
85
|
+
entryPoints: [
|
|
86
|
+
entryPath
|
|
87
|
+
],
|
|
88
|
+
bundle: true,
|
|
89
|
+
platform,
|
|
90
|
+
format: "cjs",
|
|
91
|
+
outfile: cjsOutputPath,
|
|
92
|
+
external: externalPackages,
|
|
93
|
+
packages: "bundle",
|
|
94
|
+
banner: cjsBanner,
|
|
95
|
+
write: true
|
|
96
|
+
});
|
|
97
|
+
console.log(` \u2705 Built ESM: ${baseName}.mjs`);
|
|
98
|
+
console.log(` \u2705 Built CJS: ${baseName}.cjs`);
|
|
99
|
+
}
|
|
100
|
+
async function copyTypeDeclarations(packageDir) {
|
|
101
|
+
console.log("\n\u{1F4DD} Copying TypeScript declarations...");
|
|
102
|
+
const sourceDir = (0, import_node_path2.join)(packageDir, "_dist");
|
|
103
|
+
const targetDir = (0, import_node_path2.join)(packageDir, "dist", "types");
|
|
104
|
+
try {
|
|
105
|
+
await (0, import_promises2.stat)(sourceDir);
|
|
106
|
+
await (0, import_promises2.mkdir)(targetDir, {
|
|
107
|
+
recursive: true
|
|
108
|
+
});
|
|
109
|
+
const entries = await (0, import_promises2.readdir)(sourceDir, {
|
|
110
|
+
withFileTypes: true
|
|
111
|
+
});
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
const source = (0, import_node_path2.join)(sourceDir, entry.name);
|
|
114
|
+
const target = (0, import_node_path2.join)(targetDir, entry.name);
|
|
115
|
+
if (entry.isFile()) {
|
|
116
|
+
await (0, import_promises2.copyFile)(source, target);
|
|
117
|
+
} else if (entry.isDirectory()) {
|
|
118
|
+
await copyDirectory(source, target);
|
|
119
|
+
}
|
|
120
|
+
console.log(` \u2705 Copied ${entry.name}`);
|
|
121
|
+
}
|
|
122
|
+
console.log("\u2705 TypeScript declarations copied");
|
|
123
|
+
} catch {
|
|
124
|
+
console.warn("\u26A0\uFE0F No TypeScript declarations found");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function copyDirectory(source, target) {
|
|
128
|
+
await (0, import_promises2.mkdir)(target, {
|
|
129
|
+
recursive: true
|
|
130
|
+
});
|
|
131
|
+
const entries = await (0, import_promises2.readdir)(source, {
|
|
132
|
+
withFileTypes: true
|
|
133
|
+
});
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
const sourcePath = (0, import_node_path2.join)(source, entry.name);
|
|
136
|
+
const targetPath = (0, import_node_path2.join)(target, entry.name);
|
|
137
|
+
if (entry.isFile()) {
|
|
138
|
+
await (0, import_promises2.copyFile)(sourcePath, targetPath);
|
|
139
|
+
} else if (entry.isDirectory()) {
|
|
140
|
+
await copyDirectory(sourcePath, targetPath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/package-generator.js
|
|
146
|
+
var import_promises3 = require("node:fs/promises");
|
|
147
|
+
var import_node_path3 = require("node:path");
|
|
148
|
+
async function generatePackageJson(packageDir, bin, overrides, allDependencies) {
|
|
149
|
+
console.log("\n\u{1F4CB} Generating package.json...");
|
|
150
|
+
const jsrPkg = await readPackageJson(`${packageDir}/package.json`);
|
|
151
|
+
const denoJson = await readDenoJson(packageDir);
|
|
152
|
+
const dependencies = allDependencies || getNpmDependencies(jsrPkg.dependencies);
|
|
153
|
+
const newPkg = buildPackageJson(jsrPkg, denoJson, dependencies, bin, overrides);
|
|
154
|
+
await (0, import_promises3.writeFile)((0, import_node_path3.join)(packageDir, "dist", "package.json"), JSON.stringify(newPkg, null, 2));
|
|
155
|
+
console.log(`\u2705 Generated package.json with ${Object.keys(dependencies).length} dependencies`);
|
|
156
|
+
}
|
|
157
|
+
async function readPackageJson(path) {
|
|
158
|
+
try {
|
|
159
|
+
const content = await (0, import_promises3.readFile)(path, "utf-8");
|
|
160
|
+
return JSON.parse(content);
|
|
161
|
+
} catch {
|
|
162
|
+
return {
|
|
163
|
+
name: "converted-package",
|
|
164
|
+
version: "1.0.0",
|
|
165
|
+
license: "MIT"
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function readDenoJson(packageDir) {
|
|
170
|
+
for (const file of [
|
|
171
|
+
"deno.json",
|
|
172
|
+
"deno.jsonc"
|
|
173
|
+
]) {
|
|
174
|
+
try {
|
|
175
|
+
const content = await (0, import_promises3.readFile)((0, import_node_path3.join)(packageDir, file), "utf-8");
|
|
176
|
+
console.log(`\u2705 Found ${file}`);
|
|
177
|
+
return JSON.parse(content);
|
|
178
|
+
} catch {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return {};
|
|
183
|
+
}
|
|
184
|
+
function getNpmDependencies(deps) {
|
|
185
|
+
if (!deps || typeof deps !== "object") return {};
|
|
186
|
+
const npmDeps = {};
|
|
187
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
188
|
+
if (!name.startsWith("@jsr/")) {
|
|
189
|
+
npmDeps[name] = String(version);
|
|
190
|
+
console.log(` \u{1F4CC} ${name}: ${version}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return npmDeps;
|
|
194
|
+
}
|
|
195
|
+
function buildPackageJson(jsrPkg, denoJson, dependencies, bin, overrides) {
|
|
196
|
+
const pkg = {
|
|
197
|
+
...jsrPkg,
|
|
198
|
+
dependencies
|
|
199
|
+
};
|
|
200
|
+
delete pkg.type;
|
|
201
|
+
mergeMetadata(pkg, denoJson);
|
|
202
|
+
addBugsUrl(pkg);
|
|
203
|
+
delete pkg._jsr_revision;
|
|
204
|
+
delete pkg.devDependencies;
|
|
205
|
+
buildExports(pkg, denoJson, bin);
|
|
206
|
+
const originalName = String(jsrPkg.name || "package");
|
|
207
|
+
pkg.name = `@jsr2npm/${originalName.split("/").pop()}`;
|
|
208
|
+
applyOverrides(pkg, overrides);
|
|
209
|
+
return pkg;
|
|
210
|
+
}
|
|
211
|
+
function mergeMetadata(pkg, denoJson) {
|
|
212
|
+
const fields = [
|
|
213
|
+
"description",
|
|
214
|
+
"author",
|
|
215
|
+
"license",
|
|
216
|
+
"repository",
|
|
217
|
+
"keywords"
|
|
218
|
+
];
|
|
219
|
+
for (const field of fields) {
|
|
220
|
+
if (denoJson[field] && !pkg[field]) {
|
|
221
|
+
pkg[field] = denoJson[field];
|
|
222
|
+
const extra = field === "keywords" ? ` (${denoJson[field].length} items)` : "";
|
|
223
|
+
console.log(` \u{1F4DD} Using ${field} from deno.json${extra}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function addBugsUrl(pkg) {
|
|
228
|
+
if (!pkg.repository || pkg.bugs) return;
|
|
229
|
+
const repoUrl = typeof pkg.repository === "string" ? pkg.repository : pkg.repository?.url;
|
|
230
|
+
if (!repoUrl) return;
|
|
231
|
+
const cleanUrl = repoUrl.replace(/^git\+/, "").replace(/\.git$/, "");
|
|
232
|
+
pkg.bugs = {
|
|
233
|
+
url: `${cleanUrl}/issues`
|
|
234
|
+
};
|
|
235
|
+
console.log(` \u{1F41B} Added bugs URL`);
|
|
236
|
+
}
|
|
237
|
+
function buildExports(pkg, denoJson, bin) {
|
|
238
|
+
if (bin && Object.keys(bin).length > 0) {
|
|
239
|
+
buildBinExports(pkg, bin);
|
|
240
|
+
} else if (denoJson.exports) {
|
|
241
|
+
buildLibraryExports(pkg, denoJson);
|
|
242
|
+
} else {
|
|
243
|
+
pkg.exports = {
|
|
244
|
+
"./types/*": "./types/*"
|
|
245
|
+
};
|
|
246
|
+
console.log(` \u26A0\uFE0F No exports found, only exposing types`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function buildBinExports(pkg, bin) {
|
|
250
|
+
const binCommands = {};
|
|
251
|
+
const exports2 = {};
|
|
252
|
+
for (const cmdName of Object.keys(bin)) {
|
|
253
|
+
binCommands[cmdName] = `./bin/${cmdName}.mjs`;
|
|
254
|
+
exports2[`./bin/${cmdName}`] = {
|
|
255
|
+
import: `./bin/${cmdName}.mjs`,
|
|
256
|
+
require: `./bin/${cmdName}.cjs`
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
pkg.bin = binCommands;
|
|
260
|
+
const firstCmd = Object.keys(bin)[0];
|
|
261
|
+
exports2["."] = {
|
|
262
|
+
import: `./bin/${firstCmd}.mjs`,
|
|
263
|
+
require: `./bin/${firstCmd}.cjs`
|
|
264
|
+
};
|
|
265
|
+
pkg.exports = exports2;
|
|
266
|
+
pkg.main = `./bin/${firstCmd}.cjs`;
|
|
267
|
+
pkg.module = `./bin/${firstCmd}.mjs`;
|
|
268
|
+
console.log(` \u{1F527} Added bin commands: ${Object.keys(binCommands).join(", ")}`);
|
|
269
|
+
}
|
|
270
|
+
function buildLibraryExports(pkg, denoJson) {
|
|
271
|
+
const exports2 = {};
|
|
272
|
+
const denoExports = denoJson.exports;
|
|
273
|
+
for (const [key, value] of Object.entries(denoExports)) {
|
|
274
|
+
const tsPath = typeof value === "string" ? value : null;
|
|
275
|
+
if (!tsPath) continue;
|
|
276
|
+
const baseName = key === "." ? "index" : key.replace(/^\.\//, "");
|
|
277
|
+
const dtsFile = tsPath.replace(/\.ts$/, ".d.ts").replace(/^\.\//, "");
|
|
278
|
+
exports2[key] = {
|
|
279
|
+
types: `./types/${dtsFile}`,
|
|
280
|
+
import: `./${baseName}.mjs`,
|
|
281
|
+
require: `./${baseName}.cjs`
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
exports2["./types/*"] = "./types/*";
|
|
285
|
+
pkg.exports = exports2;
|
|
286
|
+
const mainExport = exports2["."];
|
|
287
|
+
if (mainExport) {
|
|
288
|
+
pkg.main = mainExport.require;
|
|
289
|
+
pkg.module = mainExport.import;
|
|
290
|
+
}
|
|
291
|
+
console.log(` \u{1F4E6} Built exports for ${Object.keys(denoExports).length} entry points (ESM + CJS)`);
|
|
292
|
+
}
|
|
293
|
+
function applyOverrides(pkg, overrides) {
|
|
294
|
+
if (!overrides) return;
|
|
295
|
+
const fields = [
|
|
296
|
+
"name",
|
|
297
|
+
"version",
|
|
298
|
+
"description",
|
|
299
|
+
"license",
|
|
300
|
+
"author",
|
|
301
|
+
"repository",
|
|
302
|
+
"homepage"
|
|
303
|
+
];
|
|
304
|
+
for (const field of fields) {
|
|
305
|
+
const value = overrides[field];
|
|
306
|
+
if (value) {
|
|
307
|
+
pkg[field] = value;
|
|
308
|
+
console.log(` \u270F\uFE0F Overriding ${field}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (overrides.keywords) {
|
|
312
|
+
pkg.keywords = overrides.keywords;
|
|
313
|
+
console.log(` \u270F\uFE0F Overriding keywords (${overrides.keywords.length} items)`);
|
|
314
|
+
}
|
|
315
|
+
if (overrides.scripts) {
|
|
316
|
+
const existingScripts = pkg.scripts || {};
|
|
317
|
+
pkg.scripts = {
|
|
318
|
+
...existingScripts,
|
|
319
|
+
...overrides.scripts
|
|
320
|
+
};
|
|
321
|
+
console.log(` \u270F\uFE0F Merging scripts`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
async function copyExtraFiles(sourceDir, targetDir) {
|
|
325
|
+
console.log("\n\u{1F4C4} Copying extra files...");
|
|
326
|
+
const files = [
|
|
327
|
+
"README.md",
|
|
328
|
+
"README",
|
|
329
|
+
"LICENSE",
|
|
330
|
+
"LICENSE.md"
|
|
331
|
+
];
|
|
332
|
+
for (const file of files) {
|
|
333
|
+
try {
|
|
334
|
+
await (0, import_promises3.stat)((0, import_node_path3.join)(sourceDir, file));
|
|
335
|
+
await (0, import_promises3.copyFile)((0, import_node_path3.join)(sourceDir, file), (0, import_node_path3.join)(targetDir, file));
|
|
336
|
+
console.log(` \u2705 Copied ${file}`);
|
|
337
|
+
} catch {
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/converter.js
|
|
343
|
+
async function convertPackage(packageName, version, bin, overrides, browser) {
|
|
344
|
+
console.log(`
|
|
345
|
+
\u{1F4E6} Package: ${packageName}`);
|
|
346
|
+
console.log(`\u{1F3F7}\uFE0F Version: ${version}`);
|
|
347
|
+
if (bin) {
|
|
348
|
+
console.log(`\u{1F527} CLI Commands: ${Object.keys(bin).join(", ")}`);
|
|
349
|
+
}
|
|
350
|
+
if (browser) {
|
|
351
|
+
console.log(`\u{1F310} Browser mode: enabled`);
|
|
352
|
+
}
|
|
353
|
+
const workspaceDir = createWorkspace(packageName, version);
|
|
354
|
+
const originalCwd = import_node_process2.default.cwd();
|
|
355
|
+
try {
|
|
356
|
+
import_node_process2.default.chdir(workspaceDir);
|
|
357
|
+
await installJSRPackage(packageName, version);
|
|
358
|
+
const packageDir = (0, import_node_path4.join)("node_modules", packageName);
|
|
359
|
+
await (0, import_promises4.mkdir)((0, import_node_path4.join)(packageDir, "dist"), {
|
|
360
|
+
recursive: true
|
|
361
|
+
});
|
|
362
|
+
const { externals, allDependencies } = await getExternalPackages(packageDir, overrides);
|
|
363
|
+
await bundlePackage(packageDir, bin, externals, browser);
|
|
364
|
+
await copyTypeDeclarations(packageDir);
|
|
365
|
+
await copyExtraFiles(packageDir, `${packageDir}/dist`);
|
|
366
|
+
await generatePackageJson(packageDir, bin, overrides, allDependencies);
|
|
367
|
+
await moveDistToRoot(packageDir);
|
|
368
|
+
console.log("\n\u2705 Conversion completed!");
|
|
369
|
+
console.log(`\u{1F4C2} Output: ${workspaceDir}/dist`);
|
|
370
|
+
} finally {
|
|
371
|
+
import_node_process2.default.chdir(originalCwd);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function createWorkspace(packageName, version) {
|
|
375
|
+
const folderName = packageName.replace(/[@\/]/g, "__") + `_${version}`;
|
|
376
|
+
(0, import_node_fs.mkdirSync)(folderName, {
|
|
377
|
+
recursive: true
|
|
378
|
+
});
|
|
379
|
+
console.log(`\u{1F4C1} Created folder: ${folderName}`);
|
|
380
|
+
return folderName;
|
|
381
|
+
}
|
|
382
|
+
async function getExternalPackages(packageDir, overrides) {
|
|
383
|
+
try {
|
|
384
|
+
const content = await (0, import_promises4.readFile)((0, import_node_path4.join)(packageDir, "package.json"), "utf-8");
|
|
385
|
+
const pkgJson = JSON.parse(content);
|
|
386
|
+
const userDependencies = overrides?.dependencies || {};
|
|
387
|
+
if (!pkgJson.dependencies && Object.keys(userDependencies).length === 0) {
|
|
388
|
+
return {
|
|
389
|
+
externals: [],
|
|
390
|
+
allDependencies: {}
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
const topLevelDeps = {};
|
|
394
|
+
if (pkgJson.dependencies) {
|
|
395
|
+
for (const [name, version] of Object.entries(pkgJson.dependencies)) {
|
|
396
|
+
if (!name.startsWith("@jsr/")) {
|
|
397
|
+
topLevelDeps[name] = String(version);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
for (const [name, version] of Object.entries(userDependencies)) {
|
|
402
|
+
topLevelDeps[name] = version;
|
|
403
|
+
}
|
|
404
|
+
const jsrPackages = pkgJson.dependencies ? Object.keys(pkgJson.dependencies).filter((name) => name.startsWith("@jsr/")) : [];
|
|
405
|
+
const conflictingPackages = await findConflictingPackages(packageDir, jsrPackages, topLevelDeps);
|
|
406
|
+
const externals = Object.keys(topLevelDeps).filter((name) => !conflictingPackages.has(name));
|
|
407
|
+
const externalList = externals.join(", ") || "none";
|
|
408
|
+
console.log(`
|
|
409
|
+
\u{1F4E6} External dependencies (${externals.length}): ${externalList}`);
|
|
410
|
+
if (Object.keys(userDependencies).length > 0) {
|
|
411
|
+
const userDepsList = Object.keys(userDependencies).join(", ");
|
|
412
|
+
console.log(`\u{1F4DD} User-configured dependencies: ${userDepsList}`);
|
|
413
|
+
}
|
|
414
|
+
if (conflictingPackages.size > 0) {
|
|
415
|
+
const conflictList = Array.from(conflictingPackages).join(", ");
|
|
416
|
+
console.log(`\u26A0\uFE0F Version conflicts, will bundle: ${conflictList}`);
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
externals,
|
|
420
|
+
allDependencies: topLevelDeps
|
|
421
|
+
};
|
|
422
|
+
} catch {
|
|
423
|
+
return {
|
|
424
|
+
externals: [],
|
|
425
|
+
allDependencies: {}
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
async function findConflictingPackages(packageDir, jsrPackages, topLevelDeps) {
|
|
430
|
+
const conflicts = /* @__PURE__ */ new Set();
|
|
431
|
+
const parts = packageDir.split(/[\/\\]/);
|
|
432
|
+
const nodeModulesIndex = parts.indexOf("node_modules");
|
|
433
|
+
const rootNodeModules = parts.slice(0, nodeModulesIndex + 1).join("/");
|
|
434
|
+
for (const jsrPkg of jsrPackages) {
|
|
435
|
+
try {
|
|
436
|
+
const jsrPkgPath = (0, import_node_path4.join)(rootNodeModules, jsrPkg, "package.json");
|
|
437
|
+
const jsrContent = await (0, import_promises4.readFile)(jsrPkgPath, "utf-8");
|
|
438
|
+
const jsrPkgJson = JSON.parse(jsrContent);
|
|
439
|
+
if (!jsrPkgJson.dependencies) continue;
|
|
440
|
+
for (const [depName, depVersion] of Object.entries(jsrPkgJson.dependencies)) {
|
|
441
|
+
if (depName.startsWith("@jsr/")) continue;
|
|
442
|
+
if (topLevelDeps[depName]) {
|
|
443
|
+
if (topLevelDeps[depName] !== depVersion) {
|
|
444
|
+
conflicts.add(depName);
|
|
445
|
+
console.log(` \u26A0\uFE0F Version conflict for ${depName}:`);
|
|
446
|
+
console.log(` Top-level: ${topLevelDeps[depName]}`);
|
|
447
|
+
console.log(` ${jsrPkg}: ${depVersion}`);
|
|
448
|
+
}
|
|
449
|
+
} else {
|
|
450
|
+
topLevelDeps[depName] = String(depVersion);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
} catch {
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return conflicts;
|
|
458
|
+
}
|
|
459
|
+
async function bundlePackage(packageDir, bin, externalPackages, browser) {
|
|
460
|
+
if (bin) {
|
|
461
|
+
await bundleBinCommands(packageDir, bin, externalPackages, browser);
|
|
462
|
+
} else {
|
|
463
|
+
await bundleLibraryExports(packageDir, externalPackages, browser);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
async function bundleBinCommands(packageDir, bin, externalPackages, browser) {
|
|
467
|
+
console.log("\n\u{1F528} Bundling CLI tools...");
|
|
468
|
+
for (const [cmdName, inputFile] of Object.entries(bin)) {
|
|
469
|
+
await verifyEntrypoint(packageDir, inputFile);
|
|
470
|
+
const outputFile = `bin/${cmdName}.mjs`;
|
|
471
|
+
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages, browser || false);
|
|
472
|
+
const outputPath = (0, import_node_path4.join)(packageDir, "dist", outputFile);
|
|
473
|
+
await (0, import_promises4.chmod)(outputPath, 493);
|
|
474
|
+
console.log(` \u2705 Created ${cmdName}: ${outputFile}`);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
async function bundleLibraryExports(packageDir, externalPackages, browser) {
|
|
478
|
+
const exports2 = await readDenoJsonExports(packageDir);
|
|
479
|
+
if (!exports2) return;
|
|
480
|
+
console.log("\n\u{1F528} Bundling library exports...");
|
|
481
|
+
for (const [exportKey, inputFile] of Object.entries(exports2)) {
|
|
482
|
+
await verifyEntrypoint(packageDir, inputFile);
|
|
483
|
+
const outputFile = exportKey === "." ? "index.mjs" : `${exportKey.replace(/^\.\//, "")}.mjs`;
|
|
484
|
+
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages, browser || false);
|
|
485
|
+
console.log(` \u2705 Bundled ${exportKey}: ${outputFile}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
async function installJSRPackage(packageName, version) {
|
|
489
|
+
await (0, import_promises4.writeFile)("package.json", "{}");
|
|
490
|
+
const packageSpec = version === "latest" ? packageName : `${packageName}@${version}`;
|
|
491
|
+
console.log(`\u{1F504} Installing: ${packageSpec}`);
|
|
492
|
+
await import_dax_sh.default`npx jsr add ${packageSpec}`.cwd(import_node_process2.default.cwd());
|
|
493
|
+
}
|
|
494
|
+
async function verifyEntrypoint(packageDir, entrypoint) {
|
|
495
|
+
try {
|
|
496
|
+
await (0, import_promises4.stat)((0, import_node_path4.join)(packageDir, entrypoint));
|
|
497
|
+
console.log(`\u2705 Found ${entrypoint}`);
|
|
498
|
+
} catch {
|
|
499
|
+
throw new Error(`\u274C ${entrypoint} not found in ${packageDir}`);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
async function readDenoJsonExports(packageDir) {
|
|
503
|
+
for (const file of [
|
|
504
|
+
"deno.json",
|
|
505
|
+
"deno.jsonc"
|
|
506
|
+
]) {
|
|
507
|
+
try {
|
|
508
|
+
const content = await (0, import_promises4.readFile)((0, import_node_path4.join)(packageDir, file), "utf-8");
|
|
509
|
+
const denoJson = JSON.parse(content);
|
|
510
|
+
if (!denoJson.exports) continue;
|
|
511
|
+
const exports2 = {};
|
|
512
|
+
for (const [key, value] of Object.entries(denoJson.exports)) {
|
|
513
|
+
const path = typeof value === "string" ? value : null;
|
|
514
|
+
if (path?.endsWith(".ts")) {
|
|
515
|
+
exports2[key] = path;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return Object.keys(exports2).length > 0 ? exports2 : null;
|
|
519
|
+
} catch {
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
async function moveDistToRoot(packageDir) {
|
|
526
|
+
const sourceDist = (0, import_node_path4.join)(packageDir, "dist");
|
|
527
|
+
const targetDist = (0, import_node_path4.join)(import_node_process2.default.cwd(), "dist");
|
|
528
|
+
try {
|
|
529
|
+
await (0, import_promises4.rm)(targetDist, {
|
|
530
|
+
recursive: true
|
|
531
|
+
});
|
|
532
|
+
} catch {
|
|
533
|
+
}
|
|
534
|
+
await (0, import_promises4.rename)(sourceDist, targetDist);
|
|
535
|
+
await copyExtraFiles(packageDir, targetDist);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/cli.ts
|
|
539
|
+
var import_meta = {};
|
|
540
|
+
async function main() {
|
|
541
|
+
console.log("\u{1F680} JSR to NPM Package Converter\n");
|
|
542
|
+
const configFile = process.argv[2] || "jsr2npm.config.json";
|
|
543
|
+
const config = await loadConfig(configFile);
|
|
544
|
+
if (!config?.packages?.length) {
|
|
545
|
+
console.error("\u274C No packages found in jsr2npm.config.json");
|
|
546
|
+
console.log("\n\u{1F4A1} Create a jsr2npm.config.json file with your packages:");
|
|
547
|
+
console.log(`
|
|
548
|
+
{
|
|
549
|
+
"packages": [
|
|
550
|
+
{
|
|
551
|
+
"name": "@scope/package",
|
|
552
|
+
"version": "1.0.0",
|
|
553
|
+
"bin": {
|
|
554
|
+
"your-command": "src/bin.ts"
|
|
555
|
+
},
|
|
556
|
+
"packageJson": {
|
|
557
|
+
"name": "@myorg/custom-name",
|
|
558
|
+
"description": "Package description"
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
]
|
|
562
|
+
}
|
|
563
|
+
`);
|
|
564
|
+
process.exit(1);
|
|
565
|
+
}
|
|
566
|
+
console.log(`\u{1F4CB} Found ${config.packages.length} package(s) in config
|
|
567
|
+
`);
|
|
568
|
+
for (const pkg of config.packages) {
|
|
569
|
+
console.log(`
|
|
570
|
+
${"=".repeat(60)}`);
|
|
571
|
+
console.log(`Converting: ${pkg.name}@${pkg.version}`);
|
|
572
|
+
console.log("=".repeat(60));
|
|
573
|
+
try {
|
|
574
|
+
await convertPackage(
|
|
575
|
+
pkg.name,
|
|
576
|
+
pkg.version,
|
|
577
|
+
pkg.bin,
|
|
578
|
+
pkg.packageJson,
|
|
579
|
+
pkg.browser
|
|
580
|
+
);
|
|
581
|
+
} catch (error) {
|
|
582
|
+
console.error(
|
|
583
|
+
`
|
|
584
|
+
\u274C Failed to convert ${pkg.name}:`,
|
|
585
|
+
error instanceof Error ? error.message : String(error)
|
|
586
|
+
);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
console.log(`
|
|
590
|
+
${"=".repeat(60)}`);
|
|
591
|
+
console.log("\u2705 All packages processed!");
|
|
592
|
+
console.log("=".repeat(60));
|
|
593
|
+
}
|
|
594
|
+
if (import_meta.main) {
|
|
595
|
+
main().catch(console.error);
|
|
596
|
+
}
|
package/bin/jsr2npm.mjs
CHANGED
|
@@ -21,6 +21,7 @@ import $ from "dax-sh";
|
|
|
21
21
|
import { chmod, mkdir as mkdir2, readFile as readFile3, rename, rm, stat as stat3, writeFile as writeFile2 } from "node:fs/promises";
|
|
22
22
|
import { join as join3 } from "node:path";
|
|
23
23
|
import { mkdirSync } from "node:fs";
|
|
24
|
+
import process3 from "node:process";
|
|
24
25
|
|
|
25
26
|
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/bundler.js
|
|
26
27
|
import { copyFile, mkdir, readdir, stat } from "node:fs/promises";
|
|
@@ -28,19 +29,24 @@ import { join } from "node:path";
|
|
|
28
29
|
import { build } from "esbuild";
|
|
29
30
|
async function bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages = [], useBrowserPlatform = false) {
|
|
30
31
|
const entryPath = join(process.cwd(), packageDir, inputFile);
|
|
31
|
-
const
|
|
32
|
-
const
|
|
32
|
+
const baseName = outputFile.replace(/\.mjs$/, "");
|
|
33
|
+
const esmOutputPath = join(process.cwd(), packageDir, "dist", `${baseName}.mjs`);
|
|
34
|
+
const cjsOutputPath = join(process.cwd(), packageDir, "dist", `${baseName}.cjs`);
|
|
35
|
+
const outputDir = esmOutputPath.split("/").slice(0, -1).join("/");
|
|
33
36
|
await mkdir(outputDir, {
|
|
34
37
|
recursive: true
|
|
35
38
|
});
|
|
36
39
|
const externalList = externalPackages.length > 0 ? externalPackages.join(", ") : "none";
|
|
37
40
|
console.log(` \u{1F4E6} External packages: ${externalList}`);
|
|
38
41
|
const platform = useBrowserPlatform ? "neutral" : "node";
|
|
39
|
-
const
|
|
42
|
+
const esmBanner = useBrowserPlatform ? {} : {
|
|
40
43
|
js: `#!/usr/bin/env node
|
|
41
44
|
import { createRequire } from 'node:module';
|
|
42
45
|
const require = createRequire(import.meta.url);`
|
|
43
46
|
};
|
|
47
|
+
const cjsBanner = useBrowserPlatform ? {} : {
|
|
48
|
+
js: `#!/usr/bin/env node`
|
|
49
|
+
};
|
|
44
50
|
console.log(` \u{1F527} Platform: ${platform}${useBrowserPlatform ? " (browser)" : ""}`);
|
|
45
51
|
await build({
|
|
46
52
|
entryPoints: [
|
|
@@ -49,12 +55,27 @@ const require = createRequire(import.meta.url);`
|
|
|
49
55
|
bundle: true,
|
|
50
56
|
platform,
|
|
51
57
|
format: "esm",
|
|
52
|
-
outfile:
|
|
58
|
+
outfile: esmOutputPath,
|
|
59
|
+
external: externalPackages,
|
|
60
|
+
packages: "bundle",
|
|
61
|
+
banner: esmBanner,
|
|
62
|
+
write: true
|
|
63
|
+
});
|
|
64
|
+
await build({
|
|
65
|
+
entryPoints: [
|
|
66
|
+
entryPath
|
|
67
|
+
],
|
|
68
|
+
bundle: true,
|
|
69
|
+
platform,
|
|
70
|
+
format: "cjs",
|
|
71
|
+
outfile: cjsOutputPath,
|
|
53
72
|
external: externalPackages,
|
|
54
73
|
packages: "bundle",
|
|
55
|
-
banner,
|
|
74
|
+
banner: cjsBanner,
|
|
56
75
|
write: true
|
|
57
76
|
});
|
|
77
|
+
console.log(` \u2705 Built ESM: ${baseName}.mjs`);
|
|
78
|
+
console.log(` \u2705 Built CJS: ${baseName}.cjs`);
|
|
58
79
|
}
|
|
59
80
|
async function copyTypeDeclarations(packageDir) {
|
|
60
81
|
console.log("\n\u{1F4DD} Copying TypeScript declarations...");
|
|
@@ -154,9 +175,9 @@ function getNpmDependencies(deps) {
|
|
|
154
175
|
function buildPackageJson(jsrPkg, denoJson, dependencies, bin, overrides) {
|
|
155
176
|
const pkg = {
|
|
156
177
|
...jsrPkg,
|
|
157
|
-
type: "module",
|
|
158
178
|
dependencies
|
|
159
179
|
};
|
|
180
|
+
delete pkg.type;
|
|
160
181
|
mergeMetadata(pkg, denoJson);
|
|
161
182
|
addBugsUrl(pkg);
|
|
162
183
|
delete pkg._jsr_revision;
|
|
@@ -210,13 +231,20 @@ function buildBinExports(pkg, bin) {
|
|
|
210
231
|
const exports = {};
|
|
211
232
|
for (const cmdName of Object.keys(bin)) {
|
|
212
233
|
binCommands[cmdName] = `./bin/${cmdName}.mjs`;
|
|
213
|
-
exports[`./bin/${cmdName}`] =
|
|
234
|
+
exports[`./bin/${cmdName}`] = {
|
|
235
|
+
import: `./bin/${cmdName}.mjs`,
|
|
236
|
+
require: `./bin/${cmdName}.cjs`
|
|
237
|
+
};
|
|
214
238
|
}
|
|
215
239
|
pkg.bin = binCommands;
|
|
216
240
|
const firstCmd = Object.keys(bin)[0];
|
|
217
|
-
exports["."] =
|
|
241
|
+
exports["."] = {
|
|
242
|
+
import: `./bin/${firstCmd}.mjs`,
|
|
243
|
+
require: `./bin/${firstCmd}.cjs`
|
|
244
|
+
};
|
|
218
245
|
pkg.exports = exports;
|
|
219
|
-
pkg.main = `./bin/${firstCmd}.
|
|
246
|
+
pkg.main = `./bin/${firstCmd}.cjs`;
|
|
247
|
+
pkg.module = `./bin/${firstCmd}.mjs`;
|
|
220
248
|
console.log(` \u{1F527} Added bin commands: ${Object.keys(binCommands).join(", ")}`);
|
|
221
249
|
}
|
|
222
250
|
function buildLibraryExports(pkg, denoJson) {
|
|
@@ -225,20 +253,22 @@ function buildLibraryExports(pkg, denoJson) {
|
|
|
225
253
|
for (const [key, value] of Object.entries(denoExports)) {
|
|
226
254
|
const tsPath = typeof value === "string" ? value : null;
|
|
227
255
|
if (!tsPath) continue;
|
|
228
|
-
const
|
|
256
|
+
const baseName = key === "." ? "index" : key.replace(/^\.\//, "");
|
|
229
257
|
const dtsFile = tsPath.replace(/\.ts$/, ".d.ts").replace(/^\.\//, "");
|
|
230
258
|
exports[key] = {
|
|
231
259
|
types: `./types/${dtsFile}`,
|
|
232
|
-
import: `./${
|
|
260
|
+
import: `./${baseName}.mjs`,
|
|
261
|
+
require: `./${baseName}.cjs`
|
|
233
262
|
};
|
|
234
263
|
}
|
|
235
264
|
exports["./types/*"] = "./types/*";
|
|
236
265
|
pkg.exports = exports;
|
|
237
266
|
const mainExport = exports["."];
|
|
238
|
-
if (mainExport
|
|
239
|
-
pkg.main = mainExport.
|
|
267
|
+
if (mainExport) {
|
|
268
|
+
pkg.main = mainExport.require;
|
|
269
|
+
pkg.module = mainExport.import;
|
|
240
270
|
}
|
|
241
|
-
console.log(` \u{1F4E6} Built exports for ${Object.keys(denoExports).length} entry points`);
|
|
271
|
+
console.log(` \u{1F4E6} Built exports for ${Object.keys(denoExports).length} entry points (ESM + CJS)`);
|
|
242
272
|
}
|
|
243
273
|
function applyOverrides(pkg, overrides) {
|
|
244
274
|
if (!overrides) return;
|
|
@@ -301,15 +331,15 @@ async function convertPackage(packageName, version, bin, overrides, browser) {
|
|
|
301
331
|
console.log(`\u{1F310} Browser mode: enabled`);
|
|
302
332
|
}
|
|
303
333
|
const workspaceDir = createWorkspace(packageName, version);
|
|
304
|
-
const originalCwd =
|
|
334
|
+
const originalCwd = process3.cwd();
|
|
305
335
|
try {
|
|
306
|
-
|
|
336
|
+
process3.chdir(workspaceDir);
|
|
307
337
|
await installJSRPackage(packageName, version);
|
|
308
338
|
const packageDir = join3("node_modules", packageName);
|
|
309
339
|
await mkdir2(join3(packageDir, "dist"), {
|
|
310
340
|
recursive: true
|
|
311
341
|
});
|
|
312
|
-
const { externals, allDependencies } = await getExternalPackages(packageDir);
|
|
342
|
+
const { externals, allDependencies } = await getExternalPackages(packageDir, overrides);
|
|
313
343
|
await bundlePackage(packageDir, bin, externals, browser);
|
|
314
344
|
await copyTypeDeclarations(packageDir);
|
|
315
345
|
await copyExtraFiles(packageDir, `${packageDir}/dist`);
|
|
@@ -318,7 +348,7 @@ async function convertPackage(packageName, version, bin, overrides, browser) {
|
|
|
318
348
|
console.log("\n\u2705 Conversion completed!");
|
|
319
349
|
console.log(`\u{1F4C2} Output: ${workspaceDir}/dist`);
|
|
320
350
|
} finally {
|
|
321
|
-
|
|
351
|
+
process3.chdir(originalCwd);
|
|
322
352
|
}
|
|
323
353
|
}
|
|
324
354
|
function createWorkspace(packageName, version) {
|
|
@@ -329,26 +359,38 @@ function createWorkspace(packageName, version) {
|
|
|
329
359
|
console.log(`\u{1F4C1} Created folder: ${folderName}`);
|
|
330
360
|
return folderName;
|
|
331
361
|
}
|
|
332
|
-
async function getExternalPackages(packageDir) {
|
|
362
|
+
async function getExternalPackages(packageDir, overrides) {
|
|
333
363
|
try {
|
|
334
364
|
const content = await readFile3(join3(packageDir, "package.json"), "utf-8");
|
|
335
365
|
const pkgJson = JSON.parse(content);
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
366
|
+
const userDependencies = overrides?.dependencies || {};
|
|
367
|
+
if (!pkgJson.dependencies && Object.keys(userDependencies).length === 0) {
|
|
368
|
+
return {
|
|
369
|
+
externals: [],
|
|
370
|
+
allDependencies: {}
|
|
371
|
+
};
|
|
372
|
+
}
|
|
340
373
|
const topLevelDeps = {};
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
374
|
+
if (pkgJson.dependencies) {
|
|
375
|
+
for (const [name, version] of Object.entries(pkgJson.dependencies)) {
|
|
376
|
+
if (!name.startsWith("@jsr/")) {
|
|
377
|
+
topLevelDeps[name] = String(version);
|
|
378
|
+
}
|
|
344
379
|
}
|
|
345
380
|
}
|
|
346
|
-
const
|
|
381
|
+
for (const [name, version] of Object.entries(userDependencies)) {
|
|
382
|
+
topLevelDeps[name] = version;
|
|
383
|
+
}
|
|
384
|
+
const jsrPackages = pkgJson.dependencies ? Object.keys(pkgJson.dependencies).filter((name) => name.startsWith("@jsr/")) : [];
|
|
347
385
|
const conflictingPackages = await findConflictingPackages(packageDir, jsrPackages, topLevelDeps);
|
|
348
386
|
const externals = Object.keys(topLevelDeps).filter((name) => !conflictingPackages.has(name));
|
|
349
387
|
const externalList = externals.join(", ") || "none";
|
|
350
388
|
console.log(`
|
|
351
389
|
\u{1F4E6} External dependencies (${externals.length}): ${externalList}`);
|
|
390
|
+
if (Object.keys(userDependencies).length > 0) {
|
|
391
|
+
const userDepsList = Object.keys(userDependencies).join(", ");
|
|
392
|
+
console.log(`\u{1F4DD} User-configured dependencies: ${userDepsList}`);
|
|
393
|
+
}
|
|
352
394
|
if (conflictingPackages.size > 0) {
|
|
353
395
|
const conflictList = Array.from(conflictingPackages).join(", ");
|
|
354
396
|
console.log(`\u26A0\uFE0F Version conflicts, will bundle: ${conflictList}`);
|
|
@@ -427,7 +469,7 @@ async function installJSRPackage(packageName, version) {
|
|
|
427
469
|
await writeFile2("package.json", "{}");
|
|
428
470
|
const packageSpec = version === "latest" ? packageName : `${packageName}@${version}`;
|
|
429
471
|
console.log(`\u{1F504} Installing: ${packageSpec}`);
|
|
430
|
-
await $`npx jsr add ${packageSpec}`.cwd(
|
|
472
|
+
await $`npx jsr add ${packageSpec}`.cwd(process3.cwd());
|
|
431
473
|
}
|
|
432
474
|
async function verifyEntrypoint(packageDir, entrypoint) {
|
|
433
475
|
try {
|
|
@@ -462,7 +504,7 @@ async function readDenoJsonExports(packageDir) {
|
|
|
462
504
|
}
|
|
463
505
|
async function moveDistToRoot(packageDir) {
|
|
464
506
|
const sourceDist = join3(packageDir, "dist");
|
|
465
|
-
const targetDist = join3(
|
|
507
|
+
const targetDist = join3(process3.cwd(), "dist");
|
|
466
508
|
try {
|
|
467
509
|
await rm(targetDist, {
|
|
468
510
|
recursive: true
|
package/package.json
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yaonyan/jsr2npm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"homepage": "https://jsr.io/@yao/jsr2npm",
|
|
5
|
-
"type": "module",
|
|
6
5
|
"dependencies": {
|
|
7
6
|
"dax-sh": "^0.43.2",
|
|
8
7
|
"esbuild": "^0.25.10"
|
|
9
8
|
},
|
|
10
9
|
"exports": {
|
|
11
|
-
"./bin/jsr2npm":
|
|
12
|
-
|
|
10
|
+
"./bin/jsr2npm": {
|
|
11
|
+
"import": "./bin/jsr2npm.mjs",
|
|
12
|
+
"require": "./bin/jsr2npm.cjs"
|
|
13
|
+
},
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./bin/jsr2npm.mjs",
|
|
16
|
+
"require": "./bin/jsr2npm.cjs"
|
|
17
|
+
}
|
|
13
18
|
},
|
|
14
19
|
"license": "MIT",
|
|
15
20
|
"repository": {
|
|
@@ -22,5 +27,6 @@
|
|
|
22
27
|
"bin": {
|
|
23
28
|
"jsr2npm": "./bin/jsr2npm.mjs"
|
|
24
29
|
},
|
|
25
|
-
"main": "./bin/jsr2npm.
|
|
30
|
+
"main": "./bin/jsr2npm.cjs",
|
|
31
|
+
"module": "./bin/jsr2npm.mjs"
|
|
26
32
|
}
|