Skip to content

Commit f83eb49

Browse files
committed
feat: makeDereferencable
1 parent c96d9d4 commit f83eb49

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { snip, type Origin } from '../data/snippet.ts';
2+
import type { BaseData } from '../data/wgslTypes.ts';
3+
import { $gpuValueOf, $internal, $ownSnippet, $resolve } from '../shared/symbols.ts';
4+
import { valueProxyHandler } from './valueProxyUtils.ts';
5+
6+
export function makeDereferencable<T>(value: T, options: makeDereferencable.Options): T {
7+
Object.defineProperty(value, $gpuValueOf, {
8+
value: function () {
9+
const [dataType, origin] = options.getDataTypeAndOrigin();
10+
11+
return new Proxy(
12+
{
13+
[$internal]: true,
14+
get [$ownSnippet]() {
15+
return snip(this, dataType, origin);
16+
},
17+
[$resolve]: (ctx) => ctx.resolve(this),
18+
toString: () => `${options.asString()}.$`,
19+
},
20+
valueProxyHandler,
21+
);
22+
},
23+
});
24+
25+
return value;
26+
}
27+
28+
export namespace makeDereferencable {
29+
export interface Options {
30+
getDataTypeAndOrigin(): [dataType: BaseData, origin: Origin];
31+
asString(): string;
32+
}
33+
}

0 commit comments

Comments
 (0)