@kensio/yulin 0.14.0 → 0.16.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 (73) hide show
  1. package/dist/config/eslint/cffjs2.eslint.config.d.ts +3 -0
  2. package/dist/config/eslint/cffjs2.eslint.config.d.ts.map +1 -0
  3. package/dist/config/eslint/cffjs2.eslint.config.js +119 -0
  4. package/dist/config/eslint/cffjs2.eslint.config.js.map +1 -0
  5. package/dist/config/eslint/index.d.ts +2 -0
  6. package/dist/config/eslint/index.d.ts.map +1 -0
  7. package/dist/config/eslint/index.js +2 -0
  8. package/dist/config/eslint/index.js.map +1 -0
  9. package/dist/service/aws/sim-aws.d.ts.map +1 -1
  10. package/dist/service/aws/sim-aws.js +1 -0
  11. package/dist/service/aws/sim-aws.js.map +1 -1
  12. package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.js +1 -1
  13. package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts.map +1 -1
  14. package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.js +2 -2
  15. package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.js.map +1 -1
  16. package/dist/service/cloudfront/command/create-function/create-function.handler.d.ts.map +1 -1
  17. package/dist/service/cloudfront/command/create-function/create-function.handler.js +2 -2
  18. package/dist/service/cloudfront/command/create-function/create-function.handler.js.map +1 -1
  19. package/dist/service/cloudfront/command/get-distribution/get-distribution.handler.d.ts +3 -0
  20. package/dist/service/cloudfront/command/get-distribution/get-distribution.handler.d.ts.map +1 -1
  21. package/dist/service/cloudfront/command/get-distribution/get-distribution.handler.js +7 -3
  22. package/dist/service/cloudfront/command/get-distribution/get-distribution.handler.js.map +1 -1
  23. package/dist/service/cloudfront/sim-cloudfront.d.ts.map +1 -1
  24. package/dist/service/cloudfront/sim-cloudfront.js +1 -0
  25. package/dist/service/cloudfront/sim-cloudfront.js.map +1 -1
  26. package/dist/service/dynamodb/command/create-table/create-table.handler.d.ts.map +1 -1
  27. package/dist/service/dynamodb/command/create-table/create-table.handler.js +2 -2
  28. package/dist/service/dynamodb/command/create-table/create-table.handler.js.map +1 -1
  29. package/dist/service/dynamodb/command/describe-table/describe-table.handler.d.ts +3 -0
  30. package/dist/service/dynamodb/command/describe-table/describe-table.handler.d.ts.map +1 -1
  31. package/dist/service/dynamodb/command/describe-table/describe-table.handler.js +7 -3
  32. package/dist/service/dynamodb/command/describe-table/describe-table.handler.js.map +1 -1
  33. package/dist/service/dynamodb/command/list-tables/list-tables.handler.d.ts +3 -0
  34. package/dist/service/dynamodb/command/list-tables/list-tables.handler.d.ts.map +1 -1
  35. package/dist/service/dynamodb/command/list-tables/list-tables.handler.js +7 -3
  36. package/dist/service/dynamodb/command/list-tables/list-tables.handler.js.map +1 -1
  37. package/dist/service/dynamodb/sim-dynamodb.d.ts.map +1 -1
  38. package/dist/service/dynamodb/sim-dynamodb.js +8 -2
  39. package/dist/service/dynamodb/sim-dynamodb.js.map +1 -1
  40. package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts +3 -0
  41. package/dist/service/s3/command/create-bucket/create-bucket.handler.d.ts.map +1 -1
  42. package/dist/service/s3/command/create-bucket/create-bucket.handler.js +9 -5
  43. package/dist/service/s3/command/create-bucket/create-bucket.handler.js.map +1 -1
  44. package/dist/service/s3/command/get-object/get-object.handler.d.ts +4 -1
  45. package/dist/service/s3/command/get-object/get-object.handler.d.ts.map +1 -1
  46. package/dist/service/s3/command/get-object/get-object.handler.js +7 -3
  47. package/dist/service/s3/command/get-object/get-object.handler.js.map +1 -1
  48. package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts +4 -1
  49. package/dist/service/s3/command/list-buckets/list-buckets.handler.d.ts.map +1 -1
  50. package/dist/service/s3/command/list-buckets/list-buckets.handler.js +7 -3
  51. package/dist/service/s3/command/list-buckets/list-buckets.handler.js.map +1 -1
  52. package/dist/service/s3/command/list-objects/list-objects.handler.d.ts +4 -1
  53. package/dist/service/s3/command/list-objects/list-objects.handler.d.ts.map +1 -1
  54. package/dist/service/s3/command/list-objects/list-objects.handler.js +7 -3
  55. package/dist/service/s3/command/list-objects/list-objects.handler.js.map +1 -1
  56. package/dist/service/s3/command/put-bucket-website/put-bucket-website.handler.d.ts +3 -0
  57. package/dist/service/s3/command/put-bucket-website/put-bucket-website.handler.d.ts.map +1 -1
  58. package/dist/service/s3/command/put-bucket-website/put-bucket-website.handler.js +7 -3
  59. package/dist/service/s3/command/put-bucket-website/put-bucket-website.handler.js.map +1 -1
  60. package/dist/service/s3/command/put-object/put-object.handler.d.ts +3 -0
  61. package/dist/service/s3/command/put-object/put-object.handler.d.ts.map +1 -1
  62. package/dist/service/s3/command/put-object/put-object.handler.js +7 -3
  63. package/dist/service/s3/command/put-object/put-object.handler.js.map +1 -1
  64. package/dist/service/s3/sim-s3.d.ts +3 -0
  65. package/dist/service/s3/sim-s3.d.ts.map +1 -1
  66. package/dist/service/s3/sim-s3.js +22 -5
  67. package/dist/service/s3/sim-s3.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/dist/util/background/background.d.ts +47 -2
  70. package/dist/util/background/background.d.ts.map +1 -1
  71. package/dist/util/background/background.js +71 -4
  72. package/dist/util/background/background.js.map +1 -1
  73. package/package.json +18 -2
