typespeed 2.0.20 → 2.0.22

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 (222) hide show
  1. package/README.md +18 -13
  2. package/dist/core.decorator.js +1 -30
  3. package/dist/default/default-authentication.class.js +25 -0
  4. package/dist/default/express-server.class.js +11 -4
  5. package/dist/default/log-default.class.js +0 -6
  6. package/dist/factory/authentication-factory.class.js +11 -0
  7. package/dist/factory/log-factory.class.js +9 -0
  8. package/dist/route.decorator.js +92 -2
  9. package/dist/scaffold/command.js +1 -1
  10. package/dist/typespeed.d.ts +25 -3
  11. package/dist/typespeed.js +3 -1
  12. package/package.json +10 -1
  13. package/src/core.decorator.ts +1 -29
  14. package/src/default/default-authentication.class.ts +10 -0
  15. package/src/default/express-server.class.ts +12 -5
  16. package/src/default/log-default.class.ts +0 -10
  17. package/src/factory/authentication-factory.class.ts +9 -0
  18. package/src/factory/log-factory.class.ts +9 -2
  19. package/src/route.decorator.ts +91 -3
  20. package/src/scaffold/command.ts +1 -1
  21. package/src/typespeed.d.ts +25 -3
  22. package/src/typespeed.ts +1 -0
  23. package/test/node_modules/.package-lock.json +65 -101
  24. package/test/node_modules/@types/body-parser/LICENSE +21 -0
  25. package/test/node_modules/@types/body-parser/README.md +16 -0
  26. package/test/node_modules/@types/body-parser/index.d.ts +107 -0
  27. package/test/node_modules/@types/body-parser/package.json +58 -0
  28. package/test/node_modules/@types/connect/LICENSE +21 -0
  29. package/test/node_modules/@types/connect/README.md +16 -0
  30. package/test/node_modules/@types/connect/index.d.ts +93 -0
  31. package/test/node_modules/@types/connect/package.json +32 -0
  32. package/test/node_modules/@types/express/LICENSE +21 -0
  33. package/test/node_modules/@types/express/README.md +16 -0
  34. package/test/node_modules/@types/express/index.d.ts +136 -0
  35. package/test/node_modules/@types/express/package.json +45 -0
  36. package/test/node_modules/@types/express-serve-static-core/LICENSE +21 -0
  37. package/test/node_modules/@types/express-serve-static-core/README.md +16 -0
  38. package/test/node_modules/@types/express-serve-static-core/index.d.ts +1281 -0
  39. package/test/node_modules/@types/express-serve-static-core/package.json +55 -0
  40. package/test/node_modules/@types/mime/LICENSE +21 -0
  41. package/test/node_modules/@types/mime/Mime.d.ts +10 -0
  42. package/test/node_modules/@types/mime/README.md +16 -0
  43. package/test/node_modules/@types/mime/index.d.ts +35 -0
  44. package/test/node_modules/@types/mime/lite.d.ts +7 -0
  45. package/test/node_modules/@types/mime/package.json +29 -0
  46. package/test/node_modules/@types/qs/LICENSE +21 -0
  47. package/test/node_modules/@types/qs/README.md +16 -0
  48. package/test/node_modules/@types/qs/index.d.ts +62 -0
  49. package/test/node_modules/@types/qs/package.json +65 -0
  50. package/test/node_modules/@types/range-parser/LICENSE +21 -0
  51. package/test/node_modules/@types/range-parser/README.md +55 -0
  52. package/test/node_modules/@types/range-parser/index.d.ts +35 -0
  53. package/test/node_modules/@types/range-parser/package.json +25 -0
  54. package/test/node_modules/@types/send/LICENSE +21 -0
  55. package/test/node_modules/@types/send/README.md +16 -0
  56. package/test/node_modules/@types/send/index.d.ts +231 -0
  57. package/test/node_modules/@types/send/package.json +33 -0
  58. package/test/node_modules/@types/serve-static/LICENSE +21 -0
  59. package/test/node_modules/@types/serve-static/README.md +16 -0
  60. package/test/node_modules/@types/serve-static/index.d.ts +113 -0
  61. package/test/node_modules/@types/serve-static/package.json +38 -0
  62. package/test/src/config.json +5 -0
  63. package/test/src/custom-log.class.ts +6 -0
  64. package/test/src/jwt-authentication.class.ts +29 -0
  65. package/test/src/test-request.class.ts +36 -0
  66. package/test/node_modules/@acuminous/bitsyntax/.github/workflows/node-js-ci.yml +0 -17
  67. package/test/node_modules/@acuminous/bitsyntax/.github/workflows/node-js-publish.yml +0 -30
  68. package/test/node_modules/@acuminous/bitsyntax/LICENSE +0 -6
  69. package/test/node_modules/@acuminous/bitsyntax/LICENSE-MIT +0 -21
  70. package/test/node_modules/@acuminous/bitsyntax/Makefile +0 -15
  71. package/test/node_modules/@acuminous/bitsyntax/README.md +0 -308
  72. package/test/node_modules/@acuminous/bitsyntax/index.js +0 -10
  73. package/test/node_modules/@acuminous/bitsyntax/lib/compile.js +0 -303
  74. package/test/node_modules/@acuminous/bitsyntax/lib/constructor.js +0 -142
  75. package/test/node_modules/@acuminous/bitsyntax/lib/grammar.pegjs +0 -67
  76. package/test/node_modules/@acuminous/bitsyntax/lib/interp.js +0 -232
  77. package/test/node_modules/@acuminous/bitsyntax/lib/parse.js +0 -32
  78. package/test/node_modules/@acuminous/bitsyntax/lib/parser.js +0 -1173
  79. package/test/node_modules/@acuminous/bitsyntax/lib/pattern.js +0 -119
  80. package/test/node_modules/@acuminous/bitsyntax/package.json +0 -36
  81. package/test/node_modules/@acuminous/bitsyntax/test/consing.test.js +0 -50
  82. package/test/node_modules/@acuminous/bitsyntax/test/matching.test.js +0 -193
  83. package/test/node_modules/amqplib/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  84. package/test/node_modules/amqplib/.github/workflows/test.yml +0 -38
  85. package/test/node_modules/amqplib/CHANGELOG.md +0 -430
  86. package/test/node_modules/amqplib/LICENSE +0 -6
  87. package/test/node_modules/amqplib/LICENSE-MIT +0 -21
  88. package/test/node_modules/amqplib/Makefile +0 -47
  89. package/test/node_modules/amqplib/README.md +0 -157
  90. package/test/node_modules/amqplib/bin/generate-defs.js +0 -722
  91. package/test/node_modules/amqplib/callback_api.js +0 -22
  92. package/test/node_modules/amqplib/channel_api.js +0 -16
  93. package/test/node_modules/amqplib/examples/headers.js +0 -42
  94. package/test/node_modules/amqplib/examples/receive_generator.js +0 -39
  95. package/test/node_modules/amqplib/examples/send_generators.js +0 -42
  96. package/test/node_modules/amqplib/examples/ssl.js +0 -64
  97. package/test/node_modules/amqplib/examples/tutorials/README.md +0 -93
  98. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log.js +0 -28
  99. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log_direct.js +0 -30
  100. package/test/node_modules/amqplib/examples/tutorials/callback_api/emit_log_topic.js +0 -27
  101. package/test/node_modules/amqplib/examples/tutorials/callback_api/new_task.js +0 -27
  102. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive.js +0 -30
  103. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs.js +0 -36
  104. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs_direct.js +0 -56
  105. package/test/node_modules/amqplib/examples/tutorials/callback_api/receive_logs_topic.js +0 -55
  106. package/test/node_modules/amqplib/examples/tutorials/callback_api/rpc_client.js +0 -49
  107. package/test/node_modules/amqplib/examples/tutorials/callback_api/rpc_server.js +0 -45
  108. package/test/node_modules/amqplib/examples/tutorials/callback_api/send.js +0 -29
  109. package/test/node_modules/amqplib/examples/tutorials/callback_api/worker.js +0 -35
  110. package/test/node_modules/amqplib/examples/tutorials/emit_log.js +0 -19
  111. package/test/node_modules/amqplib/examples/tutorials/emit_log_direct.js +0 -20
  112. package/test/node_modules/amqplib/examples/tutorials/emit_log_topic.js +0 -19
  113. package/test/node_modules/amqplib/examples/tutorials/new_task.js +0 -18
  114. package/test/node_modules/amqplib/examples/tutorials/package.json +0 -16
  115. package/test/node_modules/amqplib/examples/tutorials/receive.js +0 -21
  116. package/test/node_modules/amqplib/examples/tutorials/receive_logs.js +0 -28
  117. package/test/node_modules/amqplib/examples/tutorials/receive_logs_direct.js +0 -44
  118. package/test/node_modules/amqplib/examples/tutorials/receive_logs_topic.js +0 -43
  119. package/test/node_modules/amqplib/examples/tutorials/rpc_client.js +0 -52
  120. package/test/node_modules/amqplib/examples/tutorials/rpc_server.js +0 -39
  121. package/test/node_modules/amqplib/examples/tutorials/send.js +0 -23
  122. package/test/node_modules/amqplib/examples/tutorials/worker.js +0 -28
  123. package/test/node_modules/amqplib/examples/waitForConfirms.js +0 -22
  124. package/test/node_modules/amqplib/lib/api_args.js +0 -314
  125. package/test/node_modules/amqplib/lib/bitset.js +0 -130
  126. package/test/node_modules/amqplib/lib/callback_model.js +0 -327
  127. package/test/node_modules/amqplib/lib/channel.js +0 -499
  128. package/test/node_modules/amqplib/lib/channel_model.js +0 -302
  129. package/test/node_modules/amqplib/lib/codec.js +0 -321
  130. package/test/node_modules/amqplib/lib/connect.js +0 -189
  131. package/test/node_modules/amqplib/lib/connection.js +0 -663
  132. package/test/node_modules/amqplib/lib/credentials.js +0 -42
  133. package/test/node_modules/amqplib/lib/defs.js +0 -4966
  134. package/test/node_modules/amqplib/lib/error.js +0 -24
  135. package/test/node_modules/amqplib/lib/format.js +0 -40
  136. package/test/node_modules/amqplib/lib/frame.js +0 -113
  137. package/test/node_modules/amqplib/lib/heartbeat.js +0 -89
  138. package/test/node_modules/amqplib/lib/mux.js +0 -129
  139. package/test/node_modules/amqplib/package.json +0 -37
  140. package/test/node_modules/amqplib/test/bitset.js +0 -69
  141. package/test/node_modules/amqplib/test/callback_api.js +0 -312
  142. package/test/node_modules/amqplib/test/channel.js +0 -621
  143. package/test/node_modules/amqplib/test/channel_api.js +0 -596
  144. package/test/node_modules/amqplib/test/codec.js +0 -237
  145. package/test/node_modules/amqplib/test/connect.js +0 -197
  146. package/test/node_modules/amqplib/test/connection.js +0 -390
  147. package/test/node_modules/amqplib/test/data.js +0 -254
  148. package/test/node_modules/amqplib/test/frame.js +0 -198
  149. package/test/node_modules/amqplib/test/mux.js +0 -204
  150. package/test/node_modules/amqplib/test/util.js +0 -219
  151. package/test/node_modules/buffer-more-ints/.travis.yml +0 -6
  152. package/test/node_modules/buffer-more-ints/LICENSE +0 -19
  153. package/test/node_modules/buffer-more-ints/README.md +0 -69
  154. package/test/node_modules/buffer-more-ints/buffer-more-ints-tests.js +0 -183
  155. package/test/node_modules/buffer-more-ints/buffer-more-ints.js +0 -432
  156. package/test/node_modules/buffer-more-ints/package.json +0 -19
  157. package/test/node_modules/buffer-more-ints/polyfill.js +0 -71
  158. package/test/node_modules/core-util-is/LICENSE +0 -19
  159. package/test/node_modules/core-util-is/README.md +0 -3
  160. package/test/node_modules/core-util-is/lib/util.js +0 -107
  161. package/test/node_modules/core-util-is/package.json +0 -38
  162. package/test/node_modules/debug/LICENSE +0 -20
  163. package/test/node_modules/debug/README.md +0 -481
  164. package/test/node_modules/debug/package.json +0 -59
  165. package/test/node_modules/debug/src/browser.js +0 -269
  166. package/test/node_modules/debug/src/common.js +0 -274
  167. package/test/node_modules/debug/src/index.js +0 -10
  168. package/test/node_modules/debug/src/node.js +0 -263
  169. package/test/node_modules/inherits/LICENSE +0 -16
  170. package/test/node_modules/inherits/README.md +0 -42
  171. package/test/node_modules/inherits/inherits.js +0 -9
  172. package/test/node_modules/inherits/inherits_browser.js +0 -27
  173. package/test/node_modules/inherits/package.json +0 -29
  174. package/test/node_modules/isarray/README.md +0 -54
  175. package/test/node_modules/isarray/build/build.js +0 -209
  176. package/test/node_modules/isarray/component.json +0 -19
  177. package/test/node_modules/isarray/index.js +0 -3
  178. package/test/node_modules/isarray/package.json +0 -25
  179. package/test/node_modules/ms/index.js +0 -162
  180. package/test/node_modules/ms/license.md +0 -21
  181. package/test/node_modules/ms/package.json +0 -37
  182. package/test/node_modules/ms/readme.md +0 -60
  183. package/test/node_modules/querystringify/LICENSE +0 -22
  184. package/test/node_modules/querystringify/README.md +0 -61
  185. package/test/node_modules/querystringify/index.js +0 -118
  186. package/test/node_modules/querystringify/package.json +0 -38
  187. package/test/node_modules/readable-stream/LICENSE +0 -18
  188. package/test/node_modules/readable-stream/README.md +0 -15
  189. package/test/node_modules/readable-stream/duplex.js +0 -1
  190. package/test/node_modules/readable-stream/float.patch +0 -923
  191. package/test/node_modules/readable-stream/lib/_stream_duplex.js +0 -89
  192. package/test/node_modules/readable-stream/lib/_stream_passthrough.js +0 -46
  193. package/test/node_modules/readable-stream/lib/_stream_readable.js +0 -951
  194. package/test/node_modules/readable-stream/lib/_stream_transform.js +0 -209
  195. package/test/node_modules/readable-stream/lib/_stream_writable.js +0 -477
  196. package/test/node_modules/readable-stream/package.json +0 -32
  197. package/test/node_modules/readable-stream/passthrough.js +0 -1
  198. package/test/node_modules/readable-stream/readable.js +0 -10
  199. package/test/node_modules/readable-stream/transform.js +0 -1
  200. package/test/node_modules/readable-stream/writable.js +0 -1
  201. package/test/node_modules/requires-port/.travis.yml +0 -19
  202. package/test/node_modules/requires-port/LICENSE +0 -22
  203. package/test/node_modules/requires-port/README.md +0 -47
  204. package/test/node_modules/requires-port/index.js +0 -38
  205. package/test/node_modules/requires-port/package.json +0 -47
  206. package/test/node_modules/requires-port/test.js +0 -98
  207. package/test/node_modules/safe-buffer/LICENSE +0 -21
  208. package/test/node_modules/safe-buffer/README.md +0 -584
  209. package/test/node_modules/safe-buffer/index.d.ts +0 -187
  210. package/test/node_modules/safe-buffer/index.js +0 -62
  211. package/test/node_modules/safe-buffer/package.json +0 -37
  212. package/test/node_modules/string_decoder/LICENSE +0 -20
  213. package/test/node_modules/string_decoder/README.md +0 -7
  214. package/test/node_modules/string_decoder/index.js +0 -221
  215. package/test/node_modules/string_decoder/package.json +0 -25
  216. package/test/node_modules/url-parse/LICENSE +0 -22
  217. package/test/node_modules/url-parse/README.md +0 -153
  218. package/test/node_modules/url-parse/dist/url-parse.js +0 -755
  219. package/test/node_modules/url-parse/dist/url-parse.min.js +0 -1
  220. package/test/node_modules/url-parse/dist/url-parse.min.js.map +0 -1
  221. package/test/node_modules/url-parse/index.js +0 -589
  222. 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
- };