xml-model 1.2.0 → 1.3.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.
Files changed (131) hide show
  1. package/README.md +0 -1
  2. package/dist/_virtual/Reflect.js +8 -0
  3. package/dist/_virtual/Reflect2.js +5 -0
  4. package/{vite/dist → dist}/_virtual/_commonjsHelpers.js +10 -4
  5. package/dist/defaults.d.ts +1 -0
  6. package/dist/errors.d.ts +1 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/middleware.d.ts +1 -0
  9. package/dist/model/built-ins.d.ts +1 -0
  10. package/dist/model/index.d.ts +1 -0
  11. package/dist/model/index.js +1 -0
  12. package/dist/model/property.d.ts +1 -0
  13. package/dist/model/registry.d.ts +1 -0
  14. package/dist/model/types.d.ts +1 -0
  15. package/dist/node_modules/reflect-metadata/Reflect.js +867 -0
  16. package/dist/types.d.ts +1 -0
  17. package/dist/util/is-regexp.d.ts +1 -0
  18. package/dist/util/kebab-case.d.ts +1 -0
  19. package/dist/util/merge-maps.d.ts +1 -0
  20. package/dist/xml/index.d.ts +1 -0
  21. package/dist/xml/xml-js.d.ts +1 -0
  22. package/package.json +4 -4
  23. package/vite/dist/index.js +2 -3
  24. package/vite/dist/node_modules/typescript-rtti/dist.esm/common/format.js +105 -0
  25. package/vite/dist/node_modules/typescript-rtti/dist.esm/common/index.js +55 -0
  26. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/api-call-transformer.js +152 -0
  27. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/common/class-analyzer.js +83 -0
  28. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/common/compile-error.js +8 -0
  29. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/common/import-analyzer.js +89 -0
  30. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/common/interface-analyzer.js +58 -0
  31. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/common/visitor-base.js +93 -0
  32. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/declarations-emitter.js +31 -0
  33. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/encode-parameter.js +64 -0
  34. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/find-relative-path.js +41 -0
  35. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/flags.js +43 -0
  36. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/forward-ref.js +20 -0
  37. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/get-exports-for-symbol.js +64 -0
  38. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/index.js +130 -0
  39. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/legacy-decorator.js +10 -0
  40. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/legacy-type-encoder.js +82 -0
  41. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/literal-node.js +9 -0
  42. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/metadata-collector.js +56 -0
  43. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/metadata-decorator.js +80 -0
  44. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/metadata-emitter.js +425 -0
  45. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/metadata-encoder.js +212 -0
  46. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/rt-helper.js +96 -0
  47. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/rtti-visitor-base.js +28 -0
  48. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/serialize.js +31 -0
  49. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/type-encoder.js +76 -0
  50. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/type-literal.js +499 -0
  51. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/utils.js +906 -0
  52. package/vite/dist/node_modules/typescript-rtti/dist.esm/transformer/workarounds.js +7 -0
  53. package/vite/dist/src/class-names.test.d.ts +9 -0
  54. package/vite/dist/src/defaults.d.ts +15 -0
  55. package/vite/dist/src/errors.d.ts +24 -0
  56. package/vite/dist/src/index.d.ts +8 -0
  57. package/vite/dist/src/middleware.d.ts +10 -0
  58. package/vite/dist/src/model/built-ins.d.ts +3 -0
  59. package/vite/dist/src/model/index.d.ts +21 -0
  60. package/vite/dist/src/model/property.d.ts +6 -0
  61. package/vite/dist/src/model/registry.d.ts +9 -0
  62. package/vite/dist/src/model/types.d.ts +74 -0
  63. package/vite/dist/src/model.test.d.ts +2 -0
  64. package/vite/dist/src/types.d.ts +17 -0
  65. package/vite/dist/src/util/is-regexp.d.ts +12 -0
  66. package/vite/dist/src/util/kebab-case.d.ts +16 -0
  67. package/vite/dist/src/util/merge-maps.d.ts +2 -0
  68. package/vite/dist/src/xml/index.d.ts +33 -0
  69. package/vite/dist/src/xml/xml-js.d.ts +7 -0
  70. package/vite/dist/_virtual/_commonjs-dynamic-modules.js +0 -7
  71. package/vite/dist/_virtual/_typescript.js +0 -5
  72. package/vite/dist/_virtual/api-call-transformer.js +0 -5
  73. package/vite/dist/_virtual/class-analyzer.js +0 -5
  74. package/vite/dist/_virtual/compile-error.js +0 -5
  75. package/vite/dist/_virtual/declarations-emitter.js +0 -5
  76. package/vite/dist/_virtual/encode-parameter.js +0 -5
  77. package/vite/dist/_virtual/find-relative-path.js +0 -5
  78. package/vite/dist/_virtual/flags.js +0 -5
  79. package/vite/dist/_virtual/format.js +0 -5
  80. package/vite/dist/_virtual/forward-ref.js +0 -5
  81. package/vite/dist/_virtual/get-exports-for-symbol.js +0 -5
  82. package/vite/dist/_virtual/import-analyzer.js +0 -5
  83. package/vite/dist/_virtual/index.js +0 -8
  84. package/vite/dist/_virtual/index2.js +0 -5
  85. package/vite/dist/_virtual/index3.js +0 -5
  86. package/vite/dist/_virtual/interface-analyzer.js +0 -5
  87. package/vite/dist/_virtual/legacy-decorator.js +0 -5
  88. package/vite/dist/_virtual/legacy-type-encoder.js +0 -5
  89. package/vite/dist/_virtual/literal-node.js +0 -5
  90. package/vite/dist/_virtual/metadata-collector.js +0 -5
  91. package/vite/dist/_virtual/metadata-decorator.js +0 -5
  92. package/vite/dist/_virtual/metadata-emitter.js +0 -5
  93. package/vite/dist/_virtual/metadata-encoder.js +0 -5
  94. package/vite/dist/_virtual/rt-helper.js +0 -5
  95. package/vite/dist/_virtual/rtti-visitor-base.js +0 -5
  96. package/vite/dist/_virtual/serialize.js +0 -5
  97. package/vite/dist/_virtual/type-encoder.js +0 -5
  98. package/vite/dist/_virtual/type-literal.js +0 -5
  99. package/vite/dist/_virtual/utils.js +0 -5
  100. package/vite/dist/_virtual/visitor-base.js +0 -5
  101. package/vite/dist/_virtual/workarounds.js +0 -5
  102. package/vite/dist/index.d.ts +0 -28
  103. package/vite/dist/node_modules/typescript-rtti/dist/common/format.js +0 -69
  104. package/vite/dist/node_modules/typescript-rtti/dist/common/index.js +0 -34
  105. package/vite/dist/node_modules/typescript-rtti/dist/transformer/api-call-transformer.js +0 -197
  106. package/vite/dist/node_modules/typescript-rtti/dist/transformer/common/class-analyzer.js +0 -124
  107. package/vite/dist/node_modules/typescript-rtti/dist/transformer/common/compile-error.js +0 -18
  108. package/vite/dist/node_modules/typescript-rtti/dist/transformer/common/import-analyzer.js +0 -130
  109. package/vite/dist/node_modules/typescript-rtti/dist/transformer/common/interface-analyzer.js +0 -98
  110. package/vite/dist/node_modules/typescript-rtti/dist/transformer/common/visitor-base.js +0 -132
  111. package/vite/dist/node_modules/typescript-rtti/dist/transformer/declarations-emitter.js +0 -72
  112. package/vite/dist/node_modules/typescript-rtti/dist/transformer/encode-parameter.js +0 -110
  113. package/vite/dist/node_modules/typescript-rtti/dist/transformer/find-relative-path.js +0 -51
  114. package/vite/dist/node_modules/typescript-rtti/dist/transformer/flags.js +0 -59
  115. package/vite/dist/node_modules/typescript-rtti/dist/transformer/forward-ref.js +0 -35
  116. package/vite/dist/node_modules/typescript-rtti/dist/transformer/get-exports-for-symbol.js +0 -75
  117. package/vite/dist/node_modules/typescript-rtti/dist/transformer/index.js +0 -174
  118. package/vite/dist/node_modules/typescript-rtti/dist/transformer/legacy-decorator.js +0 -20
  119. package/vite/dist/node_modules/typescript-rtti/dist/transformer/legacy-type-encoder.js +0 -123
  120. package/vite/dist/node_modules/typescript-rtti/dist/transformer/literal-node.js +0 -19
  121. package/vite/dist/node_modules/typescript-rtti/dist/transformer/metadata-collector.js +0 -96
  122. package/vite/dist/node_modules/typescript-rtti/dist/transformer/metadata-decorator.js +0 -99
  123. package/vite/dist/node_modules/typescript-rtti/dist/transformer/metadata-emitter.js +0 -475
  124. package/vite/dist/node_modules/typescript-rtti/dist/transformer/metadata-encoder.js +0 -261
  125. package/vite/dist/node_modules/typescript-rtti/dist/transformer/rt-helper.js +0 -113
  126. package/vite/dist/node_modules/typescript-rtti/dist/transformer/rtti-visitor-base.js +0 -39
  127. package/vite/dist/node_modules/typescript-rtti/dist/transformer/serialize.js +0 -46
  128. package/vite/dist/node_modules/typescript-rtti/dist/transformer/type-encoder.js +0 -96
  129. package/vite/dist/node_modules/typescript-rtti/dist/transformer/type-literal.js +0 -546
  130. package/vite/dist/node_modules/typescript-rtti/dist/transformer/utils.js +0 -922
  131. package/vite/dist/node_modules/typescript-rtti/dist/transformer/workarounds.js +0 -16
