New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@ngx-grpc/protoc-gen-ng

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ngx-grpc/protoc-gen-ng - npm Package Compare versions

Comparing version 0.1.1 to 0.2.0

CHANGELOG.md

22

dist/main.js

@@ -26,4 +26,4 @@ #!/usr/bin/env node

var config_1 = require("./config");
var logger_1 = require("./logger");
var proto_1 = require("./proto/proto");
var utils_1 = require("./utils");
function main() {

@@ -37,7 +37,23 @@ protoc_plugin_1.default(function (protosProtocPlugin) {

}
protos.forEach(function (p) {
p.resolved.dependencies = p.dependencyList.map(function (d) { return protos.find(function (pp) { return pp.name === d; }); });
p.resolved.publicDependencies = p.publicDependencyList.map(function (i) { return p.resolved.dependencies[i]; });
});
// TODO add cascade public import. Currently works with one-level only
protos
.filter(function (p) { return p.resolved.publicDependencies.length; })
.forEach(function (protoWithPublicImport) {
return protos
.filter(function (pp) { return pp.resolved.dependencies.includes(protoWithPublicImport); })
.forEach(function (protoImportingProtoWithPublicImport) {
var _a;
logger_1.Logger.debug(protoImportingProtoWithPublicImport.name + " reimports " + protoWithPublicImport.resolved.publicDependencies.map(function (p) { return p.name; }).join(', ') + " via " + protoWithPublicImport.name);
(_a = protoImportingProtoWithPublicImport.resolved.dependencies).push.apply(_a, protoWithPublicImport.resolved.publicDependencies);
});
});
return protos.map(function (proto) {
var types = __spreadArrays(proto.enumTypeList, proto.messageTypeList, proto.serviceList);
var generated = "// THIS IS A GENERATED FILE\n // DO NOT MODIFY IT! YOUR CHANGES WILL BE LOST\n\n/*\n To configure the services you need to provider a configuration for each of them.\n\n E.g. you can create a module where you configure all of them and then import this module into your AppModule:\n\n const grpcSettings = { host: environment.grpcHost };\n\n @NgModule({\n providers: [\n" + proto.serviceList.map(function (s) { return " { provide: " + s.getConfigInjectionTokenName() + ", useValue: grpcSettings },"; }).sort().join('\n') + "\n ],\n })\n export class GrpcConfigModule { }\n*/\n\n /* tslint:disable */\n /* eslint-disable */\n import { Inject, Injectable, InjectionToken } from '@angular/core';\n import { GrpcCallType, GrpcClient, GrpcClientSettings, GrpcHandler } from '@ngx-grpc/core';\n import { BinaryReader, BinaryWriter, ByteSource } from 'google-protobuf';\n import { AbstractClientBase, Error, GrpcWebClientBase, Metadata, Status } from 'grpc-web';\n import { Observable } from 'rxjs';\n\n " + types.map(function (t) { return t.toString(); }).join('\n\n') + "\n";
var generated = "// THIS IS A GENERATED FILE\n // DO NOT MODIFY IT! YOUR CHANGES WILL BE LOST\n\n/*\n To configure the services you need to provider a configuration for each of them.\n\n E.g. you can create a module where you configure all of them and then import this module into your AppModule:\n\n const grpcSettings = { host: environment.grpcHost };\n\n @NgModule({\n providers: [\n" + proto.serviceList.map(function (s) { return " { provide: " + s.getConfigInjectionTokenName() + ", useValue: grpcSettings },"; }).sort().join('\n') + "\n ],\n })\n export class GrpcConfigModule { }\n*/\n\n /* tslint:disable */\n /* eslint-disable */\n import { Inject, Injectable, InjectionToken } from '@angular/core';\n import { GrpcCallType, GrpcClient, GrpcClientSettings, GrpcHandler } from '@ngx-grpc/core';\n import { BinaryReader, BinaryWriter, ByteSource } from 'google-protobuf';\n import { AbstractClientBase, Error, GrpcWebClientBase, Metadata, Status } from 'grpc-web';\n import { Observable } from 'rxjs';\n " + proto.getImportedDependencies() + "\n\n " + types.map(function (t) { return t.toString(); }).join('\n\n') + "\n";
return {
name: utils_1.dasherize(proto.getFlatName()) + ".pb.ts",
name: proto.getGeneratedFileBaseName() + '.ts',
content: prettier.format(generated, { parser: 'typescript', singleQuote: true }),

@@ -44,0 +60,0 @@ };

12

dist/proto/message.js

@@ -75,4 +75,4 @@ "use strict";

if (field.type === types_1.MessageFieldType.message) {
var msg = this.proto.findMessage(field.typeName);
if (msg.options.mapEntry) {
var msg = this.proto.resolveTypeMetadata(field.typeName).message;
if (msg && msg.options.mapEntry) {
return true;

@@ -84,3 +84,3 @@ }

Message.prototype.getMapKeyValueFields = function (field) {
var msg = this.proto.findMessage(field.typeName);
var msg = this.proto.resolveTypeMetadata(field.typeName).message;
var key = msg.fieldList.find(function (f) { return f.name === 'key'; });

@@ -103,3 +103,3 @@ var value = msg.fieldList.find(function (f) { return f.name === 'value'; });

if (field.type === types_1.MessageFieldType.enum || field.type === types_1.MessageFieldType.message) {
return utils_1.extractType(field.typeName, _this.proto.pb_package) + suffix;
return _this.proto.getRelativeTypeName(field.typeName) + suffix;
}

@@ -113,3 +113,3 @@ return FieldTypesConfig[field.type].type + suffix;

if (field.type === types_1.MessageFieldType.message) {
var subType = utils_1.extractType(field.typeName, _this.proto.pb_package);
var subType = _this.proto.getRelativeTypeName(field.typeName);
if (_this.isFieldMap(field)) {

@@ -131,3 +131,3 @@ var key = _this.getMapKeyValueFields(field)[0];

if (field.type === types_1.MessageFieldType.message) {
var subType = utils_1.extractType(field.typeName, _this.proto.pb_package);
var subType = _this.proto.getRelativeTypeName(field.typeName);
if (_this.isFieldMap(field)) {

@@ -134,0 +134,0 @@ var msgVarName = "msg_" + field.number;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path_1 = require("path");
var logger_1 = require("../logger");
var utils_1 = require("../utils");

@@ -11,5 +11,7 @@ var enum_1 = require("./enum");

var _this = this;
this.resolved = {};
this.messageIndex = new Map();
this.name = value.name;
this.pb_package = value.pb_package; // eslint-disable-line @typescript-eslint/camelcase
this.dependencyList = value.dependencyList;
this.dependencyList = value.dependencyList || [];
this.publicDependencyList = value.publicDependencyList;

@@ -21,34 +23,67 @@ this.weakDependencyList = value.weakDependencyList;

this.extensionList = value.extensionList;
this.index();
}
Proto.prototype.findMessage = function (typeName) {
var path = utils_1.extractType(typeName, this.pb_package).split('.');
var array = this.messageTypeList;
var msg;
var i = 0;
var _loop_1 = function () {
var name = path.shift();
if (!name || !array.length) {
throw new Error('Error finding ' + typeName);
}
msg = array.find(function (mt) { return mt.name === name; });
if (!msg) {
throw new Error('Error finding ' + typeName);
}
array = msg.nestedTypeList;
if (!path.length) {
return { value: msg };
}
i++;
Proto.prototype.index = function () {
var _this = this;
var indexEnums = function (path, enums) {
enums.forEach(function (oneEnum) {
_this.messageIndex.set(path + '.' + oneEnum.name, { proto: _this, enum: oneEnum });
});
};
while (i < 100) {
var state_1 = _loop_1();
if (typeof state_1 === "object")
return state_1.value;
var indexMessages = function (path, submessages) {
submessages.forEach(function (message) {
var fullname = path + '.' + message.name;
_this.messageIndex.set(fullname, {
proto: _this,
message: message,
});
indexMessages(fullname, message.nestedTypeList);
indexEnums(fullname, message.enumTypeList);
});
};
indexMessages(this.pb_package ? '.' + this.pb_package : '', this.messageTypeList);
indexEnums(this.pb_package ? '.' + this.pb_package : '', this.enumTypeList);
};
Proto.prototype.resolveTypeMetadata = function (pbType) {
var meta = this.messageIndex.get(pbType);
if (meta) {
return meta;
}
meta = undefined;
this.resolved.dependencies.forEach(function (proto) {
if (!meta) {
try {
meta = proto.resolveTypeMetadata(pbType);
}
catch (ex) {
}
}
});
if (meta) {
return meta;
}
logger_1.Logger.debug("Cannot find type " + pbType + " in proto " + this.name);
throw new Error('Error finding ' + pbType);
};
Proto.prototype.getFlatName = function () {
return path_1.basename(this.name).replace(/\.proto$/, '');
Proto.prototype.getDependencyPackageName = function (proto) {
return proto.pb_package ? proto.pb_package.replace(/\.([a-z])/g, function (v) { return v.toUpperCase(); }).replace(/\./g, '') : ('noPackage' + this.resolved.dependencies.indexOf(proto));
};
Proto.prototype.getRelativeTypeName = function (pbType) {
var meta = this.resolveTypeMetadata(pbType);
var _a = pbType.match(/^\.(([a-z0-9.]*)\.)?([A-Za-z0-9.]+$)/), typeName = _a[3];
if (meta.proto === this) {
return typeName;
}
return this.getDependencyPackageName(meta.proto) + '.' + typeName;
};
Proto.prototype.getImportedDependencies = function () {
var _this = this;
var root = Array(this.name.split('/').length - 1).fill('..').join('/');
return this.resolved.dependencies.map(function (pp) { return "import * as " + _this.getDependencyPackageName(pp) + " from '" + (root || '.') + "/" + pp.getGeneratedFileBaseName() + "';"; }).join('\n');
};
Proto.prototype.getGeneratedFileBaseName = function () {
return utils_1.dasherize(this.name.replace(/\.proto$/, '')) + ".pb";
};
return Proto;
}());
exports.Proto = Proto;

@@ -33,4 +33,4 @@ "use strict";

var methods = this.methodList.map(function (method) {
var inputType = utils_1.extractType(method.inputType, _this.proto.pb_package);
var outputType = utils_1.extractType(method.outputType, _this.proto.pb_package);
var inputType = _this.proto.getRelativeTypeName(method.inputType);
var outputType = _this.proto.getRelativeTypeName(method.outputType);
var jsdoc = new js_doc_1.JSDoc();

@@ -42,3 +42,3 @@ jsdoc.setDescription((method.serverStreaming ? 'Server streaming' : 'Unary') + " RPC");

jsdoc.setDeprecation(!!method.options && method.options.deprecated);
return "\n " + jsdoc.toString() + "\n " + processName(method.name) + "(requestData: " + inputType + ", requestMetadata: Metadata = {}) {\n return this.handler.handle({\n type: GrpcCallType." + (method.serverStreaming ? 'serverStream' : 'unary') + ",\n client: this.client,\n path: '/" + serviceUrlPrefix + _this.name + "/" + utils_1.camelize(method.name) + "',\n requestData,\n requestMetadata,\n requestClass: " + inputType + ",\n responseClass: " + outputType + ",\n }) as Observable<" + outputType + (method.serverStreaming ? " | Status" : '') + ">;\n }\n ";
return "\n " + jsdoc.toString() + "\n " + processName(method.name) + "(requestData: " + inputType + ", requestMetadata: Metadata = {}) {\n return this.handler.handle({\n type: GrpcCallType." + (method.serverStreaming ? 'serverStream' : 'unary') + ",\n client: this.client,\n path: '/" + serviceUrlPrefix + _this.name + "/" + utils_1.camelize(method.name) + "',\n requestData,\n requestMetadata,\n requestClass: " + inputType + ",\n responseClass: " + outputType + ",\n }) as Observable<" + outputType + (method.serverStreaming ? ' | Status' : '') + ">;\n }\n ";
});

@@ -45,0 +45,0 @@ var tokenName = this.getConfigInjectionTokenName();

@@ -45,11 +45,1 @@ "use strict";

exports.pascalize = pascalize;
function extractType(originalType, packageName) {
var packageRef = '.' + packageName + '.';
var type = originalType.replace(new RegExp('^' + packageRef.replace(/\./g, '\\.')), '');
// a deeper package reference is here
if (type[0].toLowerCase() === type[0]) {
return originalType.replace(/^\./, ''); // still replace "dot" in the beginning
}
return type; // type without package prefix
}
exports.extractType = extractType;
{
"name": "@ngx-grpc/protoc-gen-ng",
"version": "0.1.1",
"version": "0.2.0",
"author": "smnbbrv",

@@ -24,8 +24,8 @@ "license": "MIT",

"lint": "eslint src/**/*.ts",
"test": "jest --watch",
"test:ci": "jest",
"test:generate": "rimraf ./test/out/* && protoc --plugin=protoc-gen-ng=$(pwd)/dist/main.js --ng_out=./test/out -I $(pwd)/test/proto $(pwd)/test/proto/*",
"test:generate-grpc-web": "rimraf ./test/out-grpc-web/* && protoc -I=$(pwd)/test/proto $(pwd)/test/proto/* --js_out=import_style=commonjs:$(pwd)/test/out-grpc-web --grpc-web_out=import_style=typescript,mode=grpcwebtext:$(pwd)/test/out-grpc-web",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"preversion": "npm run build && npm run test:generate && npm run test:ci"
"test:generate": "rimraf ./test/out/* && protoc --plugin=protoc-gen-ng=$(pwd)/dist/main.js --ng_out=./test/out -I test/proto $(find test/proto -iname \"*.proto\")",
"test:generate-grpc-web": "rimraf ./test/out-grpc-web/* --js_out=import_style=commonjs:$(pwd)/test/out-grpc-web --grpc-web_out=import_style=typescript,mode=grpcwebtext:$(pwd)/test/out-grpc-web && protoc -I=test/proto $(find test/proto -iname \"*.proto\")",
"release": "semantic-release"
},

@@ -35,2 +35,7 @@ "devDependencies": {

"@ngx-grpc/core": "0.0.1",
"@semantic-release/changelog": "^3.0.5",
"@semantic-release/commit-analyzer": "^6.3.3",
"@semantic-release/git": "^7.0.18",
"@semantic-release/npm": "^5.3.4",
"@semantic-release/release-notes-generator": "^7.3.3",
"@types/google-protobuf": "^3.7.2",

@@ -52,2 +57,3 @@ "@types/jasmine": "^3.4.6",

"rxjs": "^6.5.3",
"semantic-release": "^15.13.31",
"ts-jest": "^24.1.0",

@@ -58,4 +64,5 @@ "typescript": "^3.7.2"

"prettier": "1.19.1",
"protoc-plugin": "0.0.6"
"protoc-plugin": "0.0.6",
"winston": "^3.2.1"
}
}

@@ -1,6 +0,6 @@

# protoc-gen-ng
# @ngx-grpc/protoc-gen-ng
gRPC Angular code generator.
For documentation please refer [ngx-grpc/core](https://github.com/ngx-grpc/core)
For documentation please refer [Github page](https://github.com/ngx-grpc/core)

@@ -7,0 +7,0 @@ ## License

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc