@alloy-js/python 0.4.0-dev.3 → 0.4.0-dev.6

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 (355) hide show
  1. package/dist/dev/src/builtins/python.js +30 -0
  2. package/dist/dev/src/builtins/python.js.map +1 -0
  3. package/dist/dev/src/components/Atom.js +122 -0
  4. package/dist/dev/src/components/Atom.js.map +1 -0
  5. package/dist/dev/src/components/CallSignature.js +195 -0
  6. package/dist/dev/src/components/CallSignature.js.map +1 -0
  7. package/dist/dev/src/components/ClassDeclaration.js +112 -0
  8. package/dist/dev/src/components/ClassDeclaration.js.map +1 -0
  9. package/dist/dev/src/components/ClassInstantiation.js +40 -0
  10. package/dist/dev/src/components/ClassInstantiation.js.map +1 -0
  11. package/dist/dev/src/components/ClassMethodDeclaration.js +40 -0
  12. package/dist/dev/src/components/ClassMethodDeclaration.js.map +1 -0
  13. package/dist/dev/src/components/ConstructorDeclaration.js +39 -0
  14. package/dist/dev/src/components/ConstructorDeclaration.js.map +1 -0
  15. package/dist/dev/src/components/DataclassDeclaration.js +177 -0
  16. package/dist/dev/src/components/DataclassDeclaration.js.map +1 -0
  17. package/dist/dev/src/components/Declaration.js +31 -0
  18. package/dist/dev/src/components/Declaration.js.map +1 -0
  19. package/dist/dev/src/components/DunderMethodDeclaration.js +33 -0
  20. package/dist/dev/src/components/DunderMethodDeclaration.js.map +1 -0
  21. package/dist/dev/src/components/EnumDeclaration.js +259 -0
  22. package/dist/dev/src/components/EnumDeclaration.js.map +1 -0
  23. package/dist/dev/src/components/EnumMember.js +95 -0
  24. package/dist/dev/src/components/EnumMember.js.map +1 -0
  25. package/dist/dev/src/components/FunctionBase.js +130 -0
  26. package/dist/dev/src/components/FunctionBase.js.map +1 -0
  27. package/dist/dev/src/components/FunctionCallExpression.js +53 -0
  28. package/dist/dev/src/components/FunctionCallExpression.js.map +1 -0
  29. package/dist/dev/src/components/FunctionDeclaration.js +45 -0
  30. package/dist/dev/src/components/FunctionDeclaration.js.map +1 -0
  31. package/dist/dev/src/components/FutureStatement.js +31 -0
  32. package/dist/dev/src/components/FutureStatement.js.map +1 -0
  33. package/dist/dev/src/components/ImportStatement.js +167 -0
  34. package/dist/dev/src/components/ImportStatement.js.map +1 -0
  35. package/dist/dev/src/components/LexicalScope.js +26 -0
  36. package/dist/dev/src/components/LexicalScope.js.map +1 -0
  37. package/dist/dev/src/components/MemberExpression.js +290 -0
  38. package/dist/dev/src/components/MemberExpression.js.map +1 -0
  39. package/dist/dev/src/components/MemberScope.js +23 -0
  40. package/dist/dev/src/components/MemberScope.js.map +1 -0
  41. package/dist/dev/src/components/MethodBase.js +40 -0
  42. package/dist/dev/src/components/MethodBase.js.map +1 -0
  43. package/dist/dev/src/components/MethodDeclaration.js +38 -0
  44. package/dist/dev/src/components/MethodDeclaration.js.map +1 -0
  45. package/dist/dev/src/components/PropertyDeclaration.js +287 -0
  46. package/dist/dev/src/components/PropertyDeclaration.js.map +1 -0
  47. package/dist/dev/src/components/PyDoc.js +1478 -0
  48. package/dist/dev/src/components/PyDoc.js.map +1 -0
  49. package/dist/dev/src/components/PythonBlock.js +35 -0
  50. package/dist/dev/src/components/PythonBlock.js.map +1 -0
  51. package/dist/dev/src/components/Reference.js +23 -0
  52. package/dist/dev/src/components/Reference.js.map +1 -0
  53. package/dist/dev/src/components/SourceFile.js +385 -0
  54. package/dist/dev/src/components/SourceFile.js.map +1 -0
  55. package/dist/dev/src/components/StatementList.js +34 -0
  56. package/dist/dev/src/components/StatementList.js.map +1 -0
  57. package/dist/dev/src/components/StaticMethodDeclaration.js +40 -0
  58. package/dist/dev/src/components/StaticMethodDeclaration.js.map +1 -0
  59. package/dist/dev/src/components/TypeArguments.js +22 -0
  60. package/dist/dev/src/components/TypeArguments.js.map +1 -0
  61. package/dist/dev/src/components/TypeRefContext.js +33 -0
  62. package/dist/dev/src/components/TypeRefContext.js.map +1 -0
  63. package/dist/dev/src/components/TypeReference.js +67 -0
  64. package/dist/dev/src/components/TypeReference.js.map +1 -0
  65. package/dist/dev/src/components/UnionTypeExpression.js +57 -0
  66. package/dist/dev/src/components/UnionTypeExpression.js.map +1 -0
  67. package/dist/dev/src/components/VariableDeclaration.js +150 -0
  68. package/dist/dev/src/components/VariableDeclaration.js.map +1 -0
  69. package/dist/dev/src/components/index.js +32 -0
  70. package/dist/dev/src/components/index.js.map +1 -0
  71. package/dist/dev/src/context/index.js +2 -0
  72. package/dist/dev/src/context/index.js.map +1 -0
  73. package/dist/dev/src/context/type-ref-context.js +17 -0
  74. package/dist/dev/src/context/type-ref-context.js.map +1 -0
  75. package/dist/dev/src/create-module.js +64 -0
  76. package/dist/dev/src/create-module.js.map +1 -0
  77. package/dist/dev/src/index.js +8 -0
  78. package/dist/dev/src/index.js.map +1 -0
  79. package/dist/dev/src/name-conflict-resolver.js +8 -0
  80. package/dist/dev/src/name-conflict-resolver.js.map +1 -0
  81. package/dist/dev/src/name-policy.js +48 -0
  82. package/dist/dev/src/name-policy.js.map +1 -0
  83. package/dist/dev/src/parameter-descriptor.js +8 -0
  84. package/dist/dev/src/parameter-descriptor.js.map +1 -0
  85. package/dist/dev/src/symbol-creation.js +58 -0
  86. package/dist/dev/src/symbol-creation.js.map +1 -0
  87. package/dist/dev/src/symbols/factories.js +28 -0
  88. package/dist/dev/src/symbols/factories.js.map +1 -0
  89. package/dist/dev/src/symbols/index.js +8 -0
  90. package/dist/dev/src/symbols/index.js.map +1 -0
  91. package/dist/dev/src/symbols/python-lexical-scope.js +15 -0
  92. package/dist/dev/src/symbols/python-lexical-scope.js.map +1 -0
  93. package/dist/dev/src/symbols/python-member-scope.js +7 -0
  94. package/dist/dev/src/symbols/python-member-scope.js.map +1 -0
  95. package/dist/dev/src/symbols/python-module-scope.js +86 -0
  96. package/dist/dev/src/symbols/python-module-scope.js.map +1 -0
  97. package/dist/dev/src/symbols/python-output-symbol.js +73 -0
  98. package/dist/dev/src/symbols/python-output-symbol.js.map +1 -0
  99. package/dist/dev/src/symbols/reference.js +87 -0
  100. package/dist/dev/src/symbols/reference.js.map +1 -0
  101. package/dist/dev/src/symbols/scopes.js +13 -0
  102. package/dist/dev/src/symbols/scopes.js.map +1 -0
  103. package/dist/dev/src/utils.js +13 -0
  104. package/dist/dev/src/utils.js.map +1 -0
  105. package/dist/dev/test/callsignatures.test.js +482 -0
  106. package/dist/dev/test/callsignatures.test.js.map +1 -0
  107. package/dist/dev/test/class-method-declaration.test.js +85 -0
  108. package/dist/dev/test/class-method-declaration.test.js.map +1 -0
  109. package/dist/dev/test/classdeclarations.test.js +654 -0
  110. package/dist/dev/test/classdeclarations.test.js.map +1 -0
  111. package/dist/dev/test/classinstantiations.test.js +281 -0
  112. package/dist/dev/test/classinstantiations.test.js.map +1 -0
  113. package/dist/dev/test/constructordeclaration.test.js +86 -0
  114. package/dist/dev/test/constructordeclaration.test.js.map +1 -0
  115. package/dist/dev/test/dataclassdeclarations.test.js +1068 -0
  116. package/dist/dev/test/dataclassdeclarations.test.js.map +1 -0
  117. package/dist/dev/test/dundermethoddeclaration.test.js +93 -0
  118. package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -0
  119. package/dist/dev/test/enums.test.js +263 -0
  120. package/dist/dev/test/enums.test.js.map +1 -0
  121. package/dist/dev/test/externals.test.js +307 -0
  122. package/dist/dev/test/externals.test.js.map +1 -0
  123. package/dist/dev/test/factories.test.js +122 -0
  124. package/dist/dev/test/factories.test.js.map +1 -0
  125. package/dist/dev/test/functioncallexpressions.test.js +257 -0
  126. package/dist/dev/test/functioncallexpressions.test.js.map +1 -0
  127. package/dist/dev/test/functiondeclaration.test.js +817 -0
  128. package/dist/dev/test/functiondeclaration.test.js.map +1 -0
  129. package/dist/dev/test/imports.test.js +372 -0
  130. package/dist/dev/test/imports.test.js.map +1 -0
  131. package/dist/dev/test/memberexpressions.test.js +1668 -0
  132. package/dist/dev/test/memberexpressions.test.js.map +1 -0
  133. package/dist/dev/test/methoddeclaration.test.js +344 -0
  134. package/dist/dev/test/methoddeclaration.test.js.map +1 -0
  135. package/dist/dev/test/namepolicies.test.js +154 -0
  136. package/dist/dev/test/namepolicies.test.js.map +1 -0
  137. package/dist/dev/test/propertydeclaration.test.js +354 -0
  138. package/dist/dev/test/propertydeclaration.test.js.map +1 -0
  139. package/dist/dev/test/pydocs.test.js +1675 -0
  140. package/dist/dev/test/pydocs.test.js.map +1 -0
  141. package/dist/dev/test/references.test.js +66 -0
  142. package/dist/dev/test/references.test.js.map +1 -0
  143. package/dist/dev/test/sourcefiles.test.js +1802 -0
  144. package/dist/dev/test/sourcefiles.test.js.map +1 -0
  145. package/dist/dev/test/staticmethoddeclaration.test.js +85 -0
  146. package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -0
  147. package/dist/dev/test/type-checking-imports.test.js +617 -0
  148. package/dist/dev/test/type-checking-imports.test.js.map +1 -0
  149. package/dist/dev/test/typereference.test.js +79 -0
  150. package/dist/dev/test/typereference.test.js.map +1 -0
  151. package/dist/dev/test/uniontypeexpression.test.js +307 -0
  152. package/dist/dev/test/uniontypeexpression.test.js.map +1 -0
  153. package/dist/dev/test/utils.js +100 -0
  154. package/dist/dev/test/utils.js.map +1 -0
  155. package/dist/dev/test/values.test.js +182 -0
  156. package/dist/dev/test/values.test.js.map +1 -0
  157. package/dist/dev/test/variables.test.js +363 -0
  158. package/dist/dev/test/variables.test.js.map +1 -0
  159. package/dist/src/components/CallSignature.d.ts.map +1 -1
  160. package/dist/src/components/CallSignature.js +12 -3
  161. package/dist/src/components/CallSignature.js.map +1 -1
  162. package/dist/src/components/ImportStatement.d.ts +12 -0
  163. package/dist/src/components/ImportStatement.d.ts.map +1 -1
  164. package/dist/src/components/ImportStatement.js +45 -3
  165. package/dist/src/components/ImportStatement.js.map +1 -1
  166. package/dist/src/components/Reference.d.ts.map +1 -1
  167. package/dist/src/components/Reference.js +5 -1
  168. package/dist/src/components/Reference.js.map +1 -1
  169. package/dist/src/components/SourceFile.d.ts +1 -1
  170. package/dist/src/components/SourceFile.d.ts.map +1 -1
  171. package/dist/src/components/SourceFile.js +46 -7
  172. package/dist/src/components/SourceFile.js.map +1 -1
  173. package/dist/src/components/TypeRefContext.d.ts +26 -0
  174. package/dist/src/components/TypeRefContext.d.ts.map +1 -0
  175. package/dist/src/components/TypeRefContext.js +29 -0
  176. package/dist/src/components/TypeRefContext.js.map +1 -0
  177. package/dist/src/components/TypeReference.d.ts +5 -0
  178. package/dist/src/components/TypeReference.d.ts.map +1 -1
  179. package/dist/src/components/TypeReference.js +19 -9
  180. package/dist/src/components/TypeReference.js.map +1 -1
  181. package/dist/src/components/VariableDeclaration.d.ts.map +1 -1
  182. package/dist/src/components/VariableDeclaration.js +7 -2
  183. package/dist/src/components/VariableDeclaration.js.map +1 -1
  184. package/dist/src/components/index.d.ts +1 -1
  185. package/dist/src/components/index.d.ts.map +1 -1
  186. package/dist/src/components/index.js +1 -1
  187. package/dist/src/components/index.js.map +1 -1
  188. package/dist/src/context/index.d.ts +2 -0
  189. package/dist/src/context/index.d.ts.map +1 -0
  190. package/dist/src/context/index.js +2 -0
  191. package/dist/src/context/index.js.map +1 -0
  192. package/dist/src/context/type-ref-context.d.ts +13 -0
  193. package/dist/src/context/type-ref-context.d.ts.map +1 -0
  194. package/dist/src/context/type-ref-context.js +17 -0
  195. package/dist/src/context/type-ref-context.js.map +1 -0
  196. package/dist/src/name-conflict-resolver.d.ts +2 -2
  197. package/dist/src/name-conflict-resolver.d.ts.map +1 -1
  198. package/dist/src/name-conflict-resolver.js +2 -2
  199. package/dist/src/name-conflict-resolver.js.map +1 -1
  200. package/dist/src/symbols/python-module-scope.d.ts +13 -1
  201. package/dist/src/symbols/python-module-scope.d.ts.map +1 -1
  202. package/dist/src/symbols/python-module-scope.js +36 -2
  203. package/dist/src/symbols/python-module-scope.js.map +1 -1
  204. package/dist/src/symbols/python-output-symbol.d.ts +11 -0
  205. package/dist/src/symbols/python-output-symbol.d.ts.map +1 -1
  206. package/dist/src/symbols/python-output-symbol.js +26 -2
  207. package/dist/src/symbols/python-output-symbol.js.map +1 -1
  208. package/dist/src/symbols/reference.d.ts +8 -1
  209. package/dist/src/symbols/reference.d.ts.map +1 -1
  210. package/dist/src/symbols/reference.js +4 -2
  211. package/dist/src/symbols/reference.js.map +1 -1
  212. package/dist/test/dataclassdeclarations.test.js +5 -2
  213. package/dist/test/dataclassdeclarations.test.js.map +1 -1
  214. package/dist/test/externals.test.js +8 -2
  215. package/dist/test/externals.test.js.map +1 -1
  216. package/dist/test/functiondeclaration.test.js +6 -3
  217. package/dist/test/functiondeclaration.test.js.map +1 -1
  218. package/dist/test/imports.test.js +3 -3
  219. package/dist/test/imports.test.js.map +1 -1
  220. package/dist/test/references.test.js +1 -1
  221. package/dist/test/references.test.js.map +1 -1
  222. package/dist/test/sourcefiles.test.js +26 -26
  223. package/dist/test/sourcefiles.test.js.map +1 -1
  224. package/dist/test/type-checking-imports.test.d.ts +2 -0
  225. package/dist/test/type-checking-imports.test.d.ts.map +1 -0
  226. package/dist/test/type-checking-imports.test.js +437 -0
  227. package/dist/test/type-checking-imports.test.js.map +1 -0
  228. package/dist/test/uniontypeexpression.test.js +4 -1
  229. package/dist/test/uniontypeexpression.test.js.map +1 -1
  230. package/dist/test/variables.test.js +4 -1
  231. package/dist/test/variables.test.js.map +1 -1
  232. package/dist/tsconfig.tsbuildinfo +1 -1
  233. package/docs/api/components/AttributeDoc.md +36 -0
  234. package/docs/api/components/CallSignature.md +62 -0
  235. package/docs/api/components/CallSignatureParameters.md +49 -0
  236. package/docs/api/components/ClassDeclaration.md +67 -0
  237. package/docs/api/components/ClassDoc.md +55 -0
  238. package/docs/api/components/ClassEnumDeclaration.md +111 -0
  239. package/docs/api/components/ClassInstantiation.md +44 -0
  240. package/docs/api/components/ClassMethodDeclaration.md +31 -0
  241. package/docs/api/components/ConstructorDeclaration.md +27 -0
  242. package/docs/api/components/DataclassDeclaration.md +55 -0
  243. package/docs/api/components/Declaration.md +41 -0
  244. package/docs/api/components/DunderMethodDeclaration.md +31 -0
  245. package/docs/api/components/EnumMember.md +61 -0
  246. package/docs/api/components/ExceptionDoc.md +55 -0
  247. package/docs/api/components/FunctionCallExpression.md +43 -0
  248. package/docs/api/components/FunctionDeclaration.md +50 -0
  249. package/docs/api/components/FunctionDoc.md +61 -0
  250. package/docs/api/components/FunctionalEnumDeclaration.md +79 -0
  251. package/docs/api/components/FutureStatement.md +51 -0
  252. package/docs/api/components/GeneratorDoc.md +58 -0
  253. package/docs/api/components/InlineDoc.md +29 -0
  254. package/docs/api/components/LexicalScope.md +65 -0
  255. package/docs/api/components/MemberExpression.md +53 -0
  256. package/docs/api/components/MemberScope.md +28 -0
  257. package/docs/api/components/MethodDeclaration.md +49 -0
  258. package/docs/api/components/MethodDoc.md +61 -0
  259. package/docs/api/components/ModuleDoc.md +52 -0
  260. package/docs/api/components/PropertyDeclaration.md +46 -0
  261. package/docs/api/components/PropertyDoc.md +52 -0
  262. package/docs/api/components/PyDoc.md +29 -0
  263. package/docs/api/components/PyDocExample.md +29 -0
  264. package/docs/api/components/PythonBlock.md +47 -0
  265. package/docs/api/components/Reference.md +31 -0
  266. package/docs/api/components/SimpleCommentBlock.md +27 -0
  267. package/docs/api/components/SimpleInlineComment.md +27 -0
  268. package/docs/api/components/SourceFile.md +83 -0
  269. package/docs/api/components/StatementList.md +47 -0
  270. package/docs/api/components/StaticMethodDeclaration.md +31 -0
  271. package/docs/api/components/TypeArguments.md +27 -0
  272. package/docs/api/components/TypeRefContext.md +41 -0
  273. package/docs/api/components/TypeReference.md +37 -0
  274. package/docs/api/components/UnionTypeExpression.md +27 -0
  275. package/docs/api/components/VariableDeclaration.md +87 -0
  276. package/docs/api/components/index.md +46 -0
  277. package/docs/api/components/useSourceFile.md +19 -0
  278. package/docs/api/contexts/PythonSourceFile-context.md +18 -0
  279. package/docs/api/contexts/index.md +3 -0
  280. package/docs/api/functions/createFunctionSymbol.md +23 -0
  281. package/docs/api/functions/createMethodSymbol.md +23 -0
  282. package/docs/api/functions/createModule.md +18 -0
  283. package/docs/api/functions/createPythonNamePolicy.md +17 -0
  284. package/docs/api/functions/getCallSignatureProps.md +21 -0
  285. package/docs/api/functions/index.md +13 -0
  286. package/docs/api/functions/isParameterDescriptor.md +18 -0
  287. package/docs/api/functions/isTypeRefContext.md +17 -0
  288. package/docs/api/functions/ref.md +25 -0
  289. package/docs/api/functions/usePythonLexicalScope.md +17 -0
  290. package/docs/api/functions/usePythonNamePolicy.md +17 -0
  291. package/docs/api/functions/usePythonScope.md +17 -0
  292. package/docs/api/index.md +7 -0
  293. package/docs/api/types/AddImportOptions.md +7 -0
  294. package/docs/api/types/BaseDeclarationProps.md +10 -0
  295. package/docs/api/types/CommonFunctionProps.md +15 -0
  296. package/docs/api/types/CreateModuleProps.md +8 -0
  297. package/docs/api/types/CreatePythonSymbolFunctionOptions.md +9 -0
  298. package/docs/api/types/DataclassDecoratorKey.md +5 -0
  299. package/docs/api/types/DataclassDecoratorKwargs.md +5 -0
  300. package/docs/api/types/EnumPropsBase.md +11 -0
  301. package/docs/api/types/GoogleStyleDocAttributeProps.md +9 -0
  302. package/docs/api/types/ImportRecordProps.md +7 -0
  303. package/docs/api/types/ImportRecords.md +8 -0
  304. package/docs/api/types/ImportedSymbol.md +10 -0
  305. package/docs/api/types/LexicalScopeProps.md +5 -0
  306. package/docs/api/types/MemberExpressionPartProps.md +13 -0
  307. package/docs/api/types/ModuleDescriptor.md +7 -0
  308. package/docs/api/types/ModuleRefkeys.md +7 -0
  309. package/docs/api/types/NamedMap.md +7 -0
  310. package/docs/api/types/ParameterDescriptor.md +13 -0
  311. package/docs/api/types/ParameterMarker.md +5 -0
  312. package/docs/api/types/PropertyMethodDeclarationProps.md +9 -0
  313. package/docs/api/types/PythonElements.md +5 -0
  314. package/docs/api/types/PythonLexicalScope.md +11 -0
  315. package/docs/api/types/PythonMemberScope.md +9 -0
  316. package/docs/api/types/PythonModuleScope.md +13 -0
  317. package/docs/api/types/PythonOutputScope.md +5 -0
  318. package/docs/api/types/PythonOutputSymbol.md +21 -0
  319. package/docs/api/types/PythonOutputSymbolOptions.md +10 -0
  320. package/docs/api/types/RefOptions.md +7 -0
  321. package/docs/api/types/SubscriptionProps.md +9 -0
  322. package/docs/api/types/index.md +31 -0
  323. package/docs/api/variables/abcModule.md +7 -0
  324. package/docs/api/variables/dataclassDecoratorKeySet.md +5 -0
  325. package/docs/api/variables/dataclassDecoratorKeys.md +7 -0
  326. package/docs/api/variables/dataclassesModule.md +7 -0
  327. package/docs/api/variables/enumModule.md +7 -0
  328. package/docs/api/variables/index.md +8 -0
  329. package/docs/api/variables/requestsModule.md +8 -0
  330. package/package.json +7 -5
  331. package/src/components/CallSignature.tsx +6 -2
  332. package/src/components/ImportStatement.tsx +51 -4
  333. package/src/components/Reference.tsx +3 -1
  334. package/src/components/SourceFile.tsx +44 -8
  335. package/src/components/TypeRefContext.tsx +36 -0
  336. package/src/components/TypeReference.tsx +15 -7
  337. package/src/components/VariableDeclaration.tsx +5 -1
  338. package/src/components/index.ts +1 -1
  339. package/src/context/index.ts +1 -0
  340. package/src/context/type-ref-context.tsx +16 -0
  341. package/src/name-conflict-resolver.ts +4 -10
  342. package/src/symbols/python-module-scope.ts +55 -2
  343. package/src/symbols/python-output-symbol.ts +32 -1
  344. package/src/symbols/reference.tsx +10 -0
  345. package/temp/api.json +441 -336
  346. package/test/dataclassdeclarations.test.tsx +8 -2
  347. package/test/externals.test.tsx +8 -2
  348. package/test/functiondeclaration.test.tsx +6 -3
  349. package/test/imports.test.tsx +6 -6
  350. package/test/references.test.tsx +1 -1
  351. package/test/sourcefiles.test.tsx +13 -13
  352. package/test/type-checking-imports.test.tsx +363 -0
  353. package/test/uniontypeexpression.test.tsx +4 -1
  354. package/test/variables.test.tsx +4 -1
  355. package/vitest.config.ts +8 -0
