PDPA Features: ✅ Cookie consent banner ✅ Consent logging API ✅ Admin dashboard ✅ Privacy Policy ✅ Terms & Conditions Technical: ✅ Astro 5.x + Tailwind v4 ✅ Docker on port 80 ✅ SQLite database ✅ 15 pages built Ready for Easypanel deployment.
35 lines
806 B
JavaScript
35 lines
806 B
JavaScript
import { SyncWalker } from './sync.js';
|
|
import { AsyncWalker } from './async.js';
|
|
|
|
/**
|
|
* @typedef {import('estree').Node} Node
|
|
* @typedef {import('./sync.js').SyncHandler} SyncHandler
|
|
* @typedef {import('./async.js').AsyncHandler} AsyncHandler
|
|
*/
|
|
|
|
/**
|
|
* @param {Node} ast
|
|
* @param {{
|
|
* enter?: SyncHandler
|
|
* leave?: SyncHandler
|
|
* }} walker
|
|
* @returns {Node | null}
|
|
*/
|
|
export function walk(ast, { enter, leave }) {
|
|
const instance = new SyncWalker(enter, leave);
|
|
return instance.visit(ast, null);
|
|
}
|
|
|
|
/**
|
|
* @param {Node} ast
|
|
* @param {{
|
|
* enter?: AsyncHandler
|
|
* leave?: AsyncHandler
|
|
* }} walker
|
|
* @returns {Promise<Node | null>}
|
|
*/
|
|
export async function asyncWalk(ast, { enter, leave }) {
|
|
const instance = new AsyncWalker(enter, leave);
|
|
return await instance.visit(ast, null);
|
|
}
|