protons 2.0.1 → 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 -122
  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 -70
  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/.travis.yml +0 -42
  15. package/CHANGELOG.md +0 -83
  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
package/package.json CHANGED
@@ -1,82 +1,161 @@
1
1
  {
2
2
  "name": "protons",
3
- "version": "2.0.1",
4
- "description": "Protocol Buffers for Node.js without compiliation",
5
- "leadMaintainer": "Alex Potsides <alex@achingbrain.net>",
3
+ "version": "3.0.0",
4
+ "description": "Protobuf to ts transpiler",
5
+ "license": "Apache-2.0 OR MIT",
6
+ "homepage": "https://github.com/ipfs/protons/tree/master/packages/protons#readme",
6
7
  "repository": {
7
8
  "type": "git",
8
- "url": "https://github.com/ipfs/protons"
9
+ "url": "git+https://github.com/ipfs/protons.git"
9
10
  },
10
- "dependencies": {
11
- "protocol-buffers-schema": "^3.3.1",
12
- "signed-varint": "^2.0.1",
13
- "uint8arrays": "^2.1.3",
14
- "varint": "^5.0.0"
11
+ "bugs": {
12
+ "url": "https://github.com/ipfs/protons/issues"
15
13
  },
16
- "devDependencies": {
17
- "aegir": "^25.0.0",
18
- "benchmark": "^2.1.4",
19
- "protocol-buffers": "^4.1.0",
20
- "protons": "^1.0.0",
21
- "tape": "^4.8.0"
14
+ "engines": {
15
+ "node": ">=16.0.0",
16
+ "npm": ">=7.0.0"
17
+ },
18
+ "bin": {
19
+ "protons": "./dist/bin/protons.js"
20
+ },
21
+ "type": "module",
22
+ "types": "./dist/src/index.d.ts",
23
+ "typesVersions": {
24
+ "*": {
25
+ "*": [
26
+ "*",
27
+ "dist/*",
28
+ "dist/src/*",
29
+ "dist/src/*/index"
30
+ ],
31
+ "src/*": [
32
+ "*",
33
+ "dist/*",
34
+ "dist/src/*",
35
+ "dist/src/*/index"
36
+ ]
37
+ }
38
+ },
39
+ "files": [
40
+ "src",
41
+ "dist/src",
42
+ "!dist/test",
43
+ "!**/*.tsbuildinfo"
44
+ ],
45
+ "exports": {
46
+ ".": {
47
+ "import": "./dist/src/index.js",
48
+ "types": "./dist/src/index.d.ts"
49
+ },
50
+ "./status": {
51
+ "import": "./dist/src/status.js",
52
+ "types": "./dist/src/status.d.ts"
53
+ }
54
+ },
55
+ "eslintConfig": {
56
+ "extends": "ipfs",
57
+ "parserOptions": {
58
+ "sourceType": "module"
59
+ }
60
+ },
61
+ "release": {
62
+ "branches": [
63
+ "master"
64
+ ],
65
+ "plugins": [
66
+ [
67
+ "@semantic-release/commit-analyzer",
68
+ {
69
+ "preset": "conventionalcommits",
70
+ "releaseRules": [
71
+ {
72
+ "breaking": true,
73
+ "release": "major"
74
+ },
75
+ {
76
+ "revert": true,
77
+ "release": "patch"
78
+ },
79
+ {
80
+ "type": "feat",
81
+ "release": "minor"
82
+ },
83
+ {
84
+ "type": "fix",
85
+ "release": "patch"
86
+ },
87
+ {
88
+ "type": "chore",
89
+ "release": "patch"
90
+ },
91
+ {
92
+ "type": "docs",
93
+ "release": "patch"
94
+ },
95
+ {
96
+ "type": "test",
97
+ "release": "patch"
98
+ },
99
+ {
100
+ "scope": "no-release",
101
+ "release": false
102
+ }
103
+ ]
104
+ }
105
+ ],
106
+ [
107
+ "@semantic-release/release-notes-generator",
108
+ {
109
+ "preset": "conventionalcommits",
110
+ "presetConfig": {
111
+ "types": [
112
+ {
113
+ "type": "feat",
114
+ "section": "Features"
115
+ },
116
+ {
117
+ "type": "fix",
118
+ "section": "Bug Fixes"
119
+ },
120
+ {
121
+ "type": "chore",
122
+ "section": "Trivial Changes"
123
+ },
124
+ {
125
+ "type": "docs",
126
+ "section": "Trivial Changes"
127
+ },
128
+ {
129
+ "type": "test",
130
+ "section": "Tests"
131
+ }
132
+ ]
133
+ }
134
+ }
135
+ ],
136
+ "@semantic-release/changelog",
137
+ "@semantic-release/npm",
138
+ "@semantic-release/github",
139
+ "@semantic-release/git"
140
+ ]
22
141
  },
23
142
  "scripts": {
24
- "test": "aegir test",
25
- "test:browser": "aegir test --target browser",
26
- "test:node": "aegir test --target node",
27
143
  "lint": "aegir lint",
28
- "release": "aegir release",
29
- "release-minor": "aegir release --type minor",
30
- "release-major": "aegir release --type major",
31
- "build": "aegir build",
32
- "bench": "node bench"
33
- },
34
- "bugs": {
35
- "url": "https://github.com/ipfs/protons/issues"
144
+ "dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
145
+ "build": "tsc",
146
+ "pretest": "npm run build",
147
+ "test": "aegir test -t node -f ./dist/test/*.js -f ./dist/test/**/*.js",
148
+ "test:node": "npm run test -- -t node --cov",
149
+ "release": "semantic-release -e semantic-release-monorepo"
36
150
  },
37
- "homepage": "https://github.com/ipfs/protons",
38
- "main": "src/index.js",
39
- "directories": {
40
- "test": "test"
151
+ "dependencies": {
152
+ "meow": "^10.1.2",
153
+ "protobufjs": "^6.11.2"
41
154
  },
42
- "keywords": [
43
- "protobuf",
44
- "protocol",
45
- "buffers",
46
- "protocolbuffers",
47
- "encode",
48
- "decode",
49
- "google",
50
- "serialize",
51
- "parse",
52
- "levelup",
53
- "encodings",
54
- "encoding"
55
- ],
56
- "author": "Friedel Ziegelmayer <dignifiedquire@gmail.com>",
57
- "license": "MIT",
58
- "contributors": [
59
- "Mathias Buus <mathiasbuus@gmail.com>",
60
- "dignifiedquire <dignifiedquire@gmail.com>",
61
- "achingbrain <alex@achingbrain.net>",
62
- "Young Hahn <young@mapbox.com>",
63
- "David Dias <daviddias.p@gmail.com>",
64
- "Hector Sanjuan <code@hector.link>",
65
- "Mo Kamioner <mkamioner@gmail.com>",
66
- "tcme <hi@this-connect.me>",
67
- "Eduardo Sorribas <eduardo@sorribas.org>",
68
- "Hugo Dias <hugomrdias@gmail.com>",
69
- "Lars-Magnus Skog <ralphtheninja@riseup.net>",
70
- "Patrick Pfeiffer <patrick@buzzle.at>",
71
- "Kevin Ennis <kennis84@gmail.com>",
72
- "Elijah Insua <tmpvar@gmail.com>",
73
- "Astro <astro@spaceboyz.net>",
74
- "Andreas Madsen <amwebdk@gmail.com>",
75
- "Sergii Shutovskyi <sergii.shutovskyi@trademob.com>",
76
- "Steven Allen <steven@stebalien.com>",
77
- "David Bruant <bruant.d@gmail.com>",
78
- "Irakli Gozalishvili <contact@gozala.io>",
79
- "João Antunes <j.goncalo.antunes@gmail.com>",
80
- "Brendan Ward <bcward@consbio.org>"
81
- ]
155
+ "devDependencies": {
156
+ "aegir": "^36.1.3",
157
+ "long": "^4.0.0",
158
+ "pbjs": "^0.0.14",
159
+ "protons-runtime": "^1.0.0"
160
+ }
82
161
  }
package/src/index.ts ADDED
@@ -0,0 +1,282 @@
1
+ import { main as pbjs } from 'protobufjs/cli/pbjs.js'
2
+ import path from 'path'
3
+ import { promisify } from 'util'
4
+ import fs from 'fs/promises'
5
+
6
+ function pathWithExtension (input: string, extension: string) {
7
+ return path.join(path.dirname(input), path.basename(input).split('.').slice(0, -1).join('.') + extension)
8
+ }
9
+
10
+ const types: Record<string, string> = {
11
+ double: 'number',
12
+ float: 'number',
13
+ int32: 'number',
14
+ int64: 'bigint',
15
+ uint32: 'number',
16
+ uint64: 'bigint',
17
+ sint32: 'number',
18
+ sint64: 'bigint',
19
+ fixed32: 'number',
20
+ fixed64: 'bigint',
21
+ sfixed32: 'number',
22
+ sfixed64: 'bigint',
23
+ bool: 'boolean',
24
+ string: 'string',
25
+ bytes: 'Uint8Array'
26
+ }
27
+
28
+ function findTypeName (typeName: string, classDef: MessageDef, moduleDef: ModuleDef): string {
29
+ if (types[typeName] != null) {
30
+ return types[typeName]
31
+ }
32
+
33
+ if (isEnumDef(classDef)) {
34
+ throw new Error('Could not find type in enum')
35
+ }
36
+
37
+ if (classDef.nested?.[typeName] != null) {
38
+ return `${classDef.fullName}.${typeName}`
39
+ }
40
+
41
+ if (classDef.parent != null) {
42
+ return findTypeName(typeName, classDef.parent, moduleDef)
43
+ }
44
+
45
+ if (moduleDef.globals[typeName] != null) {
46
+ return typeName
47
+ }
48
+
49
+ throw new Error(`Could not resolve type name "${typeName}"`)
50
+ }
51
+
52
+ function findDef (typeName: string, classDef: MessageDef, moduleDef: ModuleDef): MessageDef {
53
+ if (isEnumDef(classDef)) {
54
+ throw new Error('Could not find type in enum')
55
+ }
56
+
57
+ if (classDef.nested?.[typeName] != null) {
58
+ return classDef.nested?.[typeName]
59
+ }
60
+
61
+ if (classDef.parent != null) {
62
+ return findDef(typeName, classDef.parent, moduleDef)
63
+ }
64
+
65
+ if (moduleDef.globals[typeName] != null) {
66
+ return moduleDef.globals[typeName]
67
+ }
68
+
69
+ throw new Error(`Could not resolve type name "${typeName}"`)
70
+ }
71
+
72
+ const encoders: Record<string, string> = {
73
+ bool: 'bool',
74
+ double: 'double',
75
+ bytes: 'bytes',
76
+ fixed32: 'fixed32',
77
+ fixed64: 'fixed64',
78
+ float: 'float',
79
+ int32: 'int32',
80
+ int64: 'int64',
81
+ sint32: 'sint32',
82
+ sint64: 'sint64',
83
+ string: 'string',
84
+ uint32: 'uint32',
85
+ uint64: 'uint64',
86
+ sfixed32: 'sfixed32',
87
+ sfixed64: 'sfixed64'
88
+ }
89
+
90
+ interface ClassDef {
91
+ name: string
92
+ fullName: string
93
+ parent?: ClassDef
94
+ fields?: Record<string, FieldDef>
95
+ nested?: Record<string, ClassDef>
96
+ }
97
+
98
+ interface EnumDef {
99
+ name: string
100
+ fullName: string
101
+ parent?: ClassDef
102
+ values: Record<string, number>
103
+ }
104
+
105
+ type MessageDef = ClassDef | EnumDef
106
+
107
+ function isEnumDef (obj: any): obj is EnumDef {
108
+ return obj.values != null
109
+ }
110
+
111
+ interface FieldDef {
112
+ type: string
113
+ id: number
114
+ options?: Record<string, any>
115
+ rule: string
116
+ }
117
+
118
+ function defineFields (fields: Record<string, FieldDef>, messageDef: MessageDef, moduleDef: ModuleDef) {
119
+ return Object.entries(fields).map(([fieldName, fieldDef]) => {
120
+ const isArray = fieldDef.rule === 'repeated'
121
+ const isOptional = !isArray && fieldDef.options?.proto3_optional === true
122
+
123
+ return `${fieldName}${isOptional ? '?' : ''}: ${findTypeName(fieldDef.type, messageDef, moduleDef)}${isArray ? '[]' : ''}`
124
+ })
125
+ }
126
+
127
+ function compileMessage (messageDef: MessageDef, moduleDef: ModuleDef): string {
128
+ if (isEnumDef(messageDef)) {
129
+ moduleDef.imports.add('enumeration')
130
+
131
+ return `
132
+ export enum ${messageDef.name} {
133
+ ${
134
+ Object.entries(messageDef.values).map(([enumValueName, enumValue]) => {
135
+ return `${enumValueName} = '${enumValueName}'`
136
+ }).join(',\n ').trim()
137
+ }
138
+ }
139
+
140
+ export namespace ${messageDef.name} {
141
+ export const codec = enumeration<typeof ${messageDef.name}>(${messageDef.name})
142
+ }
143
+ `
144
+ }
145
+
146
+ let nested = ''
147
+
148
+ if (messageDef.nested != null) {
149
+ nested = '\n'
150
+ nested += Object.values(messageDef.nested)
151
+ .map(def => compileMessage(def, moduleDef).trim())
152
+ .join('\n')
153
+ .split('\n')
154
+ .map(line => line.trim() === '' ? '' : ` ${line}`)
155
+ .join('\n')
156
+ nested += '\n'
157
+ }
158
+
159
+ const fields = messageDef.fields ?? {}
160
+
161
+ // import relevant modules
162
+ moduleDef.imports.add('encodeMessage')
163
+ moduleDef.imports.add('decodeMessage')
164
+ moduleDef.imports.add('message')
165
+
166
+ return `
167
+ export interface ${messageDef.name} {
168
+ ${
169
+ defineFields(fields, messageDef, moduleDef)
170
+ .join('\n ')
171
+ .trim()
172
+ }
173
+ }
174
+
175
+ export namespace ${messageDef.name} {${nested}
176
+ export const codec = message<${messageDef.name}>({
177
+ ${Object.entries(fields)
178
+ .map(([name, fieldDef]) => {
179
+ let codec = encoders[fieldDef.type]
180
+
181
+ if (codec == null) {
182
+ const def = findDef(fieldDef.type, messageDef, moduleDef)
183
+
184
+ if (isEnumDef(def)) {
185
+ moduleDef.imports.add('enumeration')
186
+ } else {
187
+ moduleDef.imports.add('message')
188
+ }
189
+
190
+ const typeName = findTypeName(fieldDef.type, messageDef, moduleDef)
191
+ codec = `${typeName}.codec`
192
+ } else {
193
+ moduleDef.imports.add(codec)
194
+ }
195
+
196
+ return `${fieldDef.id}: { name: '${name}', codec: ${codec}${fieldDef.options?.proto3_optional === true ? ', optional: true' : ''}${fieldDef.rule === 'repeated' ? ', repeats: true' : ''} }`
197
+ }).join(',\n ')}
198
+ })
199
+
200
+ export const encode = (obj: ${messageDef.name}): Uint8Array => {
201
+ return encodeMessage(obj, ${messageDef.name}.codec)
202
+ }
203
+
204
+ export const decode = (buf: Uint8Array): ${messageDef.name} => {
205
+ return decodeMessage(buf, ${messageDef.name}.codec)
206
+ }
207
+ }
208
+ `
209
+ }
210
+
211
+ interface ModuleDef {
212
+ imports: Set<string>
213
+ types: Set<string>
214
+ compiled: string[]
215
+ globals: Record<string, ClassDef>
216
+ }
217
+
218
+ function defineModule (def: ClassDef): ModuleDef {
219
+ const moduleDef: ModuleDef = {
220
+ imports: new Set(),
221
+ types: new Set(),
222
+ compiled: [],
223
+ globals: {}
224
+ }
225
+
226
+ const defs = def.nested
227
+
228
+ if (defs == null) {
229
+ throw new Error('No top-level messages found in protobuf')
230
+ }
231
+
232
+ function defineMessage (defs: Record<string, ClassDef>, parent?: ClassDef) {
233
+ for (const className of Object.keys(defs)) {
234
+ const classDef = defs[className]
235
+
236
+ classDef.name = className
237
+ classDef.parent = parent
238
+ classDef.fullName = parent == null ? className : `${parent.fullName}.${className}`
239
+
240
+ if (classDef.nested != null) {
241
+ defineMessage(classDef.nested, classDef)
242
+ }
243
+
244
+ if (parent == null) {
245
+ moduleDef.globals[className] = classDef
246
+ }
247
+ }
248
+ }
249
+
250
+ defineMessage(defs)
251
+
252
+ for (const className of Object.keys(defs)) {
253
+ const classDef = defs[className]
254
+
255
+ moduleDef.compiled.push(compileMessage(classDef, moduleDef))
256
+ }
257
+
258
+ return moduleDef
259
+ }
260
+
261
+ export async function generate (source: string, flags: any) {
262
+ // convert .protobuf to .json
263
+ const json = await promisify(pbjs)(['-t', 'json', source])
264
+
265
+ if (json == null) {
266
+ throw new Error(`Could not convert ${source} to intermediate JSON format`)
267
+ }
268
+
269
+ const def = JSON.parse(json)
270
+ const moduleDef = defineModule(def)
271
+
272
+ const content = `
273
+ /* eslint-disable import/export */
274
+ /* eslint-disable @typescript-eslint/no-namespace */
275
+
276
+ import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'
277
+
278
+ ${moduleDef.compiled.map(str => str.trim()).join('\n\n').trim()}
279
+ `.trim()
280
+
281
+ await fs.writeFile(pathWithExtension(source, '.ts'), content + '\n')
282
+ }
package/.aegir.js DELETED
@@ -1,11 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports = {
4
- webpack: {
5
- node: {
6
- // this is needed until protocol-buffers stops using node core APIs in browser code
7
- os: true,
8
- Buffer: true
9
- }
10
- }
11
- }
@@ -1,8 +0,0 @@
1
- blank_issues_enabled: false
2
- contact_links:
3
- - name: Getting Help on IPFS
4
- url: https://ipfs.io/help
5
- about: All information about how and where to get help on IPFS.
6
- - name: IPFS Official Forum
7
- url: https://discuss.ipfs.io
8
- about: Please post general questions, support requests, and discussions here.
@@ -1,19 +0,0 @@
1
- ---
2
- name: Open an issue
3
- about: Only for actionable issues relevant to this repository.
4
- title: ''
5
- labels: need/triage
6
- assignees: ''
7
-
8
- ---
9
- <!--
10
- Hello! To ensure this issue is correctly addressed as soon as possible by the IPFS team, please try to make sure:
11
-
12
- - This issue is relevant to this repository's topic or codebase.
13
-
14
- - A clear description is provided. It should includes as much relevant information as possible and clear scope for the issue to be actionable.
15
-
16
- FOR GENERAL DISCUSSION, HELP OR QUESTIONS, please see the options at https://ipfs.io/help or head directly to https://discuss.ipfs.io.
17
-
18
- (you can delete this section after reading)
19
- -->
@@ -1,68 +0,0 @@
1
- # Configuration for welcome - https://github.com/behaviorbot/welcome
2
-
3
- # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
4
- # Comment to be posted to on first time issues
5
- newIssueWelcomeComment: >
6
- Thank you for submitting your first issue to this repository! A maintainer
7
- will be here shortly to triage and review.
8
-
9
- In the meantime, please double-check that you have provided all the
10
- necessary information to make this process easy! Any information that can
11
- help save additional round trips is useful! We currently aim to give
12
- initial feedback within **two business days**. If this does not happen, feel
13
- free to leave a comment.
14
-
15
- Please keep an eye on how this issue will be labeled, as labels give an
16
- overview of priorities, assignments and additional actions requested by the
17
- maintainers:
18
-
19
- - "Priority" labels will show how urgent this is for the team.
20
- - "Status" labels will show if this is ready to be worked on, blocked, or in progress.
21
- - "Need" labels will indicate if additional input or analysis is required.
22
-
23
- Finally, remember to use https://discuss.ipfs.io if you just need general
24
- support.
25
-
26
- # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
27
- # Comment to be posted to on PRs from first time contributors in your repository
28
- newPRWelcomeComment: >
29
- Thank you for submitting this PR!
30
-
31
- A maintainer will be here shortly to review it.
32
-
33
- We are super grateful, but we are also overloaded! Help us by making sure
34
- that:
35
-
36
- * The context for this PR is clear, with relevant discussion, decisions
37
- and stakeholders linked/mentioned.
38
-
39
- * Your contribution itself is clear (code comments, self-review for the
40
- rest) and in its best form. Follow the [code contribution
41
- guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md#code-contribution-guidelines)
42
- if they apply.
43
-
44
- Getting other community members to do a review would be great help too on
45
- complex PRs (you can ask in the chats/forums). If you are unsure about
46
- something, just leave us a comment.
47
-
48
- Next steps:
49
-
50
- * A maintainer will triage and assign priority to this PR, commenting on
51
- any missing things and potentially assigning a reviewer for high
52
- priority items.
53
-
54
- * The PR gets reviews, discussed and approvals as needed.
55
-
56
- * The PR is merged by maintainers when it has been approved and comments addressed.
57
-
58
- We currently aim to provide initial feedback/triaging within **two business
59
- days**. Please keep an eye on any labelling actions, as these will indicate
60
- priorities and status of your contribution.
61
-
62
- We are very grateful for your contribution!
63
-
64
-
65
- # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
66
- # Comment to be posted to on pull requests merged by a first time user
67
- # Currently disabled
68
- #firstPRMergeComment: ""
package/.travis.yml DELETED
@@ -1,42 +0,0 @@
1
- language: node_js
2
- cache: npm
3
- stages:
4
- - check
5
- - test
6
- - cov
7
-
8
- node_js:
9
- - '10'
10
- - '12'
11
- - '14'
12
-
13
- os:
14
- - linux
15
- - osx
16
- - windows
17
-
18
- script: npx nyc -s npm run test:node -- --bail
19
- after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov
20
-
21
- jobs:
22
- include:
23
- - stage: check
24
- script:
25
- - npx aegir commitlint --travis
26
- - npx aegir dep-check
27
- - npm run lint
28
-
29
- - stage: test
30
- name: chrome
31
- addons:
32
- chrome: stable
33
- script: npx aegir test -t browser -t webworker
34
-
35
- - stage: test
36
- name: firefox
37
- addons:
38
- firefox: latest
39
- script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless
40
-
41
- notifications:
42
- email: false