@karibulab/wsdl2tsx 0.17.2 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +399 -229
  2. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -23589,13 +23589,34 @@ Schema [${i}] (targetNamespace: ${schemaNode.targetNamespace || "no definido"}):
23589
23589
  // src/generator/soap-namespace.ts
23590
23590
  var SOAP12_ENVELOPE_URI = "http://www.w3.org/2003/05/soap-envelope";
23591
23591
  var SOAP11_ENVELOPE_URI = "http://schemas.xmlsoap.org/soap/envelope/";
23592
+ var SOAP12_BINDING_URI = "http://schemas.xmlsoap.org/wsdl/soap12/";
23593
+ var SOAP11_BINDING_URI = "http://schemas.xmlsoap.org/wsdl/soap/";
23592
23594
  function getSoapNamespaceURI(definitionsNamespaces) {
23595
+ for (const uri2 of definitionsNamespaces.values()) {
23596
+ if (uri2 === SOAP12_ENVELOPE_URI) {
23597
+ return SOAP12_ENVELOPE_URI;
23598
+ }
23599
+ if (uri2 === SOAP11_ENVELOPE_URI) {
23600
+ return SOAP11_ENVELOPE_URI;
23601
+ }
23602
+ }
23603
+ for (const uri2 of definitionsNamespaces.values()) {
23604
+ if (uri2 === SOAP12_BINDING_URI || uri2.includes("wsdl/soap12") || uri2.endsWith("soap12/")) {
23605
+ return SOAP12_ENVELOPE_URI;
23606
+ }
23607
+ if (uri2 === SOAP11_BINDING_URI || uri2.includes("wsdl/soap") && !uri2.includes("soap12")) {
23608
+ return SOAP11_ENVELOPE_URI;
23609
+ }
23610
+ }
23593
23611
  const soapEntry = Array.from(definitionsNamespaces.entries()).find((entry) => entry[1].includes("soap"));
23594
23612
  if (!soapEntry) {
23595
23613
  return SOAP11_ENVELOPE_URI;
23596
23614
  }
23597
- const lastPart = soapEntry[1].split("/").slice(-1)[0];
23598
- return lastPart === "soap12" ? SOAP12_ENVELOPE_URI : SOAP11_ENVELOPE_URI;
23615
+ const uri = soapEntry[1];
23616
+ if (uri.includes("soap12") || uri.includes("2003/05/soap-envelope")) {
23617
+ return SOAP12_ENVELOPE_URI;
23618
+ }
23619
+ return SOAP11_ENVELOPE_URI;
23599
23620
  }
23600
23621
 
23601
23622
  // src/codegen/constants.ts
