remove accidently pushed open-next
2
apps/web/.gitignore
vendored
@@ -12,7 +12,7 @@
|
||||
/out/
|
||||
/build
|
||||
*.tsbuildinfo
|
||||
.open-next
|
||||
/.open-next/
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
|
||||
@@ -1,524 +0,0 @@
|
||||
globalThis.disableIncrementalCache = false;globalThis.disableDynamoDBCache = false;globalThis.isNextAfter15 = true;globalThis.openNextDebug = false;globalThis.openNextVersion = "3.7.0";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/adapters/cache.js
|
||||
var cache_exports = {};
|
||||
__export(cache_exports, {
|
||||
default: () => Cache
|
||||
});
|
||||
module.exports = __toCommonJS(cache_exports);
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/utils/error.js
|
||||
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/aws/dist/utils/cache.js
|
||||
async function hasBeenRevalidated(key, tags, cacheEntry) {
|
||||
if (globalThis.openNextConfig.dangerous?.disableTagCache) {
|
||||
return false;
|
||||
}
|
||||
const value = cacheEntry.value;
|
||||
if (!value) {
|
||||
return true;
|
||||
}
|
||||
if ("type" in cacheEntry && cacheEntry.type === "page") {
|
||||
return false;
|
||||
}
|
||||
const lastModified = cacheEntry.lastModified ?? Date.now();
|
||||
if (globalThis.tagCache.mode === "nextMode") {
|
||||
return await globalThis.tagCache.hasBeenRevalidated(tags, lastModified);
|
||||
}
|
||||
const _lastModified = await globalThis.tagCache.getLastModified(key, lastModified);
|
||||
return _lastModified === -1;
|
||||
}
|
||||
function getTagsFromValue(value) {
|
||||
if (!value) {
|
||||
return [];
|
||||
}
|
||||
try {
|
||||
return value.meta?.headers?.["x-next-cache-tags"]?.split(",") ?? [];
|
||||
} catch (e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
function getTagKey(tag) {
|
||||
if (typeof tag === "string") {
|
||||
return tag;
|
||||
}
|
||||
return JSON.stringify({
|
||||
tag: tag.tag,
|
||||
path: tag.path
|
||||
});
|
||||
}
|
||||
async function writeTags(tags) {
|
||||
const store = globalThis.__openNextAls.getStore();
|
||||
debug("Writing tags", tags, store);
|
||||
if (!store || globalThis.openNextConfig.dangerous?.disableTagCache) {
|
||||
return;
|
||||
}
|
||||
const tagsToWrite = tags.filter((t) => {
|
||||
const tagKey = getTagKey(t);
|
||||
const shouldWrite = !store.writtenTags.has(tagKey);
|
||||
if (shouldWrite) {
|
||||
store.writtenTags.add(tagKey);
|
||||
}
|
||||
return shouldWrite;
|
||||
});
|
||||
if (tagsToWrite.length === 0) {
|
||||
return;
|
||||
}
|
||||
await globalThis.tagCache.writeTags(tagsToWrite);
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/utils/binary.js
|
||||
var commonBinaryMimeTypes = /* @__PURE__ */ new Set([
|
||||
"application/octet-stream",
|
||||
// Docs
|
||||
"application/epub+zip",
|
||||
"application/msword",
|
||||
"application/pdf",
|
||||
"application/rtf",
|
||||
"application/vnd.amazon.ebook",
|
||||
"application/vnd.ms-excel",
|
||||
"application/vnd.ms-powerpoint",
|
||||
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
// Fonts
|
||||
"font/otf",
|
||||
"font/woff",
|
||||
"font/woff2",
|
||||
// Images
|
||||
"image/bmp",
|
||||
"image/gif",
|
||||
"image/jpeg",
|
||||
"image/png",
|
||||
"image/tiff",
|
||||
"image/vnd.microsoft.icon",
|
||||
"image/webp",
|
||||
// Audio
|
||||
"audio/3gpp",
|
||||
"audio/aac",
|
||||
"audio/basic",
|
||||
"audio/flac",
|
||||
"audio/mpeg",
|
||||
"audio/ogg",
|
||||
"audio/wavaudio/webm",
|
||||
"audio/x-aiff",
|
||||
"audio/x-midi",
|
||||
"audio/x-wav",
|
||||
// Video
|
||||
"video/3gpp",
|
||||
"video/mp2t",
|
||||
"video/mpeg",
|
||||
"video/ogg",
|
||||
"video/quicktime",
|
||||
"video/webm",
|
||||
"video/x-msvideo",
|
||||
// Archives
|
||||
"application/java-archive",
|
||||
"application/vnd.apple.installer+xml",
|
||||
"application/x-7z-compressed",
|
||||
"application/x-apple-diskimage",
|
||||
"application/x-bzip",
|
||||
"application/x-bzip2",
|
||||
"application/x-gzip",
|
||||
"application/x-java-archive",
|
||||
"application/x-rar-compressed",
|
||||
"application/x-tar",
|
||||
"application/x-zip",
|
||||
"application/zip",
|
||||
// Serialized data
|
||||
"application/x-protobuf"
|
||||
]);
|
||||
function isBinaryContentType(contentType) {
|
||||
if (!contentType)
|
||||
return false;
|
||||
const value = contentType?.split(";")[0] ?? "";
|
||||
return commonBinaryMimeTypes.has(value);
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/adapters/cache.js
|
||||
function isFetchCache(options) {
|
||||
if (typeof options === "boolean") {
|
||||
return options;
|
||||
}
|
||||
if (typeof options === "object") {
|
||||
return options.kindHint === "fetch" || options.fetchCache || options.kind === "FETCH";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
var Cache = class {
|
||||
async get(key, options) {
|
||||
if (globalThis.openNextConfig.dangerous?.disableIncrementalCache) {
|
||||
return null;
|
||||
}
|
||||
const softTags = typeof options === "object" ? options.softTags : [];
|
||||
const tags = typeof options === "object" ? options.tags : [];
|
||||
return isFetchCache(options) ? this.getFetchCache(key, softTags, tags) : this.getIncrementalCache(key);
|
||||
}
|
||||
async getFetchCache(key, softTags, tags) {
|
||||
debug("get fetch cache", { key, softTags, tags });
|
||||
try {
|
||||
const cachedEntry = await globalThis.incrementalCache.get(key, "fetch");
|
||||
if (cachedEntry?.value === void 0)
|
||||
return null;
|
||||
const _tags = [...tags ?? [], ...softTags ?? []];
|
||||
const _lastModified = cachedEntry.lastModified ?? Date.now();
|
||||
const _hasBeenRevalidated = await hasBeenRevalidated(key, _tags, cachedEntry);
|
||||
if (_hasBeenRevalidated)
|
||||
return null;
|
||||
if ((tags ?? []).length === 0) {
|
||||
const path = softTags?.find((tag) => tag.startsWith("_N_T_/") && !tag.endsWith("layout") && !tag.endsWith("page"));
|
||||
if (path) {
|
||||
const hasPathBeenUpdated = await hasBeenRevalidated(path.replace("_N_T_/", ""), [], cachedEntry);
|
||||
if (hasPathBeenUpdated) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
lastModified: _lastModified,
|
||||
value: cachedEntry.value
|
||||
};
|
||||
} catch (e) {
|
||||
debug("Failed to get fetch cache", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async getIncrementalCache(key) {
|
||||
try {
|
||||
const cachedEntry = await globalThis.incrementalCache.get(key, "cache");
|
||||
if (!cachedEntry?.value) {
|
||||
return null;
|
||||
}
|
||||
const cacheData = cachedEntry.value;
|
||||
const meta = cacheData.meta;
|
||||
const tags = getTagsFromValue(cacheData);
|
||||
const _lastModified = cachedEntry.lastModified ?? Date.now();
|
||||
const _hasBeenRevalidated = await hasBeenRevalidated(key, tags, cachedEntry);
|
||||
if (_hasBeenRevalidated)
|
||||
return null;
|
||||
const store = globalThis.__openNextAls.getStore();
|
||||
if (store) {
|
||||
store.lastModified = _lastModified;
|
||||
}
|
||||
if (cacheData?.type === "route") {
|
||||
return {
|
||||
lastModified: _lastModified,
|
||||
value: {
|
||||
kind: globalThis.isNextAfter15 ? "APP_ROUTE" : "ROUTE",
|
||||
body: Buffer.from(cacheData.body ?? Buffer.alloc(0), isBinaryContentType(String(meta?.headers?.["content-type"])) ? "base64" : "utf8"),
|
||||
status: meta?.status,
|
||||
headers: meta?.headers
|
||||
}
|
||||
};
|
||||
}
|
||||
if (cacheData?.type === "page" || cacheData?.type === "app") {
|
||||
if (globalThis.isNextAfter15 && cacheData?.type === "app") {
|
||||
return {
|
||||
lastModified: _lastModified,
|
||||
value: {
|
||||
kind: "APP_PAGE",
|
||||
html: cacheData.html,
|
||||
rscData: Buffer.from(cacheData.rsc),
|
||||
status: meta?.status,
|
||||
headers: meta?.headers,
|
||||
postponed: meta?.postponed
|
||||
}
|
||||
};
|
||||
}
|
||||
return {
|
||||
lastModified: _lastModified,
|
||||
value: {
|
||||
kind: globalThis.isNextAfter15 ? "PAGES" : "PAGE",
|
||||
html: cacheData.html,
|
||||
pageData: cacheData.type === "page" ? cacheData.json : cacheData.rsc,
|
||||
status: meta?.status,
|
||||
headers: meta?.headers
|
||||
}
|
||||
};
|
||||
}
|
||||
if (cacheData?.type === "redirect") {
|
||||
return {
|
||||
lastModified: _lastModified,
|
||||
value: {
|
||||
kind: "REDIRECT",
|
||||
props: cacheData.props
|
||||
}
|
||||
};
|
||||
}
|
||||
warn("Unknown cache type", cacheData);
|
||||
return null;
|
||||
} catch (e) {
|
||||
debug("Failed to get body cache", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async set(key, data, ctx) {
|
||||
if (globalThis.openNextConfig.dangerous?.disableIncrementalCache) {
|
||||
return;
|
||||
}
|
||||
const detachedPromise = globalThis.__openNextAls.getStore()?.pendingPromiseRunner.withResolvers();
|
||||
try {
|
||||
if (data === null || data === void 0) {
|
||||
await globalThis.incrementalCache.delete(key);
|
||||
} else {
|
||||
const revalidate = this.extractRevalidateForSet(ctx);
|
||||
switch (data.kind) {
|
||||
case "ROUTE":
|
||||
case "APP_ROUTE": {
|
||||
const { body, status, headers } = data;
|
||||
await globalThis.incrementalCache.set(key, {
|
||||
type: "route",
|
||||
body: body.toString(isBinaryContentType(String(headers["content-type"])) ? "base64" : "utf8"),
|
||||
meta: {
|
||||
status,
|
||||
headers
|
||||
},
|
||||
revalidate
|
||||
}, "cache");
|
||||
break;
|
||||
}
|
||||
case "PAGE":
|
||||
case "PAGES": {
|
||||
const { html, pageData, status, headers } = data;
|
||||
const isAppPath = typeof pageData === "string";
|
||||
if (isAppPath) {
|
||||
await globalThis.incrementalCache.set(key, {
|
||||
type: "app",
|
||||
html,
|
||||
rsc: pageData,
|
||||
meta: {
|
||||
status,
|
||||
headers
|
||||
},
|
||||
revalidate
|
||||
}, "cache");
|
||||
} else {
|
||||
await globalThis.incrementalCache.set(key, {
|
||||
type: "page",
|
||||
html,
|
||||
json: pageData,
|
||||
revalidate
|
||||
}, "cache");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "APP_PAGE": {
|
||||
const { html, rscData, headers, status } = data;
|
||||
await globalThis.incrementalCache.set(key, {
|
||||
type: "app",
|
||||
html,
|
||||
rsc: rscData.toString("utf8"),
|
||||
meta: {
|
||||
status,
|
||||
headers
|
||||
},
|
||||
revalidate
|
||||
}, "cache");
|
||||
break;
|
||||
}
|
||||
case "FETCH":
|
||||
await globalThis.incrementalCache.set(key, data, "fetch");
|
||||
break;
|
||||
case "REDIRECT":
|
||||
await globalThis.incrementalCache.set(key, {
|
||||
type: "redirect",
|
||||
props: data.props,
|
||||
revalidate
|
||||
}, "cache");
|
||||
break;
|
||||
case "IMAGE":
|
||||
break;
|
||||
}
|
||||
}
|
||||
await this.updateTagsOnSet(key, data, ctx);
|
||||
debug("Finished setting cache");
|
||||
} catch (e) {
|
||||
error("Failed to set cache", e);
|
||||
} finally {
|
||||
detachedPromise?.resolve();
|
||||
}
|
||||
}
|
||||
async revalidateTag(tags) {
|
||||
const config = globalThis.openNextConfig.dangerous;
|
||||
if (config?.disableTagCache || config?.disableIncrementalCache) {
|
||||
return;
|
||||
}
|
||||
const _tags = Array.isArray(tags) ? tags : [tags];
|
||||
if (_tags.length === 0) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (globalThis.tagCache.mode === "nextMode") {
|
||||
const paths = await globalThis.tagCache.getPathsByTags?.(_tags) ?? [];
|
||||
await writeTags(_tags);
|
||||
if (paths.length > 0) {
|
||||
await globalThis.cdnInvalidationHandler.invalidatePaths(paths.map((path) => ({
|
||||
initialPath: path,
|
||||
rawPath: path,
|
||||
resolvedRoutes: [
|
||||
{
|
||||
route: path,
|
||||
// TODO: ideally here we should check if it's an app router page or route
|
||||
type: "app"
|
||||
}
|
||||
]
|
||||
})));
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (const tag of _tags) {
|
||||
debug("revalidateTag", tag);
|
||||
const paths = await globalThis.tagCache.getByTag(tag);
|
||||
debug("Items", paths);
|
||||
const toInsert = paths.map((path) => ({
|
||||
path,
|
||||
tag
|
||||
}));
|
||||
if (tag.startsWith("_N_T_/")) {
|
||||
for (const path of paths) {
|
||||
const _tags2 = await globalThis.tagCache.getByPath(path);
|
||||
const hardTags = _tags2.filter((t) => !t.startsWith("_N_T_/"));
|
||||
for (const hardTag of hardTags) {
|
||||
const _paths = await globalThis.tagCache.getByTag(hardTag);
|
||||
debug({ hardTag, _paths });
|
||||
toInsert.push(..._paths.map((path2) => ({
|
||||
path: path2,
|
||||
tag: hardTag
|
||||
})));
|
||||
}
|
||||
}
|
||||
}
|
||||
await writeTags(toInsert);
|
||||
const uniquePaths = Array.from(new Set(toInsert.filter((t) => t.tag.startsWith("_N_T_/")).map((t) => `/${t.path}`)));
|
||||
if (uniquePaths.length > 0) {
|
||||
await globalThis.cdnInvalidationHandler.invalidatePaths(uniquePaths.map((path) => ({
|
||||
initialPath: path,
|
||||
rawPath: path,
|
||||
resolvedRoutes: [
|
||||
{
|
||||
route: path,
|
||||
// TODO: ideally here we should check if it's an app router page or route
|
||||
type: "app"
|
||||
}
|
||||
]
|
||||
})));
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
error("Failed to revalidate tag", e);
|
||||
}
|
||||
}
|
||||
// TODO: We should delete/update tags in this method
|
||||
// This will require an update to the tag cache interface
|
||||
async updateTagsOnSet(key, data, ctx) {
|
||||
if (globalThis.openNextConfig.dangerous?.disableTagCache || globalThis.tagCache.mode === "nextMode" || // Here it means it's a delete
|
||||
!data) {
|
||||
return;
|
||||
}
|
||||
const derivedTags = data?.kind === "FETCH" ? (
|
||||
//@ts-expect-error - On older versions of next, ctx was a number, but for these cases we use data?.data?.tags
|
||||
ctx?.tags ?? data?.data?.tags ?? []
|
||||
) : data?.kind === "PAGE" ? data.headers?.["x-next-cache-tags"]?.split(",") ?? [] : [];
|
||||
debug("derivedTags", derivedTags);
|
||||
const storedTags = await globalThis.tagCache.getByPath(key);
|
||||
const tagsToWrite = derivedTags.filter((tag) => !storedTags.includes(tag));
|
||||
if (tagsToWrite.length > 0) {
|
||||
await writeTags(tagsToWrite.map((tag) => ({
|
||||
path: key,
|
||||
tag,
|
||||
// In case the tags are not there we just need to create them
|
||||
// but we don't want them to return from `getLastModified` as they are not stale
|
||||
revalidatedAt: 1
|
||||
})));
|
||||
}
|
||||
}
|
||||
extractRevalidateForSet(ctx) {
|
||||
if (ctx === void 0) {
|
||||
return void 0;
|
||||
}
|
||||
if (typeof ctx === "number" || ctx === false) {
|
||||
return ctx;
|
||||
}
|
||||
if ("revalidate" in ctx) {
|
||||
return ctx.revalidate;
|
||||
}
|
||||
if ("cacheControl" in ctx) {
|
||||
return ctx.cacheControl?.revalidate;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
};
|
||||
@@ -1,169 +0,0 @@
|
||||
globalThis.disableIncrementalCache = false;globalThis.disableDynamoDBCache = false;globalThis.isNextAfter15 = true;globalThis.openNextDebug = false;globalThis.openNextVersion = "3.7.0";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/adapters/composable-cache.js
|
||||
var composable_cache_exports = {};
|
||||
__export(composable_cache_exports, {
|
||||
default: () => composable_cache_default
|
||||
});
|
||||
module.exports = __toCommonJS(composable_cache_exports);
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/adapters/logger.js
|
||||
function debug(...args) {
|
||||
if (globalThis.openNextDebug) {
|
||||
console.log(...args);
|
||||
}
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/utils/cache.js
|
||||
function getTagKey(tag) {
|
||||
if (typeof tag === "string") {
|
||||
return tag;
|
||||
}
|
||||
return JSON.stringify({
|
||||
tag: tag.tag,
|
||||
path: tag.path
|
||||
});
|
||||
}
|
||||
async function writeTags(tags) {
|
||||
const store = globalThis.__openNextAls.getStore();
|
||||
debug("Writing tags", tags, store);
|
||||
if (!store || globalThis.openNextConfig.dangerous?.disableTagCache) {
|
||||
return;
|
||||
}
|
||||
const tagsToWrite = tags.filter((t) => {
|
||||
const tagKey = getTagKey(t);
|
||||
const shouldWrite = !store.writtenTags.has(tagKey);
|
||||
if (shouldWrite) {
|
||||
store.writtenTags.add(tagKey);
|
||||
}
|
||||
return shouldWrite;
|
||||
});
|
||||
if (tagsToWrite.length === 0) {
|
||||
return;
|
||||
}
|
||||
await globalThis.tagCache.writeTags(tagsToWrite);
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/utils/stream.js
|
||||
var import_node_stream = require("node:stream");
|
||||
function fromReadableStream(stream, base64) {
|
||||
const reader = stream.getReader();
|
||||
const chunks = [];
|
||||
return new Promise((resolve, reject) => {
|
||||
function pump() {
|
||||
reader.read().then(({ done, value }) => {
|
||||
if (done) {
|
||||
resolve(Buffer.concat(chunks).toString(base64 ? "base64" : "utf8"));
|
||||
return;
|
||||
}
|
||||
chunks.push(value);
|
||||
pump();
|
||||
}).catch(reject);
|
||||
}
|
||||
pump();
|
||||
});
|
||||
}
|
||||
function toReadableStream(value, isBase64) {
|
||||
return import_node_stream.Readable.toWeb(import_node_stream.Readable.from(Buffer.from(value, isBase64 ? "base64" : "utf8")));
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/adapters/composable-cache.js
|
||||
var pendingWritePromiseMap = /* @__PURE__ */ new Map();
|
||||
var composable_cache_default = {
|
||||
async get(cacheKey) {
|
||||
try {
|
||||
if (pendingWritePromiseMap.has(cacheKey)) {
|
||||
return pendingWritePromiseMap.get(cacheKey);
|
||||
}
|
||||
const result = await globalThis.incrementalCache.get(cacheKey, "composable");
|
||||
if (!result?.value?.value) {
|
||||
return void 0;
|
||||
}
|
||||
debug("composable cache result", result);
|
||||
if (globalThis.tagCache.mode === "nextMode" && result.value.tags.length > 0) {
|
||||
const hasBeenRevalidated = await globalThis.tagCache.hasBeenRevalidated(result.value.tags, result.lastModified);
|
||||
if (hasBeenRevalidated)
|
||||
return void 0;
|
||||
} else if (globalThis.tagCache.mode === "original" || globalThis.tagCache.mode === void 0) {
|
||||
const hasBeenRevalidated = await globalThis.tagCache.getLastModified(cacheKey, result.lastModified) === -1;
|
||||
if (hasBeenRevalidated)
|
||||
return void 0;
|
||||
}
|
||||
return {
|
||||
...result.value,
|
||||
value: toReadableStream(result.value.value)
|
||||
};
|
||||
} catch (e) {
|
||||
debug("Cannot read composable cache entry");
|
||||
return void 0;
|
||||
}
|
||||
},
|
||||
async set(cacheKey, pendingEntry) {
|
||||
pendingWritePromiseMap.set(cacheKey, pendingEntry);
|
||||
const entry = await pendingEntry.finally(() => {
|
||||
pendingWritePromiseMap.delete(cacheKey);
|
||||
});
|
||||
const valueToStore = await fromReadableStream(entry.value);
|
||||
await globalThis.incrementalCache.set(cacheKey, {
|
||||
...entry,
|
||||
value: valueToStore
|
||||
}, "composable");
|
||||
if (globalThis.tagCache.mode === "original") {
|
||||
const storedTags = await globalThis.tagCache.getByPath(cacheKey);
|
||||
const tagsToWrite = entry.tags.filter((tag) => !storedTags.includes(tag));
|
||||
if (tagsToWrite.length > 0) {
|
||||
await writeTags(tagsToWrite.map((tag) => ({ tag, path: cacheKey })));
|
||||
}
|
||||
}
|
||||
},
|
||||
async refreshTags() {
|
||||
return;
|
||||
},
|
||||
async getExpiration(...tags) {
|
||||
if (globalThis.tagCache.mode === "nextMode") {
|
||||
return globalThis.tagCache.getLastRevalidated(tags);
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
async expireTags(...tags) {
|
||||
if (globalThis.tagCache.mode === "nextMode") {
|
||||
return writeTags(tags);
|
||||
}
|
||||
const tagCache = globalThis.tagCache;
|
||||
const revalidatedAt = Date.now();
|
||||
const pathsToUpdate = await Promise.all(tags.map(async (tag) => {
|
||||
const paths = await tagCache.getByTag(tag);
|
||||
return paths.map((path) => ({
|
||||
path,
|
||||
tag,
|
||||
revalidatedAt
|
||||
}));
|
||||
}));
|
||||
const setToWrite = /* @__PURE__ */ new Set();
|
||||
for (const entry of pathsToUpdate.flat()) {
|
||||
setToWrite.add(entry);
|
||||
}
|
||||
await writeTags(Array.from(setToWrite));
|
||||
},
|
||||
// This one is necessary for older versions of next
|
||||
async receiveExpiredTags(...tags) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
@@ -1,104 +0,0 @@
|
||||
globalThis.openNextDebug = false;globalThis.openNextVersion = "3.7.0";
|
||||
|
||||
// ../../node_modules/@opennextjs/cloudflare/dist/api/durable-objects/bucket-cache-purge.js
|
||||
import { DurableObject } from "cloudflare:workers";
|
||||
|
||||
// ../../node_modules/@opennextjs/cloudflare/dist/api/cloudflare-context.js
|
||||
var cloudflareContextSymbol = Symbol.for("__cloudflare-context__");
|
||||
|
||||
// ../../node_modules/@opennextjs/cloudflare/dist/api/overrides/internal.js
|
||||
var debugCache = (name, ...args) => {
|
||||
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {
|
||||
console.log(`[${name}] `, ...args);
|
||||
}
|
||||
};
|
||||
async function internalPurgeCacheByTags(env, tags) {
|
||||
if (!env.CACHE_PURGE_ZONE_ID && !env.CACHE_PURGE_API_TOKEN) {
|
||||
debugCache("purgeCacheByTags", "No cache zone ID or API token provided. Skipping cache purge.");
|
||||
return "missing-credentials";
|
||||
}
|
||||
try {
|
||||
const response = await fetch(`https://api.cloudflare.com/client/v4/zones/${env.CACHE_PURGE_ZONE_ID}/purge_cache`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.CACHE_PURGE_API_TOKEN}`,
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
tags
|
||||
})
|
||||
});
|
||||
if (response.status === 429) {
|
||||
debugCache("purgeCacheByTags", "Rate limit exceeded. Skipping cache purge.");
|
||||
return "rate-limit-exceeded";
|
||||
}
|
||||
const bodyResponse = await response.json();
|
||||
if (!bodyResponse.success) {
|
||||
debugCache("purgeCacheByTags", "Cache purge failed. Errors:", bodyResponse.errors.map((error) => `${error.code}: ${error.message}`));
|
||||
return "purge-failed";
|
||||
}
|
||||
debugCache("purgeCacheByTags", "Cache purged successfully for tags:", tags);
|
||||
return "purge-success";
|
||||
} catch (error) {
|
||||
console.error("Error purging cache by tags:", error);
|
||||
return "purge-failed";
|
||||
}
|
||||
}
|
||||
|
||||
// ../../node_modules/@opennextjs/cloudflare/dist/api/durable-objects/bucket-cache-purge.js
|
||||
var DEFAULT_BUFFER_TIME_IN_SECONDS = 5;
|
||||
var MAX_NUMBER_OF_TAGS_PER_PURGE = 100;
|
||||
var BucketCachePurge = class extends DurableObject {
|
||||
bufferTimeInSeconds;
|
||||
constructor(state, env) {
|
||||
super(state, env);
|
||||
this.bufferTimeInSeconds = env.NEXT_CACHE_DO_PURGE_BUFFER_TIME_IN_SECONDS ? parseInt(env.NEXT_CACHE_DO_PURGE_BUFFER_TIME_IN_SECONDS) : DEFAULT_BUFFER_TIME_IN_SECONDS;
|
||||
state.blockConcurrencyWhile(async () => {
|
||||
state.storage.sql.exec(`
|
||||
CREATE TABLE IF NOT EXISTS cache_purge (
|
||||
tag TEXT NOT NULL
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS tag_index ON cache_purge (tag);
|
||||
`);
|
||||
});
|
||||
}
|
||||
async purgeCacheByTags(tags) {
|
||||
for (const tag of tags) {
|
||||
this.ctx.storage.sql.exec(`
|
||||
INSERT OR REPLACE INTO cache_purge (tag)
|
||||
VALUES (?)`, [tag]);
|
||||
}
|
||||
const nextAlarm = await this.ctx.storage.getAlarm();
|
||||
if (!nextAlarm) {
|
||||
this.ctx.storage.setAlarm(Date.now() + this.bufferTimeInSeconds * 1e3);
|
||||
}
|
||||
}
|
||||
async alarm() {
|
||||
let tags = this.ctx.storage.sql.exec(`
|
||||
SELECT * FROM cache_purge LIMIT ${MAX_NUMBER_OF_TAGS_PER_PURGE}
|
||||
`).toArray();
|
||||
do {
|
||||
if (tags.length === 0) {
|
||||
return;
|
||||
}
|
||||
const result = await internalPurgeCacheByTags(this.env, tags.map((row) => row.tag));
|
||||
if (result === "rate-limit-exceeded") {
|
||||
throw new Error("Rate limit exceeded");
|
||||
}
|
||||
this.ctx.storage.sql.exec(`
|
||||
DELETE FROM cache_purge
|
||||
WHERE tag IN (${tags.map(() => "?").join(",")})
|
||||
`, tags.map((row) => row.tag));
|
||||
if (tags.length < MAX_NUMBER_OF_TAGS_PER_PURGE) {
|
||||
tags = [];
|
||||
} else {
|
||||
tags = this.ctx.storage.sql.exec(`
|
||||
SELECT * FROM cache_purge LIMIT ${MAX_NUMBER_OF_TAGS_PER_PURGE}
|
||||
`).toArray();
|
||||
}
|
||||
} while (tags.length >= 0);
|
||||
}
|
||||
};
|
||||
export {
|
||||
BucketCachePurge
|
||||
};
|
||||
@@ -1,278 +0,0 @@
|
||||
globalThis.openNextDebug = false;globalThis.openNextVersion = "3.7.0";
|
||||
|
||||
// ../../node_modules/@opennextjs/aws/dist/utils/error.js
|
||||
var IgnorableError = class extends Error {
|
||||
__openNextInternal = true;
|
||||
canIgnore = true;
|
||||
logLevel = 0;
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = "IgnorableError";
|
||||
}
|
||||
};
|
||||
var RecoverableError = class extends Error {
|
||||
__openNextInternal = true;
|
||||
canIgnore = true;
|
||||
logLevel = 1;
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = "RecoverableError";
|
||||
}
|
||||
};
|
||||
var FatalError = class extends Error {
|
||||
__openNextInternal = true;
|
||||
canIgnore = false;
|
||||
logLevel = 2;
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = "FatalError";
|
||||
}
|
||||
};
|
||||
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/durable-objects/queue.js
|
||||
import { DurableObject } from "cloudflare:workers";
|
||||
var DEFAULT_MAX_REVALIDATION = 5;
|
||||
var DEFAULT_REVALIDATION_TIMEOUT_MS = 1e4;
|
||||
var DEFAULT_RETRY_INTERVAL_MS = 2e3;
|
||||
var DEFAULT_MAX_RETRIES = 6;
|
||||
var DOQueueHandler = class extends DurableObject {
|
||||
// Ongoing revalidations are deduped by the deduplication id
|
||||
// Since this is running in waitUntil, we expect the durable object state to persist this during the duration of the revalidation
|
||||
// TODO: handle incremental cache with only eventual consistency (i.e. KV or R2/D1 with the optional cache layer on top)
|
||||
ongoingRevalidations = /* @__PURE__ */ new Map();
|
||||
sql;
|
||||
routeInFailedState = /* @__PURE__ */ new Map();
|
||||
service;
|
||||
// Configurable params
|
||||
maxRevalidations;
|
||||
revalidationTimeout;
|
||||
revalidationRetryInterval;
|
||||
maxRetries;
|
||||
disableSQLite;
|
||||
constructor(ctx, env) {
|
||||
super(ctx, env);
|
||||
this.service = env.WORKER_SELF_REFERENCE;
|
||||
if (!this.service)
|
||||
throw new IgnorableError("No service binding for cache revalidation worker");
|
||||
this.sql = ctx.storage.sql;
|
||||
this.maxRevalidations = env.NEXT_CACHE_DO_QUEUE_MAX_REVALIDATION ? parseInt(env.NEXT_CACHE_DO_QUEUE_MAX_REVALIDATION) : DEFAULT_MAX_REVALIDATION;
|
||||
this.revalidationTimeout = env.NEXT_CACHE_DO_QUEUE_REVALIDATION_TIMEOUT_MS ? parseInt(env.NEXT_CACHE_DO_QUEUE_REVALIDATION_TIMEOUT_MS) : DEFAULT_REVALIDATION_TIMEOUT_MS;
|
||||
this.revalidationRetryInterval = env.NEXT_CACHE_DO_QUEUE_RETRY_INTERVAL_MS ? parseInt(env.NEXT_CACHE_DO_QUEUE_RETRY_INTERVAL_MS) : DEFAULT_RETRY_INTERVAL_MS;
|
||||
this.maxRetries = env.NEXT_CACHE_DO_QUEUE_MAX_RETRIES ? parseInt(env.NEXT_CACHE_DO_QUEUE_MAX_RETRIES) : DEFAULT_MAX_RETRIES;
|
||||
this.disableSQLite = env.NEXT_CACHE_DO_QUEUE_DISABLE_SQLITE === "true";
|
||||
ctx.blockConcurrencyWhile(async () => {
|
||||
debug(`Restoring the state of the durable object`);
|
||||
await this.initState();
|
||||
});
|
||||
debug(`Durable object initialized`);
|
||||
}
|
||||
async revalidate(msg) {
|
||||
if (this.ongoingRevalidations.size > 2 * this.maxRevalidations) {
|
||||
warn(`Your durable object has 2 times the maximum number of revalidations (${this.maxRevalidations}) in progress. If this happens often, you should consider increasing the NEXT_CACHE_DO_QUEUE_MAX_REVALIDATION or the number of durable objects with the MAX_REVALIDATE_CONCURRENCY env var.`);
|
||||
}
|
||||
if (this.ongoingRevalidations.has(msg.MessageDeduplicationId))
|
||||
return;
|
||||
if (this.routeInFailedState.has(msg.MessageDeduplicationId))
|
||||
return;
|
||||
if (this.checkSyncTable(msg))
|
||||
return;
|
||||
if (this.ongoingRevalidations.size >= this.maxRevalidations) {
|
||||
debug(`The maximum number of revalidations (${this.maxRevalidations}) is reached. Blocking until one of the revalidations finishes.`);
|
||||
while (this.ongoingRevalidations.size >= this.maxRevalidations) {
|
||||
const ongoingRevalidations = this.ongoingRevalidations.values();
|
||||
debug(`Waiting for one of the revalidations to finish`);
|
||||
await Promise.race(ongoingRevalidations);
|
||||
}
|
||||
}
|
||||
const revalidationPromise = this.executeRevalidation(msg);
|
||||
this.ongoingRevalidations.set(msg.MessageDeduplicationId, revalidationPromise);
|
||||
this.ctx.waitUntil(revalidationPromise);
|
||||
}
|
||||
async executeRevalidation(msg) {
|
||||
try {
|
||||
debug(`Revalidating ${msg.MessageBody.host}${msg.MessageBody.url}`);
|
||||
const { MessageBody: { host, url } } = msg;
|
||||
const protocol = host.includes("localhost") ? "http" : "https";
|
||||
const response = await this.service.fetch(`${protocol}://${host}${url}`, {
|
||||
method: "HEAD",
|
||||
headers: {
|
||||
// This is defined during build
|
||||
"x-prerender-revalidate": "b2762359d1edbb5696c7c29077489c05",
|
||||
"x-isr": "1"
|
||||
},
|
||||
// This one is kind of problematic, it will always show the wall time of the revalidation to `this.revalidationTimeout`
|
||||
signal: AbortSignal.timeout(this.revalidationTimeout)
|
||||
});
|
||||
if (response.status === 200 && response.headers.get("x-nextjs-cache") !== "REVALIDATED") {
|
||||
this.routeInFailedState.delete(msg.MessageDeduplicationId);
|
||||
throw new FatalError(`The revalidation for ${host}${url} cannot be done. This error should never happen.`);
|
||||
} else if (response.status === 404) {
|
||||
this.routeInFailedState.delete(msg.MessageDeduplicationId);
|
||||
throw new IgnorableError(`The revalidation for ${host}${url} cannot be done because the page is not found. It's either expected or an error in user code itself`);
|
||||
} else if (response.status === 500) {
|
||||
await this.addToFailedState(msg);
|
||||
throw new IgnorableError(`Something went wrong while revalidating ${host}${url}`);
|
||||
} else if (response.status !== 200) {
|
||||
await this.addToFailedState(msg);
|
||||
throw new RecoverableError(`An unknown error occurred while revalidating ${host}${url}`);
|
||||
}
|
||||
if (!this.disableSQLite) {
|
||||
this.sql.exec(
|
||||
"INSERT OR REPLACE INTO sync (id, lastSuccess, buildId) VALUES (?, unixepoch(), ?)",
|
||||
// We cannot use the deduplication id because it's not unique per route - every time a route is revalidated, the deduplication id is different.
|
||||
`${host}${url}`,
|
||||
"pYUMJqQmqlh8C9DCzFGyK"
|
||||
);
|
||||
}
|
||||
this.routeInFailedState.delete(msg.MessageDeduplicationId);
|
||||
} catch (e) {
|
||||
if (!isOpenNextError(e)) {
|
||||
await this.addToFailedState(msg);
|
||||
}
|
||||
error(e);
|
||||
} finally {
|
||||
this.ongoingRevalidations.delete(msg.MessageDeduplicationId);
|
||||
}
|
||||
}
|
||||
async alarm() {
|
||||
const currentDateTime = Date.now();
|
||||
const nextEventToRetry = Array.from(this.routeInFailedState.values()).filter(({ nextAlarmMs }) => nextAlarmMs > currentDateTime).sort(({ nextAlarmMs: a }, { nextAlarmMs: b }) => a - b)[0];
|
||||
const expiredEvents = Array.from(this.routeInFailedState.values()).filter(({ nextAlarmMs }) => nextAlarmMs <= currentDateTime);
|
||||
const allEventsToRetry = nextEventToRetry ? [nextEventToRetry, ...expiredEvents] : expiredEvents;
|
||||
for (const event of allEventsToRetry) {
|
||||
debug(`Retrying revalidation for ${event.msg.MessageBody.host}${event.msg.MessageBody.url}`);
|
||||
await this.executeRevalidation(event.msg);
|
||||
}
|
||||
}
|
||||
async addToFailedState(msg) {
|
||||
debug(`Adding ${msg.MessageBody.host}${msg.MessageBody.url} to the failed state`);
|
||||
const existingFailedState = this.routeInFailedState.get(msg.MessageDeduplicationId);
|
||||
let updatedFailedState;
|
||||
if (existingFailedState) {
|
||||
if (existingFailedState.retryCount >= this.maxRetries) {
|
||||
error(`The revalidation for ${msg.MessageBody.host}${msg.MessageBody.url} has failed after ${this.maxRetries} retries. It will not be tried again, but subsequent ISR requests will retry.`);
|
||||
this.routeInFailedState.delete(msg.MessageDeduplicationId);
|
||||
return;
|
||||
}
|
||||
const nextAlarmMs = Date.now() + Math.pow(2, existingFailedState.retryCount + 1) * this.revalidationRetryInterval;
|
||||
updatedFailedState = {
|
||||
...existingFailedState,
|
||||
retryCount: existingFailedState.retryCount + 1,
|
||||
nextAlarmMs
|
||||
};
|
||||
} else {
|
||||
updatedFailedState = {
|
||||
msg,
|
||||
retryCount: 1,
|
||||
nextAlarmMs: Date.now() + 2e3
|
||||
};
|
||||
}
|
||||
this.routeInFailedState.set(msg.MessageDeduplicationId, updatedFailedState);
|
||||
if (!this.disableSQLite) {
|
||||
this.sql.exec("INSERT OR REPLACE INTO failed_state (id, data, buildId) VALUES (?, ?, ?)", msg.MessageDeduplicationId, JSON.stringify(updatedFailedState), "pYUMJqQmqlh8C9DCzFGyK");
|
||||
}
|
||||
await this.addAlarm();
|
||||
}
|
||||
async addAlarm() {
|
||||
const existingAlarm = await this.ctx.storage.getAlarm({ allowConcurrency: false });
|
||||
if (existingAlarm)
|
||||
return;
|
||||
if (this.routeInFailedState.size === 0)
|
||||
return;
|
||||
let nextAlarmToSetup = Math.min(...Array.from(this.routeInFailedState.values()).map(({ nextAlarmMs }) => nextAlarmMs));
|
||||
if (nextAlarmToSetup < Date.now()) {
|
||||
nextAlarmToSetup = Date.now() + this.revalidationRetryInterval;
|
||||
}
|
||||
await this.ctx.storage.setAlarm(nextAlarmToSetup);
|
||||
}
|
||||
// This function is used to restore the state of the durable object
|
||||
// We don't restore the ongoing revalidations because we cannot know in which state they are
|
||||
// We only restore the failed state and the alarm
|
||||
async initState() {
|
||||
if (this.disableSQLite)
|
||||
return;
|
||||
this.sql.exec("CREATE TABLE IF NOT EXISTS failed_state (id TEXT PRIMARY KEY, data TEXT, buildId TEXT)");
|
||||
this.sql.exec("CREATE TABLE IF NOT EXISTS sync (id TEXT PRIMARY KEY, lastSuccess INTEGER, buildId TEXT)");
|
||||
this.sql.exec("DELETE FROM failed_state WHERE buildId != ?", "pYUMJqQmqlh8C9DCzFGyK");
|
||||
this.sql.exec("DELETE FROM sync WHERE buildId != ?", "pYUMJqQmqlh8C9DCzFGyK");
|
||||
const failedStateCursor = this.sql.exec("SELECT * FROM failed_state");
|
||||
for (const row of failedStateCursor) {
|
||||
this.routeInFailedState.set(row.id, JSON.parse(row.data));
|
||||
}
|
||||
await this.addAlarm();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param msg
|
||||
* @returns `true` if the route has been revalidated since the lastModified from the message, `false` otherwise
|
||||
*/
|
||||
checkSyncTable(msg) {
|
||||
try {
|
||||
if (this.disableSQLite)
|
||||
return false;
|
||||
return this.sql.exec("SELECT 1 FROM sync WHERE id = ? AND lastSuccess > ? LIMIT 1", `${msg.MessageBody.host}${msg.MessageBody.url}`, Math.round(msg.MessageBody.lastModified / 1e3)).toArray().length > 0;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
export {
|
||||
DOQueueHandler
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
globalThis.openNextDebug = false;globalThis.openNextVersion = "3.7.0";
|
||||
|
||||
// ../../node_modules/@opennextjs/cloudflare/dist/api/durable-objects/sharded-tag-cache.js
|
||||
import { DurableObject } from "cloudflare:workers";
|
||||
var DOShardedTagCache = class extends DurableObject {
|
||||
sql;
|
||||
constructor(state, env) {
|
||||
super(state, env);
|
||||
this.sql = state.storage.sql;
|
||||
state.blockConcurrencyWhile(async () => {
|
||||
this.sql.exec(`CREATE TABLE IF NOT EXISTS revalidations (tag TEXT PRIMARY KEY, revalidatedAt INTEGER)`);
|
||||
});
|
||||
}
|
||||
async getLastRevalidated(tags) {
|
||||
try {
|
||||
const result = this.sql.exec(`SELECT MAX(revalidatedAt) AS time FROM revalidations WHERE tag IN (${tags.map(() => "?").join(", ")})`, ...tags).toArray();
|
||||
if (result.length === 0)
|
||||
return 0;
|
||||
return result[0]?.time;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
async hasBeenRevalidated(tags, lastModified) {
|
||||
return this.sql.exec(`SELECT 1 FROM revalidations WHERE tag IN (${tags.map(() => "?").join(", ")}) AND revalidatedAt > ? LIMIT 1`, ...tags, lastModified ?? Date.now()).toArray().length > 0;
|
||||
}
|
||||
async writeTags(tags, lastModified) {
|
||||
tags.forEach((tag) => {
|
||||
this.sql.exec(`INSERT OR REPLACE INTO revalidations (tag, revalidatedAt) VALUES (?, ?)`, tag, lastModified);
|
||||
});
|
||||
}
|
||||
};
|
||||
export {
|
||||
DOShardedTagCache
|
||||
};
|
||||
@@ -1,205 +0,0 @@
|
||||
// ../../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) {
|
||||
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;
|
||||
}
|
||||
|
||||
// open-next.config.ts
|
||||
var open_next_config_default = defineCloudflareConfig();
|
||||
export {
|
||||
open_next_config_default as default
|
||||
};
|
||||
@@ -1,207 +0,0 @@
|
||||
import { createRequire as topLevelCreateRequire } from 'module';const require = topLevelCreateRequire(import.meta.url);import bannerUrl from 'url';const __dirname = bannerUrl.fileURLToPath(new URL('.', import.meta.url));
|
||||
|
||||
// ../../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) {
|
||||
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;
|
||||
}
|
||||
|
||||
// open-next.config.ts
|
||||
var open_next_config_default = defineCloudflareConfig();
|
||||
export {
|
||||
open_next_config_default as default
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
pYUMJqQmqlh8C9DCzFGyK
|
||||
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{1131:(e,t,r)=>{r.d(t,{searchDocs:()=>o});var i=r(13038);async function o(e,t){let r=[],{index:o="default",client:n,params:l={},tag:u}=t;if("crawler"===o){let t=await n.search({...l,term:e,where:{category:u?{eq:u.slice(0,1).toUpperCase()+u.slice(1)}:void 0,...l.where},limit:10});if(!t)return r;if("crawler"===o){for(let e of t.hits){let t=e.document;r.push({id:e.id,type:"page",content:t.title,url:t.path},{id:"page"+e.id,type:"text",content:t.content,url:t.path})}return r}}let a={...l,term:e,where:(0,i.B)({tag:u,...l.where}),groupBy:{properties:["page_id"],maxResult:7,...l.groupBy}},c=await n.search(a);if(!c||!c.groups)return r;for(let e of c.groups){let t=!1;for(let i of e.result){let e=i.document;t||(r.push({id:e.page_id,type:"page",content:e.title,url:e.url}),t=!0),r.push({id:e.id,content:e.content,type:e.content===e.section?"heading":"text",url:e.section_id?`${e.url}#${e.section_id}`:e.url})}}return r}r(41758)},13038:(e,t,r)=>{r.d(t,{B:()=>function e(t,r=!1){for(let i of Object.keys(t))void 0===t[i]&&delete t[i],r&&"object"==typeof t[i]&&null!==t[i]?e(t[i],r):r&&Array.isArray(t[i])&&t[i].forEach(t=>e(t,r));return t}})}}]);
|
||||
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[396],{89396:(t,e,n)=>{n.d(e,{searchDocs:()=>s}),n(41758);async function s(t,{indexName:e,onSearch:n,client:s,locale:i,tag:r}){return t.length>0?(function(t){let e=[],n=new Set;for(let s of t)n.has(s.url)||(n.add(s.url),e.push({id:s.url,type:"page",url:s.url,content:s.title})),e.push({id:s.objectID,type:s.content===s.section?"heading":"text",url:s.section_id?`${s.url}#${s.section_id}`:s.url,content:s.content});return e})((n?await n(t,r,i):await s.searchForHits({requests:[{type:"default",indexName:e,query:t,distinct:5,hitsPerPage:10,filters:r?`tag:${r}`:void 0}]})).results[0].hits).filter(t=>"page"===t.type):[]}}}]);
|
||||
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[523],{77523:(e,t,a)=>{a.d(t,{fetchDocs:()=>s}),a(41758);var r=new Map;async function s(e,{api:t="/api/search",locale:a,tag:s}){let c=new URLSearchParams;c.set("query",e),a&&c.set("locale",a),s&&c.set("tag",s);let n=`${t}?${c}`,h=r.get(n);if(h)return h;let i=await fetch(n);if(!i.ok)throw Error(await i.text());let l=await i.json();return r.set(n,l),l}}}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[202,337,475,784,790],{51680:()=>{}},_=>{var e=e=>_(_.s=e);_.O(0,[587,803,891,358],()=>e(51680)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[492],{69035:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let l=r(54568),n=r(77444);function o(){return(0,l.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77444:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}}),r(14662);let l=r(54568);r(7620);let n={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};function o(e){let{status:t,message:r}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("title",{children:t+": "+r}),(0,l.jsx)("div",{style:n.error,children:(0,l.jsxs)("div",{children:[(0,l.jsx)("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),(0,l.jsx)("h1",{className:"next-error-h1",style:n.h1,children:t}),(0,l.jsx)("div",{style:n.desc,children:(0,l.jsx)("h2",{style:n.h2,children:r})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},92911:(e,t,r)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return r(69035)}])}},e=>{var t=t=>e(e.s=t);e.O(0,[587,803,891,358],()=>t(92911)),_N_E=e.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[202,337,475,784,790],{51680:()=>{}},_=>{var e=e=>_(_.s=e);_.O(0,[587,803,891,358],()=>e(51680)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[870],{62541:(e,s,n)=>{Promise.resolve().then(n.bind(n,56705)),Promise.resolve().then(n.bind(n,50720)),Promise.resolve().then(n.bind(n,25664)),Promise.resolve().then(n.bind(n,93627)),Promise.resolve().then(n.bind(n,14547)),Promise.resolve().then(n.bind(n,8272)),Promise.resolve().then(n.bind(n,56406))}},e=>{var s=s=>e(e.s=s);e.O(0,[987,605,395,587,803,891,358],()=>s(62541)),_N_E=e.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[499],{69588:(e,s,n)=>{Promise.resolve().then(n.bind(n,87398)),Promise.resolve().then(n.bind(n,50720)),Promise.resolve().then(n.bind(n,19744)),Promise.resolve().then(n.bind(n,8134)),Promise.resolve().then(n.bind(n,31698)),Promise.resolve().then(n.bind(n,4981)),Promise.resolve().then(n.bind(n,37595)),Promise.resolve().then(n.bind(n,19142)),Promise.resolve().then(n.bind(n,87156)),Promise.resolve().then(n.bind(n,40908)),Promise.resolve().then(n.bind(n,25724))}},e=>{var s=s=>e(e.s=s);e.O(0,[987,605,616,816,381,587,803,891,358],()=>s(69588)),_N_E=e.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[202,337,475,784,790],{51680:()=>{}},_=>{var e=e=>_(_.s=e);_.O(0,[587,803,891,358],()=>e(51680)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[202,337,475,784,790],{51680:()=>{}},_=>{var e=e=>_(_.s=e);_.O(0,[587,803,891,358],()=>e(51680)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[202,337,475,784,790],{51680:()=>{}},_=>{var e=e=>_(_.s=e);_.O(0,[587,803,891,358],()=>e(51680)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[358],{48642:(e,s,t)=>{"use strict";t.r(s),t(71380).Ay.init("phc_8ZUxEwwfKMajJLvxz1daGd931dYbQrwKNficBmsdIrs",{api_host:"/ingest",ui_host:"https://us.posthog.com",defaults:"2025-05-24",capture_exceptions:!0,debug:!1})},57181:(e,s,t)=>{Promise.resolve().then(t.t.bind(t,76901,23)),Promise.resolve().then(t.t.bind(t,96727,23)),Promise.resolve().then(t.t.bind(t,935,23)),Promise.resolve().then(t.t.bind(t,55788,23)),Promise.resolve().then(t.t.bind(t,57944,23)),Promise.resolve().then(t.t.bind(t,90304,23)),Promise.resolve().then(t.t.bind(t,1176,23)),Promise.resolve().then(t.t.bind(t,63790,23))}},e=>{var s=s=>e(e.s=s);e.O(0,[587,803,891],()=>(s(32036),s(57181))),_N_E=e.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{6449:(_,n,p)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_app",function(){return p(27241)}])}},_=>{var n=n=>_(_.s=n);_.O(0,[593,792],()=>(n(6449),n(24557))),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[731],{21851:(_,n,e)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return e(84436)}])}},_=>{var n=n=>_(_.s=n);_.O(0,[636,593,792],()=>n(21851)),_N_E=_.O()}]);
|
||||
@@ -1 +0,0 @@
|
||||
(()=>{"use strict";var e={},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={id:o,loaded:!1,exports:{}},i=!0;try{e[o].call(a.exports,a,a.exports,r),i=!1}finally{i&&delete t[o]}return a.loaded=!0,a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(o){a=a||0;for(var i=e.length;i>0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[o,n,a];return}for(var c=1/0,i=0;i<e.length;i++){for(var[o,n,a]=e[i],d=!0,u=0;u<o.length;u++)(!1&a||c>=a)&&Object.keys(r.O).every(e=>r.O[e](o[u]))?o.splice(u--,1):(d=!1,a<c&&(c=a));if(d){e.splice(i--,1);var l=n();void 0!==l&&(t=l)}}return t}})(),r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);r.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var c=2&n&&o;"object"==typeof c&&!~e.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach(e=>i[e]=()=>o[e]);return i.default=()=>o,r.d(a,i),a}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>987===e?"static/chunks/987-15758c8fb8be3215.js":605===e?"static/chunks/605-c6ada8a61926b0af.js":816===e?"static/chunks/816-c635668e3b41d2fc.js":"static/chunks/"+e+"."+({131:"75b3ff08b26a7b20",396:"41aba55eb5176e84",523:"edf373732b51326e",714:"1cd0bbabf8503d97",941:"ef2173b70c2cacca"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,n,a,i)=>{if(e[o])return void e[o].push(n);if(void 0!==a)for(var c,d,u=document.getElementsByTagName("script"),l=0;l<u.length;l++){var s=u[l];if(s.getAttribute("src")==o||s.getAttribute("data-webpack")==t+a){c=s;break}}c||(d=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,r.nc&&c.setAttribute("nonce",r.nc),c.setAttribute("data-webpack",t+a),c.src=r.tu(o)),e[o]=[n];var f=(t,r)=>{c.onerror=c.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],c.parentNode&&c.parentNode.removeChild(c),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=f.bind(null,c.onerror),c.onload=f.bind(null,c.onload),d&&document.head.appendChild(c)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={68:0,998:0,785:0,679:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else if(/^(679|68|785|998)$/.test(t))e[t]=0;else{var a=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=a);var i=r.p+r.u(t),c=Error();r.l(i,o=>{if(r.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;c.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",c.name="ChunkLoadError",c.type=a,c.request=i,n[1](c)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,c,d]=o,u=0;if(i.some(t=>0!==e[t])){for(n in c)r.o(c,n)&&(r.m[n]=c[n]);if(d)var l=d(r)}for(t&&t(o);u<i.length;u++)a=i[u],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(l)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})(),r.nc=void 0})();
|
||||
@@ -1 +0,0 @@
|
||||
@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/034d78ad42e9620c-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/fe0777f1195381cb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/eafabf029ad39a43-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/db911767852bc875-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/f10b8e9d91f3edcb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/8888a3826f4a3af4-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/29e7bbdce9332268-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/c3bc380753a8436c-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/0484562807a97172-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/29a4aea02fdee119-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/a1386beebedccca4-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/b957ea75a84b6ea7-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/28485c0de2075f40-s.woff2) format("woff2");unicode-range:u+0900-097f,u+1cd0-1cf9,u+200c-200d,u+20a8,u+20b9,u+20f0,u+25cc,u+a830-a839,u+a8e0-a8ff,u+11b00-11b09}@font-face{font-family:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/5fb25f343c7550ca-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(/_next/static/media/7db6c35d839a711c-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Poppins Fallback;src:local("Arial");ascent-override:93.62%;descent-override:31.21%;line-gap-override:8.92%;size-adjust:112.16%}.__className_d5a796{font-family:Poppins,Poppins Fallback;font-style:normal}
|
||||
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 256 199" width="256" height="199" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z" fill="#5865F2"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1 +0,0 @@
|
||||
self.__BUILD_MANIFEST=function(e,r,t,s,a){return{__rewrites:{afterFiles:[{has:t,source:"/ingest/static/:path*",destination:t},{has:t,source:"/ingest/:path*",destination:t},{has:t,source:"/ingest/decide",destination:t}],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:9,errorRate:1e-4,numBits:173,numHashes:14,bitArray:[0,1,0,1,e,e,r,r,r,e,e,r,e,r,r,e,e,e,e,r,e,r,e,r,r,r,e,e,r,r,r,r,r,e,e,r,r,r,e,e,r,e,r,e,r,r,r,r,e,r,r,r,r,e,e,e,e,r,e,e,r,r,e,r,r,r,e,e,e,e,e,r,r,r,r,r,e,e,e,r,r,r,e,r,r,e,r,e,e,r,e,e,r,r,r,e,e,e,r,r,r,r,e,e,r,r,e,e,r,e,r,e,e,r,e,e,e,e,e,r,r,e,e,r,e,e,r,e,e,r,e,e,r,r,r,r,r,r,e,r,r,e,e,e,e,e,e,r,e,r,e,r,e,r,r,e,e,r,r,r,e,r,r,e,e,r,r,e,e,e,r,e,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:20,numHashes:14,bitArray:[r,r,e,e,r,r,e,e,e,e,r,r,e,e,r,e,r,e,e,r]},"/_error":["static/chunks/pages/_error-6c6e21043af8a3d8.js"],sortedPages:["/_app","/_error"]}}(1,0,void 0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
||||
@@ -1 +0,0 @@
|
||||
self.__SSG_MANIFEST=new Set(["\u002Fdocs\u002F[[...slug]]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="92" height="92"><svg width="92" height="92" viewBox="0 0 92 92" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="8" y="8" width="76" height="76" rx="12" fill="#F5EEFF" stroke="#B79AFF" stroke-width="3"></rect>
|
||||
<text x="46" y="56" text-anchor="middle" font-family="monospace" font-size="40" fill="#8F5BFF">$<tspan dx="0" dy="0">_</tspan></text>
|
||||
</svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
|
||||
@media (prefers-color-scheme: dark) { :root { filter: none; } }
|
||||
</style></svg>
|
||||
|
Before Width: | Height: | Size: 616 B |
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"name": "Better T Stack",
|
||||
"short_name": "Better T Stack",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 18 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 500 500"><path fill="#fff" d="M0 0h500v500H0z"/><path fill="#000" d="M69 121h86.988v259H69zM337.575 121H430v259h-92.425z"/><path fill="#000" d="M427.282 121v83.456h-174.52V121zM430 296.544V380H252.762v-83.456z"/><path fill="#000" d="M252.762 204.455v92.089h-96.774v-92.089z"/></svg>
|
||||
|
Before Width: | Height: | Size: 348 B |
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 64 55.425" width="64" height="55.425" version="1.0" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect id="background" width="100%" height="100%" fill="none" />
|
||||
<path id="emblem" d="m32 0-14.255 24.69c5.409-1.6676 11.228-1.9148 16.869-0.58434l4.8177 1.1372-4.5328 19.22-4.8247-1.1372c-5.9293-1.3987-11.628 1.716-14.036 6.6851l-4.4595-2.1575c3.4034-7.0291 11.424-11.285 19.636-9.3476l2.2595-9.579c-8.0938-1.9081-16.624-9e-3 -23.145 5.153-6.5204 5.1607-10.329 13.028-10.329 21.344l64 7.9e-4z" fill="#60a5fa" stroke-linecap="square" stroke-width="4.8768" style="paint-order:markers fill stroke" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 652 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 70"><path d="M71.09 20.74c-.16-.17-.33-.34-.5-.5s-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5A26.46 26.46 0 0 1 75.5 35.7c0 16.57-16.82 30.05-37.5 30.05-11.58 0-21.94-4.23-28.83-10.86l.5.5.5.5.5.5.5.5.5.5.5.5.5.5C19.55 65.3 30.14 69.75 42 69.75c20.68 0 37.5-13.48 37.5-30 0-7.06-3.04-13.75-8.41-19.01Z"/><path d="M73 35.7c0 15.21-15.67 27.54-35 27.54S3 50.91 3 35.7C3 26.27 9 17.94 18.22 13S33.18 3 38 3s8.94 4.13 19.78 10C67 17.94 73 26.27 73 35.7Z" style="fill:#fbf0df"/><path data-name="Bottom Shadow" d="M73 35.7a21.67 21.67 0 0 0-.8-5.78c-2.73 33.3-43.35 34.9-59.32 24.94A40 40 0 0 0 38 63.24c19.3 0 35-12.35 35-27.54Z" style="fill:#f6dece"/><path data-name="Light Shine" d="M24.53 11.17C29 8.49 34.94 3.46 40.78 3.45A9.29 9.29 0 0 0 38 3c-2.42 0-5 1.25-8.25 3.13-1.13.66-2.3 1.39-3.54 2.15-2.33 1.44-5 3.07-8 4.7C8.69 18.13 3 26.62 3 35.7v1.19c6.06-21.41 17.07-23.04 21.53-25.72Z" style="fill:#fffefc"/><path d="M35.12 5.53A16.41 16.41 0 0 1 29.49 18c-.28.25-.06.73.3.59 3.37-1.31 7.92-5.23 6-13.14-.08-.45-.67-.33-.67.08Zm2.27 0A16.24 16.24 0 0 1 39 19c-.12.35.31.65.55.36 2.19-2.8 4.1-8.36-1.62-14.36-.29-.26-.74.14-.54.49Zm2.76-.17A16.42 16.42 0 0 1 47 17.12a.33.33 0 0 0 .65.11c.92-3.49.4-9.44-7.17-12.53-.4-.16-.66.38-.33.62Zm-18.46 10.4a16.94 16.94 0 0 0 10.47-9c.18-.36.75-.22.66.18-1.73 8-7.52 9.67-11.12 9.45-.38.01-.37-.52-.01-.63Z" style="fill:#ccbea7;fill-rule:evenodd"/><path d="M38 65.75C17.32 65.75.5 52.27.5 35.7c0-10 6.18-19.33 16.53-24.92 3-1.6 5.57-3.21 7.86-4.62 1.26-.78 2.45-1.51 3.6-2.19C32 1.89 35 .5 38 .5s5.62 1.2 8.9 3.14c1 .57 2 1.19 3.07 1.87 2.49 1.54 5.3 3.28 9 5.27C69.32 16.37 75.5 25.69 75.5 35.7c0 16.57-16.82 30.05-37.5 30.05ZM38 3c-2.42 0-5 1.25-8.25 3.13-1.13.66-2.3 1.39-3.54 2.15-2.33 1.44-5 3.07-8 4.7C8.69 18.13 3 26.62 3 35.7c0 15.19 15.7 27.55 35 27.55S73 50.89 73 35.7c0-9.08-5.69-17.57-15.22-22.7-3.78-2-6.73-3.88-9.12-5.36-1.09-.67-2.09-1.29-3-1.84C42.63 4 40.42 3 38 3Z"/><g><path d="M45.05 43a8.93 8.93 0 0 1-2.92 4.71 6.81 6.81 0 0 1-4 1.88A6.84 6.84 0 0 1 34 47.71 8.93 8.93 0 0 1 31.12 43a.72.72 0 0 1 .8-.81h12.34a.72.72 0 0 1 .79.81Z" style="fill:#b71422" data-name="Background"/><path data-name="Background" d="M34 47.79a6.91 6.91 0 0 0 4.12 1.9 6.91 6.91 0 0 0 4.11-1.9 10.63 10.63 0 0 0 1-1.07 6.83 6.83 0 0 0-4.9-2.31 6.15 6.15 0 0 0-5 2.78c.23.21.43.41.67.6Z" style="fill:#ff6164"/><path data-name="Outline" d="M34.16 47a5.36 5.36 0 0 1 4.19-2.08 6 6 0 0 1 4 1.69c.23-.25.45-.51.66-.77a7 7 0 0 0-4.71-1.93 6.36 6.36 0 0 0-4.89 2.36 9.53 9.53 0 0 0 .75.73Z"/><path data-name="Outline" d="M38.09 50.19a7.42 7.42 0 0 1-4.45-2 9.52 9.52 0 0 1-3.11-5.05 1.2 1.2 0 0 1 .26-1 1.41 1.41 0 0 1 1.13-.51h12.34a1.44 1.44 0 0 1 1.13.51 1.19 1.19 0 0 1 .25 1 9.52 9.52 0 0 1-3.11 5.05 7.42 7.42 0 0 1-4.44 2Zm-6.17-7.4c-.16 0-.2.07-.21.09a8.29 8.29 0 0 0 2.73 4.37A6.23 6.23 0 0 0 38.09 49a6.28 6.28 0 0 0 3.65-1.73 8.3 8.3 0 0 0 2.72-4.37.21.21 0 0 0-.2-.09Z"/></g><g><ellipse data-name="Right Blush" cx="53.22" cy="40.18" rx="5.85" ry="3.44" style="fill:#febbd0"/><ellipse data-name="Left Bluch" cx="22.95" cy="40.18" rx="5.85" ry="3.44" style="fill:#febbd0"/><path d="M25.7 38.8a5.51 5.51 0 1 0-5.5-5.51 5.51 5.51 0 0 0 5.5 5.51Zm24.77 0A5.51 5.51 0 1 0 45 33.29a5.5 5.5 0 0 0 5.47 5.51Z" style="fill-rule:evenodd"/><path d="M24 33.64a2.07 2.07 0 1 0-2.06-2.07A2.07 2.07 0 0 0 24 33.64Zm24.77 0a2.07 2.07 0 1 0-2.06-2.07 2.07 2.07 0 0 0 2.04 2.07Z" style="fill:#fff;fill-rule:evenodd"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="184" height="188" viewBox="0 0 184 188" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M108.092 130.021C126.258 128.003 143.385 118.323 152.815 102.167C148.349 142.128 104.653 167.385 68.9858 151.878C65.6992 150.453 62.8702 148.082 60.9288 145.034C52.9134 132.448 50.2786 116.433 54.0644 101.899C64.881 120.567 86.8748 132.01 108.092 130.021Z" fill="#F3B01C"/>
|
||||
<path d="M53.4012 90.1735C46.0375 107.191 45.7186 127.114 54.7463 143.51C22.9759 119.608 23.3226 68.4578 54.358 44.7949C57.2286 42.6078 60.64 41.3097 64.2178 41.1121C78.9312 40.336 93.8804 46.0225 104.364 56.6193C83.0637 56.831 62.318 70.4756 53.4012 90.1735Z" fill="#8D2676"/>
|
||||
<path d="M114.637 61.8552C103.89 46.8701 87.0686 36.6684 68.6387 36.358C104.264 20.1876 148.085 46.4045 152.856 85.1654C153.3 88.7635 152.717 92.4322 151.122 95.6775C144.466 109.195 132.124 119.679 117.702 123.559C128.269 103.96 126.965 80.0151 114.637 61.8552Z" fill="#EE342F"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 948 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 256 199" width="256" height="199" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z" fill="#5865F2"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#008fe2">
|
||||
<path d="M13.98 11.08h2.12a.19.19 0 0 0 .19-.19V9.01a.19.19 0 0 0-.19-.19h-2.12a.18.18 0 0 0-.18.18v1.9c0 .1.08.18.18.18m-2.95-5.43h2.12a.19.19 0 0 0 .18-.19V3.57a.19.19 0 0 0-.18-.18h-2.12a.18.18 0 0 0-.19.18v1.9c0 .1.09.18.19.18m0 2.71h2.12a.19.19 0 0 0 .18-.18V6.29a.19.19 0 0 0-.18-.18h-2.12a.18.18 0 0 0-.19.18v1.89c0 .1.09.18.19.18m-2.93 0h2.12a.19.19 0 0 0 .18-.18V6.29a.18.18 0 0 0-.18-.18H8.1a.18.18 0 0 0-.18.18v1.89c0 .1.08.18.18.18m-2.96 0h2.11a.19.19 0 0 0 .19-.18V6.29a.18.18 0 0 0-.19-.18H5.14a.19.19 0 0 0-.19.18v1.89c0 .1.08.18.19.18m5.89 2.72h2.12a.19.19 0 0 0 .18-.19V9.01a.19.19 0 0 0-.18-.19h-2.12a.18.18 0 0 0-.19.18v1.9c0 .1.09.18.19.18m-2.93 0h2.12a.18.18 0 0 0 .18-.19V9.01a.18.18 0 0 0-.18-.19H8.1a.18.18 0 0 0-.18.18v1.9c0 .1.08.18.18.18m-2.96 0h2.11a.18.18 0 0 0 .19-.19V9.01a.18.18 0 0 0-.18-.19H5.14a.19.19 0 0 0-.19.19v1.88c0 .1.08.19.19.19m-2.92 0h2.12a.18.18 0 0 0 .18-.19V9.01a.18.18 0 0 0-.18-.19H2.22a.18.18 0 0 0-.19.18v1.9c0 .1.08.18.19.18m21.54-1.19c-.06-.05-.67-.51-1.95-.51-.34 0-.68.03-1.01.09a3.77 3.77 0 0 0-1.72-2.57l-.34-.2-.23.33a4.6 4.6 0 0 0-.6 1.43c-.24.97-.1 1.88.4 2.66a4.7 4.7 0 0 1-1.75.42H.76a.75.75 0 0 0-.76.75 11.38 11.38 0 0 0 .7 4.06 6.03 6.03 0 0 0 2.4 3.12c1.18.73 3.1 1.14 5.28 1.14.98 0 1.96-.08 2.93-.26a12.25 12.25 0 0 0 3.82-1.4 10.5 10.5 0 0 0 2.61-2.13c1.25-1.42 2-3 2.55-4.4h.23c1.37 0 2.21-.55 2.68-1 .3-.3.55-.66.7-1.06l.1-.28Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" fill="none" viewBox="0 0 160 160"><rect width="9.631" height="40.852" fill="#121212" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 43.48 67.304)"/><rect width="9.631" height="40.852" fill="#121212" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 76.94 46.534)"/><rect width="9.631" height="40.852" fill="#121212" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 128.424 46.535)"/><rect width="9.631" height="40.852" fill="#121212" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 94.957 67.304)"/></svg>
|
||||
|
Before Width: | Height: | Size: 608 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" fill="none" viewBox="0 0 160 160"><rect width="9.631" height="40.852" fill="#C5F74F" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 43.48 67.304)"/><rect width="9.631" height="40.852" fill="#C5F74F" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 76.94 46.534)"/><rect width="9.631" height="40.852" fill="#C5F74F" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 128.424 46.535)"/><rect width="9.631" height="40.852" fill="#C5F74F" rx="4.816" transform="matrix(.87303 .48767 -.49721 .86763 94.957 67.304)"/></svg>
|
||||
|
Before Width: | Height: | Size: 609 B |
|
Before Width: | Height: | Size: 14 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 231">
|
||||
<path d="M121 85c2-3 5-4 7-4 1 0 5 1 7 4 16 22 43 67 63 101l26 40c7 8 18 3 24-6s8-15 8-22c0-4-88-168-97-182-9-13-11-16-26-16h-11c-14 0-16 3-25 16C88 30 0 194 0 198c0 7 2 13 8 22s17 14 24 6l26-40c20-34 47-79 63-101Z" fill="#000020"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 336 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="64" height="64"><path d="M32 24.795c-1.164.296-1.884.013-2.53-.957l-4.594-6.356-.664-.88-5.365 7.257c-.613.873-1.256 1.253-2.4.944l6.87-9.222-6.396-8.33c1.1-.214 1.86-.105 2.535.88l4.765 6.435 4.8-6.4c.615-.873 1.276-1.205 2.38-.883l-2.48 3.288-3.36 4.375c-.4.5-.345.842.023 1.325L32 24.795zM.008 15.427l.562-2.764C2.1 7.193 8.37 4.92 12.694 8.3c2.527 1.988 3.155 4.8 3.03 7.95H1.48c-.214 5.67 3.867 9.092 9.07 7.346 1.825-.613 2.9-2.042 3.438-3.83.273-.896.725-1.036 1.567-.78-.43 2.236-1.4 4.104-3.45 5.273-3.063 1.75-7.435 1.184-9.735-1.248C1 21.6.434 19.812.18 17.9c-.04-.316-.12-.617-.18-.92q.008-.776.008-1.552zm1.498-.38h12.872c-.084-4.1-2.637-7.012-6.126-7.037-3.83-.03-6.58 2.813-6.746 7.037z"/></svg>
|
||||
|
Before Width: | Height: | Size: 777 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="64" height="64"><path fill="#fff" d="M32 24.795c-1.164.296-1.884.013-2.53-.957l-4.594-6.356-.664-.88-5.365 7.257c-.613.873-1.256 1.253-2.4.944l6.87-9.222-6.396-8.33c1.1-.214 1.86-.105 2.535.88l4.765 6.435 4.8-6.4c.615-.873 1.276-1.205 2.38-.883l-2.48 3.288-3.36 4.375c-.4.5-.345.842.023 1.325L32 24.795zM.008 15.427l.562-2.764C2.1 7.193 8.37 4.92 12.694 8.3c2.527 1.988 3.155 4.8 3.03 7.95H1.48c-.214 5.67 3.867 9.092 9.07 7.346 1.825-.613 2.9-2.042 3.438-3.83.273-.896.725-1.036 1.567-.78-.43 2.236-1.4 4.104-3.45 5.273-3.063 1.75-7.435 1.184-9.735-1.248C1 21.6.434 19.812.18 17.9c-.04-.316-.12-.617-.18-.92q.008-.776.008-1.552zm1.498-.38h12.872c-.084-4.1-2.637-7.012-6.126-7.037-3.83-.03-6.58 2.813-6.746 7.037z"/></svg>
|
||||
|
Before Width: | Height: | Size: 790 B |
@@ -1,4 +0,0 @@
|
||||
<svg width="1226" height="1226" viewBox="0 0 1226 1226" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1226" height="1226" rx="613" fill="black"/>
|
||||
<path d="M1076.59 386.043L1107.75 305.458L1106.4 300.471L798.283 381.572C831.122 334.074 819.831 296 819.831 296C819.831 296 721.45 358.803 647.027 357.118C572.604 355.467 548.646 335.622 434.533 371.976C320.421 408.33 288.201 519.869 255.12 543.841C222.039 567.814 118.254 645.888 118.254 645.888L118.495 647.298L212.057 617.547C212.057 617.547 186.411 641.726 131.885 715.122C131.885 715.122 130.921 714.263 129.338 712.749L129.407 713.265C129.407 713.265 173.227 780.195 216.222 767.779C220.525 766.541 225.413 764.477 230.748 761.76C248.063 771.391 270.645 780.883 295.602 783.463C295.602 783.463 278.7 763.858 264.621 741.537C268.442 739.095 272.332 736.55 276.29 733.97L274.466 735.277L310.094 748.347L306.169 714.882C306.273 714.813 306.41 714.744 306.514 714.675L341.522 727.504L337.15 697.066C341.591 694.761 346.031 692.56 350.438 690.496L386.926 552.543L537.837 449.671L525.858 479.835C495.325 554.985 437.838 572.767 437.838 572.767L413.845 581.847C396.014 602.896 388.51 608.089 382.382 678.803C396.771 675.191 410.506 674.331 422.933 677.668C487.442 695.002 509.748 772.663 492.399 794.159C488.061 799.525 477.7 808.742 464.619 819.507H438.458L438.113 840.694C437.218 841.382 436.323 842.104 435.428 842.792H408.819L408.475 863.463C406.1 865.251 403.793 867.005 401.487 868.725C376.461 869.241 344.792 847.435 344.792 847.435C344.792 867.246 361.315 897.822 361.315 897.822C361.315 897.822 362.382 897.306 364.241 896.412C362.623 897.581 361.728 898.235 361.728 898.235C361.728 898.235 428.716 942.843 470.884 926.334C508.371 911.648 605.444 835.157 689.23 798.974L942.791 732.216L976.216 645.681L782.999 696.55V618.82L1009.71 559.147L1043.13 472.612L783.033 541.09V463.36L1076.59 386.043ZM616.391 550.823L676.562 534.968L677.354 537.96L658.593 586.559L596.219 602.964L616.391 550.823ZM637.182 654.796L574.808 671.202L594.979 619.026L655.151 603.171L655.943 606.163L637.182 654.796ZM718.421 637.358L656.046 653.764L676.218 601.589L736.39 585.733L737.181 588.725L718.421 637.358Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
|
||||
<path d="M251.17 116.6 139.4 4.82a16.49 16.49 0 0 0-23.31 0l-23.21 23.2 29.44 29.45a19.57 19.57 0 0 1 24.8 24.96l28.37 28.38a19.61 19.61 0 1 1-11.75 11.06L137.28 95.4v69.64a19.62 19.62 0 1 1-16.13-.57V94.2a19.61 19.61 0 0 1-10.65-25.73L81.46 39.44 4.83 116.08a16.49 16.49 0 0 0 0 23.32L116.6 251.17a16.49 16.49 0 0 0 23.32 0l111.25-111.25a16.5 16.5 0 0 0 0-23.33" fill="#DE4C36"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 484 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 330"><path d="M134.129.029c.876-.113 1.65.108 2.319.662a1256.253 1256.253 0 0 1 69.573 93.427c16.094 24.231 29.788 49.851 41.082 76.862 18.037 48.108 8.65 89.963-28.16 125.564-32.209 27.22-69.314 37.822-111.318 31.805-50.208-10.237-84.332-39.28-102.373-87.133C.553 225.638-.993 209.736.614 193.51c2.676-27.93 9.302-54.877 19.878-80.838 4.407-10.592 10.15-20.31 17.228-29.154a381.88 381.88 0 0 1 16.565 21.203c2.44 2.55 4.98 4.98 7.62 7.289C82.06 72.01 106.135 34.685 134.13.029Z" fill="#FF5B11" opacity=".993"/><path d="M129.49 53.7c24.314 28.2 46.29 58.238 65.93 90.114a187.318 187.318 0 0 1 15.24 33.13c8.338 32.804-.607 59.86-26.836 81.169-25.367 17.85-53.196 23.15-83.488 15.902-32.666-10.136-51.55-32.113-56.653-65.929-1.238-10.662-.133-21.043 3.314-31.142a225.41 225.41 0 0 1 17.89-35.78l19.878-29.155a5509.508 5509.508 0 0 0 44.726-58.31Z" fill="#FF9758"/></svg>
|
||||
|
Before Width: | Height: | Size: 958 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 256 549" xmlns="http://www.w3.org/2000/svg" width="256" height="549" preserveAspectRatio="xMidYMid"><path fill="#01EC64" d="M175.622 61.108C152.612 33.807 132.797 6.078 128.749.32a1.03 1.03 0 0 0-1.492 0c-4.048 5.759-23.863 33.487-46.874 60.788-197.507 251.896 31.108 421.89 31.108 421.89l1.917 1.28c1.704 26.234 5.966 63.988 5.966 63.988h17.045s4.26-37.54 5.965-63.987l1.918-1.494c.213.214 228.828-169.78 31.32-421.677Zm-47.726 418.05s-10.227-8.744-12.997-13.222v-.428l12.358-274.292c0-.853 1.279-.853 1.279 0l12.357 274.292v.428c-2.77 4.478-12.997 13.223-12.997 13.223Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 599 B |
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 252">
|
||||
<path d="M236 194c-14 0-25 1-34 5-3 1-7 1-7 4l3 6c2 3 5 8 9 11l11 8 21 10 11 9 6 4-3-6-5-5c-5-7-11-13-18-18-6-3-18-9-20-15h-1l12-3 18-3 8-2v-2l-9-10c-8-8-18-15-28-22l-18-8c-2-1-6-2-7-4l-7-13-15-30-8-20c-18-30-38-48-68-65-6-4-14-5-22-7l-13-1-8-6C34 5 8-9 1 9c-5 11 7 22 11 28l9 13 3 9c3 8 5 17 9 24l6 10c2 2 4 3 5 6-3 4-3 9-4 13-7 20-4 44 5 59 2 4 9 14 18 10 8-3 6-13 8-22l1-4 8 14c5 9 14 18 22 24 4 3 8 8 13 10l-4-4-9-10c-8-10-14-21-20-32l-7-17-3-6c-3 4-7 7-9 12-3 7-3 17-4 26h-1c-6-1-8-7-10-12-5-12-6-32-1-46 1-4 6-15 4-19-1-3-4-5-6-7l-7-12-10-30-9-13c-3-5-7-8-10-14-1-2-2-5 0-7l2-2c2-2 9 0 11 1 6 3 12 5 17 9l8 6h4c6 1 12 0 17 2 9 3 18 7 25 12 23 14 42 35 54 59 3 4 3 8 5 12l12 26c4 8 7 16 12 23 3 4 14 6 18 8l12 4 18 12c2 2 11 7 12 10Z" fill="#00546B"/>
|
||||
<path d="m58 43-7 1 6 7 4 9v-1c3-1 4-4 4-8l-2-4-5-4Z" fill="#00546B"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 933 B |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" width="256" height="256" preserveAspectRatio="xMidYMid"><defs><linearGradient id="a" x1="100%" x2="12.069%" y1="100%" y2="0%"><stop offset="0%" stop-color="#62F755"/><stop offset="100%" stop-color="#8FF986" stop-opacity="0"/></linearGradient><linearGradient id="b" x1="100%" x2="40.603%" y1="100%" y2="76.897%"><stop offset="0%" stop-opacity=".9"/><stop offset="100%" stop-color="#1A1A1A" stop-opacity="0"/></linearGradient></defs><path fill="#00E0D9" d="M0 44.139C0 19.762 19.762 0 44.139 0H211.86C236.238 0 256 19.762 256 44.139v142.649c0 25.216-31.915 36.16-47.388 16.256l-48.392-62.251v75.484c0 21.939-17.784 39.723-39.722 39.723h-76.36C19.763 256 0 236.238 0 211.861V44.14Zm44.139-8.825c-4.879 0-8.825 3.946-8.825 8.818v167.73c0 4.878 3.946 8.831 8.818 8.831h77.688c2.44 0 3.087-1.977 3.087-4.416v-101.22c0-25.222 31.914-36.166 47.395-16.255l48.391 62.243V44.14c0-4.879.455-8.825-4.416-8.825H44.14Z"/><path fill="url(#a)" d="M0 44.139C0 19.762 19.762 0 44.139 0H211.86C236.238 0 256 19.762 256 44.139v142.649c0 25.216-31.915 36.16-47.388 16.256l-48.392-62.251v75.484c0 21.939-17.784 39.723-39.722 39.723h-76.36C19.763 256 0 236.238 0 211.861V44.14Zm44.139-8.825c-4.879 0-8.825 3.946-8.825 8.818v167.73c0 4.878 3.946 8.831 8.818 8.831h77.688c2.44 0 3.087-1.977 3.087-4.416v-101.22c0-25.222 31.914-36.166 47.395-16.255l48.391 62.243V44.14c0-4.879.455-8.825-4.416-8.825H44.14Z"/><path fill="url(#b)" fill-opacity=".4" d="M0 44.139C0 19.762 19.762 0 44.139 0H211.86C236.238 0 256 19.762 256 44.139v142.649c0 25.216-31.915 36.16-47.388 16.256l-48.392-62.251v75.484c0 21.939-17.784 39.723-39.722 39.723h-76.36C19.763 256 0 236.238 0 211.861V44.14Zm44.139-8.825c-4.879 0-8.825 3.946-8.825 8.818v167.73c0 4.878 3.946 8.831 8.818 8.831h77.688c2.44 0 3.087-1.977 3.087-4.416v-101.22c0-25.222 31.914-36.166 47.395-16.255l48.391 62.243V44.14c0-4.879.455-8.825-4.416-8.825H44.14Z"/><path fill="#63F655" d="M211.861 0C236.238 0 256 19.762 256 44.139v142.649c0 25.216-31.915 36.16-47.388 16.256l-48.392-62.251v75.484c0 21.939-17.784 39.723-39.722 39.723a4.409 4.409 0 0 0 4.409-4.409V115.058c0-25.223 31.914-36.167 47.395-16.256l48.391 62.243V8.825c0-4.871-3.953-8.825-8.832-8.825Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1,20 +0,0 @@
|
||||
<svg width="180" height="180" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_408_139" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="180" height="180">
|
||||
<circle cx="90" cy="90" r="90" fill="black"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_408_139)">
|
||||
<circle cx="90" cy="90" r="87" fill="black" stroke="white" stroke-width="6"/>
|
||||
<path d="M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z" fill="url(#paint0_linear_408_139)"/>
|
||||
<rect x="115" y="54" width="12" height="72" fill="url(#paint1_linear_408_139)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_408_139" x1="109" y1="116.5" x2="144.5" y2="160.5" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_408_139" x1="121" y1="54" x2="120.799" y2="106.875" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1 +0,0 @@
|
||||
<svg viewBox="0 0 256 292" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="292"><defs><linearGradient id="a" x1="68.188%" x2="27.823%" y1="17.487%" y2="89.755%"><stop offset="0%" stop-color="#41873F"/><stop offset="32.88%" stop-color="#418B3D"/><stop offset="63.52%" stop-color="#419637"/><stop offset="93.19%" stop-color="#3FA92D"/><stop offset="100%" stop-color="#3FAE2A"/></linearGradient><linearGradient id="c" x1="43.277%" x2="159.245%" y1="55.169%" y2="-18.306%"><stop offset="13.76%" stop-color="#41873F"/><stop offset="40.32%" stop-color="#54A044"/><stop offset="71.36%" stop-color="#66B848"/><stop offset="90.81%" stop-color="#6CC04A"/></linearGradient><linearGradient id="f" x1="-4.389%" x2="101.499%" y1="49.997%" y2="49.997%"><stop offset="9.192%" stop-color="#6CC04A"/><stop offset="28.64%" stop-color="#66B848"/><stop offset="59.68%" stop-color="#54A044"/><stop offset="86.24%" stop-color="#41873F"/></linearGradient><path id="b" d="M134.923 1.832c-4.344-2.443-9.502-2.443-13.846 0L6.787 67.801C2.443 70.244 0 74.859 0 79.745v132.208c0 4.887 2.715 9.502 6.787 11.945l114.29 65.968c4.344 2.444 9.502 2.444 13.846 0l114.29-65.968c4.344-2.443 6.787-7.058 6.787-11.945V79.745c0-4.886-2.715-9.501-6.787-11.944L134.923 1.832Z"/><path id="e" d="M134.923 1.832c-4.344-2.443-9.502-2.443-13.846 0L6.787 67.801C2.443 70.244 0 74.859 0 79.745v132.208c0 4.887 2.715 9.502 6.787 11.945l114.29 65.968c4.344 2.444 9.502 2.444 13.846 0l114.29-65.968c4.344-2.443 6.787-7.058 6.787-11.945V79.745c0-4.886-2.715-9.501-6.787-11.944L134.923 1.832Z"/></defs><path fill="url(#a)" d="M134.923 1.832c-4.344-2.443-9.502-2.443-13.846 0L6.787 67.801C2.443 70.244 0 74.859 0 79.745v132.208c0 4.887 2.715 9.502 6.787 11.945l114.29 65.968c4.344 2.444 9.502 2.444 13.846 0l114.29-65.968c4.344-2.443 6.787-7.058 6.787-11.945V79.745c0-4.886-2.715-9.501-6.787-11.944L134.923 1.832Z"/><mask id="d" fill="#fff"><use xlink:href="#b"/></mask><path fill="url(#c)" d="M249.485 67.8 134.65 1.833c-1.086-.542-2.443-1.085-3.529-1.357L2.443 220.912c1.086 1.357 2.444 2.443 3.8 3.258l114.834 65.968c3.258 1.9 7.059 2.443 10.588 1.357L252.47 70.515c-.815-1.086-1.9-1.9-2.986-2.714Z" mask="url(#d)"/><mask id="g" fill="#fff"><use xlink:href="#e"/></mask><path fill="url(#f)" d="M249.756 223.898c3.258-1.9 5.701-5.158 6.787-8.687L130.579.204c-3.258-.543-6.787-.272-9.773 1.628L6.786 67.53l122.979 224.238c1.628-.272 3.529-.815 5.158-1.63l114.833-66.239Z" mask="url(#g)"/></svg>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#cb3837" d="M2 38.5h124v43.71H64v7.29H36.44v-7.29H2Zm6.89 36.43h13.78V53.07h6.89v21.86h6.89V45.79H8.89Zm34.44-29.14v36.42h13.78v-7.28h13.78V45.79Zm13.78 7.29H64v14.56h-6.89Zm20.67-7.29v29.14h13.78V53.07h6.89v21.86h6.89V53.07h6.89v21.86h6.89V45.79Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 331 B |