PlayForm/Compress

error Cannot access uninitialized variable.

Closed this issue · 8 comments

After installing astro-compress when I try to build I get the following error:

error   Cannot access uninitialized variable.
  File:
    /home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js
  Code:
    1 | var P=(...[r={}])=>{Object.entries(r).forEach(([a,e])=>Object.defineProperty(r,a,{value:e===!0?d[a]:r[a]}));const{Path:o,Cache:s,Logger:w,Map:m,Exclude:h,Action:y,CSS:S,HTML:g,Image:j,JavaScript:b,SVG:A,Parser:l}=f(d,r),n=new Set;return typeof o<"u"&&(Array.isArray(o)||o instanceof Set)&&o.forEach(a=>n.add(a)),typeof l=="object"&&Object.entries(l).forEach(([a,e])=>Object.defineProperty(l,a,{value:Array.isArray(e)?e:[e]})),{name:"astro-compress",hooks:{"astro:build:done":async({dir:a})=>{if(typeof m=="object"){n.size||n.add(a),typeof s=="object"&&s.Search===I&&(s.Search=a);for(const[e,i]of Object.entries({CSS:S,HTML:g,Image:j,JavaScript:b,SVG:A})){if(!(i&&m[e])||typeof i!="object")return;p=f(y,f(y,{Wrote:async({Buffer:t,Input:c})=>{switch(e){case"CSS":return(await import("csso")).minify(t.toString(),i.csso).css;case"HTML":return await(await import("html-minifier-terser")).minify(t.toString(),i["html-minifier-terser"]);case"JavaScript":return(await(await import("terser")).minify(t.toString(),i.terser)).code??t;case"Image":return await(await import("../Function/Image/Writesharp.js")).default(i.sharp,{Buffer:t,Input:c});case"SVG":{const{data:T}=(await import("svgo")).optimize(t.toString(),i.svgo);return T??t}default:return t}},Fulfilled:async t=>t.Files>0?`Successfully compressed a total of ${t.Files} ${e} ${t.Files===1?"file":"files"} for ${await(await import("files-pipe/Target/Function/Bytes.js")).default(t.Info.Total)}.`:!1})),e==="Image"&&(p=f(p,{Read:async({Input:t})=>{const{format:c}=await u(t).metadata();return u(t,{failOn:"none",sequentialRead:!0,unlimited:!0,animated:c==="webp"||c==="gif"})}}));for(const t of n)await(await(await(await new(await import("files-pipe")).default(s,w).In(t)).By(m[e]??"**/*")).Not(h)).Pipe(p)}}}}}};const{default:d}=await import("../Variable/Option.js"),{default:{Cache:{Search:I}}}=await import("files-pipe/Target/Variable/Option.js"),{default:f}=await import("typescript-esbuild/Target/Function/Merge.js"),{default:u}=await import("sharp");let p;export{d as Default,u as Defaultsharp,f as Merge,I as Search,p as _Action,P as default};
  Stacktrace:
ReferenceError: Cannot access uninitialized variable.
    at <anonymous> (/home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js:0:741)
    at astro:build:done (/home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js:0:514)
    at <anonymous> (/home/lucas/Desktop/Separador/node_modules/astro/dist/integrations/index.js:330:51)
    at processTicksAndRejections (:61:39)

I am using Bun 1.0.13

Can you tell me more about your version, node version as well (if any) and maybe the configuration options.

Sure here is my astro.config.mjs:

import { defineConfig } from "astro/config";

import compress from "astro-compress";

// https://astro.build/config
export default defineConfig({
  vite: {
    server: {
      watch: {
        ignored: ["**/target/**"]
      }
    }
  },
  integrations: [compress()]
});

tsconfig.json:

{
  "extends": "astro/tsconfigs/strict",
    "compilerOptions": {
    "types": ["bun-types"]
  }
}

My node version is 21.2.0.
Astro version: 3.5.5
Astro-Compress version: 2.2.3

I'm unable to reproduce this on my local environment, can I ask you to open the file in VSCode, format it so that it's not minified or use a pretty print online https://beautifier.io/, save it and run again so we can debug this further.

Had the same issue, moved form bun to yarn. It worked. I don't think bun is quite a replacement for node/npm yet.

@hiteshjoshi It's working for me locally with this template https://github.com/Playform/AstroStarterTemplate on bun 1.0.13 node v21.2.0

Please if you can, either @hiteshjoshi or @lucascompython unminify (prettify whatever) the file and run build again, so we can debug this further. <3

So I prettified the file and I got the following output:

 error   Cannot access uninitialized variable.
  File:
    /home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js:37:28
  Code:
    36 |                         if (!(i && m[e]) || typeof i != "object") return;
    > 37 |                         p = f(y, f(y, {
         |                            ^
      38 |                             Wrote: async ({
      39 |                                 Buffer: t,
      40 |                                 Input: c
  Stacktrace:
ReferenceError: Cannot access uninitialized variable.
    at <anonymous> (/home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js:37:28)
    at astro:build:done (/home/lucas/Desktop/Separador/node_modules/astro-compress/Target/Function/Integration.js:24:21)
    at <anonymous> (/home/lucas/Desktop/Separador/node_modules/astro/dist/integrations/index.js:330:51)
    at processTicksAndRejections (:61:39)

I also noticed that if I try to add astro-compress with bunx --bun astro add astro-compress the program crashes in the confirmation part. But this could be "normal", in the Astro documentation they do not use the --bun flag.

Hi, @lucascompython, @hiteshjoshi, can you try v2.2.5 and see if the error fixed itself 😁 It's my only hope at this point.

Hi. I am sorry for the late reply. But it is working now. Thank you!