@hyperfrontend/features 0.1.0 → 0.2.0

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 (159) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/index.cjs.js +1 -0
  3. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/index.esm.js +1 -0
  4. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/worker/index.cjs.js +1 -0
  5. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/worker/index.esm.js +1 -0
  6. package/_dependencies/@hyperfrontend/builder/bundle/index.cjs.js +12 -10
  7. package/_dependencies/@hyperfrontend/builder/bundle/index.esm.js +14 -12
  8. package/_dependencies/@hyperfrontend/builder/bundle/rollup/index.cjs.js +2 -0
  9. package/_dependencies/@hyperfrontend/builder/bundle/rollup/index.esm.js +2 -0
  10. package/_dependencies/@hyperfrontend/builder/bundle/rollup/worker/index.cjs.js +2 -0
  11. package/_dependencies/@hyperfrontend/builder/bundle/rollup/worker/index.esm.js +2 -0
  12. package/_dependencies/@hyperfrontend/builder/index.cjs.js +87 -53
  13. package/_dependencies/@hyperfrontend/builder/index.esm.js +89 -55
  14. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.cjs.js +4 -0
  15. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.esm.js +3 -1
  16. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.cjs.js +10 -0
  17. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.esm.js +6 -0
  18. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.cjs.js +5 -0
  19. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.esm.js +5 -1
  20. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.cjs.js +2 -2
  21. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.esm.js +2 -2
  22. package/_dependencies/@hyperfrontend/network-protocol/browser/channel/index.cjs.js +5 -19
  23. package/_dependencies/@hyperfrontend/network-protocol/browser/channel/index.esm.js +1 -15
  24. package/_dependencies/@hyperfrontend/network-protocol/browser/data/index.cjs.js +15 -23
  25. package/_dependencies/@hyperfrontend/network-protocol/browser/data/index.esm.js +7 -15
  26. package/_dependencies/@hyperfrontend/network-protocol/browser/packet/index.cjs.js +6 -14
  27. package/_dependencies/@hyperfrontend/network-protocol/browser/packet/index.esm.js +7 -15
  28. package/_dependencies/@hyperfrontend/network-protocol/browser/receiver/index.cjs.js +4 -18
  29. package/_dependencies/@hyperfrontend/network-protocol/browser/receiver/index.esm.js +1 -15
  30. package/_dependencies/@hyperfrontend/network-protocol/browser/sender/index.cjs.js +5 -19
  31. package/_dependencies/@hyperfrontend/network-protocol/browser/sender/index.esm.js +2 -16
  32. package/_dependencies/@hyperfrontend/network-protocol/browser/v1/index.cjs.js +16 -24
  33. package/_dependencies/@hyperfrontend/network-protocol/browser/v1/index.esm.js +7 -15
  34. package/_dependencies/@hyperfrontend/network-protocol/browser/v2/index.cjs.js +16 -24
  35. package/_dependencies/@hyperfrontend/network-protocol/browser/v2/index.esm.js +7 -15
  36. package/_dependencies/@hyperfrontend/network-protocol/node/channel/index.cjs.js +3 -17
  37. package/_dependencies/@hyperfrontend/network-protocol/node/channel/index.esm.js +1 -15
  38. package/_dependencies/@hyperfrontend/network-protocol/node/data/index.cjs.js +6 -14
  39. package/_dependencies/@hyperfrontend/network-protocol/node/data/index.esm.js +7 -15
  40. package/_dependencies/@hyperfrontend/network-protocol/node/packet/index.cjs.js +6 -14
  41. package/_dependencies/@hyperfrontend/network-protocol/node/packet/index.esm.js +7 -15
  42. package/_dependencies/@hyperfrontend/network-protocol/node/receiver/index.cjs.js +3 -17
  43. package/_dependencies/@hyperfrontend/network-protocol/node/receiver/index.esm.js +1 -15
  44. package/_dependencies/@hyperfrontend/network-protocol/node/sender/index.cjs.js +2 -16
  45. package/_dependencies/@hyperfrontend/network-protocol/node/sender/index.esm.js +2 -16
  46. package/_dependencies/@hyperfrontend/network-protocol/node/v1/index.cjs.js +6 -14
  47. package/_dependencies/@hyperfrontend/network-protocol/node/v1/index.esm.js +7 -15
  48. package/_dependencies/@hyperfrontend/network-protocol/node/v2/index.cjs.js +6 -14
  49. package/_dependencies/@hyperfrontend/network-protocol/node/v2/index.esm.js +7 -15
  50. package/_dependencies/@hyperfrontend/nexus/index.cjs.js +49 -19
  51. package/_dependencies/@hyperfrontend/nexus/index.esm.js +49 -19
  52. package/_dependencies/@hyperfrontend/project-scope/core/fs/index.cjs.js +62 -0
  53. package/_dependencies/@hyperfrontend/project-scope/core/fs/index.esm.js +60 -2
  54. package/_shared/generators/feature/generate-feature-module/index.esm.js +11 -6
  55. package/_shared/generators/metadata/generate-metadata/index.esm.js +1 -0
  56. package/_shared/shared/control/index.cjs.js +12 -2
  57. package/_shared/shared/control/index.esm.js +12 -2
  58. package/_shared/shared/request/index.cjs.js +91 -0
  59. package/_shared/shared/request/index.esm.js +88 -0
  60. package/_shared/shared/shutdown/index.esm.js +12 -0
  61. package/bin/hf.js +643 -70
  62. package/bundle/host/index.iife.js +290 -4041
  63. package/bundle/host/index.iife.min.js +1 -1
  64. package/bundle/host/index.umd.js +290 -4041
  65. package/bundle/host/index.umd.min.js +1 -1
  66. package/bundle/hostee/index.iife.js +215 -2893
  67. package/bundle/hostee/index.iife.min.js +1 -1
  68. package/bundle/hostee/index.umd.js +215 -2893
  69. package/bundle/hostee/index.umd.min.js +1 -1
  70. package/cli/args.d.ts +2 -0
  71. package/cli/args.d.ts.map +1 -1
  72. package/cli/commands/build.d.ts +8 -5
  73. package/cli/commands/build.d.ts.map +1 -1
  74. package/cli/commands/dev.d.ts +7 -2
  75. package/cli/commands/dev.d.ts.map +1 -1
  76. package/cli/config/resolve.d.ts +3 -1
  77. package/cli/config/resolve.d.ts.map +1 -1
  78. package/cli/index.cjs.js +643 -70
  79. package/cli/index.d.ts +21 -10
  80. package/cli/index.esm.js +591 -60
  81. package/cli/usage.d.ts +1 -1
  82. package/cli/usage.d.ts.map +1 -1
  83. package/generators/feature/generate-feature-module.d.ts.map +1 -1
  84. package/generators/index.cjs.js +435 -42
  85. package/generators/index.d.ts +9 -8
  86. package/generators/index.esm.js +404 -30
  87. package/generators/metadata/generate-metadata.d.ts +4 -4
  88. package/generators/metadata/generate-metadata.d.ts.map +1 -1
  89. package/generators/shell/connector-types.d.ts +19 -0
  90. package/generators/shell/connector-types.d.ts.map +1 -0
  91. package/generators/shell/generate-shell.d.ts +5 -4
  92. package/generators/shell/generate-shell.d.ts.map +1 -1
  93. package/generators/shell/schema-type.d.ts +20 -0
  94. package/generators/shell/schema-type.d.ts.map +1 -0
  95. package/generators/shell/source-literal.d.ts +28 -0
  96. package/generators/shell/source-literal.d.ts.map +1 -1
  97. package/host/create-shell.d.ts +4 -1
  98. package/host/create-shell.d.ts.map +1 -1
  99. package/host/display-modes/dialog.d.ts +1 -1
  100. package/host/display-modes/dialog.d.ts.map +1 -1
  101. package/host/display-modes/embedded.d.ts +1 -1
  102. package/host/display-modes/embedded.d.ts.map +1 -1
  103. package/host/index.cjs.js +150 -30
  104. package/host/index.d.ts +53 -38
  105. package/host/index.d.ts.map +1 -1
  106. package/host/index.esm.js +129 -9
  107. package/host/lifecycle.d.ts.map +1 -1
  108. package/host/plugins.d.ts +1 -34
  109. package/host/plugins.d.ts.map +1 -1
  110. package/host/types.d.ts +49 -0
  111. package/host/types.d.ts.map +1 -1
  112. package/hostee/index.cjs.js +54 -9
  113. package/hostee/index.d.ts +41 -1
  114. package/hostee/index.d.ts.map +1 -1
  115. package/hostee/index.esm.js +51 -6
  116. package/hostee/lifecycle.d.ts.map +1 -1
  117. package/hostee/types.d.ts +40 -0
  118. package/hostee/types.d.ts.map +1 -1
  119. package/index.cjs.js +32 -1
  120. package/index.d.ts +89 -3
  121. package/index.d.ts.map +1 -1
  122. package/index.esm.js +32 -1
  123. package/nx/executors/build/index.cjs.js +14975 -137
  124. package/nx/executors/build/index.esm.js +14935 -115
  125. package/nx/executors/serve/executor.d.ts.map +1 -1
  126. package/nx/executors/serve/index.cjs.js +6594 -80
  127. package/nx/executors/serve/index.esm.js +6529 -44
  128. package/nx/generators/feature/index.cjs.js +8751 -108
  129. package/nx/generators/feature/index.esm.js +8711 -81
  130. package/package.json +15 -5
  131. package/server/debug-ui/index.d.ts +2 -0
  132. package/server/debug-ui/index.d.ts.map +1 -0
  133. package/server/debug-ui/index.html +15 -0
  134. package/server/debug-ui/index.iife.js +427 -0
  135. package/server/debug-ui/index.iife.min.js +1 -0
  136. package/server/dev-server.d.ts.map +1 -1
  137. package/server/index.cjs.js +78 -10
  138. package/server/index.esm.js +78 -11
  139. package/server/module-dir.d.ts +17 -0
  140. package/server/module-dir.d.ts.map +1 -0
  141. package/server/module-dir.stub.d.ts +15 -0
  142. package/server/module-dir.stub.d.ts.map +1 -0
  143. package/shared/contract.d.ts +1 -1
  144. package/shared/contract.d.ts.map +1 -1
  145. package/shared/control.d.ts +4 -0
  146. package/shared/control.d.ts.map +1 -1
  147. package/shared/invert-contract.d.ts +20 -0
  148. package/shared/invert-contract.d.ts.map +1 -0
  149. package/shared/request.d.ts +68 -0
  150. package/shared/request.d.ts.map +1 -0
  151. package/{nx/shared → shared}/shutdown.d.ts +3 -2
  152. package/shared/shutdown.d.ts.map +1 -0
  153. package/shared/types.d.ts +72 -1
  154. package/shared/types.d.ts.map +1 -1
  155. package/_shared/nx/shared/context/index.cjs.js +0 -18
  156. package/_shared/nx/shared/context/index.esm.js +0 -16
  157. package/nx/shared/shutdown.d.ts.map +0 -1
  158. package/server/debug-ui/bootstrap.d.ts +0 -2
  159. package/server/debug-ui/bootstrap.d.ts.map +0 -1