@@ -23775,18 +23796,22 @@ function extractAllTagsForXmlBody(typeObject, namespacesTypeMapping, baseNamespa
23775
23796
  const referencedType = element.type;
23776
23797
  debugContext("extractAllTagsForXmlBody", `Resolviendo tipo referenciado: "${referencedType}" para tag "${tagLocalName}"`);
23777
23798
  let referencedTypeObject = schemaObject?.[referencedType] || allComplexTypes?.[referencedType];
23778
- if (!referencedTypeObject) {
23799
+ let foundKey;
23800
+ if (referencedTypeObject) {
23801
+ foundKey = referencedType;
23802
+ } else {
23779
23803
  const referencedLocalName = referencedType.split(":").pop() || referencedType;
23780
- const matchingKey = Object.keys(schemaObject || {}).find((k) => {
23804
+ foundKey = Object.keys(schemaObject || {}).find((k) => {
23805
+ if (k === "$namespace" || k === "$qualified") return false;
23781
23806
  const kLocalName = k.split(":").pop();
23782
23807
  return kLocalName === referencedLocalName;
23783
23808
  }) || Object.keys(allComplexTypes || {}).find((k) => {
23784
23809
  const kLocalName = k.split(":").pop();
23785
23810
  return kLocalName === referencedLocalName;
23786
23811
  });
23787
- if (matchingKey) {
23788
- referencedTypeObject = schemaObject?.[matchingKey] || allComplexTypes?.[matchingKey];
23789
- debugContext("extractAllTagsForXmlBody", `Tipo referenciado encontrado por nombre local: "${matchingKey}"`);
23812
+ if (foundKey) {
23813
+ referencedTypeObject = schemaObject?.[foundKey] || allComplexTypes?.[foundKey];
23814
+ debugContext("extractAllTagsForXmlBody", `Tipo referenciado encontrado por nombre local: "${foundKey}"`);
23790
23815
  }
23791
23816
  }
23792
23817
  if (referencedTypeObject) {
@@ -23800,10 +23825,32 @@ function extractAllTagsForXmlBody(typeObject, namespacesTypeMapping, baseNamespa
23800
23825
  debugContext("extractAllTagsForXmlBody", `Registrando namespace del tipo referenciado: "${refNamespacePrefix}" -> "${refNamespace}"`);
23801
23826
  }
23802
23827
  }
23803
- if ("type" in referencedTypeObject && typeof referencedTypeObject.type === "object") {
23804
- elementTypeValue = referencedTypeObject.type;
23828
+ }
23829
+ let referencedElementNamespace;
23830
+ if (foundKey && foundKey.includes(":")) {
23831
+ const [nsPart] = foundKey.split(":");
23832
+ if (nsPart.startsWith("http://") || nsPart.startsWith("https://")) {
23833
+ referencedElementNamespace = nsPart;
23834
+ debugContext("extractAllTagsForXmlBody", `Namespace del elemento referenciado obtenido de la clave "${foundKey}": "${referencedElementNamespace}"`);
23835
+ }
23836
+ }
23837
+ if (!referencedElementNamespace && referencedTypeObject && typeof referencedTypeObject === "object") {
23838
+ const refNamespace = referencedTypeObject[NAMESPACE_KEY];
23839
+ if (refNamespace && typeof refNamespace === "string") {
23840
+ referencedElementNamespace = refNamespace;
23841
+ debugContext("extractAllTagsForXmlBody", `Namespace del elemento referenciado obtenido del $namespace del objeto: "${referencedElementNamespace}"`);
23805
23842
  }
23806
23843
  }
23844
+ if (referencedTypeObject && typeof referencedTypeObject === "object" && "type" in referencedTypeObject && typeof referencedTypeObject.type === "object") {
23845
+ elementTypeValue = referencedTypeObject.type;
23846
+ if (referencedElementNamespace) {
23847
+ elementTypeValue._referencedElementNamespace = referencedElementNamespace;
23848
+ }
23849
+ }
23850
+ if (referencedElementNamespace) {
23851
+ referencedTypeObject._referencedElementNamespace = referencedElementNamespace;
23852
+ debugContext("extractAllTagsForXmlBody", `Namespace del elemento referenciado "${tagLocalName}" guardado: "${referencedElementNamespace}"`);
23853
+ }
23807
23854
  debugContext("extractAllTagsForXmlBody", `\u2713 Tipo referenciado resuelto para "${tagLocalName}" (elemento en namespace: "${elementNamespace || currentNamespace}", tipo en namespace: "${referencedTypeObject[NAMESPACE_KEY] || "N/A"}")`);
23808
23855
  } else {
23809
23856
  debugContext("extractAllTagsForXmlBody", `\u2717 Tipo referenciado no encontrado: "${referencedType}"`);
@@ -23812,13 +23859,27 @@ function extractAllTagsForXmlBody(typeObject, namespacesTypeMapping, baseNamespa
23812
23859
  elementTypeValue = element.type;
23813
23860
  }
23814
23861
  }
23815
- const namespace = elementNamespace || currentNamespace;
23862
+ let tagNamespace = elementNamespace || currentNamespace;
23863
+ if (elementTypeValue && typeof elementTypeValue === "object" && elementTypeValue !== null) {
23864
+ const referencedElementNamespace = elementTypeValue._referencedElementNamespace;
23865
+ if (referencedElementNamespace && typeof referencedElementNamespace === "string") {
23866
+ tagNamespace = referencedElementNamespace;
23867
+ debugContext("extractAllTagsForXmlBody", `Tag "${tagLocalName}" pertenece al namespace del elemento referenciado: "${tagNamespace}"`);
23868
+ } else {
23869
+ const referencedTypeNamespace = elementTypeValue[NAMESPACE_KEY];
23870
+ if (referencedTypeNamespace && typeof referencedTypeNamespace === "string") {
23871
+ tagNamespace = referencedTypeNamespace;
23872
+ debugContext("extractAllTagsForXmlBody", `Tag "${tagLocalName}" pertenece al namespace del tipo referenciado: "${tagNamespace}"`);
23873
+ }
23874
+ }
23875
+ }
23876
+ const namespace = tagNamespace;
23816
23877
  const namespacePrefix = extractNamespacePrefix(namespace);
23817
23878
  if (namespace !== currentNamespace && !foundNamespaces.has(namespacePrefix)) {
23818
23879
  foundNamespaces.set(namespacePrefix, namespace);
23819
23880
  debugContext("extractAllTagsForXmlBody", `Registrando namespace del elemento: "${namespacePrefix}" -> "${namespace}"`);
23820
23881
  }
23821
- debugContext("extractAllTagsForXmlBody", `Agregando tag "${tagLocalName}" al namespace "${namespacePrefix}" (namespace del elemento: "${namespace}")`);
23882
+ debugContext("extractAllTagsForXmlBody", `Agregando tag "${tagLocalName}" al namespace "${namespacePrefix}" (namespace: "${namespace}")`);
23822
23883
  result.push(tagLocalName);
23823
23884
  if (!tagsByNamespace.has(namespace)) {
23824
23885
  tagsByNamespace.set(namespace, []);
@@ -23899,208 +23960,6 @@ function flattenKeysWithNamespace(typeObject, currentNamespace, currentNamespace
23899
23960
  return result;
23900
23961
  }
23901
23962
 
23902
- // src/codegen/namespaces.ts
23903
- function extractAllNamespaceMappings(baseTypeName, baseTypeObject, schemaObject, allComplexTypes) {
23904
- const tagsMapping = {};
23905
- const prefixesMapping = {};
23906
- const typesMapping = {};
23907
- if (!baseTypeObject || typeof baseTypeObject !== "object") {
23908
- throw new Error(`El objeto de tipo ${baseTypeName} es inv\xE1lido o est\xE1 vac\xEDo`);
23909
- }
23910
- const baseNamespace = baseTypeObject[NAMESPACE_KEY];
23911
- if (!baseNamespace) {
23912
- throw new Error(`El tipo ${baseTypeName} no tiene la propiedad $namespace definida`);
23913
- }
23914
- const baseIsQualified = baseTypeObject.$qualified === true;
23915
- const existingPrefixesSet = /* @__PURE__ */ new Set();
23916
- const baseNamespacePrefix = extractNamespacePrefix(baseNamespace, existingPrefixesSet);
23917
- existingPrefixesSet.add(baseNamespacePrefix);
23918
- const baseTypeLocalName = extractLocalName(baseTypeName);
23919
- if (baseIsQualified) {
23920
- tagsMapping[baseNamespacePrefix] = [baseTypeLocalName];
23921
- prefixesMapping[baseNamespacePrefix] = baseNamespace;
23922
- }
23923
- typesMapping[baseTypeName] = {
23924
- uri: baseNamespace,
23925
- prefix: baseNamespacePrefix
23926
- };
23927
- const keys = getFilteredKeys(baseTypeObject);
23928
- for (const key of keys) {
23929
- const element = baseTypeObject[key];
23930
- const tagLocalName = extractLocalName(key);
23931
- let elementIsQualified = false;
23932
- let elementNamespace;
23933
- if (typeof element === "object" && element !== null) {
23934
- elementIsQualified = element.$qualified === true;
23935
- elementNamespace = element.$namespace;
23936
- }
23937
- const namespace = elementNamespace || baseNamespace;
23938
- const tagNames = elementIsQualified ? [tagLocalName] : [];
23939
- if (typeof element === "object" && element !== null && typeof element.type === "object") {
23940
- const nestedTags = extractNestedTags(element.type);
23941
- tagNames.push(...nestedTags);
23942
- }
23943
- let namespacePrefix = extractNamespacePrefix(namespace, existingPrefixesSet);
23944
- if (prefixesMapping[namespacePrefix] && prefixesMapping[namespacePrefix] !== namespace) {
23945
- namespacePrefix = extractNamespacePrefix(namespace, existingPrefixesSet);
23946
- }
23947
- existingPrefixesSet.add(namespacePrefix);
23948
- if (tagNames.length > 0) {
23949
- if (tagsMapping[namespacePrefix] === void 0) {
23950
- tagsMapping[namespacePrefix] = tagNames;
23951
- } else {
23952
- tagsMapping[namespacePrefix].push(...tagNames);
23953
- }
23954
- if (prefixesMapping[namespacePrefix] === void 0) {
23955
- prefixesMapping[namespacePrefix] = namespace;
23956
- }
23957
- }
23958
- }
23959
- const flatKeys = flattenKeysWithNamespace(baseTypeObject, baseNamespace, baseNamespacePrefix);
23960
- for (const item of flatKeys) {
23961
- typesMapping[item.name] = {
23962
- uri: item.uri,
23963
- prefix: item.prefix
23964
- };
23965
- }
23966
- const xmlBodyResult = extractAllTagsForXmlBody(
23967
- baseTypeObject,
23968
- typesMapping,
23969
- baseNamespacePrefix,
23970
- baseNamespace,
23971
- /* @__PURE__ */ new Set(),
23972
- schemaObject,
23973
- allComplexTypes
23974
- );
23975
- for (const [prefix, uri] of xmlBodyResult.namespaces) {
23976
- let finalPrefix;
23977
- for (const [p, u] of Object.entries(prefixesMapping)) {
23978
- if (u === uri) {
23979
- finalPrefix = p;
23980
- break;
23981
- }
23982
- }
23983
- if (!finalPrefix || prefixesMapping[prefix] && prefixesMapping[prefix] !== uri) {
23984
- finalPrefix = extractNamespacePrefix(uri, existingPrefixesSet);
23985
- existingPrefixesSet.add(finalPrefix);
23986
- if (prefixesMapping[prefix] && prefixesMapping[prefix] !== uri) {
23987
- debugContext("extractAllNamespaceMappings", `Colisi\xF3n de prefijo detectada para "${prefix}", usando prefijo \xFAnico: "${finalPrefix}"`);
23988
- }
23989
- }
23990
- if (!prefixesMapping[finalPrefix]) {
23991
- prefixesMapping[finalPrefix] = uri;
23992
- debugContext("extractAllNamespaceMappings", `Agregando namespace adicional al prefixesMapping: "${finalPrefix}" -> "${uri}"`);
23993
- }
23994
- if (!tagsMapping[finalPrefix]) {
23995
- tagsMapping[finalPrefix] = [];
23996
- }
23997
- }
23998
- const allTagsAdded = /* @__PURE__ */ new Set();
23999
- for (const [nsUri, tags] of xmlBodyResult.tagsByNamespace) {
24000
- let finalPrefix;
24001
- for (const [p, u] of Object.entries(prefixesMapping)) {
24002
- if (u === nsUri) {
24003
- finalPrefix = p;
24004
- break;
24005
- }
24006
- }
24007
- if (!finalPrefix) {
24008
- finalPrefix = extractNamespacePrefix(nsUri, existingPrefixesSet);
24009
- existingPrefixesSet.add(finalPrefix);
24010
- }
24011
- if (!tagsMapping[finalPrefix]) {
24012
- tagsMapping[finalPrefix] = [];
24013
- }
24014
- const existingTags = new Set(tagsMapping[finalPrefix] || []);
24015
- const tagsToAdd = [];
24016
- for (const tag of tags) {
24017
- if (!existingTags.has(tag) && !allTagsAdded.has(tag)) {
24018
- tagsToAdd.push(tag);
24019
- allTagsAdded.add(tag);
24020
- }
24021
- }
24022
- if (tagsToAdd.length > 0) {
24023
- tagsMapping[finalPrefix].push(...tagsToAdd);
24024
- debugContext("extractAllNamespaceMappings", `Agregando ${tagsToAdd.length} tag(s) al namespace "${finalPrefix}" (${nsUri}): ${tagsToAdd.join(", ")}`);
24025
- }
24026
- }
24027
- const baseNamespaceTags = xmlBodyResult.tagsByNamespace.get(baseNamespace);
24028
- if (baseNamespaceTags && baseNamespaceTags.length > 0) {
24029
- if (tagsMapping[baseNamespacePrefix] === void 0) {
24030
- tagsMapping[baseNamespacePrefix] = [];
24031
- prefixesMapping[baseNamespacePrefix] = baseNamespace;
24032
- }
24033
- const existingTags = new Set(tagsMapping[baseNamespacePrefix] || []);
24034
- for (const tag of baseNamespaceTags) {
24035
- if (!existingTags.has(tag)) {
24036
- tagsMapping[baseNamespacePrefix].push(tag);
24037
- existingTags.add(tag);
24038
- }
24039
- }
24040
- debugContext("extractAllNamespaceMappings", `Agregando ${baseNamespaceTags.length} tag(s) al namespace base "${baseNamespacePrefix}"`);
24041
- }
24042
- return {
24043
- tagsMapping,
24044
- prefixesMapping,
24045
- typesMapping
24046
- };
24047
- }
24048
- function getNamespacePrefix(namespacesTypeMapping, baseNamespacePrefix, key, parentKey, elementObject, prefixesMapping) {
24049
- if (elementObject && typeof elementObject === "object") {
24050
- const elemNs = elementObject.$namespace;
24051
- if (typeof elemNs === "string") {
24052
- debugContext("getNamespacePrefix", `Elemento "${key}" tiene namespace: "${elemNs}"`);
24053
- if (prefixesMapping) {
24054
- for (const [prefix, uri] of Object.entries(prefixesMapping)) {
24055
- if (uri === elemNs) {
24056
- debugContext("getNamespacePrefix", `Encontrado prefijo "${prefix}" para namespace "${elemNs}"`);
24057
- return prefix;
24058
- }
24059
- }
24060
- debugContext("getNamespacePrefix", `No se encontr\xF3 prefijo en prefixesMapping para "${elemNs}", usando extractNamespacePrefix`);
24061
- }
24062
- const extractedPrefix = extractNamespacePrefix(elemNs);
24063
- debugContext("getNamespacePrefix", `Usando prefijo extra\xEDdo: "${extractedPrefix}" para namespace "${elemNs}"`);
24064
- return extractedPrefix;
24065
- } else {
24066
- if ("type" in elementObject && typeof elementObject.type === "object" && elementObject.type !== null) {
24067
- const typeNs = elementObject.type.$namespace;
24068
- if (typeof typeNs === "string") {
24069
- debugContext("getNamespacePrefix", `Elemento "${key}" no tiene $namespace, pero su tipo tiene: "${typeNs}"`);
24070
- if (prefixesMapping) {
24071
- for (const [prefix, uri] of Object.entries(prefixesMapping)) {
24072
- if (uri === typeNs) {
24073
- debugContext("getNamespacePrefix", `Encontrado prefijo "${prefix}" para namespace del tipo "${typeNs}"`);
24074
- return prefix;
24075
- }
24076
- }
24077
- }
24078
- const extractedPrefix = extractNamespacePrefix(typeNs);
24079
- debugContext("getNamespacePrefix", `Usando prefijo extra\xEDdo del tipo: "${extractedPrefix}" para namespace "${typeNs}"`);
24080
- return extractedPrefix;
24081
- }
24082
- }
24083
- }
24084
- }
24085
- if (parentKey !== null) {
24086
- return namespacesTypeMapping[parentKey]?.prefix ?? baseNamespacePrefix;
24087
- }
24088
- return namespacesTypeMapping[key]?.prefix ?? baseNamespacePrefix;
24089
- }
24090
- function shouldHavePrefix(elementObject) {
24091
- if (!elementObject || typeof elementObject !== "object") return false;
24092
- if ("$qualified" in elementObject && typeof elementObject.$qualified === "boolean") {
24093
- return elementObject.$qualified;
24094
- }
24095
- if ("type" in elementObject && typeof elementObject.type === "object" && elementObject.type !== null) {
24096
- const typeObj = elementObject.type;
24097
- if ("$qualified" in typeObj && typeof typeObj.$qualified === "boolean") {
24098
- return typeObj.$qualified;
24099
- }
24100
- }
24101
- return false;
24102
- }
24103
-
24104
23963
  // src/codegen/xml-generator/type-resolution.ts
24105
23964
  function resolveReferencedType(typeValue, schemaObject, allComplexTypes) {
24106
23965
  let referencedElement = schemaObject?.[typeValue];
@@ -24161,7 +24020,7 @@ function resolveNestedType(nestedTypeValue, schemaObject, allComplexTypes) {
24161
24020
  }
24162
24021
 
24163
24022
  // src/codegen/xml-generator/xml-property.ts
24164
- function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key, elementObject, parentKey = null, propertyPath = "", parentIsQualified = true, prefixesMapping, schemaObject, allComplexTypes) {
24023
+ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key, elementObject, parentKey = null, propertyPath = "", parentIsQualified = true, prefixesMapping, schemaObject, allComplexTypes, tagUsageCollector) {
24165
24024
  const namespacePrefix = getNamespacePrefix(
24166
24025
  namespacesTypeMapping,
24167
24026
  baseNamespacePrefix,
@@ -24175,12 +24034,73 @@ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key
24175
24034
  const isQualified = shouldHavePrefix(elementObject);
24176
24035
  const openTag = isQualified ? `<${namespacePrefix}.${tagLocalName}>` : `<${tagLocalName}>`;
24177
24036
  const closeTag = isQualified ? `</${namespacePrefix}.${tagLocalName}>` : `</${tagLocalName}>`;
24037
+ if (tagUsageCollector && isQualified) {
24038
+ tagUsageCollector.tagToPrefix.set(tagLocalName, namespacePrefix);
24039
+ if (prefixesMapping && prefixesMapping[namespacePrefix]) {
24040
+ tagUsageCollector.prefixToNamespace.set(namespacePrefix, prefixesMapping[namespacePrefix]);
24041
+ }
24042
+ }
24178
24043
  const isArray2 = typeof elementObject === "object" && elementObject !== null && "maxOccurs" in elementObject && elementObject.maxOccurs !== void 0 && elementObject.maxOccurs !== "1" && elementObject.maxOccurs !== DEFAULT_OCCURS;
24179
24044
  const currentPropertyPath = propertyPath ? propertyPath.endsWith(`.${tagCamelCase}`) || propertyPath === tagCamelCase ? propertyPath : `${propertyPath}.${tagCamelCase}` : tagCamelCase;
24180
24045
  if (typeof elementObject === "object" && elementObject !== null && typeof elementObject.type === "string" && (schemaObject || allComplexTypes)) {
24181
24046
  const referencedType = elementObject.type;
24182
24047
  const referencedElement = resolveReferencedType(referencedType, schemaObject, allComplexTypes);
24183
24048
  if (referencedElement && typeof referencedElement === "object") {
24049
+ let referencedElementNamespace = referencedElement.$namespace;
24050
+ if (typeof referencedElementNamespace !== "string") {
24051
+ const typeLocalName = referencedType.split(":").pop() || referencedType;
24052
+ let foundKey;
24053
+ if (schemaObject) {
24054
+ foundKey = Object.keys(schemaObject).find((k) => {
24055
+ if (k === "$namespace" || k === "$qualified") return false;
24056
+ const kLocalName = k.split(":").pop() || k;
24057
+ return kLocalName === typeLocalName;
24058
+ });
24059
+ if (foundKey && foundKey.includes(":")) {
24060
+ const [nsUri] = foundKey.split(":");
24061
+ referencedElementNamespace = nsUri;
24062
+ }
24063
+ }
24064
+ if (!foundKey && allComplexTypes) {
24065
+ foundKey = Object.keys(allComplexTypes).find((k) => {
24066
+ const kLocalName = k.split(":").pop() || k;
24067
+ return kLocalName === typeLocalName;
24068
+ });
24069
+ if (foundKey && foundKey.includes(":")) {
24070
+ const [nsUri] = foundKey.split(":");
24071
+ referencedElementNamespace = nsUri;
24072
+ }
24073
+ }
24074
+ }
24075
+ let wrapperNamespacePrefix = namespacePrefix;
24076
+ if (typeof referencedElementNamespace === "string") {
24077
+ if (prefixesMapping) {
24078
+ for (const [prefix, uri] of Object.entries(prefixesMapping)) {
24079
+ if (uri === referencedElementNamespace) {
24080
+ wrapperNamespacePrefix = prefix;
24081
+ break;
24082
+ }
24083
+ }
24084
+ } else {
24085
+ wrapperNamespacePrefix = getNamespacePrefix(
24086
+ namespacesTypeMapping,
24087
+ baseNamespacePrefix,
24088
+ key,
24089
+ parentKey,
24090
+ { $namespace: referencedElementNamespace },
24091
+ prefixesMapping
24092
+ );
24093
+ }
24094
+ }
24095
+ const wrapperIsQualified = referencedElement.$qualified !== false;
24096
+ const wrapperOpenTag = wrapperIsQualified ? `<${wrapperNamespacePrefix}.${tagLocalName}>` : `<${tagLocalName}>`;
24097
+ const wrapperCloseTag = wrapperIsQualified ? `</${wrapperNamespacePrefix}.${tagLocalName}>` : `</${tagLocalName}>`;
24098
+ if (tagUsageCollector && wrapperIsQualified) {
24099
+ tagUsageCollector.tagToPrefix.set(tagLocalName, wrapperNamespacePrefix);
24100
+ if (prefixesMapping && prefixesMapping[wrapperNamespacePrefix]) {
24101
+ tagUsageCollector.prefixToNamespace.set(wrapperNamespacePrefix, prefixesMapping[wrapperNamespacePrefix]);
24102
+ }
24103
+ }
24184
24104
  let finalReferencedElement = referencedElement;
24185
24105
  if ("type" in referencedElement && typeof referencedElement.type === "string") {
24186
24106
  const nestedReferencedElement = resolveNestedType(referencedElement.type, schemaObject, allComplexTypes);
@@ -24215,14 +24135,15 @@ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key
24215
24135
  isQualified,
24216
24136
  prefixesMapping,
24217
24137
  schemaObject,
24218
- allComplexTypes
24138
+ allComplexTypes,
24139
+ tagUsageCollector
24219
24140
  );
24220
24141
  }
24221
24142
  return "";
24222
24143
  }).filter(Boolean).join("\n");
24223
- return `${openTag}
24144
+ return `${wrapperOpenTag}
24224
24145
  ${nestedProperties}
24225
- ${closeTag}`;
24146
+ ${wrapperCloseTag}`;
24226
24147
  }
24227
24148
  }
24228
24149
  const referencedKeys = getFilteredKeys(finalReferencedElement);
@@ -24251,14 +24172,15 @@ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key
24251
24172
  isQualified,
24252
24173
  prefixesMapping,
24253
24174
  schemaObject,
24254
- allComplexTypes
24175
+ allComplexTypes,
24176
+ tagUsageCollector
24255
24177
  );
24256
24178
  }
24257
24179
  return "";
24258
24180
  }).filter(Boolean).join("\n");
