typia 7.0.0-dev.20240924 → 7.0.0-dev.20240929

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 (57) hide show
  1. package/lib/factories/internal/metadata/emplace_metadata_object.js +2 -1
  2. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  3. package/lib/index.mjs +1 -0
  4. package/lib/index.mjs.map +1 -1
  5. package/lib/programmers/AssertProgrammer.d.ts +1 -1
  6. package/lib/programmers/AssertProgrammer.js +169 -127
  7. package/lib/programmers/AssertProgrammer.js.map +1 -1
  8. package/lib/programmers/CheckerProgrammer.d.ts +70 -15
  9. package/lib/programmers/CheckerProgrammer.js +998 -638
  10. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  11. package/lib/programmers/FeatureProgrammer.d.ts +5 -1
  12. package/lib/programmers/FeatureProgrammer.js +15 -15
  13. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  14. package/lib/programmers/IsProgrammer.d.ts +25 -4
  15. package/lib/programmers/IsProgrammer.js +54 -39
  16. package/lib/programmers/IsProgrammer.js.map +1 -1
  17. package/lib/programmers/ValidateProgrammer.js +110 -97
  18. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  19. package/lib/programmers/helpers/UnionExplorer.d.ts +1 -1
  20. package/lib/programmers/json/JsonStringifyProgrammer.js +68 -35
  21. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  22. package/lib/programmers/llm/LlmApplicationProgrammer.js +16 -2
  23. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  24. package/lib/programmers/misc/MiscCloneProgrammer.js +62 -15
  25. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  26. package/lib/programmers/misc/MiscPruneProgrammer.js +39 -11
  27. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  28. package/lib/programmers/notations/NotationGeneralProgrammer.js +62 -15
  29. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  30. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +17 -3
  31. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  32. package/lib/tags/Example.d.ts +14 -0
  33. package/lib/tags/Example.js +3 -0
  34. package/lib/tags/Example.js.map +1 -0
  35. package/lib/tags/Examples.d.ts +10 -0
  36. package/lib/tags/Examples.js +3 -0
  37. package/lib/tags/Examples.js.map +1 -0
  38. package/lib/tags/index.d.ts +2 -0
  39. package/lib/tags/index.js +2 -0
  40. package/lib/tags/index.js.map +1 -1
  41. package/package.json +2 -2
  42. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -1
  43. package/src/programmers/AssertProgrammer.ts +185 -143
  44. package/src/programmers/CheckerProgrammer.ts +1380 -998
  45. package/src/programmers/FeatureProgrammer.ts +37 -31
  46. package/src/programmers/IsProgrammer.ts +94 -66
  47. package/src/programmers/ValidateProgrammer.ts +149 -137
  48. package/src/programmers/helpers/UnionExplorer.ts +1 -1
  49. package/src/programmers/json/JsonStringifyProgrammer.ts +56 -35
  50. package/src/programmers/llm/LlmApplicationProgrammer.ts +51 -32
  51. package/src/programmers/misc/MiscCloneProgrammer.ts +64 -26
  52. package/src/programmers/misc/MiscPruneProgrammer.ts +34 -13
  53. package/src/programmers/notations/NotationGeneralProgrammer.ts +64 -26
  54. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +16 -9
  55. package/src/tags/Example.ts +17 -0
  56. package/src/tags/Examples.ts +16 -0
  57. package/src/tags/index.ts +20 -18