@@ -0,0 +1,817 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { code, namekey, refkey } from "@alloy-js/core";
3
+ import { d } from "@alloy-js/core/testing";
4
+ import { describe, expect, it } from "vitest";
5
+ import * as py from "../src/index.js";
6
+ import { abcModule } from "../src/index.js";
7
+ import { assertFileContents, toSourceText, toSourceTextMultiple } from "./utils.js";
8
+ describe("Function Declaration", () => {
9
+ it("renders a function with no body as 'pass'", () => {
10
+ const result = toSourceText([_$createComponent(py.FunctionDeclaration, {
11
+ name: "foo"
12
+ }, {
13
+ fileName: import.meta.url,
14
+ lineNumber: 14,
15
+ columnNumber: 34
16
+ })]);
17
+ expect(result).toRenderTo(d`
18
+ def foo():
19
+ pass
20
+
21
+
22
+ `);
23
+ });
24
+ it("takes a namekey", () => {
25
+ const result = toSourceText([_$createComponent(py.FunctionDeclaration, {
26
+ get name() {
27
+ return namekey("foo-bar");
28
+ }
29
+ }, {
30
+ fileName: import.meta.url,
31
+ lineNumber: 25,
32
+ columnNumber: 7
33
+ })]);
34
+ expect(result).toRenderTo(d`
35
+ def foo_bar():
36
+ pass
37
+
38
+
39
+ `);
40
+ });
41
+ it("renders a function with no body as 'pass' with return type", () => {
42
+ const result = toSourceText([_$createComponent(py.FunctionDeclaration, {
43
+ name: "foo",
44
+ returnType: "int"
45
+ }, {
46
+ fileName: import.meta.url,
47
+ lineNumber: 37,
48
+ columnNumber: 7
49
+ })]);
50
+ expect(result).toRenderTo(d`
51
+ def foo() -> int:
52
+ pass
53
+
54
+
55
+ `);
56
+ });
57
+ it("renders a function that calls another function", () => {
58
+ const refkeyFoo = refkey();
59
+ const result = toSourceText([_$createComponent(py.StatementList, {
60
+ get children() {
61
+ return [_$createComponent(py.FunctionDeclaration, {
62
+ name: "foo",
63
+ returnType: "int",
64
+ refkey: refkeyFoo
65
+ }, {
66
+ fileName: import.meta.url,
67
+ lineNumber: 51,
68
+ columnNumber: 9
69
+ }), _$createComponent(py.FunctionDeclaration, {
70
+ name: "bar",
71
+ returnType: "int",
72
+ get children() {
73
+ return _$createComponent(py.VariableDeclaration, {
74
+ name: "result",
75
+ type: "int",
76
+ get initializer() {
77
+ return _$createComponent(py.FunctionCallExpression, {
78
+ target: refkeyFoo,
79
+ args: []
80
+ }, {
81
+ fileName: import.meta.url,
82
+ lineNumber: 61,
83
+ columnNumber: 15
84
+ });
85
+ }
86
+ }, {
87
+ fileName: import.meta.url,
88
+ lineNumber: 57,
89
+ columnNumber: 11
90
+ });
91
+ }
92
+ }, {
93
+ fileName: import.meta.url,
94
+ lineNumber: 56,
95
+ columnNumber: 9
96
+ })];
97
+ }
98
+ }, {
99
+ fileName: import.meta.url,
100
+ lineNumber: 50,
101
+ columnNumber: 7
102
+ })]);
103
+ expect(result).toRenderTo(d`
104
+ def foo() -> int:
105
+ pass
106
+
107
+ def bar() -> int:
108
+ result: int = foo()
109
+
110
+
111
+ `);
112
+ });
113
+ it("renders a function with parameters", () => {
114
+ const result = toSourceText([_$createComponent(py.FunctionDeclaration, {
115
+ name: "baz",
116
+ parameters: [{
117
+ name: "x",
118
+ type: "int"
119
+ }, {
120
+ name: "y",
121
+ default: 0
122
+ }, {
123
+ name: "z",
124
+ type: "int",
125
+ default: 42
126
+ }],
127
+ args: true,
128
+ kwargs: true,
129
+ children: "print(x, y)"
130
+ }, {
131
+ fileName: import.meta.url,
132
+ lineNumber: 80,
133
+ columnNumber: 7
134
+ })]);
135
+ expect(result).toRenderTo(d`
136
+ def baz(x: int, y=0, z: int = 42, *args, **kwargs):
137
+ print(x, y)
138
+
139
+
140
+ `);
141
+ });
142
+ it("renders an __init__ function with no body as 'pass'", () => {
143
+ const result = toSourceText([_$createComponent(py.ClassDeclaration, {
144
+ name: "MyClass",
145
+ get children() {
146
+ return _$createComponent(py.DunderMethodDeclaration, {
147
+ name: "__init__",
148
+ parameters: [{
149
+ name: "x"
150
+ }]
151
+ }, {
152
+ fileName: import.meta.url,
153
+ lineNumber: 106,
154
+ columnNumber: 9
155
+ });
156
+ }
157
+ }, {
158
+ fileName: import.meta.url,
159
+ lineNumber: 105,
160
+ columnNumber: 7
161
+ })]);
162
+ expect(result).toRenderTo(d`
163
+ class MyClass:
164
+ def __init__(self, x):
165
+ pass
166
+
167
+
168
+
169
+ `);
170
+ });
171
+ it("can be an async function", () => {
172
+ expect(toSourceText([_$createComponent(py.FunctionDeclaration, {
173
+ async: true,
174
+ name: "foo"
175
+ }, {
176
+ fileName: import.meta.url,
177
+ lineNumber: 123,
178
+ columnNumber: 26
179
+ })])).toBe(d`
180
+ async def foo():
181
+ pass
182
+
183
+ `);
184
+ });
185
+ it("can be an async function with returnType", () => {
186
+ expect(toSourceText([_$createComponent(py.FunctionDeclaration, {
187
+ async: true,
188
+ name: "foo",
189
+ returnType: "Foo"
190
+ }, {
191
+ fileName: import.meta.url,
192
+ lineNumber: 133,
193
+ columnNumber: 9
194
+ })])).toBe(d`
195
+ async def foo() -> Foo:
196
+ pass
197
+
198
+ `);
199
+ });
200
+ it("can be an async function with returnType element with Reference", () => {
201
+ expect(toSourceText([_$createComponent(py.StatementList, {
202
+ get children() {
203
+ return [_$createComponent(py.ClassDeclaration, {
204
+ name: "Foo",
205
+ get refkey() {
206
+ return refkey("Foo");
207
+ }
208
+ }, {
209
+ fileName: import.meta.url,
210
+ lineNumber: 146,
211
+ columnNumber: 11
212
+ }), _$createComponent(py.FunctionDeclaration, {
213
+ async: true,
214
+ name: "foo",
215
+ get returnType() {
216
+ return refkey("Foo");
217
+ }
218
+ }, {
219
+ fileName: import.meta.url,
220
+ lineNumber: 147,
221
+ columnNumber: 11
222
+ })];
223
+ }
224
+ }, {
225
+ fileName: import.meta.url,
226
+ lineNumber: 145,
227
+ columnNumber: 9
228
+ })])).toBe(d`
229
+ class Foo:
230
+ pass
231
+
232
+ async def foo() -> Foo:
233
+ pass
234
+
235
+ `);
236
+ });
237
+ it("can be an async function with returnType element with list of References", () => {
238
+ expect(toSourceText([_$createComponent(py.StatementList, {
239
+ get children() {
240
+ return [_$createComponent(py.ClassDeclaration, {
241
+ name: "Foo",
242
+ get refkey() {
243
+ return refkey("Foo");
244
+ }
245
+ }, {
246
+ fileName: import.meta.url,
247
+ lineNumber: 164,
248
+ columnNumber: 11
249
+ }), _$createComponent(py.FunctionDeclaration, {
250
+ async: true,
251
+ name: "foo",
252
+ get returnType() {
253
+ return code`list[${refkey("Foo")}]`;
254
+ }
255
+ }, {
256
+ fileName: import.meta.url,
257
+ lineNumber: 165,
258
+ columnNumber: 11
259
+ })];
260
+ }
261
+ }, {
262
+ fileName: import.meta.url,
263
+ lineNumber: 163,
264
+ columnNumber: 9
265
+ })])).toBe(d`
266
+ class Foo:
267
+ pass
268
+
269
+ async def foo() -> list[Foo]:
270
+ pass
271
+
272
+ `);
273
+ });
274
+ it("can be an async dunder method", () => {
275
+ const decl = _$createComponent(py.StatementList, {
276
+ get children() {
277
+ return _$createComponent(py.ClassDeclaration, {
278
+ name: "MyClass",
279
+ get children() {
280
+ return _$createComponent(py.StatementList, {
281
+ get children() {
282
+ return _$createComponent(py.DunderMethodDeclaration, {
283
+ async: true,
284
+ name: "__aenter__",
285
+ returnType: "MyClass",
286
+ children: "return self"
287
+ }, {
288
+ fileName: import.meta.url,
289
+ lineNumber: 187,
290
+ columnNumber: 13
291
+ });
292
+ }
293
+ }, {
294
+ fileName: import.meta.url,
295
+ lineNumber: 186,
296
+ columnNumber: 11
297
+ });
298
+ }
299
+ }, {
300
+ fileName: import.meta.url,
301
+ lineNumber: 185,
302
+ columnNumber: 9
303
+ });
304
+ }
305
+ }, {
306
+ fileName: import.meta.url,
307
+ lineNumber: 184,
308
+ columnNumber: 7
309
+ });
310
+ expect(toSourceText([decl])).toBe(d`
311
+ class MyClass:
312
+ async def __aenter__(self) -> MyClass:
313
+ return self
314
+
315
+
316
+ `);
317
+ });
318
+ it("can be an async constructor", () => {
319
+ const decl = _$createComponent(py.StatementList, {
320
+ get children() {
321
+ return _$createComponent(py.ClassDeclaration, {
322
+ name: "MyClass",
323
+ get children() {
324
+ return _$createComponent(py.StatementList, {
325
+ get children() {
326
+ return _$createComponent(py.ConstructorDeclaration, {
327
+ async: true,
328
+ returnType: "MyClass",
329
+ children: "return super().__new__(cls)"
330
+ }, {
331
+ fileName: import.meta.url,
332
+ lineNumber: 213,
333
+ columnNumber: 13
334
+ });
335
+ }
336
+ }, {
337
+ fileName: import.meta.url,
338
+ lineNumber: 212,
339
+ columnNumber: 11
340
+ });
341
+ }
342
+ }, {
343
+ fileName: import.meta.url,
344
+ lineNumber: 211,
345
+ columnNumber: 9
346
+ });
347
+ }
348
+ }, {
349
+ fileName: import.meta.url,
350
+ lineNumber: 210,
351
+ columnNumber: 7
352
+ });
353
+ expect(toSourceText([decl])).toBe(d`
354
+ class MyClass:
355
+ async def __new__(cls) -> MyClass:
356
+ return super().__new__(cls)
357
+
358
+
359
+ `);
360
+ });
361
+ it("supports parameters", () => {
362
+ const decl = _$createComponent(py.FunctionDeclaration, {
363
+ name: "foo",
364
+ parameters: [{
365
+ name: "a"
366
+ }, {
367
+ name: "b"
368
+ }],
369
+ children: "return a + b"
370
+ }, {
371
+ fileName: import.meta.url,
372
+ lineNumber: 232,
373
+ columnNumber: 7
374
+ });
375
+ expect(toSourceText([decl])).toBe(d`
376
+ def foo(a, b):
377
+ return a + b
378
+
379
+ `);
380
+ });
381
+ it("supports type parameters", () => {
382
+ const decl = _$createComponent(py.FunctionDeclaration, {
383
+ name: "foo",
384
+ parameters: [{
385
+ name: "a"
386
+ }, {
387
+ name: "b"
388
+ }],
389
+ typeParameters: ["T", "U"],
390
+ children: "return a + b"
391
+ }, {
392
+ fileName: import.meta.url,
393
+ lineNumber: 248,
394
+ columnNumber: 7
395
+ });
396
+ expect(toSourceText([decl])).toBe(d`
397
+ def foo[T, U](a, b):
398
+ return a + b
399
+
400
+ `);
401
+ });
402
+ it("renders abstract methods", () => {
403
+ const parameters = [{
404
+ name: "x",
405
+ type: "int"
406
+ }];
407
+ const decl = _$createComponent(py.StatementList, {
408
+ get children() {
409
+ return _$createComponent(py.ClassDeclaration, {
410
+ name: "MyClass",
411
+ get children() {
412
+ return _$createComponent(py.StatementList, {
413
+ get children() {
414
+ return [_$createComponent(py.MethodDeclaration, {
415
+ name: "methoddef",
416
+ parameters: parameters,
417
+ abstract: true
418
+ }, {
419
+ fileName: import.meta.url,
420
+ lineNumber: 269,
421
+ columnNumber: 13
422
+ }), _$createComponent(py.ClassMethodDeclaration, {
423
+ name: "classdef",
424
+ parameters: parameters,
425
+ abstract: true
426
+ }, {
427
+ fileName: import.meta.url,
428
+ lineNumber: 274,
429
+ columnNumber: 13
430
+ }), _$createComponent(py.StaticMethodDeclaration, {
431
+ name: "staticdef",
432
+ parameters: parameters,
433
+ abstract: true
434
+ }, {
435
+ fileName: import.meta.url,
436
+ lineNumber: 279,
437
+ columnNumber: 13
438
+ })];
439
+ }
440
+ }, {
441
+ fileName: import.meta.url,
442
+ lineNumber: 268,
443
+ columnNumber: 11
444
+ });
445
+ }
446
+ }, {
447
+ fileName: import.meta.url,
448
+ lineNumber: 267,
449
+ columnNumber: 9
450
+ });
451
+ }
452
+ }, {
453
+ fileName: import.meta.url,
454
+ lineNumber: 266,
455
+ columnNumber: 7
456
+ });
457
+ expect(toSourceText([decl], {
458
+ externals: [abcModule]
459
+ })).toBe(d`
460
+ from abc import abstractmethod
461
+
462
+
463
+ class MyClass:
464
+ @abstractmethod
465
+ def methoddef(self, x: int):
466
+ pass
467
+
468
+ @classmethod
469
+ @abstractmethod
470
+ def classdef(cls, x: int):
471
+ pass
472
+
473
+ @staticmethod
474
+ @abstractmethod
475
+ def staticdef(x: int):
476
+ pass
477
+
478
+
479
+ `);
480
+ });
481
+ it("renders dunder methods with parameters", () => {
482
+ const parameters = [{
483
+ name: "x",
484
+ type: "int"
485
+ }];
486
+ const decl = _$createComponent(py.ClassDeclaration, {
487
+ name: "MyClass",
488
+ get children() {
489
+ return _$createComponent(py.StatementList, {
490
+ get children() {
491
+ return [_$createComponent(py.DunderMethodDeclaration, {
492
+ name: "__init__",
493
+ parameters: parameters,
494
+ children: "self.attribute = \"value\""
495
+ }, {
496
+ fileName: import.meta.url,
497
+ lineNumber: 316,
498
+ columnNumber: 11
499
+ }), _$createComponent(py.DunderMethodDeclaration, {
500
+ name: "__repr__",
501
+ parameters: parameters,
502
+ children: "return \"MyClass\""
503
+ }, {
504
+ fileName: import.meta.url,
505
+ lineNumber: 319,
506
+ columnNumber: 11
507
+ })];
508
+ }
509
+ }, {
510
+ fileName: import.meta.url,
511
+ lineNumber: 315,
512
+ columnNumber: 9
513
+ });
514
+ }
515
+ }, {
516
+ fileName: import.meta.url,
517
+ lineNumber: 314,
518
+ columnNumber: 7
519
+ });
520
+ expect(toSourceText([decl])).toBe(d`
521
+ class MyClass:
522
+ def __init__(self, x: int):
523
+ self.attribute = "value"
524
+
525
+ def __repr__(self, x: int):
526
+ return "MyClass"
527
+
528
+
529
+ `);
530
+ });
531
+ it("renders dunder methods __new__", () => {
532
+ const decl = _$createComponent(py.ClassDeclaration, {
533
+ name: "MyClass",
534
+ get children() {
535
+ return _$createComponent(py.StatementList, {
536
+ get children() {
537
+ return _$createComponent(py.ConstructorDeclaration, {
538
+ args: true,
539
+ kwargs: true,
540
+ children: "pass"
541
+ }, {
542
+ fileName: import.meta.url,
543
+ lineNumber: 342,
544
+ columnNumber: 11
545
+ });
546
+ }
547
+ }, {
548
+ fileName: import.meta.url,
549
+ lineNumber: 341,
550
+ columnNumber: 9
551
+ });
552
+ }
553
+ }, {
554
+ fileName: import.meta.url,
555
+ lineNumber: 340,
556
+ columnNumber: 7
557
+ });
558
+ expect(toSourceText([decl])).toBe(d`
559
+ class MyClass:
560
+ def __new__(cls, *args, **kwargs):
561
+ pass
562
+
563
+
564
+ `);
565
+ });
566
+ it("renders nested functions", () => {
567
+ const parameters = [{
568
+ name: "x",
569
+ type: "int"
570
+ }];
571
+ const parameters_nested = [{
572
+ name: "y",
573
+ type: "int"
574
+ }];
575
+ const parameters_nested_nested = [{
576
+ name: "z",
577
+ type: "int"
578
+ }];
579
+ const fooRef = refkey();
580
+ const barRef = refkey();
581
+ const foobarRef = refkey();
582
+ const decl = _$createComponent(py.FunctionDeclaration, {
583
+ name: "foo",
584
+ parameters: parameters,
585
+ refkey: fooRef,
586
+ get children() {
587
+ return [_$createComponent(py.FunctionDeclaration, {
588
+ name: "bar",
589
+ parameters: parameters_nested,
590
+ refkey: barRef,
591
+ get children() {
592
+ return [_$createComponent(py.FunctionDeclaration, {
593
+ name: "foobar",
594
+ parameters: parameters_nested_nested,
595
+ refkey: foobarRef,
596
+ children: "return z * 2"
597
+ }, {
598
+ fileName: import.meta.url,
599
+ lineNumber: 376,
600
+ columnNumber: 11
601
+ }), "return", " ", _$createComponent(py.FunctionCallExpression, {
602
+ target: foobarRef,
603
+ get args() {
604
+ return [_$createComponent(py.Atom, {
605
+ jsValue: 2
606
+ }, {
607
+ fileName: import.meta.url,
608
+ lineNumber: 386,
609
+ columnNumber: 20
610
+ })];
611
+ }
612
+ }, {
613
+ fileName: import.meta.url,
614
+ lineNumber: 384,
615
+ columnNumber: 11
616
+ })];
617
+ }
618
+ }, {
619
+ fileName: import.meta.url,
620
+ lineNumber: 371,
621
+ columnNumber: 9
622
+ }), "return", " ", _$createComponent(py.FunctionCallExpression, {
623
+ target: barRef,
624
+ get args() {
625
+ return [_$createComponent(py.Atom, {
626
+ jsValue: 3
627
+ }, {
628
+ fileName: import.meta.url,
629
+ lineNumber: 392,
630
+ columnNumber: 18
631
+ })];
632
+ }
633
+ }, {
634
+ fileName: import.meta.url,
635
+ lineNumber: 390,
636
+ columnNumber: 9
637
+ })];
638
+ }
639
+ }, {
640
+ fileName: import.meta.url,
641
+ lineNumber: 366,
642
+ columnNumber: 7
643
+ });
644
+ expect(toSourceText([decl])).toBe(d`
645
+ def foo(x: int):
646
+ def bar(y: int):
647
+ def foobar(z: int):
648
+ return z * 2
649
+ return foobar(2)
650
+ return bar(3)
651
+
652
+ `);
653
+ });
654
+ it("renders complex typing structure", () => {
655
+ const res = toSourceTextMultiple([_$createComponent(py.SourceFile, {
656
+ path: "mod1.py",
657
+ get children() {
658
+ return _$createComponent(py.ClassDeclaration, {
659
+ name: "Foo",
660
+ get refkey() {
661
+ return refkey("Foo");
662
+ }
663
+ }, {
664
+ fileName: import.meta.url,
665
+ lineNumber: 410,
666
+ columnNumber: 9
667
+ });
668
+ }
669
+ }, {
670
+ fileName: import.meta.url,
671
+ lineNumber: 409,
672
+ columnNumber: 7
673
+ }), _$createComponent(py.SourceFile, {
674
+ path: "mod2.py",
675
+ get children() {
676
+ return [_$createComponent(py.ClassDeclaration, {
677
+ name: "A",
678
+ get refkey() {
679
+ return refkey("A");
680
+ }
681
+ }, {
682
+ fileName: import.meta.url,
683
+ lineNumber: 413,
684
+ columnNumber: 9
685
+ }), _$createComponent(py.ClassDeclaration, {
686
+ name: "B",
687
+ get refkey() {
688
+ return refkey("B");
689
+ }
690
+ }, {
691
+ fileName: import.meta.url,
692
+ lineNumber: 414,
693
+ columnNumber: 9
694
+ })];
695
+ }
696
+ }, {
697
+ fileName: import.meta.url,
698
+ lineNumber: 412,
699
+ columnNumber: 7
700
+ }), _$createComponent(py.SourceFile, {
701
+ path: "usage.py",
702
+ get children() {
703
+ return _$createComponent(py.FunctionDeclaration, {
704
+ async: true,
705
+ name: "foo",
706
+ get parameters() {
707
+ return [{
708
+ name: "x",
709
+ type: refkey("A")
710
+ }, {
711
+ name: "y",
712
+ type: refkey("B")
713
+ }];
714
+ },
715
+ args: true,
716
+ kwargs: true,
717
+ get returnType() {
718
+ return refkey("Foo");
719
+ }
720
+ }, {
721
+ fileName: import.meta.url,
722
+ lineNumber: 417,
723
+ columnNumber: 9
724
+ });
725
+ }
726
+ }, {
727
+ fileName: import.meta.url,
728
+ lineNumber: 416,
729
+ columnNumber: 7
730
+ })]);
731
+ assertFileContents(res, {
732
+ "mod1.py": `
733
+ class Foo:
734
+ pass
735
+
736
+ `,
737
+ "mod2.py": `
738
+ class A:
739
+ pass
740
+
741
+
742
+ class B:
743
+ pass
744
+
745
+ `,
746
+ "usage.py": `
747
+ from typing import TYPE_CHECKING
748
+
749
+ if TYPE_CHECKING:
750
+ from mod1 import Foo
751
+ from mod2 import A
752
+ from mod2 import B
753
+
754
+
755
+ async def foo(x: A, y: B, *args, **kwargs) -> Foo:
756
+ pass
757
+
758
+ `
759
+ });
760
+ });
761
+ it("throws error when PropertyDeclaration is used outside of a class", () => {
762
+ expect(() => {
763
+ toSourceText([_$createComponent(py.PropertyDeclaration, {
764
+ name: "x"
765
+ }, {
766
+ fileName: import.meta.url,
767
+ lineNumber: 470,
768
+ columnNumber: 21
769
+ })]);
770
+ }).toThrow('Method "x" must be declared inside a class (member scope)');
771
+ });
772
+ it("throws error when MethodDeclaration is used outside of a class", () => {
773
+ expect(() => {
774
+ toSourceText([_$createComponent(py.MethodDeclaration, {
775
+ name: "my_method"
776
+ }, {
777
+ fileName: import.meta.url,
778
+ lineNumber: 476,
779
+ columnNumber: 21
780
+ })]);
781
+ }).toThrow('Method "my_method" must be declared inside a class (member scope)');
782
+ });
783
+ it("throws error when ClassMethodDeclaration is used outside of a class", () => {
784
+ expect(() => {
785
+ toSourceText([_$createComponent(py.ClassMethodDeclaration, {
786
+ name: "my_class_method"
787
+ }, {
788
+ fileName: import.meta.url,
789
+ lineNumber: 484,
790
+ columnNumber: 21
791
+ })]);
792
+ }).toThrow('Method "my_class_method" must be declared inside a class (member scope)');
793
+ });
794
+ it("throws error when StaticMethodDeclaration is used outside of a class", () => {
795
+ expect(() => {
796
+ toSourceText([_$createComponent(py.StaticMethodDeclaration, {
797
+ name: "my_static_method"
798
+ }, {
799
+ fileName: import.meta.url,
800
+ lineNumber: 492,
801
+ columnNumber: 21
802
+ })]);
803
+ }).toThrow('Method "my_static_method" must be declared inside a class (member scope)');
804
+ });
805
+ it("throws error when DunderMethodDeclaration is used outside of a class", () => {
806
+ expect(() => {
807
+ toSourceText([_$createComponent(py.DunderMethodDeclaration, {
808
+ name: "__init__"
809
+ }, {
810
+ fileName: import.meta.url,
811
+ lineNumber: 500,
812
+ columnNumber: 21
813
+ })]);
814
+ }).toThrow('Method "__init__" must be declared inside a class (member scope)');
815
+ });
816
+ });
817
+ //# sourceMappingURL=functiondeclaration.test.js.map