simpleAsyncCases.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. exports.notBailing = (options) => {
  7. const args = options.args.join(", ");
  8. const argsWithCallback = args ? `${args}, _callback` : "_callback";
  9. const argsWithComma = args ? `${args}, ` : "";
  10. const tap = options.tap;
  11. const type = options.type;
  12. switch(`${tap} ${type}`) {
  13. case "none async":
  14. return `function(${argsWithCallback}) {
  15. _callback();
  16. }`;
  17. case "none promise":
  18. return `function(${args}) {
  19. return Promise.resolve();
  20. }`;
  21. case "sync async":
  22. return `function(${argsWithCallback}) {
  23. try {
  24. this._x(${args});
  25. } catch(_e) {
  26. _callback(_e);
  27. return;
  28. }
  29. _callback();
  30. }`;
  31. case "sync promise":
  32. return `function(${args}) {
  33. return Promise.resolve().then(() => {
  34. this._x(${args});
  35. });
  36. }`;
  37. case "async async":
  38. return `function(${argsWithCallback}) {
  39. this._x(${argsWithComma}(_err) => {
  40. if(_err) {
  41. _callback(_err);
  42. return;
  43. }
  44. _callback();
  45. });
  46. }`;
  47. case "async promise":
  48. return `function(${args}) {
  49. return new Promise((_resolve, _reject) => {
  50. let _isSync = true;
  51. this._x(${argsWithComma}_err => {
  52. if(_err) {
  53. if(_isSync)
  54. Promise.resolve().then(() => _reject(_err));
  55. else
  56. _reject(_err);
  57. return;
  58. }
  59. _resolve();
  60. });
  61. _isSync = false;
  62. });
  63. }`;
  64. case "promise async":
  65. return `function(${argsWithCallback}) {
  66. Promise.resolve(this._x(${args})).then(() => {
  67. _callback();
  68. }, _err => {
  69. _callback(_err);
  70. });
  71. }`;
  72. case "promise promise":
  73. return `function(${args}) {
  74. return Promise.resolve(this._x(${args})).then(() => {});
  75. }`;
  76. case "multiple-sync async":
  77. return `function(${argsWithCallback}) {
  78. try {
  79. const _fns = this._x;
  80. for(let _i = 0; _i < _fns.length; _i++) {
  81. _fns[_i](${args});
  82. }
  83. } catch(_err) {
  84. _callback(_err);
  85. return;
  86. }
  87. _callback();
  88. }`;
  89. case "multiple-sync promise":
  90. return `function(${args}) {
  91. return Promise.resolve().then(() => {
  92. const _fns = this._x;
  93. for(let _i = 0; _i < _fns.length; _i++) {
  94. _fns[_i](${args});
  95. }
  96. });
  97. }`;
  98. }
  99. }
  100. exports.bailing = (options) => {
  101. const args = options.args.join(", ");
  102. const argsWithCallback = args ? `${args}, _callback` : "_callback";
  103. const argsWithComma = args ? `${args}, ` : "";
  104. const tap = options.tap;
  105. const type = options.type;
  106. switch(`${tap} ${type}`) {
  107. case "none async":
  108. return `function(${argsWithCallback}) {
  109. _callback();
  110. }`;
  111. case "none promise":
  112. return `function(${args}) {
  113. return Promise.resolve();
  114. }`;
  115. case "sync async":
  116. return `function(${argsWithCallback}) {
  117. let _result;
  118. try {
  119. _result = this._x(${args});
  120. } catch(_e) {
  121. _callback(_e);
  122. return;
  123. }
  124. _callback(null, _result);
  125. }`;
  126. case "sync promise":
  127. return `function(${args}) {
  128. return Promise.resolve().then(() => this._x(${args}));
  129. }`;
  130. case "async async":
  131. return `function(${argsWithCallback}) {
  132. this._x(${argsWithCallback});
  133. }`;
  134. case "async promise":
  135. return `function(${args}) {
  136. return new Promise((_resolve, _reject) => {
  137. let _isSync = true;
  138. this._x(${argsWithComma}(_err, _result) => {
  139. if(_err) {
  140. if(_isSync)
  141. Promise.resolve().then(() => _reject(_err));
  142. else
  143. _reject(_err);
  144. return;
  145. }
  146. _resolve(_result);
  147. });
  148. _isSync = false;
  149. });
  150. }`;
  151. case "promise async":
  152. return `function(${argsWithCallback}) {
  153. Promise.resolve(this._x(${args})).then(_result => {
  154. _callback(null, _result);
  155. }, _err => {
  156. _callback(_err);
  157. });
  158. }`;
  159. case "promise promise":
  160. return `function(${args}) {
  161. return this._x(${args});
  162. }`;
  163. case "multiple-sync async":
  164. return `function(${argsWithCallback}) {
  165. try {
  166. const _fns = this._x;
  167. for(let _i = 0; _i < _fns.length; _i++) {
  168. const _result = _fns[_i](${args});
  169. if(_result !== undefined) {
  170. _callback(null, _result);
  171. return;
  172. }
  173. }
  174. } catch(_err) {
  175. _callback(_err);
  176. return;
  177. }
  178. _callback();
  179. }`;
  180. case "multiple-sync promise":
  181. return `function(${args}) {
  182. return new Promise(_resolve => {
  183. const _fns = this._x;
  184. for(let _i = 0; _i < _fns.length; _i++) {
  185. const _result = _fns[_i](${args});
  186. if(_result !== undefined) {
  187. _resolve(_result);
  188. return;
  189. }
  190. }
  191. _resolve();
  192. });
  193. }`;
  194. }
  195. }