svelte2tsx 0.7.25 → 0.7.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.js +54 -11
  2. package/index.mjs +54 -11
  3. package/package.json +1 -1
package/index.js CHANGED
@@ -4752,11 +4752,17 @@ class HoistableInterfaces {
4752
4752
  });
4753
4753
  }
4754
4754
  });
4755
- this.interface_map.set(interface_name, {
4756
- type_deps: type_dependencies,
4757
- value_deps: value_dependencies,
4758
- node
4759
- });
4755
+ if (this.import_type_set.has(interface_name)) {
4756
+ // shadowed; delete because we can't hoist
4757
+ this.import_type_set.delete(interface_name);
4758
+ }
4759
+ else {
4760
+ this.interface_map.set(interface_name, {
4761
+ type_deps: type_dependencies,
4762
+ value_deps: value_dependencies,
4763
+ node
4764
+ });
4765
+ }
4760
4766
  }
4761
4767
  // Handle Type Alias Declarations
4762
4768
  if (ts.isTypeAliasDeclaration(node)) {
@@ -4765,12 +4771,41 @@ class HoistableInterfaces {
4765
4771
  const value_dependencies = new Set();
4766
4772
  const generics = (_d = (_c = node.typeParameters) === null || _c === void 0 ? void 0 : _c.map((param) => param.name.text)) !== null && _d !== void 0 ? _d : [];
4767
4773
  this.collectTypeDependencies(node.type, type_dependencies, value_dependencies, generics);
4768
- this.interface_map.set(alias_name, {
4769
- type_deps: type_dependencies,
4770
- value_deps: value_dependencies,
4771
- node
4774
+ if (this.import_type_set.has(alias_name)) {
4775
+ // shadowed; delete because we can't hoist
4776
+ this.import_type_set.delete(alias_name);
4777
+ }
4778
+ else {
4779
+ this.interface_map.set(alias_name, {
4780
+ type_deps: type_dependencies,
4781
+ value_deps: value_dependencies,
4782
+ node
4783
+ });
4784
+ }
4785
+ }
4786
+ // Handle top-level declarations: They could shadow module declarations; delete them from the set of allowed import values
4787
+ if (ts.isVariableStatement(node)) {
4788
+ node.declarationList.declarations.forEach((declaration) => {
4789
+ if (ts.isIdentifier(declaration.name)) {
4790
+ this.import_value_set.delete(declaration.name.text);
4791
+ }
4772
4792
  });
4773
4793
  }
4794
+ if (ts.isFunctionDeclaration(node) && node.name) {
4795
+ this.import_value_set.delete(node.name.text);
4796
+ }
4797
+ if (ts.isClassDeclaration(node) && node.name) {
4798
+ this.import_value_set.delete(node.name.text);
4799
+ }
4800
+ if (ts.isEnumDeclaration(node)) {
4801
+ this.import_value_set.delete(node.name.text);
4802
+ }
4803
+ if (ts.isTypeAliasDeclaration(node)) {
4804
+ this.import_type_set.delete(node.name.text);
4805
+ }
4806
+ if (ts.isInterfaceDeclaration(node)) {
4807
+ this.import_type_set.delete(node.name.text);
4808
+ }
4774
4809
  }
4775
4810
  analyze$propsRune(node) {
4776
4811
  var _a, _b;
@@ -4836,9 +4871,12 @@ class HoistableInterfaces {
4836
4871
  /**
4837
4872
  * Moves all interfaces that can be hoisted to the top of the script, if the $props rune's type is hoistable.
4838
4873
  */
4839
- moveHoistableInterfaces(str, astOffset, scriptStart) {
4874
+ moveHoistableInterfaces(str, astOffset, scriptStart, generics) {
4840
4875
  if (!this.props_interface.name)
4841
4876
  return;
4877
+ for (const generic of generics) {
4878
+ this.import_type_set.delete(generic);
4879
+ }
4842
4880
  const hoistable = this.determineHoistableInterfaces();
4843
4881
  if (hoistable.has(this.props_interface.name)) {
4844
4882
  for (const [, node] of hoistable) {
@@ -6345,8 +6383,10 @@ class Generics {
6345
6383
  var _a, _b, _c, _d;
6346
6384
  this.str = str;
6347
6385
  this.astOffset = astOffset;
6386
+ /** The whole `T extends boolean` */
6348
6387
  this.definitions = [];
6349
6388
  this.typeReferences = [];
6389
+ /** The `T` in `T extends boolean` */
6350
6390
  this.references = [];
6351
6391
  this.genericsAttr = script.attributes.find((attr) => attr.name === 'generics');
6352
6392
  const generics = (_b = (_a = this.genericsAttr) === null || _a === void 0 ? void 0 : _a.value[0]) === null || _b === void 0 ? void 0 : _b.raw;
@@ -6405,6 +6445,9 @@ class Generics {
6405
6445
  getTypeReferences() {
6406
6446
  return this.typeReferences;
6407
6447
  }
6448
+ getReferences() {
6449
+ return this.references;
6450
+ }
6408
6451
  toDefinitionString(addIgnore = false) {
6409
6452
  const surround = addIgnore ? surroundWithIgnoreComments : (str) => str;
6410
6453
  return this.definitions.length ? surround(`<${this.definitions.join(',')}>`) : '';
@@ -6706,7 +6749,7 @@ function processInstanceScriptContent(str, script, events, implicitStoreValues,
6706
6749
  // break dts generation (file will not be generated).
6707
6750
  transformInterfacesToTypes(tsAst, str, astOffset, nodesToMove);
6708
6751
  }
6709
- exportedNames.hoistableInterfaces.moveHoistableInterfaces(str, astOffset, script.start);
6752
+ exportedNames.hoistableInterfaces.moveHoistableInterfaces(str, astOffset, script.start, generics.getReferences());
6710
6753
  return {
6711
6754
  exportedNames,
6712
6755
  events,
package/index.mjs CHANGED
@@ -4732,11 +4732,17 @@ class HoistableInterfaces {
4732
4732
  });
4733
4733
  }
4734
4734
  });
4735
- this.interface_map.set(interface_name, {
4736
- type_deps: type_dependencies,
4737
- value_deps: value_dependencies,
4738
- node
4739
- });
4735
+ if (this.import_type_set.has(interface_name)) {
4736
+ // shadowed; delete because we can't hoist
4737
+ this.import_type_set.delete(interface_name);
4738
+ }
4739
+ else {
4740
+ this.interface_map.set(interface_name, {
4741
+ type_deps: type_dependencies,
4742
+ value_deps: value_dependencies,
4743
+ node
4744
+ });
4745
+ }
4740
4746
  }
4741
4747
  // Handle Type Alias Declarations
4742
4748
  if (ts.isTypeAliasDeclaration(node)) {
@@ -4745,12 +4751,41 @@ class HoistableInterfaces {
4745
4751
  const value_dependencies = new Set();
4746
4752
  const generics = (_d = (_c = node.typeParameters) === null || _c === void 0 ? void 0 : _c.map((param) => param.name.text)) !== null && _d !== void 0 ? _d : [];
4747
4753
  this.collectTypeDependencies(node.type, type_dependencies, value_dependencies, generics);
4748
- this.interface_map.set(alias_name, {
4749
- type_deps: type_dependencies,
4750
- value_deps: value_dependencies,
4751
- node
4754
+ if (this.import_type_set.has(alias_name)) {
4755
+ // shadowed; delete because we can't hoist
4756
+ this.import_type_set.delete(alias_name);
4757
+ }
4758
+ else {
4759
+ this.interface_map.set(alias_name, {
4760
+ type_deps: type_dependencies,
4761
+ value_deps: value_dependencies,
4762
+ node
4763
+ });
4764
+ }
4765
+ }
4766
+ // Handle top-level declarations: They could shadow module declarations; delete them from the set of allowed import values
4767
+ if (ts.isVariableStatement(node)) {
4768
+ node.declarationList.declarations.forEach((declaration) => {
4769
+ if (ts.isIdentifier(declaration.name)) {
4770
+ this.import_value_set.delete(declaration.name.text);
4771
+ }
4752
4772
  });
4753
4773
  }
4774
+ if (ts.isFunctionDeclaration(node) && node.name) {
4775
+ this.import_value_set.delete(node.name.text);
4776
+ }
4777
+ if (ts.isClassDeclaration(node) && node.name) {
4778
+ this.import_value_set.delete(node.name.text);
4779
+ }
4780
+ if (ts.isEnumDeclaration(node)) {
4781
+ this.import_value_set.delete(node.name.text);
4782
+ }
4783
+ if (ts.isTypeAliasDeclaration(node)) {
4784
+ this.import_type_set.delete(node.name.text);
4785
+ }
4786
+ if (ts.isInterfaceDeclaration(node)) {
4787
+ this.import_type_set.delete(node.name.text);
4788
+ }
4754
4789
  }
4755
4790
  analyze$propsRune(node) {
4756
4791
  var _a, _b;
@@ -4816,9 +4851,12 @@ class HoistableInterfaces {
4816
4851
  /**
4817
4852
  * Moves all interfaces that can be hoisted to the top of the script, if the $props rune's type is hoistable.
4818
4853
  */
4819
- moveHoistableInterfaces(str, astOffset, scriptStart) {
4854
+ moveHoistableInterfaces(str, astOffset, scriptStart, generics) {
4820
4855
  if (!this.props_interface.name)
4821
4856
  return;
4857
+ for (const generic of generics) {
4858
+ this.import_type_set.delete(generic);
4859
+ }
4822
4860
  const hoistable = this.determineHoistableInterfaces();
4823
4861
  if (hoistable.has(this.props_interface.name)) {
4824
4862
  for (const [, node] of hoistable) {
@@ -6325,8 +6363,10 @@ class Generics {
6325
6363
  var _a, _b, _c, _d;
6326
6364
  this.str = str;
6327
6365
  this.astOffset = astOffset;
6366
+ /** The whole `T extends boolean` */
6328
6367
  this.definitions = [];
6329
6368
  this.typeReferences = [];
6369
+ /** The `T` in `T extends boolean` */
6330
6370
  this.references = [];
6331
6371
  this.genericsAttr = script.attributes.find((attr) => attr.name === 'generics');
6332
6372
  const generics = (_b = (_a = this.genericsAttr) === null || _a === void 0 ? void 0 : _a.value[0]) === null || _b === void 0 ? void 0 : _b.raw;
@@ -6385,6 +6425,9 @@ class Generics {
6385
6425
  getTypeReferences() {
6386
6426
  return this.typeReferences;
6387
6427
  }
6428
+ getReferences() {
6429
+ return this.references;
6430
+ }
6388
6431
  toDefinitionString(addIgnore = false) {
6389
6432
  const surround = addIgnore ? surroundWithIgnoreComments : (str) => str;
6390
6433
  return this.definitions.length ? surround(`<${this.definitions.join(',')}>`) : '';
@@ -6686,7 +6729,7 @@ function processInstanceScriptContent(str, script, events, implicitStoreValues,
6686
6729
  // break dts generation (file will not be generated).
6687
6730
  transformInterfacesToTypes(tsAst, str, astOffset, nodesToMove);
6688
6731
  }
6689
- exportedNames.hoistableInterfaces.moveHoistableInterfaces(str, astOffset, script.start);
6732
+ exportedNames.hoistableInterfaces.moveHoistableInterfaces(str, astOffset, script.start, generics.getReferences());
6690
6733
  return {
6691
6734
  exportedNames,
6692
6735
  events,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte2tsx",
3
- "version": "0.7.25",
3
+ "version": "0.7.26",
4
4
  "description": "Convert Svelte components to TSX for type checking",
5
5
  "author": "David Pershouse",
6
6
  "license": "MIT",