@@ -1,16 +1,60 @@
1
1
  export type BackgroundTask = () => Promise<void>;
2
2
  export interface BackgroundScheduler {
3
+ /**
4
+ * Wait at a simulator sequencing point.
5
+ *
6
+ * The default implementation is deterministic and simply yields to the
7
+ * microtask queue. Non-deterministic implementations may delay by a random
8
+ * amount to simulate operations completing out of sequence.
9
+ */
10
+ sequence(): Promise<void>;
3
11
  schedule(task: BackgroundTask): void;
4
12
  }
5
13
  export interface BackgroundCompleter {
6
14
  complete(): Promise<void>;
7
15
  }
8
16
  /**
9
- * Simple async background tasks scheduler, to simulate asynchronous distributed
10
- * operations occurring in a non-deterministic sequence.
17
+ * Deterministic async background tasks scheduler.
18
+ *
19
+ * Tasks still run asynchronously, outside the current call stack, but dispatch in
20
+ * the order they were scheduled.
11
21
  */
12
22
  export declare class BackgroundTasks implements BackgroundScheduler, BackgroundCompleter {
13
23
  private readonly pending;
24
+ /**
25
+ * Wait at a deterministic sequencing point.
26
+ */
27
+ sequence(): Promise<void>;
28
+ /**
29
+ * Schedule a task to happen asynchronously in the background.
30
+ */
31
+ schedule(task: BackgroundTask): void;
32
+ /**
33
+ * Wait until all tasks currently scheduled have finished.
34
+ * If tasks schedule more tasks, this will continue draining until idle.
35
+ */
36
+ complete(): Promise<void>;
37
+ /**
38
+ * See how many outstanding background tasks are scheduled.
39
+ */
40
+ get size(): number;
41
+ }
42
+ /**
43
+ * Non-deterministic async background tasks scheduler.
44
+ *
45
+ * Use this when you deliberately want to simulate asynchronous distributed
46
+ * operations completing in a random order.
47
+ */
48
+ export declare class NonDeterministicBackgroundTasks implements BackgroundScheduler, BackgroundCompleter {
49
+ private readonly pending;
50
+ private readonly maxJitterMs;
51
+ constructor(props?: {
52
+ maxJitterMs?: number;
53
+ });
54
+ /**
55
+ * Wait at a non-deterministic sequencing point.
56
+ */
57
+ sequence(): Promise<void>;
14
58
  /**
15
59
  * Schedule a task to happen asynchronously in the background.
16
60
  */
@@ -24,5 +68,6 @@ export declare class BackgroundTasks implements BackgroundScheduler, BackgroundC
24
68
  * See how many outstanding background tasks are scheduled.
25
69
  */
26
70
  get size(): number;
71
+ private sleep;
27
72
  }
28
73
  //# sourceMappingURL=background.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,eACX,YAAW,mBAAmB,EAAE,mBAAmB;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAsBpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;CACF"}
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,eACX,YAAW,mBAAmB,EAAE,mBAAmB;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAsBpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;CACF;AAED;;;;;GAKG;AACH,qBAAa,+BACX,YAAW,mBAAmB,EAAE,mBAAmB;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,KAAK,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAKhD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAoBpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;YAEa,KAAK;CAKpB"}
@@ -1,21 +1,29 @@
1
1
  /**
2
- * Simple async background tasks scheduler, to simulate asynchronous distributed
3
- * operations occurring in a non-deterministic sequence.
2
+ * Deterministic async background tasks scheduler.
3
+ *
4
+ * Tasks still run asynchronously, outside the current call stack, but dispatch in
5
+ * the order they were scheduled.
4
6
  */
