typia 5.1.6 → 5.2.0-dev.20231007

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 (222) hide show
  1. package/lib/CamelCase.d.ts +22 -0
  2. package/lib/CamelCase.js +3 -0
  3. package/lib/CamelCase.js.map +1 -0
  4. package/lib/PascalCase.d.ts +22 -0
  5. package/lib/PascalCase.js +3 -0
  6. package/lib/PascalCase.js.map +1 -0
  7. package/lib/Resolved.d.ts +4 -4
  8. package/lib/SnakeCase.d.ts +24 -0
  9. package/lib/SnakeCase.js +3 -0
  10. package/lib/SnakeCase.js.map +1 -0
  11. package/lib/functional/$convention.d.ts +1 -0
  12. package/lib/functional/$convention.js +63 -0
  13. package/lib/functional/$convention.js.map +1 -0
  14. package/lib/functional/Namespace.js +9 -0
  15. package/lib/functional/Namespace.js.map +1 -1
  16. package/lib/module.d.ts +5 -1
  17. package/lib/module.js +6 -2
  18. package/lib/module.js.map +1 -1
  19. package/lib/notations.d.ts +538 -0
  20. package/lib/notations.js +146 -0
  21. package/lib/notations.js.map +1 -0
  22. package/lib/programmers/helpers/NotationJoiner.d.ts +7 -0
  23. package/lib/programmers/helpers/NotationJoiner.js +85 -0
  24. package/lib/programmers/helpers/NotationJoiner.js.map +1 -0
  25. package/lib/programmers/misc/MiscCloneProgrammer.js +12 -1
  26. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  27. package/lib/programmers/misc/MiscPruneProgrammer.js +2 -1
  28. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  29. package/lib/programmers/notations/NotationAssertGeneralProgrammer.d.ts +5 -0
  30. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +44 -0
  31. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -0
  32. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +6 -0
  33. package/lib/programmers/notations/NotationGeneralProgrammer.js +490 -0
  34. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -0
  35. package/lib/programmers/notations/NotationIsGeneralProgrammer.d.ts +5 -0
  36. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +47 -0
  37. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -0
  38. package/lib/programmers/notations/NotationValidateGeneralProgrammer.d.ts +5 -0
  39. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +44 -0
  40. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -0
  41. package/lib/transformers/CallExpressionTransformer.js +99 -16
  42. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  43. package/lib/transformers/features/json/JsonAssertParseTransformer.js +1 -1
  44. package/lib/transformers/features/json/JsonAssertParseTransformer.js.map +1 -1
  45. package/lib/transformers/features/json/JsonAssertStringifyTransformer.js +1 -1
  46. package/lib/transformers/features/json/JsonAssertStringifyTransformer.js.map +1 -1
  47. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.js +1 -1
  48. package/lib/transformers/features/json/JsonCreateAssertParseTransformer.js.map +1 -1
  49. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.js +1 -1
  50. package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.js.map +1 -1
  51. package/lib/transformers/features/json/JsonCreateIsParseTransformer.js +1 -1
  52. package/lib/transformers/features/json/JsonCreateIsParseTransformer.js.map +1 -1
  53. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.js +1 -1
  54. package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.js.map +1 -1
  55. package/lib/transformers/features/json/JsonCreateStringifyTransformer.js +1 -1
  56. package/lib/transformers/features/json/JsonCreateStringifyTransformer.js.map +1 -1
  57. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.js +1 -1
  58. package/lib/transformers/features/json/JsonCreateValidateParseTransformer.js.map +1 -1
  59. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.js +1 -1
  60. package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.js.map +1 -1
  61. package/lib/transformers/features/json/JsonIsParseTransformer.js +1 -1
  62. package/lib/transformers/features/json/JsonIsParseTransformer.js.map +1 -1
  63. package/lib/transformers/features/json/JsonIsStringifyTransformer.js +1 -1
  64. package/lib/transformers/features/json/JsonIsStringifyTransformer.js.map +1 -1
  65. package/lib/transformers/features/json/JsonStringifyTransformer.js +1 -1
  66. package/lib/transformers/features/json/JsonStringifyTransformer.js.map +1 -1
  67. package/lib/transformers/features/json/JsonValidateParseTransformer.js +1 -1
  68. package/lib/transformers/features/json/JsonValidateParseTransformer.js.map +1 -1
  69. package/lib/transformers/features/json/JsonValidateStringifyTransformer.js +1 -1
  70. package/lib/transformers/features/json/JsonValidateStringifyTransformer.js.map +1 -1
  71. package/lib/transformers/features/misc/MiscAssertCloneTransformer.js +1 -1
  72. package/lib/transformers/features/misc/MiscAssertCloneTransformer.js.map +1 -1
  73. package/lib/transformers/features/misc/MiscAssertPruneTransformer.js +1 -1
  74. package/lib/transformers/features/misc/MiscAssertPruneTransformer.js.map +1 -1
  75. package/lib/transformers/features/misc/MiscCloneTransformer.js +1 -1
  76. package/lib/transformers/features/misc/MiscCloneTransformer.js.map +1 -1
  77. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.js +1 -1
  78. package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.js.map +1 -1
  79. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.js +1 -1
  80. package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.js.map +1 -1
  81. package/lib/transformers/features/misc/MiscCreateCloneTransformer.js +1 -1
  82. package/lib/transformers/features/misc/MiscCreateCloneTransformer.js.map +1 -1
  83. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.js +1 -1
  84. package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.js.map +1 -1
  85. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +1 -1
  86. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  87. package/lib/transformers/features/misc/MiscCreatePruneTransformer.js +1 -1
  88. package/lib/transformers/features/misc/MiscCreatePruneTransformer.js.map +1 -1
  89. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.js +1 -1
  90. package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.js.map +1 -1
  91. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.js +1 -1
  92. package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.js.map +1 -1
  93. package/lib/transformers/features/misc/MiscIsCloneTransformer.js +1 -1
  94. package/lib/transformers/features/misc/MiscIsCloneTransformer.js.map +1 -1
  95. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +1 -1
  96. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  97. package/lib/transformers/features/misc/MiscPruneTransformer.js +1 -1
  98. package/lib/transformers/features/misc/MiscPruneTransformer.js.map +1 -1
  99. package/lib/transformers/features/misc/MiscValidateCloneTransformer.js +1 -1
  100. package/lib/transformers/features/misc/MiscValidateCloneTransformer.js.map +1 -1
  101. package/lib/transformers/features/misc/MiscValidatePruneTransformer.js +1 -1
  102. package/lib/transformers/features/misc/MiscValidatePruneTransformer.js.map +1 -1
  103. package/lib/transformers/features/notations/NotationAssertGeneralTransformer.d.ts +4 -0
  104. package/lib/transformers/features/notations/NotationAssertGeneralTransformer.js +15 -0
  105. package/lib/transformers/features/notations/NotationAssertGeneralTransformer.js.map +1 -0
  106. package/lib/transformers/features/notations/NotationCreateAssertGeneralTransformer.d.ts +4 -0
  107. package/lib/transformers/features/notations/NotationCreateAssertGeneralTransformer.js +15 -0
  108. package/lib/transformers/features/notations/NotationCreateAssertGeneralTransformer.js.map +1 -0
  109. package/lib/transformers/features/notations/NotationCreateGeneralTransformer.d.ts +4 -0
  110. package/lib/transformers/features/notations/NotationCreateGeneralTransformer.js +15 -0
  111. package/lib/transformers/features/notations/NotationCreateGeneralTransformer.js.map +1 -0
  112. package/lib/transformers/features/notations/NotationCreateIsGeneralTransformer.d.ts +4 -0
  113. package/lib/transformers/features/notations/NotationCreateIsGeneralTransformer.js +15 -0
  114. package/lib/transformers/features/notations/NotationCreateIsGeneralTransformer.js.map +1 -0
  115. package/lib/transformers/features/notations/NotationCreateValidateGeneralTransformer.d.ts +4 -0
  116. package/lib/transformers/features/notations/NotationCreateValidateGeneralTransformer.js +15 -0
  117. package/lib/transformers/features/notations/NotationCreateValidateGeneralTransformer.js.map +1 -0
  118. package/lib/transformers/features/notations/NotationGeneralTransformer.d.ts +4 -0
  119. package/lib/transformers/features/notations/NotationGeneralTransformer.js +14 -0
  120. package/lib/transformers/features/notations/NotationGeneralTransformer.js.map +1 -0
  121. package/lib/transformers/features/notations/NotationIsGeneralTransformer.d.ts +4 -0
  122. package/lib/transformers/features/notations/NotationIsGeneralTransformer.js +15 -0
  123. package/lib/transformers/features/notations/NotationIsGeneralTransformer.js.map +1 -0
  124. package/lib/transformers/features/notations/NotationValidateGeneralTransformer.d.ts +4 -0
  125. package/lib/transformers/features/notations/NotationValidateGeneralTransformer.js +15 -0
  126. package/lib/transformers/features/notations/NotationValidateGeneralTransformer.js.map +1 -0
  127. package/lib/transformers/features/protobuf/{CreateProtobufAssertDecodeTransformer.d.ts → ProtobufCreateAssertDecodeTransformer.d.ts} +1 -1
  128. package/lib/transformers/features/protobuf/{CreateProtobufAssertDecodeTransformer.js → ProtobufCreateAssertDecodeTransformer.js} +6 -6
  129. package/lib/transformers/features/protobuf/{CreateProtobufAssertEncodeTransformer.js.map → ProtobufCreateAssertDecodeTransformer.js.map} +1 -1
  130. package/lib/transformers/features/protobuf/{CreateProtobufAssertEncodeTransformer.d.ts → ProtobufCreateAssertEncodeTransformer.d.ts} +1 -1
  131. package/lib/transformers/features/protobuf/{CreateProtobufAssertEncodeTransformer.js → ProtobufCreateAssertEncodeTransformer.js} +6 -6
  132. package/lib/transformers/features/protobuf/{CreateProtobufAssertDecodeTransformer.js.map → ProtobufCreateAssertEncodeTransformer.js.map} +1 -1
  133. package/lib/transformers/features/protobuf/{CreateProtobufDecodeTransformer.d.ts → ProtobufCreateDecodeTransformer.d.ts} +1 -1
  134. package/lib/transformers/features/protobuf/{CreateProtobufDecodeTransformer.js → ProtobufCreateDecodeTransformer.js} +6 -6
  135. package/lib/transformers/features/protobuf/{CreateProtobufDecodeTransformer.js.map → ProtobufCreateDecodeTransformer.js.map} +1 -1
  136. package/lib/transformers/features/protobuf/{CreateProtobufEncodeTransformer.d.ts → ProtobufCreateEncodeTransformer.d.ts} +1 -1
  137. package/lib/transformers/features/protobuf/{CreateProtobufEncodeTransformer.js → ProtobufCreateEncodeTransformer.js} +6 -6
  138. package/lib/transformers/features/protobuf/{CreateProtobufEncodeTransformer.js.map → ProtobufCreateEncodeTransformer.js.map} +1 -1
  139. package/lib/transformers/features/protobuf/{CreateProtobufIsDecodeTransformer.d.ts → ProtobufCreateIsDecodeTransformer.d.ts} +1 -1
  140. package/lib/transformers/features/protobuf/{CreateProtobufIsDecodeTransformer.js → ProtobufCreateIsDecodeTransformer.js} +6 -6
  141. package/lib/transformers/features/protobuf/{CreateProtobufIsDecodeTransformer.js.map → ProtobufCreateIsDecodeTransformer.js.map} +1 -1
  142. package/lib/transformers/features/protobuf/{CreateProtobufIsEncodeTransformer.d.ts → ProtobufCreateIsEncodeTransformer.d.ts} +1 -1
  143. package/lib/transformers/features/protobuf/{CreateProtobufIsEncodeTransformer.js → ProtobufCreateIsEncodeTransformer.js} +6 -6
  144. package/lib/transformers/features/protobuf/{CreateProtobufIsEncodeTransformer.js.map → ProtobufCreateIsEncodeTransformer.js.map} +1 -1
  145. package/lib/transformers/features/protobuf/{CreateProtobufValidateDecodeTransformer.d.ts → ProtobufCreateValidateDecodeTransformer.d.ts} +1 -1
  146. package/lib/transformers/features/protobuf/{CreateProtobufValidateDecodeTransformer.js → ProtobufCreateValidateDecodeTransformer.js} +6 -6
  147. package/lib/transformers/features/protobuf/{CreateProtobufValidateDecodeTransformer.js.map → ProtobufCreateValidateDecodeTransformer.js.map} +1 -1
  148. package/lib/transformers/features/protobuf/{CreateProtobufValidateEncodeTransformer.d.ts → ProtobufCreateValidateEncodeTransformer.d.ts} +1 -1
  149. package/lib/transformers/features/protobuf/{CreateProtobufValidateEncodeTransformer.js → ProtobufCreateValidateEncodeTransformer.js} +6 -6
  150. package/lib/transformers/features/protobuf/{CreateProtobufValidateEncodeTransformer.js.map → ProtobufCreateValidateEncodeTransformer.js.map} +1 -1
  151. package/lib/utils/NamingConvention.d.ts +5 -0
  152. package/lib/utils/NamingConvention.js +115 -0
  153. package/lib/utils/NamingConvention.js.map +1 -0
  154. package/lib/utils/StringUtil.d.ts +3 -0
  155. package/lib/utils/StringUtil.js +10 -0
  156. package/lib/utils/StringUtil.js.map +1 -0
  157. package/package.json +2 -1
  158. package/src/CamelCase.ts +116 -0
  159. package/src/PascalCase.ts +106 -0
  160. package/src/Primitive.ts +1 -1
  161. package/src/Resolved.ts +26 -26
  162. package/src/SnakeCase.ts +156 -0
  163. package/src/functional/$convention.ts +40 -0
  164. package/src/functional/Namespace.ts +22 -0
  165. package/src/module.ts +6 -1
  166. package/src/notations.ts +855 -0
  167. package/src/programmers/helpers/NotationJoiner.ts +146 -0
  168. package/src/programmers/misc/MiscCloneProgrammer.ts +17 -1
  169. package/src/programmers/misc/MiscPruneProgrammer.ts +4 -2
  170. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +72 -0
  171. package/src/programmers/notations/NotationGeneralProgrammer.ts +720 -0
  172. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +79 -0
  173. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +88 -0
  174. package/src/transformers/CallExpressionTransformer.ts +107 -16
  175. package/src/transformers/features/json/JsonAssertParseTransformer.ts +1 -1
  176. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +1 -1
  177. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +3 -1
  178. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +1 -1
  179. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +1 -1
  180. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +3 -1
  181. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +1 -1
  182. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +3 -1
  183. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +1 -1
  184. package/src/transformers/features/json/JsonIsParseTransformer.ts +1 -1
  185. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +1 -1
  186. package/src/transformers/features/json/JsonStringifyTransformer.ts +1 -1
  187. package/src/transformers/features/json/JsonValidateParseTransformer.ts +1 -1
  188. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +1 -1
  189. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +1 -1
  190. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +1 -1
  191. package/src/transformers/features/misc/MiscCloneTransformer.ts +1 -1
  192. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +3 -1
  193. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +3 -1
  194. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +1 -1
  195. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +1 -1
  196. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +1 -1
  197. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +1 -1
  198. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +3 -1
  199. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +3 -1
  200. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +1 -1
  201. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +1 -1
  202. package/src/transformers/features/misc/MiscPruneTransformer.ts +1 -1
  203. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +1 -1
  204. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +1 -1
  205. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -0
  206. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -0
  207. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -0
  208. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -0
  209. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +17 -0
  210. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -0
  211. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -0
  212. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +17 -0
  213. package/src/transformers/features/protobuf/{CreateProtobufAssertDecodeTransformer.ts → ProtobufCreateAssertDecodeTransformer.ts} +1 -1
  214. package/src/transformers/features/protobuf/{CreateProtobufAssertEncodeTransformer.ts → ProtobufCreateAssertEncodeTransformer.ts} +1 -1
  215. package/src/transformers/features/protobuf/{CreateProtobufDecodeTransformer.ts → ProtobufCreateDecodeTransformer.ts} +1 -1
  216. package/src/transformers/features/protobuf/{CreateProtobufEncodeTransformer.ts → ProtobufCreateEncodeTransformer.ts} +1 -1
  217. package/src/transformers/features/protobuf/{CreateProtobufIsDecodeTransformer.ts → ProtobufCreateIsDecodeTransformer.ts} +1 -1
  218. package/src/transformers/features/protobuf/{CreateProtobufIsEncodeTransformer.ts → ProtobufCreateIsEncodeTransformer.ts} +1 -1
  219. package/src/transformers/features/protobuf/{CreateProtobufValidateDecodeTransformer.ts → ProtobufCreateValidateDecodeTransformer.ts} +1 -1
  220. package/src/transformers/features/protobuf/{CreateProtobufValidateEncodeTransformer.ts → ProtobufCreateValidateEncodeTransformer.ts} +1 -1
  221. package/src/utils/NamingConvention.ts +91 -0
  222. package/src/utils/StringUtil.ts +4 -0
