@skenion/contracts 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +7 -0
  2. package/dist/audioClock.d.ts +3 -0
  3. package/dist/audioClock.d.ts.map +1 -0
  4. package/dist/audioClock.js +41 -0
  5. package/dist/audioClock.js.map +1 -0
  6. package/dist/builtins.generated.d.ts +2689 -0
  7. package/dist/builtins.generated.d.ts.map +1 -0
  8. package/dist/builtins.generated.js +6031 -0
  9. package/dist/builtins.generated.js.map +1 -0
  10. package/dist/clock.d.ts +39 -0
  11. package/dist/clock.d.ts.map +1 -0
  12. package/dist/clock.js +157 -0
  13. package/dist/clock.js.map +1 -0
  14. package/dist/conversion.d.ts +158 -0
  15. package/dist/conversion.d.ts.map +1 -0
  16. package/dist/conversion.js +199 -0
  17. package/dist/conversion.js.map +1 -0
  18. package/dist/generated/schemas.d.ts +2189 -0
  19. package/dist/generated/schemas.d.ts.map +1 -0
  20. package/dist/generated/schemas.js +2839 -0
  21. package/dist/generated/schemas.js.map +1 -0
  22. package/dist/index.d.ts +15 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +12 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/objectText.d.ts +3 -0
  27. package/dist/objectText.d.ts.map +1 -0
  28. package/dist/objectText.js +292 -0
  29. package/dist/objectText.js.map +1 -0
  30. package/dist/patch.d.ts +7 -0
  31. package/dist/patch.d.ts.map +1 -0
  32. package/dist/patch.js +296 -0
  33. package/dist/patch.js.map +1 -0
  34. package/dist/project.d.ts +3 -0
  35. package/dist/project.d.ts.map +1 -0
  36. package/dist/project.js +22 -0
  37. package/dist/project.js.map +1 -0
  38. package/dist/runtimeHttp.d.ts +23 -0
  39. package/dist/runtimeHttp.d.ts.map +1 -0
  40. package/dist/runtimeHttp.js +474 -0
  41. package/dist/runtimeHttp.js.map +1 -0
  42. package/dist/shaderInterface.d.ts +6 -0
  43. package/dist/shaderInterface.d.ts.map +1 -0
  44. package/dist/shaderInterface.js +262 -0
  45. package/dist/shaderInterface.js.map +1 -0
  46. package/dist/types.d.ts +1122 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/validate.d.ts +16 -0
  51. package/dist/validate.d.ts.map +1 -0
  52. package/dist/validate.js +485 -0
  53. package/dist/validate.js.map +1 -0
  54. package/package.json +104 -0
