@next-core/runtime 1.57.3 → 1.57.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.
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +4 -0
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/esm/internal/Renderer.js +4 -0
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/types/internal/Runtime.d.ts +2 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupTemplateProxy.js","names":["_general","require","_lodash","_constants","_computeRealProperties","_Renderer","setupTemplateProxy","hostContext","ref","slots","slotted","reversedProxies","asyncHostPropertyEntries","externalSlots","tplStateStoreId","hostBrick","asyncComputedProps","propertyProxies","properties","get","getComputedProps","asyncHostProps","map","from","to","filtered","filter","entry","length","refProperty","computePropertyValue","Boolean","slotProxies","Error","type","quasisMap","Map","_externalSlots$from","insertBricks","bricks","refToSlot","refSlot","expandableSlot","size","hasOwnProperty","i","push","set","refPosition","hostHasForEach","runtimeContext","clamp","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","slotName","quasis","entries","slotConf","flatMap","index","concat","symbolForAsyncComputedPropsFromHost","symbolForTplStateStoreId","children","brick","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachSize","childrenToSlots","Object","fromEntries","routes","setupTemplateExternalRoutesWithForEach","route"],"sources":["../../../../src/internal/CustomTemplates/setupTemplateProxy.ts"],"sourcesContent":["import type { BrickConf, RouteConf, SlotsConfOfBricks } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { clamp } from \"lodash\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n type RuntimeBrickConfWithTplSymbols,\n} from \"./constants.js\";\nimport type { AsyncPropertyEntry, TemplateHostContext } from \"../interfaces.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function setupTemplateProxy(\n hostContext: TemplateHostContext,\n ref: string | undefined,\n slots: SlotsConfOfBricks,\n slotted: boolean\n) {\n const {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots,\n tplStateStoreId,\n hostBrick,\n } = hostContext;\n\n let asyncComputedProps: AsyncPropertyEntry[] | undefined;\n\n if (ref && reversedProxies) {\n const propertyProxies = reversedProxies.properties.get(ref);\n if (propertyProxies) {\n const getComputedProps = (\n asyncHostProps: AsyncPropertyEntry[]\n ): AsyncPropertyEntry[] => {\n return propertyProxies!\n .map(({ from, to }) => {\n const filtered = asyncHostProps.filter(\n (entry) => entry[0] === from\n );\n if (filtered.length > 0 && to.refProperty) {\n return [\n to.refProperty,\n computePropertyValue(filtered, from),\n true,\n ];\n }\n })\n .filter(Boolean) as [string, Promise<unknown>][];\n };\n\n asyncComputedProps = getComputedProps(asyncHostPropertyEntries);\n }\n\n const slotProxies = reversedProxies.slots.get(ref);\n\n if (slotProxies && slotted) {\n throw new Error(\n `Can not have proxied slot ref when the ref target has a slot element child, check your template \"${hostBrick.type}\" and ref \"${ref}\"`\n );\n }\n\n if (slotProxies && externalSlots) {\n // Use an approach like template-literal's quasis:\n // `quasi0${0}quais1${1}quasi2...`\n // Every quasi (indexed by `refPosition`) can be slotted with multiple bricks.\n const quasisMap = new Map<string, BrickConf[][]>();\n\n for (const { from, to } of slotProxies) {\n const insertBricks = externalSlots[from]?.bricks ?? [];\n if (!insertBricks.length) {\n continue;\n }\n const refToSlot = to.refSlot ?? from;\n let expandableSlot = quasisMap.get(refToSlot);\n if (!expandableSlot) {\n expandableSlot = [];\n // The size of quasis should be the existed slotted bricks' size plus one.\n const size = hasOwnProperty(slots, refToSlot)\n ? slots[refToSlot].bricks.length + 1\n : 1;\n for (let i = 0; i < size; i += 1) {\n expandableSlot.push([]);\n }\n quasisMap.set(refToSlot, expandableSlot);\n }\n const refPosition = to.refPosition ?? -1;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(\n hostBrick.runtimeContext,\n \"forEachItem\"\n );\n expandableSlot[\n clamp(\n refPosition < 0 ? expandableSlot.length + refPosition : refPosition,\n 0,\n expandableSlot.length - 1\n )\n ].push(\n ...(!hostHasForEach\n ? insertBricks\n : setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostBrick.runtimeContext.forEachItem,\n hostBrick.runtimeContext.forEachIndex!,\n hostBrick.runtimeContext.forEachSize!\n ))\n );\n }\n\n for (const [slotName, quasis] of quasisMap.entries()) {\n if (!hasOwnProperty(slots, slotName)) {\n slots[slotName] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n const slotConf = slots[slotName];\n slotConf.bricks = quasis.flatMap((bricks, index) =>\n index < slotConf.bricks.length\n ? bricks.concat(slotConf.bricks[index])\n : bricks\n );\n\n if (slotConf.bricks.length === 0) {\n delete slots[slotName];\n }\n }\n }\n }\n\n return {\n [symbolForAsyncComputedPropsFromHost]: asyncComputedProps,\n [symbolForTplStateStoreId]: tplStateStoreId,\n };\n}\n\n// External bricks of a template, have the same forEachItem context as their host.\nexport function setupTemplateExternalBricksWithForEach(\n bricks: BrickConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): BrickConf[] {\n return (bricks as RuntimeBrickConfWithTplSymbols[]).map(\n ({ children, slots, ...brick }) => ({\n ...brick,\n [symbolForTPlExternalForEachItem]: forEachItem,\n [symbolForTPlExternalForEachIndex]: forEachIndex,\n [symbolForTPlExternalForEachSize]: forEachSize,\n // Keep `:forEach` bricks as original, since they have their own forEachItem context.\n slots:\n brick.brick === \":forEach\"\n ? childrenToSlots(children, slots)\n : Object.fromEntries(\n Object.entries(childrenToSlots(children, slots) ?? {}).map(\n ([slotName, slotConf]) => [\n slotName,\n slotConf.type === \"routes\"\n ? {\n type: \"routes\",\n routes: setupTemplateExternalRoutesWithForEach(\n slotConf.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : {\n type: \"bricks\",\n bricks: setupTemplateExternalBricksWithForEach(\n slotConf.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n },\n ]\n )\n ),\n })\n );\n}\n\nfunction setupTemplateExternalRoutesWithForEach(\n routes: RouteConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): RouteConf[] {\n return routes.map((route) =>\n route.type === \"routes\"\n ? {\n ...route,\n routes: setupTemplateExternalRoutesWithForEach(\n route.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : route.type === \"redirect\"\n ? route\n : {\n ...route,\n bricks: setupTemplateExternalBricksWithForEach(\n route.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n );\n}\n"],"mappings":";;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AASA,IAAAG,sBAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAEO,SAASK,kBAAkBA,CAChCC,WAAgC,EAChCC,GAAuB,EACvBC,KAAwB,EACxBC,OAAgB,EAChB;EACA,MAAM;IACJC,eAAe;IACfC,wBAAwB;IACxBC,aAAa;IACbC,eAAe;IACfC;EACF,CAAC,GAAGR,WAAW;EAEf,IAAIS,kBAAoD;EAExD,IAAIR,GAAG,IAAIG,eAAe,EAAE;IAC1B,MAAMM,eAAe,GAAGN,eAAe,CAACO,UAAU,CAACC,GAAG,CAACX,GAAG,CAAC;IAC3D,IAAIS,eAAe,EAAE;MACnB,MAAMG,gBAAgB,GACpBC,cAAoC,IACX;QACzB,OAAOJ,eAAe,CACnBK,GAAG,CAAC,CAAC;UAAEC,IAAI;UAAEC;QAAG,CAAC,KAAK;UACrB,MAAMC,QAAQ,GAAGJ,cAAc,CAACK,MAAM,CACnCC,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAKJ,IAC1B,CAAC;UACD,IAAIE,QAAQ,CAACG,MAAM,GAAG,CAAC,IAAIJ,EAAE,CAACK,WAAW,EAAE;YACzC,OAAO,CACLL,EAAE,CAACK,WAAW,EACd,IAAAC,2CAAoB,EAACL,QAAQ,EAAEF,IAAI,CAAC,EACpC,IAAI,CACL;UACH;QACF,CAAC,CAAC,CACDG,MAAM,CAACK,OAAO,CAAC;MACpB,CAAC;MAEDf,kBAAkB,GAAGI,gBAAgB,CAACR,wBAAwB,CAAC;IACjE;IAEA,MAAMoB,WAAW,GAAGrB,eAAe,CAACF,KAAK,CAACU,GAAG,CAACX,GAAG,CAAC;IAElD,IAAIwB,WAAW,IAAItB,OAAO,EAAE;MAC1B,MAAM,IAAIuB,KAAK,CACb,oGAAoGlB,SAAS,CAACmB,IAAI,cAAc1B,GAAG,GACrI,CAAC;IACH;IAEA,IAAIwB,WAAW,IAAInB,aAAa,EAAE;MAChC;MACA;MACA;MACA,MAAMsB,SAAS,GAAG,IAAIC,GAAG,CAAwB,CAAC;MAElD,KAAK,MAAM;QAAEb,IAAI;QAAEC;MAAG,CAAC,IAAIQ,WAAW,EAAE;QAAA,IAAAK,mBAAA;QACtC,MAAMC,YAAY,GAAG,EAAAD,mBAAA,GAAAxB,aAAa,CAACU,IAAI,CAAC,cAAAc,mBAAA,uBAAnBA,mBAAA,CAAqBE,MAAM,KAAI,EAAE;QACtD,IAAI,CAACD,YAAY,CAACV,MAAM,EAAE;UACxB;QACF;QACA,MAAMY,SAAS,GAAGhB,EAAE,CAACiB,OAAO,IAAIlB,IAAI;QACpC,IAAImB,cAAc,GAAGP,SAAS,CAAChB,GAAG,CAACqB,SAAS,CAAC;QAC7C,IAAI,CAACE,cAAc,EAAE;UACnBA,cAAc,GAAG,EAAE;UACnB;UACA,MAAMC,IAAI,GAAG,IAAAC,uBAAc,EAACnC,KAAK,EAAE+B,SAAS,CAAC,GACzC/B,KAAK,CAAC+B,SAAS,CAAC,CAACD,MAAM,CAACX,MAAM,GAAG,CAAC,GAClC,CAAC;UACL,KAAK,IAAIiB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,EAAEE,CAAC,IAAI,CAAC,EAAE;YAChCH,cAAc,CAACI,IAAI,CAAC,EAAE,CAAC;UACzB;UACAX,SAAS,CAACY,GAAG,CAACP,SAAS,EAAEE,cAAc,CAAC;QAC1C;QACA,MAAMM,WAAW,GAAGxB,EAAE,CAACwB,WAAW,IAAI,CAAC,CAAC;QACxC;QACA;QACA,MAAMC,cAAc,GAAG,IAAAL,uBAAc,EACnC7B,SAAS,CAACmC,cAAc,EACxB,aACF,CAAC;QACDR,cAAc,CACZ,IAAAS,aAAK,EACHH,WAAW,GAAG,CAAC,GAAGN,cAAc,CAACd,MAAM,GAAGoB,WAAW,GAAGA,WAAW,EACnE,CAAC,EACDN,cAAc,CAACd,MAAM,GAAG,CAC1B,CAAC,CACF,CAACkB,IAAI,CACJ,IAAI,CAACG,cAAc,GACfX,YAAY,GACZc,sCAAsC,CACpCd,YAAY,EACZvB,SAAS,CAACmC,cAAc,CAACG,WAAW,EACpCtC,SAAS,CAACmC,cAAc,CAACI,YAAY,EACrCvC,SAAS,CAACmC,cAAc,CAACK,WAC3B,CAAC,CACP,CAAC;MACH;MAEA,KAAK,MAAM,CAACC,QAAQ,EAAEC,MAAM,CAAC,IAAItB,SAAS,CAACuB,OAAO,CAAC,CAAC,EAAE;QACpD,IAAI,CAAC,IAAAd,uBAAc,EAACnC,KAAK,EAAE+C,QAAQ,CAAC,EAAE;UACpC/C,KAAK,CAAC+C,QAAQ,CAAC,GAAG;YAChBtB,IAAI,EAAE,QAAQ;YACdK,MAAM,EAAE;UACV,CAAC;QACH;QACA,MAAMoB,QAAQ,GAAGlD,KAAK,CAAC+C,QAAQ,CAAC;QAChCG,QAAQ,CAACpB,MAAM,GAAGkB,MAAM,CAACG,OAAO,CAAC,CAACrB,MAAM,EAAEsB,KAAK,KAC7CA,KAAK,GAAGF,QAAQ,CAACpB,MAAM,CAACX,MAAM,GAC1BW,MAAM,CAACuB,MAAM,CAACH,QAAQ,CAACpB,MAAM,CAACsB,KAAK,CAAC,CAAC,GACrCtB,MACN,CAAC;QAED,IAAIoB,QAAQ,CAACpB,MAAM,CAACX,MAAM,KAAK,CAAC,EAAE;UAChC,OAAOnB,KAAK,CAAC+C,QAAQ,CAAC;QACxB;MACF;IACF;EACF;EAEA,OAAO;IACL,CAACO,8CAAmC,GAAG/C,kBAAkB;IACzD,CAACgD,mCAAwB,GAAGlD;EAC9B,CAAC;AACH;;AAEA;AACO,SAASsC,sCAAsCA,CACpDb,MAAmB,EACnBc,WAAoB,EACpBC,YAAoB,EACpBC,WAAmB,EACN;EACb,OAAQhB,MAAM,CAAsCjB,GAAG,CACrD,CAAC;IAAE2C,QAAQ;IAAExD,KAAK;IAAE,GAAGyD;EAAM,CAAC,MAAM;IAClC,GAAGA,KAAK;IACR,CAACC,0CAA+B,GAAGd,WAAW;IAC9C,CAACe,2CAAgC,GAAGd,YAAY;IAChD,CAACe,0CAA+B,GAAGd,WAAW;IAC9C;IACA9C,KAAK,EACHyD,KAAK,CAACA,KAAK,KAAK,UAAU,GACtB,IAAAI,yBAAe,EAACL,QAAQ,EAAExD,KAAK,CAAC,GAChC8D,MAAM,CAACC,WAAW,CAChBD,MAAM,CAACb,OAAO,CAAC,IAAAY,yBAAe,EAACL,QAAQ,EAAExD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAACa,GAAG,CACxD,CAAC,CAACkC,QAAQ,EAAEG,QAAQ,CAAC,KAAK,CACxBH,QAAQ,EACRG,QAAQ,CAACzB,IAAI,KAAK,QAAQ,GACtB;MACEA,IAAI,EAAE,QAAQ;MACduC,MAAM,EAAEC,sCAAsC,CAC5Cf,QAAQ,CAACc,MAAM,EACfpB,WAAW,EACXC,YAAY,EACZC,WACF;IACF,CAAC,GACD;MACErB,IAAI,EAAE,QAAQ;MACdK,MAAM,EAAEa,sCAAsC,CAC5CO,QAAQ,CAACpB,MAAM,EACfc,WAAW,EACXC,YAAY,EACZC,WACF;IACF,CAAC,CAET,CACF;EACR,CAAC,CACH,CAAC;AACH;AAEA,SAASmB,sCAAsCA,CAC7CD,MAAmB,EACnBpB,WAAoB,EACpBC,YAAoB,EACpBC,WAAmB,EACN;EACb,OAAOkB,MAAM,CAACnD,GAAG,CAAEqD,KAAK,IACtBA,KAAK,CAACzC,IAAI,KAAK,QAAQ,GACnB;IACE,GAAGyC,KAAK;IACRF,MAAM,EAAEC,sCAAsC,CAC5CC,KAAK,CAACF,MAAM,EACZpB,WAAW,EACXC,YAAY,EACZC,WACF;EACF,CAAC,GACDoB,KAAK,CAACzC,IAAI,KAAK,UAAU,GACvByC,KAAK,GACL;IACE,GAAGA,KAAK;IACRpC,MAAM,EAAEa,sCAAsC,CAC5CuB,KAAK,CAACpC,MAAM,EACZc,WAAW,EACXC,YAAY,EACZC,WACF;EACF,CACR,CAAC;AACH","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"setupTemplateProxy.js","names":["_general","require","_lodash","_constants","_computeRealProperties","_Renderer","setupTemplateProxy","hostContext","ref","slots","slotted","reversedProxies","asyncHostPropertyEntries","externalSlots","tplStateStoreId","hostBrick","asyncComputedProps","propertyProxies","properties","get","getComputedProps","asyncHostProps","map","from","to","filtered","filter","entry","length","refProperty","computePropertyValue","Boolean","slotProxies","Error","type","quasisMap","Map","_externalSlots$from","insertBricks","bricks","refToSlot","refSlot","expandableSlot","size","hasOwnProperty","i","push","set","refPosition","hostHasForEach","runtimeContext","clamp","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","slotName","quasis","entries","slotConf","flatMap","index","concat","symbolForAsyncComputedPropsFromHost","symbolForTplStateStoreId","children","brick","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachSize","childrenToSlots","Object","fromEntries","routes","setupTemplateExternalRoutesWithForEach","route"],"sources":["../../../../src/internal/CustomTemplates/setupTemplateProxy.ts"],"sourcesContent":["import type { BrickConf, RouteConf, SlotsConfOfBricks } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { clamp } from \"lodash\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n type RuntimeBrickConfWithTplSymbols,\n} from \"./constants.js\";\nimport type { AsyncPropertyEntry, TemplateHostContext } from \"../interfaces.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function setupTemplateProxy(\n hostContext: TemplateHostContext,\n ref: string | undefined,\n slots: SlotsConfOfBricks,\n slotted: boolean\n) {\n const {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots,\n tplStateStoreId,\n hostBrick,\n } = hostContext;\n\n let asyncComputedProps: AsyncPropertyEntry[] | undefined;\n\n if (ref && reversedProxies) {\n const propertyProxies = reversedProxies.properties.get(ref);\n if (propertyProxies) {\n const getComputedProps = (\n asyncHostProps: AsyncPropertyEntry[]\n ): AsyncPropertyEntry[] => {\n return propertyProxies!\n .map<AsyncPropertyEntry | undefined>(({ from, to }) => {\n const filtered = asyncHostProps.filter(\n (entry) => entry[0] === from\n );\n if (filtered.length > 0 && to.refProperty) {\n return [\n to.refProperty,\n computePropertyValue(filtered, from),\n true,\n ];\n }\n })\n .filter(Boolean) as AsyncPropertyEntry[];\n };\n\n asyncComputedProps = getComputedProps(asyncHostPropertyEntries);\n }\n\n const slotProxies = reversedProxies.slots.get(ref);\n\n if (slotProxies && slotted) {\n throw new Error(\n `Can not have proxied slot ref when the ref target has a slot element child, check your template \"${hostBrick.type}\" and ref \"${ref}\"`\n );\n }\n\n if (slotProxies && externalSlots) {\n // Use an approach like template-literal's quasis:\n // `quasi0${0}quais1${1}quasi2...`\n // Every quasi (indexed by `refPosition`) can be slotted with multiple bricks.\n const quasisMap = new Map<string, BrickConf[][]>();\n\n for (const { from, to } of slotProxies) {\n const insertBricks = externalSlots[from]?.bricks ?? [];\n if (!insertBricks.length) {\n continue;\n }\n const refToSlot = to.refSlot ?? from;\n let expandableSlot = quasisMap.get(refToSlot);\n if (!expandableSlot) {\n expandableSlot = [];\n // The size of quasis should be the existed slotted bricks' size plus one.\n const size = hasOwnProperty(slots, refToSlot)\n ? slots[refToSlot].bricks.length + 1\n : 1;\n for (let i = 0; i < size; i += 1) {\n expandableSlot.push([]);\n }\n quasisMap.set(refToSlot, expandableSlot);\n }\n const refPosition = to.refPosition ?? -1;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(\n hostBrick.runtimeContext,\n \"forEachItem\"\n );\n expandableSlot[\n clamp(\n refPosition < 0 ? expandableSlot.length + refPosition : refPosition,\n 0,\n expandableSlot.length - 1\n )\n ].push(\n ...(!hostHasForEach\n ? insertBricks\n : setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostBrick.runtimeContext.forEachItem,\n hostBrick.runtimeContext.forEachIndex!,\n hostBrick.runtimeContext.forEachSize!\n ))\n );\n }\n\n for (const [slotName, quasis] of quasisMap.entries()) {\n if (!hasOwnProperty(slots, slotName)) {\n slots[slotName] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n const slotConf = slots[slotName];\n slotConf.bricks = quasis.flatMap((bricks, index) =>\n index < slotConf.bricks.length\n ? bricks.concat(slotConf.bricks[index])\n : bricks\n );\n\n if (slotConf.bricks.length === 0) {\n delete slots[slotName];\n }\n }\n }\n }\n\n return {\n [symbolForAsyncComputedPropsFromHost]: asyncComputedProps,\n [symbolForTplStateStoreId]: tplStateStoreId,\n };\n}\n\n// External bricks of a template, have the same forEachItem context as their host.\nexport function setupTemplateExternalBricksWithForEach(\n bricks: BrickConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): BrickConf[] {\n return (bricks as RuntimeBrickConfWithTplSymbols[]).map(\n ({ children, slots, ...brick }) => ({\n ...brick,\n [symbolForTPlExternalForEachItem]: forEachItem,\n [symbolForTPlExternalForEachIndex]: forEachIndex,\n [symbolForTPlExternalForEachSize]: forEachSize,\n // Keep `:forEach` bricks as original, since they have their own forEachItem context.\n slots:\n brick.brick === \":forEach\"\n ? childrenToSlots(children, slots)\n : Object.fromEntries(\n Object.entries(childrenToSlots(children, slots) ?? {}).map(\n ([slotName, slotConf]) => [\n slotName,\n slotConf.type === \"routes\"\n ? {\n type: \"routes\",\n routes: setupTemplateExternalRoutesWithForEach(\n slotConf.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : {\n type: \"bricks\",\n bricks: setupTemplateExternalBricksWithForEach(\n slotConf.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n },\n ]\n )\n ),\n })\n );\n}\n\nfunction setupTemplateExternalRoutesWithForEach(\n routes: RouteConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): RouteConf[] {\n return routes.map((route) =>\n route.type === \"routes\"\n ? {\n ...route,\n routes: setupTemplateExternalRoutesWithForEach(\n route.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : route.type === \"redirect\"\n ? route\n : {\n ...route,\n bricks: setupTemplateExternalBricksWithForEach(\n route.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -104,6 +104,10 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
|
|
|
104
104
|
if (!isIncremental) {
|
|
105
105
|
rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);
|
|
106
106
|
}
|
|
107
|
+
const usedProcessors = (0, _storyboard.strictCollectMemberUsage)(route.context, "PROCESSORS", 2);
|
|
108
|
+
if (usedProcessors.size > 0) {
|
|
109
|
+
output.blockingList.push(catchLoad((0, _loader.loadProcessorsImperatively)(usedProcessors, (0, _Runtime.getBrickPackages)()), "processors", [...usedProcessors].join(", "), rendererContext.unknownBricks));
|
|
110
|
+
}
|
|
107
111
|
let newOutput;
|
|
108
112
|
if (route.type === "routes") {
|
|
109
113
|
newOutput = await renderRoutes(returnNode, route.routes, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_registerFormRenderer","_evaluate","_matchStoryboard","_bindListeners","_setupRootRuntimeContext","_routeMatchedMap","_ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","matchRoutes","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","setMatchedRoute","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","setupRootRuntimeContext","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","legacyRenderBrick","errorBoundary","ErrorNode","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","forEachSize","symbolForTPlExternalForEachSize","strict","isStrictMode","length","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","getTracks","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","trackAfterInitial","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","tplStateStoreScope","formStateStoreScope","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","RenderTag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","compute","inUseBrick","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","ref","usedProcessors","strictCollectMemberUsage","size","loadProcessorsImperatively","join","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","matchHomepage","every","prevMatch","newMatch","matchRoute","isEqual","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_registerFormRenderer","_evaluate","_matchStoryboard","_bindListeners","_setupRootRuntimeContext","_routeMatchedMap","_ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","matchRoutes","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","setMatchedRoute","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","usedProcessors","strictCollectMemberUsage","size","catchLoad","loadProcessorsImperatively","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","setupRootRuntimeContext","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","legacyRenderBrick","errorBoundary","ErrorNode","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","forEachSize","symbolForTPlExternalForEachSize","strict","isStrictMode","length","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","getTracks","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","trackAfterInitial","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","tplStateStoreScope","formStateStoreScope","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","RenderTag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","tplTagName","getTagNameOfCustomTemplate","app","id","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","compute","inUseBrick","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","ref","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","matchHomepage","every","prevMatch","newMatch","matchRoute","isEqual","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Runtime.js","names":["_i18n","require","_loader","_general","_moment","_interopRequireDefault","_history","_matchStoryboard","_Router","_i18n2","_Notification","_Dialog","_injected","_hasInstalledApp","_devtools","_getV2RuntimeFromDll","_customizeColorTheme","runtime","bootstrapData","router","processedBrickPackages","hooks","exports","createRuntime","options","Error","listenDevtoolsEagerly","initializeI18n","NS","locales","moment","locale","i18n","language","on","createHistory","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getV2RuntimeFromDll","getRuntimeV2","Proxy","getRuntime","get","args","key","Reflect","initialized","bootstrapped","version","initialize","data","_data$settings","normalizeBootstrapData","notification","dialog","_internalApiGetPresetBricks","loadNotificationService","loadBricks","loadDialogService","customizeColorTheme","settings","misc","theme","bootstrap","Router","storyboards","getRecentApps","_router","getCurrentApp","_router2","currentApp","hasInstalledApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","_router5","baseTitle","title","localeTitle","getNavConfig","_router6","bricks","loadBricksImperatively","getBrickPackages","isObject","deepFreeze","brickPackages","processPublicDepsPackages","pubDeps","length","bricksMap","Map","forEach","pkg","pkgName","filePath","split","has","set","Array","from","values","_bootstrapData7","injectedBrickPackages","window","STANDALONE_BRICK_PACKAGES","PUBLIC_DEPS","_bootstrapData8","presetBricks","_internalApiGetRenderId","_router7","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData9","matchStoryboard","_internalApiGetRuntimeContext","_router8","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData10","find","storyboard","app","id","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\nimport { ThemeSettings, customizeColorTheme } from \"./customizeColorTheme.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\nlet processedBrickPackages: BrickPackage[] | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): void;\n onClose(listener: () => void): void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n readonly version: number | undefined = 3;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = _internalApiGetPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n customizeColorTheme(data.settings?.misc?.theme as ThemeSettings);\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n\n document.title =\n (router?.getRecentApps().currentApp?.localeTitle as string) ||\n (pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle);\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nfunction processPublicDepsPackages(\n brickPackages: BrickPackage[],\n pubDeps: BrickPackage[] | undefined\n): BrickPackage[] {\n if (!pubDeps?.length) return brickPackages;\n\n const bricksMap = new Map();\n\n // bootstrapData 数据和 pubDeps 中可能同时存在同一个包名,需要过滤去重, 以 pubDeps 中的包为准\n [...pubDeps, ...brickPackages].forEach((pkg) => {\n const pkgName = pkg.filePath.split(\"/\")[1];\n // 始终将 pubDeps 放在前面\n if (!bricksMap.has(pkgName)) {\n bricksMap.set(pkgName, pkg);\n }\n });\n\n return Array.from(bricksMap.values());\n}\n\nexport function getBrickPackages(): BrickPackage[] {\n return (\n // Not necessary to process brick packages multiple times.\n processedBrickPackages ??\n (processedBrickPackages = processPublicDepsPackages(\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[] | undefined) ??\n [],\n window.PUBLIC_DEPS as BrickPackage[] | undefined\n ))\n );\n}\n\nexport function _internalApiGetPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n error?: string | false;\n };\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Runtime.js","names":["_i18n","require","_loader","_general","_moment","_interopRequireDefault","_history","_matchStoryboard","_Router","_i18n2","_Notification","_Dialog","_injected","_hasInstalledApp","_devtools","_getV2RuntimeFromDll","_customizeColorTheme","runtime","bootstrapData","router","processedBrickPackages","hooks","exports","createRuntime","options","Error","listenDevtoolsEagerly","initializeI18n","NS","locales","moment","locale","i18n","language","on","createHistory","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getV2RuntimeFromDll","getRuntimeV2","Proxy","getRuntime","get","args","key","Reflect","initialized","bootstrapped","version","initialize","data","_data$settings","normalizeBootstrapData","notification","dialog","_internalApiGetPresetBricks","loadNotificationService","loadBricks","loadDialogService","customizeColorTheme","settings","misc","theme","bootstrap","Router","storyboards","getRecentApps","_router","getCurrentApp","_router2","currentApp","hasInstalledApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","_router5","baseTitle","title","localeTitle","getNavConfig","_router6","bricks","loadBricksImperatively","getBrickPackages","isObject","deepFreeze","brickPackages","processPublicDepsPackages","pubDeps","length","bricksMap","Map","forEach","pkg","pkgName","filePath","split","has","set","Array","from","values","_bootstrapData7","injectedBrickPackages","window","STANDALONE_BRICK_PACKAGES","PUBLIC_DEPS","_bootstrapData8","presetBricks","_internalApiGetRenderId","_router7","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData9","matchStoryboard","_internalApiGetRuntimeContext","_router8","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData10","find","storyboard","app","id","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\nimport { ThemeSettings, customizeColorTheme } from \"./customizeColorTheme.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\nlet processedBrickPackages: BrickPackage[] | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): () => void;\n onClose(listener: () => void): () => void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n readonly version: number | undefined = 3;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = _internalApiGetPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n customizeColorTheme(data.settings?.misc?.theme as ThemeSettings);\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n\n document.title =\n (router?.getRecentApps().currentApp?.localeTitle as string) ||\n (pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle);\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nfunction processPublicDepsPackages(\n brickPackages: BrickPackage[],\n pubDeps: BrickPackage[] | undefined\n): BrickPackage[] {\n if (!pubDeps?.length) return brickPackages;\n\n const bricksMap = new Map();\n\n // bootstrapData 数据和 pubDeps 中可能同时存在同一个包名,需要过滤去重, 以 pubDeps 中的包为准\n [...pubDeps, ...brickPackages].forEach((pkg) => {\n const pkgName = pkg.filePath.split(\"/\")[1];\n // 始终将 pubDeps 放在前面\n if (!bricksMap.has(pkgName)) {\n bricksMap.set(pkgName, pkg);\n }\n });\n\n return Array.from(bricksMap.values());\n}\n\nexport function getBrickPackages(): BrickPackage[] {\n return (\n // Not necessary to process brick packages multiple times.\n processedBrickPackages ??\n (processedBrickPackages = processPublicDepsPackages(\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[] | undefined) ??\n [],\n window.PUBLIC_DEPS as BrickPackage[] | undefined\n ))\n );\n}\n\nexport function _internalApiGetPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n error?: string | false;\n };\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupTemplateProxy.js","names":["hasOwnProperty","clamp","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","computePropertyValue","childrenToSlots","setupTemplateProxy","hostContext","ref","slots","slotted","reversedProxies","asyncHostPropertyEntries","externalSlots","tplStateStoreId","hostBrick","asyncComputedProps","propertyProxies","properties","get","getComputedProps","asyncHostProps","map","_ref","from","to","filtered","filter","entry","length","refProperty","Boolean","slotProxies","Error","type","quasisMap","Map","_externalSlots$from$b","_externalSlots$from","_to$refSlot","_to$refPosition","insertBricks","bricks","refToSlot","refSlot","expandableSlot","size","i","push","set","refPosition","hostHasForEach","runtimeContext","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","slotName","quasis","entries","slotConf","flatMap","index","concat","_ref2","_childrenToSlots","children","brick","Object","fromEntries","_ref3","routes","setupTemplateExternalRoutesWithForEach","route"],"sources":["../../../../src/internal/CustomTemplates/setupTemplateProxy.ts"],"sourcesContent":["import type { BrickConf, RouteConf, SlotsConfOfBricks } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { clamp } from \"lodash\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n type RuntimeBrickConfWithTplSymbols,\n} from \"./constants.js\";\nimport type { AsyncPropertyEntry, TemplateHostContext } from \"../interfaces.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function setupTemplateProxy(\n hostContext: TemplateHostContext,\n ref: string | undefined,\n slots: SlotsConfOfBricks,\n slotted: boolean\n) {\n const {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots,\n tplStateStoreId,\n hostBrick,\n } = hostContext;\n\n let asyncComputedProps: AsyncPropertyEntry[] | undefined;\n\n if (ref && reversedProxies) {\n const propertyProxies = reversedProxies.properties.get(ref);\n if (propertyProxies) {\n const getComputedProps = (\n asyncHostProps: AsyncPropertyEntry[]\n ): AsyncPropertyEntry[] => {\n return propertyProxies!\n .map(({ from, to }) => {\n const filtered = asyncHostProps.filter(\n (entry) => entry[0] === from\n );\n if (filtered.length > 0 && to.refProperty) {\n return [\n to.refProperty,\n computePropertyValue(filtered, from),\n true,\n ];\n }\n })\n .filter(Boolean) as [string, Promise<unknown>][];\n };\n\n asyncComputedProps = getComputedProps(asyncHostPropertyEntries);\n }\n\n const slotProxies = reversedProxies.slots.get(ref);\n\n if (slotProxies && slotted) {\n throw new Error(\n `Can not have proxied slot ref when the ref target has a slot element child, check your template \"${hostBrick.type}\" and ref \"${ref}\"`\n );\n }\n\n if (slotProxies && externalSlots) {\n // Use an approach like template-literal's quasis:\n // `quasi0${0}quais1${1}quasi2...`\n // Every quasi (indexed by `refPosition`) can be slotted with multiple bricks.\n const quasisMap = new Map<string, BrickConf[][]>();\n\n for (const { from, to } of slotProxies) {\n const insertBricks = externalSlots[from]?.bricks ?? [];\n if (!insertBricks.length) {\n continue;\n }\n const refToSlot = to.refSlot ?? from;\n let expandableSlot = quasisMap.get(refToSlot);\n if (!expandableSlot) {\n expandableSlot = [];\n // The size of quasis should be the existed slotted bricks' size plus one.\n const size = hasOwnProperty(slots, refToSlot)\n ? slots[refToSlot].bricks.length + 1\n : 1;\n for (let i = 0; i < size; i += 1) {\n expandableSlot.push([]);\n }\n quasisMap.set(refToSlot, expandableSlot);\n }\n const refPosition = to.refPosition ?? -1;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(\n hostBrick.runtimeContext,\n \"forEachItem\"\n );\n expandableSlot[\n clamp(\n refPosition < 0 ? expandableSlot.length + refPosition : refPosition,\n 0,\n expandableSlot.length - 1\n )\n ].push(\n ...(!hostHasForEach\n ? insertBricks\n : setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostBrick.runtimeContext.forEachItem,\n hostBrick.runtimeContext.forEachIndex!,\n hostBrick.runtimeContext.forEachSize!\n ))\n );\n }\n\n for (const [slotName, quasis] of quasisMap.entries()) {\n if (!hasOwnProperty(slots, slotName)) {\n slots[slotName] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n const slotConf = slots[slotName];\n slotConf.bricks = quasis.flatMap((bricks, index) =>\n index < slotConf.bricks.length\n ? bricks.concat(slotConf.bricks[index])\n : bricks\n );\n\n if (slotConf.bricks.length === 0) {\n delete slots[slotName];\n }\n }\n }\n }\n\n return {\n [symbolForAsyncComputedPropsFromHost]: asyncComputedProps,\n [symbolForTplStateStoreId]: tplStateStoreId,\n };\n}\n\n// External bricks of a template, have the same forEachItem context as their host.\nexport function setupTemplateExternalBricksWithForEach(\n bricks: BrickConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): BrickConf[] {\n return (bricks as RuntimeBrickConfWithTplSymbols[]).map(\n ({ children, slots, ...brick }) => ({\n ...brick,\n [symbolForTPlExternalForEachItem]: forEachItem,\n [symbolForTPlExternalForEachIndex]: forEachIndex,\n [symbolForTPlExternalForEachSize]: forEachSize,\n // Keep `:forEach` bricks as original, since they have their own forEachItem context.\n slots:\n brick.brick === \":forEach\"\n ? childrenToSlots(children, slots)\n : Object.fromEntries(\n Object.entries(childrenToSlots(children, slots) ?? {}).map(\n ([slotName, slotConf]) => [\n slotName,\n slotConf.type === \"routes\"\n ? {\n type: \"routes\",\n routes: setupTemplateExternalRoutesWithForEach(\n slotConf.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : {\n type: \"bricks\",\n bricks: setupTemplateExternalBricksWithForEach(\n slotConf.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n },\n ]\n )\n ),\n })\n );\n}\n\nfunction setupTemplateExternalRoutesWithForEach(\n routes: RouteConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): RouteConf[] {\n return routes.map((route) =>\n route.type === \"routes\"\n ? {\n ...route,\n routes: setupTemplateExternalRoutesWithForEach(\n route.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : route.type === \"redirect\"\n ? route\n : {\n ...route,\n bricks: setupTemplateExternalBricksWithForEach(\n route.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"setupTemplateProxy.js","names":["hasOwnProperty","clamp","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","computePropertyValue","childrenToSlots","setupTemplateProxy","hostContext","ref","slots","slotted","reversedProxies","asyncHostPropertyEntries","externalSlots","tplStateStoreId","hostBrick","asyncComputedProps","propertyProxies","properties","get","getComputedProps","asyncHostProps","map","_ref","from","to","filtered","filter","entry","length","refProperty","Boolean","slotProxies","Error","type","quasisMap","Map","_externalSlots$from$b","_externalSlots$from","_to$refSlot","_to$refPosition","insertBricks","bricks","refToSlot","refSlot","expandableSlot","size","i","push","set","refPosition","hostHasForEach","runtimeContext","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","slotName","quasis","entries","slotConf","flatMap","index","concat","_ref2","_childrenToSlots","children","brick","Object","fromEntries","_ref3","routes","setupTemplateExternalRoutesWithForEach","route"],"sources":["../../../../src/internal/CustomTemplates/setupTemplateProxy.ts"],"sourcesContent":["import type { BrickConf, RouteConf, SlotsConfOfBricks } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { clamp } from \"lodash\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n type RuntimeBrickConfWithTplSymbols,\n} from \"./constants.js\";\nimport type { AsyncPropertyEntry, TemplateHostContext } from \"../interfaces.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function setupTemplateProxy(\n hostContext: TemplateHostContext,\n ref: string | undefined,\n slots: SlotsConfOfBricks,\n slotted: boolean\n) {\n const {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots,\n tplStateStoreId,\n hostBrick,\n } = hostContext;\n\n let asyncComputedProps: AsyncPropertyEntry[] | undefined;\n\n if (ref && reversedProxies) {\n const propertyProxies = reversedProxies.properties.get(ref);\n if (propertyProxies) {\n const getComputedProps = (\n asyncHostProps: AsyncPropertyEntry[]\n ): AsyncPropertyEntry[] => {\n return propertyProxies!\n .map<AsyncPropertyEntry | undefined>(({ from, to }) => {\n const filtered = asyncHostProps.filter(\n (entry) => entry[0] === from\n );\n if (filtered.length > 0 && to.refProperty) {\n return [\n to.refProperty,\n computePropertyValue(filtered, from),\n true,\n ];\n }\n })\n .filter(Boolean) as AsyncPropertyEntry[];\n };\n\n asyncComputedProps = getComputedProps(asyncHostPropertyEntries);\n }\n\n const slotProxies = reversedProxies.slots.get(ref);\n\n if (slotProxies && slotted) {\n throw new Error(\n `Can not have proxied slot ref when the ref target has a slot element child, check your template \"${hostBrick.type}\" and ref \"${ref}\"`\n );\n }\n\n if (slotProxies && externalSlots) {\n // Use an approach like template-literal's quasis:\n // `quasi0${0}quais1${1}quasi2...`\n // Every quasi (indexed by `refPosition`) can be slotted with multiple bricks.\n const quasisMap = new Map<string, BrickConf[][]>();\n\n for (const { from, to } of slotProxies) {\n const insertBricks = externalSlots[from]?.bricks ?? [];\n if (!insertBricks.length) {\n continue;\n }\n const refToSlot = to.refSlot ?? from;\n let expandableSlot = quasisMap.get(refToSlot);\n if (!expandableSlot) {\n expandableSlot = [];\n // The size of quasis should be the existed slotted bricks' size plus one.\n const size = hasOwnProperty(slots, refToSlot)\n ? slots[refToSlot].bricks.length + 1\n : 1;\n for (let i = 0; i < size; i += 1) {\n expandableSlot.push([]);\n }\n quasisMap.set(refToSlot, expandableSlot);\n }\n const refPosition = to.refPosition ?? -1;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(\n hostBrick.runtimeContext,\n \"forEachItem\"\n );\n expandableSlot[\n clamp(\n refPosition < 0 ? expandableSlot.length + refPosition : refPosition,\n 0,\n expandableSlot.length - 1\n )\n ].push(\n ...(!hostHasForEach\n ? insertBricks\n : setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostBrick.runtimeContext.forEachItem,\n hostBrick.runtimeContext.forEachIndex!,\n hostBrick.runtimeContext.forEachSize!\n ))\n );\n }\n\n for (const [slotName, quasis] of quasisMap.entries()) {\n if (!hasOwnProperty(slots, slotName)) {\n slots[slotName] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n const slotConf = slots[slotName];\n slotConf.bricks = quasis.flatMap((bricks, index) =>\n index < slotConf.bricks.length\n ? bricks.concat(slotConf.bricks[index])\n : bricks\n );\n\n if (slotConf.bricks.length === 0) {\n delete slots[slotName];\n }\n }\n }\n }\n\n return {\n [symbolForAsyncComputedPropsFromHost]: asyncComputedProps,\n [symbolForTplStateStoreId]: tplStateStoreId,\n };\n}\n\n// External bricks of a template, have the same forEachItem context as their host.\nexport function setupTemplateExternalBricksWithForEach(\n bricks: BrickConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): BrickConf[] {\n return (bricks as RuntimeBrickConfWithTplSymbols[]).map(\n ({ children, slots, ...brick }) => ({\n ...brick,\n [symbolForTPlExternalForEachItem]: forEachItem,\n [symbolForTPlExternalForEachIndex]: forEachIndex,\n [symbolForTPlExternalForEachSize]: forEachSize,\n // Keep `:forEach` bricks as original, since they have their own forEachItem context.\n slots:\n brick.brick === \":forEach\"\n ? childrenToSlots(children, slots)\n : Object.fromEntries(\n Object.entries(childrenToSlots(children, slots) ?? {}).map(\n ([slotName, slotConf]) => [\n slotName,\n slotConf.type === \"routes\"\n ? {\n type: \"routes\",\n routes: setupTemplateExternalRoutesWithForEach(\n slotConf.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : {\n type: \"bricks\",\n bricks: setupTemplateExternalBricksWithForEach(\n slotConf.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n },\n ]\n )\n ),\n })\n );\n}\n\nfunction setupTemplateExternalRoutesWithForEach(\n routes: RouteConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): RouteConf[] {\n return routes.map((route) =>\n route.type === \"routes\"\n ? {\n ...route,\n routes: setupTemplateExternalRoutesWithForEach(\n route.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : route.type === \"redirect\"\n ? route\n : {\n ...route,\n bricks: setupTemplateExternalBricksWithForEach(\n route.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -93,6 +93,10 @@ export async function renderRoutes(returnNode, routes, _runtimeContext, renderer
|
|
|
93
93
|
if (!isIncremental) {
|
|
94
94
|
rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);
|
|
95
95
|
}
|
|
96
|
+
const usedProcessors = strictCollectMemberUsage(route.context, "PROCESSORS", 2);
|
|
97
|
+
if (usedProcessors.size > 0) {
|
|
98
|
+
output.blockingList.push(catchLoad(loadProcessorsImperatively(usedProcessors, getBrickPackages()), "processors", [...usedProcessors].join(", "), rendererContext.unknownBricks));
|
|
99
|
+
}
|
|
96
100
|
let newOutput;
|
|
97
101
|
if (route.type === "routes") {
|
|
98
102
|
newOutput = await renderRoutes(returnNode, route.routes, runtimeContext, rendererContext, routePath, menuRequestNode, slotId, undefined, initialTracker);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","_ref2","_ref2$node","tplStateStoreScope","formStateStoreScope","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","catchLoad","unknownBricks","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","_confProps","inUseBrick","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","usedProcessors","size","join","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref3","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","usedProcessors","size","catchLoad","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","_ref2","_ref2$node","tplStateStoreScope","formStateStoreScope","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","_confProps","inUseBrick","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref3","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Runtime.js","names":["i18n","initializeI18n","loadBricksImperatively","deepFreeze","isObject","moment","createHistory","matchStoryboard","Router","NS","locales","loadNotificationService","loadDialogService","injectedBrickPackages","hasInstalledApp","listenDevtoolsEagerly","getV2RuntimeFromDll","customizeColorTheme","runtime","bootstrapData","router","processedBrickPackages","hooks","createRuntime","options","Error","locale","language","on","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getRuntimeV2","Proxy","getRuntime","get","key","arguments","length","undefined","Reflect","_initialized","WeakMap","_bootstrapped","constructor","_classPrivateFieldInitSpec","_defineProperty","initialize","data","_data$settings","_classPrivateFieldGet","_classPrivateFieldSet","normalizeBootstrapData","notification","dialog","_internalApiGetPresetBricks","loadBricks","settings","misc","theme","bootstrap","storyboards","getRecentApps","_router$getRecentApps","_router","getCurrentApp","_router2","currentApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData$deskto","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData$siteSo","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","_router5","baseTitle","title","localeTitle","getNavConfig","_router6","bricks","getBrickPackages","brickPackages","processPublicDepsPackages","pubDeps","bricksMap","Map","forEach","pkg","pkgName","filePath","split","has","set","Array","from","values","_processedBrickPackag","_ref","_ref2","_bootstrapData$brickP","_bootstrapData7","window","STANDALONE_BRICK_PACKAGES","PUBLIC_DEPS","_bootstrapData$settin","_bootstrapData8","presetBricks","_internalApiGetRenderId","_router7","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData$storyb","_bootstrapData9","_internalApiGetRuntimeContext","_router8","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData10","find","storyboard","app","id","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\nimport { ThemeSettings, customizeColorTheme } from \"./customizeColorTheme.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\nlet processedBrickPackages: BrickPackage[] | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): void;\n onClose(listener: () => void): void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n readonly version: number | undefined = 3;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = _internalApiGetPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n customizeColorTheme(data.settings?.misc?.theme as ThemeSettings);\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n\n document.title =\n (router?.getRecentApps().currentApp?.localeTitle as string) ||\n (pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle);\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nfunction processPublicDepsPackages(\n brickPackages: BrickPackage[],\n pubDeps: BrickPackage[] | undefined\n): BrickPackage[] {\n if (!pubDeps?.length) return brickPackages;\n\n const bricksMap = new Map();\n\n // bootstrapData 数据和 pubDeps 中可能同时存在同一个包名,需要过滤去重, 以 pubDeps 中的包为准\n [...pubDeps, ...brickPackages].forEach((pkg) => {\n const pkgName = pkg.filePath.split(\"/\")[1];\n // 始终将 pubDeps 放在前面\n if (!bricksMap.has(pkgName)) {\n bricksMap.set(pkgName, pkg);\n }\n });\n\n return Array.from(bricksMap.values());\n}\n\nexport function getBrickPackages(): BrickPackage[] {\n return (\n // Not necessary to process brick packages multiple times.\n processedBrickPackages ??\n (processedBrickPackages = processPublicDepsPackages(\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[] | undefined) ??\n [],\n window.PUBLIC_DEPS as BrickPackage[] | undefined\n ))\n );\n}\n\nexport function _internalApiGetPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n error?: string | false;\n };\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Runtime.js","names":["i18n","initializeI18n","loadBricksImperatively","deepFreeze","isObject","moment","createHistory","matchStoryboard","Router","NS","locales","loadNotificationService","loadDialogService","injectedBrickPackages","hasInstalledApp","listenDevtoolsEagerly","getV2RuntimeFromDll","customizeColorTheme","runtime","bootstrapData","router","processedBrickPackages","hooks","createRuntime","options","Error","locale","language","on","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getRuntimeV2","Proxy","getRuntime","get","key","arguments","length","undefined","Reflect","_initialized","WeakMap","_bootstrapped","constructor","_classPrivateFieldInitSpec","_defineProperty","initialize","data","_data$settings","_classPrivateFieldGet","_classPrivateFieldSet","normalizeBootstrapData","notification","dialog","_internalApiGetPresetBricks","loadBricks","settings","misc","theme","bootstrap","storyboards","getRecentApps","_router$getRecentApps","_router","getCurrentApp","_router2","currentApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData$deskto","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData$siteSo","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","_router5","baseTitle","title","localeTitle","getNavConfig","_router6","bricks","getBrickPackages","brickPackages","processPublicDepsPackages","pubDeps","bricksMap","Map","forEach","pkg","pkgName","filePath","split","has","set","Array","from","values","_processedBrickPackag","_ref","_ref2","_bootstrapData$brickP","_bootstrapData7","window","STANDALONE_BRICK_PACKAGES","PUBLIC_DEPS","_bootstrapData$settin","_bootstrapData8","presetBricks","_internalApiGetRenderId","_router7","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData$storyb","_bootstrapData9","_internalApiGetRuntimeContext","_router8","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData10","find","storyboard","app","id","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\nimport { ThemeSettings, customizeColorTheme } from \"./customizeColorTheme.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\nlet processedBrickPackages: BrickPackage[] | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): () => void;\n onClose(listener: () => void): () => void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n readonly version: number | undefined = 3;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = _internalApiGetPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n customizeColorTheme(data.settings?.misc?.theme as ThemeSettings);\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n\n document.title =\n (router?.getRecentApps().currentApp?.localeTitle as string) ||\n (pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle);\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nfunction processPublicDepsPackages(\n brickPackages: BrickPackage[],\n pubDeps: BrickPackage[] | undefined\n): BrickPackage[] {\n if (!pubDeps?.length) return brickPackages;\n\n const bricksMap = new Map();\n\n // bootstrapData 数据和 pubDeps 中可能同时存在同一个包名,需要过滤去重, 以 pubDeps 中的包为准\n [...pubDeps, ...brickPackages].forEach((pkg) => {\n const pkgName = pkg.filePath.split(\"/\")[1];\n // 始终将 pubDeps 放在前面\n if (!bricksMap.has(pkgName)) {\n bricksMap.set(pkgName, pkg);\n }\n });\n\n return Array.from(bricksMap.values());\n}\n\nexport function getBrickPackages(): BrickPackage[] {\n return (\n // Not necessary to process brick packages multiple times.\n processedBrickPackages ??\n (processedBrickPackages = processPublicDepsPackages(\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[] | undefined) ??\n [],\n window.PUBLIC_DEPS as BrickPackage[] | undefined\n ))\n );\n}\n\nexport function _internalApiGetPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n error?: string | false;\n };\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -53,8 +53,8 @@ export interface RuntimeHooks {
|
|
|
53
53
|
messageDispatcher?: {
|
|
54
54
|
subscribe(...args: unknown[]): Promise<unknown>;
|
|
55
55
|
unsubscribe(...args: unknown[]): Promise<unknown>;
|
|
56
|
-
onMessage(channel: string, listener: (data: unknown) => void): void;
|
|
57
|
-
onClose(listener: () => void): void;
|
|
56
|
+
onMessage(channel: string, listener: (data: unknown) => void): () => void;
|
|
57
|
+
onClose(listener: () => void): () => void;
|
|
58
58
|
reset(): void;
|
|
59
59
|
};
|
|
60
60
|
pageView?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/runtime",
|
|
3
|
-
"version": "1.57.
|
|
3
|
+
"version": "1.57.5",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"@next-core/build-next-libs": "^1.0.20",
|
|
68
68
|
"@next-core/test-next": "^1.1.7"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "3c932b7a7f6c68f4cd749fdb1ffadb6abcc2c2eb"
|
|
71
71
|
}
|