@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.
Files changed (2) hide show
  1. package/bin/jsr2npm.mjs +52 -32
  2. 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: "node",
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 = process.cwd();
305
+ const originalCwd = process3.cwd();
299
306
  try {
300
- process.chdir(workspaceDir);
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
- process.chdir(originalCwd);
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
- if (!pkgJson.dependencies) return {
331
- externals: [],
332
- allDependencies: {}
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
- for (const [name, version] of Object.entries(pkgJson.dependencies)) {
336
- if (!name.startsWith("@jsr/")) {
337
- topLevelDeps[name] = String(version);
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 jsrPackages = Object.keys(pkgJson.dependencies).filter((name) => name.startsWith("@jsr/"));
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(process.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(process.cwd(), "dist");
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(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaonyan/jsr2npm",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "homepage": "https://jsr.io/@yao/jsr2npm",
5
5
  "type": "module",
6
6
  "dependencies": {