typespeed 2.0.21 → 2.0.23

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 (219) hide show
  1. package/dist/core.decorator.js +1 -30
  2. package/dist/default/default-authentication.class.js +25 -0
  3. package/dist/default/express-server.class.js +11 -4
  4. package/dist/default/log-default.class.js +0 -6
  5. package/dist/factory/authentication-factory.class.js +11 -0
  6. package/dist/factory/log-factory.class.js +9 -0
  7. package/dist/route.decorator.js +92 -2
  8. package/dist/typespeed.d.ts +40 -3
  9. package/dist/typespeed.js +3 -1
  10. package/package.json +1 -1
  11. package/src/core.decorator.ts +1 -29
  12. package/src/default/default-authentication.class.ts +10 -0
  13. package/src/default/express-server.class.ts +12 -5
  14. package/src/default/log-default.class.ts +0 -10
  15. package/src/factory/authentication-factory.class.ts +9 -0
  16. package/src/factory/log-factory.class.ts +9 -2
  17. package/src/route.decorator.ts +91 -3
  18. package/src/typespeed.d.ts +40 -3
  19. package/src/typespeed.ts +1 -0
  20. package/test/node_modules/.package-lock.json +65 -101
  21. package/test/node_modules/@types/body-parser/LICENSE +21 -0
  22. package/test/node_modules/@types/body-parser/README.md +16 -0
  23. package/test/node_modules/@types/body-parser/index.d.ts +107 -0
  24. package/test/node_modules/@types/body-parser/package.json +58 -0
  25. package/test/node_modules/@types/connect/LICENSE +21 -0
  26. package/test/node_modules/@types/connect/README.md +16 -0
  27. package/test/node_modules/@types/connect/index.d.ts +93 -0
  28. package/test/node_modules/@types/connect/package.json +32 -0
  29. package/test/node_modules/@types/express/LICENSE +21 -0
  30. package/test/node_modules/@types/express/README.md +16 -0
  31. package/test/node_modules/@types/express/index.d.ts +136 -0
  32. package/test/node_modules/@types/express/package.json +45 -0
  33. package/test/node_modules/@types/express-serve-static-core/LICENSE +21 -0
  34. package/test/node_modules/@types/express-serve-static-core/README.md +16 -0
  35. package/test/node_modules/@types/express-serve-static-core/index.d.ts +1281 -0
  36. package/test/node_modules/@types/express-serve-static-core/package.json +55 -0
  37. package/test/node_modules/@types/mime/LICENSE +21 -0
  38. package/test/node_modules/@types/mime/Mime.d.ts +10 -0
  39. package/test/node_modules/@types/mime/README.md +16 -0
  40. package/test/node_modules/@types/mime/index.d.ts +35 -0
  41. package/test/node_modules/@types/mime/lite.d.ts +7 -0
  42. package/test/node_modules/@types/mime/package.json +29 -0
  43. package/test/node_modules/@types/qs/LICENSE +21 -0
  44. package/test/node_modules/@types/qs/README.md +16 -0
  45. package/test/node_modules/@types/qs/index.d.ts +62 -0
  46. package/test/node_modules/@types/qs/package.json +65 -0
  47. package/test/node_modules/@types/range-parser/LICENSE +21 -0
  48. package/test/node_modules/@types/range-parser/README.md +55 -0
  49. package/test/node_modules/@types/range-parser/index.d.ts +35 -0
  50. package/test/node_modules/@types/range-parser/package.json +25 -0
  51. package/test/node_modules/@types/send/LICENSE +21 -0
  52. package/test/node_modules/@types/send/README.md +16 -0
  53. package/test/node_modules/@types/send/index.d.ts +231 -0
  54. package/test/node_modules/@types/send/package.json +33 -0
  55. package/test/node_modules/@types/serve-static/LICENSE +21 -0
  56. package/test/node_modules/@types/serve-static/README.md +16 -0
  57. package/test/node_modules/@types/serve-static/index.d.ts +113 -0
  58. package/test/node_modules/@types/serve-static/package.json +38 -0
  59. package/test/src/config.json +5 -0
  60. package/test/src/custom-log.class.ts +6 -0
  61. package/test/src/jwt-authentication.class.ts +29 -0
  62. package/test/src/test-request.class.ts +36 -0
  63. package/test/node_modules/@acuminous/bitsyntax/.github/workflows/node-js-ci.yml +0 -17
  64. package/test/node_modules/@acuminous/bitsyntax/.github/workflows/node-js-publish.yml +0 -30
  65. package/test/node_modules/@acuminous/bitsyntax/LICENSE +0 -6
  66. package/test/node_modules/@acuminous/bitsyntax/LICENSE-MIT +0 -21
  67. package/test/node_modules/@acuminous/bitsyntax/Makefile +0 -15
  68. package/test/node_modules/@acuminous/bitsyntax/README.md +0 -308
  69. package/test/node_modules/@acuminous/bitsyntax/index.js +0 -10
  70. package/test/node_modules/@acuminous/bitsyntax/lib/compile.js +0 -303
  71. package/test/node_modules/@acuminous/bitsyntax/lib/constructor.js +0 -142
  72. package/test/node_modules/@acuminous/bitsyntax/lib/grammar.pegjs +0 -67
  73. package/test/node_modules/@acuminous/bitsyntax/lib/interp.js +0 -232
  74. package/test/node_modules/@acuminous/bitsyntax/lib/parse.js +0 -32
  75. package/test/node_modules/@acuminous/bitsyntax/lib/parser.js +0 -1173
  76. package/test/node_modules/@acuminous/bitsyntax/lib/pattern.js +0 -119
  77. package/test/node_modules/@acuminous/bitsyntax/package.json +0 -36
  78. package/test/node_modules/@acuminous/bitsyntax/test/consing.test.js +0 -50
  79. package/test/node_modules/@acuminous/bitsyntax/test/matching.test.js +0 -193
  80. package/test/node_modules/amqplib/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  81. package/test/node_modules/amqplib/.github/workflows/test.yml +0 -38
  82. package/test/node_modules/amqplib/CHANGELOG.md +0 -430
  83. package/test/node_modules/amqplib/LICENSE +0 -6
  84. package/test/node_modules/amqplib/LICENSE-MIT +0 -21
  85. package/test/node_modules/amqplib/Makefile +0 -47
  86. package/test/node_modules/amqplib/README.md +0 -157
  87. package/test/node_modules/amqplib/bin/generate-defs.js +0 -722
  88. package/test/node_modules/amqplib/callback_api.js +0 -22
  89. package/test/node_modules/amqplib/channel_api.js +0 -16
  90. package/test/node_modules/amqplib/examples/headers.js +0 -42
  91. package/test/node_modules/amqplib/examples/receive_generator.js +0 -39
  92. package/test/node_modules/amqplib/examples/send_generators.js +0 -42
  93. package/test/node_modules/amqplib/examples/ssl.js +0 -64
  94. package/test/node_modules/amqplib/examples/tutorials/README.md +0 -93
  95. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log.js +0 -28
  96. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log_direct.js +0 -30
  97. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log_topic.js +0 -27
  98. package/test/node_modules/amqplib/examples/tutorials/callback_api/new_task.js +0 -27
  99. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive.js +0 -30
  100. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs.js +0 -36
  101. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs_direct.js +0 -56
  102. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs_topic.js +0 -55
  103. package/test/node_modules/amqplib/examples/tutorials/callback_api/rpc_client.js +0 -49
  104. package/test/node_modules/amqplib/examples/tutorials/callback_api/rpc_server.js +0 -45
  105. package/test/node_modules/amqplib/examples/tutorials/callback_api/send.js +0 -29
  106. package/test/node_modules/amqplib/examples/tutorials/callback_api/worker.js +0 -35
  107. package/test/node_modules/amqplib/examples/tutorials/emit_log.js +0 -19
  108. package/test/node_modules/amqplib/examples/tutorials/emit_log_direct.js +0 -20
  109. package/test/node_modules/amqplib/examples/tutorials/emit_log_topic.js +0 -19
  110. package/test/node_modules/amqplib/examples/tutorials/new_task.js +0 -18
  111. package/test/node_modules/amqplib/examples/tutorials/package.json +0 -16
  112. package/test/node_modules/amqplib/examples/tutorials/receive.js +0 -21
  113. package/test/node_modules/amqplib/examples/tutorials/receive_logs.js +0 -28
  114. package/test/node_modules/amqplib/examples/tutorials/receive_logs_direct.js +0 -44
  115. package/test/node_modules/amqplib/examples/tutorials/receive_logs_topic.js +0 -43
  116. package/test/node_modules/amqplib/examples/tutorials/rpc_client.js +0 -52
  117. package/test/node_modules/amqplib/examples/tutorials/rpc_server.js +0 -39
  118. package/test/node_modules/amqplib/examples/tutorials/send.js +0 -23
  119. package/test/node_modules/amqplib/examples/tutorials/worker.js +0 -28
  120. package/test/node_modules/amqplib/examples/waitForConfirms.js +0 -22
  121. package/test/node_modules/amqplib/lib/api_args.js +0 -314
  122. package/test/node_modules/amqplib/lib/bitset.js +0 -130
  123. package/test/node_modules/amqplib/lib/callback_model.js +0 -327
  124. package/test/node_modules/amqplib/lib/channel.js +0 -499
  125. package/test/node_modules/amqplib/lib/channel_model.js +0 -302
  126. package/test/node_modules/amqplib/lib/codec.js +0 -321
  127. package/test/node_modules/amqplib/lib/connect.js +0 -189
  128. package/test/node_modules/amqplib/lib/connection.js +0 -663
  129. package/test/node_modules/amqplib/lib/credentials.js +0 -42
  130. package/test/node_modules/amqplib/lib/defs.js +0 -4966
  131. package/test/node_modules/amqplib/lib/error.js +0 -24
  132. package/test/node_modules/amqplib/lib/format.js +0 -40
  133. package/test/node_modules/amqplib/lib/frame.js +0 -113
  134. package/test/node_modules/amqplib/lib/heartbeat.js +0 -89
  135. package/test/node_modules/amqplib/lib/mux.js +0 -129
  136. package/test/node_modules/amqplib/package.json +0 -37
  137. package/test/node_modules/amqplib/test/bitset.js +0 -69
  138. package/test/node_modules/amqplib/test/callback_api.js +0 -312
  139. package/test/node_modules/amqplib/test/channel.js +0 -621
  140. package/test/node_modules/amqplib/test/channel_api.js +0 -596
  141. package/test/node_modules/amqplib/test/codec.js +0 -237
  142. package/test/node_modules/amqplib/test/connect.js +0 -197
  143. package/test/node_modules/amqplib/test/connection.js +0 -390
  144. package/test/node_modules/amqplib/test/data.js +0 -254
  145. package/test/node_modules/amqplib/test/frame.js +0 -198
  146. package/test/node_modules/amqplib/test/mux.js +0 -204
  147. package/test/node_modules/amqplib/test/util.js +0 -219
  148. package/test/node_modules/buffer-more-ints/.travis.yml +0 -6
  149. package/test/node_modules/buffer-more-ints/LICENSE +0 -19
  150. package/test/node_modules/buffer-more-ints/README.md +0 -69
  151. package/test/node_modules/buffer-more-ints/buffer-more-ints-tests.js +0 -183
  152. package/test/node_modules/buffer-more-ints/buffer-more-ints.js +0 -432
  153. package/test/node_modules/buffer-more-ints/package.json +0 -19
  154. package/test/node_modules/buffer-more-ints/polyfill.js +0 -71
  155. package/test/node_modules/core-util-is/LICENSE +0 -19
  156. package/test/node_modules/core-util-is/README.md +0 -3
  157. package/test/node_modules/core-util-is/lib/util.js +0 -107
  158. package/test/node_modules/core-util-is/package.json +0 -38
  159. package/test/node_modules/debug/LICENSE +0 -20
  160. package/test/node_modules/debug/README.md +0 -481
  161. package/test/node_modules/debug/package.json +0 -59
  162. package/test/node_modules/debug/src/browser.js +0 -269
  163. package/test/node_modules/debug/src/common.js +0 -274
  164. package/test/node_modules/debug/src/index.js +0 -10
  165. package/test/node_modules/debug/src/node.js +0 -263
  166. package/test/node_modules/inherits/LICENSE +0 -16
  167. package/test/node_modules/inherits/README.md +0 -42
  168. package/test/node_modules/inherits/inherits.js +0 -9
  169. package/test/node_modules/inherits/inherits_browser.js +0 -27
  170. package/test/node_modules/inherits/package.json +0 -29
  171. package/test/node_modules/isarray/README.md +0 -54
  172. package/test/node_modules/isarray/build/build.js +0 -209
  173. package/test/node_modules/isarray/component.json +0 -19
  174. package/test/node_modules/isarray/index.js +0 -3
  175. package/test/node_modules/isarray/package.json +0 -25
  176. package/test/node_modules/ms/index.js +0 -162
  177. package/test/node_modules/ms/license.md +0 -21
  178. package/test/node_modules/ms/package.json +0 -37
  179. package/test/node_modules/ms/readme.md +0 -60
  180. package/test/node_modules/querystringify/LICENSE +0 -22
  181. package/test/node_modules/querystringify/README.md +0 -61
  182. package/test/node_modules/querystringify/index.js +0 -118
  183. package/test/node_modules/querystringify/package.json +0 -38
  184. package/test/node_modules/readable-stream/LICENSE +0 -18
  185. package/test/node_modules/readable-stream/README.md +0 -15
  186. package/test/node_modules/readable-stream/duplex.js +0 -1
  187. package/test/node_modules/readable-stream/float.patch +0 -923
  188. package/test/node_modules/readable-stream/lib/_stream_duplex.js +0 -89
  189. package/test/node_modules/readable-stream/lib/_stream_passthrough.js +0 -46
  190. package/test/node_modules/readable-stream/lib/_stream_readable.js +0 -951
  191. package/test/node_modules/readable-stream/lib/_stream_transform.js +0 -209
  192. package/test/node_modules/readable-stream/lib/_stream_writable.js +0 -477
  193. package/test/node_modules/readable-stream/package.json +0 -32
  194. package/test/node_modules/readable-stream/passthrough.js +0 -1
  195. package/test/node_modules/readable-stream/readable.js +0 -10
  196. package/test/node_modules/readable-stream/transform.js +0 -1
  197. package/test/node_modules/readable-stream/writable.js +0 -1
  198. package/test/node_modules/requires-port/.travis.yml +0 -19
  199. package/test/node_modules/requires-port/LICENSE +0 -22
  200. package/test/node_modules/requires-port/README.md +0 -47
  201. package/test/node_modules/requires-port/index.js +0 -38
  202. package/test/node_modules/requires-port/package.json +0 -47
  203. package/test/node_modules/requires-port/test.js +0 -98
  204. package/test/node_modules/safe-buffer/LICENSE +0 -21
  205. package/test/node_modules/safe-buffer/README.md +0 -584
  206. package/test/node_modules/safe-buffer/index.d.ts +0 -187
  207. package/test/node_modules/safe-buffer/index.js +0 -62
  208. package/test/node_modules/safe-buffer/package.json +0 -37
  209. package/test/node_modules/string_decoder/LICENSE +0 -20
  210. package/test/node_modules/string_decoder/README.md +0 -7
  211. package/test/node_modules/string_decoder/index.js +0 -221
  212. package/test/node_modules/string_decoder/package.json +0 -25
  213. package/test/node_modules/url-parse/LICENSE +0 -22
  214. package/test/node_modules/url-parse/README.md +0 -153
  215. package/test/node_modules/url-parse/dist/url-parse.js +0 -755
  216. package/test/node_modules/url-parse/dist/url-parse.min.js +0 -1
  217. package/test/node_modules/url-parse/dist/url-parse.min.js.map +0 -1
  218. package/test/node_modules/url-parse/index.js +0 -589
  219. package/test/node_modules/url-parse/package.json +0 -49