@@ -0,0 +1,262 @@
1
+ const UNIFORM_RE = /^\s*\/\/\s*@skenion\.uniform\s+(\S+)\s+([A-Za-z0-9_.]+)(.*)$/;
2
+ const UNIFORM_MARKER = "@skenion.uniform";
3
+ const PORT_ID_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
4
+ const RESERVED_UNIFORM_IDS = new Set(["out", "in", "set", "bang", "value"]);
5
+ const SUPPORTED_TYPES = new Set([
6
+ "number.float",
7
+ "number.int",
8
+ "number.uint",
9
+ "boolean",
10
+ "color"
11
+ ]);
12
+ export function analyzeShaderInterfaceV01(source, options) {
13
+ const diagnostics = [];
14
+ const uniforms = [];
15
+ const ids = new Set();
16
+ if (options.language !== "wgsl") {
17
+ diagnostics.push({
18
+ severity: "error",
19
+ phase: "interface-analysis",
20
+ code: "unsupported-language",
21
+ message: `unsupported shader language: ${options.language}`,
22
+ source: "user"
23
+ });
24
+ }
25
+ const lines = source.split(/\r?\n/);
26
+ for (const [lineIndex, line] of lines.entries()) {
27
+ const markerIndex = line.indexOf(UNIFORM_MARKER);
28
+ const match = line.match(UNIFORM_RE);
29
+ if (!match) {
30
+ if (markerIndex >= 0 && line.trimStart().startsWith("//")) {
31
+ diagnostics.push(diagnostic({
32
+ code: "malformed-annotation",
33
+ message: "malformed @skenion.uniform annotation",
34
+ line: lineIndex + 1,
35
+ column: markerIndex + 1
36
+ }));
37
+ }
38
+ continue;
39
+ }
40
+ const [, id, rawType, rest = ""] = match;
41
+ const lineNumber = lineIndex + 1;
42
+ const idColumn = Math.max(1, line.indexOf(id) + 1);
43
+ if (!PORT_ID_RE.test(id)) {
44
+ diagnostics.push(error("invalid-uniform-id", `invalid uniform id: ${id}`, lineNumber, id, idColumn));
45
+ continue;
46
+ }
47
+ if (RESERVED_UNIFORM_IDS.has(id)) {
48
+ diagnostics.push(error("reserved-uniform-id", `reserved uniform id: ${id}`, lineNumber, id, idColumn));
49
+ continue;
50
+ }
51
+ if (ids.has(id)) {
52
+ diagnostics.push(error("duplicate-uniform-id", `duplicate uniform id: ${id}`, lineNumber, id, idColumn));
53
+ continue;
54
+ }
55
+ ids.add(id);
56
+ if (!isSupportedType(rawType)) {
57
+ diagnostics.push(error("unsupported-uniform-type", `unsupported uniform type: ${rawType}`, lineNumber, id, idColumn));
58
+ continue;
59
+ }
60
+ const attributes = parseAttributes(rest);
61
+ for (const rangeDiagnostic of rangeDiagnostics(attributes, line, lineNumber, id)) {
62
+ diagnostics.push(rangeDiagnostic);
63
+ }
64
+ const type = dataTypeFor(rawType, attributes);
65
+ const uniform = {
66
+ id,
67
+ label: stringAttribute(attributes, "label") ?? defaultLabel(id),
68
+ type,
69
+ required: false
70
+ };
71
+ if (attributes.has("default")) {
72
+ const parsedDefault = parseDefault(rawType, attributes.get("default"));
73
+ if (parsedDefault.ok) {
74
+ uniform.default = parsedDefault.value;
75
+ }
76
+ else {
77
+ diagnostics.push(error("invalid-default", parsedDefault.message, lineNumber, id, attributeColumn(line, "default")));
78
+ }
79
+ }
80
+ uniforms.push(uniform);
81
+ }
82
+ return {
83
+ ok: diagnostics.every((diagnostic) => diagnostic.severity !== "error"),
84
+ shaderInterface: {
85
+ schema: "skenion.shader.interface",
86
+ schemaVersion: "0.1.0",
87
+ language: options.language,
88
+ uniforms
89
+ },
90
+ diagnostics
91
+ };
92
+ }
93
+ export function shaderInterfaceToPortsV01(shaderInterface) {
94
+ return [
95
+ ...shaderInterface.uniforms.map((uniform) => {
96
+ const port = {
97
+ id: uniform.id,
98
+ direction: "input",
99
+ label: uniform.label,
100
+ type: uniform.type,
101
+ required: uniform.required,
102
+ activation: "latched"
103
+ };
104
+ if (uniform.default !== undefined) {
105
+ port.default = uniform.default;
106
+ }
107
+ return port;
108
+ }),
109
+ {
110
+ id: "out",
111
+ direction: "output",
112
+ label: "Out",
113
+ type: {
114
+ flow: "resource",
115
+ dataKind: "gpu.texture2d",
116
+ format: "rgba8unorm",
117
+ colorSpace: "srgb"
118
+ }
119
+ }
120
+ ];
121
+ }
122
+ function error(code, message, line, uniformId, column) {
123
+ return diagnostic({ code, message, line, column, uniformId });
124
+ }
125
+ function diagnostic({ code, message, line, column, uniformId }) {
126
+ return {
127
+ severity: "error",
128
+ phase: "interface-analysis",
129
+ code,
130
+ message,
131
+ line,
132
+ column,
133
+ uniformId,
134
+ source: "user"
135
+ };
136
+ }
137
+ function isSupportedType(value) {
138
+ return SUPPORTED_TYPES.has(value);
139
+ }
140
+ function dataTypeFor(dataKind, attributes) {
141
+ const type = { flow: "value", dataKind };
142
+ if (dataKind === "number.float") {
143
+ type.format = "f32";
144
+ }
145
+ else if (dataKind === "number.int") {
146
+ type.format = "i32";
147
+ }
148
+ else if (dataKind === "number.uint") {
149
+ type.format = "u32";
150
+ }
151
+ else if (dataKind === "color") {
152
+ type.format = "rgba32f";
153
+ type.colorSpace = "linear";
154
+ }
155
+ const range = {
156
+ min: numberAttribute(attributes, "min"),
157
+ max: numberAttribute(attributes, "max"),
158
+ step: positiveNumberAttribute(attributes, "step")
159
+ };
160
+ if (range.min !== undefined || range.max !== undefined || range.step !== undefined) {
161
+ type.range = range;
162
+ }
163
+ return type;
164
+ }
165
+ function parseAttributes(value) {
166
+ const attributes = new Map();
167
+ const re = /([A-Za-z_][A-Za-z0-9_]*)=("(?:[^"\\]|\\.)*"|\[[^\]]*\]|[^\s]+)/g;
168
+ for (const match of value.matchAll(re)) {
169
+ attributes.set(match[1], match[2]);
170
+ }
171
+ return attributes;
172
+ }
173
+ function stringAttribute(attributes, key) {
174
+ const value = attributes.get(key);
175
+ if (value === undefined) {
176
+ return undefined;
177
+ }
178
+ if (value.startsWith("\"") && value.endsWith("\"")) {
179
+ return value.slice(1, -1).replace(/\\"/g, "\"");
180
+ }
181
+ return value;
182
+ }
183
+ function numberAttribute(attributes, key) {
184
+ const value = attributes.get(key);
185
+ if (value === undefined) {
186
+ return undefined;
187
+ }
188
+ const parsed = Number(value);
189
+ return Number.isFinite(parsed) ? parsed : undefined;
190
+ }
191
+ function positiveNumberAttribute(attributes, key) {
192
+ const value = numberAttribute(attributes, key);
193
+ return value !== undefined && value > 0 ? value : undefined;
194
+ }
195
+ function rangeDiagnostics(attributes, line, lineNumber, uniformId) {
196
+ const diagnostics = [];
197
+ for (const key of ["min", "max"]) {
198
+ const rawValue = attributes.get(key);
199
+ if (rawValue !== undefined && !Number.isFinite(Number(rawValue))) {
200
+ diagnostics.push(error("invalid-number-range", `invalid ${key} range value: ${rawValue}`, lineNumber, uniformId, attributeColumn(line, key)));
201
+ }
202
+ }
203
+ const step = attributes.get("step");
204
+ if (step !== undefined) {
205
+ const parsed = Number(step);
206
+ if (!Number.isFinite(parsed) || parsed <= 0) {
207
+ diagnostics.push(error("invalid-number-range", `invalid step range value: ${step}`, lineNumber, uniformId, attributeColumn(line, "step")));
208
+ }
209
+ }
210
+ return diagnostics;
211
+ }
212
+ function attributeColumn(line, key) {
213
+ return line.indexOf(`${key}=`) + 1;
214
+ }
215
+ function parseDefault(dataKind, value) {
216
+ if (dataKind === "number.float") {
217
+ const parsed = Number(value);
218
+ return Number.isFinite(parsed)
219
+ ? { ok: true, value: parsed }
220
+ : { ok: false, message: `invalid number.float default: ${value}` };
221
+ }
222
+ if (dataKind === "number.int") {
223
+ const parsed = Number(value);
224
+ return Number.isInteger(parsed)
225
+ ? { ok: true, value: parsed }
226
+ : { ok: false, message: `invalid number.int default: ${value}` };
227
+ }
228
+ if (dataKind === "number.uint") {
229
+ const parsed = Number(value);
230
+ return Number.isInteger(parsed) && parsed >= 0
231
+ ? { ok: true, value: parsed }
232
+ : { ok: false, message: `invalid number.uint default: ${value}` };
233
+ }
234
+ if (dataKind === "boolean") {
235
+ if (value === "true") {
236
+ return { ok: true, value: true };
237
+ }
238
+ if (value === "false") {
239
+ return { ok: true, value: false };
240
+ }
241
+ return { ok: false, message: `invalid boolean default: ${value}` };
242
+ }
243
+ try {
244
+ const parsed = JSON.parse(value);
245
+ if (Array.isArray(parsed) &&
246
+ parsed.length === 4 &&
247
+ parsed.every((component) => typeof component === "number" && Number.isFinite(component))) {
248
+ return { ok: true, value: parsed };
249
+ }
250
+ }
251
+ catch {
252
+ // Report below with a stable diagnostic.
253
+ }
254
+ return { ok: false, message: `invalid color default: ${value}` };
255
+ }
256
+ function defaultLabel(id) {
257
+ return id
258
+ .replace(/_/g, " ")
259
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
260
+ .replace(/\b\w/g, (letter) => letter.toUpperCase());
261
+ }
262
+ //# sourceMappingURL=shaderInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaderInterface.js","sourceRoot":"","sources":["../src/shaderInterface.ts"],"names":[],"mappings":"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"}