{"record":{"id":"faf85251de88a413","repo":"OpenAPITools/openapi-generator","slug":"invalid-providedin-level-s-must-be-one-of-s","errorCode":null,"errorMessage":"Invalid providedIn level '%s'. Must be one of %s.","messagePattern":"Invalid providedIn level '(.+?)'\\. Must be one of (.+?)\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java","lineNumber":762,"sourceCode":"        }\n        return name;\n    }\n\n    /**\n     * Set the Injectable level\n     *\n     * @param level the wanted level\n     */\n    public void setProvidedIn(String level) {\n        try {\n            providedIn = PROVIDED_IN_LEVEL.valueOf(level);\n        } catch (IllegalArgumentException e) {\n            String values = Stream.of(PROVIDED_IN_LEVEL.values())\n                    .map(value -> \"'\" + value.name() + \"'\")\n                    .collect(Collectors.joining(\", \"));\n\n            String msg = String.format(Locale.ROOT, \"Invalid providedIn level '%s'. Must be one of %s.\", level, values);\n            throw new IllegalArgumentException(msg);\n        }\n    }\n\n    /**\n     *\n     */\n    private boolean getIsProvidedInNone() {\n        return PROVIDED_IN_LEVEL.none.equals(providedIn);\n    }\n}\n","sourceCodeStart":744,"sourceCodeEnd":773,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java#L744-L773","documentation":"providedIn sets the scope used in @Injectable() of the generated Angular services and maps to an enum with values 'none', 'root', 'any' and 'platform'. Any other string throws during option parsing, with the accepted list included in the message.","triggerScenarios":"-DprovidedIn=module (not modelled by the generator), 'Root' (wrong case), or any value outside none/root/any/platform.","commonSituations":"Wanting Angular's providedIn: 'module' scope, which the generator does not support; case mismatches from hand-edited configs; copying examples written for a different generator version.","solutions":["Use one of the supported values: 'root' (default), 'any', 'platform' or 'none'.","If module-level scope is required, generate with 'none' and register the service in the module's providers array."],"exampleFix":"# before\n-DprovidedIn=module\n\n# after\n-DprovidedIn=none  # then add the service to NgModule providers manually","handlingStrategy":"type-guard","validationCode":"// node: verify providedIn against the generator's enum\nconst LEVELS = ['none', 'root', 'any', 'platform'];\nif (opts.providedIn && !LEVELS.includes(opts.providedIn))\n  throw new Error(`providedIn must be one of ${LEVELS.join('|')}`);","typeGuard":"const PROVIDED_IN = ['none', 'root', 'any', 'platform'] as const;\nexport type ProvidedInLevel = typeof PROVIDED_IN[number];\nconst isProvidedInLevel = (v: string): v is ProvidedInLevel =>\n  (PROVIDED_IN as readonly string[]).includes(v);","tryCatchPattern":"// Java\ntry { new DefaultGenerator().opts(input).generate(); }\ncatch (IllegalArgumentException e) {\n    // message lists none/root/any/platform; pick one and rerun\n}","preventionTips":["Remember 'module' scope is not modelled; plan manual NgModule registration with 'none'.","Type config values as unions so invalid scopes fail at compile time.","Validate enum-backed options in a pre-flight script."],"tags":["typescript","angular","configuration","dependency-injection"],"backgroundTag":"invalid-option-value","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}