24259
- return `${openTag}
24181
+ return `${wrapperOpenTag}
24260
24182
  ${nestedProperties}
24261
- ${closeTag}`;
24183
+ ${wrapperCloseTag}`;
24262
24184
  }
24263
24185
  }
24264
24186
  }
@@ -24325,7 +24247,8 @@ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key
24325
24247
  isQualified,
24326
24248
  prefixesMapping,
24327
24249
  schemaObject,
24328
- allComplexTypes
24250
+ allComplexTypes,
24251
+ tagUsageCollector
24329
24252
  );
24330
24253
  }
24331
24254
  return "";
@@ -24339,7 +24262,7 @@ function generateXmlPropertyCode(namespacesTypeMapping, baseNamespacePrefix, key
24339
24262
  }
24340
24263
 
24341
24264
  // src/codegen/xml-generator/xml-body.ts
24342
- function generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTypeName, baseTypeObject, propsInterfaceName, schemaObject, allComplexTypes, prefixesMapping) {
24265
+ function generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTypeName, baseTypeObject, propsInterfaceName, schemaObject, allComplexTypes, prefixesMapping, tagUsageCollector) {
24343
24266
  const keys = getFilteredKeys(baseTypeObject);
24344
24267
  const baseTypeLocalName = extractLocalName(baseTypeName);
24345
24268
  if (keys.length === 1) {
@@ -24350,7 +24273,7 @@ function generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTyp
24350
24273
  if (typeof typeValue === "object" && typeValue !== null) {
24351
24274
  const typeKeys = getFilteredKeys(typeValue);
24352
24275
  if (typeKeys.length > 0) {
24353
- return generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTypeName, typeValue, propsInterfaceName, schemaObject, allComplexTypes, prefixesMapping);
24276
+ return generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTypeName, typeValue, propsInterfaceName, schemaObject, allComplexTypes, prefixesMapping, tagUsageCollector);
24354
24277
  }
24355
24278
  }
