@fern-api/ruby-dynamic-snippets 0.0.3 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/DynamicToLiteralMapper.ts"],"sourcesContent":["import { Severity } from \"@fern-api/browser-compatible-base-generator\";\nimport { assertNever } from \"@fern-api/core-utils\";\nimport { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { ruby } from \"@fern-api/ruby-ast\";\n\nimport { DynamicSnippetsGeneratorContext } from \"./DynamicSnippetsGeneratorContext\";\n\nexport declare namespace DynamicTypeLiteralMapper {\n interface Args {\n typeReference: FernIr.dynamic.TypeReference;\n value: unknown;\n as?: ConvertedAs;\n }\n\n // Identifies what the type is being converted as, which sometimes influences how\n // the type is instantiated.\n type ConvertedAs = \"key\";\n}\n\nexport class DynamicTypeLiteralMapper {\n private context: DynamicSnippetsGeneratorContext;\n\n constructor({ context }: { context: DynamicSnippetsGeneratorContext }) {\n this.context = context;\n }\n\n public convert(args: DynamicTypeLiteralMapper.Args): ruby.AstNode {\n // eslint-disable-next-line eqeqeq\n if (args.value === null) {\n if (this.context.isNullable(args.typeReference)) {\n return ruby.TypeLiteral.nil();\n }\n this.context.errors.add({\n severity: Severity.Critical,\n message: \"Expected non-null value, but got null\"\n });\n return ruby.TypeLiteral.nop();\n }\n if (args.value === undefined) {\n return ruby.TypeLiteral.nop();\n }\n switch (args.typeReference.type) {\n case \"list\":\n return this.convertList({ list: args.typeReference.value, value: args.value });\n case \"literal\":\n return this.convertLiteral({ literalType: args.typeReference.value, value: args.value });\n case \"map\":\n return this.convertMap({ map: args.typeReference, value: args.value });\n case \"named\": {\n const named = this.context.resolveNamedType({ typeId: args.typeReference.value });\n if (named == null) {\n return ruby.TypeLiteral.nop();\n }\n return this.convertNamed({ named, value: args.value, as: args.as });\n }\n case \"optional\":\n return this.convert({ typeReference: args.typeReference.value, value: args.value, as: args.as });\n case \"nullable\":\n return this.convert({ typeReference: args.typeReference.value, value: args.value, as: args.as });\n case \"primitive\":\n return this.convertPrimitive({ primitive: args.typeReference.value, value: args.value, as: args.as });\n case \"set\":\n return this.convertSet({ set: args.typeReference.value, value: args.value });\n case \"unknown\":\n return ruby.TypeLiteral.nop();\n default:\n assertNever(args.typeReference);\n }\n }\n\n private convertLiteral({\n literalType,\n value\n }: {\n literalType: FernIr.dynamic.LiteralType;\n value: unknown;\n }): ruby.AstNode {\n switch (literalType.type) {\n case \"boolean\": {\n const bool = this.context.getValueAsBoolean({ value });\n if (bool == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.boolean(bool);\n }\n case \"string\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n default:\n assertNever(literalType);\n }\n }\n\n private convertList({ list, value }: { list: FernIr.dynamic.TypeReference; value: unknown }): ruby.AstNode {\n if (!Array.isArray(value)) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected array but got: ${typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.list(\n value.map((v, index) => {\n this.context.errors.scope({ index });\n try {\n return this.convert({ typeReference: list, value: v });\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertSet({ set, value }: { set: FernIr.dynamic.TypeReference; value: unknown }): ruby.AstNode {\n if (!Array.isArray(value)) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected array but got: ${typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.set(\n value.map((v, index) => {\n this.context.errors.scope({ index });\n try {\n return this.convert({ typeReference: set, value: v });\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertMap({ map, value }: { map: FernIr.dynamic.MapType; value: unknown }): ruby.AstNode {\n if (typeof value !== \"object\" || value == null) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected object but got: ${value == null ? \"null\" : typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.hash(\n Object.entries(value).map(([key, value]) => {\n this.context.errors.scope(key);\n try {\n return {\n key: this.convert({ typeReference: map.key, value: key, as: \"key\" }),\n value: this.convert({ typeReference: map.value, value })\n };\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertNamed({\n named,\n value,\n as\n }: {\n named: FernIr.dynamic.NamedType;\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): ruby.AstNode {\n switch (named.type) {\n case \"alias\": {\n return this.convert({ typeReference: named.typeReference, value, as });\n }\n case \"discriminatedUnion\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n case \"object\":\n // Not implemented\n return this.convertObject({ object: named, value });\n case \"enum\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n case \"undiscriminatedUnion\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n default:\n assertNever(named);\n }\n }\n\n private convertPrimitive({\n primitive,\n value,\n as\n }: {\n primitive: FernIr.dynamic.PrimitiveTypeV1;\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): ruby.AstNode {\n switch (primitive) {\n case \"INTEGER\":\n case \"LONG\":\n case \"UINT\":\n case \"UINT_64\": {\n const num = this.getValueAsNumber({ value, as });\n if (num == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.integer(num);\n }\n case \"FLOAT\":\n case \"DOUBLE\": {\n const num = this.getValueAsNumber({ value });\n if (num == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.float(num);\n }\n case \"BOOLEAN\": {\n const bool = this.getValueAsBoolean({ value, as });\n if (bool == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.boolean(bool);\n }\n case \"BASE_64\":\n case \"BIG_INTEGER\":\n case \"STRING\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"UUID\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"DATE\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"DATE_TIME\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n default:\n assertNever(primitive);\n }\n }\n\n private convertObject({ object, value }: { object: FernIr.dynamic.ObjectType; value: unknown }): ruby.AstNode {\n if (typeof value !== \"object\" || value == null) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected object but got: ${value == null ? \"null\" : typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n\n return ruby.TypeLiteral.hash(\n Object.entries(value as Record<string, unknown>).map(([key, val]) => {\n this.context.errors.scope(key);\n const property = object.properties.find((p) => p.name.wireValue === key);\n const typeReference = property?.typeReference ?? { type: \"unknown\" };\n const astNode = {\n key: ruby.TypeLiteral.string(key),\n value: this.convert({ typeReference, value: val })\n };\n this.context.errors.unscope();\n return astNode;\n })\n );\n }\n\n private getValueAsNumber({\n value,\n as\n }: {\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): number | undefined {\n const num = as === \"key\" ? (typeof value === \"string\" ? Number(value) : value) : value;\n return this.context.getValueAsNumber({ value: num });\n }\n\n private getValueAsBoolean({\n value,\n as\n }: {\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): boolean | undefined {\n const bool = as === \"key\" ? (typeof value === \"string\" ? value === \"true\" : Boolean(value)) : value;\n return this.context.getValueAsBoolean({ value: bool });\n }\n}\n"],"mappings":"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","names":["init_process","init_buffer","DynamicTypeLiteralMapper","context","__publicField","args","ruby_exports","Severity","named","assertNever","literalType","value","bool","str","list","v","index","set","map","key","as","primitive","num","object","val","_a","property","p","typeReference","astNode"]}
1
+ {"version":3,"sources":["../../src/context/DynamicToLiteralMapper.ts"],"sourcesContent":["import { Severity } from \"@fern-api/browser-compatible-base-generator\";\nimport { assertNever } from \"@fern-api/core-utils\";\nimport { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { ruby } from \"@fern-api/ruby-ast\";\n\nimport { DynamicSnippetsGeneratorContext } from \"./DynamicSnippetsGeneratorContext\";\n\nexport declare namespace DynamicTypeLiteralMapper {\n interface Args {\n typeReference: FernIr.dynamic.TypeReference;\n value: unknown;\n as?: ConvertedAs;\n }\n\n // Identifies what the type is being converted as, which sometimes influences how\n // the type is instantiated.\n type ConvertedAs = \"key\";\n}\n\nexport class DynamicTypeLiteralMapper {\n private context: DynamicSnippetsGeneratorContext;\n\n constructor({ context }: { context: DynamicSnippetsGeneratorContext }) {\n this.context = context;\n }\n\n public convert(args: DynamicTypeLiteralMapper.Args): ruby.AstNode {\n // eslint-disable-next-line eqeqeq\n if (args.value === null) {\n if (this.context.isNullable(args.typeReference)) {\n return ruby.TypeLiteral.nil();\n }\n this.context.errors.add({\n severity: Severity.Critical,\n message: \"Expected non-null value, but got null\"\n });\n return ruby.TypeLiteral.nop();\n }\n if (args.value === undefined) {\n return ruby.TypeLiteral.nop();\n }\n switch (args.typeReference.type) {\n case \"list\":\n return this.convertList({ list: args.typeReference.value, value: args.value });\n case \"literal\":\n return this.convertLiteral({ literalType: args.typeReference.value, value: args.value });\n case \"map\":\n return this.convertMap({ map: args.typeReference, value: args.value });\n case \"named\": {\n const named = this.context.resolveNamedType({ typeId: args.typeReference.value });\n if (named == null) {\n return ruby.TypeLiteral.nop();\n }\n return this.convertNamed({ named, value: args.value, as: args.as });\n }\n case \"optional\":\n return this.convert({ typeReference: args.typeReference.value, value: args.value, as: args.as });\n case \"nullable\":\n return this.convert({ typeReference: args.typeReference.value, value: args.value, as: args.as });\n case \"primitive\":\n return this.convertPrimitive({ primitive: args.typeReference.value, value: args.value, as: args.as });\n case \"set\":\n return this.convertSet({ set: args.typeReference.value, value: args.value });\n case \"unknown\":\n return ruby.TypeLiteral.nop();\n default:\n assertNever(args.typeReference);\n }\n }\n\n private convertLiteral({\n literalType,\n value\n }: {\n literalType: FernIr.dynamic.LiteralType;\n value: unknown;\n }): ruby.AstNode {\n switch (literalType.type) {\n case \"boolean\": {\n const bool = this.context.getValueAsBoolean({ value });\n if (bool == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.boolean(bool);\n }\n case \"string\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n default:\n assertNever(literalType);\n }\n }\n\n private convertList({ list, value }: { list: FernIr.dynamic.TypeReference; value: unknown }): ruby.AstNode {\n if (!Array.isArray(value)) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected array but got: ${typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.list(\n value.map((v, index) => {\n this.context.errors.scope({ index });\n try {\n return this.convert({ typeReference: list, value: v });\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertSet({ set, value }: { set: FernIr.dynamic.TypeReference; value: unknown }): ruby.AstNode {\n if (!Array.isArray(value)) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected array but got: ${typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.set(\n value.map((v, index) => {\n this.context.errors.scope({ index });\n try {\n return this.convert({ typeReference: set, value: v });\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertMap({ map, value }: { map: FernIr.dynamic.MapType; value: unknown }): ruby.AstNode {\n if (typeof value !== \"object\" || value == null) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected object but got: ${value == null ? \"null\" : typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.hash(\n Object.entries(value).map(([key, value]) => {\n this.context.errors.scope(key);\n try {\n return {\n key: this.convert({ typeReference: map.key, value: key, as: \"key\" }),\n value: this.convert({ typeReference: map.value, value })\n };\n } finally {\n this.context.errors.unscope();\n }\n })\n );\n }\n\n private convertNamed({\n named,\n value,\n as\n }: {\n named: FernIr.dynamic.NamedType;\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): ruby.AstNode {\n switch (named.type) {\n case \"alias\": {\n return this.convert({ typeReference: named.typeReference, value, as });\n }\n case \"discriminatedUnion\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n case \"object\":\n // Not implemented\n return this.convertObject({ object: named, value });\n case \"enum\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n case \"undiscriminatedUnion\":\n // Not implemented\n return ruby.TypeLiteral.nop();\n default:\n assertNever(named);\n }\n }\n\n private convertPrimitive({\n primitive,\n value,\n as\n }: {\n primitive: FernIr.dynamic.PrimitiveTypeV1;\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): ruby.AstNode {\n switch (primitive) {\n case \"INTEGER\":\n case \"LONG\":\n case \"UINT\":\n case \"UINT_64\": {\n const num = this.getValueAsNumber({ value, as });\n if (num == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.integer(num);\n }\n case \"FLOAT\":\n case \"DOUBLE\": {\n const num = this.getValueAsNumber({ value });\n if (num == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.float(num);\n }\n case \"BOOLEAN\": {\n const bool = this.getValueAsBoolean({ value, as });\n if (bool == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.boolean(bool);\n }\n case \"BASE_64\":\n case \"BIG_INTEGER\":\n case \"STRING\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"UUID\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"DATE\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n case \"DATE_TIME\": {\n const str = this.context.getValueAsString({ value });\n if (str == null) {\n return ruby.TypeLiteral.nop();\n }\n return ruby.TypeLiteral.string(str);\n }\n default:\n assertNever(primitive);\n }\n }\n\n private convertObject({ object, value }: { object: FernIr.dynamic.ObjectType; value: unknown }): ruby.AstNode {\n if (typeof value !== \"object\" || value == null) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected object but got: ${value == null ? \"null\" : typeof value}`\n });\n return ruby.TypeLiteral.nop();\n }\n\n return ruby.TypeLiteral.hash(\n Object.entries(value as Record<string, unknown>).map(([key, val]) => {\n this.context.errors.scope(key);\n const property = object.properties.find((p) => p.name.wireValue === key);\n const typeReference = property?.typeReference ?? { type: \"unknown\" };\n // Use snake_case property name for Ruby, falling back to wire value if not found\n const propertyName = property?.name.name.snakeCase.safeName ?? key;\n const astNode = {\n key: ruby.TypeLiteral.string(propertyName),\n value: this.convert({ typeReference, value: val })\n };\n this.context.errors.unscope();\n return astNode;\n })\n );\n }\n\n private getValueAsNumber({\n value,\n as\n }: {\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): number | undefined {\n const num = as === \"key\" ? (typeof value === \"string\" ? Number(value) : value) : value;\n return this.context.getValueAsNumber({ value: num });\n }\n\n private getValueAsBoolean({\n value,\n as\n }: {\n value: unknown;\n as?: DynamicTypeLiteralMapper.ConvertedAs;\n }): boolean | undefined {\n const bool = as === \"key\" ? (typeof value === \"string\" ? value === \"true\" : Boolean(value)) : value;\n return this.context.getValueAsBoolean({ value: bool });\n }\n}\n"],"mappings":"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","names":["init_process","init_buffer","DynamicTypeLiteralMapper","context","__publicField","args","ruby_exports","Severity","named","assertNever","literalType","value","bool","str","list","v","index","set","map","key","as","primitive","num","object","val","_a","_b","property","p","typeReference","propertyName","astNode"]}
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-55CMLIMK.js";import"../chunk-BFNNFVSX.js";import"../chunk-SFFHNMMU.js";export{a as DynamicSnippetsGeneratorContext};
1
+ import{a}from"../chunk-24Z62MLO.js";import"../chunk-CWYMFRFT.js";import"../chunk-SFFHNMMU.js";export{a as DynamicSnippetsGeneratorContext};
2
2
  //# sourceMappingURL=DynamicSnippetsGeneratorContext.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-BFNNFVSX.js";import"../chunk-SFFHNMMU.js";export{a as DynamicTypeLiteralMapper};
1
+ import{a}from"../chunk-CWYMFRFT.js";import"../chunk-SFFHNMMU.js";export{a as DynamicTypeLiteralMapper};
2
2
  //# sourceMappingURL=DynamicToLiteralMapper.js.map
package/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as n}from"./chunk-SBHABCSD.js";import"./chunk-M3XXD3D4.js";import"./chunk-55CMLIMK.js";import"./chunk-BFNNFVSX.js";import{b as e,c as r}from"./chunk-SFFHNMMU.js";e();r();export{n as DynamicSnippetsGenerator};
1
+ import{a as n}from"./chunk-CUHUKCRC.js";import"./chunk-AGVSP2TB.js";import"./chunk-24Z62MLO.js";import"./chunk-CWYMFRFT.js";import{b as e,c as r}from"./chunk-SFFHNMMU.js";e();r();export{n as DynamicSnippetsGenerator};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fern-api/ruby-dynamic-snippets",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/fern-api/fern.git",