@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.
@@ -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: ResolveShapeImportFn, createPreamble: CreatePreambleFn, runtime: RuntimeImports): GeneratedFileController;
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;
@@ -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
- const codegenv1_1 = require("@bufbuild/protobuf/codegenv1");
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 = codegenv1_1.wktPublicImportPaths[file.proto.name];
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
- return { shapeNames, jsonTypeNames, descNames };
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
  }
@@ -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/codegenv1";
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 codegenv1_1 = require("@bufbuild/protobuf/codegenv1");
18
+ const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
19
19
  function createRuntimeImports(bootstrapWkt) {
20
- return mapRecord(codegenv1_1.symbols, bootstrapWkt);
20
+ return mapRecord(codegenv2_1.symbols, bootstrapWkt);
21
21
  }
22
22
  function mapRecord(record, bootstrapWkt) {
23
23
  const result = Object.create(null);
@@ -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
  },
@@ -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` above.
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: ResolveShapeImportFn, createPreamble: CreatePreambleFn, runtime: RuntimeImports): GeneratedFileController;
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;
@@ -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/codegenv1";
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
- return { shapeNames, jsonTypeNames, descNames };
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
  }
@@ -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/codegenv1";
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/codegenv1";
15
+ import { symbols } from "@bufbuild/protobuf/codegenv2";
16
16
  export function createRuntimeImports(bootstrapWkt) {
17
17
  return mapRecord(symbols, bootstrapWkt);
18
18
  }
@@ -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
  },
@@ -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` above.
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.4.0",
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.4.0",
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
  }