24356
24279
  }
@@ -24372,16 +24295,242 @@ function generateXmlBodyCode(baseNamespacePrefix, namespacesTypeMapping, baseTyp
24372
24295
  // El padre (root element) siempre es qualified
24373
24296
  prefixesMapping,
24374
24297
  schemaObject,
24375
- allComplexTypes
24298
+ allComplexTypes,
24299
+ tagUsageCollector
24376
24300
  );
24377
24301
  }
24378
24302
  return "";
24379
24303
  }).filter(Boolean).join("\n");
24304
+ if (tagUsageCollector) {
24305
+ tagUsageCollector.tagToPrefix.set(baseTypeLocalName, baseNamespacePrefix);
24306
+ if (prefixesMapping && prefixesMapping[baseNamespacePrefix]) {
24307
+ tagUsageCollector.prefixToNamespace.set(baseNamespacePrefix, prefixesMapping[baseNamespacePrefix]);
24308
+ }
24309
+ }
24380
24310
  return `<${baseNamespacePrefix}.${baseTypeLocalName}>
24381
24311
  ${properties}
24382
24312
  </${baseNamespacePrefix}.${baseTypeLocalName}>`;
24383
24313
  }
24384
24314
 
24315
+ // src/codegen/namespaces.ts
24316
+ function extractAllNamespaceMappings(baseTypeName, baseTypeObject, schemaObject, allComplexTypes) {
24317
+ const tagsMapping = {};
24318
+ const prefixesMapping = {};
24319
+ const typesMapping = {};
24320
+ if (!baseTypeObject || typeof baseTypeObject !== "object") {
24321
+ throw new Error(`El objeto de tipo ${baseTypeName} es inv\xE1lido o est\xE1 vac\xEDo`);
24322
+ }
24323
+ const baseNamespace = baseTypeObject[NAMESPACE_KEY];
24324
+ if (!baseNamespace) {
24325
+ throw new Error(`El tipo ${baseTypeName} no tiene la propiedad $namespace definida`);
24326
+ }
24327
+ const baseIsQualified = baseTypeObject.$qualified === true;
24328
+ const existingPrefixesSet = /* @__PURE__ */ new Set();
24329
+ const baseNamespacePrefix = extractNamespacePrefix(baseNamespace, existingPrefixesSet);
24330
+ existingPrefixesSet.add(baseNamespacePrefix);
24331
+ const baseTypeLocalName = extractLocalName(baseTypeName);
24332
+ if (baseIsQualified) {
24333
+ tagsMapping[baseNamespacePrefix] = [baseTypeLocalName];
24334
+ prefixesMapping[baseNamespacePrefix] = baseNamespace;
24335
+ }
24336
+ typesMapping[baseTypeName] = {
24337
+ uri: baseNamespace,
24338
+ prefix: baseNamespacePrefix
24339
+ };
24340
+ const keys = getFilteredKeys(baseTypeObject);
24341
+ for (const key of keys) {
24342
+ const element = baseTypeObject[key];
24343
+ const tagLocalName = extractLocalName(key);
24344
+ let elementIsQualified = false;
24345
+ let elementNamespace;
24346
+ if (typeof element === "object" && element !== null) {
24347
+ elementIsQualified = element.$qualified === true;
24348
+ elementNamespace = element.$namespace;
24349
+ }
24350
+ const namespace = elementNamespace || baseNamespace;
24351
+ const tagNames = elementIsQualified ? [tagLocalName] : [];
24352
+ if (typeof element === "object" && element !== null && typeof element.type === "object") {
24353
+ const nestedTags = extractNestedTags(element.type);
24354
+ tagNames.push(...nestedTags);
24355
+ }
24356
+ let namespacePrefix = extractNamespacePrefix(namespace, existingPrefixesSet);
24357
+ if (prefixesMapping[namespacePrefix] && prefixesMapping[namespacePrefix] !== namespace) {
24358
+ namespacePrefix = extractNamespacePrefix(namespace, existingPrefixesSet);
24359
+ }
24360
+ existingPrefixesSet.add(namespacePrefix);
24361
+ if (tagNames.length > 0) {
24362
+ if (tagsMapping[namespacePrefix] === void 0) {
24363
+ tagsMapping[namespacePrefix] = tagNames;
24364
+ } else {
24365
+ tagsMapping[namespacePrefix].push(...tagNames);
24366
+ }
24367
+ if (prefixesMapping[namespacePrefix] === void 0) {
24368
+ prefixesMapping[namespacePrefix] = namespace;
24369
+ }
24370
+ }
24371
+ }
24372
+ const flatKeys = flattenKeysWithNamespace(baseTypeObject, baseNamespace, baseNamespacePrefix);
24373
+ for (const item of flatKeys) {
24374
+ typesMapping[item.name] = {
24375
+ uri: item.uri,
24376
+ prefix: item.prefix
24377
+ };
24378
+ }
24379
+ const xmlBodyResult = extractAllTagsForXmlBody(
24380
+ baseTypeObject,
24381
+ typesMapping,
24382
+ baseNamespacePrefix,
24383
+ baseNamespace,
24384
+ /* @__PURE__ */ new Set(),
24385
+ schemaObject,
24386
+ allComplexTypes
24387
+ );
24388
+ for (const [prefix, uri] of xmlBodyResult.namespaces) {
24389
+ let finalPrefix;
24390
+ for (const [p, u] of Object.entries(prefixesMapping)) {
24391
+ if (u === uri) {
24392
+ finalPrefix = p;
24393
+ break;
24394
+ }
24395
+ }
24396
+ if (!finalPrefix || prefixesMapping[prefix] && prefixesMapping[prefix] !== uri) {
24397
+ finalPrefix = extractNamespacePrefix(uri, existingPrefixesSet);
24398
+ existingPrefixesSet.add(finalPrefix);
24399
+ if (prefixesMapping[prefix] && prefixesMapping[prefix] !== uri) {
24400
+ debugContext("extractAllNamespaceMappings", `Colisi\xF3n de prefijo detectada para "${prefix}", usando prefijo \xFAnico: "${finalPrefix}"`);
24401
+ }
24402
+ }
24403
+ if (!prefixesMapping[finalPrefix]) {
24404
+ prefixesMapping[finalPrefix] = uri;
24405
+ debugContext("extractAllNamespaceMappings", `Agregando namespace adicional al prefixesMapping: "${finalPrefix}" -> "${uri}"`);
24406
+ }
24407
+ if (!tagsMapping[finalPrefix]) {
24408
+ tagsMapping[finalPrefix] = [];
24409
+ }
24410
+ }
24411
+ const tagUsageCollector = {
24412
+ tagToPrefix: /* @__PURE__ */ new Map(),
24413
+ prefixToNamespace: /* @__PURE__ */ new Map()
24414
+ };
24415
+ generateXmlBodyCode(
24416
+ baseNamespacePrefix,
24417
+ typesMapping,
24418
+ baseTypeName,
24419
+ baseTypeObject,
24420
+ void 0,
24421
+ // propsInterfaceName
24422
+ schemaObject,
24423
+ allComplexTypes,
24424
+ prefixesMapping,
24425
+ tagUsageCollector
24426
+ );
24427
+ const newTagsMapping = {};
24428
+ const prefixToTags = /* @__PURE__ */ new Map();
24429
+ const tagToPrefixMap = /* @__PURE__ */ new Map();
24430
+ for (const [tag, prefix] of tagUsageCollector.tagToPrefix) {
24431
+ if (tag.startsWith("_")) {
24432
+ continue;
24433
+ }
24434
+ if (tagToPrefixMap.has(tag)) {
24435
+ const existingPrefix = tagToPrefixMap.get(tag);
24436
+ if (existingPrefix !== prefix) {
24437
+ debugContext("extractAllNamespaceMappings", `Tag "${tag}" encontrado en m\xFAltiples prefijos: "${existingPrefix}" y "${prefix}", usando "${prefix}"`);
24438
+ }
24439
+ }
24440
+ tagToPrefixMap.set(tag, prefix);
24441
+ if (!prefixToTags.has(prefix)) {
24442
+ prefixToTags.set(prefix, /* @__PURE__ */ new Set());
24443
+ }
24444
+ prefixToTags.get(prefix).add(tag);
24445
+ }
24446
+ const allTagsAdded = /* @__PURE__ */ new Set();
24447
+ for (const [prefix, tagsSet] of prefixToTags) {
24448
+ const tagsArray = Array.from(tagsSet).filter((tag) => {
24449
+ if (allTagsAdded.has(tag)) {
24450
+ return false;
24451
+ }
24452
+ allTagsAdded.add(tag);
24453
+ return true;
24454
+ });
24455
+ if (tagsArray.length > 0) {
24456
+ newTagsMapping[prefix] = tagsArray;
24457
+ debugContext("extractAllNamespaceMappings", `Agregando ${tagsArray.length} tag(s) al namespace "${prefix}" basado en uso real en XML: ${tagsArray.join(", ")}`);
24458
+ }
24459
+ }
24460
+ for (const [prefix, namespaceUri] of tagUsageCollector.prefixToNamespace) {
24461
+ if (!prefixesMapping[prefix]) {
24462
+ prefixesMapping[prefix] = namespaceUri;
24463
+ debugContext("extractAllNamespaceMappings", `Registrando namespace para prefijo "${prefix}": "${namespaceUri}"`);
24464
+ }
24465
+ }
24466
+ for (const prefix of Object.keys(prefixesMapping)) {
24467
+ if (!newTagsMapping[prefix]) {
24468
+ newTagsMapping[prefix] = [];
24469
+ }
24470
+ }
24471
+ Object.assign(tagsMapping, newTagsMapping);
24472
+ return {
24473
+ tagsMapping,
24474
+ prefixesMapping,
24475
+ typesMapping
24476
+ };
24477
+ }
24478
+ function getNamespacePrefix(namespacesTypeMapping, baseNamespacePrefix, key, parentKey, elementObject, prefixesMapping) {
24479
+ if (elementObject && typeof elementObject === "object") {
24480
+ const elemNs = elementObject.$namespace;
24481
+ if (typeof elemNs === "string") {
24482
+ debugContext("getNamespacePrefix", `Elemento "${key}" tiene namespace: "${elemNs}"`);
24483
+ if (prefixesMapping) {
24484
+ for (const [prefix, uri] of Object.entries(prefixesMapping)) {
24485
+ if (uri === elemNs) {
24486
+ debugContext("getNamespacePrefix", `Encontrado prefijo "${prefix}" para namespace "${elemNs}"`);
24487
+ return prefix;
24488
+ }
24489
+ }
24490
+ debugContext("getNamespacePrefix", `No se encontr\xF3 prefijo en prefixesMapping para "${elemNs}", usando extractNamespacePrefix`);
24491
+ }
24492
+ const extractedPrefix = extractNamespacePrefix(elemNs);
24493
+ debugContext("getNamespacePrefix", `Usando prefijo extra\xEDdo: "${extractedPrefix}" para namespace "${elemNs}"`);
24494
+ return extractedPrefix;
24495
+ } else {
24496
+ if ("type" in elementObject && typeof elementObject.type === "object" && elementObject.type !== null) {
24497
+ const typeNs = elementObject.type.$namespace;
24498
+ if (typeof typeNs === "string") {
24499
+ debugContext("getNamespacePrefix", `Elemento "${key}" no tiene $namespace, pero su tipo tiene: "${typeNs}"`);
24500
+ if (prefixesMapping) {
24501
+ for (const [prefix, uri] of Object.entries(prefixesMapping)) {
24502
+ if (uri === typeNs) {
24503
+ debugContext("getNamespacePrefix", `Encontrado prefijo "${prefix}" para namespace del tipo "${typeNs}"`);
24504
+ return prefix;
24505
+ }
24506
+ }
24507
+ }
24508
+ const extractedPrefix = extractNamespacePrefix(typeNs);
24509
+ debugContext("getNamespacePrefix", `Usando prefijo extra\xEDdo del tipo: "${extractedPrefix}" para namespace "${typeNs}"`);
24510
+ return extractedPrefix;
24511
+ }
24512
+ }
24513
+ }
24514
+ }
24515
+ if (parentKey !== null) {
24516
+ return namespacesTypeMapping[parentKey]?.prefix ?? baseNamespacePrefix;
24517
+ }
24518
+ return namespacesTypeMapping[key]?.prefix ?? baseNamespacePrefix;
24519
+ }
24520
+ function shouldHavePrefix(elementObject) {
24521
+ if (!elementObject || typeof elementObject !== "object") return false;
24522
+ if ("$qualified" in elementObject && typeof elementObject.$qualified === "boolean") {
24523
+ return elementObject.$qualified;
24524
+ }
24525
+ if ("type" in elementObject && typeof elementObject.type === "object" && elementObject.type !== null) {
24526
+ const typeObj = elementObject.type;
24527
+ if ("$qualified" in typeObj && typeof typeObj.$qualified === "boolean") {
24528
+ return typeObj.$qualified;
24529
+ }
24530
+ }
24531
+ return false;
24532
+ }
24533
+
24385
24534
  // src/codegen/data-preparer/simple-types.ts
