const std = @import("std");
const builtin = @import("builtin");
const STATIC_MEMORY_SIZE = 256000;
pub var static_manager: ?std.heap.ArenaAllocator = null;
pub var root_manager: ?RootAlloc = null;
pub var needs_setup: bool = true;
pub var static: *std.mem.Allocator = undefined;
pub var dynamic: *std.mem.Allocator = undefined;
pub fn setup(root: *std.mem.Allocator) !void {
needs_setup = false;
static = root;
dynamic = root;
// static = @ptrCast(*std.mem.Allocator, &stat.allocator);
}
test "GlobalAllocator" {
try setup(std.heap.page_allocator);
var testType = try static.alloc(u8, 10);
testType[1] = 1;
}
pub const HunkSide = struct {
pub const VTable = struct {
alloc: fn (self: *Hunk, n: usize, alignment: u29) std.mem.Allocator.Error![]u8,
getMark: fn (self: *Hunk) usize,
freeToMark: fn (self: *Hunk, pos: usize) void,
};
hunk: *Hunk,
vtable: *const VTable,
allocator: std.mem.Allocator,
pub fn init(hunk: *Hunk, vtable: *const VTable) HunkSide {
return .{
.hunk = hunk,
.vtable = vtable,
.allocator = .{
.allocFn = allocFn,
.resizeFn = resizeFn,
},
};
}
pub fn getMark(self: HunkSide) usize {
return self.vtable.getMark(self.hunk);
}
pub fn freeToMark(self: HunkSide, pos: usize) void {
self.vtable.freeToMark(self.hunk, pos);
}
fn allocFn(allocator: *std.mem.Allocator, len: usize, ptr_align: u29, len_align: u29, ret_addr: usize) std.mem.Allocator.Error![]u8 {
const self = @fieldParentPtr(HunkSide, "allocator", allocator);
return try self.vtable.alloc(self.hunk, len, ptr_align);
}
fn resizeFn(allocator: *std.mem.Allocator, old_mem: []u8, old_align: u29, new_size: usize, len_align: u29, ret_addr: usize) std.mem.Allocator.Error!usize {
if (new_size > old_mem.len) {
return error.OutOfMemory;
}
if (new_size == 0) {
return 0;
}
return std.mem.alignAllocLen(old_mem.len, new_size, len_align);
}
};
pub const Hunk = struct {
low_used: usize,
high_used: usize,
buffer: []u8,
pub fn init(buffer: []u8) Hunk {
return .{
.low_used = 0,
.high_used = 0,
.buffer = buffer,
};
}
pub fn low(self: *Hunk) HunkSide {
const GlobalStorage = struct {
const vtable: HunkSide.VTable = .{
.alloc = allocLow,
.getMark = getLowMark,
.freeToMark = freeToLowMark,
};
};
return HunkSide.init(self, &GlobalStorage.vtable);
}
pub fn high(self: *Hunk) HunkSide {
const GlobalStorage = struct {
const vtable: HunkSide.VTable = .{
.alloc = allocHigh,
.getMark = getHighMark,
.freeToMark = freeToHighMark,
};
};
return HunkSide.init(self, &GlobalStorage.vtable);
}
pub fn allocLow(self: *Hunk, n: usize, alignment: u29) ![]u8 {
const start = @ptrToInt(self.buffer.ptr);
const adjusted_index = std.mem.alignForward(start + self.low_used, alignment) - start;
const new_low_used = adjusted_index + n;
if (new_low_used > self.buffer.len - self.high_used) {
return error.OutOfMemory;
}
const result = self.buffer[adjusted_index..new_low_used];
self.low_used = new_low_used;
return result;
}
pub fn allocHigh(self: *Hunk, n: usize, alignment: u29) ![]u8 {
const addr = @ptrToInt(self.buffer.ptr) + self.buffer.len - self.high_used;
const rem = @rem(addr, alignment);
const march_backward_bytes = rem;
const adjusted_index = self.high_used + march_backward_bytes;
const new_high_used = adjusted_index + n;
if (new_high_used > self.buffer.len - self.low_used) {
return error.OutOfMemory;
}
const start = self.buffer.len - adjusted_index - n;
const result = self.buffer[start .. start + n];
self.high_used = new_high_used;
return result;
}
pub fn getLowMark(self: *Hunk) usize {
return self.low_used;
}
pub fn getHighMark(self: *Hunk) usize {
return self.high_used;
}
pub fn freeToLowMark(self: *Hunk, pos: usize) void {
std.debug.assert(pos <= self.low_used);
if (pos < self.low_used) {
if (std.builtin.mode == std.builtin.Mode.Debug) {
std.mem.set(u8, self.buffer[pos..self.low_used], 0xcc);
}
self.low_used = pos;
}
}
pub fn freeToHighMark(self: *Hunk, pos: usize) void {
std.debug.assert(pos <= self.high_used);
if (pos < self.high_used) {
if (std.builtin.mode == std.builtin.Mode.Debug) {
const i = self.buffer.len - self.high_used;
const n = self.high_used - pos;
std.mem.set(u8, self.buffer[i .. i + n], 0xcc);
}
self.high_used = pos;
}
}
};
// WASM only
// test "Hunk" {
// // test a few random operations. very low coverage. write more later
// var buf: [100]u8 = undefined;
// var hunk = Hunk.init(buf[0..]);
// const high_mark = hunk.getHighMark();
// _ = try hunk.low().allocator.alloc(u8, 7);
// _ = try hunk.high().allocator.alloc(u8, 8);
// std.testing.expectEqual(@as(usize, 7), hunk.low_used);
// std.testing.expectEqual(@as(usize, 8), hunk.high_used);
// _ = try hunk.high().allocator.alloc(u8, 8);
// std.testing.expectEqual(@as(usize, 16), hunk.high_used);
// const low_mark = hunk.getLowMark();
// _ = try hunk.low().allocator.alloc(u8, 100 - 7 - 16);
// std.testing.expectEqual(@as(usize, 100 - 16), hunk.low_used);
// std.testing.expectError(error.OutOfMemory, hunk.high().allocator.alloc(u8, 1));
// hunk.freeToLowMark(low_mark);
// _ = try hunk.high().allocator.alloc(u8, 1);
// hunk.freeToHighMark(high_mark);
// std.testing.expectEqual(@as(usize, 0), hunk.high_used);
// }
ext'>feat/ci-next
feat/cli
feat/codemod
feat/config-log-level
feat/container
feat/context
feat/create-astro-replace-component-selector-with-astro-add
feat/create-astro-ui
feat/csr
feat/data-improvements
feat/data-with-set
feat/db-action
feat/db-relations
feat/define-data
feat/devtools
feat/dynamic-client-directives
feat/editor
feat/experimental-jsx
feat/expose-action-api-context
feat/expose-frontmatter-to-build-done-hook
feat/fetch-cache
feat/flow-components
feat/fonts-granular-preload
feat/fonts-retrieve-data
feat/foreign-key-migrations
feat/foreign-keys
feat/html-pages
feat/image-placeholders
feat/improve-custom-element-detection
feat/incremental-build
feat/indexes
feat/integration-kit
feat/jsx-transform
feat/legacy-markdown-flag
feat/markdoc-embeds
feat/markdown-components
feat/mdx-js-injection
feat/mdx-plugin-export
feat/minify-html
feat/next-get-env
feat/og
feat/ooo-streaming
feat/pragma
feat/preview
feat/react-19
feat/react-19-actions
feat/redirect-on-html-backup
feat/references
feat/remote-flag
feat/remove-astro-image-backup
feat/remove-studio
feat/render-with-queue
feat/reroute-ssr
feat/resolve-entrypoint
feat/router
feat/router-ii
feat/seo-components
feat/skip-sync-flag
feat/spa
feat/spa-ii
feat/squoosh
feat/standard-schema
feat/storage-studio
feat/streaming-rendering
feat/style-obj
feat/test-utils
feat/xray-improvements
fetch-astro-pages-mvp
fix-408
fix-all-pages-key
fix-beta-ref
fix-create-ref
fix-netlify-edge
fix-next-basics
fix-nullish-slot-name
fix-s-island-fallback
fix-vite-asset
fix/actions-cookies
fix/actions-pending-timeout
fix/assets-types
fix/astro-config-refresh
fix/astro-html-escape-bug
fix/build-subpaths
fix/client-only-component-css
fix/client-scripts-windows
fix/config-migration-defaults
fix/container-directives
fix/dates
fix/db-integration-with-missing-config
fix/devtoolbar-data-unset
fix/empty-slots
fix/filepath-layer
fix/frontmatter-file-url
fix/head-propagation
fix/hmr-css-deps
fix/import-ts-errors
fix/main-build-failure
fix/map-file-404-logs
fix/mdx-named-slots
fix/middleware-import
fix/multi-images
fix/nested-get-collection-call
fix/preact-package-build-failure
fix/primary-key-optional
fix/regex-flags
fix/server-headers
fix/stable-renderer-order
fix/transaction-type
fix/vue-nested
fix/webapi-dev
fork/markdoc-poc-with-md-support
fork/markdoc-poc-with-parser
format-imports-run
formatting
forward-button
framework-agnostic-astro-components
fryuni/db-pluggable-backend
fryuni/test-route-setup-hook
fryuni/tracing-hooks
hippotastic/legitimate-bat
hoisted-script-ts
host-ssr-example-2
hostfornode
image-non-node
improve-base-handling
inline-hoisted-scripts-now
jn.convert-assertions-to-query-params
latest
live-loaders
main
mandar1jn/ci-repo-check
markdoc-embed-prototyping
markdown
markdown-poc
mdx-path
mk/render-slot-template-backup
move-default-md-code-component
mt/lit-DSD
mt/lit-regen
mt/parse-DSD
mt/router_refactoring
nate/new-blog-template
netlify-1
netlify-preview
new-adapter-api
next
next-render
no-more-vite-postprocess
no-more-vite-postprocess2
old-build
plt-1006/unified-and-mdx
plt-1768-trailing-slash-object
preact-shared-signals
process-env-override
progress-log
re-export-drivers
react-fast-refresh
redirects-priority2
redirects-ssg-object
refactor-how-client-directives-work
refactor/image-internals
refactor/markdoc-renderer
refactor/rendere-queue
refactor/sitemap
refactor/ssr-size
release/0.17
release/0.18
remote-cdn-link
remove-fs-abstraction
remove-start
restart-on-lock
revert-13008-renovate/all-minor-patch
revert-lockfile
route-manifest-adapter
sarah11918-image-errors
sarah11918-patch-2
sb-tests2
seroval
server-islands-children
session-docs
single-file-build-2
slash-404-hint
slot-bug-1
solid-ecosystem-pkg
spike/app-setup
spike/autonav
spike/codehike
spike/context
spike/csr
spike/default-content
spike/incremental
spike/incremental-ii
spike/markdown-wasm
spike/render
spike/streaming
spike/svg
sqlite-test
squeal
ssr-redirect
stream-buffer
streaming
telemetry-audit-1
test/new-integrations-demo
test/new-ssr-demo
top-level-exports-integrations
ts-in-hoisted-script
ts-no-err
upd-vite-vendored
upgrade-deps
v1-beta
vercel-test
vite-fork
vscode-astro-global
vt-follow-redirects
warn-exp-flag
win
windows-tests-beta
wip-assets
wip-component-api-2
wip-docs-components
wip-docs-reference-gen
wip-fetch-cache
wip-fun-flags
wip-icons
wip-logging
wip-logging-saved
wip-mdc
wip-mdx-to-astro-js
wip-preview-command-integrations
wip-setup-content
wip-smoke
wip-speed-up-markdown
wip-stage
wip/react-19-test
Unnamed repository; edit this file 'description' to name the repository.
Age Commit message (Collapse ) Author Files Lines
* Allow dynamic route segments in isr.exclude array
* copy over eslint-disable as well
* add test
* update test: slashes dont need to be escaped
* update changeset
---------
Co-authored-by: lilnasy <69170106+lilnasy@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* feat: add indexes array config with name gen
* fix: add _idx suffix, remove name from output
* feat(test): new index config
* chore: remove unused type
* chore: changeset
* chore: add sort() for consistent names
* feat(test): consistent column ordering
* feat(test): ensure no queries when migrating legacy to new