@@ -224,7 +224,7 @@ const removeCodesign = (inputs) => {
224
224
  };
225
225
  };
226
226
 
227
- const log$g = logger.channel('builder:bin:native:dispatch');
227
+ const log$h = logger.channel('builder:bin:native:dispatch');
228
228
  const REPORT_DIR_PREFIX$2 = 'hf-builder-inject-';
229
229
  const SWC_NODE_REGISTER$1 = '@swc-node/register';
230
230
  const swcNodeAvailable = (workspaceRoot) => node_fs.existsSync(index_cjs_js$7.join(workspaceRoot, 'node_modules', '@swc-node', 'register', 'index.js'));
@@ -287,10 +287,10 @@ const dispatchInjectWorker = async (job, options) => {
287
287
  const dispatched = { ...job, reportPath };
288
288
  try {
289
289
  options.monitor?.check(`bin:native:dispatch:${label}:start`);
290
- log$g.info(`inject dispatch: ${label}`);
290
+ log$h.info(`inject dispatch: ${label}`);
291
291
  await runOne$2(dispatched, options, label);
292
292
  const report = readReport$2(reportPath, label);
293
- log$g.debug(`inject dispatch done: ${label} size=${report.outputSize}B heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB t=${report.durationMs}ms`);
293
+ log$h.debug(`inject dispatch done: ${label} size=${report.outputSize}B heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB t=${report.durationMs}ms`);
294
294
  options.monitor?.check(`bin:native:dispatch:${label}:end`);
295
295
  return report;
296
296
  }
@@ -5472,12 +5472,12 @@ const generateSeaConfig = (inputs) => ({
5472
5472
  disableExperimentalSEAWarning: true,
5473
5473
  });
5474
5474
 
5475
- const log$f = logger.channel('builder:bin:native');
5475
+ const log$g = logger.channel('builder:bin:native');
5476
5476
  const BYTES_PER_MB$2 = 1024 * 1024;
5477
5477
  const formatMB$2 = (bytes) => (bytes / BYTES_PER_MB$2).toFixed(1);
5478
5478
  const memorySnapshot = (label) => {
5479
5479
  const usage = process.memoryUsage();
5480
- log$f.debug(`${label}: heap=${formatMB$2(usage.heapUsed)}MB rss=${formatMB$2(usage.rss)}MB free=${formatMB$2(node_os.freemem())}MB`);
5480
+ log$g.debug(`${label}: heap=${formatMB$2(usage.heapUsed)}MB rss=${formatMB$2(usage.rss)}MB free=${formatMB$2(node_os.freemem())}MB`);
5481
5481
  };
5482
5482
  const requireSeaConfig = (bin) => {
5483
5483
  if (!bin.sea)
@@ -5505,7 +5505,7 @@ const buildNativeBin = async (inputs) => {
5505
5505
  const platforms = requireSeaConfig(bin);
5506
5506
  const target = currentPlatformTarget();
5507
5507
  if (!currentPlatformMatches(platforms)) {
5508
- log$f.info(`skipping native build for ${bin.name}: current platform ${target} not in declared targets [${platforms.join(', ')}]`);
5508
+ log$g.info(`skipping native build for ${bin.name}: current platform ${target} not in declared targets [${platforms.join(', ')}]`);
5509
5509
  return [];
5510
5510
  }
5511
5511
  const binDir = index_cjs_js$7.join(ctx.outputPath, 'bin');
@@ -5513,14 +5513,14 @@ const buildNativeBin = async (inputs) => {
5513
5513
  const seaConfigPath = index_cjs_js$7.join(binDir, `${bin.name}.sea-config.json`);
5514
5514
  const blobPath = index_cjs_js$7.join(binDir, `${bin.name}.sea-prep.blob`);
5515
5515
  const outputBinary = resolveOutputBinaryPath(binDir, bin.name, target);
5516
- log$f.info(`building native bin: ${bin.name} (${target})`);
5516
+ log$g.info(`building native bin: ${bin.name} (${target})`);
5517
5517
  memorySnapshot(`${bin.name}: pre-sea-config`);
5518
5518
  const seaConfig = generateSeaConfig({ mainPath: cjsOutputPath, outputPath: blobPath });
5519
5519
  index_cjs_js$7.writeJsonFile(seaConfigPath, seaConfig);
5520
5520
  memorySnapshot(`${bin.name}: pre-sea-blob`);
5521
5521
  const blobStart = index_cjs_js$5.dateNow();
5522
5522
  generateSeaBlob({ seaConfigPath, outputBlobPath: blobPath });
5523
- log$f.debug(`${bin.name}: sea blob generated in ${index_cjs_js$5.dateNow() - blobStart}ms`);
5523
+ log$g.debug(`${bin.name}: sea blob generated in ${index_cjs_js$5.dateNow() - blobStart}ms`);
5524
5524
  const hostBinary = resolveHostBinary({ platform: target });
5525
5525
  memorySnapshot(`${bin.name}: pre-inject (host=${hostBinary})`);
5526
5526
  const invocation = resolveDefaultInjectWorkerPath(ctx.workspaceRoot);
@@ -5537,10 +5537,10 @@ const buildNativeBin = async (inputs) => {
5537
5537
  sentinelFuse: NODE_SEA_FUSE,
5538
5538
  reportPath: '',
5539
5539
  }, { workerPath: invocation.path, execArgv: invocation.execArgv, label: bin.name });
5540
- log$f.debug(`${bin.name}: inject completed in ${report.durationMs}ms (worker end heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB)`);
5540
+ log$g.debug(`${bin.name}: inject completed in ${report.durationMs}ms (worker end heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB)`);
5541
5541
  }
5542
5542
  catch (error) {
5543
- log$f.error(`${bin.name}: postject inject failed: ${error instanceof Error ? error.message : String(error)}`);
5543
+ log$g.error(`${bin.name}: postject inject failed: ${error instanceof Error ? error.message : String(error)}`);
5544
5544
  throw error;
5545
5545
  }
5546
5546
  memorySnapshot(`${bin.name}: post-inject`);
@@ -5801,7 +5801,7 @@ const ascendForWorker = (offset, startDir = currentModuleDir()) => {
5801
5801
  return probeDir(dir, offset);
5802
5802
  };
5803
5803
 
5804
- const log$e = logger.channel('builder:bundle:rollup:dispatch');
5804
+ const log$f = logger.channel('builder:bundle:rollup:dispatch');
5805
5805
  const REPORT_DIR_PREFIX$1 = 'hf-builder-rollup-';
5806
5806
  const resolveDefaultRollupWorkerPath = (startDir) => ascendForWorker(['bundle', 'rollup', 'worker'], startDir);
5807
5807
  const createReportDir$1 = () => node_fs.mkdtempSync(index_cjs_js$7.join(node_os.tmpdir(), REPORT_DIR_PREFIX$1));
@@ -5848,10 +5848,10 @@ const dispatchRollupWorker = async (descriptor, options) => {
5848
5848
  const job = { ...descriptor, reportPath };
5849
5849
  try {
5850
5850
  options.monitor?.check(`bundle:rollup:dispatch:${label}:start`);
5851
- log$e.info(`rollup dispatch: ${label}`);
5851
+ log$f.info(`rollup dispatch: ${label}`);
5852
5852
  await runOne$1(job, options, label);
5853
5853
  const report = readReport$1(reportPath, label);
5854
- log$e.debug(`rollup dispatch done: ${label} size=${report.outputSize}B heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB t=${report.durationMs}ms`);
5854
+ log$f.debug(`rollup dispatch done: ${label} size=${report.outputSize}B heap=${report.endHeapMB.toFixed(1)}MB rss=${report.endRssMB.toFixed(1)}MB t=${report.durationMs}ms`);
5855
5855
  options.monitor?.check(`bundle:rollup:dispatch:${label}:end`);
5856
5856
  return report;
5857
5857
  }
@@ -5860,7 +5860,7 @@ const dispatchRollupWorker = async (descriptor, options) => {
5860
5860
  }
5861
5861
  };
5862
5862
 
5863
- const log$d = logger.channel('builder:bin:script');
5863
+ const log$e = logger.channel('builder:bin:script');
5864
5864
  const resolveWorkerOrThrow = () => {
5865
5865
  const invocation = resolveDefaultRollupWorkerPath();
5866
5866
  if (!invocation) {
@@ -5876,7 +5876,7 @@ const buildJsBin = async (bin, ctx) => {
5876
5876
  const outputs = [];
5877
5877
  for (const format of formats) {
5878
5878
  const descriptor = toBinBuildDescriptor(bin, ctx, format, formats, '');
5879
- log$d.info(`building ${format} bin: ${bin.name}`);
5879
+ log$e.info(`building ${format} bin: ${bin.name}`);
5880
5880
  await dispatchRollupWorker(descriptor, {
5881
5881
  workerPath: worker.path,
5882
5882
  execArgv: worker.execArgv,
@@ -6174,7 +6174,7 @@ const collectWorkspaceExactSpecifiers = (context) => {
6174
6174
  return index_cjs_js$4.from(set);
6175
6175
  };
6176
6176
 
6177
- const log$c = logger.channel('builder:bundle:dependencies:pre-pass');
6177
+ const log$d = logger.channel('builder:bundle:dependencies:pre-pass');
6178
6178
  const REPORT_DIR_PREFIX = 'hf-builder-prepass-';
6179
6179
  const createReportDir = () => node_fs.mkdtempSync(index_cjs_js$7.join(node_os.tmpdir(), REPORT_DIR_PREFIX));
6180
6180
  const reportPathFor = (reportDir, job, index) => index_cjs_js$7.join(reportDir, `${index}-${job.dep.replace(/\//g, '__')}-${job.kind}-${job.format}.json`);
@@ -6219,11 +6219,11 @@ const runPrePass = async (jobs, options) => {
6219
6219
  try {
6220
6220
  for (const [index, job] of jobs.entries()) {
6221
6221
  const reportPath = reportPathFor(reportDir, job, index);
6222
- log$c.info(`pre-pass ${index + 1}/${jobs.length}: ${job.dep} (${job.kind}/${job.format})`);
6222
+ log$d.info(`pre-pass ${index + 1}/${jobs.length}: ${job.dep} (${job.kind}/${job.format})`);
6223
6223
  options.monitor?.check(`bundle:dependencies:prepass:${index + 1}/${jobs.length}:${job.dep}:${job.kind}:${job.format}:start`);
6224
6224
  await runOne(job, reportPath, options);
6225
6225
  const result = readReport(reportPath, job);
6226
- log$c.debug(`pre-pass ${index + 1}/${jobs.length} done: ${job.dep} size=${result.outputSize}B heap=${result.endHeapMB.toFixed(1)}MB rss=${result.endRssMB.toFixed(1)}MB t=${result.durationMs}ms`);
6226
+ log$d.debug(`pre-pass ${index + 1}/${jobs.length} done: ${job.dep} size=${result.outputSize}B heap=${result.endHeapMB.toFixed(1)}MB rss=${result.endRssMB.toFixed(1)}MB t=${result.durationMs}ms`);
6227
6227
  options.monitor?.check(`bundle:dependencies:prepass:${index + 1}/${jobs.length}:${job.dep}:${job.kind}:${job.format}:end`);
6228
6228
  results.push(result);
6229
6229
  }
@@ -6236,7 +6236,7 @@ const runPrePass = async (jobs, options) => {
6236
6236
 
6237
6237
  const dtsPathFor = (outputPath, srcPath) => srcPath ? join(outputPath, srcPath, 'index.d.ts') : join(outputPath, 'index.d.ts');
6238
6238
 
6239
- const log$b = logger.channel('builder:bundle:declarations:dts-per-entry');
6239
+ const log$c = logger.channel('builder:bundle:declarations:dts-per-entry');
6240
6240
  const buildSiblingDescriptors = (entries, context, currentSrcPath) => {
6241
6241
  const descriptors = [];
6242
6242
  for (const entry of entries) {
@@ -6287,10 +6287,10 @@ const runDtsPerEntry = async (context, monitor) => {
6287
6287
  }
6288
6288
  const jobs = buildJobs$1(context.entryPointDiscovery.entryPoints, context);
6289
6289
  if (jobs.length === 0) {
6290
- log$b.debug('per-entry d.ts pass: no entries with tsc-emitted .d.ts files');
6290
+ log$c.debug('per-entry d.ts pass: no entries with tsc-emitted .d.ts files');
6291
6291
  return;
6292
6292
  }
6293
- log$b.info(`per-entry d.ts pass: ${jobs.length} entries`);
6293
+ log$c.info(`per-entry d.ts pass: ${jobs.length} entries`);
6294
6294
  monitor?.check('bundle:declarations:dts-perentry:start');
6295
6295
  await runPrePass(jobs, { workerPath: invocation.path, execArgv: invocation.execArgv, monitor });
6296
6296
  monitor?.check('bundle:declarations:dts-perentry:end');
@@ -6364,7 +6364,7 @@ const resolveDepEntry = (options) => {
6364
6364
  return absolutize(node_path.dirname(pkgPath), relative);
6365
6365
  };
6366
6366
 
6367
- const log$a = logger.channel('builder:bundle:declarations:dts-pre-pass');
6367
+ const log$b = logger.channel('builder:bundle:declarations:dts-pre-pass');
6368
6368
  const workspaceDtsOutputFile = (entry) => entry.subPath ? `${entry.specifier}/index.d.ts` : `${entry.packageName}/index.d.ts`;
6369
6369
  const filterRouteEntries$1 = (entry, all) => all.filter((other) => (entry.policy === 'sub-path' ? other.specifier !== entry.specifier : other.packageName !== entry.packageName));
6370
6370
  const buildJobs = (deps, context) => {
@@ -6379,7 +6379,7 @@ const buildJobs = (deps, context) => {
6379
6379
  inputPath = resolveDepEntry({ dep, projectRoot: context.projectRoot, workspaceRoot: context.workspaceRoot, kind: 'dts' });
6380
6380
  }
6381
6381
  catch (error) {
6382
- log$a.warn(`skipping d.ts pre-pass for ${dep}: ${error instanceof Error ? error.message : String(error)}`);
6382
+ log$b.warn(`skipping d.ts pre-pass for ${dep}: ${error instanceof Error ? error.message : String(error)}`);
6383
6383
  continue;
6384
6384
  }
6385
6385
  const otherNpmDeps = deps.filter((d) => d !== dep);
@@ -6437,10 +6437,10 @@ const runDtsPrePass = async (context, monitor) => {
6437
6437
  const workspaceJobs = buildWorkspaceJobs(context, context.bundledDeps);
6438
6438
  const jobs = [...npmJobs, ...workspaceJobs];
6439
6439
  if (jobs.length === 0) {
6440
- log$a.debug('d.ts pre-pass: no eligible deps (all skipped due to missing types)');
6440
+ log$b.debug('d.ts pre-pass: no eligible deps (all skipped due to missing types)');
6441
6441
  return;
6442
6442
  }
6443
- log$a.info(`d.ts pre-pass: ${npmJobs.length} npm + ${workspaceJobs.length} workspace = ${jobs.length} job(s)`);
6443
+ log$b.info(`d.ts pre-pass: ${npmJobs.length} npm + ${workspaceJobs.length} workspace = ${jobs.length} job(s)`);
6444
6444
  monitor?.check('bundle:declarations:dts-prepass:start');
6445
6445
  await runPrePass(jobs, { workerPath: invocation.path, execArgv: invocation.execArgv, monitor });
6446
6446
  monitor?.check('bundle:declarations:dts-prepass:end');
@@ -6470,54 +6470,54 @@ const flattenDeclarationPaths = (context) => {
6470
6470
  cleanupNestedDirs(context.outputPath);
6471
6471
  };
6472
6472
 
6473
- const log$9 = logger.channel('builder:bundle:declarations');
6473
+ const log$a = logger.channel('builder:bundle:declarations');
6474
6474
  const HEARTBEAT_INTERVAL_MS = 5000;
6475
6475
  const BYTES_PER_MB$1 = 1024 * 1024;
6476
6476
  const formatMB$1 = (bytes) => (bytes / BYTES_PER_MB$1).toFixed(1);
6477
6477
  const startHeartbeat = (label, startedAt) => index_cjs_js$1.setInterval(() => {
6478
6478
  const usage = process.memoryUsage();
6479
6479
  const elapsedSec = ((index_cjs_js$5.dateNow() - startedAt) / 1000).toFixed(1);
6480
- log$9.info(`${label} still running: elapsed=${elapsedSec}s parent heap=${formatMB$1(usage.heapUsed)}MB rss=${formatMB$1(usage.rss)}MB`);
6480
+ log$a.info(`${label} still running: elapsed=${elapsedSec}s parent heap=${formatMB$1(usage.heapUsed)}MB rss=${formatMB$1(usage.rss)}MB`);
6481
6481
  }, HEARTBEAT_INTERVAL_MS);
6482
6482
  const runTsc = (tscPath, args, cwd) => index_cjs_js.createPromise((resolve, reject) => {
6483
6483
  const startedAt = index_cjs_js$5.dateNow();
6484
6484
  const child = node_child_process.spawn(tscPath, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
6485
- log$9.info(`tsc spawned: pid=${child.pid ?? 'unknown'}`);
6486
- log$9.debug(`tsc args: ${args.join(' ')}`);
6485
+ log$a.info(`tsc spawned: pid=${child.pid ?? 'unknown'}`);
6486
+ log$a.debug(`tsc args: ${args.join(' ')}`);
6487
6487
  const heartbeat = startHeartbeat('tsc', startedAt);
6488
6488
  let stdout = '';
6489
6489
  let stderr = '';
6490
6490
  child.stdout.on('data', (chunk) => {
6491
6491
  const text = chunk.toString();
6492
6492
  stdout += text;
6493
- log$9.debug(text.trimEnd());
6493
+ log$a.debug(text.trimEnd());
6494
6494
  });
6495
6495
  child.stderr.on('data', (chunk) => {
6496
6496
  const text = chunk.toString();
6497
6497
  stderr += text;
6498
- log$9.warn(text.trimEnd());
6498
+ log$a.warn(text.trimEnd());
6499
6499
  });
6500
6500
  child.on('error', (error) => {
6501
6501
  index_cjs_js$1.clearInterval(heartbeat);
6502
- log$9.error(`tsc spawn error: ${error.message}`);
6502
+ log$a.error(`tsc spawn error: ${error.message}`);
6503
6503
  reject(error);
6504
6504
  });
6505
6505
  child.on('close', (code) => {
6506
6506
  index_cjs_js$1.clearInterval(heartbeat);
6507
6507
  const durationMs = index_cjs_js$5.dateNow() - startedAt;
6508
6508
  if (code !== 0) {
6509
- log$9.error(`tsc failed with exit code ${code} after ${durationMs}ms`);
6509
+ log$a.error(`tsc failed with exit code ${code} after ${durationMs}ms`);
6510
6510
  reject(index_cjs_js$2.createError(`tsc failed with exit code ${code}`));
6511
6511
  return;
6512
6512
  }
6513
- log$9.info(`tsc exited 0 in ${durationMs}ms`);
6513
+ log$a.info(`tsc exited 0 in ${durationMs}ms`);
6514
6514
  resolve({ success: true, stdout, stderr });
6515
6515
  });
6516
6516
  });
6517
6517
  const generateDeclarations = async (context) => {
6518
- log$9.info('generating typescript declarations');
6518
+ log$a.info('generating typescript declarations');
6519
6519
  const usage = process.memoryUsage();
6520
- log$9.info(`pre-tsc memory: parent heap=${formatMB$1(usage.heapUsed)}MB rss=${formatMB$1(usage.rss)}MB`);
6520
+ log$a.info(`pre-tsc memory: parent heap=${formatMB$1(usage.heapUsed)}MB rss=${formatMB$1(usage.rss)}MB`);
6521
6521
  const tscPath = index_cjs_js$b.join(context.workspaceRoot, 'node_modules', '.bin', 'tsc');
6522
6522
  const args = [
6523
6523
  '--project',
@@ -6531,10 +6531,10 @@ const generateDeclarations = async (context) => {
6531
6531
  context.outputPath,
6532
6532
  ];
6533
6533
  const result = await runTsc(tscPath, args, context.projectRoot);
6534
- log$9.info('flattening declaration paths');
6534
+ log$a.info('flattening declaration paths');
6535
6535
  const flattenStart = index_cjs_js$5.dateNow();
6536
6536
  flattenDeclarationPaths(context);
6537
- log$9.info(`flatten complete in ${index_cjs_js$5.dateNow() - flattenStart}ms`);
6537
+ log$a.info(`flatten complete in ${index_cjs_js$5.dateNow() - flattenStart}ms`);
6538
6538
  return result;
6539
6539
  };
6540
6540
 
@@ -6591,7 +6591,7 @@ const entryDirOf = (entry, context) => entry.isRoot ? context.outputPath : index
6591
6591
 
6592
6592
  const isUnderDir = (path, dir) => path === dir || path.startsWith(`${dir}/`);
6593
6593
 
6594
- const log$8 = logger.channel('builder:bundle:declarations:prune-orphans');
6594
+ const log$9 = logger.channel('builder:bundle:declarations:prune-orphans');
6595
6595
  const ORPHAN_DTS_RE = /\.d\.ts$|\.d\.ts\.map$/;
6596
6596
  const INDEX_DTS_NAME = 'index.d.ts';
6597
6597
  const toDtsTarget$1 = (dir, spec, depsRoot) => {
@@ -6620,7 +6620,7 @@ const computeReachableDeclarations = (roots, depsRoot) => {
6620
6620
  head += 1;
6621
6621
  const source = index_cjs_js$7.readFileContent(file);
6622
6622
  if (hasDynamicSpecifier(source)) {
6623
- log$8.warn(`dynamic import/require in ${file}; keeping all orphan declarations for safety`);
6623
+ log$9.warn(`dynamic import/require in ${file}; keeping all orphan declarations for safety`);
6624
6624
  return null;
6625
6625
  }
6626
6626
  const dir = index_cjs_js$7.getDirname(file);
@@ -6674,7 +6674,7 @@ const pruneOrphanDeclarations = (context) => {
6674
6674
  total += 1;
6675
6675
  }
6676
6676
  if (total > 0)
6677
- log$8.info(`pruned ${total} orphan declaration file(s)`);
6677
+ log$9.info(`pruned ${total} orphan declaration file(s)`);
6678
6678
  return total;
6679
6679
  };
6680
6680
 
@@ -7351,7 +7351,7 @@ const rewriteEntry = (parsed, hoists, format) => {
7351
7351
  return applyEdits$1(parsed.sourceFile.text, [...deletions, { start: parsed.headerEnd, end: parsed.headerEnd, text: insertion }]);
7352
7352
  };
7353
7353
 
7354
- const log$7 = logger.channel('builder:bundle:dedupe');
7354
+ const log$8 = logger.channel('builder:bundle:dedupe');
7355
7355
  const FORMATS = ['esm', 'cjs'];
7356
7356
  const toSpecifier = (relative) => (relative.startsWith('.') ? relative : `./${relative}`);
7357
7357
  const recomputeSpecifier = (specifier, fromDir, baseDir) =>
@@ -7435,7 +7435,7 @@ const hoistSharedFirstParty = (context, monitor) => {
7435
7435
  monitor?.check(`bundle:dedupe:shared-first-party:${format}:end`);
7436
7436
  }
7437
7437
  if (report.chunksWritten > 0)
7438
- log$7.info(`hoisted ${report.chunksWritten} shared chunk(s), reclaimed ${report.bytesReclaimed} byte(s)`);
7438
+ log$8.info(`hoisted ${report.chunksWritten} shared chunk(s), reclaimed ${report.bytesReclaimed} byte(s)`);
7439
7439
  return report;
7440
7440
  };
7441
7441
 
@@ -7548,7 +7548,7 @@ const removeEmptyDirs = (root) => {
7548
7548
  return removed;
7549
7549
  };
7550
7550
 
7551
- const log$6 = logger.channel('builder:bundle:dependencies:prune');
7551
+ const log$7 = logger.channel('builder:bundle:dependencies:prune');
7552
7552
  const computeReachable = (roots, depsRoot, resolveTarget = (target) => target) => {
7553
7553
  const reachable = index_cjs_js$9.createSet([]);
7554
7554
  const queue = [];
@@ -7564,7 +7564,7 @@ const computeReachable = (roots, depsRoot, resolveTarget = (target) => target) =
7564
7564
  head += 1;
7565
7565
  const source = index_cjs_js$7.readFileContent(file);
7566
7566
  if (isUnderDir(file, depsRoot) && hasDynamicSpecifier(source)) {
7567
- log$6.warn(`dynamic import/require in ${file}; skipping dependency orphan prune for safety`);
7567
+ log$7.warn(`dynamic import/require in ${file}; skipping dependency orphan prune for safety`);
7568
7568
  return null;
7569
7569
  }
7570
7570
  const dir = index_cjs_js$7.getDirname(file);
@@ -7796,7 +7796,7 @@ const collectImportEdges = (source, importerDir, format) => {
7796
7796
  return edges;
7797
7797
  };
7798
7798
 
7799
- const log$5 = logger.channel('builder:bundle:dependencies:prune');
7799
+ const log$6 = logger.channel('builder:bundle:dependencies:prune');
7800
7800
  const MAX_ITERATIONS = 50;
7801
7801
  const FORMAT_FILES$1 = [
7802
7802
  { format: 'esm', fileName: 'index.esm.js' },
@@ -7848,7 +7848,7 @@ const processFormat$1 = (context, depsRoot, format, fileName, result) => {
7848
7848
  if (!stripChunks(usageMap, format, result))
7849
7849
  return;
7850
7850
  if (iteration === MAX_ITERATIONS - 1)
7851
- log$5.warn(`dead-export strip for ${format} hit the ${MAX_ITERATIONS}-iteration cap before converging`);
7851
+ log$6.warn(`dead-export strip for ${format} hit the ${MAX_ITERATIONS}-iteration cap before converging`);
7852
7852
  }
7853
7853
  };
7854
7854
  const stripDeadExportsPass = (context, depsRoot) => {
@@ -8151,7 +8151,7 @@ const destructureRequires = (source, chunkDir, isSafeTarget) => {
8151
8151
  return { code: applyEdits(source, edits), rewrittenBindings: qualified.length };
8152
8152
  };
8153
8153
 
8154
- const log$4 = logger.channel('builder:bundle:dependencies:prune');
8154
+ const log$5 = logger.channel('builder:bundle:dependencies:prune');
8155
8155
  const CJS_CHUNK = 'index.cjs.js';
8156
8156
  const collectRequireTargets = (source, chunkDir, chunkSet) => {
8157
8157
  const sourceFile = parseChunk(source);
@@ -8240,7 +8240,7 @@ const destructureRequiresPass = (depsRoot) => {
8240
8240
  for (const chunk of chunks) {
8241
8241
  const source = index_cjs_js$7.readFileContent(chunk);
8242
8242
  if (hasDynamicSpecifier(source)) {
8243
- log$4.warn(`dynamic import/require in ${chunk}; skipping require-destructure pass for safety`);
8243
+ log$5.warn(`dynamic import/require in ${chunk}; skipping require-destructure pass for safety`);
8244
8244
  return result;
8245
8245
  }
8246
8246
  sources.set(chunk, source);
@@ -8464,6 +8464,8 @@ const stripDeadPropertiesPass = (context, depsRoot) => {
8464
8464
  };
8465
8465
 
8466
8466
  const PRESERVE = /@(?:__PURE__|__NO_SIDE_EFFECTS__|license|preserve|cc_on)|^\s*\/[*/]!|#__PURE__/;
8467
+ // why: an eslint pragma is internal tooling residue that must never ship, even when its description text happens to contain a preserved marker like '@preserve'; it takes precedence over PRESERVE.
8468
+ const ESLINT_PRAGMA = /^\/[*/]\s*eslint-(?:disable|enable)/;
8467
8469
  const VALUE_END_TOKENS = index_cjs_js$9.createSet([
8468
8470
  ts.SyntaxKind.Identifier,
8469
8471
  ts.SyntaxKind.NumericLiteral,
@@ -8538,7 +8540,10 @@ const removalRange = (text, comment) => {
8538
8540
  };
8539
8541
 
8540
8542
  const stripComments = (source) => {
8541
- const removable = collectComments(source).filter((range) => !PRESERVE.test(source.slice(range.start, range.end)));
8543
+ const removable = collectComments(source).filter((range) => {
8544
+ const text = source.slice(range.start, range.end);
8545
+ return ESLINT_PRAGMA.test(text) || !PRESERVE.test(text);
8546
+ });
8542
8547
  if (removable.length === 0)
8543
8548
  return null;
8544
8549
  const ranges = removable.map((comment) => removalRange(source, comment));
@@ -8565,7 +8570,7 @@ const stripCommentsPass = (depsRoot) => {
8565
8570
  return result;
8566
8571
  };
8567
8572
 
8568
- const log$3 = logger.channel('builder:bundle:dependencies:prune');
8573
+ const log$4 = logger.channel('builder:bundle:dependencies:prune');
8569
8574
 
8570
8575
  const pruneDependencies = (context, monitor) => {
8571
8576
  const depsRoot = depsRootOf(context);
@@ -8600,7 +8605,7 @@ const pruneDependencies = (context, monitor) => {
8600
8605
  report.deadPropertiesRemoved > 0 ||
8601
8606
  report.requireBindingsDestructured > 0 ||
8602
8607
  report.commentBytesRemoved > 0) {
8603
- log$3.info(`pruned ${report.orphanFilesRemoved} orphan dependency file(s), ${report.deadExportsRemoved} dead export(s), and ${report.deadPropertiesRemoved} dead namespace slot(s), destructured ${report.requireBindingsDestructured} require binding(s), stripped ${report.commentBytesRemoved} comment byte(s), reclaimed ${report.bytesRemoved} byte(s)`);
8608
+ log$4.info(`pruned ${report.orphanFilesRemoved} orphan dependency file(s), ${report.deadExportsRemoved} dead export(s), and ${report.deadPropertiesRemoved} dead namespace slot(s), destructured ${report.requireBindingsDestructured} require binding(s), stripped ${report.commentBytesRemoved} comment byte(s), reclaimed ${report.bytesRemoved} byte(s)`);
8604
8609
  }
8605
8610
  return report;
8606
8611
  };
@@ -8634,6 +8639,34 @@ const resolveEntries = (config, discoveredEntries) => {
8634
8639
  return entries;
8635
8640
  };
8636
8641
 
8642
+ const log$3 = logger.channel('builder:bundle:strip-comments');
8643
+ const stripFile = (file, result) => {
8644
+ const source = index_cjs_js$7.readFileContent(file);
8645
+ const stripped = stripComments(source);
8646
+ if (stripped === null)
8647
+ return;
8648
+ index_cjs_js$7.writeFileContent(file, stripped);
8649
+ result.commentBytesRemoved += Buffer.byteLength(source) - Buffer.byteLength(stripped);
8650
+ };
8651
+
8652
+ const stripBundleCommentsPass = (outputPath, outputs) => {
8653
+ const result = { commentBytesRemoved: 0 };
8654
+ for (const { config } of outputs.iife) {
8655
+ if (config.sourcemap)
8656
+ continue;
8657
+ stripFile(index_cjs_js$7.join(outputPath, config.output ?? 'bundle', 'index.iife.js'), result);
8658
+ }
8659
+ for (const { config } of outputs.umd) {
8660
+ if (config.sourcemap)
8661
+ continue;
8662
+ stripFile(index_cjs_js$7.join(outputPath, config.output ?? 'bundle', 'index.umd.js'), result);
8663
+ }
8664
+ if (result.commentBytesRemoved > 0) {
8665
+ log$3.info(`bundle comment strip: removed ${result.commentBytesRemoved} bytes from iife/umd outputs`);
8666
+ }
8667
+ return result;
8668
+ };
8669
+
8637
8670
  const log$2 = logger.channel('builder:bundle');
8638
8671
  const toArray = (value) => (value === undefined ? [] : index_cjs_js$4.isArray(value) ? value : [value]);
8639
8672
  const collectFormatsRequestingPrePass = (config) => {
@@ -8818,6 +8851,8 @@ const runBundlePhase = async (context, config, monitor) => {
8818
8851
  monitor?.check('bundle:cjs:end:post-recover');
8819
8852
  await runIifeFormats(config, context, outputs, resolveDispatch, monitor);
8820
8853
  await runUmdFormats(config, context, outputs, resolveDispatch, monitor);
8854
+ stripBundleCommentsPass(context.outputPath, outputs);
8855
+ monitor?.check('bundle:strip-comments:end');
8821
8856
  await recover();
8822
8857
  monitor?.check('bundle:declarations:start');
8823
8858
  await generateDeclarations(context);
@@ -9203,7 +9238,6 @@ const constructLicenseUrl = (repository, licenseFileName) => {
9203
9238
 
9204
9239
  const log = logger.channel('builder:package:licenses');
9205
9240
  const matchPattern = (content, source) =>
9206
- // eslint-disable-next-line workspace/no-unsafe-regex -- @preserve: SPDX patterns are static, vetted strings declared inline
9207
9241
  index_cjs_js$f.createRegExp(source, 'i').test(content);
9208
9242
  const findLicenseFile = (packageDir) => {
9209
9243
  const match = index_cjs_js$7.readDirectory(packageDir).find((f) => f.isFile && /^license(\.md|\.txt)?$/i.test(f.name));