24386
24535
  function prepareSimpleTypesData(typeObject, xmlSchemaUri) {
24387
24536
  return Object.keys(typeObject).filter((key) => {
@@ -24647,21 +24796,42 @@ function preparePropsInterfaceData(typeName, typeObject, allTypesForInterfaces,
24647
24796
  }
24648
24797
  if (nestedReferencedElement && typeof nestedReferencedElement === "object") {
24649
24798
  debugContext("preparePropsInterfaceData", `Expandiendo contenido del tipo anidado`);
24650
- return preparePropsInterfaceData(typeName, nestedReferencedElement, allTypesForInterfaces, schemaObject, allComplexTypes);
24799
+ const cleanedNestedElement = { ...nestedReferencedElement };
24800
+ Object.keys(cleanedNestedElement).forEach((key) => {
24801
+ if (key.startsWith("_")) {
24802
+ delete cleanedNestedElement[key];
24803
+ }
24804
+ });
24805
+ return preparePropsInterfaceData(typeName, cleanedNestedElement, allTypesForInterfaces, schemaObject, allComplexTypes);
24651
24806
  }
24652
24807
  }
24653
- return preparePropsInterfaceData(typeName, referencedElement, allTypesForInterfaces, schemaObject, allComplexTypes);
24808
+ const cleanedReferencedElement = { ...referencedElement };
24809
+ Object.keys(cleanedReferencedElement).forEach((key) => {
24810
+ if (key.startsWith("_")) {
24811
+ delete cleanedReferencedElement[key];
24812
+ }
24813
+ });
24814
+ return preparePropsInterfaceData(typeName, cleanedReferencedElement, allTypesForInterfaces, schemaObject, allComplexTypes);
24654
24815
  }
24655
24816
  }
