quicktype-core 23.0.175 → 23.1.0

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.
Files changed (86) hide show
  1. package/dist/Messages.d.ts +4 -6
  2. package/dist/Messages.js +9 -10
  3. package/dist/RendererOptions/index.d.ts +43 -0
  4. package/dist/{RendererOptions.js → RendererOptions/index.js} +46 -34
  5. package/dist/RendererOptions/types.d.ts +26 -0
  6. package/dist/RendererOptions/types.js +2 -0
  7. package/dist/Run.d.ts +6 -7
  8. package/dist/TargetLanguage.d.ts +14 -9
  9. package/dist/TargetLanguage.js +3 -3
  10. package/dist/TypeUtils.d.ts +1 -1
  11. package/dist/TypeUtils.js +2 -4
  12. package/dist/index.d.ts +1 -2
  13. package/dist/index.js +2 -5
  14. package/dist/input/Inputs.d.ts +2 -1
  15. package/dist/language/All.d.ts +31 -2
  16. package/dist/language/All.js +22 -10
  17. package/dist/language/CJSON/language.d.ts +53 -20
  18. package/dist/language/CJSON/language.js +38 -67
  19. package/dist/language/CPlusPlus/language.d.ts +59 -19
  20. package/dist/language/CPlusPlus/language.js +41 -68
  21. package/dist/language/CSharp/language.d.ts +171 -57
  22. package/dist/language/CSharp/language.js +40 -57
  23. package/dist/language/Crystal/language.d.ts +8 -5
  24. package/dist/language/Crystal/language.js +10 -5
  25. package/dist/language/Dart/language.d.ts +20 -15
  26. package/dist/language/Dart/language.js +4 -15
  27. package/dist/language/Elixir/language.d.ts +11 -6
  28. package/dist/language/Elixir/language.js +8 -3
  29. package/dist/language/Elm/language.d.ts +15 -7
  30. package/dist/language/Elm/language.js +12 -7
  31. package/dist/language/Golang/language.d.ts +16 -10
  32. package/dist/language/Golang/language.js +7 -9
  33. package/dist/language/Haskell/language.d.ts +15 -7
  34. package/dist/language/Haskell/language.js +12 -7
  35. package/dist/language/JSONSchema/language.d.ts +8 -4
  36. package/dist/language/JSONSchema/language.js +8 -3
  37. package/dist/language/Java/language.d.ts +27 -11
  38. package/dist/language/Java/language.js +10 -19
  39. package/dist/language/JavaScript/language.d.ts +26 -10
  40. package/dist/language/JavaScript/language.js +13 -14
  41. package/dist/language/JavaScriptPropTypes/language.d.ts +24 -8
  42. package/dist/language/JavaScriptPropTypes/language.js +14 -9
  43. package/dist/language/Kotlin/language.d.ts +22 -13
  44. package/dist/language/Kotlin/language.js +18 -20
  45. package/dist/language/Objective-C/ObjectiveCRenderer.d.ts +3 -1
  46. package/dist/language/Objective-C/language.d.ts +27 -17
  47. package/dist/language/Objective-C/language.js +13 -14
  48. package/dist/language/Php/language.d.ts +19 -9
  49. package/dist/language/Php/language.js +8 -27
  50. package/dist/language/Pike/language.d.ts +7 -4
  51. package/dist/language/Pike/language.js +8 -3
  52. package/dist/language/Python/language.d.ts +27 -8
  53. package/dist/language/Python/language.js +11 -12
  54. package/dist/language/Ruby/language.d.ts +16 -7
  55. package/dist/language/Ruby/language.js +13 -8
  56. package/dist/language/Ruby/utils.d.ts +1 -1
  57. package/dist/language/Rust/language.d.ts +25 -13
  58. package/dist/language/Rust/language.js +20 -24
  59. package/dist/language/Scala3/language.d.ts +15 -11
  60. package/dist/language/Scala3/language.js +16 -17
  61. package/dist/language/Smithy4s/language.d.ts +13 -6
  62. package/dist/language/Smithy4s/language.js +10 -4
  63. package/dist/language/Swift/language.d.ts +54 -25
  64. package/dist/language/Swift/language.js +25 -39
  65. package/dist/language/TypeScriptEffectSchema/language.d.ts +11 -6
  66. package/dist/language/TypeScriptEffectSchema/language.js +10 -5
  67. package/dist/language/TypeScriptFlow/language.d.ts +47 -22
  68. package/dist/language/TypeScriptFlow/language.js +44 -23
  69. package/dist/language/TypeScriptZod/language.d.ts +11 -6
  70. package/dist/language/TypeScriptZod/language.js +10 -5
  71. package/dist/language/index.d.ts +3 -0
  72. package/dist/language/index.js +5 -0
  73. package/dist/language/options.types.d.ts +11 -0
  74. package/dist/language/options.types.js +2 -0
  75. package/dist/language/types.d.ts +12 -0
  76. package/dist/language/types.js +2 -0
  77. package/dist/support/Acronyms.d.ts +6 -1
  78. package/dist/support/Acronyms.js +6 -6
  79. package/dist/support/Converters.d.ts +4 -1
  80. package/dist/support/Converters.js +4 -4
  81. package/dist/types.d.ts +3 -1
  82. package/dist/types.js +16 -1
  83. package/package.json +1 -1
  84. package/dist/RendererOptions.d.ts +0 -64
  85. package/dist/language/Java.d.ts +0 -124
  86. package/dist/language/Java.js +0 -1085
