@griddo/cx 11.10.30-rc.0 → 11.10.34-rc.1
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/build/commands/end-render.js +4 -4
- package/build/commands/end-render.js.map +3 -3
- package/build/commands/prepare-assets-directory.js +2 -2
- package/build/commands/prepare-assets-directory.js.map +3 -3
- package/build/commands/prepare-domains-render.js +5 -5
- package/build/commands/prepare-domains-render.js.map +3 -3
- package/build/commands/reset-render.js +4 -4
- package/build/commands/reset-render.js.map +3 -3
- package/build/commands/start-render.js +21 -21
- package/build/commands/start-render.js.map +3 -3
- package/build/commands/upload-search-content.js +6 -6
- package/build/commands/upload-search-content.js.map +3 -3
- package/build/index.js +6 -9
- package/build/shared/envs.d.ts +2 -1
- package/exporter/core/life-cycle.ts +3 -1
- package/exporter/shared/envs.ts +4 -6
- package/package.json +3 -3
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ei=Object.create;var Et=Object.defineProperty;var ti=Object.getOwnPropertyDescriptor;var ri=Object.getOwnPropertyNames;var oi=Object.getPrototypeOf,ii=Object.prototype.hasOwnProperty;var ni=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ri(e))!ii.call(t,i)&&i!==r&&Et(t,i,{get:()=>e[i],enumerable:!(o=ti(e,i))||o.enumerable});return t};var u=(t,e,r)=>(r=t!=null?ei(oi(t)):{},ni(e||!t||!t.__esModule?Et(r,"default",{value:t,enumerable:!0}):r,t));var er=u(require("node:path"));var si=process.env.NO_COLORS,ai="\x1B[0m",_t={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",bold:"\x1B[1m",dim:"\x1B[2m"},w={};for(let t in _t){let e=t;w[e]=r=>si?r.toString():`${_t[e]}${r}${ai}`}var _={FROM_SCRATCH:"FROM_SCRATCH",INCREMENTAL:"INCREMENTAL",IDLE:"IDLE",ERROR:"ERROR",COMPLETED:"COMPLETED"};var et=u(require("node:fs/promises")),Ae=u(require("node:path"));var $t=u(require("node:path"));var It=u(require("node:fs"));var Z=u(require("node:path")),Tt=u(require("node:process")),xt=require("node:url"),Pt=t=>t instanceof URL?(0,xt.fileURLToPath)(t):t;function At(t,e={}){let{cwd:r=Tt.default.cwd(),type:o="file",stopAt:i}=e,n=Z.default.resolve(Pt(r)??""),{root:s}=Z.default.parse(n),a=i?Z.default.resolve(n,Pt(i)):s,d=Z.default.isAbsolute(t);for(;;){let m=d?t:Z.default.join(n,t);try{let f=It.default.statSync(m,{throwIfNoEntry:!1});if(o==="file"&&f?.isFile()||o==="directory"&&f?.isDirectory())return m}catch{}if(n===a||n===s)break;n=Z.default.dirname(n)}}function vt(t){let{cwd:e}=t||{},r=At("package.json",{cwd:e});return r&&$t.default.dirname(r)}var{env:y}=process;function W(t){if(!t)return!1;switch(t.trim().toLowerCase()){case"1":case"true":case"yes":case"y":case"on":return!0;default:return!1}}var Ke=y.GRIDDO_API_URL||y.API_URL,Ot=y.GRIDDO_PUBLIC_API_URL||y.PUBLIC_API_URL,Ft=y.botEmail||y.GRIDDO_BOT_USER,Ct=y.botPassword||y.GRIDDO_BOT_PASSWORD,qi=W(y.GRIDDO_AI_EMBEDDINGS||y.GRIDDO_API_AI_EMBEDDINGS),ze=Number.parseInt(y.GRIDDO_API_CONCURRENCY_COUNT||y.GRIDDO_RENDER_CONCURRENCY_COUNT||"10"),Qe=y.GRIDDO_ASSET_PREFIX||y.ASSET_PREFIX||y.GRIDDO_RENDER_ASSET_PREFIX,ae=W(y.GRIDDO_BUILD_LOGS||y.GRIDDO_RENDER_BUILD_LOGS),Lt=Number.parseInt(y.GRIDDO_RENDER_BUILD_LOGS_BUFFER_SIZE||"500"),Nt=y.GRIDDO_REACT_APP_INSTANCE||y.REACT_APP_INSTANCE||y.GRIDDO_APP_INSTANCE||y.GRIDDO_EDITOR_APP_INSTANCIE,Gt=W(y.GRIDDO_RENDER_DISABLE_LLMS_TXT),Yi=W(y.GRIDDO_SEARCH_FEATURE||y.GRIDDO_RENDER_SEARCH_FEATURE),Vi=W(y.GRIDDO_RENDER_SKIP_BUILD_CHECKS),jt=W(y.GRIDDO_RENDER_SSG_BUNDLE_ANALYZER),Mt=W(y.GRIDDO_RENDER_SSG_VERBOSE_LOGS),Xi=W(y.GRIDDO_RENDER_USE_DIST_BACKUP),Bt=W(y.GRIDDO_VERBOSE_LOGS||y.GRIDDO_RENDER_VERBOSE_LOGS),kt=Number.parseInt(y.GRIDDO_RENDER_API_FETCH_RETRY_WAIT_SECONDS||"4"),Ze=Number.parseInt(y.GRIDDO_RENDER_API_FETCH_RETRY_ATTEMPTS||"4"),Ht=Number.parseInt(y.GRIDDO_RENDER_LIFECYCLE_RETRY_ATTEMPTS||"1");var c=class t{constructor(){}static verbose(...e){Bt&&console.log(w.yellow("verbose"),w.dim(e.join(" ")))}static build(...e){ae&&t.log(...e)}static info(...e){console.log(`${w.blue("info")} ${e.join(" ")}`)}static success(...e){console.log(`${w.green("success")} ${e.join(" ")}`)}static error(...e){console.error(`${w.red("error")} ${e.join(" ")}`)}static warn(...e){console.warn(`${w.yellow("warn")} ${e.join(" ")}`)}static log(...e){console.log(...e)}};var ci=vt({cwd:Ae.default.resolve(__dirname,"../../..")})||"",di=Ae.default.join(ci,".griddo/cache"),Ut=Ae.default.join(di,"db.json");async function b(t=""){let e=t||Ut;try{return JSON.parse(await et.default.readFile(e,"utf-8"))}catch(r){throw c.error(`Failed to read DB file at ${e}:`,r),r}}async function L(t,e=""){let r=e||Ut;try{await et.default.writeFile(r,JSON.stringify(t,null," "))}catch(o){throw c.error(`Failed to write DB file at ${r}:`,o),o}}var ot=u(require("node:fs/promises")),X=u(require("node:path"));var S=u(require("node:fs/promises")),J=u(require("node:path"));var ce={error:"ArtifactError",message:"There was a problem with an artifact",expected:"An external process may have has modified or deleted one of the artifacts (files and directories).",hint:"Have there been any recent deployments? These can delete directories from the current render."};var Wt=(t,e)=>({error:"LifecycleExecutionError",message:`Exceeded maximum retry attempts (${t}) for ${e} LifeCycle`}),Jt={error:"LoginError",message:"There was a problem logging in to the API",expected:"This happens if the API is currently not working or the credentials are incorrect."};var qt={error:"RenderUUIDError",message:`Render sentinel file does not exist.
|
|
2
2
|
The rendering UUID cannot be read safely.
|
|
3
3
|
There was probably an instance deployment during the render, and files were deleted.
|
|
4
4
|
|
|
5
|
-
The files generated in this render will not be published.`},
|
|
5
|
+
The files generated in this render will not be published.`},Yt={error:"WriteToStoreError",message:"There was an error writing a file to the Store directory",hint:"There may be an issue such as lack of space or permissions preventing the file from being written."};async function tt(t){if(!await D(t))return;let e=(await S.default.readdir(t,{withFileTypes:!0})).filter(r=>r.isDirectory());for(let r of e){let o=J.default.join(t,r.name);await li(o)&&await S.default.rm(o,{recursive:!0})}}async function Vt(t,e){for(let r of t)try{await D(r)||(await S.default.mkdir(r,{recursive:!0,...e}),c.verbose(`create directory: ${r}`))}catch(o){A(ce,o)}}async function Xt(t,e,r,o={withBackup:!1}){let{withBackup:i}=o;for(let n of r){let s=J.default.join(t,n),a=J.default.join(e,n);if(!await D(s)){c.info(`(Maybe first render) Source directory does not exist: ${s}`);continue}i&&(await Qt(a),c.verbose(`create backup: ${a}`));try{await D(a)&&(await S.default.rm(a,{recursive:!0,force:!0}),c.verbose(`clean destination: ${a}`)),await S.default.cp(s,a,{recursive:!0,preserveTimestamps:!0}),c.verbose(`copy: ${s} to ${a}`),i&&(await zt(a),c.verbose(`delete backup: ${a}`))}catch(d){i&&(await Kt(a),c.verbose("Backup has been restored.")),A(ce,d)}}}async function ee(t,e,r,o){let{override:i,withBackup:n}=o||{};for(let s of r){let a=J.default.join(t,s),d=J.default.join(e,s);if(await D(a)){n&&await Qt(d);try{i&&await D(d)&&await S.default.rm(d,{recursive:!0,force:!0}),await S.default.rename(a,d),c.verbose(`moved: ${a} to ${d}`),n&&await zt(d)}catch(m){n&&(await Kt(d),c.info("Backup has been restored.")),A(ce,m)}}}}async function de(t){for(let e of t)try{await S.default.rm(e,{recursive:!0,force:!0}),c.verbose(`artifact removed: ${e}`)}catch(r){A(ce,r)}}async function Kt(t,e="-BACKUP"){let r=t+e;try{await S.default.rename(r,t),c.info(`Backup ${r} has been restored`)}catch{throw new Error(`Error while delete ${r} backup`)}}async function zt(t,e="-BACKUP"){let r=t+e;if(await D(r))try{await S.default.rm(r,{recursive:!0,force:!0}),c.verbose(`Backup ${r} has been deleted`)}catch{throw new Error(`Error while delete ${r} backup`)}}async function Qt(t,e="-BACKUP"){let r=t+e;if(await D(t)){if(await D(r)){c.warn(`Destination ${r} already exists`);return}try{await S.default.rename(t,r),c.verbose(`Backup of ${t} has been created in ${r}`)}catch(o){c.error(`Error while coping ${t} to ${r} backup`),A(ce,o)}}}async function li(t){let e=(await S.default.readdir(t,{withFileTypes:!0,recursive:!0})).filter(o=>o.isFile()&&!J.default.basename(o.name).startsWith(".")),r=e.filter(o=>o.name.endsWith(".xml"));if(e.length===r.length)return!0}async function rt(t){try{if(!(await S.default.stat(t)).isDirectory())return;let r;try{r=await S.default.readdir(t)}catch(i){if(i.code==="ENOENT"){c.warn(`The directory "${t}" does not exist, skipping it.`);return}throw c.error(`Error al leer el directorio "${t}":`,i),i}for(let i of r){let n=J.default.join(t,i);await rt(n)}if((await S.default.readdir(t)).length===0)try{await S.default.rmdir(t),c.verbose(`Remove empty directory: ${t}`)}catch(i){i.code==="ENOENT"?c.warn(`El directorio "${t}" ya no existe. Posiblemente fue borrado por otra operaci\xF3n.`):c.error(`Error al borrar el directorio "${t}":`,i)}}catch(e){if(e.code==="ENOENT")c.warn(`The directory "${t}" does not exist or has already been processed.`);else throw c.error(`General error general while processing "${t}":`,e),e}}async function D(t){try{return await S.default.access(t),!0}catch{return!1}}async function*fe(t,e){let r=await S.default.opendir(t);for await(let o of r){let i=J.default.join(t,o.name);o.isDirectory()?yield*fe(i,e):o.isFile()&&o.name.endsWith(e)&&(yield i)}}async function Zt(t){let e=await b(),{exportsDir:r,exportsDirBackup:o}=e.paths;c.info(`Cleaning exports dir for the domain ${t}`),c.verbose(`Deleting ${X.default.join(r,t)}...`),await ot.default.rm(X.default.join(r,t),{recursive:!0,force:!0}),await D(X.default.join(o,t))?(await ot.default.cp(X.default.join(o,t),X.default.join(r,t),{recursive:!0}),c.info(`export-backup dir for the domain ${t} found. Restoring before exit...`),c.verbose(`Copying ${X.default.join(o,t)} -> ${X.default.join(r,t)}...`)):c.info("No export-backup found, skipping rollback. Next render will create a new exports dir from scratch...")}var le=class extends Error{constructor(e){super(e instanceof Error?e.message:String(e)),this.name="InternalCXError",this.stack=e instanceof Error?e.stack:""}};function A(t,e){let{error:r,message:o,expected:i,hint:n}=t,s=c.log(w.red(`[ ${r} ]`)),a=[i,n].filter(Boolean).join(`
|
|
6
6
|
`);throw c.log(`
|
|
7
7
|
${s}
|
|
8
8
|
${o}
|
|
9
9
|
${a}
|
|
10
10
|
|
|
11
11
|
${w.red("stack")}
|
|
12
|
-
${JSON.stringify(e,null,2)}`),new le(e)}async function
|
|
12
|
+
${JSON.stringify(e,null,2)}`),new le(e)}async function tr(t){try{await t()}catch(e){e instanceof le?c.error("Internal Griddo RenderError"):e instanceof Error?c.error(e.message):c.error(`An unexpected error occurred ${e}`);try{let o=await b(),{root:i}=o.paths;o.needsRollbackOnError?(c.info("Cleaning exports dir..."),c.verbose(`Deleting ${er.default.join(i,"exports")}...`),await Zt(o.currentRenderingDomain)):c.info("No rollback needed, skipping...")}catch{c.info("Early render stage, no db.json created yet...")}let r=await b();throw r.domains[r.currentRenderingDomain].isRendering=!1,r.domains[r.currentRenderingDomain].renderMode=_.ERROR,await L(r),e}}var rr=u(require("node:fs/promises")),or=u(require("node:path"));async function ir(){let{version:t}=JSON.parse(await rr.default.readFile(or.default.resolve(__dirname,"../..","package.json"),"utf-8")),e=`
|
|
13
13
|
${w.yellow(`Griddo Exporter ${t}`)}
|
|
14
14
|
${w.dim(`Node ${process.version.slice(1)}`)}
|
|
15
|
-
`;c.log(e)}var j=process.env.GRIDDO_API_URL,
|
|
16
|
-
`);return}let n=0;for(;n<o;)try{c.info(`start ${t} life-cycle`);let s=await
|
|
15
|
+
`;c.log(e)}var j=process.env.GRIDDO_API_URL,mi=process.env.GRIDDO_PUBLIC_API_URL,Sn=`${j}/ai/embeddings`,En=`${mi}/alert`,_n=`${j}/domains`,nr=`${j}/sites/all`,sr=`${j}/page`,ar=`${j}/login_check`,Pn=`${j}/debug/reset-render`,cr=`${j}/domains/robots`,In=`${j}/search`,dr=`${j}/settings`,pi=`${j}/domains/`,lr=[pi,"/llms"],te=`${j}/site/`,mr=[te,"/build/end"],pr=[te,"/build/start"],fr=[te,"/distributor"],ur=[te,"/sitemap"],gr=[te,"/all"],hr=[te,"/languages"],yr=[te,"/socials"];var Dr={name:"@griddo/cx",description:"Griddo SSG based on Gatsby",version:"11.10.34-rc.1",authors:["Hisco <francis.vega@griddo.io>"],license:"UNLICENSED",homepage:"https://griddo.io",repository:{type:"git",url:"https://github.com/griddo/griddo"},bin:{"griddo-render":"cli.mjs"},exports:{".":{import:"./build/index.js",require:"./build/index.js",types:"./build/index.d.ts"},"./react":{import:"./build/react/index.js",require:"./build/react/index.js",types:"./build/react/index.d.ts"}},scripts:{"// NPM":"",prepare:"yarn run build","// BUILD":"",build:"rm -rf build && sh ./exporter/build.sh","build:debug":"rm -rf build && sh ./exporter/build.sh --debug","// TESTS":"",test:"npm run test:compile && npm run test:create-render-fixtures && node --env-file=.env --test ./build/__tests__/* && npm run test:remove-render-fixtures","test-exporter":"npm run test:compile && node --env-file=.env --test ./build/__tests__exporter__/","test:create-render-fixtures":"node --env-file=.env ./build/__tests__/utils/create-fixtures","test:remove-render-fixtures":"node --env-file=.env ./build/__tests__/utils/remove-fixtures","test:compile":"tsgo --project tsconfig.tests.json","// INFRA SCRIPTS":"","prepare-domains-render":"node ./build/commands/prepare-domains-render","start-render":"node ./build/commands/start-render","end-render":"node ./build/commands/end-render","upload-search-content":"node ./build/commands/upload-search-content","reset-render":"node ./build/commands/reset-render","// ONLY LOCAL SCRIPTS":"","prepare-assets-directory":"node ./build/commands/prepare-assets-directory","create-rollback-copy":"rm -rf ../../exports-backup && cp -r ../../exports ../../exports-backup",render:"npm run build && node --env-file=.env cli.mjs render --root=../..","// LINTER & FORMATTER":"",lint:"biome check --write",format:"biome format --write",flint:"npm run lint && npm run format","ts-lint":"tsgo --noEmit","watch:ts-lint":"tsc --noEmit --watch"},dependencies:{gatsby:"5.15.0","html-react-parser":"5.2.11"},devDependencies:{"@biomejs/biome":"2.3.4","@griddo/core":"11.10.34-rc.1","@types/node":"20.19.4","@typescript/native-preview":"7.0.0-dev.20260108.1",cheerio:"1.1.2",esbuild:"0.25.12","p-limit":"7.2.0",typescript:"5.9.3"},peerDependencies:{react:">=18 <19","react-dom":">=18 <19"},engines:{node:">=20.19"},files:["build","exporter","src","gatsby-browser.tsx","gatsby-config.ts","gatsby-node.ts","gatsby-ssr.tsx","global.d.ts","tsconfig.commands.json","tsconfig.exporter.json","tsconfig.json","plugins","cli.mjs"],publishConfig:{access:"public"},gitHead:"11975ec49f376d26b53ebd7c338b5eddd961bc5f"};var $e={"x-application-id":"griddo-cx","x-client-version":Dr.version,"x-client-name":"CX"};var it=class{headers;async login(){try{let e=await fetch(ar,{method:"POST",headers:Object.assign({},$e,{"Content-Type":"application/json",Connection:"close"}),body:JSON.stringify({username:Ft,password:Ct})});if(!e.ok)throw new Error("Error while login in the API");let{token:r}=await e.json();return this.headers={Authorization:`bearer ${r}`,"Cache-Control":"no-store"},this.headers}catch(e){A(Jt,e)}}},q=new it;var Ho=u(require("node:path"));async function ui(t){let e=process.hrtime.bigint();await Promise.resolve(t());let r=process.hrtime.bigint();return Number((Number(r-e)/1e9).toFixed(3))}async function O(t,e,r){let{maxRetrys:o=Ht,skip:i}=r||{};if(i){c.info(`Skiping life-cycle ${t}. Reason: ${i}
|
|
16
|
+
`);return}let n=0;for(;n<o;)try{c.info(`start ${t} life-cycle`);let s=await ui(e);c.success(`${t} - ${s}s
|
|
17
17
|
`);break}catch(s){let a=w.red(` Error in ${t} LifeCycle `),d=w.yellow(`Attempt (${n+1})`);c.log(`
|
|
18
18
|
${a} ${d}
|
|
19
|
-
`),c.log(s),c.log(),n++}n===o&&A(
|
|
19
|
+
`),c.log(s),c.log(),n++}n===o&&A(Wt(o,t))}var he=u(require("node:fs/promises")),ge=u(require("node:path"));var me=[],ve=null,ue=null,gi=Lt,st="render-detail-log.txt",wr=!ae,nt=null;async function Rr(){return nt||(nt=await b()),nt}async function br(){if(wr)return;let t=await Rr();ve=ge.default.join(t.paths.root,st),await he.default.rm(ve,{force:!0})}function ye(t){wr||(me.push(t.toString()),me.length>=gi&&Sr().catch(e=>{c.error("Background log flush failed:",e)}))}async function Sr(){if(ue&&await ue,me.length===0||!ve)return;ue=(async()=>{let e=[...me];me.length=0;try{await he.default.appendFile(ve,`${e.join(`
|
|
20
20
|
`)}
|
|
21
|
-
`)}catch(r){me.unshift(...e),c.error("Error flushing logs:",r)}})();try{await ue}finally{ue=null}}async function
|
|
22
|
-
`)}formatTime(e){if(!Number.isFinite(e)||e<0)return"--:--";let r=Math.floor(e/3600),o=Math.floor(e%3600/60),i=Math.floor(e%60),n=o.toString().padStart(2,"0"),s=i.toString().padStart(2,"0");return r>0?`${r}:${n}:${s}`:`${n}:${s}`}};var
|
|
21
|
+
`)}catch(r){me.unshift(...e),c.error("Error flushing logs:",r)}})();try{await ue}finally{ue=null}}async function Er(t){await Sr();let e=await Rr(),r=hi(),o=ge.default.join(e.paths.exportsDir,t,"logs");await he.default.mkdir(o,{recursive:!0});let i=ge.default.join(e.paths.root,st),n=ge.default.join(o,`${r}-${st}`);try{await he.default.cp(i,n)}catch(s){if(s instanceof Error&&"code"in s&&s.code!=="ENOENT")throw s}}function hi(){let t=new Date,e=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0"),s=String(t.getSeconds()).padStart(2,"0");return`${e}-${r}-${o}_${i}-${n}-${s}`}var De=u(require("node:fs/promises")),H=u(require("node:path"));var Oe=u(require("node:fs/promises")),K=u(require("node:path"));async function Fe(t){let e=await b(),{sitesToPublish:r,createdPages:o,buildProcessData:i}=e.domains[t].renderInfo||{};if(!r||!o||!i)throw new Error("Build metadata not found");return{buildProcessData:i,createdPages:o,sitesToPublish:r}}async function _r(t,e){let r=await b();r.domains[e]=r.domains[e]||{},r.domains[e].renderInfo=t,await L(r)}async function Pr(t,e){let{__root:r}=await R();try{let o=new Set(["editorID","parentEditorID"]);for(let i of e){Di(i,o);let n=`${i.context.page.id}.json`,s=K.default.join(r,"store",t,n);await yi(s,JSON.stringify(i))}}catch(o){A(Yt,o)}}async function Ir(t,e){let{__root:r}=await R({domain:e}),o=K.default.join(r,"store");if(!await D(o))return;let i=await Oe.default.readdir(o),n=t.map(({id:a})=>`${a}`),s=i.filter(a=>!n.includes(a));for(let a of s)await Oe.default.rm(K.default.join(o,a),{recursive:!0,force:!0}),c.verbose(`Removed orphan site id: ${a}`)}async function yi(t,e){let r=K.default.dirname(t),o=K.default.extname(t),i=K.default.basename(t,o),n=t,s=1;for(;await D(n);){let a=`${i}-${s}${o}`;n=K.default.join(r,a),s++}await Oe.default.writeFile(n,e)}function Di(t,e){function r(o){if(!(!o||typeof o!="object"||Array.isArray(o))){for(let i in o)if(Object.hasOwn(o,i))if(e.has(i))delete o[i];else{let n=o[i];typeof n=="object"&&n!==null&&!Array.isArray(n)&&r(n)}}}r(t)}async function Tr(t){let{domain:e}=t,r=await b();r.domains[e].isRendering=!0,await L(r);let{__ssg:o}=await R(),i=H.default.join(o,`.render-sentinel-${e}`);await De.default.writeFile(i,new Date().toISOString())}async function xr(t){let e=await b();e.domains[t].isRendering=!1,e.currentRenderingDomain=null,e.domains[t].renderMode=_.COMPLETED,await L(e);let{__ssg:r}=await R(),o=H.default.join(r,`.render-sentinel-${t}`);await De.default.unlink(o)}async function Ar(t){let{__ssg:e}=await R(),r=H.default.join(e,`.render-sentinel-${t}`);await D(r)||A(qt)}async function $r(t){let{basePath:e}=t,o=(await b()).commitHash;await De.default.writeFile(H.default.join(e,"commit"),o)}async function vr(t){let e=await b();if(!e.domains[t])throw new Error(w.red(`[!] Error: Domain ${t} not found in DB`));if(!e.domains[t].renderMode)throw new Error(w.red(`[!] Error: Render mode not found for domain ${t}`));return{renderMode:e.domains[t].renderMode,reason:e.domains[t].renderModeReason}}async function R(t){let{domain:e,dbFilePath:r}=t||{},i=(await b(r)).paths;return{__root:i.root,__cache:H.default.join(i.cxCache,e||""),__components:i.components,__cx:i.cx,__sites:i.exportsDir,__exports:H.default.join(i.exportsDir,e||""),__exports_backup:H.default.join(i.exportsDirBackup,e||""),__ssg:i.ssg,__exports_dist:H.default.join(i.exportsDir,e||"","dist")}}async function at(){let t=await b();return{griddoVersion:t.griddoVersion,buildReportFileName:t.buildReportFileName}}async function Or(t){let e=await q.login(),{__root:r}=await R(),{buildReportFileName:o}=await at(),{buildProcessData:i}=await Fe(t),n=Object.keys(i).map(d=>({...i[d],siteId:Number.parseInt(d)})),s={authControl:e,sites:n},a=H.default.join(r,"current-dist",o);await De.default.writeFile(a,JSON.stringify(s)),c.verbose(`build report saved in ${a}`)}var F=u(require("node:path"));async function Fr(t){let{__exports:e,__cache:r,__root:o,__ssg:i}=await R({domain:t});return{initials:[e,r,F.default.join(e,"logs"),F.default.join(o,"store"),F.default.join(o,"apiCache")],disposables:[F.default.join(o,"store"),F.default.join(o,"apiCache"),F.default.join(o,"dist"),F.default.join(o,"dist-restored"),F.default.join(o,"assets"),F.default.join(o,"render-detail-log.txt"),F.default.join(o,"current-dist"),F.default.join(i,"domains.json"),F.default.join(i,"render-metadata.json")],cacheables:[],archivables:["assets"],restaurable:["dist"]}}var Ce=class{domain;renderMode;pathsHydratedWithDomain;pagesToCreate=[];pagesToDelete=[];ssg;renderMetadata;renderArtifacts;constructor({domain:e,renderMode:r,ssg:o,pathsHydratedWithDomain:i,renderMetadata:n,renderArtifacts:s}){this.domain=e,this.renderMode=r,this.pathsHydratedWithDomain=i,this.renderMetadata=n,this.renderArtifacts=s,this.ssg=o}};var Le=u(require("node:fs/promises")),Ne=u(require("node:path"));async function Cr(t){let{renderArtifacts:e,ssg:{ssgArtifacts:r},pathsHydratedWithDomain:{__cache:o,__exports:i},renderMode:n}=t;n===_.FROM_SCRATCH&&(await Le.default.rm(Ne.default.join(o,".cache"),{recursive:!0,force:!0}),await Le.default.rm(Ne.default.join(i,"dist"),{recursive:!0,force:!0}),await Le.default.rm(Ne.default.join(i,"assets"),{recursive:!0,force:!0})),await de(e.disposables),await de(r.disposables)}async function Lr(t){let{renderArtifacts:e,ssg:{ssgArtifacts:r},pathsHydratedWithDomain:{__cache:o}}=t;await de(e.disposables),await de(r.disposables),await $r({basePath:o})}var ke=u(require("node:fs/promises")),be=u(require("node:path"));var ct=class{value;next;constructor(e){this.value=e}},we=class{#e;#t;#r;constructor(){this.clear()}enqueue(e){let r=new ct(e);this.#e?(this.#t.next=r,this.#t=r):(this.#e=r,this.#t=r),this.#r++}dequeue(){let e=this.#e;if(e)return this.#e=this.#e.next,this.#r--,this.#e||(this.#t=void 0),e.value}peek(){if(this.#e)return this.#e.value}clear(){this.#e=void 0,this.#t=void 0,this.#r=0}get size(){return this.#r}*[Symbol.iterator](){let e=this.#e;for(;e;)yield e.value,e=e.next}*drain(){for(;this.#e;)yield this.dequeue()}};function Re(t){Nr(t);let e=new we,r=0,o=()=>{r<t&&e.size>0&&(r++,e.dequeue()())},i=()=>{r--,o()},n=async(d,m,f)=>{let l=(async()=>d(...f))();m(l);try{await l}catch{}i()},s=(d,m,f)=>{new Promise(l=>{e.enqueue(l)}).then(n.bind(void 0,d,m,f)),r<t&&o()},a=(d,...m)=>new Promise(f=>{s(d,f,m)});return Object.defineProperties(a,{activeCount:{get:()=>r},pendingCount:{get:()=>e.size},clearQueue:{value(){e.clear()}},concurrency:{get:()=>t,set(d){Nr(d),t=d,queueMicrotask(()=>{for(;r<t&&e.size>0;)o()})}},map:{async value(d,m){let f=Array.from(d,(l,p)=>this(m,l,p));return Promise.all(f)}}}),a}function Nr(t){if(!((Number.isInteger(t)||t===Number.POSITIVE_INFINITY)&&t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up")}var je=u(require("node:readline")),Ge=class t{constructor(e,r){this.siteName=e;this.total=r;this.startTime=Date.now()}startTime;isFinished=!1;width=20;static ANSI_REGEX=/\u001b\[[0-9;]*m/g;update(e){if(this.isFinished)return;let o=(Date.now()-this.startTime)/1e3,i=this.total>0?Math.min(Math.max(e/this.total,0),1):0,n=o>0?e/o:0;if(e>=this.total){this.isFinished=!0;let s=`Fetched pages from ${this.siteName}: ${this.total} pages - ${n.toFixed(1)}p/s - ${this.formatTime(o)}`;this.writeToLine(s),this.finish();return}if(!process.env.CI){let s=Math.floor(i*100),a=this.total-e,d=n>0?Math.ceil(a/n):0,m=Math.round(this.width*i),f=this.width-m,l=`${"\u2588".repeat(m)}${"\u2591".repeat(f)}`,p=`Fetching pages from ${this.siteName}: ${l} ${s}% - (${e}/${this.total}) - ${n.toFixed(1)}p/s - ETA: ${this.formatTime(d)}`;this.writeToLine(p)}}writeToLine(e){je.clearLine(process.stdout,0),je.cursorTo(process.stdout,0);let r=process.stdout.columns||80;if(e.replace(t.ANSI_REGEX,"").length>r){let i=e.replace(t.ANSI_REGEX,"");process.stdout.write(`${i.substring(0,r-3)}...`)}else process.stdout.write(e)}finish(){process.stdout.write(`
|
|
22
|
+
`)}formatTime(e){if(!Number.isFinite(e)||e<0)return"--:--";let r=Math.floor(e/3600),o=Math.floor(e%3600/60),i=Math.floor(e%60),n=o.toString().padStart(2,"0"),s=i.toString().padStart(2,"0");return r>0?`${r}:${n}:${s}`:`${n}:${s}`}};var Mr=u(require("node:crypto")),Me=u(require("node:fs/promises")),dt=u(require("node:path"));async function lt(t,e,r=""){let{endpoint:o,body:i,cacheKey:n="",attempt:s=1,headers:a,useApiCacheDir:d=!0,logToFile:m=!0}=t,f={endpoint:o,body:i,headers:a,cacheKey:n};if(n&&d){let l=new Date,p=await Si(f);if(p){if(m){let g=Gr(p),h=g?`site: ${g}`:"",P=jr(Date.now()-l.getTime());ye(`${e} (cache) ${h} ${o} - ${P}s ${r}`)}return p}}try{let l=new Date,p={method:e.toUpperCase(),headers:Object.assign({},$e,a,q.headers)};e.toLowerCase()!=="get"&&i&&(p.body=JSON.stringify(i),p.headers||(p.headers={}),p.headers["Content-Type"]="application/json");let g=await fetch(o,p);if(!g.ok){if(g.status===404)return null;throw new Error(`HTTP ${g.status}: ${g.statusText}`)}let h=await g.json();if(m){let P=Gr(h),N=P?`site: ${P}`:"",I=jr(Date.now()-l.getTime());ye(`${e} (fetch) ${N} ${o} - ${I}s ${r}`)}return d&&await bi(f,h),h}catch(l){let p=l;if(s>Ze)throw c.log(`
|
|
23
23
|
Max attempts ${Ze} reached
|
|
24
24
|
--------------------------------------
|
|
25
25
|
- ${e.toUpperCase()} ${o}
|
|
@@ -27,7 +27,7 @@ Max attempts ${Ze} reached
|
|
|
27
27
|
- HEADERS: ${JSON.stringify(a)}
|
|
28
28
|
- ERROR: ${p.message}
|
|
29
29
|
--------------------------------------
|
|
30
|
-
`),new le(p);return
|
|
30
|
+
`),new le(p);return wi(p,{callInfo:{endpoint:o,body:i}}),c.warn(`Waiting for retry: ${e}`,o),await Ri(kt*1e3),lt({endpoint:o,body:i,headers:a,cacheKey:n,attempt:s+1},e,r)}}async function $(t){return lt(t,"get")}async function mt(t){let{endpoint:e,body:r,headers:o}=t,i=e.endsWith("/distributor")&&`# ReferenceField body: ${JSON.stringify(r)} lang: ${JSON.stringify(o?.lang)}`;return lt(t,"post",i||"")}function wi(t,e){let{message:r,stack:o}=t,{callInfo:i}=e,n=[];for(let d of Object.keys(i))n.push(`${d}: ${typeof i[d]=="object"?JSON.stringify(i[d]):i[d]}`);let s=n.join(`
|
|
31
31
|
`),a=`${r}
|
|
32
32
|
${o}`;c.warn(w.red(`
|
|
33
33
|
=============
|
|
@@ -39,33 +39,33 @@ ${s}
|
|
|
39
39
|
${a}
|
|
40
40
|
|
|
41
41
|
=============
|
|
42
|
-
`))}function
|
|
42
|
+
`))}function Gr(t){if(!(typeof t!="object"||t===null||Array.isArray(t)))return"site"in t&&t.site?t.site:void 0}function Ri(t){return new Promise(e=>setTimeout(e,t))}function jr(t,e=3){return Number.parseFloat((t/1e3).toFixed(e))}async function Br(t){let{__root:e}=await R(),r=dt.default.join(e,"apiCache"),o=Mr.default.createHash("sha256");return o.update(JSON.stringify(t)),`${r}/${o.digest("hex")}`}async function bi(t,e){let r=typeof e=="string"?e:JSON.stringify(e),o=await Br(t),i=dt.default.dirname(o);await D(i)||await Me.default.mkdir(i,{recursive:!0}),await Me.default.writeFile(o,r,"utf8")}async function Si(t){try{let e=await Br(t),r=await Me.default.readFile(e,"utf8");return JSON.parse(r)}catch{return null}}var Vr=u(require("node:fs/promises")),Xr=u(require("node:path"));async function kr(t){return $({endpoint:`${nr}?domainSlug=${t}`})}async function Hr(t,e){return $({endpoint:`${sr}/${t}`,cacheKey:e})}async function Ur(t,e=""){let[r,o]=gr;return $({endpoint:`${r}${t}${o}`,cacheKey:e})}async function pt(t,e=""){let[r,o]=hr;return $({endpoint:`${r}${t}${o}`,cacheKey:e})}async function ft(t){let[e,r]=pr;return $({endpoint:`${e}${t}${r}`})}async function Wr(t,e){let[r,o]=mr;await mt({endpoint:`${r}${t}${o}`,body:e,useApiCacheDir:!1,logToFile:!1})}async function Jr(t,e,r,o,i){let[n,s]=fr,a=o||t.site,d=i||t.language;return mt({endpoint:`${n}${a}${s}`,body:e,headers:{lang:d},cacheKey:r})}async function qr(t){let{siteId:e,headers:r}=t,[o,i]=ur;return $({endpoint:`${o}${e}${i}`,headers:r})}async function Yr(t,e=""){let[r,o]=yr;return $({endpoint:`${r}${t}${o}`,cacheKey:e})}async function Kr(t){let e=await kr(t);if(e.length)for(let i of e){let{items:n}=await pt(i.id);i.domains=n.filter(s=>s.domain&&(s.domain.slug===t||s.domain.slug===`/${t}`)).map(s=>({[s.id]:`${s.domain.slug}${s.path}`}))}let r=e.filter(i=>!!i.isPublished),o=e.filter(i=>!i.isPublished&&i.shouldBeUpdated);return{sitesToPublish:r,sitesToUnpublish:o}}async function zr(t){let{__root:e}=await R();for(let r of t){let o=await ft(r.id),{siteHash:i}=o,n={siteHash:i,publishHashes:[],unpublishHashes:[],publishPagesIds:[]};await Wr(r.id,n),await Vr.default.rm(Xr.default.join(e,"store",r.id.toString()),{force:!0,recursive:!0})}}async function Qr(t){let e=await ft(t),r=await Ur(t),o=await pt(t),i=await Yr(t),n=o.items,s=n.find(h=>h.isDefault),{siteHash:a,unpublishHashes:d,publishIds:m}=e,{headers:f,footers:l}=r;return{siteInfo:r,validPagesIds:m,siteHash:a,unpublishHashes:d,siteLangs:n,defaultLang:s,headers:f,footers:l,socials:i}}var Be=class{_defaultHeaders;_defaultFooters;_navigations;constructor(){this._navigations={footers:[],headers:[]},this._defaultHeaders={},this._defaultFooters={}}set navigations(e){this._navigations=e,this._defaultFooters=this.getDefaultFooters(),this._defaultHeaders=this.getDefaultHeaders()}get navigations(){return this._navigations}getDefaultFooters(){let r=[...this.navigations.footers].filter(i=>i.setAsDefault),o={};for(let i of r)o[i.language]=i;return o}getDefaultHeaders(){let r=[...this.navigations.headers].filter(i=>i.setAsDefault),o={};for(let i of r)o[i.language]=i;return o}getRightLanguage(e,r,o){if(!e||!r)return null;let n=e.find(s=>s.language===o&&s.navigationLanguages?.find(a=>a.navigationId===r))||e.find(s=>s.id===r);return n?{...n}:null}getPageHeader(e,r){return this.getRightLanguage(this.navigations.headers,e,r)}getPageFooter(e,r){return this.getRightLanguage(this.navigations.footers,e,r)}getPageNavigations(e){let{header:r,footer:o,language:i,template:n,templateConfig:s}=e,{templateType:a}=n,{defaultHeader:d,defaultFooter:m,templates:f}=s,l=N=>{let I=N.find(C=>typeof C=="number");return typeof I=="number"?I:null},p=l([r,f?.[a]?.defaultHeader,d]),g=l([o,f?.[a]?.defaultFooter,m]),h=p?this.getPageHeader(p,i):p===0?null:this._defaultHeaders[i],P=g?this.getPageFooter(g,i):g===0?null:this._defaultFooters[i];return{header:h,footer:P}}};function ut(t,e,r,o="jpg"){let i=typeof t=="string"?t:t?.url;return i?i.split("/")[2].includes("cloudinary.com")?_i(i,`c_fill,w_${e},h_${r}`):Ei(i,`f/${o}/w/${e}/h/${r}`):null}function Ei(t,e){let r=t.split("/"),o=r.slice(0,-1).join("/"),i=r.slice(-1)[0];return`${o}/${e}/${i}`}function _i(t,e){let r=t.replace("https://",""),o=r.split("/").slice(0,4).join("/"),i=r.replace(o,"");return`https://${o}/${e}${i}`}var Pi=25;function Ii({socialTitle:t,socialDescription:e,socialImage:r}){return{type:"website",title:t,description:e,image:r?ut(r,1280,768):"",twitterImage:r?ut(r,1280,768):""}}function Ti(t){let{title:e,metaTitle:r,metaDescription:o,canonicalURL:i,locale:n,url:s,isIndexed:a,follow:d,metasAdvanced:m,pageLanguages:f,fullUrl:l,metaKeywords:p}=t,g=m?.split(",").filter(Boolean).map(h=>h.trim().toLowerCase())||[];return{title:(r||e||"").trim(),description:o,canonical:i?.trim()&&i!==l?i.trim():a?l:void 0,locale:n,url:s,index:a?"index":"noindex",follow:d?"follow":"nofollow",translate:g.includes("notranslate")?"notranslate":"",metasAdvanced:g.filter(h=>h!=="notranslate").join(),pageLanguages:f,metaKeywords:p?.filter(Boolean).map(h=>h.replace(/"/g,"'")).join(", ")}}async function ht(t,e){let{id:r,title:o,fullPath:i,language:n,breadcrumb:s,socialDescription:a,socialImage:d,socialTitle:m}=t,{baseUrl:f,cloudinaryName:l,griddoVersion:p,siteLangs:g,siteMetadata:h,siteOptions:P,siteScript:N,siteSlug:I,socials:C,theme:B,navigations:G}=e,{header:pe,footer:Q}=G;t.breadcrumb=s,t.siteSlug=I,t.apiUrl=f,t.publicApiUrl=e.publicBaseUrl,t.instance=e.instance;let U=g.find(({id:Ye})=>Ye===t?.language)?.locale.replace(/_/g,"-"),Y=Ti(t),V=Ii({socialDescription:a,socialImage:d,socialTitle:m}),oe=i.compose,qe=new Date().toString();return{path:oe,size:void 0,context:{id:r,title:o,fullPath:i,locale:U,languageId:n,theme:B,siteMetadata:h,pageMetadata:Y,openGraph:V,socials:C,siteLangs:g,cloudinaryName:l,siteOptions:P,griddoVersion:p,renderDate:qe,siteScript:N,header:pe,footer:Q,page:t}}}async function to(t,e){return ht(t,e)}async function ro({page:t,pages:e,isRoot:r=!1,defaultLang:o,template:i,totalQueriedItems:n},s){let a=e.map(async(d,m)=>{let f=m===0,l=m+1,{domainUrl:p,compose:g}=t.fullPath,h={...t,fullPath:{...t.fullPath,compose:gt(g,l,{addEndingSlash:!0})},fullUrl:gt(t.fullUrl,l,{addEndingSlash:!0}),slug:gt(t.slug,l),title:eo(t.title,l),metaTitle:eo(t.metaTitle||"",l),disableHrefLangs:l>1,template:{...i,isFirstPage:f,pageNumber:l,totalPages:e.length,baseLink:`${p}${g}`,queriedItems:d,totalQueriedItems:n?.length},isRoot:r,defaultLang:o};return ht(h,s)});return Promise.all(a)}function oo(t,e){let{multiPageElements:r,...o}=t,i=JSON.parse(JSON.stringify(r));i.find(({sectionSlug:s})=>s==="/")||i.push({});let n=i.map(async s=>{let a=JSON.parse(JSON.stringify(o)),{sectionSlug:d="/",title:m="",metaTitle:f="",metaDescription:l=""}=s,p=typeof m=="string"?m:m.content,g=a.fullPath.compose||"",h=a.fullUrl.endsWith("/")?a.fullUrl.slice(0,-1):a.fullUrl,P=d?.replace(/\//g,""),I=d==="/"?P:`${P}/`,C=g.endsWith("/")?"":"/",B=`${g}${C}${I}`;return p.trim()&&(a.title=p),l.trim()&&(a.metaDescription=l),a.fullUrl=`${h}/${I}`,a.fullPath.compose=B,a.slug=B,a.template.activeSectionSlug=d,a.template.activeSectionBase=h,a.metaTitle=f.trim()||p.trim()||a.metaTitle,ht(a,e)});return Promise.all(n)}function io(t){return new Promise(r=>{let o=(i,n=0)=>{if(!(!i||typeof i!="object")){for(let s in i){let a=i[s],d=a||typeof a=="object",m=JSON.stringify(a).includes('"hasGriddoMultiPage":true');if(!d||!m)continue;let{component:f,hasGriddoMultiPage:l,elements:p}=a;f&&l&&r(p||[]),o(a,n+1)}n||r(null)}};o([t])})}function xi(t,e,r){return e?.slice(t*(r-1),t*r)}function Ai(t,e){let r=Math.ceil(e.length/t)||1;return Array.from({length:r},(i,n)=>n+1)?.map(i=>xi(t,e,i))}function no(t){let e=t.queriedItems||[],r=t?.itemsPerPage||Pi;return Ai(r,e)}function Zr(t){return t.replace(/\/+$/,"/")}function gt(t,e,r){let o=t.endsWith("/")?"":"/",i=r?.addEndingSlash?"/":"";return e<=1?Zr(`${t}${i}`):Zr(`${t}${o}${e}${i}`)}function eo(t,e){return!t||e<=1?t:`${t} - ${e}`}function $i(t,e){let{order:r,sources:o,quantity:i,mode:n,fixed:s,fullRelations:a=!1,allLanguages:d=!1,preferenceLanguage:m=!1,referenceId:f,fields:l}=t;return n==="auto"?{mode:n,order:r,sources:o,quantity:i,fullRelations:a,allLanguages:d,preferenceLanguage:m,fields:l}:n==="manual"?{mode:n,fixed:s,fullRelations:a,fields:l}:n==="navigation"?{mode:n,order:r,quantity:i,fullRelations:a,referenceId:f||e?.structuredDataContent?.id,fields:l}:(c.error(`ReferenceField mode: ${n} is not recognized on page ${e?.id}.`),t)}async function vi(t){let{page:e,component:r,cacheKey:o}=t,{data:i}=r;if(!i)return c.info(`Error: Page ${e.id} has \`hasDistributorData: true\` or \`getStaticData: true\` but it doesn't have a \`data\` property.`),[];if(Array.isArray(i.sources)&&i.sources.length<1)return c.info(`Warning: Page with id: ${e.id} has a ReferenceField with empty \`data.sources\``),[];let{site:n,lang:s}=i;!i.sources&&i.mode==="auto"&&c.info(`Warning: Page with id: ${e.id} has a ReferenceField with \`undefined\` \`data.sources\``);let a=$i(i,e);return await Jr(e,a,o,n,s)}async function so({page:t,cacheKey:e=""}){try{let{template:r}=t,o=async(s,a=1)=>{if(!(!s||typeof s!="object"||!(JSON.stringify(s).includes('"hasDistributorData":true')||JSON.stringify(s).includes('"getStaticData":true'))))for(let m in s){if(m==="queriedItems")continue;let l=s[m];if(!l||typeof l!="object")continue;(l.hasDistributorData||l.getStaticData)&&(l.queriedItems=await vi({page:t,cacheKey:e,component:l})),await o(l,a+1)}};return await(async s=>(await o([s]),s))(r)}catch(r){throw c.error("Error in getReferenceFieldData:",r),r}}var Oi=Date.now().toString();function ao(t,e){let r=Math.max(...e.map(n=>n.name.length+(n.shouldBeUpdated?1:0)+n.id.toString().length)),o=e.map(n=>{let s=n.shouldBeUpdated?"*":"",a=n.name.length+s.length+n.id.toString().length,d=" ".repeat(r-a);return`${w.bold(n.name)} ${w.dim(`(id:${n.id})`)} ${s} ${d}${w.dim("-")} ${w.dim(n.slug)}`}),i=o.length>0?`
|
|
43
43
|
|
|
44
44
|
${o.join(`
|
|
45
45
|
`)}`:w.dim(`--none--
|
|
46
46
|
`);c.log(`
|
|
47
|
-
${t} ${i}`)}async function
|
|
47
|
+
${t} ${i}`)}async function co(t){console.info(`API calls with ${ze} threads`),console.info(`API URL ${Ke}`);let{renderMode:e,domain:r,griddoVersion:o,basePath:i}=t,n=e===_.FROM_SCRATCH,s=be.default.join(i,"store"),a=[],d={},{sitesToPublish:m,sitesToUnpublish:f}=await Kr(r);ao("Sites to publish:",m),ao("Sites to unpublish:",f),await zr(f),await Ir(m,r);let l=[];for(let p of f){let{pagesStatus:g}=p;l.push(...g.active,...g.offlinePending,...g.uploadPending,...g.deleted,...g.offline)}for(let p of m){let{id:g,slug:h,theme:P,favicon:N,pagesStatus:I}=p,C=g.toString();l.push(...I.offlinePending,...I.deleted);let{siteInfo:B,siteHash:G,unpublishHashes:pe,siteLangs:Q,defaultLang:v,headers:U,footers:Y,socials:V}=await Qr(g),{cloudinaryName:oe,useMetaTitle:qe,useMetaKeywords:wt,showBasicMetaRobots:Ye,avoidHrefLangsOnCanonicals:Wo,avoidSelfReferenceCanonicals:Jo,avoidHrefLangXDefault:qo,avoidDebugMetas:Yo}=await $({endpoint:dr});d[g]={siteHash:G,unpublishHashes:pe,publishHashes:[],publishPagesIds:[]};let Rt=new Be;Rt.navigations={headers:U,footers:Y},p.languages=Q;let Vo=await Ci(g,G),Xo=B.siteScript,Ko={siteUrl:B.slug,title:B.name,favicon:N},zo={baseUrl:Ke,publicBaseUrl:Ot,instance:Nt,siteSlug:h,theme:P,siteMetadata:Ko,socials:V,siteLangs:Q,cloudinaryName:oe,griddoVersion:o,siteOptions:{useMetaTitle:qe,useMetaKeywords:wt,showBasicMetaRobots:Ye,avoidHrefLangsOnCanonicals:Wo,avoidSelfReferenceCanonicals:Jo,avoidHrefLangXDefault:qo,avoidDebugMetas:Yo},siteScript:Xo};await ke.default.mkdir(be.default.join(s,C),{recursive:!0});let Qo=async(Ve,Ie,ie,Te)=>{let ne=[],x=await Hr(Ie,Vo);if(!x){ie.current+=1,Te.update(ie.current);return}a.push(Ie);let xe=JSON.parse(JSON.stringify(zo));xe.navigations=Rt.getPageNavigations(x);let se=await so({page:x,cacheKey:Oi}),bt=await io(se),Xe=x?.mode==="list"||x?.mode==="paginated-data",St=!Xe&&bt,Zo=!St&&!Xe;if(Xe){let k={page:x,pages:no(se),isRoot:!1,defaultLang:v,template:se,totalQueriedItems:se.queriedItems};ne=await ro(k,xe),l.push(x.id)}if(St){let k=x;k.template=se,k.multiPageElements=bt,k.defaultLang=v,ne=await oo(k,xe),l.push(x.id)}if(Zo){let k=x;k.template=se,k.defaultLang=v,ne=[await to(k,xe)]}x.hash!==null&&(d[g].publishHashes.push(x.hash),d[g].publishPagesIds.push(x.id)),await Pr(Ve,ne),ie.current+=1,Te.update(ie.current)},Pe=I.uploadPending;if(n&&Pe.push(...I.active),Pe.length>0){let Ve=Re(ze),Ie=Pe.length,ie={current:0},Te=new Ge(p.name,Ie),ne=Pe.map(x=>Ve(()=>Qo(C,x,ie,Te)));await Promise.all(ne)}}return await _r({buildProcessData:d,createdPages:a,sitesToPublish:m},r),{pagesToCreate:a,pagesToDelete:l}}async function Fi(){let{__root:t}=await R(),r=`${be.default.join(t,"apiCache")}/siteHash.json`;try{let o=await ke.default.readFile(r,"utf8");return JSON.parse(o)||{}}catch{return{}}}async function Ci(t,e){let r=await Fi(),o=r[t],i=e||o||Date.now(),{__root:n}=await R(),a=`${be.default.join(n,"apiCache")}/siteHash.json`;return i!==o&&(r[t]=i,await ke.default.writeFile(a,JSON.stringify(r),{encoding:"utf-8"})),i.toString()}async function lo(t){let{domain:e,renderMode:r,renderMetadata:{griddoVersion:o},pathsHydratedWithDomain:{__root:i}}=t,{pagesToCreate:n,pagesToDelete:s}=await co({domain:e,renderMode:r,griddoVersion:o,basePath:i});t.pagesToCreate=n,t.pagesToDelete=s}async function mo(t){let{domain:e}=t;await Ar(e),await xr(e)}async function po(t){let{domain:e,pathsHydratedWithDomain:{__root:r}}=t;await Tr({basePath:r,domain:e})}async function fo(t){let{domain:e}=t;await Er(e)}var uo=u(require("node:fs/promises")),Se=u(require("node:path"));async function go(t){if(Gt){c.verbose("LLMs generation disabled by environment variable");return}let r=(await b()).domains[t].id,[o,i]=lr,s=(await $({endpoint:`${o}${r}${i}`})).map(({title:m,url:f,socialDescription:l})=>{let p=l?`: ${l}`:"";return`- [${m}](${f})${p}`}).join(`
|
|
48
48
|
`),{__root:a}=await R({domain:t}),d=Se.default.join(a,"current-dist");try{let m=`llms.txt for the domain ${t}`,f=`Generated: ${new Date().toISOString().replace("T"," ").slice(0,19)}`,l=`${m}
|
|
49
|
-
${f}`;await
|
|
49
|
+
${f}`;await uo.default.writeFile(Se.default.join(d,"llms.txt"),`${l}
|
|
50
50
|
|
|
51
|
-
${s}`),c.verbose(`wrote llms.txt to ${Se.default.join(d,"llms.txt")}`)}catch(m){c.error(`Error writing llms.txt to ${Se.default.join(d,"llms.txt")}:`,m)}}var
|
|
51
|
+
${s}`),c.verbose(`wrote llms.txt to ${Se.default.join(d,"llms.txt")}`)}catch(m){c.error(`Error writing llms.txt to ${Se.default.join(d,"llms.txt")}:`,m)}}var ho=u(require("node:fs/promises")),yt=u(require("node:path"));async function Li(){return(await $({endpoint:cr}))?.filter(e=>!!e.path).map(({path:e,content:r})=>({path:e,content:r||`User-agent: *
|
|
52
52
|
\r
|
|
53
|
-
\rAllow: /`}))||[]}async function
|
|
53
|
+
\rAllow: /`}))||[]}async function yo(t){let{__root:e}=await R({domain:t}),r=yt.default.join(e,"current-dist"),o=(await Li()).find(({path:i})=>i===`/${t}`);if(!o){c.info(`Robots not found for ${t}`);return}if(await D(r)){let i=yt.default.join(r,"robots.txt");await ho.default.writeFile(i,o?.content),c.verbose(`wrote robots.txt to ${i}`)}else c.info(`${r} not found`)}var Ee=u(require("node:fs/promises")),re=u(require("node:path"));function Do(t){return t.replace(/[<>&'"”]/g,e=>{switch(e){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case'"':return""";case"\u201D":return""";default:return e}})}function wo(t){return`<?xml version="1.0" encoding="UTF-8"?>
|
|
54
54
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
|
55
55
|
${t.map(r=>` <url>
|
|
56
|
-
<loc>${
|
|
56
|
+
<loc>${Do(r.loc)}</loc>
|
|
57
57
|
<lastmod>${r.lastmod}</lastmod>
|
|
58
58
|
<priority>${r.priority}</priority>
|
|
59
59
|
</url>`).join(`
|
|
60
60
|
`)}
|
|
61
|
-
</urlset>`}function
|
|
61
|
+
</urlset>`}function Ro(t){return`<?xml version="1.0" encoding="UTF-8"?>
|
|
62
62
|
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
63
63
|
${t.map(r=>` <sitemap>
|
|
64
|
-
<loc>${
|
|
64
|
+
<loc>${Do(r)}</loc>
|
|
65
65
|
</sitemap>`).join(`
|
|
66
66
|
`)}
|
|
67
|
-
</sitemapindex>`}async function bo(t){let{__root:e}=await R(),{sitesToPublish:r}=await Fe(t),o=re.default.join(e,"current-dist"),i="sitemap-",n=s=>s==="sitemap.xml"||s.startsWith(i)&&s.endsWith(".xml");for(let s of r){let{id:a,languages:d}=s;for(let m of d){let f=q.headers?{...q.headers}:{};f.lang=m.id.toString();let l=await Jr({siteId:a,headers:f});if(!l)continue;let{items:p,url:g}=l,{home:h,domain:P}=g;if(!h)continue;let N=s.domains.find(v=>Object.keys(v)[0]===m.id.toString());if(!N)continue;let I=Object.values(N)[0],C=[],B=Object.keys(p),G=re.default.join(o,I.replace(P,""));if(await D(G))try{let v=await Ee.default.readdir(G);for(let U of v)if(n(U)){let V=re.default.join(G,U);try{await Ee.default.rm(V)}catch(X){c.error(`Error deleting file ${V}:`,X)}}}catch(v){c.error(`Error reading ${G}:`,v)}for(let v of B){let U=p[v];if(!U.length)continue;let V=Do(U),X=`/${i}${v.toLowerCase()}.xml`,oe=re.default.join(G,X);await Ro(oe,V),c.verbose(`sitemap generated in ${oe}`),C.push(`${h.endsWith("/")?h.slice(0,-1):h}${X}`)}if(!C.length)continue;let pe=wo(C),Q=re.default.join(G,"sitemap.xml");await Ro(Q,pe),c.verbose(`sitemap generated in ${Q}`)}}}async function Ro(t,e){try{let r=re.default.dirname(t);await D(r)||await Ee.default.mkdir(r,{recursive:!0}),await Ee.default.writeFile(t,e)}catch{throw new Error("Error saving a file")}}async function So(t){let{domain:e}=t;await vr(e),await bo(e),await ho(e),await uo(e)}async function Eo(t){let{renderArtifacts:e}=t;await Vt(e.initials)}var _o=u(require("node:fs/promises")),Dt=u(require("node:path"));async function Po(t){let{pathsHydratedWithDomain:{__root:e,__ssg:r}}=t,o=Dt.default.join(r,"public"),i=Dt.default.join(e,"current-dist");await _o.default.rename(o,i)}async function Io(t){let{renderMode:e,ssg:{ssgArtifacts:r},renderArtifacts:o,pathsHydratedWithDomain:{__components:i,__root:n,__cache:s,__ssg:a}}=t;await Xt(i,a,["static"]),e===_.INCREMENTAL&&(await ee(s,a,r.cacheables),await ee(s,n,o.cacheables))}var xo=require("node:child_process"),To=u(require("node:path"));async function Ao(t){c.verbose(`read assetPrefixWithDomain, ${t}`),c.verbose(`using this NODE_OPTIONS in gatsby command: ${process.env.NODE_OPTIONS}`);let{__ssg:e}=await R(),r=process.env.NODE_OPTIONS?process.env.NODE_OPTIONS.replace(/--openssl-legacy-provider\s*/g,"").trim():"",o=To.default.join(e,"node_modules",".bin","gatsby"),i=["build","--prefix-paths"];return Mt&&i.push("--verbose"),process.env.NO_COLORS&&i.push("--no-colors"),new Promise((n,s)=>{let a=(0,xo.spawn)(o,i,{cwd:e,stdio:["ignore","inherit","inherit"],env:{...process.env,SPAWN_ASSET_PREFIX_WITH_DOMAIN:t,NODE_OPTIONS:r}});a.on("close",d=>{d===0?n():s(new Error(`Gatsby build failed with exit code ${d}`))}),a.on("error",d=>{s(new Error(`Failed to start Gatsby build process: ${d.message}`))})})}async function $o(t){let{ssg:{assetPrefix:e}}=t;await Ao(e)}var Ue=u(require("node:fs/promises")),We=u(require("node:path"));var z=u(require("node:fs/promises")),E=u(require("node:path"));async function vo(t){let{__root:e,__exports:r}=await R({domain:t}),o=(await z.default.readdir(E.default.join(r,"dist"))).filter(n=>E.default.extname(n)===".js"||E.default.extname(n)===".json"||E.default.extname(n)===".css");await z.default.mkdir(E.default.join(e,"assets"),{recursive:!0}),await z.default.cp(E.default.join(r,"dist","page-data"),E.default.join(e,"assets","page-data"),{preserveTimestamps:!0,recursive:!0}),await D(E.default.join(e,"static"))&&await z.default.cp(E.default.join(e,"static"),E.default.join(e,"assets"),{force:!1,preserveTimestamps:!0,recursive:!0}),await D(E.default.join(r,"dist","static"))&&await z.default.cp(E.default.join(r,"dist","static"),E.default.join(e,"assets","static"),{force:!1,preserveTimestamps:!0,recursive:!0}),await D(E.default.join(e,"static"))&&await z.default.cp(E.default.join(e,"static"),E.default.join(r,"dist",t),{preserveTimestamps:!0,recursive:!0,force:!1});let i=o.map(n=>{let s=E.default.join(r,"dist",n),a=E.default.join(e,"assets",n);return z.default.cp(s,a,{preserveTimestamps:!0,recursive:!0})});await Promise.all(i)}var M=u(require("node:fs/promises")),x=u(require("node:path"));var Fo=require("node:crypto"),_e=u(require("node:fs/promises")),Co=require("node:path");var Li=[/\.js$/];async function Oo(t){let e=new Map;try{let o=(await _e.default.readdir(t)).filter(i=>Li.some(n=>n.test(i)));for(let i of o){let n=(0,Co.join)(t,i),s=await _e.default.readFile(n),a=(0,Fo.createHash)("sha256").update(s).digest("hex");e.set(i,a)}return e}catch(r){return c.build(`ERROR: Error processing directory ${t}: ${r}`),e}}async function Lo(t,e){let[r,o]=await Promise.all([Oo(t),Oo(e)]);if(r.size!==o.size)return!0;for(let[i,n]of r.entries()){let s=o.get(i);if(!s||n!==s)return!0}return!1}async function No(t,e){try{let r=await _e.default.readFile(t,"utf-8"),o=/(window\.___webpackCompilationHash=")([^"]*)(";<\/script>)/,i=r.replace(o,`$1${e}$3`);if(r===i)return;await _e.default.writeFile(t,i,"utf-8")}catch(r){c.error(`Failed to process file ${t}: ${r}`)}}var He=class{bundleDir;currentRenderDir;pagesToCreate;pagesToDelete;assetArtifacts;state={htmlToAdd:[],jsonToAdd:[],htmlToDelete:[],jsonToDelete:[]};constructor(e){this.bundleDir=e.dst,this.currentRenderDir=e.src,this.pagesToCreate=e.pagesToCreate,this.pagesToDelete=e.pagesToDelete,this.assetArtifacts=e.artifactsToCopyToExports}async execute(){await this.setPagesToDelete(),await this.setPagesToAdd(),await this.sync(),jt&&await this.assertAssetsAreValid()}async assertAssetsAreValid(){await Lo(this.currentRenderDir,this.bundleDir)?c.info("Warning: JavaScript and CSS bundles must have the same files and content. You can ignore this warning if the rendering process only has pages to unpublish."):c.info("Previous and current JavaScript and CSS packages successfully matched")}async setPagesToDelete(){let e=new Set([...this.pagesToDelete,...this.pagesToCreate]),r=await this.scanPages(this.bundleDir);for(let o of r)e.has(o.id)&&(this.state.htmlToDelete.push(o.htmlPath),this.state.jsonToDelete.push(o.jsonPath));c.verbose(`${this.state.htmlToDelete.length} pages HTML to delete`),c.verbose(`${this.state.jsonToDelete.length} pages JSON to delete`)}async setPagesToAdd(){let e=new Set(this.pagesToCreate),r=await this.scanPages(this.currentRenderDir);for(let o of r)if(e.has(o.id)){let i=x.default.join(this.bundleDir,o.composePath,"index.html"),n=o.composePath==="/"?"index":o.composePath,s=x.default.join(this.bundleDir,"page-data",n,"page-data.json");this.state.htmlToAdd.push({from:o.htmlPath,to:i}),this.state.jsonToAdd.push({from:o.jsonPath,to:s})}c.verbose(`${this.state.htmlToAdd.length} pages HTML to create`),c.verbose(`${this.state.jsonToAdd.length} pages JSON to create`)}async sync(){let e=[...this.state.htmlToDelete,...this.state.jsonToDelete];for(let o of e)try{await M.default.rm(o,{force:!0}),c.verbose(`Sync (remove) : ${o}`)}catch(i){c.error(`Failed to remove ${o}:`,i)}await this.restoreWebpackCompilationHash();let r=[...this.state.htmlToAdd,...this.state.jsonToAdd];for(let o of r)try{await M.default.mkdir(x.default.dirname(o.to),{recursive:!0}),await M.default.copyFile(o.from,o.to),c.verbose(`Sync (copy) : ${o.from} -> ${o.to}`)}catch(i){c.error(`Failed to copy ${o.from} to ${o.to}:`,i)}await this.copyAssetArtifacts(),await this.copySitemaps()}async restoreWebpackCompilationHash(){let e=x.default.join(this.bundleDir,"page-data","app-data.json"),r=JSON.parse(await M.default.readFile(e,"utf8")).webpackCompilationHash;c.verbose(`Reading webpackCompilationHash from ${e}: ${r}`);let o=this.state.htmlToAdd.map(({from:i})=>i);c.info(`Patching ${o.length} HTML files with the new webpackCompilationHash (${r})...`);for(let i of o)ye(`Patching HTML file ${i} with the new webpackCompilationHash`),await No(i,r)}async copyAssetArtifacts(){for(let e of this.assetArtifacts){let r=x.default.join(this.currentRenderDir,e),o=x.default.join(this.bundleDir,e);try{await M.default.mkdir(x.default.dirname(o),{recursive:!0}),await M.default.copyFile(r,o),c.verbose(`Copied artifact: ${e}`)}catch(i){c.error(`Failed to copy artifact ${r} to ${o}:`,i)}}}async copySitemaps(){let e=x.default.resolve(this.currentRenderDir),r=x.default.resolve(this.bundleDir),o=fe(r,".xml");for await(let n of o){let s=x.default.basename(n);(s.startsWith("sitemap-")||s==="sitemap.xml")&&await M.default.rm(n,{force:!0})}let i=fe(e,".xml");for await(let n of i){let s=x.default.relative(e,n),a=x.default.join(r,s);try{await M.default.mkdir(x.default.dirname(a),{recursive:!0}),await M.default.copyFile(n,a)}catch(d){c.error(`Failed to copy sitemap ${n} to ${a}:`,d)}}c.verbose("Copied sitemap files.")}async scanPages(e){let r=Re(32),o=fe(x.default.join(e,"page-data"),"page-data.json"),i=[];for await(let s of o)i.push(r(async()=>{try{let a=await M.default.readFile(s,"utf-8"),d=JSON.parse(a),m=d.result.pageContext.id,f=d.result.pageContext.fullPath.compose;return{id:m,composePath:f,htmlPath:x.default.join(e,f,"index.html"),jsonPath:s}}catch(a){return c.error(`Error reading or parsing page data from ${s}:`,a),null}}));return(await Promise.all(i)).filter(s=>s!==null)}};async function Go(t){let{renderMode:e,renderArtifacts:r,domain:o,pagesToCreate:i,pagesToDelete:n,pathsHydratedWithDomain:{__root:s,__ssg:a,__cache:d,__exports:m},ssg:{ssgArtifacts:f,assetPrefix:l}}=t,p=!!l&&l!=="",g=We.default.join(s,"current-dist"),h=We.default.join(m,"dist");await ee(s,d,r.cacheables,{override:!0}),await ee(a,d,f.cacheables,{override:!0}),e===_.FROM_SCRATCH&&(await tt(g),await Ue.default.rm(h,{force:!0,recursive:!0}),await Ue.default.rename(g,h)),e===_.INCREMENTAL&&(await tt(h),await new He({src:g,dst:h,pagesToCreate:i,pagesToDelete:n,artifactsToCopyToExports:["build-report.json","llms.txt","robots.txt"]}).execute(),await Ue.default.rm(g,{force:!0,recursive:!0}),await rt(We.default.join(m,"dist"))),p&&await vo(o),await ee(s,m,r.archivables,{override:!0})}var Je=u(require("node:path"));async function jo(){let{ssg:t}=(await b()).paths;return{disposables:[Je.default.join(t,"public"),Je.default.join(t,"static"),Je.default.join(t,".cache")],cacheables:[".cache"]}}async function Mo(){let t=await b();t.needsRollbackOnError=!0,await L(t),c.info(`Render lifecycles that follow will restore the exports dir on error if needed
|
|
68
|
-
`)}async function
|
|
69
|
-
`)}async function
|
|
70
|
-
`);let h=new Ce({domain:t,pathsHydratedWithDomain:i,renderArtifacts:s,renderMetadata:o,renderMode:f,ssg:{assetPrefix:d,ssgArtifacts:a}});await O("Init",async()=>
|
|
67
|
+
</sitemapindex>`}async function So(t){let{__root:e}=await R(),{sitesToPublish:r}=await Fe(t),o=re.default.join(e,"current-dist"),i="sitemap-",n=s=>s==="sitemap.xml"||s.startsWith(i)&&s.endsWith(".xml");for(let s of r){let{id:a,languages:d}=s;for(let m of d){let f=q.headers?{...q.headers}:{};f.lang=m.id.toString();let l=await qr({siteId:a,headers:f});if(!l)continue;let{items:p,url:g}=l,{home:h,domain:P}=g;if(!h)continue;let N=s.domains.find(v=>Object.keys(v)[0]===m.id.toString());if(!N)continue;let I=Object.values(N)[0],C=[],B=Object.keys(p),G=re.default.join(o,I.replace(P,""));if(await D(G))try{let v=await Ee.default.readdir(G);for(let U of v)if(n(U)){let Y=re.default.join(G,U);try{await Ee.default.rm(Y)}catch(V){c.error(`Error deleting file ${Y}:`,V)}}}catch(v){c.error(`Error reading ${G}:`,v)}for(let v of B){let U=p[v];if(!U.length)continue;let Y=wo(U),V=`/${i}${v.toLowerCase()}.xml`,oe=re.default.join(G,V);await bo(oe,Y),c.verbose(`sitemap generated in ${oe}`),C.push(`${h.endsWith("/")?h.slice(0,-1):h}${V}`)}if(!C.length)continue;let pe=Ro(C),Q=re.default.join(G,"sitemap.xml");await bo(Q,pe),c.verbose(`sitemap generated in ${Q}`)}}}async function bo(t,e){try{let r=re.default.dirname(t);await D(r)||await Ee.default.mkdir(r,{recursive:!0}),await Ee.default.writeFile(t,e)}catch{throw new Error("Error saving a file")}}async function Eo(t){let{domain:e}=t;await Or(e),await So(e),await yo(e),await go(e)}async function _o(t){let{renderArtifacts:e}=t;await Vt(e.initials)}var Po=u(require("node:fs/promises")),Dt=u(require("node:path"));async function Io(t){let{pathsHydratedWithDomain:{__root:e,__ssg:r}}=t,o=Dt.default.join(r,"public"),i=Dt.default.join(e,"current-dist");await Po.default.rename(o,i)}async function To(t){let{renderMode:e,ssg:{ssgArtifacts:r},renderArtifacts:o,pathsHydratedWithDomain:{__components:i,__root:n,__cache:s,__ssg:a}}=t;await Xt(i,a,["static"]),e===_.INCREMENTAL&&(await ee(s,a,r.cacheables),await ee(s,n,o.cacheables))}var xo=require("node:child_process"),Ao=u(require("node:path"));async function $o(t){c.verbose(`read assetPrefixWithDomain, ${t}`),c.verbose(`using this NODE_OPTIONS in gatsby command: ${process.env.NODE_OPTIONS}`);let{__ssg:e}=await R(),r=process.env.NODE_OPTIONS?process.env.NODE_OPTIONS.replace(/--openssl-legacy-provider\s*/g,"").trim():"",o=Ao.default.join(e,"node_modules",".bin","gatsby"),i=["build","--prefix-paths"];return Mt&&i.push("--verbose"),process.env.NO_COLORS&&i.push("--no-colors"),new Promise((n,s)=>{let a=(0,xo.spawn)(o,i,{cwd:e,stdio:["ignore","inherit","inherit"],env:{...process.env,SPAWN_ASSET_PREFIX_WITH_DOMAIN:t,NODE_OPTIONS:r}});a.on("close",d=>{d===0?n():s(new Error(`Gatsby build failed with exit code ${d}`))}),a.on("error",d=>{s(new Error(`Failed to start Gatsby build process: ${d.message}`))})})}async function vo(t){let{ssg:{assetPrefix:e}}=t;await $o(e)}var Ue=u(require("node:fs/promises")),We=u(require("node:path"));var z=u(require("node:fs/promises")),E=u(require("node:path"));async function Oo(t){let{__root:e,__exports:r}=await R({domain:t}),o=(await z.default.readdir(E.default.join(r,"dist"))).filter(n=>E.default.extname(n)===".js"||E.default.extname(n)===".json"||E.default.extname(n)===".css");await z.default.mkdir(E.default.join(e,"assets"),{recursive:!0}),await z.default.cp(E.default.join(r,"dist","page-data"),E.default.join(e,"assets","page-data"),{preserveTimestamps:!0,recursive:!0}),await D(E.default.join(e,"static"))&&await z.default.cp(E.default.join(e,"static"),E.default.join(e,"assets"),{force:!1,preserveTimestamps:!0,recursive:!0}),await D(E.default.join(r,"dist","static"))&&await z.default.cp(E.default.join(r,"dist","static"),E.default.join(e,"assets","static"),{force:!1,preserveTimestamps:!0,recursive:!0}),await D(E.default.join(e,"static"))&&await z.default.cp(E.default.join(e,"static"),E.default.join(r,"dist",t),{preserveTimestamps:!0,recursive:!0,force:!1});let i=o.map(n=>{let s=E.default.join(r,"dist",n),a=E.default.join(e,"assets",n);return z.default.cp(s,a,{preserveTimestamps:!0,recursive:!0})});await Promise.all(i)}var M=u(require("node:fs/promises")),T=u(require("node:path"));var Co=require("node:crypto"),_e=u(require("node:fs/promises")),Lo=require("node:path");var Ni=[/\.js$/];async function Fo(t){let e=new Map;try{let o=(await _e.default.readdir(t)).filter(i=>Ni.some(n=>n.test(i)));for(let i of o){let n=(0,Lo.join)(t,i),s=await _e.default.readFile(n),a=(0,Co.createHash)("sha256").update(s).digest("hex");e.set(i,a)}return e}catch(r){return c.build(`ERROR: Error processing directory ${t}: ${r}`),e}}async function No(t,e){let[r,o]=await Promise.all([Fo(t),Fo(e)]);if(r.size!==o.size)return!0;for(let[i,n]of r.entries()){let s=o.get(i);if(!s||n!==s)return!0}return!1}async function Go(t,e){try{let r=await _e.default.readFile(t,"utf-8"),o=/(window\.___webpackCompilationHash=")([^"]*)(";<\/script>)/,i=r.replace(o,`$1${e}$3`);if(r===i)return;await _e.default.writeFile(t,i,"utf-8")}catch(r){c.error(`Failed to process file ${t}: ${r}`)}}var He=class{bundleDir;currentRenderDir;pagesToCreate;pagesToDelete;assetArtifacts;state={htmlToAdd:[],jsonToAdd:[],htmlToDelete:[],jsonToDelete:[]};constructor(e){this.bundleDir=e.dst,this.currentRenderDir=e.src,this.pagesToCreate=e.pagesToCreate,this.pagesToDelete=e.pagesToDelete,this.assetArtifacts=e.artifactsToCopyToExports}async execute(){await this.setPagesToDelete(),await this.setPagesToAdd(),await this.sync(),jt&&await this.assertAssetsAreValid()}async assertAssetsAreValid(){await No(this.currentRenderDir,this.bundleDir)?c.info("Warning: JavaScript and CSS bundles must have the same files and content. You can ignore this warning if the rendering process only has pages to unpublish."):c.info("Previous and current JavaScript and CSS packages successfully matched")}async setPagesToDelete(){let e=new Set([...this.pagesToDelete,...this.pagesToCreate]),r=await this.scanPages(this.bundleDir);for(let o of r)e.has(o.id)&&(this.state.htmlToDelete.push(o.htmlPath),this.state.jsonToDelete.push(o.jsonPath));c.verbose(`${this.state.htmlToDelete.length} pages HTML to delete`),c.verbose(`${this.state.jsonToDelete.length} pages JSON to delete`)}async setPagesToAdd(){let e=new Set(this.pagesToCreate),r=await this.scanPages(this.currentRenderDir);for(let o of r)if(e.has(o.id)){let i=T.default.join(this.bundleDir,o.composePath,"index.html"),n=o.composePath==="/"?"index":o.composePath,s=T.default.join(this.bundleDir,"page-data",n,"page-data.json");this.state.htmlToAdd.push({from:o.htmlPath,to:i}),this.state.jsonToAdd.push({from:o.jsonPath,to:s})}c.verbose(`${this.state.htmlToAdd.length} pages HTML to create`),c.verbose(`${this.state.jsonToAdd.length} pages JSON to create`)}async sync(){let e=[...this.state.htmlToDelete,...this.state.jsonToDelete];for(let o of e)try{await M.default.rm(o,{force:!0}),c.verbose(`Sync (remove) : ${o}`)}catch(i){c.error(`Failed to remove ${o}:`,i)}await this.restoreWebpackCompilationHash();let r=[...this.state.htmlToAdd,...this.state.jsonToAdd];for(let o of r)try{await M.default.mkdir(T.default.dirname(o.to),{recursive:!0}),await M.default.copyFile(o.from,o.to),c.verbose(`Sync (copy) : ${o.from} -> ${o.to}`)}catch(i){c.error(`Failed to copy ${o.from} to ${o.to}:`,i)}await this.copyAssetArtifacts(),await this.copySitemaps()}async restoreWebpackCompilationHash(){let e=T.default.join(this.bundleDir,"page-data","app-data.json"),r=JSON.parse(await M.default.readFile(e,"utf8")).webpackCompilationHash;c.verbose(`Reading webpackCompilationHash from ${e}: ${r}`);let o=this.state.htmlToAdd.map(({from:i})=>i);c.info(`Patching ${o.length} HTML files with the new webpackCompilationHash (${r})...`);for(let i of o)ye(`Patching HTML file ${i} with the new webpackCompilationHash`),await Go(i,r)}async copyAssetArtifacts(){for(let e of this.assetArtifacts){let r=T.default.join(this.currentRenderDir,e),o=T.default.join(this.bundleDir,e);try{await M.default.mkdir(T.default.dirname(o),{recursive:!0}),await M.default.copyFile(r,o),c.verbose(`Copied artifact: ${e}`)}catch(i){c.error(`Failed to copy artifact ${r} to ${o}:`,i)}}}async copySitemaps(){let e=T.default.resolve(this.currentRenderDir),r=T.default.resolve(this.bundleDir),o=fe(r,".xml");for await(let n of o){let s=T.default.basename(n);(s.startsWith("sitemap-")||s==="sitemap.xml")&&await M.default.rm(n,{force:!0})}let i=fe(e,".xml");for await(let n of i){let s=T.default.relative(e,n),a=T.default.join(r,s);try{await M.default.mkdir(T.default.dirname(a),{recursive:!0}),await M.default.copyFile(n,a)}catch(d){c.error(`Failed to copy sitemap ${n} to ${a}:`,d)}}c.verbose("Copied sitemap files.")}async scanPages(e){let r=Re(32),o=fe(T.default.join(e,"page-data"),"page-data.json"),i=[];for await(let s of o)i.push(r(async()=>{try{let a=await M.default.readFile(s,"utf-8"),d=JSON.parse(a),m=d.result.pageContext.id,f=d.result.pageContext.fullPath.compose;return{id:m,composePath:f,htmlPath:T.default.join(e,f,"index.html"),jsonPath:s}}catch(a){return c.error(`Error reading or parsing page data from ${s}:`,a),null}}));return(await Promise.all(i)).filter(s=>s!==null)}};async function jo(t){let{renderMode:e,renderArtifacts:r,domain:o,pagesToCreate:i,pagesToDelete:n,pathsHydratedWithDomain:{__root:s,__ssg:a,__cache:d,__exports:m},ssg:{ssgArtifacts:f,assetPrefix:l}}=t,p=!!l&&l!=="",g=We.default.join(s,"current-dist"),h=We.default.join(m,"dist");await ee(s,d,r.cacheables,{override:!0}),await ee(a,d,f.cacheables,{override:!0}),e===_.FROM_SCRATCH&&(await tt(g),await Ue.default.rm(h,{force:!0,recursive:!0}),await Ue.default.rename(g,h)),e===_.INCREMENTAL&&(await tt(h),await new He({src:g,dst:h,pagesToCreate:i,pagesToDelete:n,artifactsToCopyToExports:["build-report.json","llms.txt","robots.txt"]}).execute(),await Ue.default.rm(g,{force:!0,recursive:!0}),await rt(We.default.join(m,"dist"))),p&&await Oo(o),await ee(s,m,r.archivables,{override:!0})}var Je=u(require("node:path"));async function Mo(){let{ssg:t}=(await b()).paths;return{disposables:[Je.default.join(t,"public"),Je.default.join(t,"static"),Je.default.join(t,".cache")],cacheables:[".cache"]}}async function Bo(){let t=await b();t.needsRollbackOnError=!0,await L(t),c.info(`Render lifecycles that follow will restore the exports dir on error if needed
|
|
68
|
+
`)}async function ko(){let t=await b();t.needsRollbackOnError=!1,await L(t),c.info(`Render lifecycles that follow will not restore the exports dir on error
|
|
69
|
+
`)}async function Uo(t){await br();let{renderMode:e,reason:r}=await vr(t),o=await at(),i=await R({domain:t}),{__ssg:n}=i,s=await Fr(t),a=await Mo(),d=Qe?`${Qe}/${t}`:"",m=await D(Ho.default.join(n,`.render-sentinel-${t}`)),f=m?_.FROM_SCRATCH:e,l=m?"previous render error":r,p=await b();if(p.domains[t].renderMode=f,p.domains[t].renderModeReason=l,p.domains[t].isRendering=!1,e===_.IDLE&&f===_.IDLE){c.info(`(From Current Render) [${t}]: Skipping start-render as it is marked as IDLE with the reason ${r}.`);return}p.domains[t].isRendering=!0,p.currentRenderingDomain=t,await L(p);let g=l?` <${l}>`:"";c.info(`Init render (${f})${g} for domain ${t}
|
|
70
|
+
`);let h=new Ce({domain:t,pathsHydratedWithDomain:i,renderArtifacts:s,renderMetadata:o,renderMode:f,ssg:{assetPrefix:d,ssgArtifacts:a}});await O("Init",async()=>po(h)),await O("Clean",async()=>Cr(h)),await O("Prepare",async()=>_o(h)),await O("Restore",async()=>To(h)),await Bo(),await O("Data",async()=>lo(h)),await O("SSG",async()=>vo(h)),await O("Relocation",async()=>Io(h)),await O("Meta",async()=>Eo(h)),await O("Sync",async()=>jo(h)),await O("HealthCheck",async()=>mo(h)),await O("Logs",async()=>fo(h),{skip:ae?!1:"Build logs to file are disabled"}),await O("Close",async()=>Lr(h)),await ko()}async function Gi(){await q.login();let[t]=process.argv.slice(2);await Uo(t)}async function ji(){await ir(),await Gi()}tr(ji);
|
|
71
71
|
//# sourceMappingURL=start-render.js.map
|