5
7
  export class BackgroundTasks {
6
8
  pending = new Set();
9
+ /**
10
+ * Wait at a deterministic sequencing point.
11
+ */
12
+ sequence() {
13
+ return Promise.resolve();
14
+ }
7
15
  /**
8
16
  * Schedule a task to happen asynchronously in the background.
9
17
  */
10
18
  schedule(task) {
11
19
  const promise = new Promise((resolve) => {
12
- setTimeout(resolve, Math.random());
20
+ setTimeout(resolve, 0);
13
21
  })
14
22
  .then(task)
15
23
  .then(() => {
16
24
  //
17
25
  }, (error) => {
18
- // Keep the promise rejected so drain() can surface failures
26
+ // Keep the promise rejected so complete() can surface failures
19
27
  // deterministically.
20
28
  throw error;
21
29
  })
@@ -41,4 +49,63 @@ export class BackgroundTasks {
41
49
  return this.pending.size;
42
50
  }
43
51
  }
52
+ /**
53
+ * Non-deterministic async background tasks scheduler.
54
+ *
55
+ * Use this when you deliberately want to simulate asynchronous distributed
56
+ * operations completing in a random order.
57
+ */
58
+ export class NonDeterministicBackgroundTasks {
59
+ pending = new Set();
60
+ maxJitterMs;
61
+ constructor(props = {}) {
62
+ const { maxJitterMs = 5 } = props;
63
+ this.maxJitterMs = maxJitterMs;
64
+ }
65
+ /**
66
+ * Wait at a non-deterministic sequencing point.
67
+ */
68
+ async sequence() {
69
+ await this.sleep(Math.random() * this.maxJitterMs);
70
+ }
71
+ /**
72
+ * Schedule a task to happen asynchronously in the background.
73
+ */
74
+ schedule(task) {
75
+ const promise = this.sequence()
76
+ .then(task)
77
+ .then(() => {
78
+ //
79
+ }, (error) => {
80
+ // Keep the promise rejected so complete() can surface failures
81
+ // deterministically.
82
+ throw error;
83
+ })
84
+ .finally(() => {
85
+ this.pending.delete(promise);
86
+ });
87
+ this.pending.add(promise);
88
+ }
89
+ /**
90
+ * Wait until all tasks currently scheduled have finished.
91
+ * If tasks schedule more tasks, this will continue draining until idle.
92
+ */
93
+ async complete() {
94
+ while (this.pending.size > 0) {
95
+ // eslint-disable-next-line no-await-in-loop
96
+ await Promise.all(this.pending);
97
+ }
98
+ }
99
+ /**
100
+ * See how many outstanding background tasks are scheduled.
101
+ */
102
+ get size() {
103
+ return this.pending.size;
104
+ }
105
+ async sleep(ms = 0) {
106
+ await new Promise((resolve) => {
107
+ setTimeout(resolve, ms);
108
+ });
109
+ }
110
+ }
44
111
  //# sourceMappingURL=background.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"background.js","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAGT,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,IAAoB;QAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;aACC,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CACH,GAAG,EAAE;YACH,EAAE;QACJ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,4DAA4D;YAC5D,qBAAqB;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CACF;aACA,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../../../src/util/background/background.ts"],"names":[],"mappings":"AAmBA;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAGT,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEpD;;OAEG;IACH,QAAQ;QACN,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAoB;QAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC;aACC,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CACH,GAAG,EAAE;YACH,EAAE;QACJ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,+DAA+D;YAC/D,qBAAqB;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CACF;aACA,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,+BAA+B;IAGzB,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACnC,WAAW,CAAS;IAErC,YAAY,QAAkC,EAAE;QAC9C,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAoB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;aAC5B,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CACH,GAAG,EAAE;YACH,EAAE;QACJ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,+DAA+D;YAC/D,qBAAqB;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CACF;aACA,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;QACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kensio/yulin",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "description": "AWS system behaviour simulation for isolated unit testing",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,7 +18,6 @@
18
18
  "isolated"
19
19
  ],
20
20
  "exports": {
21
- "./package.json": "./package.json",
22
21
  ".": {
23
22
  "import": "./dist/index.js",
24
23
  "types": "./dist/index.d.ts"
@@ -35,6 +34,11 @@
35
34
  "import": "./dist/service/dynamodb/index.js",
36
35
  "types": "./dist/service/dynamodb/index.d.ts"
37
36
  },
37
+ "./eslint": {
38
+ "import": "./dist/config/eslint/index.js",
39
+ "types": "./dist/config/eslint/index.d.ts"
40
+ },
41
+ "./package.json": "./package.json",
38
42
  "./s3": {
39
43
  "import": "./dist/service/s3/index.js",
40
44
  "types": "./dist/service/s3/index.d.ts"
@@ -83,6 +87,18 @@
83
87
  "@kensio/part-factory": "^0.1.1",
84
88
  "lodash-es": "^4.18.1"
85
89
  },
90
+ "peerDependencies": {
91
+ "eslint": "^10.4.1",
92
+ "typescript-eslint": "^8.60.0"
93
+ },
94
+ "peerDependenciesMeta": {
95
+ "eslint": {
96
+ "optional": true
97
+ },
98
+ "typescript-eslint": {
99
+ "optional": true
100
+ }
101
+ },
86
102
  "scripts": {
87
103
  "build": "tsc -p tsconfig.build.json",
88
104
  "build:check": "tsc -p tsconfig.json --noEmit",