@@ -276,10 +276,8 @@ export type ErrorProperties = {
276
276
  message: string;
277
277
  };
278
278
  };
279
- export type ErrorKinds = ErrorProperties extends {
280
- kind: infer K;
281
- } ? K : never;
282
- export type ErrorPropertiesForName<K> = Extract<ErrorProperties, {
279
+ export type ErrorKinds = ErrorProperties["kind"];
280
+ export type ErrorPropertiesForKind<K extends ErrorKinds = ErrorKinds> = Extract<ErrorProperties, {
283
281
  kind: K;
284
282
  }> extends {
285
283
  properties: infer P;
@@ -291,5 +289,5 @@ export declare class QuickTypeError extends Error {
291
289
  readonly properties: StringMap;
292
290
  constructor(errorMessage: string, messageName: string, userMessage: string, properties: StringMap);
293
291
  }
294
- export declare function messageError<N extends ErrorKinds>(kind: N, properties: ErrorPropertiesForName<N>): never;
295
- export declare function messageAssert<N extends ErrorKinds>(assertion: boolean, kind: N, properties: ErrorPropertiesForName<N>): void;
292
+ export declare function messageError<Kind extends ErrorKinds>(kind: Kind, properties: ErrorPropertiesForKind<Kind>): never;
293
+ export declare function messageAssert<Kind extends ErrorKinds>(assertion: boolean, kind: Kind, properties: ErrorPropertiesForKind<Kind>): void;
package/dist/Messages.js CHANGED
@@ -78,21 +78,20 @@ exports.QuickTypeError = QuickTypeError;
78
78
  function messageError(kind, properties) {
79
79
  const message = errorMessages[kind];
80
80
  let userMessage = message;
81
- const propertiesMap = properties;
82
- for (const name of Object.getOwnPropertyNames(propertiesMap)) {
83
- let value = propertiesMap[name];
84
- if (typeof value === "object" && typeof value.toString === "function") {
85
- value = value.toString();
81
+ for (const [name, value] of Object.entries(properties)) {
82
+ let valueString = "";
83
+ if (typeof value === "object" && typeof (value === null || value === void 0 ? void 0 : value.toString) === "function") {
84
+ valueString = value.toString();
86
85
  }
87
- else if (typeof value.message === "string") {
88
- value = value.message;
86
+ else if (typeof (value === null || value === void 0 ? void 0 : value.message) === "string") {
87
+ valueString = value.message;
89
88
  }
90
89
  else if (typeof value !== "string") {
91
- value = JSON.stringify(value);
90
+ valueString = JSON.stringify(value);
92
91
  }
93
- userMessage = userMessage.replace("${" + name + "}", value);
92
+ userMessage = userMessage.replace("${" + name + "}", valueString);
94
93
  }
95
- throw new QuickTypeError(message, kind, userMessage, propertiesMap);
94
+ throw new QuickTypeError(message, kind, userMessage, properties);
96
95
  }
97
96
  exports.messageError = messageError;
98
97
  function messageAssert(assertion, kind, properties) {
@@ -0,0 +1,43 @@
1
+ import { type FixMeOptionsType, type NoInfer } from "../types";
2
+ import type { OptionDefinition, OptionKind, OptionValues } from "./types";
3
+ export * from "./types";
4
+ /**
5
+ * The superclass for target language options. You probably want to use one of its
6
+ * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`.
7
+ */
8
+ export declare abstract class Option<Name extends string, T> {
9
+ readonly definition: OptionDefinition<Name, T>;
10
+ constructor(definition: OptionDefinition<Name, T>);
11
+ get name(): Name;
12
+ getValue(values: Record<string, unknown>): T;
13
+ get cliDefinitions(): {
14
+ actual: Array<OptionDefinition<Name, T>>;
15
+ display: Array<OptionDefinition<Name, T>>;
16
+ };
17
+ }
18
+ export declare function getOptionValues<Name extends string, T, Options extends Record<string, Option<Name, T>>>(options: Options, untypedOptionValues: FixMeOptionsType): OptionValues<Options>;
19
+ /**
20
+ * A target language option that allows setting a boolean flag.
21
+ */
22
+ export declare class BooleanOption<Name extends string> extends Option<Name, boolean> {
23
+ /**
24
+ * @param name The shorthand name.
25
+ * @param description Short-ish description of the option.
26
+ * @param defaultValue The default value.
27
+ * @param kind Whether it's a primary or secondary option.
28
+ */
29
+ constructor(name: Name, description: string, defaultValue: boolean, kind?: OptionKind);
30
+ get cliDefinitions(): {
31
+ actual: Array<OptionDefinition<Name, boolean>>;
32
+ display: Array<OptionDefinition<Name, boolean>>;
33
+ };
34
+ getValue(values: Record<string, unknown>): boolean;
35
+ }
36
+ export declare class StringOption<Name extends string> extends Option<Name, string> {
37
+ constructor(name: Name, description: string, typeLabel: string, defaultValue: string, kind?: OptionKind);
38
+ }
39
+ export declare class EnumOption<Name extends string, EnumMap extends Record<string, unknown>, EnumKey extends Extract<keyof EnumMap, string> = Extract<keyof EnumMap, string>> extends Option<Name, EnumKey> {
40
+ private readonly _values;
41
+ constructor(name: Name, description: string, values: EnumMap, defaultValue: NoInfer<EnumKey>, kind?: OptionKind);
42
+ getEnumValue<Key extends EnumKey>(name: Key): EnumMap[Key];
43
+ }
@@ -1,26 +1,38 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.EnumOption = exports.StringOption = exports.BooleanOption = exports.getOptionValues = exports.Option = void 0;
4
- // eslint-disable-next-line @typescript-eslint/no-redeclare
5
- const collection_utils_1 = require("collection-utils");
6
- const Messages_1 = require("./Messages");
7
- const Support_1 = require("./support/Support");
18
+ const Messages_1 = require("../Messages");
19
+ const Support_1 = require("../support/Support");
20
+ __exportStar(require("./types"), exports);
8
21
  /**
9
22
  * The superclass for target language options. You probably want to use one of its
10
23
  * subclasses, `BooleanOption`, `EnumOption`, or `StringOption`.
11
24
  */
12
25
  class Option {
13
26
  constructor(definition) {
14
- definition.renderer = true;
15
27
  this.definition = definition;
16
28
  (0, Support_1.assert)(definition.kind !== undefined, "Renderer option kind must be defined");
17
29
  }
30
+ get name() {
31
+ return this.definition.name;
32
+ }
18
33
  getValue(values) {
19
- const value = values[this.definition.name];
20
- if (value === undefined) {
21
- return this.definition.defaultValue;
22
- }
23
- return value;
34
+ var _a;
35
+ return ((_a = values[this.name]) !== null && _a !== void 0 ? _a : this.definition.defaultValue);
24
36
  }
25
37
  get cliDefinitions() {
26
38
  return { actual: [this.definition], display: [this.definition] };
@@ -29,8 +41,14 @@ class Option {
29
41
  exports.Option = Option;
30
42
  function getOptionValues(options, untypedOptionValues) {
31
43
  const optionValues = {};
32
- for (const name of Object.getOwnPropertyNames(options)) {
33
- optionValues[name] = options[name].getValue(untypedOptionValues);
44
+ for (const [key, option] of Object.entries(options)) {
45
+ const value = option.getValue(untypedOptionValues);
46
+ if (option instanceof EnumOption) {
47
+ optionValues[key] = option.getEnumValue(value);
48
+ }
49
+ else {
50
+ optionValues[key] = value;
51
+ }
34
52
  }
35
53
  return optionValues;
36
54
  }
@@ -56,11 +74,11 @@ class BooleanOption extends Option {
56
74
  }
57
75
  get cliDefinitions() {
58
76
  const negated = Object.assign({}, this.definition, {
59
- name: `no-${this.definition.name}`,
77
+ name: `no-${this.name}`,
60
78
  defaultValue: !this.definition.defaultValue
61
79
  });
62
80
  const display = Object.assign({}, this.definition, {
63
- name: `[no-]${this.definition.name}`,
81
+ name: `[no-]${this.name}`,
64
82
  description: `${this.definition.description} (${this.definition.defaultValue ? "on" : "off"} by default)`
65
83
  });
66
84
  return {
@@ -69,11 +87,11 @@ class BooleanOption extends Option {
69
87
  };
70
88
  }
71
89
  getValue(values) {
72
- let value = values[this.definition.name];
90
+ let value = values[this.name];
73
91
  if (value === undefined) {
74
92
  value = this.definition.defaultValue;
75
93
  }
76
- let negated = values[`no-${this.definition.name}`];
94
+ let negated = values[`no-${this.name}`];
77
95
  if (negated === undefined) {
78
96
  negated = !this.definition.defaultValue;
79
97
  }
@@ -84,10 +102,10 @@ class BooleanOption extends Option {
84
102
  value = false;
85
103
  }
86
104
  if (this.definition.defaultValue) {
87
- return value && !negated;
105
+ return (value && !negated);
88
106
  }
89
107
  else {
90
- return value || !negated;
108
+ return (value || !negated);
91
109
  }
92
110
  }
93
111
  }
@@ -106,33 +124,27 @@ class StringOption extends Option {
106
124
  }
107
125
  }
108
126
  exports.StringOption = StringOption;
127
+ // FIXME: use const generics here
109
128
  class EnumOption extends Option {
110
- constructor(name, description, values, defaultValue = undefined, kind = "primary") {
111
- if (defaultValue === undefined) {
112
- defaultValue = values[0][0];
113
- }
129
+ constructor(name, description, values, defaultValue, kind = "primary") {
114
130
  const definition = {
115
131
  name,
116
132
  kind,
117
133
  type: String,
118
134
  description,
119
- typeLabel: values.map(([n, _]) => n).join("|"),
120
- legalValues: values.map(([n, _]) => n),
135
+ typeLabel: Object.keys(values).join("|"),
121
136
  defaultValue
122
137
  };
123
138
  super(definition);
124
- this._values = {};
125
- for (const [n, v] of values) {
126
- this._values[n] = v;
127
- }
139
+ this._values = values;
128
140
  }
129
- getValue(values) {
130
- let name = values[this.definition.name];
131
- if (name === undefined) {
132
- name = this.definition.defaultValue;
141
+ getEnumValue(name) {
142
+ if (!name) {
143
+ const defaultKey = this.definition.defaultValue;
144
+ return this._values[defaultKey];
133
145
  }
134
- if (!(0, collection_utils_1.hasOwnProperty)(this._values, name)) {
135
- return (0, Messages_1.messageError)("RendererUnknownOptionValue", { value: name, name: this.definition.name });
146
+ if (!(name in this._values)) {
147
+ return (0, Messages_1.messageError)("RendererUnknownOptionValue", { value: name, name: this.name });
136
148
  }
137
149
  return this._values[name];
138
150
  }
@@ -0,0 +1,26 @@
1
+ import type { EnumOption, Option } from "./index";
2
+ /**
3
+ * Primary options show up in the web UI in the "Language" settings tab,
4
+ * secondary options in "Other".
5
+ */
6
+ export type OptionKind = "primary" | "secondary";
7
+ export interface OptionDefinition<Name extends string = string, T = unknown> {
8
+ alias?: string;
9
+ defaultOption?: boolean;
10
+ defaultValue?: T;
11
+ description: string;
12
+ kind?: OptionKind;
13
+ multiple?: boolean;
14
+ name: Name;
15
+ type: StringConstructor | BooleanConstructor;
16
+ typeLabel?: string;
17
+ }
18
+ export type OptionName<O> = O extends Option<infer Name, unknown> ? Name : never;
19
+ export type OptionValue<O> = O extends EnumOption<string, infer EnumMap, infer EnumKey> ? EnumMap[EnumKey] : O extends Option<string, infer Value> ? Value : never;
20
+ export type OptionKey<O> = O extends EnumOption<string, Record<string, unknown>, infer EnumKey> ? EnumKey : O;
21
+ export type OptionMap<T> = {
22
+ [K in keyof T as OptionName<T[K]>]: OptionKey<T[K]>;
23
+ };
24
+ export type OptionValues<T> = {
25
+ [K in keyof T]: OptionValue<T[K]>;
26
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/Run.d.ts CHANGED
@@ -1,13 +1,12 @@
1
1
  import { InputData } from "./input/Inputs";
2
+ import type { RendererOptions } from "./language/options.types";
3
+ import type { LanguageName } from "./language/types";
2
4
  import { type SerializedRenderResult } from "./Source";
3
5
  import { type Comment } from "./support/Comments";
4
6
  import { type MultiFileRenderResult, type TargetLanguage } from "./TargetLanguage";
5
7
  import { type TransformedStringTypeKind } from "./Type";
6
8
  import { type StringTypeMapping } from "./TypeBuilder";
7
- export declare function getTargetLanguage(nameOrInstance: string | TargetLanguage): TargetLanguage;
8
- export interface RendererOptions {
9
- [name: string]: string | boolean;
10
- }
9
+ export declare function getTargetLanguage(nameOrInstance: LanguageName | TargetLanguage): TargetLanguage;
11
10
  export interface InferenceFlag {
12
11
  description: string;
13
12
  explanation: string;
@@ -89,7 +88,7 @@ export type InferenceFlags = {
89
88
  * The options type for the main quicktype entry points,
90
89
  * `quicktypeMultiFile` and `quicktype`.
91
90
  */
92
- export interface NonInferenceOptions {
91
+ export interface NonInferenceOptions<Lang extends LanguageName = LanguageName> {
93
92
  /** Make all class property optional */
94
93
  allPropertiesOptional: boolean;
95
94
  /** Put class properties in alphabetical order, instead of in the order found in the JSON */
@@ -128,7 +127,7 @@ export interface NonInferenceOptions {
128
127
  * or a string specifying one of the names for quicktype's built-in target languages. For example,
129
128
  * both `cs` and `csharp` will generate C#.
130
129
  */
131
- lang: string | TargetLanguage;
130
+ lang: Lang | TargetLanguage;
132
131
  /** If given, output these comments at the beginning of the main output file */
133
132
  leadingComments?: Comment[];
134
133
  /** Don't render output. This is mainly useful for benchmarking. */
@@ -138,7 +137,7 @@ export interface NonInferenceOptions {
138
137
  */
139
138
  outputFilename: string;
140
139
  /** Options for the target language's renderer */
141
- rendererOptions: RendererOptions;
140
+ rendererOptions: RendererOptions<Lang>;
142
141
  }
143
142
  export type Options = NonInferenceOptions & InferenceFlags;
144
143
  export interface RunContext {
@@ -6,20 +6,25 @@ import { type Comment } from "./support/Comments";
6
6
  import { type Type } from "./Type";
7
7
  import { type StringTypeMapping } from "./TypeBuilder";
8
8
  import { type TypeGraph } from "./TypeGraph";
9
- import { type FixMeOptionsAnyType, type FixMeOptionsType } from "./types";
9
+ import { type FixMeOptionsType } from "./types";
10
10
  export type MultiFileRenderResult = ReadonlyMap<string, SerializedRenderResult>;
11
- export declare abstract class TargetLanguage {
11
+ export interface LanguageConfig {
12
12
  readonly displayName: string;
13
- readonly names: string[];
14
13
  readonly extension: string;
15
- constructor(displayName: string, names: string[], extension: string);
16
- protected abstract getOptions(): Array<Option<FixMeOptionsAnyType>>;
17
- get optionDefinitions(): OptionDefinition[];
14
+ readonly names: readonly string[];
15
+ }
16
+ export declare abstract class TargetLanguage<Config extends LanguageConfig = LanguageConfig> {
17
+ readonly displayName: Config["displayName"];
18
+ readonly names: Config["names"];
19
+ readonly extension: Config["extension"];
20
+ constructor({ displayName, names, extension }: Config);
21
+ protected abstract getOptions(): Record<string, Option<string, unknown>>;
22
+ get optionDefinitions(): Array<OptionDefinition<string, unknown>>;
18
23
  get cliOptionDefinitions(): {
19
- actual: OptionDefinition[];
20
- display: OptionDefinition[];
24
+ actual: Array<OptionDefinition<string, unknown>>;
25
+ display: Array<OptionDefinition<string, unknown>>;
21
26
  };
22
- get name(): string;
27
+ get name(): (typeof this.names)[0];
23
28
  protected abstract makeRenderer(renderContext: RenderContext, optionValues: FixMeOptionsType): Renderer;
24
29
  renderGraphAndSerialize(typeGraph: TypeGraph, givenOutputFilename: string, alphabetizeProperties: boolean, leadingComments: Comment[] | undefined, rendererOptions: FixMeOptionsType, indentation?: string): MultiFileRenderResult;
25
30
  protected get defaultIndentation(): string;
@@ -7,18 +7,18 @@ const DateTime_1 = require("./DateTime");
7
7
  const Source_1 = require("./Source");
8
8
  const Support_1 = require("./support/Support");
9
9
  class TargetLanguage {
10
- constructor(displayName, names, extension) {
10
+ constructor({ displayName, names, extension }) {
11
11
  this.displayName = displayName;
12
12
  this.names = names;
13
13
  this.extension = extension;
14
14
  }
15
15
  get optionDefinitions() {
16
- return this.getOptions().map(o => o.definition);
16
+ return Object.values(this.getOptions()).map(o => o.definition);
17
17
  }
18
18
  get cliOptionDefinitions() {
19
19
  let actual = [];
20
20
  let display = [];
21
- for (const { cliDefinitions } of this.getOptions()) {
21
+ for (const { cliDefinitions } of Object.values(this.getOptions())) {
22
22
  actual = actual.concat(cliDefinitions.actual);
23
23
  display = display.concat(cliDefinitions.display);
24
24
  }
@@ -1,6 +1,6 @@
1
+ import { type StringTypes } from "./attributes/StringTypes";
1
2
  import { type CombinationKind, type TypeAttributes } from "./attributes/TypeAttributes";
2
3
  import { ArrayType, type ClassProperty, ClassType, EnumType, MapType, ObjectType, type PrimitiveType, type SetOperationType, type Type, UnionType } from "./Type";
3
- import { type StringTypes } from "./attributes/StringTypes";
4
4
  export declare function assertIsObject(t: Type): ObjectType;
5
5
  export declare function assertIsClass(t: Type): ClassType;
6
6
  export declare function setOperationMembersRecursively<T extends SetOperationType>(setOperations: T | T[], combinationKind: CombinationKind | undefined): [ReadonlySet<Type>, TypeAttributes];
package/dist/TypeUtils.js CHANGED
@@ -2,13 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchCompoundType = exports.matchType = exports.matchTypeExhaustive = exports.stringTypesForType = exports.directlyReachableSingleNamedType = exports.directlyReachableTypes = exports.separateNamedTypes = exports.isNamedType = exports.getNullAsOptional = exports.nonNullTypeCases = exports.nullableFromUnion = exports.removeNullFromType = exports.removeNullFromUnion = exports.isAnyOrNull = exports.combineTypeAttributesOfTypes = exports.makeGroupsToFlatten = exports.setOperationMembersRecursively = exports.assertIsClass = exports.assertIsObject = void 0;
4
4
  const collection_utils_1 = require("collection-utils");
5
+ // eslint-disable-next-line import/no-cycle
6
+ const StringTypes_1 = require("./attributes/StringTypes");
5
7
  const TypeAttributes_1 = require("./attributes/TypeAttributes");
6
8
  const Support_1 = require("./support/Support");
7
- // eslint-disable-next-line import/no-cycle
8
9
  const Type_1 = require("./Type");
9
- // String types should be imported last to avoid circular dependency issues.
10
- // eslint-disable-next-line import/order
11
- const StringTypes_1 = require("./attributes/StringTypes");
12
10
  function assertIsObject(t) {
13
11
  if (t instanceof Type_1.ObjectType) {
14
12
  return t;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type Options, type RendererOptions, getTargetLanguage, quicktypeMultiFile, quicktypeMultiFileSync, quicktype, combineRenderResults, inferenceFlags, inferenceFlagNames, defaultInferenceFlags, inferenceFlagsObject, type InferenceFlags, type InferenceFlagName, type RunContext } from "./Run";
1
+ export { type Options, getTargetLanguage, quicktypeMultiFile, quicktypeMultiFileSync, quicktype, combineRenderResults, inferenceFlags, inferenceFlagNames, defaultInferenceFlags, inferenceFlagsObject, type InferenceFlags, type InferenceFlagName, type RunContext } from "./Run";
2
2
  export { CompressedJSON, type Value } from "./input/CompressedJSON";
3
3
  export { type Input, InputData, JSONInput, type JSONSourceData, jsonInputForTargetLanguage } from "./input/Inputs";
4
4
  export { JSONSchemaInput, type JSONSchemaSourceData } from "./input/JSONSchemaInput";
@@ -6,7 +6,6 @@ export { Ref, type JSONSchemaType, type JSONSchemaAttributes } from "./input/JSO
6
6
  export type { RenderContext } from "./Renderer";
7
7
  export { Option, type OptionDefinition, getOptionValues, type OptionValues } from "./RendererOptions";
8
8
  export { TargetLanguage, type MultiFileRenderResult } from "./TargetLanguage";
9
- export { all as defaultTargetLanguages, languageNamed } from "./language/All";
10
9
  export { type MultiWord, type Sourcelike, type SerializedRenderResult, type Annotation, modifySource, singleWord, parenIfNeeded } from "./Source";
11
10
  export { Name, funPrefixNamer, Namer } from "./Naming";
12
11
  export { IssueAnnotationData } from "./Annotation";
package/dist/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ClassType = exports.ArrayType = exports.PrimitiveType = exports.Type = exports.messageAssert = exports.messageError = exports.QuickTypeError = exports.trainMarkovChain = exports.isLetterOrDigit = exports.legalizeCharacters = exports.allUpperWordStyle = exports.firstUpperWordStyle = exports.combineWords = exports.capitalize = exports.splitIntoWords = exports.inflateBase64 = exports.checkArray = exports.checkStringMap = exports.parseJSON = exports.assertNever = exports.defined = exports.assert = exports.panic = exports.IssueAnnotationData = exports.Namer = exports.funPrefixNamer = exports.Name = exports.parenIfNeeded = exports.singleWord = exports.modifySource = exports.languageNamed = exports.defaultTargetLanguages = exports.TargetLanguage = exports.getOptionValues = exports.Option = exports.Ref = exports.JSONSchemaInput = exports.jsonInputForTargetLanguage = exports.JSONInput = exports.InputData = exports.CompressedJSON = exports.inferenceFlagsObject = exports.defaultInferenceFlags = exports.inferenceFlagNames = exports.inferenceFlags = exports.combineRenderResults = exports.quicktype = exports.quicktypeMultiFileSync = exports.quicktypeMultiFile = exports.getTargetLanguage = void 0;
18
- exports.uriTypeAttributeKind = exports.ConvenienceRenderer = exports.nullableFromUnion = exports.matchType = exports.removeNullFromUnion = exports.StringTypes = exports.namesTypeAttributeKind = exports.makeNamesTypeAttributes = exports.TypeNames = exports.emptyTypeAttributes = exports.TypeAttributeKind = exports.derefTypeRef = exports.TypeBuilder = exports.sourcesFromPostmanCollection = exports.JSONSchemaStore = exports.FetchingJSONSchemaStore = exports.readFromFileOrURL = exports.readableFromFileOrURL = exports.getStream = exports.ObjectType = exports.UnionType = exports.MapType = exports.EnumType = exports.ClassProperty = void 0;
17
+ exports.EnumType = exports.ClassProperty = exports.ClassType = exports.ArrayType = exports.PrimitiveType = exports.Type = exports.messageAssert = exports.messageError = exports.QuickTypeError = exports.trainMarkovChain = exports.isLetterOrDigit = exports.legalizeCharacters = exports.allUpperWordStyle = exports.firstUpperWordStyle = exports.combineWords = exports.capitalize = exports.splitIntoWords = exports.inflateBase64 = exports.checkArray = exports.checkStringMap = exports.parseJSON = exports.assertNever = exports.defined = exports.assert = exports.panic = exports.IssueAnnotationData = exports.Namer = exports.funPrefixNamer = exports.Name = exports.parenIfNeeded = exports.singleWord = exports.modifySource = exports.TargetLanguage = exports.getOptionValues = exports.Option = exports.Ref = exports.JSONSchemaInput = exports.jsonInputForTargetLanguage = exports.JSONInput = exports.InputData = exports.CompressedJSON = exports.inferenceFlagsObject = exports.defaultInferenceFlags = exports.inferenceFlagNames = exports.inferenceFlags = exports.combineRenderResults = exports.quicktype = exports.quicktypeMultiFileSync = exports.quicktypeMultiFile = exports.getTargetLanguage = void 0;
18
+ exports.uriTypeAttributeKind = exports.ConvenienceRenderer = exports.nullableFromUnion = exports.matchType = exports.removeNullFromUnion = exports.StringTypes = exports.namesTypeAttributeKind = exports.makeNamesTypeAttributes = exports.TypeNames = exports.emptyTypeAttributes = exports.TypeAttributeKind = exports.derefTypeRef = exports.TypeBuilder = exports.sourcesFromPostmanCollection = exports.JSONSchemaStore = exports.FetchingJSONSchemaStore = exports.readFromFileOrURL = exports.readableFromFileOrURL = exports.getStream = exports.ObjectType = exports.UnionType = exports.MapType = void 0;
19
19
  var Run_1 = require("./Run");
20
20
  Object.defineProperty(exports, "getTargetLanguage", { enumerable: true, get: function () { return Run_1.getTargetLanguage; } });
21
21
  Object.defineProperty(exports, "quicktypeMultiFile", { enumerable: true, get: function () { return Run_1.quicktypeMultiFile; } });
@@ -41,9 +41,6 @@ Object.defineProperty(exports, "Option", { enumerable: true, get: function () {
41
41
  Object.defineProperty(exports, "getOptionValues", { enumerable: true, get: function () { return RendererOptions_1.getOptionValues; } });
42
42
  var TargetLanguage_1 = require("./TargetLanguage");
43
43
  Object.defineProperty(exports, "TargetLanguage", { enumerable: true, get: function () { return TargetLanguage_1.TargetLanguage; } });
44
- var All_1 = require("./language/All");
45
- Object.defineProperty(exports, "defaultTargetLanguages", { enumerable: true, get: function () { return All_1.all; } });
46
- Object.defineProperty(exports, "languageNamed", { enumerable: true, get: function () { return All_1.languageNamed; } });
47
44
  var Source_1 = require("./Source");
48
45
  Object.defineProperty(exports, "modifySource", { enumerable: true, get: function () { return Source_1.modifySource; } });
49
46
  Object.defineProperty(exports, "singleWord", { enumerable: true, get: function () { return Source_1.singleWord; } });
@@ -1,6 +1,7 @@
1
1
  import { type RunContext } from "../Run";
2
2
  import { type TargetLanguage } from "../TargetLanguage";
3
3
  import { type TypeBuilder } from "../TypeBuilder";
4
+ import { type LanguageName } from "../types";
4
5
  import { type CompressedJSON } from "./CompressedJSON";
5
6
  export interface Input<T> {
6
7
  addSource: (source: T) => Promise<void>;
@@ -33,7 +34,7 @@ export declare class JSONInput<T> implements Input<JSONSourceData<T>> {
33
34
  addTypes(ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean): Promise<void>;
34
35
  addTypesSync(_ctx: RunContext, typeBuilder: TypeBuilder, inferMaps: boolean, inferEnums: boolean, fixedTopLevels: boolean): void;
35
36
  }
36
- export declare function jsonInputForTargetLanguage(targetLanguage: string | TargetLanguage, languages?: TargetLanguage[], handleJSONRefs?: boolean): JSONInput<string>;
37
+ export declare function jsonInputForTargetLanguage(targetLanguage: LanguageName | TargetLanguage, languages?: TargetLanguage[], handleJSONRefs?: boolean): JSONInput<string>;
37
38
  export declare class InputData {
38
39
  private _inputs;
39
40
  addInput<T>(input: Input<T>): void;
@@ -1,3 +1,32 @@
1
1
  import { type TargetLanguage } from "../TargetLanguage";
2
- export declare const all: TargetLanguage[];
3
- export declare function languageNamed(name: string, targetLanguages?: TargetLanguage[]): TargetLanguage | undefined;
2
+ import { CJSONTargetLanguage } from "./CJSON";
3
+ import { CPlusPlusTargetLanguage } from "./CPlusPlus";
4
+ import { CrystalTargetLanguage } from "./Crystal";
5
+ import { CSharpTargetLanguage } from "./CSharp";
6
+ import { DartTargetLanguage } from "./Dart";
7
+ import { ElixirTargetLanguage } from "./Elixir";
8
+ import { ElmTargetLanguage } from "./Elm";
9
+ import { GoTargetLanguage } from "./Golang";
10
+ import { HaskellTargetLanguage } from "./Haskell";
11
+ import { JavaTargetLanguage } from "./Java";
12
+ import { JavaScriptTargetLanguage } from "./JavaScript";
13
+ import { JavaScriptPropTypesTargetLanguage } from "./JavaScriptPropTypes";
14
+ import { JSONSchemaTargetLanguage } from "./JSONSchema";
15
+ import { KotlinTargetLanguage } from "./Kotlin";
16
+ import { ObjectiveCTargetLanguage } from "./Objective-C";
17
+ import { PhpTargetLanguage } from "./Php";
18
+ import { PikeTargetLanguage } from "./Pike";
19
+ import { PythonTargetLanguage } from "./Python";
20
+ import { RubyTargetLanguage } from "./Ruby";
21
+ import { RustTargetLanguage } from "./Rust";
22
+ import { Scala3TargetLanguage } from "./Scala3";
23
+ import { SmithyTargetLanguage } from "./Smithy4s";
24
+ import { SwiftTargetLanguage } from "./Swift";
25
+ import { type LanguageDisplayName, type LanguageName, type LanguageNameMap } from "./types";
26
+ import { TypeScriptEffectSchemaTargetLanguage } from "./TypeScriptEffectSchema";
27
+ import { FlowTargetLanguage, TypeScriptTargetLanguage } from "./TypeScriptFlow";
28
+ import { TypeScriptZodTargetLanguage } from "./TypeScriptZod";
29
+ export declare const all: readonly [CJSONTargetLanguage, CPlusPlusTargetLanguage, CrystalTargetLanguage, CSharpTargetLanguage, DartTargetLanguage, ElixirTargetLanguage, ElmTargetLanguage, FlowTargetLanguage, GoTargetLanguage, HaskellTargetLanguage, JavaTargetLanguage, JavaScriptTargetLanguage, JavaScriptPropTypesTargetLanguage, JSONSchemaTargetLanguage, KotlinTargetLanguage, ObjectiveCTargetLanguage, PhpTargetLanguage, PikeTargetLanguage, PythonTargetLanguage, RubyTargetLanguage, RustTargetLanguage, Scala3TargetLanguage, SmithyTargetLanguage, SwiftTargetLanguage, TypeScriptTargetLanguage, TypeScriptEffectSchemaTargetLanguage, TypeScriptZodTargetLanguage];
30
+ export declare function languageNamed<Name extends LanguageName>(name: Name, targetLanguages?: readonly TargetLanguage[]): LanguageNameMap[Name];
31
+ export declare function isLanguageName(maybeName: string): maybeName is LanguageName;
32
+ export declare function isLanguageDisplayName(maybeName: string): maybeName is LanguageDisplayName;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.languageNamed = exports.all = void 0;
4
- const collection_utils_1 = require("collection-utils");
3
+ exports.isLanguageDisplayName = exports.isLanguageName = exports.languageNamed = exports.all = void 0;
5
4
  const CJSON_1 = require("./CJSON");
6
5
  const CPlusPlus_1 = require("./CPlusPlus");
7
6
  const Crystal_1 = require("./Crystal");
@@ -47,7 +46,7 @@ exports.all = [
47
46
  new Objective_C_1.ObjectiveCTargetLanguage(),
48
47
  new Php_1.PhpTargetLanguage(),
49
48
  new Pike_1.PikeTargetLanguage(),
50
- new Python_1.PythonTargetLanguage("Python", ["python", "py"], "py"),
49
+ new Python_1.PythonTargetLanguage(),
51
50
  new Ruby_1.RubyTargetLanguage(),
52
51
  new Rust_1.RustTargetLanguage(),
53
52
  new Scala3_1.Scala3TargetLanguage(),
@@ -57,13 +56,26 @@ exports.all = [
57
56
  new TypeScriptEffectSchema_1.TypeScriptEffectSchemaTargetLanguage(),
58
57
  new TypeScriptZod_1.TypeScriptZodTargetLanguage()
59
58
  ];
60
- function languageNamed(name, targetLanguages) {
61
- if (targetLanguages === undefined) {
62
- targetLanguages = exports.all;
59
+ exports.all;
60
+ function languageNamed(name, targetLanguages = exports.all) {
61
+ const foundLanguage = targetLanguages.find(language => language.names.includes(name));
62
+ if (!foundLanguage) {
63
+ throw new Error(`Unknown language name: ${name}`);
63
64
  }
64
- const maybeTargetLanguage = (0, collection_utils_1.iterableFind)(targetLanguages, l => l.names.includes(name) || l.displayName === name);
65
- if (maybeTargetLanguage !== undefined)
66
- return maybeTargetLanguage;
67
- return (0, collection_utils_1.iterableFind)(targetLanguages, l => l.extension === name);
65
+ return foundLanguage;
68
66
  }
69
67
  exports.languageNamed = languageNamed;
68
+ function isLanguageName(maybeName) {
69
+ if (exports.all.some(lang => lang.names.includes(maybeName))) {
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+ exports.isLanguageName = isLanguageName;
75
+ function isLanguageDisplayName(maybeName) {
76
+ if (exports.all.some(lang => lang.displayName === maybeName)) {
77
+ return true;
78
+ }
79
+ return false;
80
+ }
81
+ exports.isLanguageDisplayName = isLanguageDisplayName;