@@ -0,0 +1,146 @@
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { Escaper } from "../../utils/Escaper";
8
+
9
+ import { metadata_to_pattern } from "../internal/metadata_to_pattern";
10
+ import { IExpressionEntry } from "./IExpressionEntry";
11
+
12
+ export namespace NotationJoiner {
13
+ export const object =
14
+ (rename: (str: string) => string) =>
15
+ (
16
+ input: ts.Expression,
17
+ entries: IExpressionEntry<ts.Expression>[],
18
+ ): ts.ConciseBody => {
19
+ if (entries.length === 0) return ts.factory.createIdentifier("{}");
20
+
21
+ const regular = entries.filter((e) => e.key.isSoleLiteral());
22
+ const dynamic = entries.filter((e) => !e.key.isSoleLiteral());
23
+ const literal = ts.factory.createObjectLiteralExpression(
24
+ regular.map((entry) => {
25
+ const str: string = rename(entry.key.getSoleLiteral()!);
26
+ return ts.factory.createPropertyAssignment(
27
+ Escaper.variable(str)
28
+ ? str
29
+ : ts.factory.createStringLiteral(str),
30
+ entry.expression,
31
+ );
32
+ }),
33
+ true,
34
+ );
35
+ if (dynamic.length === 0) return literal;
36
+
37
+ const key = ts.factory.createIdentifier("key");
38
+ const output = ts.factory.createIdentifier("output");
39
+
40
+ const statements: ts.Statement[] = [];
41
+ if (regular.length !== 0)
42
+ statements.push(
43
+ ts.factory.createIfStatement(
44
+ ts.factory.createCallExpression(
45
+ IdentifierFactory.access(
46
+ ts.factory.createArrayLiteralExpression(
47
+ regular.map((r) =>
48
+ ts.factory.createStringLiteral(
49
+ r.key.getSoleLiteral()!,
50
+ ),
51
+ ),
52
+ ),
53
+ )("some"),
54
+ undefined,
55
+ [
56
+ ts.factory.createArrowFunction(
57
+ undefined,
58
+ undefined,
59
+ [IdentifierFactory.parameter("regular")],
60
+ undefined,
61
+ undefined,
62
+ ts.factory.createStrictEquality(
63
+ ts.factory.createIdentifier("regular"),
64
+ ts.factory.createIdentifier("key"),
65
+ ),
66
+ ),
67
+ ],
68
+ ),
69
+ ts.factory.createContinueStatement(),
70
+ ),
71
+ );
72
+ statements.push(
73
+ ...dynamic.map((entry) =>
74
+ ts.factory.createIfStatement(
75
+ ts.factory.createCallExpression(
76
+ ts.factory.createIdentifier(
77
+ `RegExp(/${metadata_to_pattern(true)(
78
+ entry.key,
79
+ )}/).test`,
80
+ ),
81
+ undefined,
82
+ [key],
83
+ ),
84
+ ts.factory.createBlock([
85
+ ts.factory.createExpressionStatement(
86
+ ts.factory.createBinaryExpression(
87
+ ts.factory.createElementAccessExpression(
88
+ output,
89
+ key,
90
+ ),
91
+ ts.factory.createToken(
92
+ ts.SyntaxKind.EqualsToken,
93
+ ),
94
+ entry.expression,
95
+ ),
96
+ ),
97
+ ts.factory.createContinueStatement(),
98
+ ]),
99
+ ),
100
+ ),
101
+ );
102
+
103
+ return ts.factory.createBlock([
104
+ StatementFactory.constant(
105
+ "output",
106
+ ts.factory.createAsExpression(
107
+ literal,
108
+ TypeFactory.keyword("any"),
109
+ ),
110
+ ),
111
+ ts.factory.createForOfStatement(
112
+ undefined,
113
+ StatementFactory.entry("key")("value"),
114
+ ts.factory.createCallExpression(
115
+ ts.factory.createIdentifier("Object.entries"),
116
+ undefined,
117
+ [input],
118
+ ),
119
+ ts.factory.createBlock(statements),
120
+ ),
121
+ ts.factory.createReturnStatement(output),
122
+ ]);
123
+ };
124
+
125
+ export const tuple = (
126
+ children: ts.Expression[],
127
+ rest: ts.Expression | null,
128
+ ): ts.Expression => {
129
+ return ts.factory.createAsExpression(
130
+ ts.factory.createArrayLiteralExpression(
131
+ rest === null
132
+ ? children
133
+ : [...children, ts.factory.createSpreadElement(rest)],
134
+ true,
135
+ ),
136
+ TypeFactory.keyword("any"),
137
+ );
138
+ };
139
+
140
+ export const array = (input: ts.Expression, arrow: ts.Expression) =>
141
+ ts.factory.createCallExpression(
142
+ ts.factory.createPropertyAccessExpression(input, "map"),
143
+ undefined,
144
+ [arrow],
145
+ );
146
+ }
@@ -124,7 +124,11 @@ export namespace MiscCloneProgrammer {
124
124
  if (
125
125
  meta.any ||
126
126
  meta.arrays.some((a) => a.type.value.any) ||
127
- meta.tuples.some((t) => t.type.elements.every((e) => e.any))
127
+ meta.tuples.some(
128
+ (t) =>
129
+ !!t.type.elements.length &&
130
+ t.type.elements.every((e) => e.any),
131
+ )
128
132
  )
129
133
  return ts.factory.createCallExpression(
130
134
  importer.use("any"),
@@ -142,6 +146,18 @@ export namespace MiscCloneProgrammer {
142
146
  //----
143
147
  // LIST UP UNION TYPES
144
148
  //----
149
+ // FUNCTIONAL
150
+ if (meta.functional)
151
+ unions.push({
152
+ type: "functional",
153
+ is: () =>
154
+ ts.factory.createStrictEquality(
155
+ ts.factory.createStringLiteral("function"),
156
+ ts.factory.createTypeOfExpression(input),
157
+ ),
158
+ value: () => ts.factory.createIdentifier("undefined"),
159
+ });
160
+
145
161
  // TUPLES
146
162
  for (const tuple of meta.tuples)
147
163
  unions.push({
@@ -456,8 +456,10 @@ export namespace MiscPruneProgrammer {
456
456
  const filter = (meta: Metadata): boolean =>
457
457
  meta.any === false &&
458
458
  (meta.objects.length !== 0 ||
459
- meta.tuples.some((t) =>
460
- t.type.elements.some((e) => filter(e.rest ?? e)),
459
+ meta.tuples.some(
460
+ (t) =>
461
+ !!t.type.elements.length &&
462
+ t.type.elements.some((e) => filter(e.rest ?? e)),
461
463
  ) ||
462
464
  meta.arrays.some((e) => filter(e.type.value)));
463
465
 
@@ -0,0 +1,72 @@
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { AssertProgrammer } from "../AssertProgrammer";
10
+ import { NotationGeneralProgrammer } from "./NotationGeneralProgrammer";
11
+
12
+ export namespace NotationAssertGeneralProgrammer {
13
+ export const write =
14
+ (rename: (str: string) => string) =>
15
+ (project: IProject) =>
16
+ (modulo: ts.LeftHandSideExpression) =>
17
+ (type: ts.Type, name?: string) =>
18
+ ts.factory.createArrowFunction(
19
+ undefined,
20
+ undefined,
21
+ [
22
+ IdentifierFactory.parameter(
23
+ "input",
24
+ TypeFactory.keyword("any"),
25
+ ),
26
+ ],
27
+ ts.factory.createTypeReferenceNode(
28
+ NotationGeneralProgrammer.returnType(rename)(
29
+ name ?? TypeFactory.getFullName(project.checker)(type),
30
+ ),
31
+ ),
32
+ undefined,
33
+ ts.factory.createBlock([
34
+ StatementFactory.constant(
35
+ "assert",
36
+ AssertProgrammer.write(project)(modulo)(false)(
37
+ type,
38
+ name,
39
+ ),
40
+ ),
41
+ StatementFactory.constant(
42
+ "general",
43
+ NotationGeneralProgrammer.write(rename)({
44
+ ...project,
45
+ options: {
46
+ ...project.options,
47
+ functional: false,
48
+ numeric: false,
49
+ },
50
+ })(modulo)(type, name),
51
+ ),
52
+ ts.factory.createExpressionStatement(
53
+ ts.factory.createCallExpression(
54
+ ts.factory.createIdentifier("assert"),
55
+ undefined,
56
+ [ts.factory.createIdentifier("input")],
57
+ ),
58
+ ),
59
+ StatementFactory.constant(
60
+ "output",
61
+ ts.factory.createCallExpression(
62
+ ts.factory.createIdentifier("general"),
63
+ undefined,
64
+ [ts.factory.createIdentifier("input")],
65
+ ),
66
+ ),
67
+ ts.factory.createReturnStatement(
68
+ ts.factory.createIdentifier("output"),
69
+ ),
70
+ ]),
71
+ );
72
+ }