@nocobase/plugin-field-sort 1.5.0-alpha.1

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 (142) hide show
  1. package/LICENSE.txt +159 -0
  2. package/README.md +1 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/index.d.ts +15 -0
  6. package/dist/client/index.js +10 -0
  7. package/dist/client/locale.d.ts +10 -0
  8. package/dist/client/sort-interface.d.ts +131 -0
  9. package/dist/externalVersion.js +18 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.js +48 -0
  12. package/dist/locale/en-US.json +1 -0
  13. package/dist/locale/zh-CN.json +1 -0
  14. package/dist/node_modules/@nocobase/lock-manager/LICENSE +661 -0
  15. package/dist/node_modules/@nocobase/lock-manager/lib/index.d.ts +10 -0
  16. package/dist/node_modules/@nocobase/lock-manager/lib/index.js +1 -0
  17. package/dist/node_modules/@nocobase/lock-manager/lib/lock-manager.d.ts +46 -0
  18. package/dist/node_modules/@nocobase/lock-manager/lib/lock-manager.js +171 -0
  19. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/client.js +12 -0
  20. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/assign.d.ts +17 -0
  21. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/assign.js +143 -0
  22. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/client.d.ts +30 -0
  23. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/client.js +88 -0
  24. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/collections-graph.d.ts +24 -0
  25. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/collections-graph.js +107 -0
  26. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/common.d.ts +14 -0
  27. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/common.js +87 -0
  28. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/date.d.ts +38 -0
  29. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/date.js +214 -0
  30. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/dayjs.d.ts +10 -0
  31. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/dayjs.js +72 -0
  32. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/forEach.d.ts +9 -0
  33. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/forEach.js +45 -0
  34. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/fs-exists.d.ts +9 -0
  35. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/fs-exists.js +46 -0
  36. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/getValuesByPath.d.ts +9 -0
  37. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/getValuesByPath.js +71 -0
  38. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/handlebars.d.ts +10 -0
  39. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/handlebars.js +73 -0
  40. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/i18n.d.ts +10 -0
  41. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/i18n.js +43 -0
  42. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/index.d.ts +38 -0
  43. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/index.js +105 -0
  44. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/isPortalInBody.d.ts +13 -0
  45. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/isPortalInBody.js +54 -0
  46. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/isValidFilter.d.ts +9 -0
  47. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/isValidFilter.js +63 -0
  48. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/json-templates.d.ts +9 -0
  49. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/json-templates.js +141 -0
  50. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/koa-multer.d.ts +15 -0
  51. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/koa-multer.js +92 -0
  52. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/log.d.ts +9 -0
  53. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/log.js +39 -0
  54. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/measure-execution-time.d.ts +9 -0
  55. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/measure-execution-time.js +44 -0
  56. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/merge.d.ts +9 -0
  57. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/merge.js +55 -0
  58. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/mixin/AsyncEmitter.d.ts +11 -0
  59. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/mixin/AsyncEmitter.js +80 -0
  60. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/mixin/index.d.ts +9 -0
  61. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/mixin/index.js +48 -0
  62. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/notification.d.ts +9 -0
  63. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/notification.js +43 -0
  64. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/number.d.ts +9 -0
  65. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/number.js +45 -0
  66. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parse-date.d.ts +15 -0
  67. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parse-date.js +262 -0
  68. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parse-filter.d.ts +67 -0
  69. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parse-filter.js +320 -0
  70. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parseHTML.d.ts +15 -0
  71. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/parseHTML.js +42 -0
  72. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/perf-hooks.d.ts +14 -0
  73. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/perf-hooks.js +69 -0
  74. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/registry.d.ts +22 -0
  75. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/registry.js +69 -0
  76. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/requireModule.d.ts +12 -0
  77. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/requireModule.js +90 -0
  78. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/server.d.ts +19 -0
  79. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/server.js +50 -0
  80. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/toposort.d.ts +18 -0
  81. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/toposort.js +83 -0
  82. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/uid.d.ts +9 -0
  83. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/uid.js +44 -0
  84. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/url.d.ts +14 -0
  85. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/url.js +46 -0
  86. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/wrap-middleware.d.ts +1 -0
  87. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/lib/wrap-middleware.js +63 -0
  88. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/package.json +20 -0
  89. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/plugin-symlink.d.ts +6 -0
  90. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/plugin-symlink.js +102 -0
  91. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/server.d.ts +2 -0
  92. package/dist/node_modules/@nocobase/lock-manager/node_modules/@nocobase/utils/server.js +12 -0
  93. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/.eslintrc.js +5 -0
  94. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/.github/workflows/ci.yml +24 -0
  95. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/.github/workflows/lint.yml +23 -0
  96. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-multipart-fields-100mb-big.js +149 -0
  97. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-multipart-fields-100mb-small.js +143 -0
  98. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-multipart-files-100mb-big.js +154 -0
  99. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-multipart-files-100mb-small.js +148 -0
  100. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js +101 -0
  101. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js +84 -0
  102. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/lib/index.js +57 -0
  103. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/lib/types/multipart.js +653 -0
  104. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/lib/types/urlencoded.js +350 -0
  105. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/lib/utils.js +596 -0
  106. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/package.json +22 -0
  107. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/common.js +109 -0
  108. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/test-types-multipart-charsets.js +94 -0
  109. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/test-types-multipart-stream-pause.js +102 -0
  110. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/test-types-multipart.js +1053 -0
  111. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/test-types-urlencoded.js +488 -0
  112. package/dist/node_modules/@nocobase/lock-manager/node_modules/busboy/test/test.js +20 -0
  113. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/index.js +104 -0
  114. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/lib/counter.js +28 -0
  115. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/lib/file-appender.js +67 -0
  116. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/lib/make-middleware.js +173 -0
  117. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/lib/multer-error.js +24 -0
  118. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/lib/remove-uploaded-files.js +28 -0
  119. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/package.json +52 -0
  120. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/storage/disk.js +66 -0
  121. package/dist/node_modules/@nocobase/lock-manager/node_modules/multer/storage/memory.js +21 -0
  122. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/.eslintrc.js +5 -0
  123. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/.github/workflows/ci.yml +24 -0
  124. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/.github/workflows/lint.yml +23 -0
  125. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/lib/sbmh.js +267 -0
  126. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/package.json +34 -0
  127. package/dist/node_modules/@nocobase/lock-manager/node_modules/streamsearch/test/test.js +70 -0
  128. package/dist/node_modules/@nocobase/lock-manager/package.json +1 -0
  129. package/dist/node_modules/@nocobase/lock-manager/src/__tests__/lock-manager.test.ts +169 -0
  130. package/dist/node_modules/@nocobase/lock-manager/src/index.ts +11 -0
  131. package/dist/node_modules/@nocobase/lock-manager/src/lock-manager.ts +169 -0
  132. package/dist/server/action.d.ts +26 -0
  133. package/dist/server/action.js +168 -0
  134. package/dist/server/index.d.ts +10 -0
  135. package/dist/server/index.js +48 -0
  136. package/dist/server/plugin.d.ts +19 -0
  137. package/dist/server/plugin.js +69 -0
  138. package/dist/server/sort-field.d.ts +24 -0
  139. package/dist/server/sort-field.js +197 -0
  140. package/package.json +16 -0
  141. package/server.d.ts +2 -0
  142. package/server.js +1 -0
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { inspect } = require('util');
5
+
6
+ const mustCallChecks = [];
7
+
8
+ function noop() {}
9
+
10
+ function runCallChecks(exitCode) {
11
+ if (exitCode !== 0) return;
12
+
13
+ const failed = mustCallChecks.filter((context) => {
14
+ if ('minimum' in context) {
15
+ context.messageSegment = `at least ${context.minimum}`;
16
+ return context.actual < context.minimum;
17
+ }
18
+ context.messageSegment = `exactly ${context.exact}`;
19
+ return context.actual !== context.exact;
20
+ });
21
+
22
+ failed.forEach((context) => {
23
+ console.error('Mismatched %s function calls. Expected %s, actual %d.',
24
+ context.name,
25
+ context.messageSegment,
26
+ context.actual);
27
+ console.error(context.stack.split('\n').slice(2).join('\n'));
28
+ });
29
+
30
+ if (failed.length)
31
+ process.exit(1);
32
+ }
33
+
34
+ function mustCall(fn, exact) {
35
+ return _mustCallInner(fn, exact, 'exact');
36
+ }
37
+
38
+ function mustCallAtLeast(fn, minimum) {
39
+ return _mustCallInner(fn, minimum, 'minimum');
40
+ }
41
+
42
+ function _mustCallInner(fn, criteria = 1, field) {
43
+ if (process._exiting)
44
+ throw new Error('Cannot use common.mustCall*() in process exit handler');
45
+
46
+ if (typeof fn === 'number') {
47
+ criteria = fn;
48
+ fn = noop;
49
+ } else if (fn === undefined) {
50
+ fn = noop;
51
+ }
52
+
53
+ if (typeof criteria !== 'number')
54
+ throw new TypeError(`Invalid ${field} value: ${criteria}`);
55
+
56
+ const context = {
57
+ [field]: criteria,
58
+ actual: 0,
59
+ stack: inspect(new Error()),
60
+ name: fn.name || '<anonymous>'
61
+ };
62
+
63
+ // Add the exit listener only once to avoid listener leak warnings
64
+ if (mustCallChecks.length === 0)
65
+ process.on('exit', runCallChecks);
66
+
67
+ mustCallChecks.push(context);
68
+
69
+ function wrapped(...args) {
70
+ ++context.actual;
71
+ return fn.call(this, ...args);
72
+ }
73
+ // TODO: remove origFn?
74
+ wrapped.origFn = fn;
75
+
76
+ return wrapped;
77
+ }
78
+
79
+ function getCallSite(top) {
80
+ const originalStackFormatter = Error.prepareStackTrace;
81
+ Error.prepareStackTrace = (err, stack) =>
82
+ `${stack[0].getFileName()}:${stack[0].getLineNumber()}`;
83
+ const err = new Error();
84
+ Error.captureStackTrace(err, top);
85
+ // With the V8 Error API, the stack is not formatted until it is accessed
86
+ // eslint-disable-next-line no-unused-expressions
87
+ err.stack;
88
+ Error.prepareStackTrace = originalStackFormatter;
89
+ return err.stack;
90
+ }
91
+
92
+ function mustNotCall(msg) {
93
+ const callSite = getCallSite(mustNotCall);
94
+ return function mustNotCall(...args) {
95
+ args = args.map(inspect).join(', ');
96
+ const argsInfo = (args.length > 0
97
+ ? `\ncalled with arguments: ${args}`
98
+ : '');
99
+ assert.fail(
100
+ `${msg || 'function should not have been called'} at ${callSite}`
101
+ + argsInfo);
102
+ };
103
+ }
104
+
105
+ module.exports = {
106
+ mustCall,
107
+ mustCallAtLeast,
108
+ mustNotCall,
109
+ };
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { inspect } = require('util');
5
+
6
+ const { mustCall } = require(`${__dirname}/common.js`);
7
+
8
+ const busboy = require('..');
9
+
10
+ const input = Buffer.from([
11
+ '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k',
12
+ 'Content-Disposition: form-data; '
13
+ + 'name="upload_file_0"; filename="テスト.dat"',
14
+ 'Content-Type: application/octet-stream',
15
+ '',
16
+ 'A'.repeat(1023),
17
+ '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k--'
18
+ ].join('\r\n'));
19
+ const boundary = '---------------------------paZqsnEHRufoShdX6fh0lUhXBP4k';
20
+ const expected = [
21
+ { type: 'file',
22
+ name: 'upload_file_0',
23
+ data: Buffer.from('A'.repeat(1023)),
24
+ info: {
25
+ filename: 'テスト.dat',
26
+ encoding: '7bit',
27
+ mimeType: 'application/octet-stream',
28
+ },
29
+ limited: false,
30
+ },
31
+ ];
32
+ const bb = busboy({
33
+ defParamCharset: 'utf8',
34
+ headers: {
35
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
36
+ }
37
+ });
38
+ const results = [];
39
+
40
+ bb.on('field', (name, val, info) => {
41
+ results.push({ type: 'field', name, val, info });
42
+ });
43
+
44
+ bb.on('file', (name, stream, info) => {
45
+ const data = [];
46
+ let nb = 0;
47
+ const file = {
48
+ type: 'file',
49
+ name,
50
+ data: null,
51
+ info,
52
+ limited: false,
53
+ };
54
+ results.push(file);
55
+ stream.on('data', (d) => {
56
+ data.push(d);
57
+ nb += d.length;
58
+ }).on('limit', () => {
59
+ file.limited = true;
60
+ }).on('close', () => {
61
+ file.data = Buffer.concat(data, nb);
62
+ assert.strictEqual(stream.truncated, file.limited);
63
+ }).once('error', (err) => {
64
+ file.err = err.message;
65
+ });
66
+ });
67
+
68
+ bb.on('error', (err) => {
69
+ results.push({ error: err.message });
70
+ });
71
+
72
+ bb.on('partsLimit', () => {
73
+ results.push('partsLimit');
74
+ });
75
+
76
+ bb.on('filesLimit', () => {
77
+ results.push('filesLimit');
78
+ });
79
+
80
+ bb.on('fieldsLimit', () => {
81
+ results.push('fieldsLimit');
82
+ });
83
+
84
+ bb.on('close', mustCall(() => {
85
+ assert.deepStrictEqual(
86
+ results,
87
+ expected,
88
+ 'Results mismatch.\n'
89
+ + `Parsed: ${inspect(results)}\n`
90
+ + `Expected: ${inspect(expected)}`
91
+ );
92
+ }));
93
+
94
+ bb.end(input);
@@ -0,0 +1,102 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { randomFillSync } = require('crypto');
5
+ const { inspect } = require('util');
6
+
7
+ const busboy = require('..');
8
+
9
+ const { mustCall } = require('./common.js');
10
+
11
+ const BOUNDARY = 'u2KxIV5yF1y+xUspOQCCZopaVgeV6Jxihv35XQJmuTx8X3sh';
12
+
13
+ function formDataSection(key, value) {
14
+ return Buffer.from(
15
+ `\r\n--${BOUNDARY}`
16
+ + `\r\nContent-Disposition: form-data; name="${key}"`
17
+ + `\r\n\r\n${value}`
18
+ );
19
+ }
20
+
21
+ function formDataFile(key, filename, contentType) {
22
+ const buf = Buffer.allocUnsafe(100000);
23
+ return Buffer.concat([
24
+ Buffer.from(`\r\n--${BOUNDARY}\r\n`),
25
+ Buffer.from(`Content-Disposition: form-data; name="${key}"`
26
+ + `; filename="${filename}"\r\n`),
27
+ Buffer.from(`Content-Type: ${contentType}\r\n\r\n`),
28
+ randomFillSync(buf)
29
+ ]);
30
+ }
31
+
32
+ const reqChunks = [
33
+ Buffer.concat([
34
+ formDataFile('file', 'file.bin', 'application/octet-stream'),
35
+ formDataSection('foo', 'foo value'),
36
+ ]),
37
+ formDataSection('bar', 'bar value'),
38
+ Buffer.from(`\r\n--${BOUNDARY}--\r\n`)
39
+ ];
40
+ const bb = busboy({
41
+ headers: {
42
+ 'content-type': `multipart/form-data; boundary=${BOUNDARY}`
43
+ }
44
+ });
45
+ const expected = [
46
+ { type: 'file',
47
+ name: 'file',
48
+ info: {
49
+ filename: 'file.bin',
50
+ encoding: '7bit',
51
+ mimeType: 'application/octet-stream',
52
+ },
53
+ },
54
+ { type: 'field',
55
+ name: 'foo',
56
+ val: 'foo value',
57
+ info: {
58
+ nameTruncated: false,
59
+ valueTruncated: false,
60
+ encoding: '7bit',
61
+ mimeType: 'text/plain',
62
+ },
63
+ },
64
+ { type: 'field',
65
+ name: 'bar',
66
+ val: 'bar value',
67
+ info: {
68
+ nameTruncated: false,
69
+ valueTruncated: false,
70
+ encoding: '7bit',
71
+ mimeType: 'text/plain',
72
+ },
73
+ },
74
+ ];
75
+ const results = [];
76
+
77
+ bb.on('field', (name, val, info) => {
78
+ results.push({ type: 'field', name, val, info });
79
+ });
80
+
81
+ bb.on('file', (name, stream, info) => {
82
+ results.push({ type: 'file', name, info });
83
+ // Simulate a pipe where the destination is pausing (perhaps due to waiting
84
+ // for file system write to finish)
85
+ setTimeout(() => {
86
+ stream.resume();
87
+ }, 10);
88
+ });
89
+
90
+ bb.on('close', mustCall(() => {
91
+ assert.deepStrictEqual(
92
+ results,
93
+ expected,
94
+ 'Results mismatch.\n'
95
+ + `Parsed: ${inspect(results)}\n`
96
+ + `Expected: ${inspect(expected)}`
97
+ );
98
+ }));
99
+
100
+ for (const chunk of reqChunks)
101
+ bb.write(chunk);
102
+ bb.end();