@litsx/babel-preset-litsx 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -85,8 +85,9 @@ function normalizeInMemoryFiles(files) {
85
85
 
86
86
  function createStructuralHookResolver(options = {}) {
87
87
  const inMemoryFiles = normalizeInMemoryFiles(options.inMemoryFiles);
88
- const moduleCache = new Map();
89
- const resolvedImportCache = new Map();
88
+ const compilationSession = options.__litsxCompilationSession || null;
89
+ const moduleCache = compilationSession?.importedModuleAnalysisCache || new Map();
90
+ const resolvedImportCache = compilationSession?.resolvedImportCache || new Map();
90
91
  const providedTypescriptSession =
91
92
  options?.typescriptSession?.projectSession || options?.typescriptSession || null;
92
93
  const compilerOptionsCache = new Map();
@@ -252,6 +253,17 @@ function createStructuralHookResolver(options = {}) {
252
253
  return resolved;
253
254
  }
254
255
 
256
+ function resolveModuleReference(analysis, reference) {
257
+ if (!analysis || !reference?.source || reference.source === RUNTIME_MODULE) {
258
+ return reference?.resolvedSource || null;
259
+ }
260
+ if (Object.prototype.hasOwnProperty.call(reference, "resolvedSource")) {
261
+ return reference.resolvedSource;
262
+ }
263
+ reference.resolvedSource = resolveImport(analysis.filename, reference.source);
264
+ return reference.resolvedSource;
265
+ }
266
+
255
267
  function getParserPluginsForModule(filename, source) {
256
268
  if (/\.(?:[cm]?ts|tsx|litsx)$/i.test(filename)) {
257
269
  return ["typescript"];
@@ -332,12 +344,14 @@ function createStructuralHookResolver(options = {}) {
332
344
  filename: normalizedFilename,
333
345
  importBindings: new Map(),
334
346
  exportBindings: new Map(),
347
+ exportAllSources: [],
335
348
  defineHookLocals: new Set(),
336
349
  runtimeNamespaceLocals: new Set(),
337
350
  structuralLocals: new Set(),
338
351
  structuralLocalInfo: new Map(),
339
352
  customHookPaths: new Map(),
340
353
  customHookUsageCache: new Map(),
354
+ customHookRuntimeUsageCache: new Map(),
341
355
  };
342
356
  moduleCache.set(normalizedFilename, analysis);
343
357
 
@@ -359,7 +373,6 @@ function createStructuralHookResolver(options = {}) {
359
373
 
360
374
  if (statementPath.isImportDeclaration()) {
361
375
  const sourceValue = node.source.value;
362
- const resolvedSource = resolveImport(normalizedFilename, sourceValue);
363
376
  for (const specifier of node.specifiers) {
364
377
  const localName = specifier.local?.name;
365
378
  if (!localName) continue;
@@ -367,7 +380,6 @@ function createStructuralHookResolver(options = {}) {
367
380
  analysis.importBindings.set(localName, {
368
381
  importedName,
369
382
  source: sourceValue,
370
- resolvedSource,
371
383
  });
372
384
  if (sourceValue === RUNTIME_MODULE && importedName === "defineHook") {
373
385
  analysis.defineHookLocals.add(localName);
@@ -414,6 +426,13 @@ function createStructuralHookResolver(options = {}) {
414
426
  }
415
427
  }
416
428
 
429
+ if (statementPath.isExportAllDeclaration()) {
430
+ analysis.exportAllSources.push({
431
+ source: node.source.value,
432
+ });
433
+ continue;
434
+ }
435
+
417
436
  if (statementPath.isExportNamedDeclaration()) {
418
437
  const exportNode = statementPath.node;
419
438
  const declaration = exportNode.declaration;
@@ -440,7 +459,7 @@ function createStructuralHookResolver(options = {}) {
440
459
  if (exportNode.source?.value) {
441
460
  addExportBinding(analysis, exportedName, {
442
461
  importedName: localName,
443
- resolvedSource: resolveImport(normalizedFilename, exportNode.source.value),
462
+ source: exportNode.source.value,
444
463
  });
445
464
  } else {
446
465
  addExportBinding(analysis, exportedName, { localName });
@@ -456,16 +475,34 @@ function createStructuralHookResolver(options = {}) {
456
475
 
457
476
  function isNamespaceStructuralUse(analysis, objectName, propertyName, seen) {
458
477
  const importInfo = analysis.importBindings.get(objectName);
459
- if (!importInfo?.resolvedSource || importInfo.importedName !== "*") {
478
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
479
+ if (!resolvedSource || importInfo.importedName !== "*") {
460
480
  return false;
461
481
  }
462
- const importedModule = analyzeModule(importInfo.resolvedSource);
482
+ const importedModule = analyzeModule(resolvedSource);
463
483
  return (
464
484
  isStructuralExport(importedModule, propertyName, seen) ||
465
485
  isStructuralCustomExport(importedModule, propertyName, seen)
466
486
  );
467
487
  }
468
488
 
489
+ function isNamespaceRuntimeHelperUse(analysis, objectName, propertyName) {
490
+ const importInfo = analysis.importBindings.get(objectName);
491
+ return (
492
+ importInfo?.source === RUNTIME_MODULE &&
493
+ importInfo.importedName === "*" &&
494
+ RUNTIME_HELPERS.includes(propertyName)
495
+ );
496
+ }
497
+
498
+ function isRuntimeHelperImport(analysis, localName) {
499
+ const importInfo = analysis.importBindings.get(localName);
500
+ return (
501
+ importInfo?.source === RUNTIME_MODULE &&
502
+ RUNTIME_HELPERS.includes(importInfo.importedName)
503
+ );
504
+ }
505
+
469
506
  function localCustomHookUsesStructural(analysis, localName, seen = new Set()) {
470
507
  if (!analysis || !localName) return false;
471
508
  const key = `${analysis.filename}:local:${localName}`;
@@ -506,8 +543,9 @@ function createStructuralHookResolver(options = {}) {
506
543
  return;
507
544
  }
508
545
  const importInfo = analysis.importBindings.get(name);
509
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
510
- const importedModule = analyzeModule(importInfo.resolvedSource);
546
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
547
+ if (resolvedSource && importInfo.importedName !== "*") {
548
+ const importedModule = analyzeModule(resolvedSource);
511
549
  if (
512
550
  isStructuralExport(importedModule, importInfo.importedName, nextSeen) ||
513
551
  isStructuralCustomExport(importedModule, importInfo.importedName, nextSeen)
@@ -538,6 +576,85 @@ function createStructuralHookResolver(options = {}) {
538
576
  return usesStructural;
539
577
  }
540
578
 
579
+ function localCustomHookUsesRuntimeHook(analysis, localName, seen = new Set()) {
580
+ if (!analysis || !localName) return false;
581
+ const key = `${analysis.filename}:runtime-local:${localName}`;
582
+ if (analysis.customHookRuntimeUsageCache.has(localName)) {
583
+ return analysis.customHookRuntimeUsageCache.get(localName);
584
+ }
585
+ if (seen.has(key)) return false;
586
+ const nextSeen = new Set(seen);
587
+ nextSeen.add(key);
588
+
589
+ const fnPath = analysis.customHookPaths.get(localName);
590
+ if (!fnPath?.traverse) {
591
+ analysis.customHookRuntimeUsageCache.set(localName, false);
592
+ return false;
593
+ }
594
+
595
+ let usesRuntimeHook = false;
596
+ fnPath.traverse({
597
+ CallExpression(callPath) {
598
+ if (usesRuntimeHook) {
599
+ callPath.stop();
600
+ return;
601
+ }
602
+ const callee = callPath.get("callee");
603
+ if (callee.isIdentifier()) {
604
+ const name = callee.node.name;
605
+ if (isRuntimeHelperImport(analysis, name)) {
606
+ usesRuntimeHook = true;
607
+ callPath.stop();
608
+ return;
609
+ }
610
+ if (
611
+ analysis.customHookPaths.has(name) &&
612
+ localCustomHookUsesRuntimeHook(analysis, name, nextSeen)
613
+ ) {
614
+ usesRuntimeHook = true;
615
+ callPath.stop();
616
+ return;
617
+ }
618
+ const importInfo = analysis.importBindings.get(name);
619
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
620
+ if (resolvedSource && importInfo.importedName !== "*") {
621
+ const importedModule = analyzeModule(resolvedSource);
622
+ if (isRuntimeCustomExport(importedModule, importInfo.importedName, nextSeen)) {
623
+ usesRuntimeHook = true;
624
+ callPath.stop();
625
+ }
626
+ }
627
+ return;
628
+ }
629
+
630
+ if (callee.isMemberExpression({ computed: false })) {
631
+ const object = callee.get("object");
632
+ const property = callee.get("property");
633
+ if (!object.isIdentifier() || !property.isIdentifier()) {
634
+ return;
635
+ }
636
+ if (isNamespaceRuntimeHelperUse(analysis, object.node.name, property.node.name)) {
637
+ usesRuntimeHook = true;
638
+ callPath.stop();
639
+ return;
640
+ }
641
+ const importInfo = analysis.importBindings.get(object.node.name);
642
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
643
+ if (resolvedSource && importInfo.importedName === "*") {
644
+ const importedModule = analyzeModule(resolvedSource);
645
+ if (isRuntimeCustomExport(importedModule, property.node.name, nextSeen)) {
646
+ usesRuntimeHook = true;
647
+ callPath.stop();
648
+ }
649
+ }
650
+ }
651
+ },
652
+ });
653
+
654
+ analysis.customHookRuntimeUsageCache.set(localName, usesRuntimeHook);
655
+ return usesRuntimeHook;
656
+ }
657
+
541
658
  function getStructuralExportInfo(analysis, exportedName, seen = new Set()) {
542
659
  if (!analysis || !exportedName) return false;
543
660
  const key = `${analysis.filename}:${exportedName}`;
@@ -547,12 +664,23 @@ function createStructuralHookResolver(options = {}) {
547
664
 
548
665
  const exportInfo = analysis.exportBindings.get(exportedName);
549
666
  if (!exportInfo) {
667
+ for (const exportAll of analysis.exportAllSources || []) {
668
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
669
+ if (!resolvedSource) continue;
670
+ const info = getStructuralExportInfo(
671
+ analyzeModule(resolvedSource),
672
+ exportedName,
673
+ nextSeen
674
+ );
675
+ if (info) return info;
676
+ }
550
677
  return false;
551
678
  }
552
679
 
553
- if (exportInfo.resolvedSource) {
680
+ const exportSource = resolveModuleReference(analysis, exportInfo);
681
+ if (exportSource) {
554
682
  return getStructuralExportInfo(
555
- analyzeModule(exportInfo.resolvedSource),
683
+ analyzeModule(exportSource),
556
684
  exportInfo.importedName,
557
685
  nextSeen
558
686
  );
@@ -569,9 +697,10 @@ function createStructuralHookResolver(options = {}) {
569
697
  }
570
698
 
571
699
  const importInfo = analysis.importBindings.get(exportInfo.localName);
572
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
700
+ const importSource = resolveModuleReference(analysis, importInfo);
701
+ if (importSource && importInfo.importedName !== "*") {
573
702
  return getStructuralExportInfo(
574
- analyzeModule(importInfo.resolvedSource),
703
+ analyzeModule(importSource),
575
704
  importInfo.importedName,
576
705
  nextSeen
577
706
  );
@@ -593,12 +722,26 @@ function createStructuralHookResolver(options = {}) {
593
722
 
594
723
  const exportInfo = analysis.exportBindings.get(exportedName);
595
724
  if (!exportInfo) {
725
+ for (const exportAll of analysis.exportAllSources || []) {
726
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
727
+ if (!resolvedSource) continue;
728
+ if (
729
+ isStructuralCustomExport(
730
+ analyzeModule(resolvedSource),
731
+ exportedName,
732
+ nextSeen
733
+ )
734
+ ) {
735
+ return true;
736
+ }
737
+ }
596
738
  return false;
597
739
  }
598
740
 
599
- if (exportInfo.resolvedSource) {
741
+ const exportSource = resolveModuleReference(analysis, exportInfo);
742
+ if (exportSource) {
600
743
  return isStructuralCustomExport(
601
- analyzeModule(exportInfo.resolvedSource),
744
+ analyzeModule(exportSource),
602
745
  exportInfo.importedName,
603
746
  nextSeen
604
747
  );
@@ -609,9 +752,91 @@ function createStructuralHookResolver(options = {}) {
609
752
  }
610
753
 
611
754
  const importInfo = analysis.importBindings.get(exportInfo.localName);
612
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
755
+ const importSource = resolveModuleReference(analysis, importInfo);
756
+ if (importSource && importInfo.importedName !== "*") {
613
757
  return isStructuralCustomExport(
614
- analyzeModule(importInfo.resolvedSource),
758
+ analyzeModule(importSource),
759
+ importInfo.importedName,
760
+ nextSeen
761
+ );
762
+ }
763
+
764
+ return false;
765
+ }
766
+
767
+ function hasExportBinding(analysis, exportedName, seen = new Set()) {
768
+ if (!analysis || !exportedName) return "unresolved";
769
+ const key = `${analysis.filename}:has-export:${exportedName}`;
770
+ if (seen.has(key)) return false;
771
+ const nextSeen = new Set(seen);
772
+ nextSeen.add(key);
773
+
774
+ if (analysis.exportBindings.has(exportedName)) {
775
+ return true;
776
+ }
777
+
778
+ let sawUnresolvedExportAll = false;
779
+ for (const exportAll of analysis.exportAllSources || []) {
780
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
781
+ if (!resolvedSource) {
782
+ sawUnresolvedExportAll = true;
783
+ continue;
784
+ }
785
+ const result = hasExportBinding(
786
+ analyzeModule(resolvedSource),
787
+ exportedName,
788
+ nextSeen
789
+ );
790
+ if (result === true) return true;
791
+ if (result === "unresolved") sawUnresolvedExportAll = true;
792
+ }
793
+
794
+ return sawUnresolvedExportAll ? "unresolved" : false;
795
+ }
796
+
797
+ function isRuntimeCustomExport(analysis, exportedName, seen = new Set()) {
798
+ if (!analysis || !exportedName) return false;
799
+ const key = `${analysis.filename}:runtime-custom:${exportedName}`;
800
+ if (seen.has(key)) return false;
801
+ const nextSeen = new Set(seen);
802
+ nextSeen.add(key);
803
+
804
+ const exportInfo = analysis.exportBindings.get(exportedName);
805
+ if (!exportInfo) {
806
+ for (const exportAll of analysis.exportAllSources || []) {
807
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
808
+ if (!resolvedSource) continue;
809
+ if (
810
+ isRuntimeCustomExport(
811
+ analyzeModule(resolvedSource),
812
+ exportedName,
813
+ nextSeen
814
+ )
815
+ ) {
816
+ return true;
817
+ }
818
+ }
819
+ return false;
820
+ }
821
+
822
+ const exportSource = resolveModuleReference(analysis, exportInfo);
823
+ if (exportSource) {
824
+ return isRuntimeCustomExport(
825
+ analyzeModule(exportSource),
826
+ exportInfo.importedName,
827
+ nextSeen
828
+ );
829
+ }
830
+
831
+ if (localCustomHookUsesRuntimeHook(analysis, exportInfo.localName, nextSeen)) {
832
+ return true;
833
+ }
834
+
835
+ const importInfo = analysis.importBindings.get(exportInfo.localName);
836
+ const importSource = resolveModuleReference(analysis, importInfo);
837
+ if (importSource && importInfo.importedName !== "*") {
838
+ return isRuntimeCustomExport(
839
+ analyzeModule(importSource),
615
840
  importInfo.importedName,
616
841
  nextSeen
617
842
  );
@@ -620,10 +845,22 @@ function createStructuralHookResolver(options = {}) {
620
845
  return false;
621
846
  }
622
847
 
623
- return function structuralHookResolver({ filename, source, importedName }) {
848
+ return function structuralHookResolver({ filename, source, importedName, runtimeCustomOnly = false }) {
624
849
  const resolved = resolveImport(filename, source);
625
- if (!resolved) return false;
850
+ if (!resolved) return runtimeCustomOnly ? "unresolved-custom-hook" : false;
626
851
  const analysis = analyzeModule(resolved);
852
+ if (!analysis && runtimeCustomOnly) {
853
+ return "unresolved-custom-hook";
854
+ }
855
+ if (runtimeCustomOnly) {
856
+ const exportStatus = hasExportBinding(analysis, importedName);
857
+ if (exportStatus !== true) {
858
+ return "unresolved-custom-hook";
859
+ }
860
+ return isRuntimeCustomExport(analysis, importedName)
861
+ ? "runtime-custom-hook"
862
+ : false;
863
+ }
627
864
  const structuralInfo = getStructuralExportInfo(analysis, importedName);
628
865
  if (structuralInfo) {
629
866
  return structuralInfo;
@@ -667,6 +904,8 @@ function createStableIdCallsiteMetadata(callPath, state, t) {
667
904
  }
668
905
 
669
906
  function transformLitsxHooks(api, options = {}) {
907
+ const structuralHookResolver = createStructuralHookResolver(options);
908
+ const ignoredCustomHookSources = new Set(options.ignoredCustomHookSources || []);
670
909
  const plugin = babelPluginSharedHooks.createRuntimeHooksTransform({
671
910
  pluginName: "transform-litsx-hooks",
672
911
  runtimeModule: RUNTIME_MODULE,
@@ -679,7 +918,22 @@ function transformLitsxHooks(api, options = {}) {
679
918
 
680
919
  return plugin(api, {
681
920
  ...options,
682
- structuralHookResolver: createStructuralHookResolver(options),
921
+ structuralHookResolver,
922
+ customHookResolver({ filename, source, importedName }) {
923
+ if (ignoredCustomHookSources.has(source)) {
924
+ return false;
925
+ }
926
+ const result = structuralHookResolver({
927
+ filename,
928
+ source,
929
+ importedName,
930
+ runtimeCustomOnly: true,
931
+ });
932
+ if (result === "unresolved-custom-hook") {
933
+ return result;
934
+ }
935
+ return result === "runtime-custom-hook";
936
+ },
683
937
  });
684
938
  }
685
939
 
@@ -1 +1 @@
1
- {"version":3,"file":"transform-litsx-hooks.cjs","sources":["../../src/internal/transform-litsx-hooks.js"],"sourcesContent":["import { createRuntimeHooksTransform } from \"@litsx/babel-plugin-shared-hooks\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport traverse from \"@babel/traverse\";\nimport parser from \"@litsx/babel-parser\";\nimport { ensureTypescriptModule } from \"./transform-litsx-properties.js\";\n\nconst RUNTIME_MODULE = \"@litsx/core\";\nconst IMPORT_SOURCES = [RUNTIME_MODULE];\n\nconst RUNTIME_HELPERS = [\n \"useOnConnect\",\n \"useAfterUpdate\",\n \"useOnCommit\",\n \"useMemoValue\",\n \"useStableCallback\",\n \"useEvent\",\n \"useEmit\",\n \"usePrevious\",\n \"useReducedState\",\n \"useState\",\n \"useControlledState\",\n \"useAsyncState\",\n \"useOptimistic\",\n \"useExpose\",\n \"useExternalStore\",\n \"useHost\",\n \"useHostContent\",\n \"useSlot\",\n \"useTextContent\",\n \"useTransition\",\n \"useDeferredValue\",\n \"useStyle\",\n \"useRef\",\n \"useCallbackRef\",\n \"useStableId\",\n];\n\nconst SOURCE_EXTENSIONS = [\n \"\",\n \".litsx\",\n \".tsx\",\n \".ts\",\n \".jsx\",\n \".js\",\n \".mjs\",\n \".cjs\",\n];\nconst DEFAULT_MODULE_RESOLUTION_OPTIONS = {\n moduleResolution: 100,\n allowJs: true,\n checkJs: false,\n jsx: 1,\n target: 99,\n module: 99,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n};\n\nfunction normalizeFilePath(value) {\n return normalizePath(value);\n}\n\nfunction getTraverse() {\n return traverse.default || traverse;\n}\n\nfunction normalizeInMemoryFiles(files) {\n const normalized = new Map();\n if (!files || typeof files !== \"object\") {\n return normalized;\n }\n for (const [filename, source] of Object.entries(files)) {\n if (typeof source !== \"string\") continue;\n normalized.set(normalizeFilePath(filename), source);\n }\n return normalized;\n}\n\nfunction createStructuralHookResolver(options = {}) {\n const inMemoryFiles = normalizeInMemoryFiles(options.inMemoryFiles);\n const moduleCache = new Map();\n const resolvedImportCache = new Map();\n const providedTypescriptSession =\n options?.typescriptSession?.projectSession || options?.typescriptSession || null;\n const compilerOptionsCache = new Map();\n const moduleResolutionHostCache = new Map();\n\n function getProgramForFile(filename) {\n if (!providedTypescriptSession?.getProgram || !filename) {\n return null;\n }\n\n try {\n if (providedTypescriptSession.kind === \"project\") {\n return providedTypescriptSession.getProgram();\n }\n if (providedTypescriptSession.kind === \"standalone\") {\n return providedTypescriptSession.getProgram(normalizeFilePath(filename));\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n function getCompilerOptions(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (compilerOptionsCache.has(cacheKey)) {\n return compilerOptionsCache.get(cacheKey);\n }\n const program = getProgramForFile(filename);\n const compilerOptions =\n program?.getCompilerOptions?.() ||\n options.compilerOptions ||\n DEFAULT_MODULE_RESOLUTION_OPTIONS;\n compilerOptionsCache.set(cacheKey, compilerOptions);\n return compilerOptions;\n }\n\n function getModuleResolutionHost(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (moduleResolutionHostCache.has(cacheKey)) {\n return moduleResolutionHostCache.get(cacheKey);\n }\n const ts = ensureTypescriptModule();\n const host = providedTypescriptSession?.host || ts.sys;\n moduleResolutionHostCache.set(cacheKey, host);\n return host;\n }\n\n function fileExists(filename) {\n const normalized = normalizeFilePath(filename);\n return inMemoryFiles.has(normalized) || fs.existsSync(normalized);\n }\n\n function readFile(filename) {\n const normalized = normalizeFilePath(filename);\n if (inMemoryFiles.has(normalized)) {\n return inMemoryFiles.get(normalized);\n }\n try {\n return fs.readFileSync(normalized, \"utf8\");\n } catch {\n return null;\n }\n }\n\n function resolveWithExtensions(base) {\n const normalizedBase = normalizeFilePath(base);\n for (const ext of SOURCE_EXTENSIONS) {\n const candidate = `${normalizedBase}${ext}`;\n if (fileExists(candidate)) {\n return normalizeFilePath(candidate);\n }\n }\n for (const ext of SOURCE_EXTENSIONS.filter(Boolean)) {\n const candidate = normalizeFilePath(path.join(base, `index${ext}`));\n if (fileExists(candidate)) {\n return candidate;\n }\n }\n return null;\n }\n\n function resolvePathAlias(containingFile, source) {\n const compilerOptions = getCompilerOptions(containingFile) || {};\n const baseUrl = compilerOptions.baseUrl\n ? normalizeFilePath(\n path.isAbsolute(compilerOptions.baseUrl)\n ? compilerOptions.baseUrl\n : path.resolve(path.dirname(containingFile), compilerOptions.baseUrl)\n )\n : normalizeFilePath(path.dirname(containingFile));\n const pathMappings = compilerOptions.paths || {};\n\n for (const [pattern, substitutions] of Object.entries(pathMappings)) {\n const starIndex = pattern.indexOf(\"*\");\n const isStarPattern = starIndex !== -1;\n const prefix = isStarPattern ? pattern.slice(0, starIndex) : pattern;\n const suffix = isStarPattern ? pattern.slice(starIndex + 1) : \"\";\n\n if (isStarPattern) {\n if (!source.startsWith(prefix) || !source.endsWith(suffix)) {\n continue;\n }\n } else if (source !== pattern) {\n continue;\n }\n\n const wildcardValue = isStarPattern\n ? source.slice(prefix.length, source.length - suffix.length)\n : \"\";\n\n for (const substitution of substitutions || []) {\n const substituted = isStarPattern\n ? substitution.replace(\"*\", wildcardValue)\n : substitution;\n const candidateBase = path.isAbsolute(substituted)\n ? substituted\n : path.join(baseUrl, substituted);\n const resolved = resolveWithExtensions(candidateBase);\n if (resolved) {\n return resolved;\n }\n }\n }\n\n return null;\n }\n\n function resolveImport(containingFile, source) {\n if (typeof source !== \"string\" || !containingFile) {\n return null;\n }\n const cacheKey = `${normalizeFilePath(containingFile)}::${source}`;\n if (resolvedImportCache.has(cacheKey)) {\n return resolvedImportCache.get(cacheKey);\n }\n\n const baseDir = path.dirname(containingFile);\n let resolved = source.startsWith(\".\") || source.startsWith(\"/\")\n ? resolveWithExtensions(path.resolve(baseDir, source))\n : resolvePathAlias(containingFile, source);\n\n if (!resolved) {\n const ts = ensureTypescriptModule();\n try {\n const resolution = ts.resolveModuleName(\n source,\n normalizeFilePath(containingFile),\n getCompilerOptions(containingFile),\n getModuleResolutionHost(containingFile)\n );\n const resolvedFileName = resolution?.resolvedModule?.resolvedFileName;\n if (resolvedFileName) {\n resolved = resolveWithExtensions(resolvedFileName) || normalizeFilePath(resolvedFileName);\n }\n } catch {\n resolved = null;\n }\n }\n\n resolvedImportCache.set(cacheKey, resolved);\n return resolved;\n }\n\n function getParserPluginsForModule(filename, source) {\n if (/\\.(?:[cm]?ts|tsx|litsx)$/i.test(filename)) {\n return [\"typescript\"];\n }\n if (/\\b(?:as|satisfies)\\s+[^;,)]+/.test(source)) {\n return [\"typescript\"];\n }\n return [];\n }\n\n function getImportedName(specifier) {\n if (specifier.type === \"ImportDefaultSpecifier\") return \"default\";\n if (specifier.type === \"ImportNamespaceSpecifier\") return \"*\";\n return specifier.imported?.name ?? specifier.imported?.value ?? null;\n }\n\n function isDefineHookCallee(node, analysis) {\n if (!node) return false;\n if (node.type === \"Identifier\") {\n return analysis.defineHookLocals.has(node.name);\n }\n if (\n node.type === \"MemberExpression\" &&\n !node.computed &&\n node.property?.type === \"Identifier\" &&\n node.property.name === \"defineHook\" &&\n node.object?.type === \"Identifier\"\n ) {\n return analysis.runtimeNamespaceLocals.has(node.object.name);\n }\n return false;\n }\n\n function addExportBinding(analysis, exportedName, info) {\n if (exportedName) {\n analysis.exportBindings.set(exportedName, info);\n }\n }\n\n function getDefineHookPhaseInfo(init) {\n const definition = init?.arguments?.[0];\n if (!definition || definition.type !== \"ObjectExpression\") {\n return {\n hasStaticPhase: false,\n hasInstancePhase: true,\n };\n }\n const hasProperty = (name) => definition.properties.some((property) => {\n if (property.type !== \"ObjectProperty\" && property.type !== \"ObjectMethod\") {\n return false;\n }\n const key = property.key;\n return (\n (key.type === \"Identifier\" && key.name === name) ||\n (key.type === \"StringLiteral\" && key.value === name)\n );\n });\n return {\n hasStaticPhase: hasProperty(\"static\"),\n hasInstancePhase: hasProperty(\"setup\") || hasProperty(\"createState\") || hasProperty(\"middlewares\"),\n };\n }\n\n function analyzeModule(filename) {\n const normalizedFilename = normalizeFilePath(filename);\n if (!normalizedFilename) return null;\n if (moduleCache.has(normalizedFilename)) {\n return moduleCache.get(normalizedFilename);\n }\n\n const source = readFile(normalizedFilename);\n if (typeof source !== \"string\") {\n moduleCache.set(normalizedFilename, null);\n return null;\n }\n\n const analysis = {\n filename: normalizedFilename,\n importBindings: new Map(),\n exportBindings: new Map(),\n defineHookLocals: new Set(),\n runtimeNamespaceLocals: new Set(),\n structuralLocals: new Set(),\n structuralLocalInfo: new Map(),\n customHookPaths: new Map(),\n customHookUsageCache: new Map(),\n };\n moduleCache.set(normalizedFilename, analysis);\n\n let ast;\n try {\n ast = parser.parse(source, {\n sourceType: \"module\",\n plugins: getParserPluginsForModule(normalizedFilename, source),\n });\n } catch {\n moduleCache.set(normalizedFilename, null);\n return null;\n }\n\n getTraverse()(ast, {\n Program(programPath) {\n for (const statementPath of programPath.get(\"body\")) {\n const node = statementPath.node;\n\n if (statementPath.isImportDeclaration()) {\n const sourceValue = node.source.value;\n const resolvedSource = resolveImport(normalizedFilename, sourceValue);\n for (const specifier of node.specifiers) {\n const localName = specifier.local?.name;\n if (!localName) continue;\n const importedName = getImportedName(specifier);\n analysis.importBindings.set(localName, {\n importedName,\n source: sourceValue,\n resolvedSource,\n });\n if (sourceValue === RUNTIME_MODULE && importedName === \"defineHook\") {\n analysis.defineHookLocals.add(localName);\n }\n if (\n sourceValue === RUNTIME_MODULE &&\n (specifier.type === \"ImportNamespaceSpecifier\" ||\n specifier.type === \"ImportDefaultSpecifier\")\n ) {\n analysis.runtimeNamespaceLocals.add(localName);\n }\n }\n continue;\n }\n\n const declarationPath = statementPath.isExportNamedDeclaration()\n ? statementPath.get(\"declaration\")\n : statementPath;\n\n if (declarationPath?.isFunctionDeclaration?.()) {\n const localName = declarationPath.node.id?.name;\n if (localName && /^use[A-Z0-9]/.test(localName)) {\n analysis.customHookPaths.set(localName, declarationPath);\n }\n }\n\n if (declarationPath?.isVariableDeclaration?.()) {\n for (const declaratorPath of declarationPath.get(\"declarations\")) {\n const id = declaratorPath.node.id;\n if (id?.type !== \"Identifier\") continue;\n const init = declaratorPath.node.init;\n if (init?.type === \"CallExpression\" && isDefineHookCallee(init.callee, analysis)) {\n analysis.structuralLocals.add(id.name);\n analysis.structuralLocalInfo.set(id.name, getDefineHookPhaseInfo(init));\n } else if (\n /^use[A-Z0-9]/.test(id.name) &&\n (\n init?.type === \"FunctionExpression\" ||\n init?.type === \"ArrowFunctionExpression\"\n )\n ) {\n analysis.customHookPaths.set(id.name, declaratorPath.get(\"init\"));\n }\n }\n }\n\n if (statementPath.isExportNamedDeclaration()) {\n const exportNode = statementPath.node;\n const declaration = exportNode.declaration;\n if (declaration?.type === \"VariableDeclaration\") {\n for (const declarator of declaration.declarations) {\n const localName = declarator.id?.name;\n if (localName) {\n addExportBinding(analysis, localName, { localName });\n }\n }\n } else if (\n declaration?.type === \"FunctionDeclaration\" ||\n declaration?.type === \"ClassDeclaration\"\n ) {\n addExportBinding(analysis, declaration.id?.name, {\n localName: declaration.id?.name,\n });\n }\n\n for (const specifier of exportNode.specifiers) {\n const exportedName = specifier.exported?.name ?? specifier.exported?.value ?? null;\n if (!exportedName) continue;\n const localName = specifier.local?.name ?? specifier.local?.value ?? exportedName;\n if (exportNode.source?.value) {\n addExportBinding(analysis, exportedName, {\n importedName: localName,\n resolvedSource: resolveImport(normalizedFilename, exportNode.source.value),\n });\n } else {\n addExportBinding(analysis, exportedName, { localName });\n }\n }\n }\n }\n },\n });\n\n return analysis;\n }\n\n function isNamespaceStructuralUse(analysis, objectName, propertyName, seen) {\n const importInfo = analysis.importBindings.get(objectName);\n if (!importInfo?.resolvedSource || importInfo.importedName !== \"*\") {\n return false;\n }\n const importedModule = analyzeModule(importInfo.resolvedSource);\n return (\n isStructuralExport(importedModule, propertyName, seen) ||\n isStructuralCustomExport(importedModule, propertyName, seen)\n );\n }\n\n function localCustomHookUsesStructural(analysis, localName, seen = new Set()) {\n if (!analysis || !localName) return false;\n const key = `${analysis.filename}:local:${localName}`;\n if (analysis.customHookUsageCache.has(localName)) {\n return analysis.customHookUsageCache.get(localName);\n }\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const fnPath = analysis.customHookPaths.get(localName);\n if (!fnPath?.traverse) {\n analysis.customHookUsageCache.set(localName, false);\n return false;\n }\n\n let usesStructural = false;\n fnPath.traverse({\n CallExpression(callPath) {\n if (usesStructural) {\n callPath.stop();\n return;\n }\n const callee = callPath.get(\"callee\");\n if (callee.isIdentifier()) {\n const name = callee.node.name;\n if (analysis.structuralLocals.has(name)) {\n usesStructural = true;\n callPath.stop();\n return;\n }\n if (\n analysis.customHookPaths.has(name) &&\n localCustomHookUsesStructural(analysis, name, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n return;\n }\n const importInfo = analysis.importBindings.get(name);\n if (importInfo?.resolvedSource && importInfo.importedName !== \"*\") {\n const importedModule = analyzeModule(importInfo.resolvedSource);\n if (\n isStructuralExport(importedModule, importInfo.importedName, nextSeen) ||\n isStructuralCustomExport(importedModule, importInfo.importedName, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n }\n }\n return;\n }\n\n if (callee.isMemberExpression({ computed: false })) {\n const object = callee.get(\"object\");\n const property = callee.get(\"property\");\n if (\n object.isIdentifier() &&\n property.isIdentifier() &&\n isNamespaceStructuralUse(analysis, object.node.name, property.node.name, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n }\n }\n },\n });\n\n analysis.customHookUsageCache.set(localName, usesStructural);\n return usesStructural;\n }\n\n function getStructuralExportInfo(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return false;\n const key = `${analysis.filename}:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const exportInfo = analysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n return false;\n }\n\n if (exportInfo.resolvedSource) {\n return getStructuralExportInfo(\n analyzeModule(exportInfo.resolvedSource),\n exportInfo.importedName,\n nextSeen\n );\n }\n\n if (analysis.structuralLocals.has(exportInfo.localName)) {\n return {\n kind: \"structural-hook\",\n ...(analysis.structuralLocalInfo.get(exportInfo.localName) || {\n hasStaticPhase: false,\n hasInstancePhase: true,\n }),\n };\n }\n\n const importInfo = analysis.importBindings.get(exportInfo.localName);\n if (importInfo?.resolvedSource && importInfo.importedName !== \"*\") {\n return getStructuralExportInfo(\n analyzeModule(importInfo.resolvedSource),\n importInfo.importedName,\n nextSeen\n );\n }\n\n return false;\n }\n\n function isStructuralExport(analysis, exportedName, seen = new Set()) {\n return Boolean(getStructuralExportInfo(analysis, exportedName, seen));\n }\n\n function isStructuralCustomExport(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return false;\n const key = `${analysis.filename}:custom:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const exportInfo = analysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n return false;\n }\n\n if (exportInfo.resolvedSource) {\n return isStructuralCustomExport(\n analyzeModule(exportInfo.resolvedSource),\n exportInfo.importedName,\n nextSeen\n );\n }\n\n if (localCustomHookUsesStructural(analysis, exportInfo.localName, nextSeen)) {\n return true;\n }\n\n const importInfo = analysis.importBindings.get(exportInfo.localName);\n if (importInfo?.resolvedSource && importInfo.importedName !== \"*\") {\n return isStructuralCustomExport(\n analyzeModule(importInfo.resolvedSource),\n importInfo.importedName,\n nextSeen\n );\n }\n\n return false;\n }\n\n return function structuralHookResolver({ filename, source, importedName }) {\n const resolved = resolveImport(filename, source);\n if (!resolved) return false;\n const analysis = analyzeModule(resolved);\n const structuralInfo = getStructuralExportInfo(analysis, importedName);\n if (structuralInfo) {\n return structuralInfo;\n }\n if (isStructuralCustomExport(analysis, importedName)) {\n return \"structural-custom-hook\";\n }\n return false;\n };\n}\n\nfunction normalizePath(value) {\n return String(value || \"\").replace(/\\\\/g, \"/\");\n}\n\nfunction hashStableId(value) {\n let hash = 2166136261;\n const text = String(value);\n for (let index = 0; index < text.length; index += 1) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0).toString(36);\n}\n\nfunction createStableIdCallsiteMetadata(callPath, state, t) {\n const filename =\n state.file?.opts?.sourceFileName ||\n state.file?.opts?.filename ||\n state.filename ||\n \"\";\n const normalizedFilename = normalizePath(filename);\n const loc = callPath.node.loc?.start ?? null;\n const start = typeof callPath.node.start === \"number\"\n ? callPath.node.start\n : 0;\n const line = loc?.line ?? 0;\n const column = loc?.column ?? 0;\n const seed = `${normalizedFilename}:${line}:${column}:${start}`;\n return t.stringLiteral(`litsx-stable-${hashStableId(seed)}`);\n}\n\nexport default function transformLitsxHooks(api, options = {}) {\n const plugin = createRuntimeHooksTransform({\n pluginName: \"transform-litsx-hooks\",\n runtimeModule: RUNTIME_MODULE,\n importSources: IMPORT_SOURCES,\n helperNames: RUNTIME_HELPERS,\n callMetadataByHelper: {\n useStableId: createStableIdCallsiteMetadata,\n },\n });\n\n return plugin(api, {\n ...options,\n structuralHookResolver: createStructuralHookResolver(options),\n });\n}\n"],"names":["ensureTypescriptModule","createRuntimeHooksTransform"],"mappings":"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"}
1
+ {"version":3,"file":"transform-litsx-hooks.cjs","sources":["../../src/internal/transform-litsx-hooks.js"],"sourcesContent":["import { createRuntimeHooksTransform } from \"@litsx/babel-plugin-shared-hooks\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport traverse from \"@babel/traverse\";\nimport parser from \"@litsx/babel-parser\";\nimport { ensureTypescriptModule } from \"./transform-litsx-properties.js\";\n\nconst RUNTIME_MODULE = \"@litsx/core\";\nconst IMPORT_SOURCES = [RUNTIME_MODULE];\n\nconst RUNTIME_HELPERS = [\n \"useOnConnect\",\n \"useAfterUpdate\",\n \"useOnCommit\",\n \"useMemoValue\",\n \"useStableCallback\",\n \"useEvent\",\n \"useEmit\",\n \"usePrevious\",\n \"useReducedState\",\n \"useState\",\n \"useControlledState\",\n \"useAsyncState\",\n \"useOptimistic\",\n \"useExpose\",\n \"useExternalStore\",\n \"useHost\",\n \"useHostContent\",\n \"useSlot\",\n \"useTextContent\",\n \"useTransition\",\n \"useDeferredValue\",\n \"useStyle\",\n \"useRef\",\n \"useCallbackRef\",\n \"useStableId\",\n];\n\nconst SOURCE_EXTENSIONS = [\n \"\",\n \".litsx\",\n \".tsx\",\n \".ts\",\n \".jsx\",\n \".js\",\n \".mjs\",\n \".cjs\",\n];\nconst DEFAULT_MODULE_RESOLUTION_OPTIONS = {\n moduleResolution: 100,\n allowJs: true,\n checkJs: false,\n jsx: 1,\n target: 99,\n module: 99,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n};\n\nfunction normalizeFilePath(value) {\n return normalizePath(value);\n}\n\nfunction getTraverse() {\n return traverse.default || traverse;\n}\n\nfunction normalizeInMemoryFiles(files) {\n const normalized = new Map();\n if (!files || typeof files !== \"object\") {\n return normalized;\n }\n for (const [filename, source] of Object.entries(files)) {\n if (typeof source !== \"string\") continue;\n normalized.set(normalizeFilePath(filename), source);\n }\n return normalized;\n}\n\nfunction createStructuralHookResolver(options = {}) {\n const inMemoryFiles = normalizeInMemoryFiles(options.inMemoryFiles);\n const compilationSession = options.__litsxCompilationSession || null;\n const moduleCache = compilationSession?.importedModuleAnalysisCache || new Map();\n const resolvedImportCache = compilationSession?.resolvedImportCache || new Map();\n const providedTypescriptSession =\n options?.typescriptSession?.projectSession || options?.typescriptSession || null;\n const compilerOptionsCache = new Map();\n const moduleResolutionHostCache = new Map();\n\n function getProgramForFile(filename) {\n if (!providedTypescriptSession?.getProgram || !filename) {\n return null;\n }\n\n try {\n if (providedTypescriptSession.kind === \"project\") {\n return providedTypescriptSession.getProgram();\n }\n if (providedTypescriptSession.kind === \"standalone\") {\n return providedTypescriptSession.getProgram(normalizeFilePath(filename));\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n function getCompilerOptions(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (compilerOptionsCache.has(cacheKey)) {\n return compilerOptionsCache.get(cacheKey);\n }\n const program = getProgramForFile(filename);\n const compilerOptions =\n program?.getCompilerOptions?.() ||\n options.compilerOptions ||\n DEFAULT_MODULE_RESOLUTION_OPTIONS;\n compilerOptionsCache.set(cacheKey, compilerOptions);\n return compilerOptions;\n }\n\n function getModuleResolutionHost(filename) {\n const cacheKey = normalizeFilePath(filename);\n if (moduleResolutionHostCache.has(cacheKey)) {\n return moduleResolutionHostCache.get(cacheKey);\n }\n const ts = ensureTypescriptModule();\n const host = providedTypescriptSession?.host || ts.sys;\n moduleResolutionHostCache.set(cacheKey, host);\n return host;\n }\n\n function fileExists(filename) {\n const normalized = normalizeFilePath(filename);\n return inMemoryFiles.has(normalized) || fs.existsSync(normalized);\n }\n\n function readFile(filename) {\n const normalized = normalizeFilePath(filename);\n if (inMemoryFiles.has(normalized)) {\n return inMemoryFiles.get(normalized);\n }\n try {\n return fs.readFileSync(normalized, \"utf8\");\n } catch {\n return null;\n }\n }\n\n function resolveWithExtensions(base) {\n const normalizedBase = normalizeFilePath(base);\n for (const ext of SOURCE_EXTENSIONS) {\n const candidate = `${normalizedBase}${ext}`;\n if (fileExists(candidate)) {\n return normalizeFilePath(candidate);\n }\n }\n for (const ext of SOURCE_EXTENSIONS.filter(Boolean)) {\n const candidate = normalizeFilePath(path.join(base, `index${ext}`));\n if (fileExists(candidate)) {\n return candidate;\n }\n }\n return null;\n }\n\n function resolvePathAlias(containingFile, source) {\n const compilerOptions = getCompilerOptions(containingFile) || {};\n const baseUrl = compilerOptions.baseUrl\n ? normalizeFilePath(\n path.isAbsolute(compilerOptions.baseUrl)\n ? compilerOptions.baseUrl\n : path.resolve(path.dirname(containingFile), compilerOptions.baseUrl)\n )\n : normalizeFilePath(path.dirname(containingFile));\n const pathMappings = compilerOptions.paths || {};\n\n for (const [pattern, substitutions] of Object.entries(pathMappings)) {\n const starIndex = pattern.indexOf(\"*\");\n const isStarPattern = starIndex !== -1;\n const prefix = isStarPattern ? pattern.slice(0, starIndex) : pattern;\n const suffix = isStarPattern ? pattern.slice(starIndex + 1) : \"\";\n\n if (isStarPattern) {\n if (!source.startsWith(prefix) || !source.endsWith(suffix)) {\n continue;\n }\n } else if (source !== pattern) {\n continue;\n }\n\n const wildcardValue = isStarPattern\n ? source.slice(prefix.length, source.length - suffix.length)\n : \"\";\n\n for (const substitution of substitutions || []) {\n const substituted = isStarPattern\n ? substitution.replace(\"*\", wildcardValue)\n : substitution;\n const candidateBase = path.isAbsolute(substituted)\n ? substituted\n : path.join(baseUrl, substituted);\n const resolved = resolveWithExtensions(candidateBase);\n if (resolved) {\n return resolved;\n }\n }\n }\n\n return null;\n }\n\n function resolveImport(containingFile, source) {\n if (typeof source !== \"string\" || !containingFile) {\n return null;\n }\n const cacheKey = `${normalizeFilePath(containingFile)}::${source}`;\n if (resolvedImportCache.has(cacheKey)) {\n return resolvedImportCache.get(cacheKey);\n }\n\n const baseDir = path.dirname(containingFile);\n let resolved = source.startsWith(\".\") || source.startsWith(\"/\")\n ? resolveWithExtensions(path.resolve(baseDir, source))\n : resolvePathAlias(containingFile, source);\n\n if (!resolved) {\n const ts = ensureTypescriptModule();\n try {\n const resolution = ts.resolveModuleName(\n source,\n normalizeFilePath(containingFile),\n getCompilerOptions(containingFile),\n getModuleResolutionHost(containingFile)\n );\n const resolvedFileName = resolution?.resolvedModule?.resolvedFileName;\n if (resolvedFileName) {\n resolved = resolveWithExtensions(resolvedFileName) || normalizeFilePath(resolvedFileName);\n }\n } catch {\n resolved = null;\n }\n }\n\n resolvedImportCache.set(cacheKey, resolved);\n return resolved;\n }\n\n function resolveModuleReference(analysis, reference) {\n if (!analysis || !reference?.source || reference.source === RUNTIME_MODULE) {\n return reference?.resolvedSource || null;\n }\n if (Object.prototype.hasOwnProperty.call(reference, \"resolvedSource\")) {\n return reference.resolvedSource;\n }\n reference.resolvedSource = resolveImport(analysis.filename, reference.source);\n return reference.resolvedSource;\n }\n\n function getParserPluginsForModule(filename, source) {\n if (/\\.(?:[cm]?ts|tsx|litsx)$/i.test(filename)) {\n return [\"typescript\"];\n }\n if (/\\b(?:as|satisfies)\\s+[^;,)]+/.test(source)) {\n return [\"typescript\"];\n }\n return [];\n }\n\n function getImportedName(specifier) {\n if (specifier.type === \"ImportDefaultSpecifier\") return \"default\";\n if (specifier.type === \"ImportNamespaceSpecifier\") return \"*\";\n return specifier.imported?.name ?? specifier.imported?.value ?? null;\n }\n\n function isDefineHookCallee(node, analysis) {\n if (!node) return false;\n if (node.type === \"Identifier\") {\n return analysis.defineHookLocals.has(node.name);\n }\n if (\n node.type === \"MemberExpression\" &&\n !node.computed &&\n node.property?.type === \"Identifier\" &&\n node.property.name === \"defineHook\" &&\n node.object?.type === \"Identifier\"\n ) {\n return analysis.runtimeNamespaceLocals.has(node.object.name);\n }\n return false;\n }\n\n function addExportBinding(analysis, exportedName, info) {\n if (exportedName) {\n analysis.exportBindings.set(exportedName, info);\n }\n }\n\n function getDefineHookPhaseInfo(init) {\n const definition = init?.arguments?.[0];\n if (!definition || definition.type !== \"ObjectExpression\") {\n return {\n hasStaticPhase: false,\n hasInstancePhase: true,\n };\n }\n const hasProperty = (name) => definition.properties.some((property) => {\n if (property.type !== \"ObjectProperty\" && property.type !== \"ObjectMethod\") {\n return false;\n }\n const key = property.key;\n return (\n (key.type === \"Identifier\" && key.name === name) ||\n (key.type === \"StringLiteral\" && key.value === name)\n );\n });\n return {\n hasStaticPhase: hasProperty(\"static\"),\n hasInstancePhase: hasProperty(\"setup\") || hasProperty(\"createState\") || hasProperty(\"middlewares\"),\n };\n }\n\n function analyzeModule(filename) {\n const normalizedFilename = normalizeFilePath(filename);\n if (!normalizedFilename) return null;\n if (moduleCache.has(normalizedFilename)) {\n return moduleCache.get(normalizedFilename);\n }\n\n const source = readFile(normalizedFilename);\n if (typeof source !== \"string\") {\n moduleCache.set(normalizedFilename, null);\n return null;\n }\n\n const analysis = {\n filename: normalizedFilename,\n importBindings: new Map(),\n exportBindings: new Map(),\n exportAllSources: [],\n defineHookLocals: new Set(),\n runtimeNamespaceLocals: new Set(),\n structuralLocals: new Set(),\n structuralLocalInfo: new Map(),\n customHookPaths: new Map(),\n customHookUsageCache: new Map(),\n customHookRuntimeUsageCache: new Map(),\n };\n moduleCache.set(normalizedFilename, analysis);\n\n let ast;\n try {\n ast = parser.parse(source, {\n sourceType: \"module\",\n plugins: getParserPluginsForModule(normalizedFilename, source),\n });\n } catch {\n moduleCache.set(normalizedFilename, null);\n return null;\n }\n\n getTraverse()(ast, {\n Program(programPath) {\n for (const statementPath of programPath.get(\"body\")) {\n const node = statementPath.node;\n\n if (statementPath.isImportDeclaration()) {\n const sourceValue = node.source.value;\n for (const specifier of node.specifiers) {\n const localName = specifier.local?.name;\n if (!localName) continue;\n const importedName = getImportedName(specifier);\n analysis.importBindings.set(localName, {\n importedName,\n source: sourceValue,\n });\n if (sourceValue === RUNTIME_MODULE && importedName === \"defineHook\") {\n analysis.defineHookLocals.add(localName);\n }\n if (\n sourceValue === RUNTIME_MODULE &&\n (specifier.type === \"ImportNamespaceSpecifier\" ||\n specifier.type === \"ImportDefaultSpecifier\")\n ) {\n analysis.runtimeNamespaceLocals.add(localName);\n }\n }\n continue;\n }\n\n const declarationPath = statementPath.isExportNamedDeclaration()\n ? statementPath.get(\"declaration\")\n : statementPath;\n\n if (declarationPath?.isFunctionDeclaration?.()) {\n const localName = declarationPath.node.id?.name;\n if (localName && /^use[A-Z0-9]/.test(localName)) {\n analysis.customHookPaths.set(localName, declarationPath);\n }\n }\n\n if (declarationPath?.isVariableDeclaration?.()) {\n for (const declaratorPath of declarationPath.get(\"declarations\")) {\n const id = declaratorPath.node.id;\n if (id?.type !== \"Identifier\") continue;\n const init = declaratorPath.node.init;\n if (init?.type === \"CallExpression\" && isDefineHookCallee(init.callee, analysis)) {\n analysis.structuralLocals.add(id.name);\n analysis.structuralLocalInfo.set(id.name, getDefineHookPhaseInfo(init));\n } else if (\n /^use[A-Z0-9]/.test(id.name) &&\n (\n init?.type === \"FunctionExpression\" ||\n init?.type === \"ArrowFunctionExpression\"\n )\n ) {\n analysis.customHookPaths.set(id.name, declaratorPath.get(\"init\"));\n }\n }\n }\n\n if (statementPath.isExportAllDeclaration()) {\n analysis.exportAllSources.push({\n source: node.source.value,\n });\n continue;\n }\n\n if (statementPath.isExportNamedDeclaration()) {\n const exportNode = statementPath.node;\n const declaration = exportNode.declaration;\n if (declaration?.type === \"VariableDeclaration\") {\n for (const declarator of declaration.declarations) {\n const localName = declarator.id?.name;\n if (localName) {\n addExportBinding(analysis, localName, { localName });\n }\n }\n } else if (\n declaration?.type === \"FunctionDeclaration\" ||\n declaration?.type === \"ClassDeclaration\"\n ) {\n addExportBinding(analysis, declaration.id?.name, {\n localName: declaration.id?.name,\n });\n }\n\n for (const specifier of exportNode.specifiers) {\n const exportedName = specifier.exported?.name ?? specifier.exported?.value ?? null;\n if (!exportedName) continue;\n const localName = specifier.local?.name ?? specifier.local?.value ?? exportedName;\n if (exportNode.source?.value) {\n addExportBinding(analysis, exportedName, {\n importedName: localName,\n source: exportNode.source.value,\n });\n } else {\n addExportBinding(analysis, exportedName, { localName });\n }\n }\n }\n }\n },\n });\n\n return analysis;\n }\n\n function isNamespaceStructuralUse(analysis, objectName, propertyName, seen) {\n const importInfo = analysis.importBindings.get(objectName);\n const resolvedSource = resolveModuleReference(analysis, importInfo);\n if (!resolvedSource || importInfo.importedName !== \"*\") {\n return false;\n }\n const importedModule = analyzeModule(resolvedSource);\n return (\n isStructuralExport(importedModule, propertyName, seen) ||\n isStructuralCustomExport(importedModule, propertyName, seen)\n );\n }\n\n function isNamespaceRuntimeHelperUse(analysis, objectName, propertyName) {\n const importInfo = analysis.importBindings.get(objectName);\n return (\n importInfo?.source === RUNTIME_MODULE &&\n importInfo.importedName === \"*\" &&\n RUNTIME_HELPERS.includes(propertyName)\n );\n }\n\n function isRuntimeHelperImport(analysis, localName) {\n const importInfo = analysis.importBindings.get(localName);\n return (\n importInfo?.source === RUNTIME_MODULE &&\n RUNTIME_HELPERS.includes(importInfo.importedName)\n );\n }\n\n function localCustomHookUsesStructural(analysis, localName, seen = new Set()) {\n if (!analysis || !localName) return false;\n const key = `${analysis.filename}:local:${localName}`;\n if (analysis.customHookUsageCache.has(localName)) {\n return analysis.customHookUsageCache.get(localName);\n }\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const fnPath = analysis.customHookPaths.get(localName);\n if (!fnPath?.traverse) {\n analysis.customHookUsageCache.set(localName, false);\n return false;\n }\n\n let usesStructural = false;\n fnPath.traverse({\n CallExpression(callPath) {\n if (usesStructural) {\n callPath.stop();\n return;\n }\n const callee = callPath.get(\"callee\");\n if (callee.isIdentifier()) {\n const name = callee.node.name;\n if (analysis.structuralLocals.has(name)) {\n usesStructural = true;\n callPath.stop();\n return;\n }\n if (\n analysis.customHookPaths.has(name) &&\n localCustomHookUsesStructural(analysis, name, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n return;\n }\n const importInfo = analysis.importBindings.get(name);\n const resolvedSource = resolveModuleReference(analysis, importInfo);\n if (resolvedSource && importInfo.importedName !== \"*\") {\n const importedModule = analyzeModule(resolvedSource);\n if (\n isStructuralExport(importedModule, importInfo.importedName, nextSeen) ||\n isStructuralCustomExport(importedModule, importInfo.importedName, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n }\n }\n return;\n }\n\n if (callee.isMemberExpression({ computed: false })) {\n const object = callee.get(\"object\");\n const property = callee.get(\"property\");\n if (\n object.isIdentifier() &&\n property.isIdentifier() &&\n isNamespaceStructuralUse(analysis, object.node.name, property.node.name, nextSeen)\n ) {\n usesStructural = true;\n callPath.stop();\n }\n }\n },\n });\n\n analysis.customHookUsageCache.set(localName, usesStructural);\n return usesStructural;\n }\n\n function localCustomHookUsesRuntimeHook(analysis, localName, seen = new Set()) {\n if (!analysis || !localName) return false;\n const key = `${analysis.filename}:runtime-local:${localName}`;\n if (analysis.customHookRuntimeUsageCache.has(localName)) {\n return analysis.customHookRuntimeUsageCache.get(localName);\n }\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const fnPath = analysis.customHookPaths.get(localName);\n if (!fnPath?.traverse) {\n analysis.customHookRuntimeUsageCache.set(localName, false);\n return false;\n }\n\n let usesRuntimeHook = false;\n fnPath.traverse({\n CallExpression(callPath) {\n if (usesRuntimeHook) {\n callPath.stop();\n return;\n }\n const callee = callPath.get(\"callee\");\n if (callee.isIdentifier()) {\n const name = callee.node.name;\n if (isRuntimeHelperImport(analysis, name)) {\n usesRuntimeHook = true;\n callPath.stop();\n return;\n }\n if (\n analysis.customHookPaths.has(name) &&\n localCustomHookUsesRuntimeHook(analysis, name, nextSeen)\n ) {\n usesRuntimeHook = true;\n callPath.stop();\n return;\n }\n const importInfo = analysis.importBindings.get(name);\n const resolvedSource = resolveModuleReference(analysis, importInfo);\n if (resolvedSource && importInfo.importedName !== \"*\") {\n const importedModule = analyzeModule(resolvedSource);\n if (isRuntimeCustomExport(importedModule, importInfo.importedName, nextSeen)) {\n usesRuntimeHook = true;\n callPath.stop();\n }\n }\n return;\n }\n\n if (callee.isMemberExpression({ computed: false })) {\n const object = callee.get(\"object\");\n const property = callee.get(\"property\");\n if (!object.isIdentifier() || !property.isIdentifier()) {\n return;\n }\n if (isNamespaceRuntimeHelperUse(analysis, object.node.name, property.node.name)) {\n usesRuntimeHook = true;\n callPath.stop();\n return;\n }\n const importInfo = analysis.importBindings.get(object.node.name);\n const resolvedSource = resolveModuleReference(analysis, importInfo);\n if (resolvedSource && importInfo.importedName === \"*\") {\n const importedModule = analyzeModule(resolvedSource);\n if (isRuntimeCustomExport(importedModule, property.node.name, nextSeen)) {\n usesRuntimeHook = true;\n callPath.stop();\n }\n }\n }\n },\n });\n\n analysis.customHookRuntimeUsageCache.set(localName, usesRuntimeHook);\n return usesRuntimeHook;\n }\n\n function getStructuralExportInfo(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return false;\n const key = `${analysis.filename}:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const exportInfo = analysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n for (const exportAll of analysis.exportAllSources || []) {\n const resolvedSource = resolveModuleReference(analysis, exportAll);\n if (!resolvedSource) continue;\n const info = getStructuralExportInfo(\n analyzeModule(resolvedSource),\n exportedName,\n nextSeen\n );\n if (info) return info;\n }\n return false;\n }\n\n const exportSource = resolveModuleReference(analysis, exportInfo);\n if (exportSource) {\n return getStructuralExportInfo(\n analyzeModule(exportSource),\n exportInfo.importedName,\n nextSeen\n );\n }\n\n if (analysis.structuralLocals.has(exportInfo.localName)) {\n return {\n kind: \"structural-hook\",\n ...(analysis.structuralLocalInfo.get(exportInfo.localName) || {\n hasStaticPhase: false,\n hasInstancePhase: true,\n }),\n };\n }\n\n const importInfo = analysis.importBindings.get(exportInfo.localName);\n const importSource = resolveModuleReference(analysis, importInfo);\n if (importSource && importInfo.importedName !== \"*\") {\n return getStructuralExportInfo(\n analyzeModule(importSource),\n importInfo.importedName,\n nextSeen\n );\n }\n\n return false;\n }\n\n function isStructuralExport(analysis, exportedName, seen = new Set()) {\n return Boolean(getStructuralExportInfo(analysis, exportedName, seen));\n }\n\n function isStructuralCustomExport(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return false;\n const key = `${analysis.filename}:custom:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const exportInfo = analysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n for (const exportAll of analysis.exportAllSources || []) {\n const resolvedSource = resolveModuleReference(analysis, exportAll);\n if (!resolvedSource) continue;\n if (\n isStructuralCustomExport(\n analyzeModule(resolvedSource),\n exportedName,\n nextSeen\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n const exportSource = resolveModuleReference(analysis, exportInfo);\n if (exportSource) {\n return isStructuralCustomExport(\n analyzeModule(exportSource),\n exportInfo.importedName,\n nextSeen\n );\n }\n\n if (localCustomHookUsesStructural(analysis, exportInfo.localName, nextSeen)) {\n return true;\n }\n\n const importInfo = analysis.importBindings.get(exportInfo.localName);\n const importSource = resolveModuleReference(analysis, importInfo);\n if (importSource && importInfo.importedName !== \"*\") {\n return isStructuralCustomExport(\n analyzeModule(importSource),\n importInfo.importedName,\n nextSeen\n );\n }\n\n return false;\n }\n\n function hasExportBinding(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return \"unresolved\";\n const key = `${analysis.filename}:has-export:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n if (analysis.exportBindings.has(exportedName)) {\n return true;\n }\n\n let sawUnresolvedExportAll = false;\n for (const exportAll of analysis.exportAllSources || []) {\n const resolvedSource = resolveModuleReference(analysis, exportAll);\n if (!resolvedSource) {\n sawUnresolvedExportAll = true;\n continue;\n }\n const result = hasExportBinding(\n analyzeModule(resolvedSource),\n exportedName,\n nextSeen\n );\n if (result === true) return true;\n if (result === \"unresolved\") sawUnresolvedExportAll = true;\n }\n\n return sawUnresolvedExportAll ? \"unresolved\" : false;\n }\n\n function isRuntimeCustomExport(analysis, exportedName, seen = new Set()) {\n if (!analysis || !exportedName) return false;\n const key = `${analysis.filename}:runtime-custom:${exportedName}`;\n if (seen.has(key)) return false;\n const nextSeen = new Set(seen);\n nextSeen.add(key);\n\n const exportInfo = analysis.exportBindings.get(exportedName);\n if (!exportInfo) {\n for (const exportAll of analysis.exportAllSources || []) {\n const resolvedSource = resolveModuleReference(analysis, exportAll);\n if (!resolvedSource) continue;\n if (\n isRuntimeCustomExport(\n analyzeModule(resolvedSource),\n exportedName,\n nextSeen\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n const exportSource = resolveModuleReference(analysis, exportInfo);\n if (exportSource) {\n return isRuntimeCustomExport(\n analyzeModule(exportSource),\n exportInfo.importedName,\n nextSeen\n );\n }\n\n if (localCustomHookUsesRuntimeHook(analysis, exportInfo.localName, nextSeen)) {\n return true;\n }\n\n const importInfo = analysis.importBindings.get(exportInfo.localName);\n const importSource = resolveModuleReference(analysis, importInfo);\n if (importSource && importInfo.importedName !== \"*\") {\n return isRuntimeCustomExport(\n analyzeModule(importSource),\n importInfo.importedName,\n nextSeen\n );\n }\n\n return false;\n }\n\n return function structuralHookResolver({ filename, source, importedName, runtimeCustomOnly = false }) {\n const resolved = resolveImport(filename, source);\n if (!resolved) return runtimeCustomOnly ? \"unresolved-custom-hook\" : false;\n const analysis = analyzeModule(resolved);\n if (!analysis && runtimeCustomOnly) {\n return \"unresolved-custom-hook\";\n }\n if (runtimeCustomOnly) {\n const exportStatus = hasExportBinding(analysis, importedName);\n if (exportStatus !== true) {\n return \"unresolved-custom-hook\";\n }\n return isRuntimeCustomExport(analysis, importedName)\n ? \"runtime-custom-hook\"\n : false;\n }\n const structuralInfo = getStructuralExportInfo(analysis, importedName);\n if (structuralInfo) {\n return structuralInfo;\n }\n if (isStructuralCustomExport(analysis, importedName)) {\n return \"structural-custom-hook\";\n }\n return false;\n };\n}\n\nfunction normalizePath(value) {\n return String(value || \"\").replace(/\\\\/g, \"/\");\n}\n\nfunction hashStableId(value) {\n let hash = 2166136261;\n const text = String(value);\n for (let index = 0; index < text.length; index += 1) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0).toString(36);\n}\n\nfunction createStableIdCallsiteMetadata(callPath, state, t) {\n const filename =\n state.file?.opts?.sourceFileName ||\n state.file?.opts?.filename ||\n state.filename ||\n \"\";\n const normalizedFilename = normalizePath(filename);\n const loc = callPath.node.loc?.start ?? null;\n const start = typeof callPath.node.start === \"number\"\n ? callPath.node.start\n : 0;\n const line = loc?.line ?? 0;\n const column = loc?.column ?? 0;\n const seed = `${normalizedFilename}:${line}:${column}:${start}`;\n return t.stringLiteral(`litsx-stable-${hashStableId(seed)}`);\n}\n\nexport default function transformLitsxHooks(api, options = {}) {\n const structuralHookResolver = createStructuralHookResolver(options);\n const ignoredCustomHookSources = new Set(options.ignoredCustomHookSources || []);\n const plugin = createRuntimeHooksTransform({\n pluginName: \"transform-litsx-hooks\",\n runtimeModule: RUNTIME_MODULE,\n importSources: IMPORT_SOURCES,\n helperNames: RUNTIME_HELPERS,\n callMetadataByHelper: {\n useStableId: createStableIdCallsiteMetadata,\n },\n });\n\n return plugin(api, {\n ...options,\n structuralHookResolver,\n customHookResolver({ filename, source, importedName }) {\n if (ignoredCustomHookSources.has(source)) {\n return false;\n }\n const result = structuralHookResolver({\n filename,\n source,\n importedName,\n runtimeCustomOnly: true,\n });\n if (result === \"unresolved-custom-hook\") {\n return result;\n }\n return result === \"runtime-custom-hook\";\n },\n });\n}\n"],"names":["ensureTypescriptModule","createRuntimeHooksTransform"],"mappings":"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"}
package/dist/pipeline.cjs CHANGED
@@ -31,10 +31,69 @@ const NATIVE_TRANSFORM_OPTION_KEYS = [
31
31
  ];
32
32
 
33
33
  const HOOK_FEATURE_PATTERN = /\b(?:defineHook|useOnConnect|useAfterUpdate|useOnCommit|useMemoValue|useStableCallback|useEvent|useEmit|usePrevious|useReducedState|useState|useControlledState|useAsyncState|useOptimistic|useExpose|useExternalStore|useHost|useHostContent|useSlot|useTextContent|useTransition|useDeferredValue|useStyle|useRef|useCallbackRef|useStableId)\b/;
34
+ const DEFAULT_OR_NAMED_IMPORT_PATTERN = /\bimport\s+(?!type\b)([^'";]+?)\s+from\b/g;
35
+ const NAMESPACE_IMPORT_PATTERN = /\bimport\s+(?!type\b)\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\b/g;
34
36
  const REF_FEATURE_PATTERN = /\buseRef\b|\bref\s*=/;
35
37
  const SCOPED_ELEMENTS_PATTERN = /<\s*(?:[A-Z][\w.]*(?=[\s/>])|[a-z][\w]*-[\w-]*(?=[\s/>]))/;
36
38
  const LIGHT_DOM_PATTERN = /\^lightDom\b|static\s+lightDom\s*=\s*true\b/;
37
39
 
40
+ function escapeRegExp(value) {
41
+ return String(value).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
42
+ }
43
+
44
+ function hasCallToLocal(text, localName) {
45
+ return new RegExp(`\\b${escapeRegExp(localName)}\\s*\\(`).test(text);
46
+ }
47
+
48
+ function getImportedLocalNames(importClause) {
49
+ const locals = [];
50
+ const namedMatch = importClause.match(/\{([^}]*)\}/);
51
+ const beforeNamed = importClause.split("{", 1)[0].replace(/,$/, "").trim();
52
+
53
+ if (beforeNamed && !beforeNamed.includes("*")) {
54
+ locals.push(beforeNamed);
55
+ }
56
+
57
+ if (namedMatch) {
58
+ for (const rawSpecifier of namedMatch[1].split(",")) {
59
+ const specifier = rawSpecifier.trim();
60
+ if (!specifier || specifier.startsWith("type ")) continue;
61
+ const parts = specifier.split(/\s+as\s+/);
62
+ const localName = (parts[1] || parts[0]).trim();
63
+ if (localName) {
64
+ locals.push(localName);
65
+ }
66
+ }
67
+ }
68
+
69
+ return locals.filter((name) => /^use[A-Z0-9][A-Za-z0-9_$]*$/.test(name));
70
+ }
71
+
72
+ function hasImportedCustomHookCall(text) {
73
+ DEFAULT_OR_NAMED_IMPORT_PATTERN.lastIndex = 0;
74
+ let match;
75
+ while ((match = DEFAULT_OR_NAMED_IMPORT_PATTERN.exec(text))) {
76
+ for (const localName of getImportedLocalNames(match[1])) {
77
+ if (hasCallToLocal(text, localName)) {
78
+ return true;
79
+ }
80
+ }
81
+ }
82
+
83
+ NAMESPACE_IMPORT_PATTERN.lastIndex = 0;
84
+ while ((match = NAMESPACE_IMPORT_PATTERN.exec(text))) {
85
+ const namespaceName = match[1];
86
+ if (
87
+ new RegExp(`\\b${escapeRegExp(namespaceName)}\\s*\\.\\s*use[A-Z0-9][A-Za-z0-9_$]*\\s*\\(`)
88
+ .test(text)
89
+ ) {
90
+ return true;
91
+ }
92
+ }
93
+
94
+ return false;
95
+ }
96
+
38
97
  function normalizeTransformLitsxOptions(options = {}) {
39
98
  const transformLitsxOptions = {
40
99
  ...(options.transformLitsx || {}),
@@ -54,7 +113,9 @@ function detectLitsxSourceFeatures(source, options = {}) {
54
113
  const transformOptions = normalizeTransformLitsxOptions(options);
55
114
 
56
115
  return {
57
- hooks: HOOK_FEATURE_PATTERN.test(text),
116
+ hooks:
117
+ HOOK_FEATURE_PATTERN.test(text) ||
118
+ hasImportedCustomHookCall(text),
58
119
  domRefs: REF_FEATURE_PATTERN.test(text),
59
120
  scopedElements:
60
121
  transformOptions.defaultDomMode === "light" ||
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.cjs","sources":["../src/pipeline.js"],"sourcesContent":["import transformJsxHtmlTemplate from \"@litsx/babel-plugin-transform-jsx-html-template\";\nimport transformLitsxScopedElements from \"@litsx/babel-plugin-transform-litsx-scoped-elements\";\nimport transformLitsxDomRefs from \"./internal/transform-litsx-dom-refs.js\";\nimport transformLitsxHooks from \"./internal/transform-litsx-hooks.js\";\nimport transformLitsxComponents from \"./internal/transform-litsx-components.js\";\nimport transformLitsxRendererProps from \"./internal/transform-litsx-renderer-props.js\";\n\nconst NATIVE_TRANSFORM_OPTION_KEYS = [\n \"defaultDomMode\",\n \"typeResolutionMode\",\n \"inMemoryFiles\",\n \"compilerOptions\",\n \"typescriptSession\",\n \"suppressNativeClassNameWarning\",\n \"__litsxCompilationSession\",\n];\n\nconst HOOK_FEATURE_PATTERN = /\\b(?:defineHook|useOnConnect|useAfterUpdate|useOnCommit|useMemoValue|useStableCallback|useEvent|useEmit|usePrevious|useReducedState|useState|useControlledState|useAsyncState|useOptimistic|useExpose|useExternalStore|useHost|useHostContent|useSlot|useTextContent|useTransition|useDeferredValue|useStyle|useRef|useCallbackRef|useStableId)\\b/;\nconst REF_FEATURE_PATTERN = /\\buseRef\\b|\\bref\\s*=/;\nconst SCOPED_ELEMENTS_PATTERN = /<\\s*(?:[A-Z][\\w.]*(?=[\\s/>])|[a-z][\\w]*-[\\w-]*(?=[\\s/>]))/;\nconst LIGHT_DOM_PATTERN = /\\^lightDom\\b|static\\s+lightDom\\s*=\\s*true\\b/;\n\nexport function normalizeTransformLitsxOptions(options = {}) {\n const transformLitsxOptions = {\n ...(options.transformLitsx || {}),\n };\n\n for (const key of NATIVE_TRANSFORM_OPTION_KEYS) {\n if (Object.prototype.hasOwnProperty.call(options, key)) {\n transformLitsxOptions[key] = options[key];\n }\n }\n\n return transformLitsxOptions;\n}\n\nexport function detectLitsxSourceFeatures(source, options = {}) {\n const text = typeof source === \"string\" ? source : \"\";\n const transformOptions = normalizeTransformLitsxOptions(options);\n\n return {\n hooks: HOOK_FEATURE_PATTERN.test(text),\n domRefs: REF_FEATURE_PATTERN.test(text),\n scopedElements:\n transformOptions.defaultDomMode === \"light\" ||\n LIGHT_DOM_PATTERN.test(text) ||\n SCOPED_ELEMENTS_PATTERN.test(text),\n };\n}\n\nfunction shouldIncludeFeaturePlugin(sourceFeatures, key) {\n if (!sourceFeatures) {\n return true;\n }\n\n return sourceFeatures[key] === true;\n}\n\nexport function createLitsxPresetPlugins(options = {}, sourceFeatures = null) {\n const plugins = [\n [transformLitsxRendererProps, options.transformLitsxRendererProps || {}],\n [transformLitsxComponents, normalizeTransformLitsxOptions(options)],\n ];\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"hooks\")) {\n plugins.push([\n transformLitsxHooks,\n {\n ...normalizeTransformLitsxOptions(options),\n ...(options.transformLitsxHooks || {}),\n },\n ]);\n }\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"domRefs\")) {\n plugins.push([transformLitsxDomRefs, options.transformLitsxDomRefs || {}]);\n }\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"scopedElements\")) {\n plugins.push([transformLitsxScopedElements, options.transformLitsxScopedElements || {}]);\n }\n\n if (options.jsxTemplate !== false) {\n if (options.jsxTemplateOptions && Object.keys(options.jsxTemplateOptions).length > 0) {\n plugins.push([transformJsxHtmlTemplate, options.jsxTemplateOptions]);\n } else {\n plugins.push(transformJsxHtmlTemplate);\n }\n }\n\n return plugins;\n}\n\nexport {\n default as transformLitsxComponents,\n createTransformFunctionToClassPlugin as createTransformLitsxComponentsPlugin,\n} from \"./internal/transform-litsx-components.js\";\nexport {\n setTypescriptModule,\n} from \"./internal/transform-litsx-properties.js\";\n"],"names":["transformLitsxRendererProps","transformLitsxComponents","transformLitsxHooks","transformLitsxDomRefs"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.cjs","sources":["../src/pipeline.js"],"sourcesContent":["import transformJsxHtmlTemplate from \"@litsx/babel-plugin-transform-jsx-html-template\";\nimport transformLitsxScopedElements from \"@litsx/babel-plugin-transform-litsx-scoped-elements\";\nimport transformLitsxDomRefs from \"./internal/transform-litsx-dom-refs.js\";\nimport transformLitsxHooks from \"./internal/transform-litsx-hooks.js\";\nimport transformLitsxComponents from \"./internal/transform-litsx-components.js\";\nimport transformLitsxRendererProps from \"./internal/transform-litsx-renderer-props.js\";\n\nconst NATIVE_TRANSFORM_OPTION_KEYS = [\n \"defaultDomMode\",\n \"typeResolutionMode\",\n \"inMemoryFiles\",\n \"compilerOptions\",\n \"typescriptSession\",\n \"suppressNativeClassNameWarning\",\n \"__litsxCompilationSession\",\n];\n\nconst HOOK_FEATURE_PATTERN = /\\b(?:defineHook|useOnConnect|useAfterUpdate|useOnCommit|useMemoValue|useStableCallback|useEvent|useEmit|usePrevious|useReducedState|useState|useControlledState|useAsyncState|useOptimistic|useExpose|useExternalStore|useHost|useHostContent|useSlot|useTextContent|useTransition|useDeferredValue|useStyle|useRef|useCallbackRef|useStableId)\\b/;\nconst DEFAULT_OR_NAMED_IMPORT_PATTERN = /\\bimport\\s+(?!type\\b)([^'\";]+?)\\s+from\\b/g;\nconst NAMESPACE_IMPORT_PATTERN = /\\bimport\\s+(?!type\\b)\\*\\s+as\\s+([A-Za-z_$][\\w$]*)\\s+from\\b/g;\nconst REF_FEATURE_PATTERN = /\\buseRef\\b|\\bref\\s*=/;\nconst SCOPED_ELEMENTS_PATTERN = /<\\s*(?:[A-Z][\\w.]*(?=[\\s/>])|[a-z][\\w]*-[\\w-]*(?=[\\s/>]))/;\nconst LIGHT_DOM_PATTERN = /\\^lightDom\\b|static\\s+lightDom\\s*=\\s*true\\b/;\n\nfunction escapeRegExp(value) {\n return String(value).replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n}\n\nfunction hasCallToLocal(text, localName) {\n return new RegExp(`\\\\b${escapeRegExp(localName)}\\\\s*\\\\(`).test(text);\n}\n\nfunction getImportedLocalNames(importClause) {\n const locals = [];\n const namedMatch = importClause.match(/\\{([^}]*)\\}/);\n const beforeNamed = importClause.split(\"{\", 1)[0].replace(/,$/, \"\").trim();\n\n if (beforeNamed && !beforeNamed.includes(\"*\")) {\n locals.push(beforeNamed);\n }\n\n if (namedMatch) {\n for (const rawSpecifier of namedMatch[1].split(\",\")) {\n const specifier = rawSpecifier.trim();\n if (!specifier || specifier.startsWith(\"type \")) continue;\n const parts = specifier.split(/\\s+as\\s+/);\n const localName = (parts[1] || parts[0]).trim();\n if (localName) {\n locals.push(localName);\n }\n }\n }\n\n return locals.filter((name) => /^use[A-Z0-9][A-Za-z0-9_$]*$/.test(name));\n}\n\nfunction hasImportedCustomHookCall(text) {\n DEFAULT_OR_NAMED_IMPORT_PATTERN.lastIndex = 0;\n let match;\n while ((match = DEFAULT_OR_NAMED_IMPORT_PATTERN.exec(text))) {\n for (const localName of getImportedLocalNames(match[1])) {\n if (hasCallToLocal(text, localName)) {\n return true;\n }\n }\n }\n\n NAMESPACE_IMPORT_PATTERN.lastIndex = 0;\n while ((match = NAMESPACE_IMPORT_PATTERN.exec(text))) {\n const namespaceName = match[1];\n if (\n new RegExp(`\\\\b${escapeRegExp(namespaceName)}\\\\s*\\\\.\\\\s*use[A-Z0-9][A-Za-z0-9_$]*\\\\s*\\\\(`)\n .test(text)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function normalizeTransformLitsxOptions(options = {}) {\n const transformLitsxOptions = {\n ...(options.transformLitsx || {}),\n };\n\n for (const key of NATIVE_TRANSFORM_OPTION_KEYS) {\n if (Object.prototype.hasOwnProperty.call(options, key)) {\n transformLitsxOptions[key] = options[key];\n }\n }\n\n return transformLitsxOptions;\n}\n\nexport function detectLitsxSourceFeatures(source, options = {}) {\n const text = typeof source === \"string\" ? source : \"\";\n const transformOptions = normalizeTransformLitsxOptions(options);\n\n return {\n hooks:\n HOOK_FEATURE_PATTERN.test(text) ||\n hasImportedCustomHookCall(text),\n domRefs: REF_FEATURE_PATTERN.test(text),\n scopedElements:\n transformOptions.defaultDomMode === \"light\" ||\n LIGHT_DOM_PATTERN.test(text) ||\n SCOPED_ELEMENTS_PATTERN.test(text),\n };\n}\n\nfunction shouldIncludeFeaturePlugin(sourceFeatures, key) {\n if (!sourceFeatures) {\n return true;\n }\n\n return sourceFeatures[key] === true;\n}\n\nexport function createLitsxPresetPlugins(options = {}, sourceFeatures = null) {\n const plugins = [\n [transformLitsxRendererProps, options.transformLitsxRendererProps || {}],\n [transformLitsxComponents, normalizeTransformLitsxOptions(options)],\n ];\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"hooks\")) {\n plugins.push([\n transformLitsxHooks,\n {\n ...normalizeTransformLitsxOptions(options),\n ...(options.transformLitsxHooks || {}),\n },\n ]);\n }\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"domRefs\")) {\n plugins.push([transformLitsxDomRefs, options.transformLitsxDomRefs || {}]);\n }\n\n if (shouldIncludeFeaturePlugin(sourceFeatures, \"scopedElements\")) {\n plugins.push([transformLitsxScopedElements, options.transformLitsxScopedElements || {}]);\n }\n\n if (options.jsxTemplate !== false) {\n if (options.jsxTemplateOptions && Object.keys(options.jsxTemplateOptions).length > 0) {\n plugins.push([transformJsxHtmlTemplate, options.jsxTemplateOptions]);\n } else {\n plugins.push(transformJsxHtmlTemplate);\n }\n }\n\n return plugins;\n}\n\nexport {\n default as transformLitsxComponents,\n createTransformFunctionToClassPlugin as createTransformLitsxComponentsPlugin,\n} from \"./internal/transform-litsx-components.js\";\nexport {\n setTypescriptModule,\n} from \"./internal/transform-litsx-properties.js\";\n"],"names":["transformLitsxRendererProps","transformLitsxComponents","transformLitsxHooks","transformLitsxDomRefs"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litsx/babel-preset-litsx",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Canonical native Babel preset for LitSX-authored source",
5
5
  "author": "LitSX Team",
6
6
  "type": "module",
@@ -82,7 +82,7 @@
82
82
  "@babel/traverse": "^7.28.5",
83
83
  "@litsx/authoring": "^0.5.0",
84
84
  "@litsx/babel-parser": "^0.2.5",
85
- "@litsx/babel-plugin-shared-hooks": "^0.4.0",
85
+ "@litsx/babel-plugin-shared-hooks": "^0.4.1",
86
86
  "@litsx/babel-plugin-transform-jsx-html-template": "^0.3.6",
87
87
  "@litsx/babel-plugin-transform-litsx-scoped-elements": "^0.4.4",
88
88
  "@litsx/typescript-session": "^0.2.3"
@@ -79,8 +79,9 @@ function normalizeInMemoryFiles(files) {
79
79
 
80
80
  function createStructuralHookResolver(options = {}) {
81
81
  const inMemoryFiles = normalizeInMemoryFiles(options.inMemoryFiles);
82
- const moduleCache = new Map();
83
- const resolvedImportCache = new Map();
82
+ const compilationSession = options.__litsxCompilationSession || null;
83
+ const moduleCache = compilationSession?.importedModuleAnalysisCache || new Map();
84
+ const resolvedImportCache = compilationSession?.resolvedImportCache || new Map();
84
85
  const providedTypescriptSession =
85
86
  options?.typescriptSession?.projectSession || options?.typescriptSession || null;
86
87
  const compilerOptionsCache = new Map();
@@ -246,6 +247,17 @@ function createStructuralHookResolver(options = {}) {
246
247
  return resolved;
247
248
  }
248
249
 
250
+ function resolveModuleReference(analysis, reference) {
251
+ if (!analysis || !reference?.source || reference.source === RUNTIME_MODULE) {
252
+ return reference?.resolvedSource || null;
253
+ }
254
+ if (Object.prototype.hasOwnProperty.call(reference, "resolvedSource")) {
255
+ return reference.resolvedSource;
256
+ }
257
+ reference.resolvedSource = resolveImport(analysis.filename, reference.source);
258
+ return reference.resolvedSource;
259
+ }
260
+
249
261
  function getParserPluginsForModule(filename, source) {
250
262
  if (/\.(?:[cm]?ts|tsx|litsx)$/i.test(filename)) {
251
263
  return ["typescript"];
@@ -326,12 +338,14 @@ function createStructuralHookResolver(options = {}) {
326
338
  filename: normalizedFilename,
327
339
  importBindings: new Map(),
328
340
  exportBindings: new Map(),
341
+ exportAllSources: [],
329
342
  defineHookLocals: new Set(),
330
343
  runtimeNamespaceLocals: new Set(),
331
344
  structuralLocals: new Set(),
332
345
  structuralLocalInfo: new Map(),
333
346
  customHookPaths: new Map(),
334
347
  customHookUsageCache: new Map(),
348
+ customHookRuntimeUsageCache: new Map(),
335
349
  };
336
350
  moduleCache.set(normalizedFilename, analysis);
337
351
 
@@ -353,7 +367,6 @@ function createStructuralHookResolver(options = {}) {
353
367
 
354
368
  if (statementPath.isImportDeclaration()) {
355
369
  const sourceValue = node.source.value;
356
- const resolvedSource = resolveImport(normalizedFilename, sourceValue);
357
370
  for (const specifier of node.specifiers) {
358
371
  const localName = specifier.local?.name;
359
372
  if (!localName) continue;
@@ -361,7 +374,6 @@ function createStructuralHookResolver(options = {}) {
361
374
  analysis.importBindings.set(localName, {
362
375
  importedName,
363
376
  source: sourceValue,
364
- resolvedSource,
365
377
  });
366
378
  if (sourceValue === RUNTIME_MODULE && importedName === "defineHook") {
367
379
  analysis.defineHookLocals.add(localName);
@@ -408,6 +420,13 @@ function createStructuralHookResolver(options = {}) {
408
420
  }
409
421
  }
410
422
 
423
+ if (statementPath.isExportAllDeclaration()) {
424
+ analysis.exportAllSources.push({
425
+ source: node.source.value,
426
+ });
427
+ continue;
428
+ }
429
+
411
430
  if (statementPath.isExportNamedDeclaration()) {
412
431
  const exportNode = statementPath.node;
413
432
  const declaration = exportNode.declaration;
@@ -434,7 +453,7 @@ function createStructuralHookResolver(options = {}) {
434
453
  if (exportNode.source?.value) {
435
454
  addExportBinding(analysis, exportedName, {
436
455
  importedName: localName,
437
- resolvedSource: resolveImport(normalizedFilename, exportNode.source.value),
456
+ source: exportNode.source.value,
438
457
  });
439
458
  } else {
440
459
  addExportBinding(analysis, exportedName, { localName });
@@ -450,16 +469,34 @@ function createStructuralHookResolver(options = {}) {
450
469
 
451
470
  function isNamespaceStructuralUse(analysis, objectName, propertyName, seen) {
452
471
  const importInfo = analysis.importBindings.get(objectName);
453
- if (!importInfo?.resolvedSource || importInfo.importedName !== "*") {
472
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
473
+ if (!resolvedSource || importInfo.importedName !== "*") {
454
474
  return false;
455
475
  }
456
- const importedModule = analyzeModule(importInfo.resolvedSource);
476
+ const importedModule = analyzeModule(resolvedSource);
457
477
  return (
458
478
  isStructuralExport(importedModule, propertyName, seen) ||
459
479
  isStructuralCustomExport(importedModule, propertyName, seen)
460
480
  );
461
481
  }
462
482
 
483
+ function isNamespaceRuntimeHelperUse(analysis, objectName, propertyName) {
484
+ const importInfo = analysis.importBindings.get(objectName);
485
+ return (
486
+ importInfo?.source === RUNTIME_MODULE &&
487
+ importInfo.importedName === "*" &&
488
+ RUNTIME_HELPERS.includes(propertyName)
489
+ );
490
+ }
491
+
492
+ function isRuntimeHelperImport(analysis, localName) {
493
+ const importInfo = analysis.importBindings.get(localName);
494
+ return (
495
+ importInfo?.source === RUNTIME_MODULE &&
496
+ RUNTIME_HELPERS.includes(importInfo.importedName)
497
+ );
498
+ }
499
+
463
500
  function localCustomHookUsesStructural(analysis, localName, seen = new Set()) {
464
501
  if (!analysis || !localName) return false;
465
502
  const key = `${analysis.filename}:local:${localName}`;
@@ -500,8 +537,9 @@ function createStructuralHookResolver(options = {}) {
500
537
  return;
501
538
  }
502
539
  const importInfo = analysis.importBindings.get(name);
503
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
504
- const importedModule = analyzeModule(importInfo.resolvedSource);
540
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
541
+ if (resolvedSource && importInfo.importedName !== "*") {
542
+ const importedModule = analyzeModule(resolvedSource);
505
543
  if (
506
544
  isStructuralExport(importedModule, importInfo.importedName, nextSeen) ||
507
545
  isStructuralCustomExport(importedModule, importInfo.importedName, nextSeen)
@@ -532,6 +570,85 @@ function createStructuralHookResolver(options = {}) {
532
570
  return usesStructural;
533
571
  }
534
572
 
573
+ function localCustomHookUsesRuntimeHook(analysis, localName, seen = new Set()) {
574
+ if (!analysis || !localName) return false;
575
+ const key = `${analysis.filename}:runtime-local:${localName}`;
576
+ if (analysis.customHookRuntimeUsageCache.has(localName)) {
577
+ return analysis.customHookRuntimeUsageCache.get(localName);
578
+ }
579
+ if (seen.has(key)) return false;
580
+ const nextSeen = new Set(seen);
581
+ nextSeen.add(key);
582
+
583
+ const fnPath = analysis.customHookPaths.get(localName);
584
+ if (!fnPath?.traverse) {
585
+ analysis.customHookRuntimeUsageCache.set(localName, false);
586
+ return false;
587
+ }
588
+
589
+ let usesRuntimeHook = false;
590
+ fnPath.traverse({
591
+ CallExpression(callPath) {
592
+ if (usesRuntimeHook) {
593
+ callPath.stop();
594
+ return;
595
+ }
596
+ const callee = callPath.get("callee");
597
+ if (callee.isIdentifier()) {
598
+ const name = callee.node.name;
599
+ if (isRuntimeHelperImport(analysis, name)) {
600
+ usesRuntimeHook = true;
601
+ callPath.stop();
602
+ return;
603
+ }
604
+ if (
605
+ analysis.customHookPaths.has(name) &&
606
+ localCustomHookUsesRuntimeHook(analysis, name, nextSeen)
607
+ ) {
608
+ usesRuntimeHook = true;
609
+ callPath.stop();
610
+ return;
611
+ }
612
+ const importInfo = analysis.importBindings.get(name);
613
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
614
+ if (resolvedSource && importInfo.importedName !== "*") {
615
+ const importedModule = analyzeModule(resolvedSource);
616
+ if (isRuntimeCustomExport(importedModule, importInfo.importedName, nextSeen)) {
617
+ usesRuntimeHook = true;
618
+ callPath.stop();
619
+ }
620
+ }
621
+ return;
622
+ }
623
+
624
+ if (callee.isMemberExpression({ computed: false })) {
625
+ const object = callee.get("object");
626
+ const property = callee.get("property");
627
+ if (!object.isIdentifier() || !property.isIdentifier()) {
628
+ return;
629
+ }
630
+ if (isNamespaceRuntimeHelperUse(analysis, object.node.name, property.node.name)) {
631
+ usesRuntimeHook = true;
632
+ callPath.stop();
633
+ return;
634
+ }
635
+ const importInfo = analysis.importBindings.get(object.node.name);
636
+ const resolvedSource = resolveModuleReference(analysis, importInfo);
637
+ if (resolvedSource && importInfo.importedName === "*") {
638
+ const importedModule = analyzeModule(resolvedSource);
639
+ if (isRuntimeCustomExport(importedModule, property.node.name, nextSeen)) {
640
+ usesRuntimeHook = true;
641
+ callPath.stop();
642
+ }
643
+ }
644
+ }
645
+ },
646
+ });
647
+
648
+ analysis.customHookRuntimeUsageCache.set(localName, usesRuntimeHook);
649
+ return usesRuntimeHook;
650
+ }
651
+
535
652
  function getStructuralExportInfo(analysis, exportedName, seen = new Set()) {
536
653
  if (!analysis || !exportedName) return false;
537
654
  const key = `${analysis.filename}:${exportedName}`;
@@ -541,12 +658,23 @@ function createStructuralHookResolver(options = {}) {
541
658
 
542
659
  const exportInfo = analysis.exportBindings.get(exportedName);
543
660
  if (!exportInfo) {
661
+ for (const exportAll of analysis.exportAllSources || []) {
662
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
663
+ if (!resolvedSource) continue;
664
+ const info = getStructuralExportInfo(
665
+ analyzeModule(resolvedSource),
666
+ exportedName,
667
+ nextSeen
668
+ );
669
+ if (info) return info;
670
+ }
544
671
  return false;
545
672
  }
546
673
 
547
- if (exportInfo.resolvedSource) {
674
+ const exportSource = resolveModuleReference(analysis, exportInfo);
675
+ if (exportSource) {
548
676
  return getStructuralExportInfo(
549
- analyzeModule(exportInfo.resolvedSource),
677
+ analyzeModule(exportSource),
550
678
  exportInfo.importedName,
551
679
  nextSeen
552
680
  );
@@ -563,9 +691,10 @@ function createStructuralHookResolver(options = {}) {
563
691
  }
564
692
 
565
693
  const importInfo = analysis.importBindings.get(exportInfo.localName);
566
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
694
+ const importSource = resolveModuleReference(analysis, importInfo);
695
+ if (importSource && importInfo.importedName !== "*") {
567
696
  return getStructuralExportInfo(
568
- analyzeModule(importInfo.resolvedSource),
697
+ analyzeModule(importSource),
569
698
  importInfo.importedName,
570
699
  nextSeen
571
700
  );
@@ -587,12 +716,26 @@ function createStructuralHookResolver(options = {}) {
587
716
 
588
717
  const exportInfo = analysis.exportBindings.get(exportedName);
589
718
  if (!exportInfo) {
719
+ for (const exportAll of analysis.exportAllSources || []) {
720
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
721
+ if (!resolvedSource) continue;
722
+ if (
723
+ isStructuralCustomExport(
724
+ analyzeModule(resolvedSource),
725
+ exportedName,
726
+ nextSeen
727
+ )
728
+ ) {
729
+ return true;
730
+ }
731
+ }
590
732
  return false;
591
733
  }
592
734
 
593
- if (exportInfo.resolvedSource) {
735
+ const exportSource = resolveModuleReference(analysis, exportInfo);
736
+ if (exportSource) {
594
737
  return isStructuralCustomExport(
595
- analyzeModule(exportInfo.resolvedSource),
738
+ analyzeModule(exportSource),
596
739
  exportInfo.importedName,
597
740
  nextSeen
598
741
  );
@@ -603,9 +746,91 @@ function createStructuralHookResolver(options = {}) {
603
746
  }
604
747
 
605
748
  const importInfo = analysis.importBindings.get(exportInfo.localName);
606
- if (importInfo?.resolvedSource && importInfo.importedName !== "*") {
749
+ const importSource = resolveModuleReference(analysis, importInfo);
750
+ if (importSource && importInfo.importedName !== "*") {
607
751
  return isStructuralCustomExport(
608
- analyzeModule(importInfo.resolvedSource),
752
+ analyzeModule(importSource),
753
+ importInfo.importedName,
754
+ nextSeen
755
+ );
756
+ }
757
+
758
+ return false;
759
+ }
760
+
761
+ function hasExportBinding(analysis, exportedName, seen = new Set()) {
762
+ if (!analysis || !exportedName) return "unresolved";
763
+ const key = `${analysis.filename}:has-export:${exportedName}`;
764
+ if (seen.has(key)) return false;
765
+ const nextSeen = new Set(seen);
766
+ nextSeen.add(key);
767
+
768
+ if (analysis.exportBindings.has(exportedName)) {
769
+ return true;
770
+ }
771
+
772
+ let sawUnresolvedExportAll = false;
773
+ for (const exportAll of analysis.exportAllSources || []) {
774
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
775
+ if (!resolvedSource) {
776
+ sawUnresolvedExportAll = true;
777
+ continue;
778
+ }
779
+ const result = hasExportBinding(
780
+ analyzeModule(resolvedSource),
781
+ exportedName,
782
+ nextSeen
783
+ );
784
+ if (result === true) return true;
785
+ if (result === "unresolved") sawUnresolvedExportAll = true;
786
+ }
787
+
788
+ return sawUnresolvedExportAll ? "unresolved" : false;
789
+ }
790
+
791
+ function isRuntimeCustomExport(analysis, exportedName, seen = new Set()) {
792
+ if (!analysis || !exportedName) return false;
793
+ const key = `${analysis.filename}:runtime-custom:${exportedName}`;
794
+ if (seen.has(key)) return false;
795
+ const nextSeen = new Set(seen);
796
+ nextSeen.add(key);
797
+
798
+ const exportInfo = analysis.exportBindings.get(exportedName);
799
+ if (!exportInfo) {
800
+ for (const exportAll of analysis.exportAllSources || []) {
801
+ const resolvedSource = resolveModuleReference(analysis, exportAll);
802
+ if (!resolvedSource) continue;
803
+ if (
804
+ isRuntimeCustomExport(
805
+ analyzeModule(resolvedSource),
806
+ exportedName,
807
+ nextSeen
808
+ )
809
+ ) {
810
+ return true;
811
+ }
812
+ }
813
+ return false;
814
+ }
815
+
816
+ const exportSource = resolveModuleReference(analysis, exportInfo);
817
+ if (exportSource) {
818
+ return isRuntimeCustomExport(
819
+ analyzeModule(exportSource),
820
+ exportInfo.importedName,
821
+ nextSeen
822
+ );
823
+ }
824
+
825
+ if (localCustomHookUsesRuntimeHook(analysis, exportInfo.localName, nextSeen)) {
826
+ return true;
827
+ }
828
+
829
+ const importInfo = analysis.importBindings.get(exportInfo.localName);
830
+ const importSource = resolveModuleReference(analysis, importInfo);
831
+ if (importSource && importInfo.importedName !== "*") {
832
+ return isRuntimeCustomExport(
833
+ analyzeModule(importSource),
609
834
  importInfo.importedName,
610
835
  nextSeen
611
836
  );
@@ -614,10 +839,22 @@ function createStructuralHookResolver(options = {}) {
614
839
  return false;
615
840
  }
616
841
 
617
- return function structuralHookResolver({ filename, source, importedName }) {
842
+ return function structuralHookResolver({ filename, source, importedName, runtimeCustomOnly = false }) {
618
843
  const resolved = resolveImport(filename, source);
619
- if (!resolved) return false;
844
+ if (!resolved) return runtimeCustomOnly ? "unresolved-custom-hook" : false;
620
845
  const analysis = analyzeModule(resolved);
846
+ if (!analysis && runtimeCustomOnly) {
847
+ return "unresolved-custom-hook";
848
+ }
849
+ if (runtimeCustomOnly) {
850
+ const exportStatus = hasExportBinding(analysis, importedName);
851
+ if (exportStatus !== true) {
852
+ return "unresolved-custom-hook";
853
+ }
854
+ return isRuntimeCustomExport(analysis, importedName)
855
+ ? "runtime-custom-hook"
856
+ : false;
857
+ }
621
858
  const structuralInfo = getStructuralExportInfo(analysis, importedName);
622
859
  if (structuralInfo) {
623
860
  return structuralInfo;
@@ -661,6 +898,8 @@ function createStableIdCallsiteMetadata(callPath, state, t) {
661
898
  }
662
899
 
663
900
  export default function transformLitsxHooks(api, options = {}) {
901
+ const structuralHookResolver = createStructuralHookResolver(options);
902
+ const ignoredCustomHookSources = new Set(options.ignoredCustomHookSources || []);
664
903
  const plugin = createRuntimeHooksTransform({
665
904
  pluginName: "transform-litsx-hooks",
666
905
  runtimeModule: RUNTIME_MODULE,
@@ -673,6 +912,21 @@ export default function transformLitsxHooks(api, options = {}) {
673
912
 
674
913
  return plugin(api, {
675
914
  ...options,
676
- structuralHookResolver: createStructuralHookResolver(options),
915
+ structuralHookResolver,
916
+ customHookResolver({ filename, source, importedName }) {
917
+ if (ignoredCustomHookSources.has(source)) {
918
+ return false;
919
+ }
920
+ const result = structuralHookResolver({
921
+ filename,
922
+ source,
923
+ importedName,
924
+ runtimeCustomOnly: true,
925
+ });
926
+ if (result === "unresolved-custom-hook") {
927
+ return result;
928
+ }
929
+ return result === "runtime-custom-hook";
930
+ },
677
931
  });
678
932
  }
package/src/pipeline.js CHANGED
@@ -16,10 +16,69 @@ const NATIVE_TRANSFORM_OPTION_KEYS = [
16
16
  ];
17
17
 
18
18
  const HOOK_FEATURE_PATTERN = /\b(?:defineHook|useOnConnect|useAfterUpdate|useOnCommit|useMemoValue|useStableCallback|useEvent|useEmit|usePrevious|useReducedState|useState|useControlledState|useAsyncState|useOptimistic|useExpose|useExternalStore|useHost|useHostContent|useSlot|useTextContent|useTransition|useDeferredValue|useStyle|useRef|useCallbackRef|useStableId)\b/;
19
+ const DEFAULT_OR_NAMED_IMPORT_PATTERN = /\bimport\s+(?!type\b)([^'";]+?)\s+from\b/g;
20
+ const NAMESPACE_IMPORT_PATTERN = /\bimport\s+(?!type\b)\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\b/g;
19
21
  const REF_FEATURE_PATTERN = /\buseRef\b|\bref\s*=/;
20
22
  const SCOPED_ELEMENTS_PATTERN = /<\s*(?:[A-Z][\w.]*(?=[\s/>])|[a-z][\w]*-[\w-]*(?=[\s/>]))/;
21
23
  const LIGHT_DOM_PATTERN = /\^lightDom\b|static\s+lightDom\s*=\s*true\b/;
22
24
 
25
+ function escapeRegExp(value) {
26
+ return String(value).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
27
+ }
28
+
29
+ function hasCallToLocal(text, localName) {
30
+ return new RegExp(`\\b${escapeRegExp(localName)}\\s*\\(`).test(text);
31
+ }
32
+
33
+ function getImportedLocalNames(importClause) {
34
+ const locals = [];
35
+ const namedMatch = importClause.match(/\{([^}]*)\}/);
36
+ const beforeNamed = importClause.split("{", 1)[0].replace(/,$/, "").trim();
37
+
38
+ if (beforeNamed && !beforeNamed.includes("*")) {
39
+ locals.push(beforeNamed);
40
+ }
41
+
42
+ if (namedMatch) {
43
+ for (const rawSpecifier of namedMatch[1].split(",")) {
44
+ const specifier = rawSpecifier.trim();
45
+ if (!specifier || specifier.startsWith("type ")) continue;
46
+ const parts = specifier.split(/\s+as\s+/);
47
+ const localName = (parts[1] || parts[0]).trim();
48
+ if (localName) {
49
+ locals.push(localName);
50
+ }
51
+ }
52
+ }
53
+
54
+ return locals.filter((name) => /^use[A-Z0-9][A-Za-z0-9_$]*$/.test(name));
55
+ }
56
+
57
+ function hasImportedCustomHookCall(text) {
58
+ DEFAULT_OR_NAMED_IMPORT_PATTERN.lastIndex = 0;
59
+ let match;
60
+ while ((match = DEFAULT_OR_NAMED_IMPORT_PATTERN.exec(text))) {
61
+ for (const localName of getImportedLocalNames(match[1])) {
62
+ if (hasCallToLocal(text, localName)) {
63
+ return true;
64
+ }
65
+ }
66
+ }
67
+
68
+ NAMESPACE_IMPORT_PATTERN.lastIndex = 0;
69
+ while ((match = NAMESPACE_IMPORT_PATTERN.exec(text))) {
70
+ const namespaceName = match[1];
71
+ if (
72
+ new RegExp(`\\b${escapeRegExp(namespaceName)}\\s*\\.\\s*use[A-Z0-9][A-Za-z0-9_$]*\\s*\\(`)
73
+ .test(text)
74
+ ) {
75
+ return true;
76
+ }
77
+ }
78
+
79
+ return false;
80
+ }
81
+
23
82
  export function normalizeTransformLitsxOptions(options = {}) {
24
83
  const transformLitsxOptions = {
25
84
  ...(options.transformLitsx || {}),
@@ -39,7 +98,9 @@ export function detectLitsxSourceFeatures(source, options = {}) {
39
98
  const transformOptions = normalizeTransformLitsxOptions(options);
40
99
 
41
100
  return {
42
- hooks: HOOK_FEATURE_PATTERN.test(text),
101
+ hooks:
102
+ HOOK_FEATURE_PATTERN.test(text) ||
103
+ hasImportedCustomHookCall(text),
43
104
  domRefs: REF_FEATURE_PATTERN.test(text),
44
105
  scopedElements:
45
106
  transformOptions.defaultDomMode === "light" ||