typia 4.0.0-dev.20230520 → 4.0.0-dev.20230527

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 (220) hide show
  1. package/lib/transform.js +1 -1
  2. package/lib/transform.js.map +1 -1
  3. package/package.json +1 -1
  4. package/src/CustomValidatorMap.ts +126 -126
  5. package/src/IRandomGenerator.ts +33 -33
  6. package/src/IValidation.ts +21 -21
  7. package/src/Primitive.ts +123 -123
  8. package/src/TypeGuardError.ts +36 -36
  9. package/src/executable/TypiaGenerateWizard.ts +85 -85
  10. package/src/executable/TypiaSetupWizard.ts +133 -133
  11. package/src/executable/setup/ArgumentParser.ts +45 -45
  12. package/src/executable/setup/CommandExecutor.ts +8 -8
  13. package/src/executable/setup/FileRetriever.ts +22 -22
  14. package/src/executable/setup/PackageManager.ts +71 -71
  15. package/src/executable/setup/PluginConfigurator.ts +70 -70
  16. package/src/executable/typia.ts +52 -52
  17. package/src/factories/CommentFactory.ts +14 -14
  18. package/src/factories/ExpressionFactory.ts +77 -77
  19. package/src/factories/IdentifierFactory.ts +62 -62
  20. package/src/factories/LiteralFactory.ts +57 -57
  21. package/src/factories/MetadataCollection.ts +123 -123
  22. package/src/factories/MetadataFactory.ts +53 -53
  23. package/src/factories/MetadataTagFactory.ts +295 -295
  24. package/src/factories/StatementFactory.ts +20 -20
  25. package/src/factories/TemplateFactory.ts +64 -64
  26. package/src/factories/TypeFactory.ts +145 -145
  27. package/src/factories/ValueFactory.ts +15 -15
  28. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  29. package/src/factories/internal/metadata/emplace_metadata_object.ts +152 -152
  30. package/src/factories/internal/metadata/explore_metadata.ts +93 -93
  31. package/src/factories/internal/metadata/iterate_metadata.ts +63 -63
  32. package/src/factories/internal/metadata/iterate_metadata_array.ts +32 -32
  33. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  34. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  35. package/src/factories/internal/metadata/iterate_metadata_constant.ts +62 -62
  36. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  37. package/src/factories/internal/metadata/iterate_metadata_native.ts +217 -217
  38. package/src/factories/internal/metadata/iterate_metadata_object.ts +51 -51
  39. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +30 -30
  40. package/src/factories/internal/metadata/iterate_metadata_set.ts +36 -36
  41. package/src/factories/internal/metadata/iterate_metadata_template.ts +40 -40
  42. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +51 -51
  43. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  44. package/src/functional/$any.ts +2 -2
  45. package/src/functional/$dictionary.ts +25 -25
  46. package/src/functional/$every.ts +11 -11
  47. package/src/functional/$guard.ts +35 -35
  48. package/src/functional/$is_between.ts +2 -2
  49. package/src/functional/$is_custom.ts +14 -14
  50. package/src/functional/$is_date.ts +3 -3
  51. package/src/functional/$is_datetime.ts +2 -2
  52. package/src/functional/$is_email.ts +4 -4
  53. package/src/functional/$is_ipv4.ts +4 -4
  54. package/src/functional/$is_ipv6.ts +4 -4
  55. package/src/functional/$is_url.ts +4 -4
  56. package/src/functional/$is_uuid.ts +4 -4
  57. package/src/functional/$join.ts +46 -46
  58. package/src/functional/$number.ts +12 -12
  59. package/src/functional/$report.ts +15 -15
  60. package/src/functional/$rest.ts +3 -3
  61. package/src/functional/$string.ts +37 -37
  62. package/src/functional/$tail.ts +5 -5
  63. package/src/functional/Namespace.ts +127 -127
  64. package/src/index.ts +4 -4
  65. package/src/metadata/ICommentTag.ts +4 -4
  66. package/src/metadata/IJsDocTagInfo.ts +10 -10
  67. package/src/metadata/IMetadata.ts +26 -26
  68. package/src/metadata/IMetadataApplication.ts +7 -7
  69. package/src/metadata/IMetadataConstant.ts +16 -16
  70. package/src/metadata/IMetadataEntry.ts +6 -6
  71. package/src/metadata/IMetadataObject.ts +29 -29
  72. package/src/metadata/IMetadataProperty.ts +11 -11
  73. package/src/metadata/IMetadataTag.ts +105 -105
  74. package/src/metadata/Metadata.ts +539 -539
  75. package/src/metadata/MetadataConstant.ts +3 -3
  76. package/src/metadata/MetadataObject.ts +127 -127
  77. package/src/metadata/MetadataProperty.ts +64 -64
  78. package/src/module.ts +2038 -2038
  79. package/src/programmers/ApplicationProgrammer.ts +48 -48
  80. package/src/programmers/AssertCloneProgrammer.ts +68 -68
  81. package/src/programmers/AssertParseProgrammer.ts +66 -66
  82. package/src/programmers/AssertProgrammer.ts +274 -274
  83. package/src/programmers/AssertPruneProgrammer.ts +73 -73
  84. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  85. package/src/programmers/CheckerProgrammer.ts +897 -897
  86. package/src/programmers/CloneProgrammer.ts +387 -387
  87. package/src/programmers/FeatureProgrammer.ts +510 -510
  88. package/src/programmers/IsCloneProgrammer.ts +79 -79
  89. package/src/programmers/IsParseProgrammer.ts +72 -72
  90. package/src/programmers/IsProgrammer.ts +223 -223
  91. package/src/programmers/IsPruneProgrammer.ts +83 -83
  92. package/src/programmers/IsStringifyProgrammer.ts +77 -77
  93. package/src/programmers/LiteralsProgrammer.ts +65 -65
  94. package/src/programmers/PruneProgrammer.ts +348 -348
  95. package/src/programmers/RandomProgrammer.ts +444 -444
  96. package/src/programmers/StringifyProgrammer.ts +758 -758
  97. package/src/programmers/TypiaProgrammer.ts +141 -141
  98. package/src/programmers/ValidateCloneProgrammer.ts +93 -93
  99. package/src/programmers/ValidateParseProgrammer.ts +78 -78
  100. package/src/programmers/ValidateProgrammer.ts +317 -317
  101. package/src/programmers/ValidatePruneProgrammer.ts +86 -86
  102. package/src/programmers/ValidateStringifyProgrammer.ts +93 -93
  103. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  104. package/src/programmers/helpers/CloneJoiner.ts +138 -138
  105. package/src/programmers/helpers/FunctionImporeter.ts +56 -56
  106. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  107. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  108. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  109. package/src/programmers/helpers/PruneJoiner.ts +156 -156
  110. package/src/programmers/helpers/RandomJoiner.ts +165 -165
  111. package/src/programmers/helpers/RandomRanger.ts +218 -218
  112. package/src/programmers/helpers/StringifyJoinder.ts +118 -118
  113. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  114. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  115. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  116. package/src/programmers/helpers/disable_function_importer_declare.ts +21 -21
  117. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  118. package/src/programmers/internal/application_array.ts +32 -32
  119. package/src/programmers/internal/application_boolean.ts +15 -15
  120. package/src/programmers/internal/application_constant.ts +26 -26
  121. package/src/programmers/internal/application_default.ts +17 -17
  122. package/src/programmers/internal/application_default_string.ts +33 -33
  123. package/src/programmers/internal/application_native.ts +36 -36
  124. package/src/programmers/internal/application_number.ts +71 -71
  125. package/src/programmers/internal/application_object.ts +162 -162
  126. package/src/programmers/internal/application_schema.ts +198 -198
  127. package/src/programmers/internal/application_string.ts +44 -44
  128. package/src/programmers/internal/application_templates.ts +25 -25
  129. package/src/programmers/internal/application_tuple.ts +27 -27
  130. package/src/programmers/internal/check_array.ts +31 -31
  131. package/src/programmers/internal/check_array_length.ts +35 -35
  132. package/src/programmers/internal/check_bigint.ts +95 -95
  133. package/src/programmers/internal/check_custom.ts +32 -32
  134. package/src/programmers/internal/check_dynamic_properties.ts +198 -198
  135. package/src/programmers/internal/check_everything.ts +28 -28
  136. package/src/programmers/internal/check_native.ts +22 -22
  137. package/src/programmers/internal/check_number.ts +177 -177
  138. package/src/programmers/internal/check_object.ts +65 -65
  139. package/src/programmers/internal/check_string.ts +27 -27
  140. package/src/programmers/internal/check_string_tags.ts +68 -68
  141. package/src/programmers/internal/check_template.ts +57 -57
  142. package/src/programmers/internal/check_union_array_like.ts +273 -273
  143. package/src/programmers/internal/check_union_tuple.ts +34 -34
  144. package/src/programmers/internal/decode_union_object.ts +75 -75
  145. package/src/programmers/internal/feature_object_entries.ts +64 -64
  146. package/src/programmers/internal/get_comment_tags.ts +23 -23
  147. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  148. package/src/programmers/internal/prune_object_properties.ts +63 -63
  149. package/src/programmers/internal/random_custom.ts +30 -30
  150. package/src/programmers/internal/stringify_dynamic_properties.ts +173 -173
  151. package/src/programmers/internal/stringify_native.ts +7 -7
  152. package/src/programmers/internal/stringify_regular_properties.ts +89 -89
  153. package/src/programmers/internal/template_to_pattern.ts +15 -15
  154. package/src/schemas/IJsonApplication.ts +13 -13
  155. package/src/schemas/IJsonComponents.ts +33 -33
  156. package/src/schemas/IJsonSchema.ts +134 -134
  157. package/src/transform.ts +39 -39
  158. package/src/transformers/CallExpressionTransformer.ts +183 -183
  159. package/src/transformers/FileTransformer.ts +50 -50
  160. package/src/transformers/IProject.ts +18 -18
  161. package/src/transformers/ITransformOptions.ts +62 -62
  162. package/src/transformers/ImportTransformer.ts +74 -74
  163. package/src/transformers/NodeTransformer.ts +13 -13
  164. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +107 -107
  165. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  166. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  167. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  168. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  169. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  170. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  172. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  173. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  174. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +43 -43
  175. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  176. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  177. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  178. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  179. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +31 -31
  180. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +56 -56
  181. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  183. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  185. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  186. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  187. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  188. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  189. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  190. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  191. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  192. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  193. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  194. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  195. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  196. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  197. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  198. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  199. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  200. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  201. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  202. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  203. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  204. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  205. package/src/transformers/internal/GenericTransformer.ts +101 -101
  206. package/src/typings/Atomic.ts +17 -17
  207. package/src/typings/ClassProperties.ts +5 -5
  208. package/src/typings/Customizable.ts +5 -5
  209. package/src/typings/OmitNever.ts +3 -3
  210. package/src/typings/SpecialFields.ts +3 -3
  211. package/src/typings/Writable.ts +11 -11
  212. package/src/utils/ArrayUtil.ts +44 -44
  213. package/src/utils/Escaper.ts +45 -45
  214. package/src/utils/MapUtil.ts +12 -12
  215. package/src/utils/PatternUtil.ts +30 -30
  216. package/src/utils/RandomGenerator.ts +81 -81
  217. package/src/utils/Singleton.ts +17 -17
  218. package/src/utils/TsNodeUtil.ts +17 -17
  219. package/src/utils/TsSymbolUtil.ts +153 -153
  220. package/src/utils/TsTypeUtil.ts +38 -38