@@ -0,0 +1,499 @@
1
+ import ts from "typescript";
2
+ import "../common/index.js";
3
+ import { findRelativePathToFile } from "./find-relative-path.js";
4
+ import { getPreferredExportForImport } from "./get-exports-for-symbol.js";
5
+ import { literalNode } from "./literal-node.js";
6
+ import { serialize } from "./serialize.js";
7
+ import { hasFlag, isFlagType, typeHasValue, getTypeLocality, serializeEntityNameAsExpression, isInterfaceType, propertyPrepend, optionalExportRef, isNodeJS, hasFilesystemAccess, fileExists } from "./utils.js";
8
+ import { forwardRef } from "./forward-ref.js";
9
+ import { encodeParameter } from "./encode-parameter.js";
10
+ import { createRequire } from "node:module";
11
+ import { T_VOID, T_ENUM, T_UNION, T_INTERSECTION, T_NULL, T_UNDEFINED, T_UNKNOWN, T_ANY, T_TRUE, T_FALSE, T_THIS, T_MAPPED, T_TUPLE, T_ARRAY, T_GENERIC, T_FUNCTION, T_OBJECT, F_OPTIONAL, T_STAND_IN } from "../common/format.js";
12
+ const require$1 = createRequire(import.meta.url);
13
+ function typeLiteral(encoder, type, typeNode, options) {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
15
+ let ctx = encoder.ctx;
16
+ let containingSourceFile = ctx.sourceFile;
17
+ let checker = ctx.checker;
18
+ let program = ctx.program;
19
+ if (!type)
20
+ return ts.factory.createIdentifier("Object");
21
+ if ((type.flags & ts.TypeFlags.String) !== 0) {
22
+ return ts.factory.createIdentifier("String");
23
+ } else if ((type.flags & ts.TypeFlags.Number) !== 0) {
24
+ return ts.factory.createIdentifier("Number");
25
+ } else if ((type.flags & ts.TypeFlags.Boolean) !== 0) {
26
+ return ts.factory.createIdentifier("Boolean");
27
+ } else if ((type.flags & ts.TypeFlags.Void) !== 0) {
28
+ return serialize({ TΦ: T_VOID });
29
+ } else if ((type.flags & ts.TypeFlags.BigInt) !== 0) {
30
+ return ts.factory.createIdentifier("BigInt");
31
+ } else if (hasFlag(type.flags, ts.TypeFlags.EnumLiteral)) {
32
+ if (type.symbol && hasFlag(type.symbol.flags, ts.SymbolFlags.ConstEnum)) {
33
+ let unionType = type;
34
+ return serialize({
35
+ TΦ: T_ENUM,
36
+ n: (_a = type.symbol.name) !== null && _a !== void 0 ? _a : type.aliasSymbol.name,
37
+ v: unionType.types.reduce((s, t) => (s[t.symbol.name] = t.value, s), {})
38
+ });
39
+ }
40
+ return serialize({
41
+ TΦ: T_ENUM,
42
+ n: (_c = (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : (_d = type.aliasSymbol) === null || _d === void 0 ? void 0 : _d.name,
43
+ e: literalNode(referToTypeWithIdentifier(encoder, type, typeNode, options))
44
+ });
45
+ } else if (type.isUnion()) {
46
+ return serialize({
47
+ TΦ: T_UNION,
48
+ t: type.types.map((x) => literalNode(encoder.referToType(x)))
49
+ });
50
+ } else if (type.isIntersection()) {
51
+ return serialize({
52
+ TΦ: T_INTERSECTION,
53
+ t: type.types.map((x) => literalNode(encoder.referToType(x)))
54
+ });
55
+ } else if (hasFlag(type.flags, ts.TypeFlags.Null)) {
56
+ return serialize({ TΦ: T_NULL });
57
+ } else if (hasFlag(type.flags, ts.TypeFlags.Undefined)) {
58
+ return serialize({ TΦ: T_UNDEFINED });
59
+ } else if (hasFlag(type.flags, ts.TypeFlags.Unknown)) {
60
+ return serialize({ TΦ: T_UNKNOWN });
61
+ } else if (hasFlag(type.flags, ts.TypeFlags.Any)) {
62
+ return serialize({ TΦ: T_ANY });
63
+ } else if (isFlagType(type, ts.TypeFlags.Literal)) {
64
+ if (type["intrinsicName"] === "true")
65
+ return serialize({ TΦ: T_TRUE });
66
+ else if (type["intrinsicName"] === "false")
67
+ return serialize({ TΦ: T_FALSE });
68
+ return serialize(type.value);
69
+ } else if (hasFlag(type.flags, ts.TypeFlags.TypeVariable)) {
70
+ if (type["isThisType"])
71
+ return serialize({ TΦ: T_THIS });
72
+ return ts.factory.createIdentifier("Object");
73
+ } else if ((type.flags & ts.TypeFlags.Object) !== 0) {
74
+ let objectType = type;
75
+ let isMapped = hasFlag(objectType.objectFlags, ts.ObjectFlags.Mapped);
76
+ let isInstantiated = hasFlag(objectType.objectFlags, ts.ObjectFlags.Instantiated);
77
+ if (isMapped) {
78
+ if (isInstantiated) {
79
+ let typeRef = type;
80
+ return serialize({
81
+ TΦ: T_MAPPED,
82
+ t: literalNode(encoder.referToType(typeRef.typeParameter)),
83
+ p: (_f = (_e = typeRef.aliasTypeArguments) === null || _e === void 0 ? void 0 : _e.map((t) => literalNode(encoder.referToType(t)))) !== null && _f !== void 0 ? _f : [],
84
+ m: serializeObjectMembers(typeRef, typeNode, encoder)
85
+ });
86
+ }
87
+ } else if ((objectType.objectFlags & ts.ObjectFlags.Reference) !== 0) {
88
+ let typeRef = type;
89
+ if (typeRef.target !== typeRef) {
90
+ if ((typeRef.target.objectFlags & ts.ObjectFlags.Tuple) !== 0) {
91
+ let tupleTypeRef = typeRef;
92
+ let tupleType = tupleTypeRef.target;
93
+ return serialize({
94
+ TΦ: T_TUPLE,
95
+ e: typeRef.typeArguments.map((e, i) => {
96
+ if (tupleType.labeledElementDeclarations) {
97
+ return {
98
+ n: tupleType.labeledElementDeclarations[i].name.getText(),
99
+ t: literalNode(encoder.referToType(e))
100
+ };
101
+ } else {
102
+ return {
103
+ t: literalNode(encoder.referToType(e))
104
+ };
105
+ }
106
+ })
107
+ });
108
+ }
109
+ if (!typeRef.symbol)
110
+ debugger;
111
+ if (!typeRef.target.symbol)
112
+ debugger;
113
+ if (typeRef.target.symbol.name === "Array" && typeRef.typeArguments.length === 1) {
114
+ return serialize({
115
+ TΦ: T_ARRAY,
116
+ e: literalNode(encoder.referToType(typeRef.typeArguments[0]))
117
+ });
118
+ }
119
+ try {
120
+ return serialize({
121
+ TΦ: T_GENERIC,
122
+ t: literalNode(encoder.referToType(typeRef.target)),
123
+ p: ((_g = typeRef.typeArguments) !== null && _g !== void 0 ? _g : []).map((x) => literalNode(encoder.referToType(x)))
124
+ });
125
+ } catch (e) {
126
+ console.error(`RTTI: Error while serializing type '${typeRef.symbol.name}': ${e.message}`);
127
+ console.error(e);
128
+ throw e;
129
+ }
130
+ }
131
+ }
132
+ if (!type.symbol && typeNode && ts.isArrayTypeNode(typeNode)) {
133
+ let typeRef = checker.getTypeAtLocation(typeNode.elementType);
134
+ return serialize({
135
+ TΦ: T_ARRAY,
136
+ e: literalNode(encoder.referToType(typeRef))
137
+ });
138
+ }
139
+ if (!type.symbol) {
140
+ if (typeNode) {
141
+ console.warn(`RTTI: Could not resolve symbol for type node '${typeNode.getText()}'.`);
142
+ } else {
143
+ if (program.getCompilerOptions().noLib) {
144
+ console.warn(`RTTI: ${containingSourceFile.fileName}: ${(_h = ctx.locationHint) !== null && _h !== void 0 ? _h : "unknown location"}: Missing symbol for type with flags=${type.flags} without type node! 'Object' will be emitted for the type instead.`);
145
+ if (!ctx["__warnedNoLib"]) {
146
+ console.warn(`RTTI: ^-- You are compiling with noLib enabled, which may interfere with inferred array types. You may be able to work around this issue by explicitly declaring the array type instead of relying on inference. This notice is shown only once.`);
147
+ ctx["__warnedNoLib"] = true;
148
+ }
149
+ } else {
150
+ console.warn(`RTTI: ${containingSourceFile.fileName}: ${(_j = ctx.locationHint) !== null && _j !== void 0 ? _j : "unknown location"}: Missing symbol for type with flags=${type.flags} without type node! 'Object' will be emitted as the type instead. [please report]`);
151
+ }
152
+ }
153
+ }
154
+ let isDeclaredFunctionType = typeNode && ts.isFunctionTypeNode(typeNode);
155
+ if (isDeclaredFunctionType || (((_k = type.symbol) === null || _k === void 0 ? void 0 : _k.flags) & ts.SymbolFlags.Function) !== 0) {
156
+ let signatures = type.getCallSignatures();
157
+ if (signatures.length > 1) {
158
+ console.warn(`RTTI: ${containingSourceFile.fileName}: ${(_l = ctx.locationHint) !== null && _l !== void 0 ? _l : "unknown location"}: Function type had multiple call signatures, emitted type will only include thefirst one. We could use an isolated reproduction of this [please report]`);
159
+ }
160
+ if (signatures.length >= 1) {
161
+ let signature = signatures[0];
162
+ let returnType = signature.getReturnType();
163
+ let parameters = signature.getParameters();
164
+ let flags = "";
165
+ let missingParamDecls = false;
166
+ return serialize({
167
+ TΦ: T_FUNCTION,
168
+ r: literalNode(encoder.referToType(returnType)),
169
+ p: parameters.map((p) => {
170
+ var _a2;
171
+ let decl = p.valueDeclaration;
172
+ if (decl && ts.isParameter(decl)) {
173
+ return encodeParameter(encoder, decl);
174
+ } else {
175
+ if (!missingParamDecls) {
176
+ missingParamDecls = true;
177
+ console.warn(`RTTI: ${containingSourceFile.fileName}: ${(_a2 = ctx.locationHint) !== null && _a2 !== void 0 ? _a2 : "unknown location"}: Could not resolve declaration of parameter for function type. Initializer and flags for these parameters will be unavailable. [please report]`);
178
+ }
179
+ return {
180
+ n: p.name,
181
+ t: literalNode(forwardRef(encoder.referToType(checker.getTypeOfSymbolAtLocation(p, typeNode !== null && typeNode !== void 0 ? typeNode : encoder.ctx.currentTopStatement)))),
182
+ v: void 0,
183
+ f: ""
184
+ // cannot determine flags without a ParameterDeclaration
185
+ };
186
+ }
187
+ }),
188
+ f: flags
189
+ });
190
+ }
191
+ return ts.factory.createIdentifier(`Function`);
192
+ } else if (type.isClassOrInterface()) {
193
+ return referToTypeWithIdentifier(encoder, type, typeNode, options);
194
+ }
195
+ if (hasFlag(type.flags, ts.TypeFlags.StructuredType)) {
196
+ return structuredTypeLiteral(encoder, type, typeNode);
197
+ }
198
+ return ts.factory.createIdentifier("Object");
199
+ }
200
+ return ts.factory.createIdentifier("Object");
201
+ }
202
+ function structuredTypeLiteral(encoder, type, typeNode, name) {
203
+ return serialize({
204
+ TΦ: T_OBJECT,
205
+ n: name,
206
+ m: serializeObjectMembers(type, typeNode, encoder)
207
+ });
208
+ }
209
+ function serializeObjectMembers(type, typeNode, encoder) {
210
+ let members = [];
211
+ let props = type.getProperties();
212
+ for (let prop of props) {
213
+ let memberType = encoder.ctx.checker.getTypeOfSymbolAtLocation(prop, typeNode !== null && typeNode !== void 0 ? typeNode : encoder.ctx.currentTopStatement);
214
+ members.push({
215
+ n: prop.name,
216
+ f: `${hasFlag(prop.flags, ts.SymbolFlags.Optional) ? F_OPTIONAL : ""}`,
217
+ t: literalNode(encoder.referToType(memberType))
218
+ });
219
+ }
220
+ return members;
221
+ }
222
+ function referToTypeWithIdentifier(encoder, type, typeNode, options) {
223
+ var _a, _b, _c;
224
+ let ctx = encoder.ctx;
225
+ let program = ctx.program;
226
+ let sourceFile = (_b = (_a = type.symbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getSourceFile();
227
+ if (!sourceFile) {
228
+ return ts.factory.createIdentifier("Object");
229
+ }
230
+ if (!type.symbol)
231
+ return ts.factory.createIdentifier("Object");
232
+ if (program.isSourceFileDefaultLibrary(sourceFile) && !typeHasValue(type))
233
+ return ts.factory.createIdentifier(`Object`);
234
+ if (getTypeLocality(ctx, type, typeNode) === "imported")
235
+ return referToImportedTypeWithIdentifier(encoder, type, typeNode, (_c = options === null || options === void 0 ? void 0 : options.hoistImportsInCommonJS) !== null && _c !== void 0 ? _c : false);
236
+ else
237
+ return referToLocalTypeWithIdentifier(encoder, type);
238
+ }
239
+ function referToLocalTypeWithIdentifier(encoder, type) {
240
+ const ctx = encoder.ctx;
241
+ const checker = ctx.checker;
242
+ const containingSourceFile = ctx.sourceFile;
243
+ let expr;
244
+ if (typeHasValue(type)) {
245
+ let entityName = checker.symbolToEntityName(type.symbol, ts.SymbolFlags.Class, void 0, void 0);
246
+ if (!entityName) {
247
+ return serialize({
248
+ TΦ: T_STAND_IN,
249
+ name: void 0,
250
+ note: `(anonymous class)`
251
+ });
252
+ }
253
+ expr = serializeEntityNameAsExpression(entityName, containingSourceFile);
254
+ } else {
255
+ let symbolName = `IΦ${type.symbol.name}`;
256
+ expr = ts.factory.createIdentifier(symbolName);
257
+ }
258
+ return expr;
259
+ }
260
+ function getImportedPathForSymbol(ctx, symbol, typeNode) {
261
+ var _a, _b, _c, _d, _e;
262
+ const checker = ctx.checker;
263
+ if (!typeNode)
264
+ return [void 0, symbol, void 0];
265
+ let localSymbol;
266
+ if (ts.isExpressionWithTypeArguments(typeNode)) {
267
+ localSymbol = checker.getSymbolAtLocation(typeNode.expression);
268
+ } else if (ts.isTypeReferenceNode(typeNode)) {
269
+ let typeName = typeNode.typeName;
270
+ while (ts.isQualifiedName(typeName))
271
+ typeName = typeName.left;
272
+ localSymbol = checker.getSymbolAtLocation(typeName);
273
+ } else {
274
+ return [void 0, symbol, void 0];
275
+ }
276
+ let localDecl = (_a = localSymbol === null || localSymbol === void 0 ? void 0 : localSymbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
277
+ if (!localDecl)
278
+ return [void 0, symbol, void 0];
279
+ let specifier;
280
+ let typeOnly = false;
281
+ if (ts.isImportClause(localDecl)) {
282
+ specifier = (_b = localDecl.parent) === null || _b === void 0 ? void 0 : _b.moduleSpecifier;
283
+ symbol = localSymbol;
284
+ typeOnly = ts.isTypeOnlyImportOrExportDeclaration(localDecl);
285
+ } else if (ts.isImportSpecifier(localDecl)) {
286
+ specifier = (_e = (_d = (_c = localDecl.parent) === null || _c === void 0 ? void 0 : _c.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.moduleSpecifier;
287
+ symbol = localSymbol;
288
+ typeOnly = ts.isTypeOnlyImportOrExportDeclaration(localDecl);
289
+ } else if (ts.isNamespaceImport(localDecl)) {
290
+ specifier = localDecl.parent.parent.moduleSpecifier;
291
+ typeOnly = ts.isTypeOnlyImportOrExportDeclaration(localDecl);
292
+ }
293
+ if (specifier)
294
+ return [specifier.text, symbol, typeOnly];
295
+ return [void 0, symbol, void 0];
296
+ }
297
+ function referToImportedTypeWithIdentifier(encoder, type, typeNode, hoistImportsInCommonJS) {
298
+ const ctx = encoder.ctx;
299
+ const checker = ctx.checker;
300
+ const program = ctx.program;
301
+ const containingSourceFile = ctx.sourceFile;
302
+ const importMap = ctx.importMap;
303
+ const isCommonJS = program.getCompilerOptions().module === ts.ModuleKind.CommonJS;
304
+ let [importPath, symbol, typeOnly] = findImportableSymbolForType(ctx, type, typeNode);
305
+ if (typeOnly)
306
+ return structuredTypeLiteral(encoder, type, typeNode, symbol.name);
307
+ if (!importPath)
308
+ return ts.factory.createIdentifier(`Object`);
309
+ if (!symbol || isExportedAsDefault(checker, symbol)) {
310
+ let defaultName = isInterfaceType(type) ? `IΦdefault` : "default";
311
+ if (isCommonJS && !hoistImportsInCommonJS) {
312
+ return ts.factory.createPropertyAccessExpression(ts.factory.createCallExpression(ts.factory.createIdentifier("require"), [], [
313
+ ts.factory.createStringLiteral(importPath)
314
+ ]), defaultName);
315
+ } else {
316
+ let impo = importMap.get(`*default:${importPath}`);
317
+ if (!impo) {
318
+ importMap.set(`*default:${importPath}`, impo = {
319
+ importDeclaration: ctx.currentTopStatement,
320
+ isDefault: defaultName === "default",
321
+ isNamespace: defaultName !== "default",
322
+ localName: `LΦ_${ctx.freeImportReference++}`,
323
+ modulePath: importPath,
324
+ name: `*${defaultName}:${importPath}`,
325
+ refName: "",
326
+ referenced: true
327
+ });
328
+ }
329
+ if (defaultName === "default") {
330
+ return ts.factory.createIdentifier(impo.localName);
331
+ } else {
332
+ return ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier(impo.localName), defaultName);
333
+ }
334
+ }
335
+ } else {
336
+ let expr;
337
+ let exportName;
338
+ if (typeHasValue(type)) {
339
+ let entityName = checker.symbolToEntityName(symbol, ts.SymbolFlags.Class, void 0, void 0);
340
+ expr = serializeEntityNameAsExpression(entityName, containingSourceFile);
341
+ } else {
342
+ exportName = `IΦ${type.symbol.name}`;
343
+ expr = ts.factory.createIdentifier(exportName);
344
+ }
345
+ if (isCommonJS && !hoistImportsInCommonJS) {
346
+ return propertyPrepend(ts.factory.createCallExpression(ts.factory.createIdentifier("require"), [], [ts.factory.createStringLiteral(importPath)]), expr);
347
+ } else {
348
+ let impo = ctx.importMap.get(`*:${importPath}`);
349
+ if (!impo) {
350
+ ctx.importMap.set(`*:${importPath}`, impo = {
351
+ importDeclaration: ctx.currentTopStatement,
352
+ isDefault: false,
353
+ isNamespace: true,
354
+ localName: `LΦ_${ctx.freeImportReference++}`,
355
+ modulePath: importPath,
356
+ name: `*:${importPath}`,
357
+ refName: "",
358
+ referenced: true
359
+ });
360
+ }
361
+ if (!isCommonJS) {
362
+ return optionalExportRef(ts.factory.createIdentifier(impo.localName), expr);
363
+ } else {
364
+ return propertyPrepend(ts.factory.createIdentifier(impo.localName), expr);
365
+ }
366
+ }
367
+ }
368
+ }
369
+ function findImportableSymbolForType(ctx, type, typeNode) {
370
+ let symbol = type.symbol;
371
+ let importPath;
372
+ let typeOnly = false;
373
+ [importPath, symbol, typeOnly] = getImportedPathForSymbol(ctx, symbol, typeNode);
374
+ if (!importPath) {
375
+ [importPath, symbol] = inferImportPath(ctx, type, symbol);
376
+ typeOnly = false;
377
+ }
378
+ return [importPath, symbol, typeOnly];
379
+ }
380
+ function inferImportPath(ctx, type, symbol) {
381
+ var _a, _b;
382
+ const program = ctx.program;
383
+ const containingSourceFile = ctx.sourceFile;
384
+ const sourceFile = (_b = (_a = type.symbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getSourceFile();
385
+ const isCommonJS = program.getCompilerOptions().module === ts.ModuleKind.CommonJS;
386
+ let destFile = sourceFile.fileName;
387
+ let preferredExport = getPreferredExportForImport(program, containingSourceFile, symbol);
388
+ if (preferredExport) {
389
+ destFile = preferredExport.sourceFile.fileName;
390
+ symbol = preferredExport.symbol;
391
+ }
392
+ if (isCommonJS && isNodeJS()) {
393
+ if (destFile.endsWith("/index.d.ts"))
394
+ destFile = destFile.replace(/\/index\.d\.ts$/, "");
395
+ else if (destFile.endsWith("/index.js"))
396
+ destFile = destFile.replace(/\/index\.js$/, "");
397
+ else if (destFile.endsWith("/index.ts"))
398
+ destFile = destFile.replace(/\/index\.ts$/, "");
399
+ }
400
+ if (destFile.endsWith(".d.ts") && hasFilesystemAccess()) {
401
+ if (!fileExists(destFile.replace(/\.d\.ts$/, ".js"))) {
402
+ console.warn(`RTTI: warning: Cannot import symbol '${symbol.name}' from declaration file '${destFile}' because there is no corresponding Javascript file alongside the declaration file! Refusing to emit type references for this symbol.`);
403
+ return [null, symbol];
404
+ }
405
+ }
406
+ if (destFile.endsWith(".d.ts"))
407
+ destFile = destFile.replace(/\.d\.ts$/, "");
408
+ else if (destFile.endsWith(".ts"))
409
+ destFile = destFile.replace(/\.ts$/, ".js");
410
+ let relativePath = findRelativePathToFile(ctx.sourceFile.fileName, destFile);
411
+ let pathParts = relativePath.split("/");
412
+ let nodeModulesIndex = pathParts.indexOf("node_modules");
413
+ if (nodeModulesIndex >= 0) {
414
+ let originalPath = relativePath;
415
+ let pathToNodeModules = pathParts.slice(0, nodeModulesIndex + 1).join("/");
416
+ let packagePath = pathParts.slice(nodeModulesIndex + 1);
417
+ relativePath = packagePath.join("/");
418
+ if (packagePath.length > 0) {
419
+ let pathIntoPackageParts = packagePath.slice();
420
+ let packageName = pathIntoPackageParts.shift();
421
+ if (packageName.startsWith("@")) {
422
+ packageName += "/" + pathIntoPackageParts.shift();
423
+ }
424
+ if (isNodeJS()) {
425
+ let requireX = function(path2) {
426
+ return requireN(path2);
427
+ };
428
+ let requireN = require$1;
429
+ const fs = requireX("fs");
430
+ const path = requireX("path");
431
+ let pkgJsonPath = path.resolve(path.dirname(ctx.sourceFile.fileName), pathToNodeModules, packageName, "package.json");
432
+ if (!pkgJsonPath) {
433
+ throw new Error(`Failed to resolve path for package.json [file='${ctx.sourceFile.fileName}', node_modules='${pathToNodeModules}', packageName='${packageName}']`);
434
+ debugger;
435
+ }
436
+ let pkgJson;
437
+ if (ctx.pkgJsonMap.has(pkgJsonPath)) {
438
+ pkgJson = ctx.pkgJsonMap.get(pkgJsonPath);
439
+ } else {
440
+ try {
441
+ if (fs.existsSync(pkgJsonPath)) {
442
+ let buf = fs.readFileSync(pkgJsonPath);
443
+ let json = JSON.parse(buf.toString("utf-8"));
444
+ pkgJson = json;
445
+ ctx.pkgJsonMap.set(pkgJsonPath, pkgJson);
446
+ }
447
+ } catch (e) {
448
+ console.error(`RTTI: Caught error while reading ${pkgJsonPath}: ${e.message}`);
449
+ console.error(e);
450
+ console.error(`RTTI: Proceeding with potentially non-optimal import path '${relativePath}'`);
451
+ }
452
+ }
453
+ if (pkgJson) {
454
+ let absPathToNodeModules = path.resolve(path.dirname(ctx.sourceFile.fileName), pathToNodeModules);
455
+ let entrypoints = [pkgJson.main, pkgJson.module, pkgJson.browser].filter((x) => x);
456
+ for (let entrypoint of entrypoints) {
457
+ if (typeof entrypoint !== "string") {
458
+ continue;
459
+ }
460
+ let entrypointFile = path.resolve(path.dirname(pkgJsonPath), entrypoint);
461
+ let absolutePath = path.resolve(absPathToNodeModules, relativePath);
462
+ if (entrypointFile === absolutePath) {
463
+ relativePath = packageName;
464
+ break;
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ let modulePath;
472
+ if (relativePath) {
473
+ modulePath = relativePath;
474
+ } else {
475
+ if (globalThis.RTTI_TRACE)
476
+ console.warn(`RTTI: Cannot determine relative path from '${ctx.sourceFile.fileName}' to '${sourceFile.fileName}'! Using absolute path!`);
477
+ modulePath = destFile;
478
+ }
479
+ if (modulePath.startsWith("@types/")) {
480
+ modulePath = modulePath.replace(/^@types\//, "").replace(/\/.*/, "");
481
+ }
482
+ return [modulePath, symbol];
483
+ }
484
+ function dealias(checker, symbol) {
485
+ if (!symbol)
486
+ return void 0;
487
+ if (hasFlag(symbol.flags, ts.SymbolFlags.Alias))
488
+ return checker.getImmediateAliasedSymbol(symbol);
489
+ return symbol;
490
+ }
491
+ function isExportedAsDefault(checker, symbol) {
492
+ var _a;
493
+ return ((_a = dealias(checker, symbol)) === null || _a === void 0 ? void 0 : _a.name) === "default";
494
+ }
495
+ export {
496
+ structuredTypeLiteral,
497
+ typeLiteral
498
+ };
499
+ //# sourceMappingURL=type-literal.js.map