@@ -60,16 +60,38 @@ export async function buildRenderContext(
6060 ancestors,
6161 rootEnvironment,
6262 subEnvironment,
63+ rootGlobalEnvironment,
64+ subGlobalEnvironment,
6365 baseContext = { } ,
6466 } : {
6567 ancestors ?: RenderContextAncestor [ ] ;
6668 rootEnvironment ?: Environment ;
6769 subEnvironment ?: Environment ;
70+ rootGlobalEnvironment ?: Environment | null ;
71+ subGlobalEnvironment ?: Environment | null ;
6872 baseContext ?: Record < string , any > ;
6973 } ,
7074) {
7175 const envObjects : Record < string , any > [ ] = [ ] ;
7276
77+ if ( rootGlobalEnvironment ) {
78+ const ordered = orderedJSON . order (
79+ rootGlobalEnvironment . data ,
80+ rootGlobalEnvironment . dataPropertyOrder ,
81+ JSON_ORDER_SEPARATOR ,
82+ ) ;
83+ envObjects . push ( ordered ) ;
84+ }
85+
86+ if ( subGlobalEnvironment ) {
87+ const ordered = orderedJSON . order (
88+ subGlobalEnvironment . data ,
89+ subGlobalEnvironment . dataPropertyOrder ,
90+ JSON_ORDER_SEPARATOR ,
91+ ) ;
92+ envObjects . push ( ordered ) ;
93+ }
94+
7395 // Get root environment keys in correct order
7496 // Then get sub environment keys in correct order
7597 // Then get ancestor (folder) environment keys in correct order
@@ -300,6 +322,8 @@ interface RenderRequest<T extends Request | GrpcRequest | WebSocketRequest> {
300322interface BaseRenderContextOptions {
301323 environment ?: string | Environment ;
302324 baseEnvironment ?: Environment ;
325+ rootGlobalEnvironment ?: Environment ;
326+ subGlobalEnvironment ?: Environment ;
303327 purpose ?: RenderPurpose ;
304328 extraInfo ?: ExtraRenderInfo ;
305329 ignoreUndefinedEnvVariable ?: boolean ;
@@ -326,6 +350,29 @@ export async function getRenderContext(
326350 throw new Error ( 'Failed to render. Could not find workspace' ) ;
327351 }
328352
353+ const workspaceMeta = await models . workspaceMeta . getByParentId ( workspace . _id ) ;
354+
355+ let rootGlobalEnvironment : Environment | null = null ;
356+ let subGlobalEnvironment : Environment | null = null ;
357+
358+ if ( workspaceMeta ?. activeGlobalEnvironmentId ) {
359+ const activeGlobalEnvironment = await models . environment . getById ( workspaceMeta . activeGlobalEnvironmentId ) ;
360+
361+ if ( activeGlobalEnvironment ) {
362+ if ( activeGlobalEnvironment ?. parentId . startsWith ( 'wrk_' ) ) {
363+ rootGlobalEnvironment = activeGlobalEnvironment ;
364+ } else {
365+ subGlobalEnvironment = activeGlobalEnvironment ;
366+
367+ const baseGlobalEnvironment = await models . environment . getById ( activeGlobalEnvironment . parentId ) ;
368+
369+ if ( baseGlobalEnvironment ) {
370+ rootGlobalEnvironment = baseGlobalEnvironment ;
371+ }
372+ }
373+ }
374+ }
375+
329376 const rootEnvironment = baseEnvironment || await models . environment . getOrCreateForParentId (
330377 workspace ? workspace . _id : 'n/a' ,
331378 ) ;
@@ -361,6 +408,15 @@ export async function getRenderContext(
361408 }
362409
363410 const inKey = templating . NUNJUCKS_TEMPLATE_GLOBAL_PROPERTY_NAME ;
411+
412+ if ( rootGlobalEnvironment ) {
413+ getKeySource ( rootGlobalEnvironment . data || { } , inKey , 'rootGlobal' ) ;
414+ }
415+
416+ if ( subGlobalEnvironment ) {
417+ getKeySource ( subGlobalEnvironment . data || { } , inKey , 'subGlobal' ) ;
418+ }
419+
364420 // Get Keys from root environment
365421 getKeySource ( ( rootEnvironment || { } ) . data , inKey , 'root' ) ;
366422
@@ -408,7 +464,14 @@ export async function getRenderContext(
408464 } ;
409465
410466 // Generate the context we need to render
411- return buildRenderContext ( { ancestors, rootEnvironment, subEnvironment : subEnvironment || undefined , baseContext } ) ;
467+ return buildRenderContext ( {
468+ ancestors,
469+ rootGlobalEnvironment,
470+ subGlobalEnvironment,
471+ rootEnvironment,
472+ subEnvironment : subEnvironment || undefined ,
473+ baseContext,
474+ } ) ;
412475}
413476interface BaseRenderContext {
414477 getMeta : ( ) => { } ;
0 commit comments