11import Ajv , { ValidateFunction } from 'ajv'
2- import { cloneDeep , unset } from 'lodash'
2+ import { cloneDeep , difference , unset } from 'lodash'
33import { prepareEnvironment } from 'src/common/cli'
44import { terminal } from 'src/common/debug'
55import { env } from 'src/common/envalid'
@@ -19,44 +19,27 @@ const internalPaths: string[] = ['k8s', 'adminApps', 'teamApps']
1919 */
2020export function removeSecretRequirements ( schema : Record < string , any > ) : Record < string , any > {
2121 const cleaned = cloneDeep ( schema )
22- removeSecretRequirementsInPlace ( cleaned )
22+ removeSecretsInPlace ( cleaned )
2323 return cleaned
2424}
2525
26- function removeSecretRequirementsInPlace ( schema : Record < string , any > ) : void {
27- if ( ! schema || typeof schema !== 'object' ) return
28-
29- // Collect property names that have x-secret in this node
30- const secretProps = new Set < string > ( )
31- if ( schema . properties ) {
32- for ( const [ propName , propSchema ] of Object . entries ( schema . properties as Record < string , any > ) ) {
33- if ( propSchema && typeof propSchema === 'object' && 'x-secret' in propSchema ) {
34- secretProps . add ( propName )
35- }
36- }
37- }
38-
39- // Remove secret properties from required array
40- if ( Array . isArray ( schema . required ) && secretProps . size > 0 ) {
41- const filtered = schema . required . filter ( ( r : string ) => ! secretProps . has ( r ) )
42- if ( filtered . length === 0 ) {
26+ function removeSecretsInPlace ( node : any ) : void {
27+ if ( ! node || typeof node !== 'object' ) return
28+ if ( node . properties && Array . isArray ( node . required ) ) {
29+ const secretProps = Object . keys ( node . properties as Record < string , any > ) . filter (
30+ ( key ) => 'x-secret' in ( node . properties [ key ] ?? { } ) ,
31+ )
32+ if ( secretProps . length > 0 ) {
33+ const filtered = difference ( node . required as string [ ] , secretProps )
4334 // eslint-disable-next-line no-param-reassign
44- delete schema . required
45- } else {
35+ if ( filtered . length === 0 ) delete node . required
4636 // eslint-disable-next-line no-param-reassign
47- schema . required = filtered
37+ else node . required = filtered
4838 }
4939 }
50-
51- // Recurse into all sub-schemas
52- for ( const value of Object . values ( schema ) ) {
53- if ( Array . isArray ( value ) ) {
54- for ( const item of value ) {
55- removeSecretRequirementsInPlace ( item )
56- }
57- } else if ( value && typeof value === 'object' ) {
58- removeSecretRequirementsInPlace ( value )
59- }
40+ for ( const value of Object . values ( node as Record < string , unknown > ) ) {
41+ if ( Array . isArray ( value ) ) value . forEach ( removeSecretsInPlace )
42+ else if ( value && typeof value === 'object' ) removeSecretsInPlace ( value )
6043 }
6144}
6245
0 commit comments