@@ -47,9 +47,11 @@ export namespace JsonStringifyProgrammer {
47
47
  const config: FeatureProgrammer.IConfig = configure(props);
48
48
  if (props.validated === false)
49
49
  config.addition = (collection) =>
50
- IsProgrammer.write_function_statements(props.context)(props.importer)(
50
+ IsProgrammer.write_function_statements({
51
+ context: props.context,
52
+ importer: props.importer,
51
53
  collection,
52
- );
54
+ });
53
55
  const composed: FeatureProgrammer.IComposed = FeatureProgrammer.compose({
54
56
  ...props,
55
57
  config,
@@ -231,7 +233,11 @@ export namespace JsonStringifyProgrammer {
231
233
  props.metadata.escaped.original.size() === 1 &&
232
234
  props.metadata.escaped.original.natives[0] === "Date"
233
235
  ? () => check_native("Date")(props.input)
234
- : () => IsProgrammer.decode_to_json(false)(props.input),
236
+ : () =>
237
+ IsProgrammer.decode_to_json({
238
+ checkNull: false,
239
+ input: props.input,
240
+ }),
235
241
  value: () =>
236
242
  decode_to_json({
237
243
  ...props,
@@ -255,11 +261,10 @@ export namespace JsonStringifyProgrammer {
255
261
  unions.push({
256
262
  type: "template literal",
257
263
  is: () =>
258
- IsProgrammer.decode(props.context)(props.importer)(
259
- props.input,
260
- partial,
261
- props.explore,
262
- ),
264
+ IsProgrammer.decode({
265
+ ...props,
266
+ metadata: partial,
267
+ }),
263
268
  value: () =>
264
269
  decode_atomic({
265
270
  ...props,
@@ -281,9 +286,9 @@ export namespace JsonStringifyProgrammer {
281
286
  unions.push({
282
287
  type: "atomic",
283
288
  is: () =>
284
- IsProgrammer.decode(props.context)(props.importer)(
285
- props.input,
286
- (() => {
289
+ IsProgrammer.decode({
290
+ ...props,
291
+ metadata: (() => {
287
292
  const partial = Metadata.initialize();
288
293
  partial.atomics.push(
289
294
  MetadataAtomic.create({
@@ -293,8 +298,7 @@ export namespace JsonStringifyProgrammer {
293
298
  );
294
299
  return partial;
295
300
  })(),
296
- props.explore,
297
- ),
301
+ }),
298
302
  value: () =>
299
303
  decode_atomic({
300
304
  ...props,
@@ -305,9 +309,9 @@ export namespace JsonStringifyProgrammer {
305
309
  unions.push({
306
310
  type: "const string",
307
311
  is: () =>
308
- IsProgrammer.decode(props.context)(props.importer)(
309
- props.input,
310
- (() => {
312
+ IsProgrammer.decode({
313
+ ...props,
314
+ metadata: (() => {
311
315
  const partial = Metadata.initialize();
312
316
  partial.atomics.push(
313
317
  MetadataAtomic.create({
@@ -317,8 +321,7 @@ export namespace JsonStringifyProgrammer {
317
321
  );
318
322
  return partial;
319
323
  })(),
320
- props.explore,
321
- ),
324
+ }),
322
325
  value: () =>
323
326
  decode_constant_string({
324
327
  ...props,
@@ -337,15 +340,14 @@ export namespace JsonStringifyProgrammer {
337
340
  unions.push({
338
341
  type: "atomic",
339
342
  is: () =>
340
- IsProgrammer.decode(props.context)(props.importer)(
341
- props.input,
342
- (() => {
343
+ IsProgrammer.decode({
344
+ ...props,
345
+ metadata: (() => {
343
346
  const partial = Metadata.initialize();
344
347
  partial.atomics.push(a);
345
348
  return partial;
346
349
  })(),
347
- props.explore,
348
- ),
350
+ }),
349
351
  value: () =>
350
352
  decode_atomic({
351
353
  ...props,
@@ -358,15 +360,14 @@ export namespace JsonStringifyProgrammer {
358
360
  unions.push({
359
361
  type: "tuple",
360
362
  is: () =>
361
- IsProgrammer.decode(props.context)(props.importer)(
362
- props.input,
363
- (() => {
363
+ IsProgrammer.decode({
364
+ ...props,
365
+ metadata: (() => {
364
366
  const partial = Metadata.initialize();
365
367
  partial.tuples.push(tuple);
366
368
  return partial;
367
369
  })(),
368
- props.explore,
369
- ),
370
+ }),
370
371
  value: () =>
371
372
  decode_tuple({
372
373
  ...props,
@@ -755,7 +756,14 @@ export namespace JsonStringifyProgrammer {
755
756
  elements: props.arrays,
756
757
  factory: (next) =>
757
758
  UnionExplorer.array({
758
- checker: IsProgrammer.decode(props.context)(props.importer),
759
+ checker: (input, metadata, explore) =>
760
+ IsProgrammer.decode({
761
+ context: props.context,
762
+ importer: props.importer,
763
+ metadata,
764
+ input,
765
+ explore,
766
+ }),
759
767
  decoder: (input, array, explore) =>
760
768
  decode_array({
761
769
  config: props.config,
@@ -812,7 +820,7 @@ export namespace JsonStringifyProgrammer {
812
820
  [],
813
821
  );
814
822
 
815
- const explore: FeatureProgrammer.IExplore = {
823
+ const arrayExplore: FeatureProgrammer.IExplore = {
816
824
  ...props.explore,
817
825
  source: "function",
818
826
  from: "array",
@@ -828,7 +836,7 @@ export namespace JsonStringifyProgrammer {
828
836
  TypeFactory.keyword("any"),
829
837
  )(ts.factory.createIdentifier("input")),
830
838
  explore: {
831
- ...explore,
839
+ ...arrayExplore,
832
840
  postfix: "",
833
841
  },
834
842
  input: ts.factory.createIdentifier("input"),
@@ -836,7 +844,7 @@ export namespace JsonStringifyProgrammer {
836
844
  ),
837
845
  ),
838
846
  undefined,
839
- FeatureProgrammer.argumentsArray(props.config)(explore)(props.input),
847
+ FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
840
848
  );
841
849
  };
842
850
 
@@ -949,7 +957,14 @@ export namespace JsonStringifyProgrammer {
949
957
  explore,
950
958
  }),
951
959
  objector: {
952
- checker: () => IsProgrammer.decode(props.context)(props.importer),
960
+ checker: () => (input, metadata, explore) =>
961
+ IsProgrammer.decode({
962
+ context: props.context,
963
+ importer: props.importer,
964
+ metadata,
965
+ input,
966
+ explore,
967
+ }),
953
968
  decoder: () => (input, object, explore) =>
954
969
  decode_object({
955
970
  importer: props.importer,
@@ -962,8 +977,14 @@ export namespace JsonStringifyProgrammer {
962
977
  ...next,
963
978
  importer: props.importer,
964
979
  }),
965
- unionizer: decode_union_object(
966
- IsProgrammer.decode_object(props.context)(props.importer),
980
+ unionizer: decode_union_object((input, object, explore) =>
981
+ IsProgrammer.decode_object({
982
+ context: props.context,
983
+ importer: props.importer,
984
+ input,
985
+ object,
986
+ explore,
987
+ }),
967
988
  )((input, object, explore) =>
968
989
  decode_object({
969
990
  importer: props.importer,
@@ -104,38 +104,57 @@ export namespace LlmApplicationProgrammer {
104
104
  function: MetadataFunction;
105
105
  description: string | null;
106
106
  jsDocTags: IJsDocTagInfo[];
107
- }): ILlmFunction => ({
108
- name: props.name,
109
- parameters: props.function.parameters.map((p) => {
110
- const jsDocTagDescription = writeDescriptionFromJsDocTag({
111
- jsDocTags: p.jsDocTags,
112
- tag: "param",
113
- parameter: p.name,
114
- });
115
- return writeSchema({
116
- metadata: p.type,
117
- description: jsDocTagDescription ?? p.description,
118
- jsDocTags: jsDocTagDescription ? [] : p.jsDocTags,
119
- });
120
- }),
121
- output:
122
- props.function.output.size() || props.function.output.nullable
123
- ? writeSchema({
124
- metadata: props.function.output,
125
- description:
126
- writeDescriptionFromJsDocTag({
127
- jsDocTags: props.jsDocTags,
128
- tag: "return",
129
- }) ??
130
- writeDescriptionFromJsDocTag({
131
- jsDocTags: props.jsDocTags,
132
- tag: "returns",
133
- }),
134
- jsDocTags: [],
135
- })
136
- : undefined,
137
- description: props.description ?? undefined,
138
- });
107
+ }): ILlmFunction => {
108
+ const deprecated: boolean = props.jsDocTags.some(
109
+ (tag) => tag.name === "deprecated",
110
+ );
111
+ const tags: string[] = props.jsDocTags
112
+ .map((tag) =>
113
+ tag.name === "tag"
114
+ ? (tag.text?.filter((elem) => elem.kind === "text") ?? [])
115
+ : [],
116
+ )
117
+ .flat()
118
+ .map((elem) => elem.text)
119
+ .map((str) => str.trim().split(" ")[0] ?? "")
120
+ .filter((str) => !!str.length);
121
+ return {
122
+ name: props.name,
123
+ parameters: props.function.parameters.map((p) => {
124
+ const jsDocTagDescription: string | null = writeDescriptionFromJsDocTag(
125
+ {
126
+ jsDocTags: p.jsDocTags,
127
+ tag: "param",
128
+ parameter: p.name,
129
+ },
130
+ );
131
+ return writeSchema({
132
+ metadata: p.type,
133
+ description: jsDocTagDescription ?? p.description,
134
+ jsDocTags: jsDocTagDescription ? [] : p.jsDocTags,
135
+ });
136
+ }),
137
+ output:
138
+ props.function.output.size() || props.function.output.nullable
139
+ ? writeSchema({
140
+ metadata: props.function.output,
141
+ description:
142
+ writeDescriptionFromJsDocTag({
143
+ jsDocTags: props.jsDocTags,
144
+ tag: "return",
145
+ }) ??
146
+ writeDescriptionFromJsDocTag({
147
+ jsDocTags: props.jsDocTags,
148
+ tag: "returns",
149
+ }),
150
+ jsDocTags: [],
151
+ })
152
+ : undefined,
153
+ description: props.description ?? undefined,
154
+ deprecated: deprecated || undefined,
155
+ tags: tags.length ? tags : undefined,
156
+ };
157
+ };
139
158
 
140
159
  const writeSchema = (props: {
141
160
  metadata: Metadata;
@@ -37,9 +37,11 @@ export namespace MiscCloneProgrammer {
37
37
  const config: FeatureProgrammer.IConfig = configure(props);
38
38
  if (props.validated === false)
39
39
  config.addition = (collection) =>
40
- IsProgrammer.write_function_statements(props.context)(props.importer)(
40
+ IsProgrammer.write_function_statements({
41
+ context: props.context,
42
+ importer: props.importer,
41
43
  collection,
42
- );
44
+ });
43
45
  const composed: FeatureProgrammer.IComposed = FeatureProgrammer.compose({
44
46
  ...props,
45
47
  config,
@@ -201,15 +203,14 @@ export namespace MiscCloneProgrammer {
201
203
  unions.push({
202
204
  type: "tuple",
203
205
  is: () =>
204
- IsProgrammer.decode(props.context)(props.importer)(
205
- props.input,
206
- (() => {
206
+ IsProgrammer.decode({
207
+ ...props,
208
+ metadata: (() => {
207
209
  const partial = Metadata.initialize();
208
210
  partial.tuples.push(tuple);
209
211
  return partial;
210
212
  })(),
211
- props.explore,
212
- ),
213
+ }),
213
214
  value: () =>
214
215
  decode_tuple({
215
216
  ...props,
@@ -557,7 +558,14 @@ export namespace MiscCloneProgrammer {
557
558
  }): ts.Expression =>
558
559
  ts.factory.createCallExpression(
559
560
  UnionExplorer.set({
560
- checker: IsProgrammer.decode(props.context)(props.importer),
561
+ checker: (input, metadata, explore) =>
562
+ IsProgrammer.decode({
563
+ context: props.context,
564
+ importer: props.importer,
565
+ input,
566
+ metadata,
567
+ explore,
568
+ }),
561
569
  decoder: (input, array, explore) =>
562
570
  ts.factory.createNewExpression(
563
571
  ts.factory.createIdentifier("Set"),
@@ -599,19 +607,29 @@ export namespace MiscCloneProgrammer {
599
607
  }): ts.Expression =>
600
608
  ts.factory.createCallExpression(
601
609
  UnionExplorer.map({
602
- checker: (top, entry, explore) => {
603
- const func = IsProgrammer.decode(props.context)(props.importer);
604
- return ts.factory.createLogicalAnd(
605
- func(ts.factory.createElementAccessExpression(top, 0), entry[0], {
606
- ...explore,
607
- postfix: `${explore.postfix}[0]`,
610
+ checker: (top, entry, explore) =>
611
+ ts.factory.createLogicalAnd(
612
+ IsProgrammer.decode({
613
+ context: props.context,
614
+ importer: props.importer,
615
+ input: ts.factory.createElementAccessExpression(top, 0),
616
+ metadata: entry[0],
617
+ explore: {
618
+ ...explore,
619
+ postfix: `${explore.postfix}[0]`,
620
+ },
608
621
  }),
609
- func(ts.factory.createElementAccessExpression(top, 1), entry[1], {
610
- ...explore,
611
- postfix: `${explore.postfix}[1]`,
622
+ IsProgrammer.decode({
623
+ context: props.context,
624
+ importer: props.importer,
625
+ input: ts.factory.createElementAccessExpression(top, 1),
626
+ metadata: entry[1],
627
+ explore: {
628
+ ...explore,
629
+ postfix: `${explore.postfix}[1]`,
630
+ },
612
631
  }),
613
- );
614
- },
632
+ ),
615
633
  decoder: (input, array, explore) =>
616
634
  ts.factory.createNewExpression(
617
635
  ts.factory.createIdentifier("Map"),
@@ -678,7 +696,14 @@ export namespace MiscCloneProgrammer {
678
696
  elements: props.arrays,
679
697
  factory: (next) =>
680
698
  UnionExplorer.array({
681
- checker: IsProgrammer.decode(props.context)(props.importer),
699
+ checker: (input, metadata, explore) =>
700
+ IsProgrammer.decode({
701
+ context: props.context,
702
+ importer: props.importer,
703
+ input,
704
+ metadata,
705
+ explore,
706
+ }),
682
707
  decoder: (input, array, explore) =>
683
708
  decode_array({
684
709
  config: props.config,
@@ -735,7 +760,7 @@ export namespace MiscCloneProgrammer {
735
760
  [],
736
761
  );
737
762
 
738
- const explore: FeatureProgrammer.IExplore = {
763
+ const arrayExplore: FeatureProgrammer.IExplore = {
739
764
  ...props.explore,
740
765
  source: "function",
741
766
  from: "array",
@@ -751,7 +776,7 @@ export namespace MiscCloneProgrammer {
751
776
  TypeFactory.keyword("any"),
752
777
  )(ts.factory.createIdentifier("input")),
753
778
  explore: {
754
- ...explore,
779
+ ...arrayExplore,
755
780
  postfix: "",
756
781
  },
757
782
  input: ts.factory.createIdentifier("input"),
@@ -759,7 +784,7 @@ export namespace MiscCloneProgrammer {
759
784
  ),
760
785
  ),
761
786
  undefined,
762
- FeatureProgrammer.argumentsArray(props.config)(explore)(props.input),
787
+ FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
763
788
  );
764
789
  };
765
790
 
@@ -807,7 +832,14 @@ export namespace MiscCloneProgrammer {
807
832
  explore,
808
833
  }),
809
834
  objector: {
810
- checker: () => IsProgrammer.decode(props.context)(props.importer),
835
+ checker: () => (input, metadata, explore) =>
836
+ IsProgrammer.decode({
837
+ context: props.context,
838
+ importer: props.importer,
839
+ input,
840
+ metadata,
841
+ explore,
842
+ }),
811
843
  decoder: () => (input, object, explore) =>
812
844
  decode_object({
813
845
  importer: props.importer,
@@ -816,8 +848,14 @@ export namespace MiscCloneProgrammer {
816
848
  explore,
817
849
  }),
818
850
  joiner: CloneJoiner.object,
819
- unionizer: decode_union_object(
820
- IsProgrammer.decode_object(props.context)(props.importer),
851
+ unionizer: decode_union_object((input, object, explore) =>
852
+ IsProgrammer.decode_object({
853
+ context: props.context,
854
+ importer: props.importer,
855
+ input,
856
+ object,
857
+ explore,
858
+ }),
821
859
  )((input, object, explore) =>
822
860
  decode_object({
823
861
  importer: props.importer,
@@ -37,9 +37,11 @@ export namespace MiscPruneProgrammer {
37
37
  const config = configure(props);
38
38
  if (props.validated === false)
39
39
  config.addition = (collection) =>
40
- IsProgrammer.write_function_statements(props.context)(props.importer)(
40
+ IsProgrammer.write_function_statements({
41
+ context: props.context,
42
+ importer: props.importer,
41
43
  collection,
42
- );
44
+ });
43
45
  const composed: FeatureProgrammer.IComposed = FeatureProgrammer.compose({
44
46
  ...props,
45
47
  config,
@@ -179,15 +181,14 @@ export namespace MiscPruneProgrammer {
179
181
  unions.push({
180
182
  type: "tuple",
181
183
  is: () =>
182
- IsProgrammer.decode(props.context)(props.importer)(
183
- props.input,
184
- (() => {
184
+ IsProgrammer.decode({
185
+ ...props,
186
+ metadata: (() => {
185
187
  const partial = Metadata.initialize();
186
188
  partial.tuples.push(tuple);
187
189
  return partial;
188
190
  })(),
189
- props.explore,
190
- ),
191
+ }),
191
192
  value: () =>
192
193
  decode_tuple({
193
194
  ...props,
@@ -433,7 +434,14 @@ export namespace MiscPruneProgrammer {
433
434
  elements: props.arrays,
434
435
  factory: (next) =>
435
436
  UnionExplorer.array({
436
- checker: IsProgrammer.decode(props.context)(props.importer),
437
+ checker: (input, metadata, explore) =>
438
+ IsProgrammer.decode({
439
+ context: props.context,
440
+ importer: props.importer,
441
+ metadata,
442
+ input,
443
+ explore,
444
+ }),
437
445
  decoder: (input, array, explore) =>
438
446
  decode_array({
439
447
  config: props.config,
@@ -490,7 +498,7 @@ export namespace MiscPruneProgrammer {
490
498
  [],
491
499
  );
492
500
 
493
- const explore: FeatureProgrammer.IExplore = {
501
+ const arrayExplore: FeatureProgrammer.IExplore = {
494
502
  ...props.explore,
495
503
  source: "function",
496
504
  from: "array",
@@ -506,7 +514,7 @@ export namespace MiscPruneProgrammer {
506
514
  TypeFactory.keyword("any"),
507
515
  )(ts.factory.createIdentifier("input")),
508
516
  explore: {
509
- ...explore,
517
+ ...arrayExplore,
510
518
  postfix: "",
511
519
  },
512
520
  input: ts.factory.createIdentifier("input"),
@@ -562,7 +570,14 @@ export namespace MiscPruneProgrammer {
562
570
  explore,
563
571
  }),
564
572
  objector: {
565
- checker: () => IsProgrammer.decode(props.context)(props.importer),
573
+ checker: () => (input, metadata, explore) =>
574
+ IsProgrammer.decode({
575
+ context: props.context,
576
+ importer: props.importer,
577
+ input,
578
+ metadata,
579
+ explore,
580
+ }),
566
581
  decoder: () => (input, object, explore) =>
567
582
  decode_object({
568
583
  importer: props.importer,
@@ -571,8 +586,14 @@ export namespace MiscPruneProgrammer {
571
586
  explore,
572
587
  }),
573
588
  joiner: PruneJoiner.object,
574
- unionizer: decode_union_object(
575
- IsProgrammer.decode_object(props.context)(props.importer),
589
+ unionizer: decode_union_object((input, object, explore) =>
590
+ IsProgrammer.decode_object({
591
+ context: props.context,
592
+ importer: props.importer,
593
+ input,
594
+ object,
595
+ explore,
596
+ }),
576
597
  )((input, object, explore) =>
577
598
  decode_object({
578
599
  importer: props.importer,