@yaonyan/jsr2npm 0.1.7 → 0.1.9
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.mjs +52 -32
- package/package.json +1 -1
package/bin/jsr2npm.mjs
CHANGED
|
@@ -21,12 +21,13 @@ 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";
|
|
27
28
|
import { join } from "node:path";
|
|
28
29
|
import { build } from "esbuild";
|
|
29
|
-
async function bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages = []) {
|
|
30
|
+
async function bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages = [], useBrowserPlatform = false) {
|
|
30
31
|
const entryPath = join(process.cwd(), packageDir, inputFile);
|
|
31
32
|
const outputPath = join(process.cwd(), packageDir, "dist", outputFile);
|
|
32
33
|
const outputDir = outputPath.split("/").slice(0, -1).join("/");
|
|
@@ -35,21 +36,24 @@ async function bundleWithEsbuild(packageDir, inputFile, outputFile, externalPack
|
|
|
35
36
|
});
|
|
36
37
|
const externalList = externalPackages.length > 0 ? externalPackages.join(", ") : "none";
|
|
37
38
|
console.log(` \u{1F4E6} External packages: ${externalList}`);
|
|
39
|
+
const platform = useBrowserPlatform ? "neutral" : "node";
|
|
40
|
+
const banner = useBrowserPlatform ? {} : {
|
|
41
|
+
js: `#!/usr/bin/env node
|
|
42
|
+
import { createRequire } from 'node:module';
|
|
43
|
+
const require = createRequire(import.meta.url);`
|
|
44
|
+
};
|
|
45
|
+
console.log(` \u{1F527} Platform: ${platform}${useBrowserPlatform ? " (browser)" : ""}`);
|
|
38
46
|
await build({
|
|
39
47
|
entryPoints: [
|
|
40
48
|
entryPath
|
|
41
49
|
],
|
|
42
50
|
bundle: true,
|
|
43
|
-
platform
|
|
51
|
+
platform,
|
|
44
52
|
format: "esm",
|
|
45
53
|
outfile: outputPath,
|
|
46
54
|
external: externalPackages,
|
|
47
55
|
packages: "bundle",
|
|
48
|
-
banner
|
|
49
|
-
js: `#!/usr/bin/env node
|
|
50
|
-
import { createRequire } from 'node:module';
|
|
51
|
-
const require = createRequire(import.meta.url);`
|
|
52
|
-
},
|
|
56
|
+
banner,
|
|
53
57
|
write: true
|
|
54
58
|
});
|
|
55
59
|
}
|
|
@@ -287,24 +291,27 @@ async function copyExtraFiles(sourceDir, targetDir) {
|
|
|
287
291
|
}
|
|
288
292
|
|
|
289
293
|
// __yao__jsr2npm_latest/node_modules/@yao/jsr2npm/converter.js
|
|
290
|
-
async function convertPackage(packageName, version, bin, overrides) {
|
|
294
|
+
async function convertPackage(packageName, version, bin, overrides, browser) {
|
|
291
295
|
console.log(`
|
|
292
296
|
\u{1F4E6} Package: ${packageName}`);
|
|
293
297
|
console.log(`\u{1F3F7}\uFE0F Version: ${version}`);
|
|
294
298
|
if (bin) {
|
|
295
299
|
console.log(`\u{1F527} CLI Commands: ${Object.keys(bin).join(", ")}`);
|
|
296
300
|
}
|
|
301
|
+
if (browser) {
|
|
302
|
+
console.log(`\u{1F310} Browser mode: enabled`);
|
|
303
|
+
}
|
|
297
304
|
const workspaceDir = createWorkspace(packageName, version);
|
|
298
|
-
const originalCwd =
|
|
305
|
+
const originalCwd = process3.cwd();
|
|
299
306
|
try {
|
|
300
|
-
|
|
307
|
+
process3.chdir(workspaceDir);
|
|
301
308
|
await installJSRPackage(packageName, version);
|
|
302
309
|
const packageDir = join3("node_modules", packageName);
|
|
303
310
|
await mkdir2(join3(packageDir, "dist"), {
|
|
304
311
|
recursive: true
|
|
305
312
|
});
|
|
306
|
-
const { externals, allDependencies } = await getExternalPackages(packageDir);
|
|
307
|
-
await bundlePackage(packageDir, bin, externals);
|
|
313
|
+
const { externals, allDependencies } = await getExternalPackages(packageDir, overrides);
|
|
314
|
+
await bundlePackage(packageDir, bin, externals, browser);
|
|
308
315
|
await copyTypeDeclarations(packageDir);
|
|
309
316
|
await copyExtraFiles(packageDir, `${packageDir}/dist`);
|
|
310
317
|
await generatePackageJson(packageDir, bin, overrides, allDependencies);
|
|
@@ -312,7 +319,7 @@ async function convertPackage(packageName, version, bin, overrides) {
|
|
|
312
319
|
console.log("\n\u2705 Conversion completed!");
|
|
313
320
|
console.log(`\u{1F4C2} Output: ${workspaceDir}/dist`);
|
|
314
321
|
} finally {
|
|
315
|
-
|
|
322
|
+
process3.chdir(originalCwd);
|
|
316
323
|
}
|
|
317
324
|
}
|
|
318
325
|
function createWorkspace(packageName, version) {
|
|
@@ -323,26 +330,38 @@ function createWorkspace(packageName, version) {
|
|
|
323
330
|
console.log(`\u{1F4C1} Created folder: ${folderName}`);
|
|
324
331
|
return folderName;
|
|
325
332
|
}
|
|
326
|
-
async function getExternalPackages(packageDir) {
|
|
333
|
+
async function getExternalPackages(packageDir, overrides) {
|
|
327
334
|
try {
|
|
328
335
|
const content = await readFile3(join3(packageDir, "package.json"), "utf-8");
|
|
329
336
|
const pkgJson = JSON.parse(content);
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
337
|
+
const userDependencies = overrides?.dependencies || {};
|
|
338
|
+
if (!pkgJson.dependencies && Object.keys(userDependencies).length === 0) {
|
|
339
|
+
return {
|
|
340
|
+
externals: [],
|
|
341
|
+
allDependencies: {}
|
|
342
|
+
};
|
|
343
|
+
}
|
|
334
344
|
const topLevelDeps = {};
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
345
|
+
if (pkgJson.dependencies) {
|
|
346
|
+
for (const [name, version] of Object.entries(pkgJson.dependencies)) {
|
|
347
|
+
if (!name.startsWith("@jsr/")) {
|
|
348
|
+
topLevelDeps[name] = String(version);
|
|
349
|
+
}
|
|
338
350
|
}
|
|
339
351
|
}
|
|
340
|
-
const
|
|
352
|
+
for (const [name, version] of Object.entries(userDependencies)) {
|
|
353
|
+
topLevelDeps[name] = version;
|
|
354
|
+
}
|
|
355
|
+
const jsrPackages = pkgJson.dependencies ? Object.keys(pkgJson.dependencies).filter((name) => name.startsWith("@jsr/")) : [];
|
|
341
356
|
const conflictingPackages = await findConflictingPackages(packageDir, jsrPackages, topLevelDeps);
|
|
342
357
|
const externals = Object.keys(topLevelDeps).filter((name) => !conflictingPackages.has(name));
|
|
343
358
|
const externalList = externals.join(", ") || "none";
|
|
344
359
|
console.log(`
|
|
345
360
|
\u{1F4E6} External dependencies (${externals.length}): ${externalList}`);
|
|
361
|
+
if (Object.keys(userDependencies).length > 0) {
|
|
362
|
+
const userDepsList = Object.keys(userDependencies).join(", ");
|
|
363
|
+
console.log(`\u{1F4DD} User-configured dependencies: ${userDepsList}`);
|
|
364
|
+
}
|
|
346
365
|
if (conflictingPackages.size > 0) {
|
|
347
366
|
const conflictList = Array.from(conflictingPackages).join(", ");
|
|
348
367
|
console.log(`\u26A0\uFE0F Version conflicts, will bundle: ${conflictList}`);
|
|
@@ -388,32 +407,32 @@ async function findConflictingPackages(packageDir, jsrPackages, topLevelDeps) {
|
|
|
388
407
|
}
|
|
389
408
|
return conflicts;
|
|
390
409
|
}
|
|
391
|
-
async function bundlePackage(packageDir, bin, externalPackages) {
|
|
410
|
+
async function bundlePackage(packageDir, bin, externalPackages, browser) {
|
|
392
411
|
if (bin) {
|
|
393
|
-
await bundleBinCommands(packageDir, bin, externalPackages);
|
|
412
|
+
await bundleBinCommands(packageDir, bin, externalPackages, browser);
|
|
394
413
|
} else {
|
|
395
|
-
await bundleLibraryExports(packageDir, externalPackages);
|
|
414
|
+
await bundleLibraryExports(packageDir, externalPackages, browser);
|
|
396
415
|
}
|
|
397
416
|
}
|
|
398
|
-
async function bundleBinCommands(packageDir, bin, externalPackages) {
|
|
417
|
+
async function bundleBinCommands(packageDir, bin, externalPackages, browser) {
|
|
399
418
|
console.log("\n\u{1F528} Bundling CLI tools...");
|
|
400
419
|
for (const [cmdName, inputFile] of Object.entries(bin)) {
|
|
401
420
|
await verifyEntrypoint(packageDir, inputFile);
|
|
402
421
|
const outputFile = `bin/${cmdName}.mjs`;
|
|
403
|
-
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages);
|
|
422
|
+
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages, browser || false);
|
|
404
423
|
const outputPath = join3(packageDir, "dist", outputFile);
|
|
405
424
|
await chmod(outputPath, 493);
|
|
406
425
|
console.log(` \u2705 Created ${cmdName}: ${outputFile}`);
|
|
407
426
|
}
|
|
408
427
|
}
|
|
409
|
-
async function bundleLibraryExports(packageDir, externalPackages) {
|
|
428
|
+
async function bundleLibraryExports(packageDir, externalPackages, browser) {
|
|
410
429
|
const exports = await readDenoJsonExports(packageDir);
|
|
411
430
|
if (!exports) return;
|
|
412
431
|
console.log("\n\u{1F528} Bundling library exports...");
|
|
413
432
|
for (const [exportKey, inputFile] of Object.entries(exports)) {
|
|
414
433
|
await verifyEntrypoint(packageDir, inputFile);
|
|
415
434
|
const outputFile = exportKey === "." ? "index.mjs" : `${exportKey.replace(/^\.\//, "")}.mjs`;
|
|
416
|
-
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages);
|
|
435
|
+
await bundleWithEsbuild(packageDir, inputFile, outputFile, externalPackages, browser || false);
|
|
417
436
|
console.log(` \u2705 Bundled ${exportKey}: ${outputFile}`);
|
|
418
437
|
}
|
|
419
438
|
}
|
|
@@ -421,7 +440,7 @@ async function installJSRPackage(packageName, version) {
|
|
|
421
440
|
await writeFile2("package.json", "{}");
|
|
422
441
|
const packageSpec = version === "latest" ? packageName : `${packageName}@${version}`;
|
|
423
442
|
console.log(`\u{1F504} Installing: ${packageSpec}`);
|
|
424
|
-
await $`npx jsr add ${packageSpec}`.cwd(
|
|
443
|
+
await $`npx jsr add ${packageSpec}`.cwd(process3.cwd());
|
|
425
444
|
}
|
|
426
445
|
async function verifyEntrypoint(packageDir, entrypoint) {
|
|
427
446
|
try {
|
|
@@ -456,7 +475,7 @@ async function readDenoJsonExports(packageDir) {
|
|
|
456
475
|
}
|
|
457
476
|
async function moveDistToRoot(packageDir) {
|
|
458
477
|
const sourceDist = join3(packageDir, "dist");
|
|
459
|
-
const targetDist = join3(
|
|
478
|
+
const targetDist = join3(process3.cwd(), "dist");
|
|
460
479
|
try {
|
|
461
480
|
await rm(targetDist, {
|
|
462
481
|
recursive: true
|
|
@@ -506,7 +525,8 @@ ${"=".repeat(60)}`);
|
|
|
506
525
|
pkg.name,
|
|
507
526
|
pkg.version,
|
|
508
527
|
pkg.bin,
|
|
509
|
-
pkg.packageJson
|
|
528
|
+
pkg.packageJson,
|
|
529
|
+
pkg.browser
|
|
510
530
|
);
|
|
511
531
|
} catch (error) {
|
|
512
532
|
console.error(
|