@@ -1,153 +1,153 @@
1
- import { JSDocTagInfo } from "typescript";
2
- import type ts from "typescript/lib/tsclibrary";
3
-
4
- import { TsNodeUtil } from "./TsNodeUtil";
5
-
6
- export namespace TsSymbolUtil {
7
- export const comments =
8
- (tsc: typeof ts) =>
9
- (symbol: ts.Symbol): string | undefined => {
10
- const node = symbol.declarations?.[0];
11
- if (!node) return undefined;
12
-
13
- const range: ts.TextRange = tsc.getCommentRange(node);
14
- const text: string = TsNodeUtil.getSourceFile(tsc)(
15
- node,
16
- ).text.substring(range.pos, range.end);
17
- const output: string = transform(text).join("\n");
18
- return output.length ? output : undefined;
19
- };
20
-
21
- export const getCommentTags =
22
- (tsc: typeof ts) =>
23
- (symbol: ts.Symbol): JSDocTagInfo[] | undefined => {
24
- const node = symbol.declarations?.[0];
25
- if (!node) return undefined;
26
-
27
- const tagList: ts.JSDocTag[] = tsc
28
- .getJSDocTags(node)
29
- .map(emendTag(tsc));
30
- // if (
31
- // tagList.some(
32
- // (tag) => tag.tagName.escapedText.toString() === "type",
33
- // )
34
- // ) {
35
- // const entire = tsc.getJSDocCommentsAndTags(node);
36
- // const texts = entire.map((e) =>
37
- // tsc.isJSDoc(e) ? jsDocToText(e) : jsTagToText(e),
38
- // );
39
- // console.log(texts);
40
- // }
41
-
42
- return tagList.map((tag) => ({
43
- name: tag.tagName.escapedText.toString(),
44
- text:
45
- tag.comment === undefined
46
- ? undefined
47
- : typeof tag.comment === "string"
48
- ? [{ text: tag.comment, kind: "text" }]
49
- : tag.comment.map((text) => ({
50
- text: text.text,
51
- kind:
52
- text.kind === tsc.SyntaxKind.JSDocText
53
- ? "text"
54
- : text.kind === tsc.SyntaxKind.JSDocLink
55
- ? "link"
56
- : text.kind ===
57
- tsc.SyntaxKind.JSDocLinkCode
58
- ? "link-code"
59
- : "link-plain",
60
- })),
61
- }));
62
- };
63
-
64
- const emendTag =
65
- (tsc: typeof ts) =>
66
- (tag: ts.JSDocTag): ts.JSDocTag => {
67
- if (tag.comment !== undefined) return tag;
68
-
69
- const tagName: string = tag.tagName.escapedText.toString();
70
- const comment: string = TsNodeUtil.getSourceFile(tsc)(tag)
71
- .text.substring(tag.pos, tag.end)
72
- .replace(`@${tagName}`, "")
73
- .split("\n")
74
- .map((str) => trim(str))
75
- .filter(
76
- (str, i, array) =>
77
- (i !== 0 && i !== array.length - 1) || !!str.length,
78
- )
79
- .join("\n");
80
- return comment.length
81
- ? {
82
- ...tag,
83
- comment,
84
- }
85
- : tag;
86
- };
87
-
88
- const transform = (text: string): string[] => {
89
- const elements: string[] = text.split("\n");
90
- const first: number = lastIndexOf(elements)((elem) =>
91
- elem.trim().startsWith("/**"),
92
- );
93
- const last: number = lastIndexOf(elements)((elem) =>
94
- elem.trim().endsWith("*/"),
95
- );
96
-
97
- const cut: string[] = elements.slice(first, last + 1);
98
- return cut
99
- .map((elem, i) => {
100
- if (i === 0) elem = elem.substring(elem.lastIndexOf("/**") + 3);
101
- if (i === cut.length - 1)
102
- elem = elem.substring(0, elem.lastIndexOf("*/"));
103
- return trim(elem);
104
- })
105
- .filter(
106
- (str, i, array) =>
107
- (i !== 0 && i !== array.length - 1) || !!str.length,
108
- );
109
- };
110
-
111
- const lastIndexOf =
112
- <T>(array: T[]) =>
113
- (pred: (elem: T) => boolean) => {
114
- for (let i = array.length - 1; i >= 0; i--)
115
- if (pred(array[i]!)) return i;
116
- return -1;
117
- };
118
-
119
- const trim = (str: string): string => {
120
- const vulnerable = (ch: string) =>
121
- ch === " " ||
122
- ch === "\n" ||
123
- ch == "\r" ||
124
- ch === "\t" ||
125
- ch === "*";
126
- let start: number;
127
- let end: number;
128
- for (start = 0; start < str.length; ++start)
129
- if (!vulnerable(str.charAt(start))) break;
130
- for (end = str.length - 1; end >= 0; --end)
131
- if (!vulnerable(str.charAt(end))) break;
132
- return start > end ? "" : str.substring(start, end + 1).trim();
133
- };
134
- }
135
-
136
- // const jsDocToText = (doc: ts.JSDoc): string =>
137
- // [jsCommentToText(doc.comment), ...(doc.tags ?? []).map(jsTagToText)]
138
- // .filter((str) => !!str.length)
139
- // .join(" ");
140
-
141
- // const jsTagToText = (doc: ts.JSDocTag): string =>
142
- // ["@" + doc.tagName.escapedText.toString(), jsCommentToText(doc.comment)]
143
- // .filter((str) => !!str.length)
144
- // .join(" ");
145
-
146
- // const jsCommentToText = (
147
- // comment: string | ts.NodeArray<ts.JSDocComment> | undefined,
148
- // ): string =>
149
- // comment === undefined
150
- // ? ""
151
- // : typeof comment === "string"
152
- // ? comment
153
- // : comment.map((c) => c.text).join("");
1
+ import { JSDocTagInfo } from "typescript";
2
+ import type ts from "typescript/lib/tsclibrary";
3
+
4
+ import { TsNodeUtil } from "./TsNodeUtil";
5
+
6
+ export namespace TsSymbolUtil {
7
+ export const comments =
8
+ (tsc: typeof ts) =>
9
+ (symbol: ts.Symbol): string | undefined => {
10
+ const node = symbol.declarations?.[0];
11
+ if (!node) return undefined;
12
+
13
+ const range: ts.TextRange = tsc.getCommentRange(node);
14
+ const text: string = TsNodeUtil.getSourceFile(tsc)(
15
+ node,
16
+ ).text.substring(range.pos, range.end);
17
+ const output: string = transform(text).join("\n");
18
+ return output.length ? output : undefined;
19
+ };
20
+
21
+ export const getCommentTags =
22
+ (tsc: typeof ts) =>
23
+ (symbol: ts.Symbol): JSDocTagInfo[] | undefined => {
24
+ const node = symbol.declarations?.[0];
25
+ if (!node) return undefined;
26
+
27
+ const tagList: ts.JSDocTag[] = tsc
28
+ .getJSDocTags(node)
29
+ .map(emendTag(tsc));
30
+ // if (
31
+ // tagList.some(
32
+ // (tag) => tag.tagName.escapedText.toString() === "type",
33
+ // )
34
+ // ) {
35
+ // const entire = tsc.getJSDocCommentsAndTags(node);
36
+ // const texts = entire.map((e) =>
37
+ // tsc.isJSDoc(e) ? jsDocToText(e) : jsTagToText(e),
38
+ // );
39
+ // console.log(texts);
40
+ // }
41
+
42
+ return tagList.map((tag) => ({
43
+ name: tag.tagName.escapedText.toString(),
44
+ text:
45
+ tag.comment === undefined
46
+ ? undefined
47
+ : typeof tag.comment === "string"
48
+ ? [{ text: tag.comment, kind: "text" }]
49
+ : tag.comment.map((text) => ({
50
+ text: text.text,
51
+ kind:
52
+ text.kind === tsc.SyntaxKind.JSDocText
53
+ ? "text"
54
+ : text.kind === tsc.SyntaxKind.JSDocLink
55
+ ? "link"
56
+ : text.kind ===
57
+ tsc.SyntaxKind.JSDocLinkCode
58
+ ? "link-code"
59
+ : "link-plain",
60
+ })),
61
+ }));
62
+ };
63
+
64
+ const emendTag =
65
+ (tsc: typeof ts) =>
66
+ (tag: ts.JSDocTag): ts.JSDocTag => {
67
+ if (tag.comment !== undefined) return tag;
68
+
69
+ const tagName: string = tag.tagName.escapedText.toString();
70
+ const comment: string = TsNodeUtil.getSourceFile(tsc)(tag)
71
+ .text.substring(tag.pos, tag.end)
72
+ .replace(`@${tagName}`, "")
73
+ .split("\n")
74
+ .map((str) => trim(str))
75
+ .filter(
76
+ (str, i, array) =>
77
+ (i !== 0 && i !== array.length - 1) || !!str.length,
78
+ )
79
+ .join("\n");
80
+ return comment.length
81
+ ? {
82
+ ...tag,
83
+ comment,
84
+ }
85
+ : tag;
86
+ };
87
+
88
+ const transform = (text: string): string[] => {
89
+ const elements: string[] = text.split("\n");
90
+ const first: number = lastIndexOf(elements)((elem) =>
91
+ elem.trim().startsWith("/**"),
92
+ );
93
+ const last: number = lastIndexOf(elements)((elem) =>
94
+ elem.trim().endsWith("*/"),
95
+ );
96
+
97
+ const cut: string[] = elements.slice(first, last + 1);
98
+ return cut
99
+ .map((elem, i) => {
100
+ if (i === 0) elem = elem.substring(elem.lastIndexOf("/**") + 3);
101
+ if (i === cut.length - 1)
102
+ elem = elem.substring(0, elem.lastIndexOf("*/"));
103
+ return trim(elem);
104
+ })
105
+ .filter(
106
+ (str, i, array) =>
107
+ (i !== 0 && i !== array.length - 1) || !!str.length,
108
+ );
109
+ };
110
+
111
+ const lastIndexOf =
112
+ <T>(array: T[]) =>
113
+ (pred: (elem: T) => boolean) => {
114
+ for (let i = array.length - 1; i >= 0; i--)
115
+ if (pred(array[i]!)) return i;
116
+ return -1;
117
+ };
118
+
119
+ const trim = (str: string): string => {
120
+ const vulnerable = (ch: string) =>
121
+ ch === " " ||
122
+ ch === "\n" ||
123
+ ch == "\r" ||
124
+ ch === "\t" ||
125
+ ch === "*";
126
+ let start: number;
127
+ let end: number;
128
+ for (start = 0; start < str.length; ++start)
129
+ if (!vulnerable(str.charAt(start))) break;
130
+ for (end = str.length - 1; end >= 0; --end)
131
+ if (!vulnerable(str.charAt(end))) break;
132
+ return start > end ? "" : str.substring(start, end + 1).trim();
133
+ };
134
+ }
135
+
136
+ // const jsDocToText = (doc: ts.JSDoc): string =>
137
+ // [jsCommentToText(doc.comment), ...(doc.tags ?? []).map(jsTagToText)]
138
+ // .filter((str) => !!str.length)
139
+ // .join(" ");
140
+
141
+ // const jsTagToText = (doc: ts.JSDocTag): string =>
142
+ // ["@" + doc.tagName.escapedText.toString(), jsCommentToText(doc.comment)]
143
+ // .filter((str) => !!str.length)
144
+ // .join(" ");
145
+
146
+ // const jsCommentToText = (
147
+ // comment: string | ts.NodeArray<ts.JSDocComment> | undefined,
148
+ // ): string =>
149
+ // comment === undefined
150
+ // ? ""
151
+ // : typeof comment === "string"
152
+ // ? comment
153
+ // : comment.map((c) => c.text).join("");
@@ -1,38 +1,38 @@
1
- import type ts from "typescript/lib/tsclibrary";
2
-
3
- export namespace TsTypeUtil {
4
- export const isLiteral =
5
- (tsc: typeof ts) =>
6
- (type: ts.Type): type is ts.LiteralType =>
7
- !!(
8
- type.flags &
9
- (tsc.TypeFlags.StringLiteral |
10
- tsc.TypeFlags.NumberLiteral |
11
- tsc.TypeFlags.BigIntLiteral)
12
- );
13
-
14
- export const isTypeParameter =
15
- (tsc: typeof ts) =>
16
- (type: ts.Type): type is ts.TypeParameter =>
17
- !!(type.flags & tsc.TypeFlags.TypeParameter);
18
-
19
- export const isUnionOrIntersection =
20
- (tsc: typeof ts) =>
21
- (type: ts.Type): type is ts.UnionOrIntersectionType =>
22
- !!(type.flags & tsc.TypeFlags.UnionOrIntersection);
23
-
24
- export const isUnion =
25
- (tsc: typeof ts) =>
26
- (type: ts.Type): type is ts.UnionType =>
27
- !!(type.flags & tsc.TypeFlags.Union);
28
-
29
- export const isIntersection =
30
- (tsc: typeof ts) =>
31
- (type: ts.Type): type is ts.IntersectionType =>
32
- !!(type.flags & tsc.TypeFlags.Intersection);
33
-
34
- export const isClass =
35
- (tsc: typeof ts) =>
36
- (type: ts.Type): type is ts.InterfaceType =>
37
- !!((tsc as any).getObjectFlags(type) & tsc.ObjectFlags.Class);
38
- }
1
+ import type ts from "typescript/lib/tsclibrary";
2
+
3
+ export namespace TsTypeUtil {
4
+ export const isLiteral =
5
+ (tsc: typeof ts) =>
6
+ (type: ts.Type): type is ts.LiteralType =>
7
+ !!(
8
+ type.flags &
9
+ (tsc.TypeFlags.StringLiteral |
10
+ tsc.TypeFlags.NumberLiteral |
11
+ tsc.TypeFlags.BigIntLiteral)
12
+ );
13
+
14
+ export const isTypeParameter =
15
+ (tsc: typeof ts) =>
16
+ (type: ts.Type): type is ts.TypeParameter =>
17
+ !!(type.flags & tsc.TypeFlags.TypeParameter);
18
+
19
+ export const isUnionOrIntersection =
20
+ (tsc: typeof ts) =>
21
+ (type: ts.Type): type is ts.UnionOrIntersectionType =>
22
+ !!(type.flags & tsc.TypeFlags.UnionOrIntersection);
23
+
24
+ export const isUnion =
25
+ (tsc: typeof ts) =>
26
+ (type: ts.Type): type is ts.UnionType =>
27
+ !!(type.flags & tsc.TypeFlags.Union);
28
+
29
+ export const isIntersection =
30
+ (tsc: typeof ts) =>
31
+ (type: ts.Type): type is ts.IntersectionType =>
32
+ !!(type.flags & tsc.TypeFlags.Intersection);
33
+
34
+ export const isClass =
35
+ (tsc: typeof ts) =>
36
+ (type: ts.Type): type is ts.InterfaceType =>
37
+ !!((tsc as any).getObjectFlags(type) & tsc.ObjectFlags.Class);
38
+ }