united-tattoo/.open-next/.build/open-next.config.edge.mjs
Nicholai 16cee69250 __Admin dashboard scaffolded with D1 database and R2 file uploads__
This commit implements the core admin dashboard functionality including NextAuth authentication, Cloudflare D1 database integration with complete schema, and Cloudflare R2 file upload system for portfolio images. Features include artist management, appointment scheduling, and data migration capabilities.
2025-09-17 16:08:34 -06:00

354 lines
11 KiB
JavaScript

var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
// node_modules/@opennextjs/cloudflare/dist/api/cloudflare-context.js
var cloudflareContextSymbol = Symbol.for("__cloudflare-context__");
function getCloudflareContext(options = { async: false }) {
return options.async ? getCloudflareContextAsync() : getCloudflareContextSync();
}
function getCloudflareContextFromGlobalScope() {
const global = globalThis;
return global[cloudflareContextSymbol];
}
function inSSG() {
const global = globalThis;
return global.__NEXT_DATA__?.nextExport === true;
}
function getCloudflareContextSync() {
const cloudflareContext = getCloudflareContextFromGlobalScope();
if (cloudflareContext) {
return cloudflareContext;
}
if (inSSG()) {
throw new Error(`
ERROR: \`getCloudflareContext\` has been called in sync mode in either a static route or at the top level of a non-static one, both cases are not allowed but can be solved by either:
- make sure that the call is not at the top level and that the route is not static
- call \`getCloudflareContext({async: true})\` to use the \`async\` mode
- avoid calling \`getCloudflareContext\` in the route
`);
}
throw new Error(initOpenNextCloudflareForDevErrorMsg);
}
async function getCloudflareContextAsync() {
const cloudflareContext = getCloudflareContextFromGlobalScope();
if (cloudflareContext) {
return cloudflareContext;
}
const inNodejsRuntime = process.env.NEXT_RUNTIME === "nodejs";
if (inNodejsRuntime || inSSG()) {
const cloudflareContext2 = await getCloudflareContextFromWrangler();
addCloudflareContextToNodejsGlobal(cloudflareContext2);
return cloudflareContext2;
}
throw new Error(initOpenNextCloudflareForDevErrorMsg);
}
function addCloudflareContextToNodejsGlobal(cloudflareContext) {
const global = globalThis;
global[cloudflareContextSymbol] = cloudflareContext;
}
async function getCloudflareContextFromWrangler(options) {
const { getPlatformProxy } = await import(
/* webpackIgnore: true */
`${"__wrangler".replaceAll("_", "")}`
);
const environment = options?.environment ?? process.env.NEXT_DEV_WRANGLER_ENV;
const { env, cf, ctx } = await getPlatformProxy({
...options,
environment
});
return {
env,
cf,
ctx
};
}
var initOpenNextCloudflareForDevErrorMsg = `
ERROR: \`getCloudflareContext\` has been called without having called \`initOpenNextCloudflareForDev\` from the Next.js config file.
You should update your Next.js config file as shown below:
\`\`\`
// next.config.mjs
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
initOpenNextCloudflareForDev();
const nextConfig = { ... };
export default nextConfig;
\`\`\`
`;
// node_modules/@opennextjs/cloudflare/dist/api/overrides/asset-resolver/index.js
var resolver = {
name: "cloudflare-asset-resolver",
async maybeGetAssetResult(event) {
const { ASSETS } = getCloudflareContext().env;
if (!ASSETS || !isUserWorkerFirst(globalThis.__ASSETS_RUN_WORKER_FIRST__, event.rawPath)) {
return void 0;
}
const { method, headers } = event;
if (method !== "GET" && method != "HEAD") {
return void 0;
}
const url = new URL(event.rawPath, "https://assets.local");
const response = await ASSETS.fetch(url, {
headers,
method
});
if (response.status === 404) {
await response.body?.cancel();
return void 0;
}
return {
type: "core",
statusCode: response.status,
headers: Object.fromEntries(response.headers.entries()),
// Workers and Node types differ.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
body: response.body || new ReadableStream(),
isBase64Encoded: false
};
}
};
function isUserWorkerFirst(runWorkerFirst, pathname) {
if (!Array.isArray(runWorkerFirst)) {
return runWorkerFirst ?? false;
}
let hasPositiveMatch = false;
for (let rule of runWorkerFirst) {
let isPositiveRule = true;
if (rule.startsWith("!")) {
rule = rule.slice(1);
isPositiveRule = false;
} else if (hasPositiveMatch) {
continue;
}
const match = new RegExp(`^${rule.replace(/([[\]().*+?^$|{}\\])/g, "\\$1").replace("\\*", ".*")}$`).test(pathname);
if (match) {
if (isPositiveRule) {
hasPositiveMatch = true;
} else {
return false;
}
}
}
return hasPositiveMatch;
}
var asset_resolver_default = resolver;
// node_modules/@opennextjs/cloudflare/dist/api/config.js
function defineCloudflareConfig(config = {}) {
const { incrementalCache, tagCache, queue, cachePurge, enableCacheInterception = false, routePreloadingBehavior = "none" } = config;
return {
default: {
override: {
wrapper: "cloudflare-node",
converter: "edge",
proxyExternalRequest: "fetch",
incrementalCache: resolveIncrementalCache(incrementalCache),
tagCache: resolveTagCache(tagCache),
queue: resolveQueue(queue),
cdnInvalidation: resolveCdnInvalidation(cachePurge)
},
routePreloadingBehavior
},
// node:crypto is used to compute cache keys
edgeExternals: ["node:crypto"],
cloudflare: {
useWorkerdCondition: true
},
dangerous: {
enableCacheInterception
},
middleware: {
external: true,
override: {
wrapper: "cloudflare-edge",
converter: "edge",
proxyExternalRequest: "fetch",
incrementalCache: resolveIncrementalCache(incrementalCache),
tagCache: resolveTagCache(tagCache),
queue: resolveQueue(queue)
},
assetResolver: () => asset_resolver_default
}
};
}
function resolveIncrementalCache(value = "dummy") {
if (typeof value === "string") {
return value;
}
return typeof value === "function" ? value : () => value;
}
function resolveTagCache(value = "dummy") {
if (typeof value === "string") {
return value;
}
return typeof value === "function" ? value : () => value;
}
function resolveQueue(value = "dummy") {
if (typeof value === "string") {
return value;
}
return typeof value === "function" ? value : () => value;
}
function resolveCdnInvalidation(value = "dummy") {
if (typeof value === "string") {
return value;
}
return typeof value === "function" ? value : () => value;
}
// node_modules/@opennextjs/aws/dist/utils/error.js
var IgnorableError = class extends Error {
constructor(message) {
super(message);
__publicField(this, "__openNextInternal", true);
__publicField(this, "canIgnore", true);
__publicField(this, "logLevel", 0);
this.name = "IgnorableError";
}
};
function isOpenNextError(e) {
try {
return "__openNextInternal" in e;
} catch {
return false;
}
}
// node_modules/@opennextjs/aws/dist/adapters/logger.js
function debug(...args) {
if (globalThis.openNextDebug) {
console.log(...args);
}
}
function warn(...args) {
console.warn(...args);
}
var DOWNPLAYED_ERROR_LOGS = [
{
clientName: "S3Client",
commandName: "GetObjectCommand",
errorName: "NoSuchKey"
}
];
var isDownplayedErrorLog = (errorLog) => DOWNPLAYED_ERROR_LOGS.some((downplayedInput) => downplayedInput.clientName === errorLog?.clientName && downplayedInput.commandName === errorLog?.commandName && (downplayedInput.errorName === errorLog?.error?.name || downplayedInput.errorName === errorLog?.error?.Code));
function error(...args) {
if (args.some((arg) => isDownplayedErrorLog(arg))) {
return debug(...args);
}
if (args.some((arg) => isOpenNextError(arg))) {
const error2 = args.find((arg) => isOpenNextError(arg));
if (error2.logLevel < getOpenNextErrorLogLevel()) {
return;
}
if (error2.logLevel === 0) {
return console.log(...args.map((arg) => isOpenNextError(arg) ? `${arg.name}: ${arg.message}` : arg));
}
if (error2.logLevel === 1) {
return warn(...args.map((arg) => isOpenNextError(arg) ? `${arg.name}: ${arg.message}` : arg));
}
return console.error(...args);
}
console.error(...args);
}
function getOpenNextErrorLogLevel() {
const strLevel = process.env.OPEN_NEXT_ERROR_LOG_LEVEL ?? "1";
switch (strLevel.toLowerCase()) {
case "debug":
case "0":
return 0;
case "error":
case "2":
return 2;
default:
return 1;
}
}
// node_modules/@opennextjs/cloudflare/dist/api/overrides/internal.js
import { createHash } from "node:crypto";
var debugCache = (name, ...args) => {
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {
console.log(`[${name}] `, ...args);
}
};
var FALLBACK_BUILD_ID = "no-build-id";
var DEFAULT_PREFIX = "incremental-cache";
function computeCacheKey(key, options) {
const { cacheType = "cache", prefix = DEFAULT_PREFIX, buildId = FALLBACK_BUILD_ID } = options;
const hash = createHash("sha256").update(key).digest("hex");
return `${prefix}/${buildId}/${hash}.${cacheType}`.replace(/\/+/g, "/");
}
// node_modules/@opennextjs/cloudflare/dist/api/overrides/incremental-cache/r2-incremental-cache.js
var NAME = "cf-r2-incremental-cache";
var BINDING_NAME = "NEXT_INC_CACHE_R2_BUCKET";
var PREFIX_ENV_NAME = "NEXT_INC_CACHE_R2_PREFIX";
var R2IncrementalCache = class {
constructor() {
__publicField(this, "name", NAME);
}
async get(key, cacheType) {
const r2 = getCloudflareContext().env[BINDING_NAME];
if (!r2)
throw new IgnorableError("No R2 bucket");
debugCache(`Get ${key}`);
try {
const r2Object = await r2.get(this.getR2Key(key, cacheType));
if (!r2Object)
return null;
return {
value: await r2Object.json(),
lastModified: r2Object.uploaded.getTime()
};
} catch (e) {
error("Failed to get from cache", e);
return null;
}
}
async set(key, value, cacheType) {
const r2 = getCloudflareContext().env[BINDING_NAME];
if (!r2)
throw new IgnorableError("No R2 bucket");
debugCache(`Set ${key}`);
try {
await r2.put(this.getR2Key(key, cacheType), JSON.stringify(value));
} catch (e) {
error("Failed to set to cache", e);
}
}
async delete(key) {
const r2 = getCloudflareContext().env[BINDING_NAME];
if (!r2)
throw new IgnorableError("No R2 bucket");
debugCache(`Delete ${key}`);
try {
await r2.delete(this.getR2Key(key));
} catch (e) {
error("Failed to delete from cache", e);
}
}
getR2Key(key, cacheType) {
return computeCacheKey(key, {
prefix: getCloudflareContext().env[PREFIX_ENV_NAME],
buildId: process.env.NEXT_BUILD_ID,
cacheType
});
}
};
var r2_incremental_cache_default = new R2IncrementalCache();
// open-next.config.ts
var open_next_config_default = defineCloudflareConfig({
incrementalCache: r2_incremental_cache_default
});
export {
open_next_config_default as default
};