protons 2.0.3 → 3.0.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 (59) hide show
  1. package/LICENSE +3 -20
  2. package/README.md +31 -124
  3. package/dist/bin/protons.js +34 -0
  4. package/dist/src/index.d.ts +2 -0
  5. package/dist/src/index.d.ts.map +1 -0
  6. package/dist/src/index.js +206 -0
  7. package/dist/src/index.js.map +1 -0
  8. package/package.json +149 -71
  9. package/src/index.ts +282 -0
  10. package/.aegir.js +0 -11
  11. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  12. package/.github/ISSUE_TEMPLATE/open_an_issue.md +0 -19
  13. package/.github/config.yml +0 -68
  14. package/.github/workflows/main.yml +0 -79
  15. package/CHANGELOG.md +0 -93
  16. package/bench/bench.proto.js +0 -30
  17. package/bench/index.js +0 -57
  18. package/example.js +0 -19
  19. package/example.proto +0 -4
  20. package/src/compile/decode.js +0 -330
  21. package/src/compile/encode.js +0 -133
  22. package/src/compile/encoding-length.js +0 -102
  23. package/src/compile/encodings/bool.js +0 -21
  24. package/src/compile/encodings/bytes.js +0 -42
  25. package/src/compile/encodings/double.js +0 -21
  26. package/src/compile/encodings/encoder.js +0 -14
  27. package/src/compile/encodings/fixed32.js +0 -21
  28. package/src/compile/encodings/fixed64.js +0 -25
  29. package/src/compile/encodings/float.js +0 -21
  30. package/src/compile/encodings/index.js +0 -22
  31. package/src/compile/encodings/int32.js +0 -22
  32. package/src/compile/encodings/int64.js +0 -49
  33. package/src/compile/encodings/sfixed32.js +0 -21
  34. package/src/compile/encodings/sint64.js +0 -19
  35. package/src/compile/encodings/string.js +0 -41
  36. package/src/compile/encodings/varint.js +0 -19
  37. package/src/compile/index.js +0 -165
  38. package/src/compile/utils.js +0 -5
  39. package/src/index.js +0 -39
  40. package/test/basic.spec.js +0 -109
  41. package/test/booleans.spec.js +0 -37
  42. package/test/bytes.spec.js +0 -36
  43. package/test/corrupted.spec.js +0 -50
  44. package/test/custom-types.spec.js +0 -55
  45. package/test/defaults.spec.js +0 -44
  46. package/test/enums.spec.js +0 -21
  47. package/test/float.spec.js +0 -28
  48. package/test/integers.spec.js +0 -72
  49. package/test/map.spec.js +0 -35
  50. package/test/nan.spec.js +0 -28
  51. package/test/nested.spec.js +0 -70
  52. package/test/notpacked.spec.js +0 -33
  53. package/test/oneof.spec.js +0 -59
  54. package/test/optional.spec.js +0 -65
  55. package/test/packed.spec.js +0 -61
  56. package/test/repeated.spec.js +0 -74
  57. package/test/strings.spec.js +0 -45
  58. package/test/test.proto.js +0 -134
  59. package/test/utf-8.spec.js +0 -21