@@ -1,142 +0,0 @@
1
- // -*- js-indent-level: 2 -*-
2
-
3
- // Constructors given patterns
4
-
5
- 'use strict';
6
-
7
- var ints = require('buffer-more-ints');
8
- var Buffer = require('safe-buffer').Buffer;
9
-
10
- // Interpret the pattern, writing values into a buffer
11
- function write(buf, offset, pattern, bindings) {
12
- for (var i=0, len = pattern.length; i < len; i++) {
13
- var segment = pattern[i];
14
- switch (segment.type) {
15
- case 'string':
16
- offset += buf.write(segment.value, offset, 'utf8');
17
- break;
18
- case 'binary':
19
- offset += writeBinary(segment, buf, offset, bindings);
20
- break;
21
- case 'integer':
22
- offset += writeInteger(segment, buf, offset, bindings);
23
- break;
24
- case 'float':
25
- offset += writeFloat(segment, buf, offset, bindings);
26
- break;
27
- }
28
- }
29
- return offset;
30
- }
31
-
32
- function build(pattern, bindings) {
33
- var bufsize = size_of(pattern, bindings);
34
- var buf = Buffer.alloc(bufsize);
35
- write(buf, 0, pattern, bindings);
36
- return buf;
37
- }
38
-
39
- // In bytes
40
- function size_of_segment(segment, bindings) {
41
- // size refers to a variable
42
- if (typeof segment.size === 'string') {
43
- return (bindings[segment.size] * segment.unit) / 8;
44
- }
45
- if (segment.type === 'string') {
46
- return Buffer.byteLength(segment.value, 'utf8');
47
- }
48
- if (segment.type === 'binary' && segment.size === true) {
49
- var val = bindings[segment.name];
50
- return val.length;
51
- }
52
- return (segment.size * segment.unit) / 8;
53
- }
54
-
55
- // size of the to-be-constructed binary, in bytes
56
- function size_of(segments, bindings) {
57
- var size = 0;
58
- for (var i=0, len = segments.length; i < len; i++) {
59
- size += size_of_segment(segments[i], bindings);
60
- }
61
- return size;
62
- }
63
-
64
- function writeBinary(segment, buf, offset, bindings) {
65
- var bin = bindings[segment.name];
66
- var size = size_of_segment(segment, bindings);
67
- bin.copy(buf, offset, 0, size);
68
- return size;
69
- }
70
-
71
- // TODO in ff might use the noAssert argument to Buffer.write*() but
72
- // need to check that it does the right thing wrt little-endian
73
-
74
- function writeInteger(segment, buf, offset, bindings) {
75
- var value = (segment.name) ? bindings[segment.name] : segment.value;
76
- var size = size_of_segment(segment, bindings);
77
- return write_int(buf, value, offset, size, segment.bigendian);
78
- }
79
-
80
- function write_int(buf, value, offset, size, bigendian) {
81
- switch (size) {
82
- case 1:
83
- buf.writeUInt8(value, offset);
84
- break;
85
- case 2:
86
- (bigendian) ?
87
- buf.writeUInt16BE(value, offset) :
88
- buf.writeUInt16LE(value, offset);
89
- break;
90
- case 4:
91
- (bigendian) ?
92
- buf.writeUInt32BE(value, offset) :
93
- buf.writeUInt32LE(value, offset);
94
- break;
95
- case 8:
96
- (bigendian) ?
97
- ints.writeUInt64BE(buf, value, offset) :
98
- ints.writeUInt64LE(buf, value, offset);
99
- break;
100
- default:
101
- throw new Error("integer size * unit must be 8, 16, 32 or 64");
102
- }
103
- return size;
104
- }
105
-
106
- function writeFloat(segment, buf, offset, bindings) {
107
- var value = (segment.name) ? bindings[segment.name] : segment.value;
108
- var size = size_of_segment(segment, bindings);
109
- return write_float(buf, value, offset, size, segment.bigendian);
110
- }
111
-
112
- function write_float(buf, value, offset, size, bigendian) {
113
- if (size === 4) {
114
- (bigendian) ?
115
- buf.writeFloatBE(value, offset) :
116
- buf.writeFloatLE(value, offset);
117
- }
118
- else if (size === 8) {
119
- (bigendian) ?
120
- buf.writeDoubleBE(value, offset) :
121
- buf.writeDoubleLE(value, offset);
122
- }
123
- else {
124
- throw new Error("float size * unit must be 32 or 64");
125
- }
126
- return size;
127
- }
128
-
129
- var parse = require('./parse').parse;
130
-
131
- module.exports.write = write;
132
- module.exports.build = build;
133
- module.exports.write_int = write_int;
134
- module.exports.write_float = write_float;
135
-
136
- module.exports.builder = function(pstr) {
137
- pstr = (arguments.length > 1) ? [].join.call(arguments, ',') : pstr;
138
- var pattern = parse(pstr);
139
- return function(vars) {
140
- return build(pattern, vars);
141
- };
142
- };
@@ -1,67 +0,0 @@
1
-
2
- start
3
- = ws head:segment tail:segmentTail* { tail.unshift(head); return tail; }
4
-
5
- segmentTail
6
- = ws ',' ws seg:segment { return seg; }
7
-
8
- segment
9
- = str:string { return {string: str}; }
10
- / v:identifier size:size ? specs:specifierList ?
11
- { return {name: v, size: size, specifiers: specs}; }
12
- / v:number size:size ? specs:specifierList ?
13
- { return {value: v, size: size, specifiers: specs}; }
14
-
15
- string
16
- = '"' '"' { return ""; }
17
- / '"' chars:chars '"' { return chars; }
18
-
19
- /* From JSON example
20
- https://github.com/dmajda/pegjs/blob/master/examples/json.pegjs */
21
-
22
- chars
23
- = chars:char+ { return chars.join(""); }
24
-
25
- char
26
- = [^"\\\0-\x1F\x7f]
27
- / '\\"' { return '"'; }
28
- / "\\\\" { return "\\"; }
29
- / "\\/" { return "/"; }
30
- / "\\b" { return "\b"; }
31
- / "\\f" { return "\f"; }
32
- / "\\n" { return "\n"; }
33
- / "\\r" { return "\r"; }
34
- / "\\t" { return "\t"; }
35
- / "\\u" h1:hexDigit h2:hexDigit h3:hexDigit h4:hexDigit {
36
- return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4));
37
- }
38
-
39
- hexDigit
40
- = [0-9a-fA-F]
41
-
42
- identifier
43
- = (head:[_a-zA-Z] tail:[_a-zA-Z0-9]*) { return head + tail.join(''); }
44
-
45
- number
46
- = '0' { return 0; }
47
- / head:[1-9] tail:[0-9]* { return parseInt(head + tail.join('')); }
48
-
49
- size
50
- = ':' num:number { return num; }
51
- / ':' id:identifier { return id; }
52
-
53
- specifierList
54
- = '/' head:specifier tail:specifierTail* { tail.unshift(head); return tail; }
55
-
56
- specifierTail
57
- = '-' spec:specifier { return spec; }
58
-
59
- specifier
60
- = 'little' / 'big' / 'signed' / 'unsigned'
61
- / 'integer' / 'binary' / 'float'
62
- / unit
63
-
64
- unit
65
- = 'unit:' num:number { return 'unit:' + num; }
66
-
67
- ws = [ \t\n]*
@@ -1,232 +0,0 @@
1
- // -*- js-indent: 2 -*-
2
- // Interpreter for bit syntax AST.
3
- // Grammar:
4
- //
5
- // pattern := segment ("," segment)*
6
- // segment := (value | var) (":" size)? ("/" specifier ("-" specifier)*)? | string
7
- // var := "_" | identifier
8
- // size := integer | var
9
- // specifier := "little" | "big" | "signed" | "unsigned" | "unit" ":" 0..256 | type
10
- // type := "integer" | "binary" | "float"
11
- //
12
- // where integer has the obvious meaning, and identifier is anything
13
- // other than "_" that fits the JavaScript identifier specification.
14
- //
15
-
16
- // We'll use an object to represent each segment, and an array of
17
- // segments for a pattern. We won't try to optimise for groups of
18
- // patterns; we'll just step through each to see if it works. We rely
19
- // a hypothetical prior step to check that it's a valid pattern.
20
-
21
- // ? compile to intermediate instructions ?
22
-
23
- // A segment looks like
24
- // {
25
- // type: string, // 'string' is special case
26
- // size: integer | true, // true means 'all remaining'
27
- // name: string | null, // (may be '_')
28
- // value: value | null, // either name OR value
29
- // unit: integer,
30
- // signed: boolean,
31
- // bigendian: boolean
32
- // }
33
-
34
- 'use strict';
35
-
36
- var ints = require('buffer-more-ints'),
37
- debug = require('debug')('bitsyntax-Interpreter');
38
-
39
- function parse_int(bin, off, sizeInBytes, bigendian, signed) {
40
- switch (sizeInBytes) {
41
- case 1:
42
- return (signed) ? bin.readInt8(off) : bin.readUInt8(off);
43
- case 2:
44
- return (bigendian) ?
45
- (signed) ? bin.readInt16BE(off) : bin.readUInt16BE(off) :
46
- (signed) ? bin.readInt16LE(off) : bin.readUInt16LE(off);
47
- case 4:
48
- return (bigendian) ?
49
- (signed) ? bin.readInt32BE(off) : bin.readUInt32BE(off) :
50
- (signed) ? bin.readInt32LE(off) : bin.readUInt32LE(off);
51
- case 8:
52
- return (bigendian) ?
53
- ((signed) ? ints.readInt64BE : ints.readUInt64BE)(bin, off) :
54
- ((signed) ? ints.readInt64LE : ints.readUInt64LE)(bin, off);
55
- default:
56
- throw "Integers must be 8-, 16-, 32- or 64-bit";
57
- }
58
- }
59
-
60
- function parse_float(bin, off, sizeInBytes, bigendian) {
61
- switch (sizeInBytes) {
62
- case 4:
63
- return (bigendian) ? bin.readFloatBE(off) : bin.readFloatLE(off);
64
- case 8:
65
- return (bigendian) ? bin.readDoubleBE(off) : bin.readDoubleLE(off);
66
- default:
67
- throw "Floats must be 32- or 64-bit";
68
- }
69
- }
70
-
71
- function size_of(segment, bound) {
72
- var size = segment.size;
73
- if (typeof size === 'string') {
74
- return bound[size];
75
- }
76
- else {
77
- return size;
78
- }
79
- }
80
-
81
- function new_scope(env) {
82
- function scope() {};
83
- scope.prototype = env;
84
- return new scope();
85
- }
86
-
87
- function bindings(scope) {
88
- var s = {};
89
- for (var k in scope) {
90
- if (scope.hasOwnProperty(k)) {
91
- s[k] = scope[k];
92
- }
93
- }
94
- return s;
95
- }
96
-
97
- function match(pattern, binary, boundvars) {
98
- var offset = 0, vars = new_scope(boundvars);
99
- var binsize = binary.length * 8;
100
-
101
- function skip_bits(segment) {
102
- debug("skip bits"); debug(segment);
103
- var size = size_of(segment, vars);
104
- if (size === true) {
105
- if (offset % 8 === 0) {
106
- offset = binsize;
107
- return true;
108
- }
109
- else {
110
- return false;
111
- }
112
- }
113
-
114
- var bits = segment.unit * size;
115
- if (offset + bits > binsize) {
116
- return false;
117
- }
118
- else {
119
- offset += bits;
120
- }
121
- }
122
-
123
- function get_integer(segment) {
124
- debug("get_integer"); debug(segment);
125
- // let's do only multiples of eight bits for now
126
- var unit = segment.unit, size = size_of(segment, vars);
127
- var bitsize = size * unit;
128
- var byteoffset = offset / 8; // NB assumes aligned
129
- offset += bitsize;
130
- if (bitsize % 8 > 0 || (offset > binsize)) {
131
- return false;
132
- }
133
- else {
134
- return parse_int(binary, byteoffset, bitsize / 8,
135
- segment.bigendian, segment.signed);
136
- }
137
- }
138
-
139
- function get_float(segment) {
140
- debug("get_float"); debug(segment);
141
- var unit = segment.unit; var size = size_of(segment, vars);
142
- var bitsize = size * unit;
143
- var byteoffset = offset / 8; // assume aligned
144
- offset += bitsize;
145
- if (offset > binsize) {
146
- return false;
147
- }
148
- else {
149
- return parse_float(binary, byteoffset,
150
- bitsize / 8, segment.bigendian);
151
- }
152
- }
153
-
154
- function get_binary(segment) {
155
- debug("get_binary"); debug(segment);
156
- var unit = segment.unit, size = size_of(segment, vars);
157
- var byteoffset = offset / 8; // NB alignment
158
-
159
- if (size === true) {
160
- offset = binsize;
161
- return binary.slice(byteoffset);
162
- }
163
- else {
164
- var bitsize = size * unit;
165
- if (bitsize % 8 > 0 || (offset + bitsize) > binsize) {
166
- return false;
167
- }
168
- else {
169
- offset += bitsize;
170
- return binary.slice(byteoffset, byteoffset + bitsize / 8);
171
- }
172
- }
173
- }
174
-
175
- function get_string(segment) {
176
- debug("get_string"); debug(segment);
177
- var len = segment.value.length;
178
- var byteoffset = offset / 8;
179
-
180
- offset += len * 8;
181
- if (offset > binsize) {
182
- return false;
183
- }
184
- // FIXME bytes vs UTF8 characters
185
- return binary.slice(byteoffset, byteoffset + len).toString('utf8');
186
- }
187
-
188
- var patternlen = pattern.length;
189
- for (var i = 0; i < patternlen; i++) {
190
- var segment = pattern[i];
191
- var result = false;
192
- if (segment.name === '_') {
193
- result = skip_bits(segment);
194
- }
195
- else {
196
- switch (segment.type) {
197
- case 'string':
198
- result = get_string(segment);
199
- break;
200
- case 'integer':
201
- result = get_integer(segment);
202
- break;
203
- case 'float':
204
- result = get_float(segment);
205
- break;
206
- case 'binary':
207
- result = get_binary(segment);
208
- break;
209
- }
210
-
211
- if (result === false) {
212
- return false;
213
- }
214
- else if (segment.name) {
215
- vars[segment.name] = result;
216
- }
217
- else if (segment.value != result) {
218
- return false;
219
- }
220
- }
221
- }
222
- if (offset == binsize) {
223
- return bindings(vars);
224
- }
225
- else {
226
- return false;
227
- }
228
- }
229
-
230
- module.exports.match = match;
231
- module.exports.parse_int = parse_int;
232
- module.exports.parse_float = parse_float;
@@ -1,32 +0,0 @@
1
- // Parse patterns in string form into the form we use for interpreting
2
- // (and later, for compiling).
3
-
4
- 'use strict';
5
-
6
- var ast = require('./pattern');
7
- var parser = require('./parser');
8
-
9
- function parse_pattern(string) {
10
- var segments = parser.parse(string);
11
- for (var i=0, len = segments.length; i < len; i++) {
12
- var s = segments[i];
13
- if (s.string != undefined) {
14
- segments[i] = ast.string(s.string);
15
- }
16
- else if (s.value != undefined) {
17
- segments[i] = ast.value(s.value, s.size, s.specifiers);
18
- }
19
- else if (s.name != undefined) {
20
- segments[i] = ast.variable(s.name, s.size, s.specifiers);
21
- }
22
- else {
23
- throw "Unknown segment " + s;
24
- }
25
- }
26
- return segments;
27
- }
28
-
29
- module.exports.parse = function() {
30
- var str = [].join.call(arguments, ',');
31
- return parse_pattern(str);
32
- };