Skip to content

Commit cbaaae9

Browse files
committed
Other: Added version scheme warning to everything CLI so that we don't need this overly explicit in README
1 parent afef1e6 commit cbaaae9

File tree

7 files changed

+59
-10
lines changed

7 files changed

+59
-10
lines changed

README.md

-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ Usage
6060
$> npm install protobufjs [--save --save-prefix=~]
6161
```
6262

63-
**Note:** protobuf.js uses a [semver](https://semver.org)-incompatible versioning scheme currently. For API compatibility, just prefix its version with a `~` instead of a `^` in your package.json's dependencies. If you want to access the semver website, just prefix its address with `http:` instead of `https:`.
64-
6563
```js
6664
var protobuf = require("protobufjs");
6765
```

cli/util.js

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ exports.setup = function() {
108108
install.push(name + "@" + version);
109109
}
110110
});
111+
require("../scripts/postinstall"); // emit postinstall warning, if any
111112
if (!install.length)
112113
return;
113114
modInstall(install);

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"name": "protobufjs",
33
"version": "6.5.1",
4+
"versionScheme": "~",
45
"description": "Protocol Buffers for JavaScript (& TypeScript).",
56
"author": "Daniel Wirtz <[email protected]>",
67
"license": "BSD-3-Clause",
@@ -33,6 +34,7 @@
3334
"lint": "eslint src runtime",
3435
"pages": "node scripts/pages",
3536
"prepublish": "node scripts/prepublish",
37+
"postinstall": "node scripts/postinstall",
3638
"prof": "node bench/prof",
3739
"test": "tape -r ./lib/tape-adapter tests/*.js tests/node/*.js | tap-spec",
3840
"types": "node bin/pbts --main --global protobuf --out index.d.ts src && tsc tests/comp_typescript.ts --lib es2015 --noEmit --strictNullChecks && tsc tests/data/test.ts --lib es2015 --noEmit --strictNullChecks",

scripts/postinstall.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var path = require("path"),
2+
pkg = require(path.join(__dirname, "..", "package.json"));
3+
4+
if (!pkg.versionScheme)
5+
return;
6+
7+
var fs = require("fs");
8+
9+
var warn = process.stderr.isTTY
10+
? "\x1b[30m\x1b[43mWARN\x1b[0m \x1b[35m" + path.basename(process.argv[1], ".js") + "\x1b[0m"
11+
: "WARN " + path.basename(process.argv[1], ".js");
12+
13+
var basePkg;
14+
try {
15+
basePkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "..", "package.json")));
16+
} catch (e) {
17+
return;
18+
}
19+
20+
[
21+
"dependencies",
22+
"devDependencies",
23+
"optionalDependencies",
24+
"peerDependencies"
25+
]
26+
.forEach(function(check) {
27+
var version = basePkg && basePkg[check] && basePkg[check][pkg.name];
28+
if (typeof version === "string" && version.charAt(0) !== pkg.versionScheme)
29+
process.stderr.write(pkg.name + " " + warn + " " + pkg.name + "@" + version + " is configured as a dependency of " + basePkg.name + ". use " + pkg.name + "@" + pkg.versionScheme + version.substring(1) + " instead for API compatibility.\n");
30+
});

tests/data/package.js

+25-6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ $root.Package = (function() {
4242
*/
4343
Package.prototype.version = "";
4444

45+
/**
46+
* Package versionScheme.
47+
* @type {string}
48+
*/
49+
Package.prototype.versionScheme = "";
50+
4551
/**
4652
* Package description.
4753
* @type {string}
@@ -134,7 +140,7 @@ $root.Package = (function() {
134140

135141
// Lazily resolved type references
136142
var $types = {
137-
5: "Package.Repository"
143+
6: "Package.Repository"
138144
}; $lazyTypes.push($types);
139145

140146
/**
@@ -159,14 +165,16 @@ $root.Package = (function() {
159165
writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
160166
if (message.version !== undefined && message.hasOwnProperty("version"))
161167
writer.uint32(/* id 2, wireType 2 =*/18).string(message.version);
168+
if (message.versionScheme !== undefined && message.hasOwnProperty("versionScheme"))
169+
writer.uint32(/* id 19, wireType 2 =*/154).string(message.versionScheme);
162170
if (message.description !== undefined && message.hasOwnProperty("description"))
163171
writer.uint32(/* id 3, wireType 2 =*/26).string(message.description);
164172
if (message.author !== undefined && message.hasOwnProperty("author"))
165173
writer.uint32(/* id 4, wireType 2 =*/34).string(message.author);
166174
if (message.license !== undefined && message.hasOwnProperty("license"))
167175
writer.uint32(/* id 5, wireType 2 =*/42).string(message.license);
168176
if (message.repository !== undefined && message.hasOwnProperty("repository"))
169-
$types[5].encode(message.repository, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
177+
$types[6].encode(message.repository, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
170178
if (message.bugs !== undefined && message.hasOwnProperty("bugs"))
171179
writer.uint32(/* id 7, wireType 2 =*/58).string(message.bugs);
172180
if (message.homepage !== undefined && message.hasOwnProperty("homepage"))
@@ -228,6 +236,9 @@ $root.Package = (function() {
228236
case 2:
229237
message.version = reader.string();
230238
break;
239+
case 19:
240+
message.versionScheme = reader.string();
241+
break;
231242
case 3:
232243
message.description = reader.string();
233244
break;
@@ -238,7 +249,7 @@ $root.Package = (function() {
238249
message.license = reader.string();
239250
break;
240251
case 6:
241-
message.repository = $types[5].decode(reader, reader.uint32());
252+
message.repository = $types[6].decode(reader, reader.uint32());
242253
break;
243254
case 7:
244255
message.bugs = reader.string();
@@ -333,6 +344,9 @@ $root.Package = (function() {
333344
if (message.version !== undefined)
334345
if (!$util.isString(message.version))
335346
return "version: string expected";
347+
if (message.versionScheme !== undefined)
348+
if (!$util.isString(message.versionScheme))
349+
return "versionScheme: string expected";
336350
if (message.description !== undefined)
337351
if (!$util.isString(message.description))
338352
return "description: string expected";
@@ -343,7 +357,7 @@ $root.Package = (function() {
343357
if (!$util.isString(message.license))
344358
return "license: string expected";
345359
if (message.repository !== undefined && message.repository !== null) {
346-
var error = $types[5].verify(message.repository);
360+
var error = $types[6].verify(message.repository);
347361
if (error)
348362
return "repository." + error;
349363
}
@@ -427,14 +441,16 @@ $root.Package = (function() {
427441
message.name = String(object.name);
428442
if (object.version !== undefined && object.version !== null)
429443
message.version = String(object.version);
444+
if (object.versionScheme !== undefined && object.versionScheme !== null)
445+
message.versionScheme = String(object.versionScheme);
430446
if (object.description !== undefined && object.description !== null)
431447
message.description = String(object.description);
432448
if (object.author !== undefined && object.author !== null)
433449
message.author = String(object.author);
434450
if (object.license !== undefined && object.license !== null)
435451
message.license = String(object.license);
436452
if (object.repository !== undefined && object.repository !== null)
437-
message.repository = $types[5].fromObject(object.repository);
453+
message.repository = $types[6].fromObject(object.repository);
438454
if (object.bugs !== undefined && object.bugs !== null)
439455
message.bugs = String(object.bugs);
440456
if (object.homepage !== undefined && object.homepage !== null)
@@ -513,6 +529,7 @@ $root.Package = (function() {
513529
if (options.defaults) {
514530
object.name = "";
515531
object.version = "";
532+
object.versionScheme = "";
516533
object.description = "";
517534
object.author = "";
518535
object.license = "";
@@ -526,14 +543,16 @@ $root.Package = (function() {
526543
object.name = message.name;
527544
if (message.version !== undefined && message.version !== null && message.hasOwnProperty("version"))
528545
object.version = message.version;
546+
if (message.versionScheme !== undefined && message.versionScheme !== null && message.hasOwnProperty("versionScheme"))
547+
object.versionScheme = message.versionScheme;
529548
if (message.description !== undefined && message.description !== null && message.hasOwnProperty("description"))
530549
object.description = message.description;
531550
if (message.author !== undefined && message.author !== null && message.hasOwnProperty("author"))
532551
object.author = message.author;
533552
if (message.license !== undefined && message.license !== null && message.hasOwnProperty("license"))
534553
object.license = message.license;
535554
if (message.repository !== undefined && message.repository !== null && message.hasOwnProperty("repository"))
536-
object.repository = $types[5].toObject(message.repository, options);
555+
object.repository = $types[6].toObject(message.repository, options);
537556
if (message.bugs !== undefined && message.bugs !== null && message.hasOwnProperty("bugs"))
538557
object.bugs = message.bugs;
539558
if (message.homepage !== undefined && message.homepage !== null && message.hasOwnProperty("homepage"))

tests/data/package.proto

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ syntax = "proto3";
33
message Package {
44
string name = 1;
55
string version = 2;
6+
string versionScheme = 19;
67
string description = 3;
78
string author = 4;
89
string license = 5;

tests/other_package.js

-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ var tape = require("tape");
33
var protobuf = require(".."),
44
pkg = require("../package.json");
55

6-
process.stdout._handle.setBlocking(true);
7-
86
tape.test("package.json", function(test) {
97

108
protobuf.load("tests/data/package.proto", function(err, root) {

0 commit comments

Comments
 (0)