Comparing version 6.1.3 to 7.0.0
/* eslint-disable max-depth */ | ||
import { main as pbjs } from 'protobufjs-cli/pbjs.js'; | ||
import fs from 'fs/promises'; | ||
import path from 'path'; | ||
import { promisify } from 'util'; | ||
import fs from 'fs/promises'; | ||
import { main as pbjs } from 'protobufjs-cli/pbjs.js'; | ||
export var CODEC_TYPES; | ||
@@ -37,17 +37,17 @@ (function (CODEC_TYPES) { | ||
const encoderGenerators = { | ||
bool: (val) => `w.bool(${val})`, | ||
bytes: (val) => `w.bytes(${val})`, | ||
double: (val) => `w.double(${val})`, | ||
fixed32: (val) => `w.fixed32(${val})`, | ||
fixed64: (val) => `w.fixed64(${val})`, | ||
float: (val) => `w.float(${val})`, | ||
int32: (val) => `w.int32(${val})`, | ||
int64: (val) => `w.int64(${val})`, | ||
sfixed32: (val) => `w.sfixed32(${val})`, | ||
sfixed64: (val) => `w.sfixed64(${val})`, | ||
sint32: (val) => `w.sint32(${val})`, | ||
sint64: (val) => `w.sint64(${val})`, | ||
string: (val) => `w.string(${val})`, | ||
uint32: (val) => `w.uint32(${val})`, | ||
uint64: (val) => `w.uint64(${val})` | ||
bool: (val, includeDefault) => `w.bool(${val}${includeDefault ? ' ?? false' : ''})`, | ||
bytes: (val, includeDefault) => `w.bytes(${val}${includeDefault ? ' ?? new Uint8Array(0)' : ''})`, | ||
double: (val, includeDefault) => `w.double(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
fixed32: (val, includeDefault) => `w.fixed32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
fixed64: (val, includeDefault) => `w.fixed64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
float: (val, includeDefault) => `w.float(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
int32: (val, includeDefault) => `w.int32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
int64: (val, includeDefault) => `w.int64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
sfixed32: (val, includeDefault) => `w.sfixed32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
sfixed64: (val, includeDefault) => `w.sfixed64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
sint32: (val, includeDefault) => `w.sint32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
sint64: (val, includeDefault) => `w.sint64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
string: (val, includeDefault) => `w.string(${val}${includeDefault ? ' ?? \'\'' : ''})`, | ||
uint32: (val, includeDefault) => `w.uint32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
uint64: (val, includeDefault) => `w.uint64(${val}${includeDefault ? ' ?? 0n' : ''})` | ||
}; | ||
@@ -89,17 +89,17 @@ const decoderGenerators = { | ||
const defaultValueTestGenerators = { | ||
bool: (field) => `${field} !== false`, | ||
bool: (field) => `(${field} != null && ${field} !== false)`, | ||
bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`, | ||
double: (field) => `${field} !== 0`, | ||
fixed32: (field) => `${field} !== 0`, | ||
fixed64: (field) => `${field} !== 0n`, | ||
float: (field) => `${field} !== 0`, | ||
int32: (field) => `${field} !== 0`, | ||
int64: (field) => `${field} !== 0n`, | ||
sfixed32: (field) => `${field} !== 0`, | ||
sfixed64: (field) => `${field} !== 0n`, | ||
sint32: (field) => `${field} !== 0`, | ||
sint64: (field) => `${field} !== 0n`, | ||
string: (field) => `${field} !== ''`, | ||
uint32: (field) => `${field} !== 0`, | ||
uint64: (field) => `${field} !== 0n` | ||
double: (field) => `(${field} != null && ${field} !== 0)`, | ||
fixed32: (field) => `(${field} != null && ${field} !== 0)`, | ||
fixed64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
float: (field) => `(${field} != null && ${field} !== 0)`, | ||
int32: (field) => `(${field} != null && ${field} !== 0)`, | ||
int64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
sfixed32: (field) => `(${field} != null && ${field} !== 0)`, | ||
sfixed64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
sint32: (field) => `(${field} != null && ${field} !== 0)`, | ||
sint64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
string: (field) => `(${field} != null && ${field} !== '')`, | ||
uint32: (field) => `(${field} != null && ${field} !== 0)`, | ||
uint64: (field) => `(${field} != null && ${field} !== 0n)` | ||
}; | ||
@@ -326,7 +326,15 @@ function findTypeName(typeName, classDef, moduleDef) { | ||
const id = (fieldDef.id << 3) | codecTypes[type]; | ||
let writeField = `w.uint32(${id}) | ||
${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}`; | ||
let defaultValue = ''; | ||
if (fieldDef.enum) { | ||
const def = findDef(fieldDef.type, messageDef, moduleDef); | ||
if (!isEnumDef(def)) { | ||
throw new Error(`${fieldDef.type} was not enum def`); | ||
} | ||
defaultValue = Object.keys(def.values)[0]; | ||
} | ||
let writeField = (includeDefault) => `w.uint32(${id}) | ||
${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}${includeDefault ? ` ?? ${typeName}.${defaultValue}` : ''}, w)` : encoderGenerators[type](valueVar, includeDefault)}`; | ||
if (type === 'message') { | ||
// message fields are only written if they have values | ||
writeField = `w.uint32(${id}) | ||
writeField = () => `w.uint32(${id}) | ||
${typeName}.codec().encode(${valueVar}, w, { | ||
@@ -341,5 +349,5 @@ writeDefaults: ${Boolean(fieldDef.repeated).toString()} | ||
if (fieldDef.map) { | ||
writeField = ` | ||
writeField = () => ` | ||
for (const [key, value] of obj.${name}.entries()) { | ||
${createWriteField('{ key, value }') | ||
${createWriteField('{ key, value }')(false) | ||
.split('\n') | ||
@@ -355,5 +363,5 @@ .map(s => { | ||
else { | ||
writeField = ` | ||
writeField = () => ` | ||
for (const value of obj.${name}) { | ||
${createWriteField('value') | ||
${createWriteField('value')(false) | ||
.split('\n') | ||
@@ -371,3 +379,3 @@ .map(s => { | ||
if (${valueTest}) { | ||
${writeField} | ||
${writeField(valueTest.includes('opts.writeDefaults === true'))} | ||
}`; | ||
@@ -447,3 +455,3 @@ }).join('\n'); | ||
export const encode = (obj: ${messageDef.name}): Uint8Array => { | ||
export const encode = (obj: Partial<${messageDef.name}>): Uint8Array => { | ||
return encodeMessage(obj, ${messageDef.name}.codec()) | ||
@@ -559,3 +567,3 @@ } | ||
const moduleDef = defineModule(def); | ||
let lines = [ | ||
const ignores = [ | ||
'/* eslint-disable import/export */', | ||
@@ -565,17 +573,23 @@ '/* eslint-disable complexity */', | ||
'/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */', | ||
'/* eslint-disable @typescript-eslint/no-empty-interface */', | ||
'' | ||
'/* eslint-disable @typescript-eslint/no-empty-interface */' | ||
]; | ||
const imports = []; | ||
if (moduleDef.imports.size > 0) { | ||
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`); | ||
imports.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`); | ||
} | ||
if (moduleDef.imports.has('encodeMessage')) { | ||
lines.push("import type { Uint8ArrayList } from 'uint8arraylist'"); | ||
imports.push("import type { Uint8ArrayList } from 'uint8arraylist'"); | ||
} | ||
if (moduleDef.importedTypes.size > 0) { | ||
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`); | ||
imports.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`); | ||
} | ||
lines = [ | ||
...lines, | ||
const lines = [ | ||
...ignores, | ||
'', | ||
...imports.sort((a, b) => { | ||
const aModule = a.split("from '")[1].toString(); | ||
const bModule = b.split("from '")[1].toString(); | ||
return aModule.localeCompare(bModule); | ||
}), | ||
'', | ||
...moduleDef.compiled | ||
@@ -582,0 +596,0 @@ ]; |
{ | ||
"name": "protons", | ||
"version": "6.1.3", | ||
"version": "7.0.0", | ||
"description": "Protobuf to ts transpiler", | ||
@@ -164,5 +164,5 @@ "license": "Apache-2.0 OR MIT", | ||
"protobufjs": "^7.0.0", | ||
"protons-runtime": "^4.0.0", | ||
"protons-runtime": "^5.0.0", | ||
"uint8arraylist": "^2.3.2" | ||
} | ||
} |
120
src/index.ts
/* eslint-disable max-depth */ | ||
import { main as pbjs } from 'protobufjs-cli/pbjs.js' | ||
import fs from 'fs/promises' | ||
import path from 'path' | ||
import { promisify } from 'util' | ||
import fs from 'fs/promises' | ||
import { main as pbjs } from 'protobufjs-cli/pbjs.js' | ||
export enum CODEC_TYPES { | ||
@@ -40,18 +41,18 @@ VARINT = 0, | ||
const encoderGenerators: Record<string, (val: string) => string> = { | ||
bool: (val) => `w.bool(${val})`, | ||
bytes: (val) => `w.bytes(${val})`, | ||
double: (val) => `w.double(${val})`, | ||
fixed32: (val) => `w.fixed32(${val})`, | ||
fixed64: (val) => `w.fixed64(${val})`, | ||
float: (val) => `w.float(${val})`, | ||
int32: (val) => `w.int32(${val})`, | ||
int64: (val) => `w.int64(${val})`, | ||
sfixed32: (val) => `w.sfixed32(${val})`, | ||
sfixed64: (val) => `w.sfixed64(${val})`, | ||
sint32: (val) => `w.sint32(${val})`, | ||
sint64: (val) => `w.sint64(${val})`, | ||
string: (val) => `w.string(${val})`, | ||
uint32: (val) => `w.uint32(${val})`, | ||
uint64: (val) => `w.uint64(${val})` | ||
const encoderGenerators: Record<string, (val: string, includeDefault: boolean) => string> = { | ||
bool: (val, includeDefault) => `w.bool(${val}${includeDefault ? ' ?? false' : ''})`, | ||
bytes: (val, includeDefault) => `w.bytes(${val}${includeDefault ? ' ?? new Uint8Array(0)' : ''})`, | ||
double: (val, includeDefault) => `w.double(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
fixed32: (val, includeDefault) => `w.fixed32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
fixed64: (val, includeDefault) => `w.fixed64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
float: (val, includeDefault) => `w.float(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
int32: (val, includeDefault) => `w.int32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
int64: (val, includeDefault) => `w.int64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
sfixed32: (val, includeDefault) => `w.sfixed32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
sfixed64: (val, includeDefault) => `w.sfixed64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
sint32: (val, includeDefault) => `w.sint32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
sint64: (val, includeDefault) => `w.sint64(${val}${includeDefault ? ' ?? 0n' : ''})`, | ||
string: (val, includeDefault) => `w.string(${val}${includeDefault ? ' ?? \'\'' : ''})`, | ||
uint32: (val, includeDefault) => `w.uint32(${val}${includeDefault ? ' ?? 0' : ''})`, | ||
uint64: (val, includeDefault) => `w.uint64(${val}${includeDefault ? ' ?? 0n' : ''})` | ||
} | ||
@@ -96,17 +97,17 @@ | ||
const defaultValueTestGenerators: Record<string, (field: string) => string> = { | ||
bool: (field) => `${field} !== false`, | ||
bool: (field) => `(${field} != null && ${field} !== false)`, | ||
bytes: (field) => `(${field} != null && ${field}.byteLength > 0)`, | ||
double: (field) => `${field} !== 0`, | ||
fixed32: (field) => `${field} !== 0`, | ||
fixed64: (field) => `${field} !== 0n`, | ||
float: (field) => `${field} !== 0`, | ||
int32: (field) => `${field} !== 0`, | ||
int64: (field) => `${field} !== 0n`, | ||
sfixed32: (field) => `${field} !== 0`, | ||
sfixed64: (field) => `${field} !== 0n`, | ||
sint32: (field) => `${field} !== 0`, | ||
sint64: (field) => `${field} !== 0n`, | ||
string: (field) => `${field} !== ''`, | ||
uint32: (field) => `${field} !== 0`, | ||
uint64: (field) => `${field} !== 0n` | ||
double: (field) => `(${field} != null && ${field} !== 0)`, | ||
fixed32: (field) => `(${field} != null && ${field} !== 0)`, | ||
fixed64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
float: (field) => `(${field} != null && ${field} !== 0)`, | ||
int32: (field) => `(${field} != null && ${field} !== 0)`, | ||
int64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
sfixed32: (field) => `(${field} != null && ${field} !== 0)`, | ||
sfixed64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
sint32: (field) => `(${field} != null && ${field} !== 0)`, | ||
sint64: (field) => `(${field} != null && ${field} !== 0n)`, | ||
string: (field) => `(${field} != null && ${field} !== '')`, | ||
uint32: (field) => `(${field} != null && ${field} !== 0)`, | ||
uint64: (field) => `(${field} != null && ${field} !== 0n)` | ||
} | ||
@@ -406,11 +407,22 @@ | ||
function createWriteField (valueVar: string): string { | ||
function createWriteField (valueVar: string): (includeDefault: boolean) => string { | ||
const id = (fieldDef.id << 3) | codecTypes[type] | ||
let defaultValue = '' | ||
let writeField = `w.uint32(${id}) | ||
${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}, w)` : encoderGenerators[type](valueVar)}` | ||
if (fieldDef.enum) { | ||
const def = findDef(fieldDef.type, messageDef, moduleDef) | ||
if (!isEnumDef(def)) { | ||
throw new Error(`${fieldDef.type} was not enum def`) | ||
} | ||
defaultValue = Object.keys(def.values)[0] | ||
} | ||
let writeField = (includeDefault: boolean): string => `w.uint32(${id}) | ||
${encoderGenerators[type] == null ? `${codec}.encode(${valueVar}${includeDefault ? ` ?? ${typeName}.${defaultValue}` : ''}, w)` : encoderGenerators[type](valueVar, includeDefault)}` | ||
if (type === 'message') { | ||
// message fields are only written if they have values | ||
writeField = `w.uint32(${id}) | ||
writeField = () => `w.uint32(${id}) | ||
${typeName}.codec().encode(${valueVar}, w, { | ||
@@ -428,6 +440,6 @@ writeDefaults: ${Boolean(fieldDef.repeated).toString()} | ||
if (fieldDef.map) { | ||
writeField = ` | ||
writeField = () => ` | ||
for (const [key, value] of obj.${name}.entries()) { | ||
${ | ||
createWriteField('{ key, value }') | ||
createWriteField('{ key, value }')(false) | ||
.split('\n') | ||
@@ -444,6 +456,6 @@ .map(s => { | ||
} else { | ||
writeField = ` | ||
writeField = () => ` | ||
for (const value of obj.${name}) { | ||
${ | ||
createWriteField('value') | ||
createWriteField('value')(false) | ||
.split('\n') | ||
@@ -464,3 +476,3 @@ .map(s => { | ||
if (${valueTest}) { | ||
${writeField} | ||
${writeField(valueTest.includes('opts.writeDefaults === true'))} | ||
}` | ||
@@ -546,3 +558,3 @@ }).join('\n') | ||
export const encode = (obj: ${messageDef.name}): Uint8Array => { | ||
export const encode = (obj: Partial<${messageDef.name}>): Uint8Array => { | ||
return encodeMessage(obj, ${messageDef.name}.codec()) | ||
@@ -696,3 +708,3 @@ } | ||
let lines = [ | ||
const ignores = [ | ||
'/* eslint-disable import/export */', | ||
@@ -702,21 +714,29 @@ '/* eslint-disable complexity */', | ||
'/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */', | ||
'/* eslint-disable @typescript-eslint/no-empty-interface */', | ||
'' | ||
'/* eslint-disable @typescript-eslint/no-empty-interface */' | ||
] | ||
const imports = [] | ||
if (moduleDef.imports.size > 0) { | ||
lines.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`) | ||
imports.push(`import { ${Array.from(moduleDef.imports).join(', ')} } from 'protons-runtime'`) | ||
} | ||
if (moduleDef.imports.has('encodeMessage')) { | ||
lines.push("import type { Uint8ArrayList } from 'uint8arraylist'") | ||
imports.push("import type { Uint8ArrayList } from 'uint8arraylist'") | ||
} | ||
if (moduleDef.importedTypes.size > 0) { | ||
lines.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`) | ||
imports.push(`import type { ${Array.from(moduleDef.importedTypes).join(', ')} } from 'protons-runtime'`) | ||
} | ||
lines = [ | ||
...lines, | ||
const lines = [ | ||
...ignores, | ||
'', | ||
...imports.sort((a, b) => { | ||
const aModule = a.split("from '")[1].toString() | ||
const bModule = b.split("from '")[1].toString() | ||
return aModule.localeCompare(bModule) | ||
}), | ||
'', | ||
...moduleDef.compiled | ||
@@ -723,0 +743,0 @@ ] |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
74453
1243