|
"use strict"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.addCommonProtos = exports.loadProtosWithOptionsSync = exports.loadProtosWithOptions = void 0; |
|
const fs = require("fs"); |
|
const path = require("path"); |
|
const Protobuf = require("protobufjs"); |
|
function addIncludePathResolver(root, includePaths) { |
|
const originalResolvePath = root.resolvePath; |
|
root.resolvePath = (origin, target) => { |
|
if (path.isAbsolute(target)) { |
|
return target; |
|
} |
|
for (const directory of includePaths) { |
|
const fullPath = path.join(directory, target); |
|
try { |
|
fs.accessSync(fullPath, fs.constants.R_OK); |
|
return fullPath; |
|
} |
|
catch (err) { |
|
continue; |
|
} |
|
} |
|
process.emitWarning(`${target} not found in any of the include paths ${includePaths}`); |
|
return originalResolvePath(origin, target); |
|
}; |
|
} |
|
async function loadProtosWithOptions(filename, options) { |
|
const root = new Protobuf.Root(); |
|
options = options || {}; |
|
if (!!options.includeDirs) { |
|
if (!Array.isArray(options.includeDirs)) { |
|
return Promise.reject(new Error('The includeDirs option must be an array')); |
|
} |
|
addIncludePathResolver(root, options.includeDirs); |
|
} |
|
const loadedRoot = await root.load(filename, options); |
|
loadedRoot.resolveAll(); |
|
return loadedRoot; |
|
} |
|
exports.loadProtosWithOptions = loadProtosWithOptions; |
|
function loadProtosWithOptionsSync(filename, options) { |
|
const root = new Protobuf.Root(); |
|
options = options || {}; |
|
if (!!options.includeDirs) { |
|
if (!Array.isArray(options.includeDirs)) { |
|
throw new Error('The includeDirs option must be an array'); |
|
} |
|
addIncludePathResolver(root, options.includeDirs); |
|
} |
|
const loadedRoot = root.loadSync(filename, options); |
|
loadedRoot.resolveAll(); |
|
return loadedRoot; |
|
} |
|
exports.loadProtosWithOptionsSync = loadProtosWithOptionsSync; |
|
|
|
|
|
|
|
function addCommonProtos() { |
|
|
|
|
|
|
|
const apiDescriptor = require('protobufjs/google/protobuf/api.json'); |
|
const descriptorDescriptor = require('protobufjs/google/protobuf/descriptor.json'); |
|
const sourceContextDescriptor = require('protobufjs/google/protobuf/source_context.json'); |
|
const typeDescriptor = require('protobufjs/google/protobuf/type.json'); |
|
Protobuf.common('api', apiDescriptor.nested.google.nested.protobuf.nested); |
|
Protobuf.common('descriptor', descriptorDescriptor.nested.google.nested.protobuf.nested); |
|
Protobuf.common('source_context', sourceContextDescriptor.nested.google.nested.protobuf.nested); |
|
Protobuf.common('type', typeDescriptor.nested.google.nested.protobuf.nested); |
|
} |
|
exports.addCommonProtos = addCommonProtos; |
|
|