
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
glsl-token-functions
Advanced tools
Extract function definitions from an array of GLSL tokens from glsl-tokenizer.
You can use this to grab all of the functions in a shader, along with their arguments, return value and name.
functions = tokenFunctions(tokens)Given an array of tokens produced by glsl-tokenizer, return an array of function data in the following format:
{
name: 'functionName',
type: 'vec4'
body: [100, 110],
args: [98, 99],
outer: [80, 111]
}
fn.nameThe function name. For example, the following function would be main:
void main();
fn.typeThe function return type. For example, the following function would be vec2:
vec2 getModel(vec3 p);
Note that this supports structs too! The following function's type would be Ray:
struct Ray {
vec3 ro;
vec3 rd;
}
Ray getCamera(vec3 origin);
fn.bodyThe start and end index in the original tokens array of the function body, i.e. the part between the curly braces. If the function doesn't have a body, this will be false.
For example:
const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void main() { gl_FragColor = vec4(1); }
`
const tokens = tokenize(src)
const functions = tokenFunctions(tokens)
console.log(getBody(functions[0])) // false
console.log(getBody(functions[1])) // " gl_FragColor = vec4(1); "
function getBody () {
return toString(tokens.slice(fn.body[0], fn.body[1]))
}
fn.argsThe start and end index in the original tokens array of the function arguments, i.e. the part including the parenthesis in the function definition.
For example:
const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void drawImage(vec3 ro, vec3 rd);
`
const tokens = tokenize(src)
const functions = tokenFunctions(tokens)
console.log(getArgs(functions[0])) // "()"
console.log(getArgs(functions[1])) // "(vec3 ro, vec3 rd)"
function getArgs () {
return toString(tokens.slice(fn.args[0], fn.args[1]))
}
fn.outerThe start and end index in the original tokens array of the entire function.
For example:
const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void main() { gl_FragColor = vec4(1); }
`
const tokens = tokenize(src)
const functions = tokenFunctions(tokens)
console.log(getOuter(functions[0])) // "void main();"
console.log(getOuter(functions[1])) // "void main() { gl_FragColor = vec4(1); }"
function getOuter () {
return toString(tokens.slice(fn.outer[0], fn.outer[1]))
}
See stackgl/contributing for details.
MIT. See LICENSE.md for details.
FAQs
Extract function definitions from an array of GLSL tokens.
We found that glsl-token-functions demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.