@threeify/shader-transpiler
Version:
A glsl to JS module transpiler.
76 lines • 2.4 kB
JavaScript
function parseString(token, defaultValue) {
if (token === undefined) {
return defaultValue;
}
if (typeof token === 'string') {
return token;
}
throw new Error(`unhandled string value: "${token}"`);
}
function parseStringArray(token, defaultValue) {
if (token === undefined) {
return defaultValue;
}
if (typeof token === 'object') {
const result = [];
token.forEach((value, index) => {
result.push(parseString(value, ''));
});
return result.filter((value) => value !== '');
}
throw new Error(`unhandled string array value: "${token}"`);
}
function parseBoolean(token, defaultValue) {
if (token === undefined) {
return defaultValue;
}
if (typeof token === 'boolean') {
return token;
}
if (typeof token === 'string') {
if (token.toLowerCase() === 'true' ||
token === '1' ||
token.toLowerCase() === 't') {
return true;
}
if (token.toLowerCase() === 'false' ||
token === '0' ||
token.toLowerCase() === 'f') {
return false;
}
}
throw new Error(`unhandled boolean value: "${token}"`);
}
function parseInteger(token, defaultValue) {
if (token === undefined) {
return defaultValue;
}
if (typeof token === 'number') {
return token;
}
if (typeof token === 'string') {
return Number.parseInt(token);
}
throw new Error(`unhandled integer value: "${token}"`);
}
export class Options {
constructor() {
this.rootDir = '.';
this.includeDirs = [];
this.outDir = './dist';
this.extensions = ['glsl'];
this.minify = false;
this.verboseLevel = 0;
this.allowJSIncludes = false;
}
safeCopy(json) {
this.rootDir = parseString(json.rootDir, this.rootDir);
this.includeDirs = parseStringArray(json.includeDirs, this.includeDirs);
this.outDir = parseString(json.outDir, this.outDir);
this.extensions.concat(parseStringArray(json.extensions, []));
this.minify = parseBoolean(json.minify, this.minify);
this.verboseLevel = parseInteger(json.verboseLevel, this.verboseLevel);
this.allowJSIncludes = parseBoolean(json.allowJSIncludes, this.allowJSIncludes);
}
}
//# sourceMappingURL=Options.js.map