24656
24817
  if (typeof typeValue === "object" && typeValue !== null) {
24657
- const typeKeys = getFilteredKeys(typeValue);
24818
+ const cleanedTypeValue = { ...typeValue };
24819
+ Object.keys(cleanedTypeValue).forEach((key) => {
24820
+ if (key.startsWith("_")) {
24821
+ delete cleanedTypeValue[key];
24822
+ }
24823
+ });
24824
+ const typeKeys = getFilteredKeys(cleanedTypeValue);
24658
24825
  if (typeKeys.length > 0) {
24659
- return preparePropsInterfaceData(typeName, typeValue, allTypesForInterfaces, schemaObject, allComplexTypes);
24826
+ return preparePropsInterfaceData(typeName, cleanedTypeValue, allTypesForInterfaces, schemaObject, allComplexTypes);
24660
24827
  }
24661
24828
  }
24662
24829
  }
24663
24830
  }
24664
- const properties = keys.map((key) => {
24831
+ const properties = keys.filter((key) => {
24832
+ const localName = extractLocalName(key);
24833
+ return !localName.startsWith("_");
24834
+ }).map((key) => {
24665
24835
  const localName = extractLocalName(key);
24666
24836
  const element = typeObject[key];
24667
24837
  let propertyType;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@karibulab/wsdl2tsx",
3
- "version": "0.17.2",
3
+ "version": "0.20.0",
4
4
  "description": "Generador de código TSX desde archivos WSDL",
5
5
  "main": "dist/index.js",
6
6
  "bin": "./dist/cli.js",
@@ -13,7 +13,7 @@
13
13
  "start": "node dist/cli.js"
14
14
  },
15
15
  "dependencies": {
16
- "@karibulab/wsdl2tsx-runtime": "0.17.2",
16
+ "@karibulab/wsdl2tsx-runtime": "0.20.0",
17
17
  "axios": "^1.7.9",
18
18
  "fast-xml-parser": "5.3.3",
19
19
  "handlebars": "4.7.8"