@wyw-in-js/transform 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/esm/babel.js.map +1 -1
  2. package/esm/cache.js +15 -4
  3. package/esm/cache.js.map +1 -1
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/evaluators/index.js.map +1 -1
  6. package/esm/index.js.map +1 -1
  7. package/esm/module.js +174 -15
  8. package/esm/module.js.map +1 -1
  9. package/esm/options/buildOptions.js +123 -4
  10. package/esm/options/buildOptions.js.map +1 -1
  11. package/esm/options/buildOptions.test.js +41 -0
  12. package/esm/options/buildOptions.test.js.map +1 -0
  13. package/esm/options/loadBabelOptions.js.map +1 -1
  14. package/esm/plugins/babel-transform.js.map +1 -1
  15. package/esm/plugins/collector.js.map +1 -1
  16. package/esm/plugins/dynamic-import.js +35 -12
  17. package/esm/plugins/dynamic-import.js.map +1 -1
  18. package/esm/plugins/preeval.js +4 -0
  19. package/esm/plugins/preeval.js.map +1 -1
  20. package/esm/plugins/shaker.js +170 -23
  21. package/esm/plugins/shaker.js.map +1 -1
  22. package/esm/shaker.js +6 -3
  23. package/esm/shaker.js.map +1 -1
  24. package/esm/transform/BaseEntrypoint.js.map +1 -1
  25. package/esm/transform/Entrypoint.helpers.js +105 -15
  26. package/esm/transform/Entrypoint.helpers.js.map +1 -1
  27. package/esm/transform/Entrypoint.js +13 -2
  28. package/esm/transform/Entrypoint.js.map +1 -1
  29. package/esm/transform/Entrypoint.types.js.map +1 -1
  30. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  31. package/esm/transform/actions/AbortError.js.map +1 -1
  32. package/esm/transform/actions/BaseAction.js +5 -0
  33. package/esm/transform/actions/BaseAction.js.map +1 -1
  34. package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  35. package/esm/transform/actions/actionRunner.js.map +1 -1
  36. package/esm/transform/actions/types.js.map +1 -1
  37. package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
  38. package/esm/transform/generators/collect.js.map +1 -1
  39. package/esm/transform/generators/createStylisPreprocessor.js +118 -2
  40. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
  41. package/esm/transform/generators/evalFile.js.map +1 -1
  42. package/esm/transform/generators/explodeReexports.js +10 -10
  43. package/esm/transform/generators/explodeReexports.js.map +1 -1
  44. package/esm/transform/generators/extract.js.map +1 -1
  45. package/esm/transform/generators/getExports.js.map +1 -1
  46. package/esm/transform/generators/index.js.map +1 -1
  47. package/esm/transform/generators/processEntrypoint.js +5 -8
  48. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  49. package/esm/transform/generators/processImports.js.map +1 -1
  50. package/esm/transform/generators/resolveImports.js +41 -2
  51. package/esm/transform/generators/resolveImports.js.map +1 -1
  52. package/esm/transform/generators/transform.js +7 -3
  53. package/esm/transform/generators/transform.js.map +1 -1
  54. package/esm/transform/generators/workflow.js.map +1 -1
  55. package/esm/transform/helpers/loadWywOptions.js +15 -2
  56. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  57. package/esm/transform/helpers/withDefaultServices.js +2 -0
  58. package/esm/transform/helpers/withDefaultServices.js.map +1 -1
  59. package/esm/transform/isStaticallyEvaluatableModule.js +153 -0
  60. package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -0
  61. package/esm/transform/rootLog.js.map +1 -1
  62. package/esm/transform/types.js.map +1 -1
  63. package/esm/transform.js +15 -6
  64. package/esm/transform.js.map +1 -1
  65. package/esm/types.js.map +1 -1
  66. package/esm/utils/EventEmitter.js.map +1 -1
  67. package/esm/utils/ShakerMetadata.js.map +1 -1
  68. package/esm/utils/TransformMetadata.js.map +1 -1
  69. package/esm/utils/addIdentifierToWywPreval.js.map +1 -1
  70. package/esm/utils/collectExportsAndImports.js +97 -6
  71. package/esm/utils/collectExportsAndImports.js.map +1 -1
  72. package/esm/utils/collectTemplateDependencies.js +1 -1
  73. package/esm/utils/collectTemplateDependencies.js.map +1 -1
  74. package/esm/utils/createId.js.map +1 -1
  75. package/esm/utils/dispose-polyfill.js.map +1 -1
  76. package/esm/utils/findIdentifiers.js.map +1 -1
  77. package/esm/utils/getConstantStringValue.js +58 -0
  78. package/esm/utils/getConstantStringValue.js.map +1 -0
  79. package/esm/utils/getFileIdx.js.map +1 -1
  80. package/esm/utils/getMemberExpressionPropertyName.js +11 -0
  81. package/esm/utils/getMemberExpressionPropertyName.js.map +1 -0
  82. package/esm/utils/getPluginKey.js.map +1 -1
  83. package/esm/utils/getScope.js.map +1 -1
  84. package/esm/utils/getSource.js.map +1 -1
  85. package/esm/utils/getTagProcessor.js +34 -6
  86. package/esm/utils/getTagProcessor.js.map +1 -1
  87. package/esm/utils/getVisitorKeys.js.map +1 -1
  88. package/esm/utils/hasWywPreval.js.map +1 -1
  89. package/esm/utils/importOverrides.js +47 -0
  90. package/esm/utils/importOverrides.js.map +1 -0
  91. package/esm/utils/isExports.js.map +1 -1
  92. package/esm/utils/isGlobal.js.map +1 -1
  93. package/esm/utils/isNode.js.map +1 -1
  94. package/esm/utils/isNodePath.js.map +1 -1
  95. package/esm/utils/isNotNull.js.map +1 -1
  96. package/esm/utils/isRemoved.js.map +1 -1
  97. package/esm/utils/isRequire.js.map +1 -1
  98. package/esm/utils/isSerializable.js.map +1 -1
  99. package/esm/utils/isTypedNode.js.map +1 -1
  100. package/esm/utils/isUnnecessaryReactCall.js.map +1 -1
  101. package/esm/utils/parseRequest.js +29 -0
  102. package/esm/utils/parseRequest.js.map +1 -0
  103. package/esm/utils/peek.js.map +1 -1
  104. package/esm/utils/removeDangerousCode.js +32 -2
  105. package/esm/utils/removeDangerousCode.js.map +1 -1
  106. package/esm/utils/replaceImportMetaEnv.js +44 -0
  107. package/esm/utils/replaceImportMetaEnv.js.map +1 -0
  108. package/esm/utils/scopeHelpers.js.map +1 -1
  109. package/esm/utils/traversalCache.js.map +1 -1
  110. package/esm/utils/unwrapExpression.js +18 -0
  111. package/esm/utils/unwrapExpression.js.map +1 -0
  112. package/esm/utils/unwrapSequence.js.map +1 -1
  113. package/esm/utils/valueToLiteral.js.map +1 -1
  114. package/esm/utils/visitors/JSXElementsRemover.js.map +1 -1
  115. package/esm/vm/createVmContext.js +44 -0
  116. package/esm/vm/createVmContext.js.map +1 -1
  117. package/esm/vm/process.js.map +1 -1
  118. package/lib/babel.js.map +1 -1
  119. package/lib/cache.js +16 -5
  120. package/lib/cache.js.map +1 -1
  121. package/lib/debug/fileReporter.js +1 -1
  122. package/lib/debug/fileReporter.js.map +1 -1
  123. package/lib/evaluators/index.js.map +1 -1
  124. package/lib/index.js +1 -1
  125. package/lib/index.js.map +1 -1
  126. package/lib/module.js +177 -16
  127. package/lib/module.js.map +1 -1
  128. package/lib/options/buildOptions.js +127 -6
  129. package/lib/options/buildOptions.js.map +1 -1
  130. package/lib/options/buildOptions.test.js +44 -0
  131. package/lib/options/buildOptions.test.js.map +1 -0
  132. package/lib/options/loadBabelOptions.js.map +1 -1
  133. package/lib/plugins/babel-transform.js.map +1 -1
  134. package/lib/plugins/collector.js.map +1 -1
  135. package/lib/plugins/dynamic-import.js +34 -12
  136. package/lib/plugins/dynamic-import.js.map +1 -1
  137. package/lib/plugins/preeval.js +4 -0
  138. package/lib/plugins/preeval.js.map +1 -1
  139. package/lib/plugins/shaker.js +172 -22
  140. package/lib/plugins/shaker.js.map +1 -1
  141. package/lib/shaker.js +8 -4
  142. package/lib/shaker.js.map +1 -1
  143. package/lib/transform/BaseEntrypoint.js.map +1 -1
  144. package/lib/transform/Entrypoint.helpers.js +106 -15
  145. package/lib/transform/Entrypoint.helpers.js.map +1 -1
  146. package/lib/transform/Entrypoint.js +13 -2
  147. package/lib/transform/Entrypoint.js.map +1 -1
  148. package/lib/transform/Entrypoint.types.js.map +1 -1
  149. package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
  150. package/lib/transform/actions/AbortError.js.map +1 -1
  151. package/lib/transform/actions/BaseAction.js +5 -0
  152. package/lib/transform/actions/BaseAction.js.map +1 -1
  153. package/lib/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  154. package/lib/transform/actions/actionRunner.js.map +1 -1
  155. package/lib/transform/actions/types.js.map +1 -1
  156. package/lib/transform/generators/baseProcessingHandlers.js.map +1 -1
  157. package/lib/transform/generators/collect.js.map +1 -1
  158. package/lib/transform/generators/createStylisPreprocessor.js +119 -3
  159. package/lib/transform/generators/createStylisPreprocessor.js.map +1 -1
  160. package/lib/transform/generators/evalFile.js +1 -1
  161. package/lib/transform/generators/evalFile.js.map +1 -1
  162. package/lib/transform/generators/explodeReexports.js +11 -11
  163. package/lib/transform/generators/explodeReexports.js.map +1 -1
  164. package/lib/transform/generators/extract.js.map +1 -1
  165. package/lib/transform/generators/getExports.js.map +1 -1
  166. package/lib/transform/generators/index.js.map +1 -1
  167. package/lib/transform/generators/processEntrypoint.js +5 -8
  168. package/lib/transform/generators/processEntrypoint.js.map +1 -1
  169. package/lib/transform/generators/processImports.js.map +1 -1
  170. package/lib/transform/generators/resolveImports.js +41 -2
  171. package/lib/transform/generators/resolveImports.js.map +1 -1
  172. package/lib/transform/generators/transform.js +8 -3
  173. package/lib/transform/generators/transform.js.map +1 -1
  174. package/lib/transform/generators/workflow.js.map +1 -1
  175. package/lib/transform/helpers/loadWywOptions.js +16 -2
  176. package/lib/transform/helpers/loadWywOptions.js.map +1 -1
  177. package/lib/transform/helpers/withDefaultServices.js +3 -2
  178. package/lib/transform/helpers/withDefaultServices.js.map +1 -1
  179. package/lib/transform/isStaticallyEvaluatableModule.js +159 -0
  180. package/lib/transform/isStaticallyEvaluatableModule.js.map +1 -0
  181. package/lib/transform/rootLog.js.map +1 -1
  182. package/lib/transform/types.js.map +1 -1
  183. package/lib/transform.js +15 -6
  184. package/lib/transform.js.map +1 -1
  185. package/lib/types.js.map +1 -1
  186. package/lib/utils/EventEmitter.js.map +1 -1
  187. package/lib/utils/ShakerMetadata.js.map +1 -1
  188. package/lib/utils/TransformMetadata.js.map +1 -1
  189. package/lib/utils/addIdentifierToWywPreval.js.map +1 -1
  190. package/lib/utils/collectExportsAndImports.js +97 -6
  191. package/lib/utils/collectExportsAndImports.js.map +1 -1
  192. package/lib/utils/collectTemplateDependencies.js +1 -1
  193. package/lib/utils/collectTemplateDependencies.js.map +1 -1
  194. package/lib/utils/createId.js.map +1 -1
  195. package/lib/utils/dispose-polyfill.js.map +1 -1
  196. package/lib/utils/findIdentifiers.js.map +1 -1
  197. package/lib/utils/getConstantStringValue.js +66 -0
  198. package/lib/utils/getConstantStringValue.js.map +1 -0
  199. package/lib/utils/getFileIdx.js.map +1 -1
  200. package/lib/utils/getMemberExpressionPropertyName.js +18 -0
  201. package/lib/utils/getMemberExpressionPropertyName.js.map +1 -0
  202. package/lib/utils/getPluginKey.js.map +1 -1
  203. package/lib/utils/getScope.js.map +1 -1
  204. package/lib/utils/getSource.js +1 -1
  205. package/lib/utils/getSource.js.map +1 -1
  206. package/lib/utils/getTagProcessor.js +33 -6
  207. package/lib/utils/getTagProcessor.js.map +1 -1
  208. package/lib/utils/getVisitorKeys.js.map +1 -1
  209. package/lib/utils/hasWywPreval.js.map +1 -1
  210. package/lib/utils/importOverrides.js +57 -0
  211. package/lib/utils/importOverrides.js.map +1 -0
  212. package/lib/utils/isExports.js.map +1 -1
  213. package/lib/utils/isGlobal.js.map +1 -1
  214. package/lib/utils/isNode.js.map +1 -1
  215. package/lib/utils/isNodePath.js.map +1 -1
  216. package/lib/utils/isNotNull.js.map +1 -1
  217. package/lib/utils/isRemoved.js.map +1 -1
  218. package/lib/utils/isRequire.js.map +1 -1
  219. package/lib/utils/isSerializable.js.map +1 -1
  220. package/lib/utils/isTypedNode.js.map +1 -1
  221. package/lib/utils/isUnnecessaryReactCall.js.map +1 -1
  222. package/lib/utils/parseRequest.js +37 -0
  223. package/lib/utils/parseRequest.js.map +1 -0
  224. package/lib/utils/peek.js.map +1 -1
  225. package/lib/utils/removeDangerousCode.js +32 -2
  226. package/lib/utils/removeDangerousCode.js.map +1 -1
  227. package/lib/utils/replaceImportMetaEnv.js +50 -0
  228. package/lib/utils/replaceImportMetaEnv.js.map +1 -0
  229. package/lib/utils/scopeHelpers.js.map +1 -1
  230. package/lib/utils/traversalCache.js.map +1 -1
  231. package/lib/utils/unwrapExpression.js +25 -0
  232. package/lib/utils/unwrapExpression.js.map +1 -0
  233. package/lib/utils/unwrapSequence.js.map +1 -1
  234. package/lib/utils/valueToLiteral.js.map +1 -1
  235. package/lib/utils/visitors/JSXElementsRemover.js.map +1 -1
  236. package/lib/vm/createVmContext.js +45 -2
  237. package/lib/vm/createVmContext.js.map +1 -1
  238. package/lib/vm/process.js.map +1 -1
  239. package/package.json +13 -15
  240. package/types/cache.d.ts +1 -1
  241. package/types/cache.js +15 -4
  242. package/types/evaluators/index.js +1 -1
  243. package/types/module.d.ts +1 -2
  244. package/types/module.js +189 -11
  245. package/types/options/buildOptions.d.ts +0 -1
  246. package/types/options/buildOptions.js +125 -9
  247. package/types/options/loadBabelOptions.js +1 -2
  248. package/types/plugins/babel-transform.js +1 -1
  249. package/types/plugins/collector.js +3 -3
  250. package/types/plugins/dynamic-import.js +38 -18
  251. package/types/plugins/preeval.js +5 -2
  252. package/types/plugins/shaker.d.ts +4 -1
  253. package/types/plugins/shaker.js +189 -24
  254. package/types/shaker.js +9 -3
  255. package/types/transform/BaseEntrypoint.d.ts +0 -1
  256. package/types/transform/Entrypoint.helpers.d.ts +0 -1
  257. package/types/transform/Entrypoint.helpers.js +122 -25
  258. package/types/transform/Entrypoint.js +14 -2
  259. package/types/transform/Entrypoint.types.d.ts +0 -1
  260. package/types/transform/EvaluatedEntrypoint.d.ts +0 -1
  261. package/types/transform/actions/BaseAction.d.ts +1 -1
  262. package/types/transform/actions/BaseAction.js +5 -0
  263. package/types/transform/actions/actionRunner.js +2 -3
  264. package/types/transform/generators/collect.js +1 -2
  265. package/types/transform/generators/createStylisPreprocessor.d.ts +0 -1
  266. package/types/transform/generators/createStylisPreprocessor.js +168 -13
  267. package/types/transform/generators/evalFile.js +1 -2
  268. package/types/transform/generators/explodeReexports.js +12 -15
  269. package/types/transform/generators/extract.js +1 -2
  270. package/types/transform/generators/getExports.js +2 -3
  271. package/types/transform/generators/processEntrypoint.js +13 -7
  272. package/types/transform/generators/processImports.js +1 -2
  273. package/types/transform/generators/resolveImports.js +41 -5
  274. package/types/transform/generators/transform.d.ts +1 -1
  275. package/types/transform/generators/transform.js +16 -6
  276. package/types/transform/generators/workflow.js +1 -2
  277. package/types/transform/helpers/loadWywOptions.js +16 -5
  278. package/types/transform/helpers/withDefaultServices.d.ts +1 -1
  279. package/types/transform/helpers/withDefaultServices.js +19 -8
  280. package/types/transform/isStaticallyEvaluatableModule.d.ts +2 -0
  281. package/types/transform/isStaticallyEvaluatableModule.js +177 -0
  282. package/types/transform/rootLog.d.ts +0 -1
  283. package/types/transform/types.d.ts +1 -1
  284. package/types/transform.js +17 -9
  285. package/types/types.d.ts +1 -1
  286. package/types/utils/addIdentifierToWywPreval.js +2 -3
  287. package/types/utils/collectExportsAndImports.js +102 -20
  288. package/types/utils/collectTemplateDependencies.js +3 -4
  289. package/types/utils/findIdentifiers.js +2 -3
  290. package/types/utils/getConstantStringValue.d.ts +2 -0
  291. package/types/utils/getConstantStringValue.js +94 -0
  292. package/types/utils/getFileIdx.js +1 -2
  293. package/types/utils/getMemberExpressionPropertyName.d.ts +2 -0
  294. package/types/utils/getMemberExpressionPropertyName.js +46 -0
  295. package/types/utils/getScope.js +1 -2
  296. package/types/utils/getTagProcessor.js +35 -9
  297. package/types/utils/getVisitorKeys.js +1 -2
  298. package/types/utils/hasWywPreval.js +1 -1
  299. package/types/utils/importOverrides.d.ts +19 -0
  300. package/types/utils/importOverrides.js +40 -0
  301. package/types/utils/isExports.js +1 -2
  302. package/types/utils/isNodePath.js +1 -2
  303. package/types/utils/isNotNull.js +1 -2
  304. package/types/utils/isRemoved.js +1 -2
  305. package/types/utils/isRequire.js +1 -2
  306. package/types/utils/isSerializable.js +1 -2
  307. package/types/utils/isUnnecessaryReactCall.js +1 -2
  308. package/types/utils/parseRequest.d.ts +7 -0
  309. package/types/utils/parseRequest.js +29 -0
  310. package/types/utils/removeDangerousCode.js +37 -2
  311. package/types/utils/replaceImportMetaEnv.d.ts +3 -0
  312. package/types/utils/replaceImportMetaEnv.js +39 -0
  313. package/types/utils/scopeHelpers.js +7 -8
  314. package/types/utils/traversalCache.d.ts +1 -1
  315. package/types/utils/unwrapExpression.d.ts +2 -0
  316. package/types/utils/unwrapExpression.js +57 -0
  317. package/types/utils/unwrapSequence.js +1 -2
  318. package/types/utils/valueToLiteral.js +1 -2
  319. package/types/utils/visitors/JSXElementsRemover.js +1 -2
  320. package/types/vm/createVmContext.d.ts +0 -1
  321. package/types/vm/createVmContext.js +68 -9
  322. package/types/vm/process.d.ts +0 -2
  323. package/LICENSE +0 -21
  324. package/esm/options/babel-merge.d.js +0 -2
  325. package/esm/options/babel-merge.d.js.map +0 -1
  326. package/lib/options/babel-merge.d.js +0 -2
  327. package/lib/options/babel-merge.d.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSerializable = void 0;
