| import { writeFile, mkdir, readFile } from 'node:fs/promises'; |
| import { existsSync } from 'node:fs'; |
| import { dirname, resolve } from 'node:path'; |
| import { fileURLToPath } from 'node:url'; |
|
|
| const __dirname = dirname(fileURLToPath(import.meta.url)); |
| const envPath = resolve(__dirname, '..', '..', '..', '.env'); |
| const outPath = resolve(__dirname, '..', 'public', 'g.js'); |
|
|
| if (!process.env.NEXT_PUBLIC_GTM_ID && existsSync(envPath)) { |
| const content = await readFile(envPath, 'utf8'); |
| for (const raw of content.split('\n')) { |
| const line = raw.trim(); |
| if (!line || line.startsWith('#')) continue; |
| const eq = line.indexOf('='); |
| if (eq === -1) continue; |
| const key = line.slice(0, eq).trim(); |
| let value = line.slice(eq + 1).trim(); |
| if ( |
| (value.startsWith('"') && value.endsWith('"')) || |
| (value.startsWith("'") && value.endsWith("'")) |
| ) { |
| value = value.slice(1, -1); |
| } |
| if (!process.env[key]) process.env[key] = value; |
| } |
| } |
|
|
| const id = process.env.NEXT_PUBLIC_GTM_ID; |
| if (!id) { |
| console.log('[fetch-gtm] NEXT_PUBLIC_GTM_ID not set, skipping'); |
| process.exit(0); |
| } |
|
|
| const url = `https://www.googletagmanager.com/gtm.js?id=${encodeURIComponent(id)}`; |
| try { |
| console.log(`[fetch-gtm] fetching ${url}`); |
| const res = await fetch(url); |
| if (!res.ok) { |
| console.warn(`[fetch-gtm] non-OK response ${res.status}, skipping`); |
| process.exit(0); |
| } |
| const body = await res.text(); |
| await mkdir(dirname(outPath), { recursive: true }); |
| await writeFile(outPath, body, 'utf8'); |
| console.log(`[fetch-gtm] wrote ${outPath} (${body.length} bytes)`); |
| } catch (err) { |
| console.warn(`[fetch-gtm] failed: ${err?.message || err}, skipping`); |
| process.exit(0); |
| } |
|
|