{"record":{"id":"e819e4efa82c2b3f","repo":"apache/beam","slug":"encountered-a-type-that-is-not-currently-supported-by","errorCode":null,"errorMessage":"Encountered a type that is not currently supported by RowCoder: ${JSON.stringify(f.type)}","messagePattern":"Encountered a type that is not currently supported by RowCoder: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/typescript/src/apache_beam/coders/row_coder.ts","lineNumber":130,"sourceCode":"  private hasNullableFields: boolean;\n  private components: Coder<any>[];\n\n  addFieldOfType(obj: any, f: Field, value: any): any {\n    if (f.type !== undefined) {\n      let typeInfo = f.type?.typeInfo;\n      switch (typeInfo.oneofKind) {\n        case \"atomicType\":\n        case \"rowType\":\n        case \"logicalType\":\n          obj[f.name] = value;\n          break;\n        case \"arrayType\":\n          obj[f.name] = value === undefined ? undefined : Array.from(value);\n          break;\n        // case \"iterableType\":\n        // case \"mapType\":\n        default:\n          throw new Error(\n            `Encountered a type that is not currently supported by RowCoder: ${JSON.stringify(\n              f.type,\n            )}`,\n          );\n      }\n      return obj;\n    }\n  }\n\n  static inferTypeFromJSON(obj: any, nullable: boolean = true): FieldType {\n    if (obj instanceof TypePlaceholder) {\n      return obj.fieldType;\n    }\n\n    let fieldType: FieldType = {\n      nullable: nullable,\n      typeInfo: {\n        oneofKind: undefined,","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/typescript/src/apache_beam/coders/row_coder.ts#L112-L148","documentation":"NamedTransform._check_allowed validates a fully qualified transform name against _FILTER_GLOB using fnmatch. If the name does not match the configured allow-list glob (or no glob is set), ValueError is raised. This is a deliberate security/policy gate restricting which transforms a pipeline may resolve by name.","triggerScenarios":"Resolving/expanding a NamedTransform whose fully qualified name fails fnmatch against cls._FILTER_GLOB, e.g. filter 'apache_beam.transforms.*' with name 'com.example.Custom', called via expand() or _resolve().","commonSituations":"Class-level _FILTER_GLOB left at a restrictive default or set to the wrong pattern; referencing transforms from third-party packages not covered by the glob; glob typos (case sensitivity: fnmatchcase).","solutions":["Adjust _FILTER_GLOB (or the filter configuration) so the fully qualified name matches, e.g. widen the glob pattern.","Use a fully qualified name within the allowed namespace.","Check glob case-sensitivity — fnmatchcase is used, so pattern and name case must match."],"exampleFix":"// before\n_FILTER_GLOB = 'apache_beam.transforms.*'\np | NamedTransform('org.apache.beam.sdk.io.kafka.KafkaIO.read')\n// after\n_FILTER_GLOB = 'org.apache.beam.*'  # or use a name matching the existing filter","handlingStrategy":"validation","validationCode":"import fnmatch\nassert fnmatch.fnmatchcase(fully_qualified_name, NamedTransform._FILTER_GLOB), f'{fully_qualified_name} not allowed by {NamedTransform._FILTER_GLOB}'","typeGuard":"def name_allowed(name: str, glob: str) -> bool:\n    import fnmatch\n    return bool(glob) and fnmatch.fnmatchcase(name, glob)","tryCatchPattern":"try:\n    p | NamedTransform(fq_name)\nexcept ValueError as e:\n    logger.error('Transform blocked by filter: %s', e)\n    raise","preventionTips":["Check _FILTER_GLOB before resolving new transform names","Remember fnmatchcase is case-sensitive","Keep the allow-list glob in sync with the namespaces your pipeline uses"],"tags":["python","apache-beam","naming","allowlist","glob"],"backgroundTag":"permission-denied","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}