3
+ exports.isSerializable = isSerializable;
4
4
  const shared_1 = require("@wyw-in-js/shared");
5
5
  function isSerializable(o) {
6
6
  if (Array.isArray(o)) {
@@ -15,4 +15,3 @@ function isSerializable(o) {
15
15
  }
16
16
  return (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean');
17
17
  }
18
- exports.isSerializable = isSerializable;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isUnnecessaryReactCall = void 0;
3
+ exports.isUnnecessaryReactCall = isUnnecessaryReactCall;
4
4
  const collectExportsAndImports_1 = require("./collectExportsAndImports");
5
5
  const getScope_1 = require("./getScope");
6
6
  function getCallee(p) {
@@ -73,4 +73,3 @@ function isUnnecessaryReactCall(path) {
73
73
  const { imports } = (0, collectExportsAndImports_1.collectExportsAndImports)(programPath);
74
74
  return isJSXRuntime(path, imports) || isClassicReactRuntime(path, imports);
75
75
  }
76
- exports.isUnnecessaryReactCall = isUnnecessaryReactCall;
@@ -0,0 +1,7 @@
1
+ export type ParsedRequest = {
2
+ filename: string;
3
+ hash: string;
4
+ query: string;
5
+ };
6
+ export declare const parseRequest: (request: string) => ParsedRequest;
7
+ export declare const stripQueryAndHash: (request: string) => string;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripQueryAndHash = exports.parseRequest = void 0;
4
+ const getFirstSuffixIndex = (request) => {
5
+ const queryIdx = request.indexOf('?');
6
+ const hashIdx = request.indexOf('#');
7
+ if (queryIdx === -1)
8
+ return hashIdx;
9
+ if (hashIdx === -1)
10
+ return queryIdx;
11
+ return Math.min(queryIdx, hashIdx);
12
+ };
13
+ const parseRequest = (request) => {
14
+ const firstSuffixIndex = getFirstSuffixIndex(request);
15
+ if (firstSuffixIndex === -1) {
16
+ return { filename: request, hash: '', query: '' };
17
+ }
18
+ const filename = request.slice(0, firstSuffixIndex);
19
+ const queryIdx = request.indexOf('?');
20
+ const hashIdx = request.indexOf('#');
21
+ const query = queryIdx === -1
22
+ ? ''
23
+ : request.slice(queryIdx + 1, hashIdx !== -1 ? hashIdx : undefined);
24
+ const hash = hashIdx === -1 ? '' : request.slice(hashIdx + 1);
25
+ return { filename, hash, query };
26
+ };
27
+ exports.parseRequest = parseRequest;
28
+ const stripQueryAndHash = (request) => (0, exports.parseRequest)(request).filename;
29
+ exports.stripQueryAndHash = stripQueryAndHash;
@@ -42,6 +42,7 @@ const isBrowserGlobal = (id) => {
42
42
  const isSSRCheckField = (id) => {
43
43
  return ssrCheckFields.has(id.node.name) && isGlobal(id);
44
44
  };
45
+ const promiseCallbackMethods = new Set(['then', 'catch', 'finally']);
45
46
  const getPropertyName = (path) => {
46
47
  if (path.isIdentifier()) {
47
48
  return path.node.name;
@@ -51,6 +52,40 @@ const getPropertyName = (path) => {
51
52
  }
52
53
  return null;
53
54
  };
55
+ const isPromiseCallbackArgument = (path, ref) => {
56
+ return path
57
+ .get('arguments')
58
+ .some((arg) => arg === ref || arg.isAncestor(ref));
59
+ };
60
+ const findPromiseCallbackOwner = (path) => {
61
+ const owner = path.findParent((parent) => {
62
+ if (parent.isNewExpression()) {
63
+ const callee = parent.get('callee');
64
+ return (callee.isIdentifier({ name: 'Promise' }) &&
65
+ isPromiseCallbackArgument(parent, path));
66
+ }
67
+ if (parent.isCallExpression()) {
68
+ const callee = parent.get('callee');
69
+ if (!callee.isMemberExpression())
70
+ return false;
71
+ const propName = getPropertyName(callee.get('property'));
72
+ return (propName !== null &&
73
+ promiseCallbackMethods.has(propName) &&
74
+ isPromiseCallbackArgument(parent, path));
75
+ }
76
+ return false;
77
+ });
78
+ return owner;
79
+ };
80
+ const removeForbiddenGlobal = (path) => {
81
+ const promiseOwner = findPromiseCallbackOwner(path);
82
+ if (promiseOwner) {
83
+ (0, scopeHelpers_1.removeWithRelated)([promiseOwner]);
84
+ }
85
+ else {
86
+ (0, scopeHelpers_1.removeWithRelated)([path]);
87
+ }
88
+ };
54
89
  const getImport = (path) => {
55
90
  const programPath = path.findParent((p) => p.isProgram());
56
91
  if (!programPath) {
@@ -237,11 +272,11 @@ const removeDangerousCode = (programPath, options) => {
237
272
  // window.fetch will be handled by the windowScoped block below
238
273
  return;
239
274
  }
240
- (0, scopeHelpers_1.removeWithRelated)([p]);
275
+ removeForbiddenGlobal(p);
241
276
  return;
242
277
  }
243
278
  if (state.windowScoped.has(p.node.name)) {
244
- (0, scopeHelpers_1.removeWithRelated)([p]);
279
+ removeForbiddenGlobal(p);
245
280
  }
246
281
  else if (isGlobal(p)) {
247
282
  state.globals.push(p);
@@ -0,0 +1,3 @@
1
+ import type { NodePath } from '@babel/traverse';
2
+ import type { Core } from '../babel';
3
+ export declare function replaceImportMetaEnv(programPath: NodePath, t: Core['types']): void;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceImportMetaEnv = replaceImportMetaEnv;
4
+ const IMPORT_META_ENV = '__wyw_import_meta_env';
5
+ const isRecord = (obj) => typeof obj === 'object' && obj !== null;
6
+ function isImportMeta(obj) {
7
+ if (!isRecord(obj)) {
8
+ return false;
9
+ }
10
+ const { meta, property } = obj;
11
+ if (!isRecord(meta) || !isRecord(property)) {
12
+ return false;
13
+ }
14
+ return meta.name === 'import' && property.name === 'meta';
15
+ }
16
+ function isImportMetaEnv(node) {
17
+ const { computed, object, property } = node;
18
+ if (computed) {
19
+ return false;
20
+ }
21
+ if (!isImportMeta(object)) {
22
+ return false;
23
+ }
24
+ return property.type === 'Identifier' && property.name === 'env';
25
+ }
26
+ function replaceImportMetaEnv(programPath, t) {
27
+ programPath.traverse({
28
+ MemberExpression(path) {
29
+ if (isImportMetaEnv(path.node)) {
30
+ path.replaceWith(t.identifier(IMPORT_META_ENV));
31
+ }
32
+ },
33
+ OptionalMemberExpression(path) {
34
+ if (isImportMetaEnv(path.node)) {
35
+ path.replaceWith(t.identifier(IMPORT_META_ENV));
36
+ }
37
+ },
38
+ });
39
+ }
@@ -2,7 +2,13 @@
2
2
  /* eslint-disable no-restricted-syntax */
3
3
  /* eslint @typescript-eslint/no-use-before-define: ["error", { "functions": false }] */
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.removeWithRelated = exports.mutate = exports.applyAction = exports.findActionForNode = exports.referenceAll = exports.dereference = exports.reference = void 0;
5
+ exports.reference = reference;
6
+ exports.dereference = dereference;
7
+ exports.referenceAll = referenceAll;
8
+ exports.findActionForNode = findActionForNode;
9
+ exports.applyAction = applyAction;
10
+ exports.mutate = mutate;
11
+ exports.removeWithRelated = removeWithRelated;
6
12
  const types_1 = require("@babel/types");
7
13
  const findIdentifiers_1 = require("./findIdentifiers");
8
14
  const getScope_1 = require("./getScope");
@@ -41,7 +47,6 @@ function reference(path, referencePath = path, force = false) {
41
47
  binding.referencePaths.push(referencePath ?? path);
42
48
  binding.references = binding.referencePaths.length;
43
49
  }
44
- exports.reference = reference;
45
50
  function isReferenced(binding) {
46
51
  const { kind, referenced, referencePaths, path } = binding;
47
52
  if (path.isFunctionExpression() &&
@@ -106,7 +111,6 @@ function dereference(path) {
106
111
  nonTypeReferences.length + referencesInConstantViolations.length > 0;
107
112
  return binding;
108
113
  }
109
- exports.dereference = dereference;
110
114
  function dereferenceAll(path) {
111
115
  return (0, findIdentifiers_1.findIdentifiers)([path])
112
116
  .map((identifierPath) => dereference(identifierPath))
@@ -115,7 +119,6 @@ function dereferenceAll(path) {
115
119
  function referenceAll(path) {
116
120
  (0, findIdentifiers_1.findIdentifiers)([path]).forEach((identifierPath) => reference(identifierPath));
117
121
  }
118
- exports.referenceAll = referenceAll;
119
122
  const deletingNodes = new WeakSet();
120
123
  const isEmptyList = (list) => list.length === 0 || list.every((i) => deletingNodes.has(i));
121
124
  const getPathFromAction = (action) => {
@@ -353,7 +356,6 @@ function findActionForNode(path) {
353
356
  }
354
357
  return ['remove', path];
355
358
  }
356
- exports.findActionForNode = findActionForNode;
357
359
  // @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.
358
360
  function referenceEnums(program) {
359
361
  /*
@@ -481,7 +483,6 @@ function applyAction(action) {
481
483
  staticEvaluate(parent);
482
484
  });
483
485
  }
484
- exports.applyAction = applyAction;
485
486
  function removeWithRelated(paths) {
486
487
  if (paths.length === 0)
487
488
  return;
@@ -518,7 +519,6 @@ function removeWithRelated(paths) {
518
519
  referencedIdentifiers = referenced;
519
520
  }
520
521
  }
521
- exports.removeWithRelated = removeWithRelated;
522
522
  function mutate(path, fn) {
523
523
  const dereferenced = dereferenceAll(path);
524
524
  const mutated = fn(path);
@@ -578,4 +578,3 @@ function mutate(path, fn) {
578
578
  });
579
579
  removeWithRelated(forDeleting);
580
580
  }
581
- exports.mutate = mutate;
@@ -1,4 +1,4 @@
1
1
  import type { NodePath } from '@babel/traverse';
2
2
  import type { Node } from '@babel/types';
3
- export declare const getTraversalCache: <TValue, TKey extends Node | NodePath<Node> = NodePath<Node>>(path: NodePath, name: string) => WeakMap<TKey, TValue>;
3
+ export declare const getTraversalCache: <TValue, TKey extends NodePath | Node = NodePath>(path: NodePath, name: string) => WeakMap<TKey, TValue>;
4
4
  export declare const invalidateTraversalCache: (path: NodePath) => void;
@@ -0,0 +1,2 @@
1
+ import type { Expression } from '@babel/types';
2
+ export declare function unwrapExpression(node: Expression): Expression;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.unwrapExpression = unwrapExpression;
37
+ const t = __importStar(require("@babel/types"));
38
+ const unwrapOnce = (node) => {
39
+ if (t.isTSAsExpression(node))
40
+ return node.expression;
41
+ if (t.isTSTypeAssertion(node))
42
+ return node.expression;
43
+ if (t.isTSNonNullExpression(node))
44
+ return node.expression;
45
+ if (t.isParenthesizedExpression(node))
46
+ return node.expression;
47
+ return node;
48
+ };
49
+ function unwrapExpression(node) {
50
+ let current = node;
51
+ let next = unwrapOnce(current);
52
+ while (next !== current) {
53
+ current = next;
54
+ next = unwrapOnce(current);
55
+ }
56
+ return current;
57
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unwrapSequence = void 0;
3
+ exports.unwrapSequence = unwrapSequence;
4
4
  /**
5
5
  * If expression is a sequence like `(a, b, c)`, returns `c`
6
6
  * otherwise returns an original expression
@@ -14,4 +14,3 @@ function unwrapSequence(path) {
14
14
  }
15
15
  return path;
16
16
  }
17
- exports.unwrapSequence = unwrapSequence;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.valueToLiteral = void 0;
3
+ exports.valueToLiteral = valueToLiteral;
4
4
  const getSource_1 = require("./getSource");
5
5
  const isSerializable_1 = require("./isSerializable");
6
6
  function valueToLiteral(value, ex) {
@@ -61,4 +61,3 @@ function valueToLiteral(value, ex) {
61
61
  }
62
62
  throw ex.buildCodeFrameError(`The expression evaluated to '${value}', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(${(0, getSource_1.getSource)(ex)})'.`);
63
63
  }
64
- exports.valueToLiteral = valueToLiteral;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JSXElementsRemover = void 0;
3
+ exports.JSXElementsRemover = JSXElementsRemover;
4
4
  const core_1 = require("@babel/core");
5
5
  const getScope_1 = require("../getScope");
6
6
  const scopeHelpers_1 = require("../scopeHelpers");
@@ -49,4 +49,3 @@ function JSXElementsRemover(path) {
49
49
  });
50
50
  }
51
51
  }
52
- exports.JSXElementsRemover = JSXElementsRemover;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import * as vm from 'vm';
3
2
  import type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';
4
3
  export declare function createVmContext(filename: string, features: FeatureFlags<'happyDOM'>, additionalContext: Partial<vm.Context>, overrideContext?: StrictOptions['overrideContext']): {
@@ -15,19 +15,75 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.createVmContext = void 0;
36
+ exports.createVmContext = createVmContext;
27
37
  const vm = __importStar(require("vm"));
28
38
  const shared_1 = require("@wyw-in-js/shared");
29
39
  const process = __importStar(require("./process"));
30
40
  const NOOP = () => { };
41
+ const IMPORT_META_ENV = '__wyw_import_meta_env';
42
+ let importMetaEnvWarned = false;
43
+ function createImportMetaEnvProxy() {
44
+ const target = Object.create(null);
45
+ const warnOnce = () => {
46
+ if (importMetaEnvWarned)
47
+ return;
48
+ importMetaEnvWarned = true;
49
+ // eslint-disable-next-line no-console
50
+ console.warn([
51
+ `[wyw-in-js] import.meta.env was accessed during build-time evaluation, but no env values were provided.`,
52
+ ``,
53
+ `If you're using Vite, make sure @wyw-in-js/vite plugin is enabled (it injects Vite env for evaluation).`,
54
+ `Otherwise provide "__wyw_import_meta_env" via pluginOptions.overrideContext.`,
55
+ ].join('\n'));
56
+ };
57
+ return new Proxy(target, {
58
+ get(obj, key) {
59
+ if (typeof key === 'symbol') {
60
+ return Reflect.get(obj, key);
61
+ }
62
+ warnOnce();
63
+ return obj[key];
64
+ },
65
+ has(obj, key) {
66
+ if (typeof key === 'symbol') {
67
+ return Reflect.has(obj, key);
68
+ }
69
+ warnOnce();
70
+ return Reflect.has(obj, key);
71
+ },
72
+ getOwnPropertyDescriptor(obj, key) {
73
+ return Reflect.getOwnPropertyDescriptor(obj, key);
74
+ },
75
+ ownKeys(obj) {
76
+ return Reflect.ownKeys(obj);
77
+ },
78
+ set(obj, key, value) {
79
+ if (typeof key === 'symbol') {
80
+ return Reflect.set(obj, key, value);
81
+ }
82
+ warnOnce();
83
+ return Reflect.set(obj, key, value);
84
+ },
85
+ });
86
+ }
31
87
  function createWindow() {
32
88
  const { Window, GlobalWindow } = require('happy-dom');
33
89
  const HappyWindow = GlobalWindow || Window;
@@ -89,8 +145,12 @@ function createVmContext(filename, features, additionalContext, overrideContext
89
145
  const { teardown, window } = isHappyDOMEnabled
90
146
  ? createHappyDOMWindow()
91
147
  : createNothing();
148
+ const envContext = {
149
+ [IMPORT_META_ENV]: createImportMetaEnvProxy(),
150
+ };
92
151
  const baseContext = createBaseContext(window, overrideContext({
93
152
  __filename: filename,
153
+ ...envContext,
94
154
  ...additionalContext,
95
155
  }, filename));
96
156
  const context = vm.createContext(baseContext);
@@ -99,4 +159,3 @@ function createVmContext(filename, features, additionalContext, overrideContext
99
159
  teardown,
100
160
  };
101
161
  }
102
- exports.createVmContext = createVmContext;
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  /**
4
2
  * It contains API for mocked process variable available in node environment used to evaluate scripts with node's `vm` in ./module.ts
5
3
  */
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Anton Evzhakov
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=babel-merge.d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel-merge.d.js","names":[],"sources":["../../src/options/babel-merge.d.ts"],"sourcesContent":["declare module 'babel-merge' {\n import type { TransformOptions } from '@babel/core';\n\n interface Options {\n clone?: boolean;\n customMerge?: (\n key: string,\n options?: Options\n ) => ((x: unknown, y: unknown) => unknown) | undefined;\n arrayMerge?(\n target: unknown[],\n source: unknown[],\n options?: Options\n ): unknown[];\n isMergeableObject?(value: object): boolean;\n }\n\n interface BabelMerge {\n (\n source?: TransformOptions,\n overrides?: TransformOptions,\n deepmergeOpts?: Options\n ): TransformOptions;\n all(\n values: (TransformOptions | undefined)[],\n deepmergeOpts?: Options\n ): TransformOptions;\n }\n\n const babelMerge: BabelMerge;\n\n export = babelMerge;\n}\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=babel-merge.d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel-merge.d.js","names":[],"sources":["../../src/options/babel-merge.d.ts"],"sourcesContent":["declare module 'babel-merge' {\n import type { TransformOptions } from '@babel/core';\n\n interface Options {\n clone?: boolean;\n customMerge?: (\n key: string,\n options?: Options\n ) => ((x: unknown, y: unknown) => unknown) | undefined;\n arrayMerge?(\n target: unknown[],\n source: unknown[],\n options?: Options\n ): unknown[];\n isMergeableObject?(value: object): boolean;\n }\n\n interface BabelMerge {\n (\n source?: TransformOptions,\n overrides?: TransformOptions,\n deepmergeOpts?: Options\n ): TransformOptions;\n all(\n values: (TransformOptions | undefined)[],\n deepmergeOpts?: Options\n ): TransformOptions;\n }\n\n const babelMerge: BabelMerge;\n\n export = babelMerge;\n}\n"],"mappings":""}