@@ -1,133 +0,0 @@
1
- 'use strict'
2
-
3
- var defined = require('./utils').defined
4
- var varint = require('varint')
5
-
6
- function compileEncode (m, resolve, enc, oneofs, encodingLength) {
7
- const oneofsKeys = Object.keys(oneofs)
8
- const encLength = enc.length
9
- const ints = {}
10
- for (let i = 0; i < encLength; i++) {
11
- ints[i] = {
12
- p: varint.encode(m.fields[i].tag << 3 | 2),
13
- h: varint.encode(m.fields[i].tag << 3 | enc[i].type)
14
- }
15
-
16
- const field = m.fields[i]
17
- m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'
18
- }
19
-
20
- function encodeField (buf, view, offset, h, e, packed, innerVal) {
21
- let j = 0
22
- if (!packed) {
23
- for (j = 0; j < h.length; j++) {
24
- buf[offset++] = h[j]
25
- }
26
- }
27
-
28
- if (e.message) {
29
- varint.encode(e.encodingLength(innerVal), buf, offset)
30
- offset += varint.encode.bytes
31
- }
32
-
33
- e.encode(innerVal, buf, view, offset)
34
-
35
- return offset + e.encode.bytes
36
- }
37
-
38
- return function encode (obj, buf, view, offset = 0) {
39
- if (buf == null) {
40
- buf = new Uint8Array(encodingLength(obj))
41
- }
42
-
43
- if (view == null) {
44
- view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)
45
- }
46
-
47
- const oldOffset = offset
48
- const objKeys = Object.keys(obj)
49
- let i = 0
50
-
51
- // oneof checks
52
-
53
- let match = false
54
- for (i = 0; i < oneofsKeys.length; i++) {
55
- const name = oneofsKeys[i]
56
- const prop = oneofs[i]
57
- if (objKeys.indexOf(prop) > -1) {
58
- if (match) {
59
- throw new Error('only one of the properties defined in oneof ' + name + ' can be set')
60
- }
61
-
62
- match = true
63
- }
64
- }
65
-
66
- for (i = 0; i < encLength; i++) {
67
- const e = enc[i]
68
- const field = m.fields[i] // was f
69
- let val = obj[field.name]
70
- let j = 0
71
-
72
- if (!defined(val)) {
73
- if (field.required) {
74
- throw new Error(field.name + ' is required')
75
- }
76
- continue
77
- }
78
- const p = ints[i].p
79
- const h = ints[i].h
80
-
81
- const packed = field.packed
82
-
83
- if (field.map) {
84
- const tmp = Object.keys(val)
85
- for (j = 0; j < tmp.length; j++) {
86
- tmp[j] = {
87
- key: tmp[j],
88
- value: val[tmp[j]]
89
- }
90
- }
91
- val = tmp
92
- }
93
-
94
- if (packed) {
95
- let packedLen = 0
96
- for (j = 0; j < val.length; j++) {
97
- if (!Object.prototype.hasOwnProperty.call(val, j)) {
98
- continue
99
- }
100
-
101
- packedLen += e.encodingLength(val[j])
102
- }
103
-
104
- if (packedLen) {
105
- for (j = 0; j < h.length; j++) {
106
- buf[offset++] = p[j]
107
- }
108
- varint.encode(packedLen, buf, offset)
109
- offset += varint.encode.bytes
110
- }
111
- }
112
-
113
- if (field.repeated) {
114
- let innerVal
115
- for (j = 0; j < val.length; j++) {
116
- innerVal = val[j]
117
- if (!defined(innerVal)) {
118
- continue
119
- }
120
-
121
- offset = encodeField(buf, view, offset, h, e, packed, innerVal)
122
- }
123
- } else {
124
- offset = encodeField(buf, view, offset, h, e, packed, val)
125
- }
126
- }
127
-
128
- encode.bytes = offset - oldOffset
129
- return buf
130
- }
131
- }
132
-
133
- module.exports = compileEncode
@@ -1,102 +0,0 @@
1
- 'use strict'
2
-
3
- var defined = require('./utils').defined
4
- var varint = require('varint')
5
-
6
- function compileEncodingLength (m, enc, oneofs) {
7
- const oneofsKeys = Object.keys(oneofs)
8
- const encLength = enc.length
9
-
10
- const hls = new Array(encLength)
11
-
12
- for (let i = 0; i < m.fields.length; i++) {
13
- hls[i] = varint.encodingLength(m.fields[i].tag << 3 | enc[i].type)
14
-
15
- const field = m.fields[i]
16
- m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'
17
- }
18
-
19
- return function encodingLength (obj) {
20
- let length = 0
21
- let i = 0
22
- let j = 0
23
-
24
- for (i = 0; i < oneofsKeys.length; i++) {
25
- const name = oneofsKeys[i]
26
- const props = oneofs[name]
27
-
28
- let match = false
29
- for (j = 0; j < props.length; j++) {
30
- if (defined(obj[props[j]])) {
31
- if (match) {
32
- throw new Error('only one of the properties defined in oneof ' + name + ' can be set')
33
- }
34
- match = true
35
- }
36
- }
37
- }
38
-
39
- for (i = 0; i < encLength; i++) {
40
- const e = enc[i]
41
- const field = m.fields[i]
42
- let val = obj[field.name]
43
- const hl = hls[i]
44
- let len
45
-
46
- if (!defined(val)) {
47
- if (field.required) {
48
- throw new Error(field.name + ' is required')
49
- }
50
-
51
- continue
52
- }
53
-
54
- if (field.map) {
55
- const tmp = Object.keys(val)
56
- for (j = 0; j < tmp.length; j++) {
57
- tmp[j] = {
58
- key: tmp[j],
59
- value: val[tmp[j]]
60
- }
61
- }
62
-
63
- val = tmp
64
- }
65
-
66
- if (field.packed) {
67
- let packedLen = 0
68
- for (j = 0; j < val.length; j++) {
69
- if (!defined(val[j])) {
70
- continue
71
- }
72
- len = e.encodingLength(val[j])
73
- packedLen += len
74
-
75
- if (e.message) {
76
- packedLen += varint.encodingLength(len)
77
- }
78
- }
79
-
80
- if (packedLen) {
81
- length += hl + packedLen + varint.encodingLength(packedLen)
82
- }
83
- } else if (field.repeated) {
84
- for (j = 0; j < val.length; j++) {
85
- if (!defined(val[j])) {
86
- continue
87
- }
88
-
89
- len = e.encodingLength(val[j])
90
- length += hl + len + (e.message ? varint.encodingLength(len) : 0)
91
- }
92
- } else {
93
- len = e.encodingLength(val)
94
- length += hl + len + (e.message ? varint.encodingLength(len) : 0)
95
- }
96
- }
97
-
98
- return length
99
- }
100
- }
101
-
102
- module.exports = compileEncodingLength
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function boolEncodingLength () {
6
- return 1
7
- }
8
-
9
- function boolEncode (value, buffer, dataView, offset) {
10
- buffer[offset] = value ? 1 : 0
11
- boolEncode.bytes = 1
12
- }
13
-
14
- function boolDecode (buffer, dataView, offset) {
15
- const bool = buffer[offset] > 0
16
- boolDecode.bytes = 1
17
-
18
- return bool
19
- }
20
-
21
- module.exports = encoder(0, boolEncode, boolDecode, boolEncodingLength)
@@ -1,42 +0,0 @@
1
- 'use strict'
2
-
3
- const varint = require('varint')
4
- const encoder = require('./encoder')
5
-
6
- function bytesBufferLength (val) {
7
- return val.byteLength
8
- }
9
-
10
- function bytesEncodingLength (val) {
11
- const len = bytesBufferLength(val)
12
- return varint.encodingLength(len) + len
13
- }
14
-
15
- function bytesEncode (val, buffer, dataView, offset) {
16
- const oldOffset = offset
17
- const len = bytesBufferLength(val)
18
-
19
- varint.encode(len, buffer, offset)
20
- offset += varint.encode.bytes
21
-
22
- buffer.set(val, offset)
23
- offset += len
24
-
25
- bytesEncode.bytes = offset - oldOffset
26
- }
27
-
28
- function bytesDecode (buffer, dataView, offset) {
29
- const oldOffset = offset
30
-
31
- const len = varint.decode(buffer, offset)
32
- offset += varint.decode.bytes
33
-
34
- const val = buffer.slice(offset, offset + len)
35
- offset += val.length
36
-
37
- bytesDecode.bytes = offset - oldOffset
38
-
39
- return val
40
- }
41
-
42
- module.exports = encoder(2, bytesEncode, bytesDecode, bytesEncodingLength)
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function doubleEncodingLength () {
6
- return 8
7
- }
8
-
9
- function doubleEncode (val, buffer, dataView, offset) {
10
- dataView.setFloat64(offset, val, true)
11
- doubleEncode.bytes = 8
12
- }
13
-
14
- function doubleDecode (buffer, dataView, offset) {
15
- const val = dataView.getFloat64(offset, true)
16
- doubleDecode.bytes = 8
17
-
18
- return val
19
- }
20
-
21
- module.exports = encoder(1, doubleEncode, doubleDecode, doubleEncodingLength)
@@ -1,14 +0,0 @@
1
- 'use strict'
2
-
3
- function encoder (type, encode, decode, encodingLength) {
4
- encode.bytes = decode.bytes = 0
5
-
6
- return {
7
- type: type,
8
- encode: encode,
9
- decode: decode,
10
- encodingLength: encodingLength
11
- }
12
- }
13
-
14
- module.exports = encoder
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function fixed32EncodingLength (val) {
6
- return 4
7
- }
8
-
9
- function fixed32Encode (val, buffer, dataView, offset) {
10
- dataView.setUint32(offset, val, true)
11
- fixed32Encode.bytes = 4
12
- }
13
-
14
- function fixed32Decode (buffer, dataView, offset) {
15
- const val = dataView.getUint32(offset, true)
16
- fixed32Decode.bytes = 4
17
-
18
- return val
19
- }
20
-
21
- module.exports = encoder(5, fixed32Encode, fixed32Decode, fixed32EncodingLength)
@@ -1,25 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function fixed64EncodingLength () {
6
- return 8
7
- }
8
-
9
- function fixed64Encode (val, buffer, dataView, offset) {
10
- for (const byte of val) {
11
- buffer[offset] = byte
12
- offset++
13
- }
14
-
15
- fixed64Encode.bytes = 8
16
- }
17
-
18
- function fixed64Decode (buffer, dataView, offset) {
19
- const val = buffer.slice(offset, offset + 8)
20
- fixed64Decode.bytes = 8
21
-
22
- return val
23
- }
24
-
25
- module.exports = encoder(1, fixed64Encode, fixed64Decode, fixed64EncodingLength)
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function floatEncodingLength () {
6
- return 4
7
- }
8
-
9
- function floatEncode (val, buffer, dataView, offset) {
10
- dataView.setFloat32(offset, val, true)
11
- floatEncode.bytes = 4
12
- }
13
-
14
- function floatDecode (buffer, dataView, offset) {
15
- const val = dataView.getFloat32(offset, true)
16
- floatDecode.bytes = 4
17
-
18
- return val
19
- }
20
-
21
- module.exports = encoder(5, floatEncode, floatDecode, floatEncodingLength)
@@ -1,22 +0,0 @@
1
- 'use strict'
2
-
3
- exports.make = require('./encoder')
4
- exports.bytes = require('./bytes')
5
- exports.string = require('./string')
6
- exports.bool = require('./bool')
7
- exports.int32 = require('./int32')
8
- exports.int64 = require('./int64')
9
- exports.sint32 =
10
- exports.sint64 = require('./sint64')
11
- exports.uint32 =
12
- exports.uint64 =
13
- exports.enum =
14
- exports.varint = require('./varint')
15
-
16
- // we cannot represent these in javascript so we just use buffers
17
- exports.fixed64 =
18
- exports.sfixed64 = require('./fixed64')
19
- exports.double = require('./double')
20
- exports.fixed32 = require('./fixed32')
21
- exports.sfixed32 = require('./sfixed32')
22
- exports.float = require('./float')
@@ -1,22 +0,0 @@
1
- 'use strict'
2
-
3
- const varint = require('varint')
4
- const encoder = require('./encoder')
5
-
6
- function in32Encode (val, buffer, dataView, offset) {
7
- varint.encode(val < 0 ? val + 4294967296 : val, buffer, offset)
8
- in32Encode.bytes = varint.encode.bytes
9
- }
10
-
11
- function int32Decode (buffer, dataView, offset) {
12
- const val = varint.decode(buffer, offset)
13
- int32Decode.bytes = varint.decode.bytes
14
-
15
- return val > 2147483647 ? val - 4294967296 : val
16
- }
17
-
18
- function int32EncodingLength (val) {
19
- return varint.encodingLength(val < 0 ? val + 4294967296 : val)
20
- }
21
-
22
- module.exports = encoder(0, in32Encode, int32Decode, int32EncodingLength)
@@ -1,49 +0,0 @@
1
- 'use strict'
2
-
3
- const varint = require('varint')
4
- const encoder = require('./encoder')
5
-
6
- function int64Encode (val, buffer, dataView, offset) {
7
- if (val < 0) {
8
- const last = offset + 9
9
- varint.encode(val * -1, buffer, offset)
10
-
11
- offset += varint.encode.bytes - 1
12
- buffer[offset] = buffer[offset] | 0x80
13
-
14
- while (offset < last - 1) {
15
- offset++
16
- buffer[offset] = 0xff
17
- }
18
- buffer[last] = 0x01
19
-
20
- int64Encode.bytes = 10
21
- } else {
22
- varint.encode(val, buffer, offset)
23
- int64Encode.bytes = varint.encode.bytes
24
- }
25
- }
26
-
27
- function int64Decode (buffer, dataView, offset) {
28
- let val = varint.decode(buffer, offset)
29
-
30
- if (val >= Math.pow(2, 63)) {
31
- let limit = 9
32
- while (buffer[offset + limit - 1] === 0xff) limit--
33
- limit = limit || 9
34
- const subset = buffer.subarray(offset, offset + limit)
35
- subset[limit - 1] = subset[limit - 1] & 0x7f
36
- val = -1 * varint.decode(subset, 0)
37
- int64Decode.bytes = 10
38
- } else {
39
- int64Decode.bytes = varint.decode.bytes
40
- }
41
-
42
- return val
43
- }
44
-
45
- function int64EncodingLength (val) {
46
- return val < 0 ? 10 : varint.encodingLength(val)
47
- }
48
-
49
- module.exports = encoder(0, int64Encode, int64Decode, int64EncodingLength)
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const encoder = require('./encoder')
4
-
5
- function sfixed32EncodingLength (val) {
6
- return 4
7
- }
8
-
9
- function sfixed32Encode (val, buffer, dataView, offset) {
10
- dataView.setInt32(offset, val, true)
11
- sfixed32Encode.bytes = 4
12
- }
13
-
14
- function sfixed32Decode (buffer, dataView, offset) {
15
- const val = dataView.getInt32(offset, true)
16
- sfixed32Decode.bytes = 4
17
-
18
- return val
19
- }
20
-
21
- module.exports = encoder(5, sfixed32Encode, sfixed32Decode, sfixed32EncodingLength)
@@ -1,19 +0,0 @@
1
- 'use strict'
2
-
3
- const svarint = require('signed-varint')
4
- const encoder = require('./encoder')
5
-
6
- function svarintEncode (val, buffer, dataView, offset) {
7
- svarint.encode(val, buffer, offset)
8
-
9
- svarintEncode.bytes = svarint.encode.bytes
10
- }
11
-
12
- function svarintDecode (buffer, dataView, offset) {
13
- const val = svarint.decode(buffer, offset)
14
- svarintDecode.bytes = svarint.decode.bytes
15
-
16
- return val
17
- }
18
-
19
- module.exports = encoder(0, svarintEncode, svarintDecode, svarint.encodingLength)
@@ -1,41 +0,0 @@
1
- 'use strict'
2
-
3
- const varint = require('varint')
4
- const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
5
- const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
6
- const encoder = require('./encoder')
7
-
8
- function stringEncodingLength (val) {
9
- const len = uint8ArrayFromString(val).byteLength
10
- return varint.encodingLength(len) + len
11
- }
12
-
13
- function stringEncode (val, buffer, dataView, offset) {
14
- const oldOffset = offset
15
- const len = uint8ArrayFromString(val).byteLength
16
-
17
- varint.encode(len, buffer, offset, 'utf-8')
18
- offset += varint.encode.bytes
19
-
20
- const arr = uint8ArrayFromString(val)
21
- buffer.set(arr, offset)
22
- offset += arr.length
23
-
24
- stringEncode.bytes = offset - oldOffset
25
- }
26
-
27
- function stringDecode (buffer, dataView, offset) {
28
- const oldOffset = offset
29
-
30
- const len = varint.decode(buffer, offset)
31
- offset += varint.decode.bytes
32
-
33
- const val = uint8ArrayToString(buffer.subarray(offset, offset + len))
34
- offset += len
35
-
36
- stringDecode.bytes = offset - oldOffset
37
-
38
- return val
39
- }
40
-
41
- module.exports = encoder(2, stringEncode, stringDecode, stringEncodingLength)
@@ -1,19 +0,0 @@
1
- 'use strict'
2
-
3
- const varint = require('varint')
4
- const encoder = require('./encoder')
5
-
6
- function varintEncode (val, buffer, dataView, offset) {
7
- varint.encode(val, buffer, offset)
8
-
9
- varintEncode.bytes = varint.encode.bytes
10
- }
11
-
12
- function varintDecode (buffer, dataView, offset) {
13
- const val = varint.decode(buffer, offset)
14
- varintDecode.bytes = varint.decode.bytes
15
-
16
- return val
17
- }
18
-
19
- module.exports = encoder(0, varintEncode, varintDecode, varint.encodingLength)