@bufbuild/protoplugin 2.4.0 → 2.5.1
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.
- package/dist/cjs/generated-file.d.ts +10 -1
- package/dist/cjs/generated-file.js +8 -1
- package/dist/cjs/names.d.ts +4 -0
- package/dist/cjs/names.js +37 -3
- package/dist/cjs/printable.d.ts +5 -1
- package/dist/cjs/runtime-imports.d.ts +1 -1
- package/dist/cjs/runtime-imports.js +2 -2
- package/dist/cjs/schema.js +2 -1
- package/dist/cjs/transpile.js +25 -26
- package/dist/esm/generated-file.d.ts +10 -1
- package/dist/esm/generated-file.js +8 -1
- package/dist/esm/names.d.ts +4 -0
- package/dist/esm/names.js +35 -2
- package/dist/esm/printable.d.ts +5 -1
- package/dist/esm/runtime-imports.d.ts +1 -1
- package/dist/esm/runtime-imports.js +1 -1
- package/dist/esm/schema.js +3 -2
- package/dist/esm/transpile.js +25 -26
- package/package.json +3 -6
|
@@ -91,6 +91,13 @@ export interface GeneratedFile {
|
|
|
91
91
|
* `json_types=true`.
|
|
92
92
|
*/
|
|
93
93
|
importJson(desc: DescMessage | DescEnum): ImportSymbol;
|
|
94
|
+
/**
|
|
95
|
+
* Import a message Valid type generated by protoc-gen-es.
|
|
96
|
+
*
|
|
97
|
+
* Note that protoc-gen-es only generates valid types with the plugin option
|
|
98
|
+
* `valid_types`.
|
|
99
|
+
*/
|
|
100
|
+
importValid(desc: DescMessage): ImportSymbol;
|
|
94
101
|
/**
|
|
95
102
|
* Import a descriptor generated by protoc-gen-es.
|
|
96
103
|
*/
|
|
@@ -126,6 +133,8 @@ export interface GeneratedFileController extends GeneratedFile {
|
|
|
126
133
|
}
|
|
127
134
|
export type ResolveDescImportFn = (desc: DescMessage | DescEnum | DescExtension | DescService | DescFile, typeOnly?: boolean) => ImportSymbol;
|
|
128
135
|
export type ResolveShapeImportFn = (desc: DescMessage | DescEnum) => ImportSymbol;
|
|
136
|
+
export type ResolveJsonImportFn = (desc: DescMessage | DescEnum) => ImportSymbol;
|
|
137
|
+
export type ResolveValidImportFn = (desc: DescMessage) => ImportSymbol;
|
|
129
138
|
export type RewriteImportFn = (path: string) => string;
|
|
130
139
|
export type CreatePreambleFn = (descFile: DescFile) => string;
|
|
131
|
-
export declare function createGeneratedFile(name: string, importPath: string, jsImportStyle: "module" | "legacy_commonjs", rewriteImport: RewriteImportFn, resolveDescImport: ResolveDescImportFn, resolveShapeImport: ResolveShapeImportFn, resolveJsonImport:
|
|
140
|
+
export declare function createGeneratedFile(name: string, importPath: string, jsImportStyle: "module" | "legacy_commonjs", rewriteImport: RewriteImportFn, resolveDescImport: ResolveDescImportFn, resolveShapeImport: ResolveShapeImportFn, resolveJsonImport: ResolveJsonImportFn, resolveValidImport: ResolveValidImportFn, createPreamble: CreatePreambleFn, runtime: RuntimeImports): GeneratedFileController;
|
|
@@ -18,7 +18,7 @@ const protobuf_1 = require("@bufbuild/protobuf");
|
|
|
18
18
|
const import_symbol_js_1 = require("./import-symbol.js");
|
|
19
19
|
const import_path_js_1 = require("./import-path.js");
|
|
20
20
|
const jsdoc_js_1 = require("./jsdoc.js");
|
|
21
|
-
function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, createPreamble, runtime) {
|
|
21
|
+
function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, resolveValidImport, createPreamble, runtime) {
|
|
22
22
|
let preamble;
|
|
23
23
|
const el = [];
|
|
24
24
|
return {
|
|
@@ -45,6 +45,7 @@ function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, res
|
|
|
45
45
|
resolveDescImport,
|
|
46
46
|
resolveShapeImport,
|
|
47
47
|
resolveJsonImport,
|
|
48
|
+
resolveValidImport,
|
|
48
49
|
}, printables);
|
|
49
50
|
el.push("\n");
|
|
50
51
|
},
|
|
@@ -91,6 +92,9 @@ function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, res
|
|
|
91
92
|
importJson(desc) {
|
|
92
93
|
return resolveJsonImport(desc);
|
|
93
94
|
},
|
|
95
|
+
importValid(desc) {
|
|
96
|
+
return resolveValidImport(desc);
|
|
97
|
+
},
|
|
94
98
|
import(name, from, typeOnly = false) {
|
|
95
99
|
return (0, import_symbol_js_1.createImportSymbol)(name, from, typeOnly);
|
|
96
100
|
},
|
|
@@ -241,6 +245,9 @@ function printableToEl(opt, printables) {
|
|
|
241
245
|
case "es_json_type_ref":
|
|
242
246
|
el.push(opt.resolveJsonImport(p.desc));
|
|
243
247
|
break;
|
|
248
|
+
case "es_valid_type_ref":
|
|
249
|
+
el.push(opt.resolveValidImport(p.desc));
|
|
250
|
+
break;
|
|
244
251
|
case "es_jsdoc":
|
|
245
252
|
el.push((0, jsdoc_js_1.formatJsDocBlock)(p.text, p.indentation));
|
|
246
253
|
break;
|
package/dist/cjs/names.d.ts
CHANGED
|
@@ -15,3 +15,7 @@ export declare function generatedShapeName(desc: DescEnum | DescMessage): string
|
|
|
15
15
|
* Return a safe identifier for a generated JSON type.
|
|
16
16
|
*/
|
|
17
17
|
export declare function generatedJsonTypeName(desc: DescEnum | DescMessage): string;
|
|
18
|
+
/**
|
|
19
|
+
* Return a safe identifier for a generated Valid type.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generatedValidTypeName(desc: DescEnum | DescMessage): string;
|
package/dist/cjs/names.js
CHANGED
|
@@ -17,7 +17,8 @@ exports.generateFilePath = generateFilePath;
|
|
|
17
17
|
exports.generatedDescName = generatedDescName;
|
|
18
18
|
exports.generatedShapeName = generatedShapeName;
|
|
19
19
|
exports.generatedJsonTypeName = generatedJsonTypeName;
|
|
20
|
-
|
|
20
|
+
exports.generatedValidTypeName = generatedValidTypeName;
|
|
21
|
+
const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
|
|
21
22
|
const reflect_1 = require("@bufbuild/protobuf/reflect");
|
|
22
23
|
const safe_identifier_js_1 = require("./safe-identifier.js");
|
|
23
24
|
/**
|
|
@@ -31,7 +32,7 @@ function generateFilePath(file, bootstrapWkt, filesToGenerate) {
|
|
|
31
32
|
// "bootstrap_wkt". In that case, we cannot refer to the runtime package
|
|
32
33
|
// itself.
|
|
33
34
|
// 2. We were explicitly asked to generate the well-known type.
|
|
34
|
-
const wktFrom =
|
|
35
|
+
const wktFrom = codegenv2_1.wktPublicImportPaths[file.proto.name];
|
|
35
36
|
if (wktFrom !== undefined &&
|
|
36
37
|
!bootstrapWkt &&
|
|
37
38
|
!filesToGenerate.find((f) => f.name === file.name)) {
|
|
@@ -73,6 +74,17 @@ function generatedJsonTypeName(desc) {
|
|
|
73
74
|
}
|
|
74
75
|
return name;
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Return a safe identifier for a generated Valid type.
|
|
79
|
+
*/
|
|
80
|
+
function generatedValidTypeName(desc) {
|
|
81
|
+
const { validTypeNames } = allNames(desc.file);
|
|
82
|
+
const name = validTypeNames.get(desc);
|
|
83
|
+
if (name === undefined) {
|
|
84
|
+
throw new Error(`unable to determine unique valid type name for ${desc.toString()}`);
|
|
85
|
+
}
|
|
86
|
+
return name;
|
|
87
|
+
}
|
|
76
88
|
/**
|
|
77
89
|
* Compute the ideal name for a generated descriptor.
|
|
78
90
|
*/
|
|
@@ -107,6 +119,13 @@ function idealJsonTypeName(desc, i) {
|
|
|
107
119
|
const salt = i === 0 ? "" : i === 1 ? "$" : `$${i - 1}`;
|
|
108
120
|
return (0, safe_identifier_js_1.safeIdentifier)(identifier(desc) + "Json" + salt);
|
|
109
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Compute the ideal name for a generated Valid type.
|
|
124
|
+
*/
|
|
125
|
+
function idealValidTypeName(desc, i) {
|
|
126
|
+
const salt = i === 0 ? "" : i === 1 ? "$" : `$${i - 1}`;
|
|
127
|
+
return (0, safe_identifier_js_1.safeIdentifier)(identifier(desc) + "Valid" + salt);
|
|
128
|
+
}
|
|
110
129
|
/**
|
|
111
130
|
* Return an identifier for the given descriptor based on its type name.
|
|
112
131
|
*
|
|
@@ -189,5 +208,20 @@ function allNames(file) {
|
|
|
189
208
|
taken.add(name);
|
|
190
209
|
jsonTypeNames.set(desc, name);
|
|
191
210
|
}
|
|
192
|
-
|
|
211
|
+
const validTypeNames = new Map();
|
|
212
|
+
for (const desc of (0, reflect_1.nestedTypes)(file)) {
|
|
213
|
+
if (desc.kind != "enum" && desc.kind != "message") {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
let name;
|
|
217
|
+
for (let i = 0;; i++) {
|
|
218
|
+
name = idealValidTypeName(desc, i);
|
|
219
|
+
if (!taken.has(name)) {
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
taken.add(name);
|
|
224
|
+
validTypeNames.set(desc, name);
|
|
225
|
+
}
|
|
226
|
+
return { shapeNames, jsonTypeNames, validTypeNames, descNames };
|
|
193
227
|
}
|
package/dist/cjs/printable.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ImportSymbol } from "./import-symbol.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* All types that can be passed to GeneratedFile.print()
|
|
5
5
|
*/
|
|
6
|
-
export type Printable = string | number | boolean | bigint | Uint8Array | ImportSymbol | ExportStatement | JSDocBlock | LiteralString | LiteralProtoInt64 | DescImport | ShapeImport | JsonTypeImport | Printable[];
|
|
6
|
+
export type Printable = string | number | boolean | bigint | Uint8Array | ImportSymbol | ExportStatement | JSDocBlock | LiteralString | LiteralProtoInt64 | DescImport | ShapeImport | JsonTypeImport | ValidTypeImport | Printable[];
|
|
7
7
|
export type ExportStatement = {
|
|
8
8
|
kind: "es_export_stmt";
|
|
9
9
|
name: string;
|
|
@@ -32,6 +32,10 @@ export type JsonTypeImport = {
|
|
|
32
32
|
readonly kind: "es_json_type_ref";
|
|
33
33
|
desc: DescMessage | DescEnum;
|
|
34
34
|
};
|
|
35
|
+
export type ValidTypeImport = {
|
|
36
|
+
readonly kind: "es_valid_type_ref";
|
|
37
|
+
desc: DescMessage;
|
|
38
|
+
};
|
|
35
39
|
export type JSDocBlock = {
|
|
36
40
|
readonly kind: "es_jsdoc";
|
|
37
41
|
text: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ImportSymbol } from "./import-symbol.js";
|
|
2
|
-
import { symbols } from "@bufbuild/protobuf/
|
|
2
|
+
import { symbols } from "@bufbuild/protobuf/codegenv2";
|
|
3
3
|
export type RuntimeImports = mapRecord<typeof symbols>;
|
|
4
4
|
export declare function createRuntimeImports(bootstrapWkt: boolean): RuntimeImports;
|
|
5
5
|
type mapRecord<T extends Record<string, unknown>> = {
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.createRuntimeImports = createRuntimeImports;
|
|
17
17
|
const import_symbol_js_1 = require("./import-symbol.js");
|
|
18
|
-
const
|
|
18
|
+
const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
|
|
19
19
|
function createRuntimeImports(bootstrapWkt) {
|
|
20
|
-
return mapRecord(
|
|
20
|
+
return mapRecord(codegenv2_1.symbols, bootstrapWkt);
|
|
21
21
|
}
|
|
22
22
|
function mapRecord(record, bootstrapWkt) {
|
|
23
23
|
const result = Object.create(null);
|
package/dist/cjs/schema.js
CHANGED
|
@@ -31,6 +31,7 @@ function createSchema(request, parameter, pluginName, pluginVersion, minimumEdit
|
|
|
31
31
|
const resolveDescImport = (desc, typeOnly) => (0, import_symbol_js_1.createImportSymbol)((0, names_js_1.generatedDescName)(desc), (0, names_js_1.generateFilePath)(desc.kind == "file" ? desc : desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), typeOnly);
|
|
32
32
|
const resolveShapeImport = (desc) => (0, import_symbol_js_1.createImportSymbol)((0, names_js_1.generatedShapeName)(desc), (0, names_js_1.generateFilePath)(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
33
33
|
const resolveJsonImport = (desc) => (0, import_symbol_js_1.createImportSymbol)((0, names_js_1.generatedJsonTypeName)(desc), (0, names_js_1.generateFilePath)(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
34
|
+
const resolveValidImport = (desc) => (0, import_symbol_js_1.createImportSymbol)((0, names_js_1.generatedValidTypeName)(desc), (0, names_js_1.generateFilePath)(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
34
35
|
const createPreamble = (descFile) => (0, file_preamble_js_1.makeFilePreamble)(descFile, pluginName, pluginVersion, parameter.sanitized, parameter.parsed.tsNocheck);
|
|
35
36
|
const rewriteImport = (importPath) => (0, import_path_js_1.rewriteImportPath)(importPath, parameter.parsed.rewriteImports, parameter.parsed.importExtension);
|
|
36
37
|
return {
|
|
@@ -45,7 +46,7 @@ function createSchema(request, parameter, pluginName, pluginVersion, minimumEdit
|
|
|
45
46
|
throw new Error("prepareGenerate() must be called before generateFile()");
|
|
46
47
|
}
|
|
47
48
|
const genFile = (0, generated_file_js_1.createGeneratedFile)(name, (0, import_path_js_1.deriveImportPath)(name), target === "js" ? parameter.parsed.jsImportStyle : "module", // ts and dts always use import/export, only js may use commonjs
|
|
48
|
-
rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, createPreamble, runtime);
|
|
49
|
+
rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, resolveValidImport, createPreamble, runtime);
|
|
49
50
|
generatedFiles.push(genFile);
|
|
50
51
|
return genFile;
|
|
51
52
|
},
|
package/dist/cjs/transpile.js
CHANGED
|
@@ -19,31 +19,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
19
|
exports.transpile = transpile;
|
|
20
20
|
const typescript_1 = __importDefault(require("typescript"));
|
|
21
21
|
const vfs_1 = require("@typescript/vfs");
|
|
22
|
-
// The default options used to auto-transpile if needed.
|
|
23
|
-
const defaultOptions = {
|
|
24
|
-
// Type checking
|
|
25
|
-
strict: false,
|
|
26
|
-
// modules
|
|
27
|
-
module: typescript_1.default.ModuleKind.ES2020,
|
|
28
|
-
moduleResolution: typescript_1.default.ModuleResolutionKind.Node10,
|
|
29
|
-
noResolve: true,
|
|
30
|
-
resolveJsonModule: false,
|
|
31
|
-
// emit
|
|
32
|
-
emitBOM: false,
|
|
33
|
-
importsNotUsedAsValues: typescript_1.default.ImportsNotUsedAsValues.Preserve,
|
|
34
|
-
newLine: typescript_1.default.NewLineKind.LineFeed,
|
|
35
|
-
preserveValueImports: false,
|
|
36
|
-
// JavaScript Support
|
|
37
|
-
allowJs: true,
|
|
38
|
-
checkJs: false,
|
|
39
|
-
// Language and Environment
|
|
40
|
-
lib: [],
|
|
41
|
-
moduleDetection: typescript_1.default.ModuleDetectionKind.Force,
|
|
42
|
-
target: typescript_1.default.ScriptTarget.ES2017,
|
|
43
|
-
// Completeness
|
|
44
|
-
skipLibCheck: true,
|
|
45
|
-
skipDefaultLibCheck: false,
|
|
46
|
-
};
|
|
47
22
|
/**
|
|
48
23
|
* Create a transpiler using the given compiler options, which will compile the
|
|
49
24
|
* content provided in the files array.
|
|
@@ -52,7 +27,7 @@ const defaultOptions = {
|
|
|
52
27
|
* TypeScript for stability. This version is denoted in this workspace's
|
|
53
28
|
* package.json. For the default set of compiler options, we use a lenient
|
|
54
29
|
* set of options because the general goal is to emit code as best as we can.
|
|
55
|
-
* For a list of the options used, see `defaultOptions`
|
|
30
|
+
* For a list of the options used, see `const defaultOptions` in function transpile.
|
|
56
31
|
*
|
|
57
32
|
* If this is not desirable for plugin authors, they are free to provide their
|
|
58
33
|
* own transpile function as part of the plugin initialization. If one is
|
|
@@ -82,6 +57,30 @@ function createTranspiler(options, files) {
|
|
|
82
57
|
});
|
|
83
58
|
}
|
|
84
59
|
function transpile(files, transpileJs, transpileDts, jsImportStyle) {
|
|
60
|
+
const defaultOptions = {
|
|
61
|
+
// Type checking
|
|
62
|
+
strict: false,
|
|
63
|
+
// modules
|
|
64
|
+
module: typescript_1.default.ModuleKind.ES2020,
|
|
65
|
+
moduleResolution: typescript_1.default.ModuleResolutionKind.Node10,
|
|
66
|
+
noResolve: true,
|
|
67
|
+
resolveJsonModule: false,
|
|
68
|
+
// emit
|
|
69
|
+
emitBOM: false,
|
|
70
|
+
importsNotUsedAsValues: typescript_1.default.ImportsNotUsedAsValues.Preserve,
|
|
71
|
+
newLine: typescript_1.default.NewLineKind.LineFeed,
|
|
72
|
+
preserveValueImports: false,
|
|
73
|
+
// JavaScript Support
|
|
74
|
+
allowJs: true,
|
|
75
|
+
checkJs: false,
|
|
76
|
+
// Language and Environment
|
|
77
|
+
lib: [],
|
|
78
|
+
moduleDetection: typescript_1.default.ModuleDetectionKind.Force,
|
|
79
|
+
target: typescript_1.default.ScriptTarget.ES2017,
|
|
80
|
+
// Completeness
|
|
81
|
+
skipLibCheck: true,
|
|
82
|
+
skipDefaultLibCheck: false,
|
|
83
|
+
};
|
|
85
84
|
const options = Object.assign(Object.assign({}, defaultOptions), { declaration: transpileDts, emitDeclarationOnly: transpileDts && !transpileJs });
|
|
86
85
|
if (jsImportStyle == "legacy_commonjs") {
|
|
87
86
|
options.module = typescript_1.default.ModuleKind.CommonJS;
|
|
@@ -91,6 +91,13 @@ export interface GeneratedFile {
|
|
|
91
91
|
* `json_types=true`.
|
|
92
92
|
*/
|
|
93
93
|
importJson(desc: DescMessage | DescEnum): ImportSymbol;
|
|
94
|
+
/**
|
|
95
|
+
* Import a message Valid type generated by protoc-gen-es.
|
|
96
|
+
*
|
|
97
|
+
* Note that protoc-gen-es only generates valid types with the plugin option
|
|
98
|
+
* `valid_types`.
|
|
99
|
+
*/
|
|
100
|
+
importValid(desc: DescMessage): ImportSymbol;
|
|
94
101
|
/**
|
|
95
102
|
* Import a descriptor generated by protoc-gen-es.
|
|
96
103
|
*/
|
|
@@ -126,6 +133,8 @@ export interface GeneratedFileController extends GeneratedFile {
|
|
|
126
133
|
}
|
|
127
134
|
export type ResolveDescImportFn = (desc: DescMessage | DescEnum | DescExtension | DescService | DescFile, typeOnly?: boolean) => ImportSymbol;
|
|
128
135
|
export type ResolveShapeImportFn = (desc: DescMessage | DescEnum) => ImportSymbol;
|
|
136
|
+
export type ResolveJsonImportFn = (desc: DescMessage | DescEnum) => ImportSymbol;
|
|
137
|
+
export type ResolveValidImportFn = (desc: DescMessage) => ImportSymbol;
|
|
129
138
|
export type RewriteImportFn = (path: string) => string;
|
|
130
139
|
export type CreatePreambleFn = (descFile: DescFile) => string;
|
|
131
|
-
export declare function createGeneratedFile(name: string, importPath: string, jsImportStyle: "module" | "legacy_commonjs", rewriteImport: RewriteImportFn, resolveDescImport: ResolveDescImportFn, resolveShapeImport: ResolveShapeImportFn, resolveJsonImport:
|
|
140
|
+
export declare function createGeneratedFile(name: string, importPath: string, jsImportStyle: "module" | "legacy_commonjs", rewriteImport: RewriteImportFn, resolveDescImport: ResolveDescImportFn, resolveShapeImport: ResolveShapeImportFn, resolveJsonImport: ResolveJsonImportFn, resolveValidImport: ResolveValidImportFn, createPreamble: CreatePreambleFn, runtime: RuntimeImports): GeneratedFileController;
|
|
@@ -15,7 +15,7 @@ import { protoInt64, ScalarType, } from "@bufbuild/protobuf";
|
|
|
15
15
|
import { createImportSymbol } from "./import-symbol.js";
|
|
16
16
|
import { makeImportPathRelative } from "./import-path.js";
|
|
17
17
|
import { createJsDocTextFromDesc, formatJsDocBlock } from "./jsdoc.js";
|
|
18
|
-
export function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, createPreamble, runtime) {
|
|
18
|
+
export function createGeneratedFile(name, importPath, jsImportStyle, rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, resolveValidImport, createPreamble, runtime) {
|
|
19
19
|
let preamble;
|
|
20
20
|
const el = [];
|
|
21
21
|
return {
|
|
@@ -42,6 +42,7 @@ export function createGeneratedFile(name, importPath, jsImportStyle, rewriteImpo
|
|
|
42
42
|
resolveDescImport,
|
|
43
43
|
resolveShapeImport,
|
|
44
44
|
resolveJsonImport,
|
|
45
|
+
resolveValidImport,
|
|
45
46
|
}, printables);
|
|
46
47
|
el.push("\n");
|
|
47
48
|
},
|
|
@@ -88,6 +89,9 @@ export function createGeneratedFile(name, importPath, jsImportStyle, rewriteImpo
|
|
|
88
89
|
importJson(desc) {
|
|
89
90
|
return resolveJsonImport(desc);
|
|
90
91
|
},
|
|
92
|
+
importValid(desc) {
|
|
93
|
+
return resolveValidImport(desc);
|
|
94
|
+
},
|
|
91
95
|
import(name, from, typeOnly = false) {
|
|
92
96
|
return createImportSymbol(name, from, typeOnly);
|
|
93
97
|
},
|
|
@@ -238,6 +242,9 @@ function printableToEl(opt, printables) {
|
|
|
238
242
|
case "es_json_type_ref":
|
|
239
243
|
el.push(opt.resolveJsonImport(p.desc));
|
|
240
244
|
break;
|
|
245
|
+
case "es_valid_type_ref":
|
|
246
|
+
el.push(opt.resolveValidImport(p.desc));
|
|
247
|
+
break;
|
|
241
248
|
case "es_jsdoc":
|
|
242
249
|
el.push(formatJsDocBlock(p.text, p.indentation));
|
|
243
250
|
break;
|
package/dist/esm/names.d.ts
CHANGED
|
@@ -15,3 +15,7 @@ export declare function generatedShapeName(desc: DescEnum | DescMessage): string
|
|
|
15
15
|
* Return a safe identifier for a generated JSON type.
|
|
16
16
|
*/
|
|
17
17
|
export declare function generatedJsonTypeName(desc: DescEnum | DescMessage): string;
|
|
18
|
+
/**
|
|
19
|
+
* Return a safe identifier for a generated Valid type.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generatedValidTypeName(desc: DescEnum | DescMessage): string;
|
package/dist/esm/names.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
import { wktPublicImportPaths } from "@bufbuild/protobuf/
|
|
14
|
+
import { wktPublicImportPaths } from "@bufbuild/protobuf/codegenv2";
|
|
15
15
|
import { nestedTypes } from "@bufbuild/protobuf/reflect";
|
|
16
16
|
import { safeIdentifier } from "./safe-identifier.js";
|
|
17
17
|
/**
|
|
@@ -67,6 +67,17 @@ export function generatedJsonTypeName(desc) {
|
|
|
67
67
|
}
|
|
68
68
|
return name;
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Return a safe identifier for a generated Valid type.
|
|
72
|
+
*/
|
|
73
|
+
export function generatedValidTypeName(desc) {
|
|
74
|
+
const { validTypeNames } = allNames(desc.file);
|
|
75
|
+
const name = validTypeNames.get(desc);
|
|
76
|
+
if (name === undefined) {
|
|
77
|
+
throw new Error(`unable to determine unique valid type name for ${desc.toString()}`);
|
|
78
|
+
}
|
|
79
|
+
return name;
|
|
80
|
+
}
|
|
70
81
|
/**
|
|
71
82
|
* Compute the ideal name for a generated descriptor.
|
|
72
83
|
*/
|
|
@@ -101,6 +112,13 @@ function idealJsonTypeName(desc, i) {
|
|
|
101
112
|
const salt = i === 0 ? "" : i === 1 ? "$" : `$${i - 1}`;
|
|
102
113
|
return safeIdentifier(identifier(desc) + "Json" + salt);
|
|
103
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Compute the ideal name for a generated Valid type.
|
|
117
|
+
*/
|
|
118
|
+
function idealValidTypeName(desc, i) {
|
|
119
|
+
const salt = i === 0 ? "" : i === 1 ? "$" : `$${i - 1}`;
|
|
120
|
+
return safeIdentifier(identifier(desc) + "Valid" + salt);
|
|
121
|
+
}
|
|
104
122
|
/**
|
|
105
123
|
* Return an identifier for the given descriptor based on its type name.
|
|
106
124
|
*
|
|
@@ -183,5 +201,20 @@ function allNames(file) {
|
|
|
183
201
|
taken.add(name);
|
|
184
202
|
jsonTypeNames.set(desc, name);
|
|
185
203
|
}
|
|
186
|
-
|
|
204
|
+
const validTypeNames = new Map();
|
|
205
|
+
for (const desc of nestedTypes(file)) {
|
|
206
|
+
if (desc.kind != "enum" && desc.kind != "message") {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
let name;
|
|
210
|
+
for (let i = 0;; i++) {
|
|
211
|
+
name = idealValidTypeName(desc, i);
|
|
212
|
+
if (!taken.has(name)) {
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
taken.add(name);
|
|
217
|
+
validTypeNames.set(desc, name);
|
|
218
|
+
}
|
|
219
|
+
return { shapeNames, jsonTypeNames, validTypeNames, descNames };
|
|
187
220
|
}
|
package/dist/esm/printable.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ImportSymbol } from "./import-symbol.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* All types that can be passed to GeneratedFile.print()
|
|
5
5
|
*/
|
|
6
|
-
export type Printable = string | number | boolean | bigint | Uint8Array | ImportSymbol | ExportStatement | JSDocBlock | LiteralString | LiteralProtoInt64 | DescImport | ShapeImport | JsonTypeImport | Printable[];
|
|
6
|
+
export type Printable = string | number | boolean | bigint | Uint8Array | ImportSymbol | ExportStatement | JSDocBlock | LiteralString | LiteralProtoInt64 | DescImport | ShapeImport | JsonTypeImport | ValidTypeImport | Printable[];
|
|
7
7
|
export type ExportStatement = {
|
|
8
8
|
kind: "es_export_stmt";
|
|
9
9
|
name: string;
|
|
@@ -32,6 +32,10 @@ export type JsonTypeImport = {
|
|
|
32
32
|
readonly kind: "es_json_type_ref";
|
|
33
33
|
desc: DescMessage | DescEnum;
|
|
34
34
|
};
|
|
35
|
+
export type ValidTypeImport = {
|
|
36
|
+
readonly kind: "es_valid_type_ref";
|
|
37
|
+
desc: DescMessage;
|
|
38
|
+
};
|
|
35
39
|
export type JSDocBlock = {
|
|
36
40
|
readonly kind: "es_jsdoc";
|
|
37
41
|
text: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ImportSymbol } from "./import-symbol.js";
|
|
2
|
-
import { symbols } from "@bufbuild/protobuf/
|
|
2
|
+
import { symbols } from "@bufbuild/protobuf/codegenv2";
|
|
3
3
|
export type RuntimeImports = mapRecord<typeof symbols>;
|
|
4
4
|
export declare function createRuntimeImports(bootstrapWkt: boolean): RuntimeImports;
|
|
5
5
|
type mapRecord<T extends Record<string, unknown>> = {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import { createImportSymbol } from "./import-symbol.js";
|
|
15
|
-
import { symbols } from "@bufbuild/protobuf/
|
|
15
|
+
import { symbols } from "@bufbuild/protobuf/codegenv2";
|
|
16
16
|
export function createRuntimeImports(bootstrapWkt) {
|
|
17
17
|
return mapRecord(symbols, bootstrapWkt);
|
|
18
18
|
}
|
package/dist/esm/schema.js
CHANGED
|
@@ -18,7 +18,7 @@ import { createGeneratedFile } from "./generated-file.js";
|
|
|
18
18
|
import { createImportSymbol } from "./import-symbol.js";
|
|
19
19
|
import { deriveImportPath, rewriteImportPath } from "./import-path.js";
|
|
20
20
|
import { makeFilePreamble } from "./file-preamble.js";
|
|
21
|
-
import { generatedDescName, generatedShapeName, generateFilePath, generatedJsonTypeName, } from "./names.js";
|
|
21
|
+
import { generatedDescName, generatedShapeName, generateFilePath, generatedJsonTypeName, generatedValidTypeName, } from "./names.js";
|
|
22
22
|
import { createRuntimeImports } from "./runtime-imports.js";
|
|
23
23
|
export function createSchema(request, parameter, pluginName, pluginVersion, minimumEdition, maximumEdition) {
|
|
24
24
|
const { allFiles, filesToGenerate } = getFilesToGenerate(request, minimumEdition, maximumEdition);
|
|
@@ -28,6 +28,7 @@ export function createSchema(request, parameter, pluginName, pluginVersion, mini
|
|
|
28
28
|
const resolveDescImport = (desc, typeOnly) => createImportSymbol(generatedDescName(desc), generateFilePath(desc.kind == "file" ? desc : desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), typeOnly);
|
|
29
29
|
const resolveShapeImport = (desc) => createImportSymbol(generatedShapeName(desc), generateFilePath(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
30
30
|
const resolveJsonImport = (desc) => createImportSymbol(generatedJsonTypeName(desc), generateFilePath(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
31
|
+
const resolveValidImport = (desc) => createImportSymbol(generatedValidTypeName(desc), generateFilePath(desc.file, parameter.parsed.bootstrapWkt, filesToGenerate), true);
|
|
31
32
|
const createPreamble = (descFile) => makeFilePreamble(descFile, pluginName, pluginVersion, parameter.sanitized, parameter.parsed.tsNocheck);
|
|
32
33
|
const rewriteImport = (importPath) => rewriteImportPath(importPath, parameter.parsed.rewriteImports, parameter.parsed.importExtension);
|
|
33
34
|
return {
|
|
@@ -42,7 +43,7 @@ export function createSchema(request, parameter, pluginName, pluginVersion, mini
|
|
|
42
43
|
throw new Error("prepareGenerate() must be called before generateFile()");
|
|
43
44
|
}
|
|
44
45
|
const genFile = createGeneratedFile(name, deriveImportPath(name), target === "js" ? parameter.parsed.jsImportStyle : "module", // ts and dts always use import/export, only js may use commonjs
|
|
45
|
-
rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, createPreamble, runtime);
|
|
46
|
+
rewriteImport, resolveDescImport, resolveShapeImport, resolveJsonImport, resolveValidImport, createPreamble, runtime);
|
|
46
47
|
generatedFiles.push(genFile);
|
|
47
48
|
return genFile;
|
|
48
49
|
},
|
package/dist/esm/transpile.js
CHANGED
|
@@ -13,31 +13,6 @@
|
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import ts from "typescript";
|
|
15
15
|
import { createDefaultMapFromNodeModules, createSystem, createVirtualCompilerHost, } from "@typescript/vfs";
|
|
16
|
-
// The default options used to auto-transpile if needed.
|
|
17
|
-
const defaultOptions = {
|
|
18
|
-
// Type checking
|
|
19
|
-
strict: false,
|
|
20
|
-
// modules
|
|
21
|
-
module: ts.ModuleKind.ES2020,
|
|
22
|
-
moduleResolution: ts.ModuleResolutionKind.Node10,
|
|
23
|
-
noResolve: true,
|
|
24
|
-
resolveJsonModule: false,
|
|
25
|
-
// emit
|
|
26
|
-
emitBOM: false,
|
|
27
|
-
importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Preserve,
|
|
28
|
-
newLine: ts.NewLineKind.LineFeed,
|
|
29
|
-
preserveValueImports: false,
|
|
30
|
-
// JavaScript Support
|
|
31
|
-
allowJs: true,
|
|
32
|
-
checkJs: false,
|
|
33
|
-
// Language and Environment
|
|
34
|
-
lib: [],
|
|
35
|
-
moduleDetection: ts.ModuleDetectionKind.Force,
|
|
36
|
-
target: ts.ScriptTarget.ES2017,
|
|
37
|
-
// Completeness
|
|
38
|
-
skipLibCheck: true,
|
|
39
|
-
skipDefaultLibCheck: false,
|
|
40
|
-
};
|
|
41
16
|
/**
|
|
42
17
|
* Create a transpiler using the given compiler options, which will compile the
|
|
43
18
|
* content provided in the files array.
|
|
@@ -46,7 +21,7 @@ const defaultOptions = {
|
|
|
46
21
|
* TypeScript for stability. This version is denoted in this workspace's
|
|
47
22
|
* package.json. For the default set of compiler options, we use a lenient
|
|
48
23
|
* set of options because the general goal is to emit code as best as we can.
|
|
49
|
-
* For a list of the options used, see `defaultOptions`
|
|
24
|
+
* For a list of the options used, see `const defaultOptions` in function transpile.
|
|
50
25
|
*
|
|
51
26
|
* If this is not desirable for plugin authors, they are free to provide their
|
|
52
27
|
* own transpile function as part of the plugin initialization. If one is
|
|
@@ -76,6 +51,30 @@ function createTranspiler(options, files) {
|
|
|
76
51
|
});
|
|
77
52
|
}
|
|
78
53
|
export function transpile(files, transpileJs, transpileDts, jsImportStyle) {
|
|
54
|
+
const defaultOptions = {
|
|
55
|
+
// Type checking
|
|
56
|
+
strict: false,
|
|
57
|
+
// modules
|
|
58
|
+
module: ts.ModuleKind.ES2020,
|
|
59
|
+
moduleResolution: ts.ModuleResolutionKind.Node10,
|
|
60
|
+
noResolve: true,
|
|
61
|
+
resolveJsonModule: false,
|
|
62
|
+
// emit
|
|
63
|
+
emitBOM: false,
|
|
64
|
+
importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Preserve,
|
|
65
|
+
newLine: ts.NewLineKind.LineFeed,
|
|
66
|
+
preserveValueImports: false,
|
|
67
|
+
// JavaScript Support
|
|
68
|
+
allowJs: true,
|
|
69
|
+
checkJs: false,
|
|
70
|
+
// Language and Environment
|
|
71
|
+
lib: [],
|
|
72
|
+
moduleDetection: ts.ModuleDetectionKind.Force,
|
|
73
|
+
target: ts.ScriptTarget.ES2017,
|
|
74
|
+
// Completeness
|
|
75
|
+
skipLibCheck: true,
|
|
76
|
+
skipDefaultLibCheck: false,
|
|
77
|
+
};
|
|
79
78
|
const options = Object.assign(Object.assign({}, defaultOptions), { declaration: transpileDts, emitDeclarationOnly: transpileDts && !transpileJs });
|
|
80
79
|
if (jsImportStyle == "legacy_commonjs") {
|
|
81
80
|
options.module = ts.ModuleKind.CommonJS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bufbuild/protoplugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Helps to create your own Protocol Buffers code generators.",
|
|
6
6
|
"keywords": [
|
|
@@ -35,12 +35,9 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@bufbuild/protobuf": "2.
|
|
38
|
+
"@bufbuild/protobuf": "2.5.1",
|
|
39
39
|
"@typescript/vfs": "^1.5.2",
|
|
40
40
|
"typescript": "5.4.5"
|
|
41
41
|
},
|
|
42
|
-
"files": ["dist/**"]
|
|
43
|
-
"devDependencies": {
|
|
44
|
-
"@types/lz-string": "^1.5.0"
|
|
45
|
-
}
|
|
42
|
+
"files": ["dist/**"]
|
|
46
43
|
}
|