@celox-sim/vite-plugin 0.1.12 → 0.1.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,YAAY;IAHzC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAAM;gBAEM,YAAY,EAAE,MAAM;IAEjD,kEAAkE;IAClE,GAAG,IAAI,eAAe;IAUtB,mEAAmE;IACnE,UAAU,IAAI,IAAI;IAKlB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,cAAc;CAgCvB"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,UAAU;IAIV,OAAO,CAAC,QAAQ,CAAC,YAAY;IAHzC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAAM;gBAEM,YAAY,EAAE,MAAM;IAEjD,kEAAkE;IAClE,GAAG,IAAI,eAAe;IAUtB,mEAAmE;IACnE,UAAU,IAAI,IAAI;IAKlB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,cAAc;CA6BtB"}
package/dist/cache.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { readdirSync, statSync } from "node:fs";
2
- import { join, extname } from "node:path";
2
+ import { extname, join } from "node:path";
3
3
  import { runGenTs } from "./generator.js";
4
4
  export class GenTsCache {
5
5
  _projectRoot;
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,OAAO,UAAU;IAIQ;IAHrB,KAAK,CAA8B;IACnC,SAAS,GAAG,EAAE,CAAC;IAEvB,YAA6B,YAAoB;QAApB,iBAAY,GAAZ,YAAY,CAAQ;IAAG,CAAC;IAErD,kEAAkE;IAClE,GAAG;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,UAAU;QACR,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED;;;OAGG;IACK,eAAe;QACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,OAAO,GAAG,QAAQ;gBAAE,QAAQ,GAAG,OAAO,CAAC;YAC3C,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;IAChC,CAAC;IAEO,cAAc,CACpB,GAAW,EACX,EAA6B;QAE7B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,qCAAqC;gBACrC,IACE,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC7B,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACvB,KAAK,CAAC,IAAI,KAAK,MAAM;oBACrB,KAAK,CAAC,IAAI,KAAK,MAAM,EACrB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACH,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,UAAU;IAIO;IAHrB,KAAK,CAA8B;IACnC,SAAS,GAAG,EAAE,CAAC;IAEvB,YAA6B,YAAoB;QAApB,iBAAY,GAAZ,YAAY,CAAQ;IAAG,CAAC;IAErD,kEAAkE;IAClE,GAAG;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,mEAAmE;IACnE,UAAU;QACT,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,eAAe;QACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,OAAO,GAAG,QAAQ;gBAAE,QAAQ,GAAG,OAAO,CAAC;YAC3C,KAAK,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,GAAW,EAAE,EAA6B;QAChE,IAAI,OAAqC,CAAC;QAC1C,IAAI,CAAC;YACJ,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO;QACR,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,qCAAqC;gBACrC,IACC,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC7B,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACvB,KAAK,CAAC,IAAI,KAAK,MAAM;oBACrB,KAAK,CAAC,IAAI,KAAK,MAAM,EACpB,CAAC;oBACF,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACJ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACR,6BAA6B;gBAC9B,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC3C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAIlE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAsFxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAElE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAwGxE"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { resolve, isAbsolute, dirname } from "node:path";
2
1
  import { existsSync } from "node:fs";
2
+ import { dirname, isAbsolute, resolve } from "node:path";
3
3
  import { GenTsCache } from "./cache.js";
4
- import { generateSidecars, cleanSidecars } from "./sidecar.js";
4
+ import { cleanSidecars, generateSidecars } from "./sidecar.js";
5
5
  const VERYL_PREFIX = "\0veryl:";
6
6
  /**
7
7
  * Vite plugin for importing `.veryl` files as typed `ModuleDefinition` objects.
@@ -40,28 +40,40 @@ export default function celoxPlugin(options) {
40
40
  sidecarPaths = generateSidecars(data, projectRoot);
41
41
  },
42
42
  resolveId(source, importer) {
43
- if (!source.endsWith(".veryl"))
43
+ // Split off query string (e.g. "?dse=preserveAllPorts")
44
+ const [rawPath, queryStr] = source.split("?", 2);
45
+ if (!rawPath.endsWith(".veryl"))
44
46
  return;
45
47
  // Resolve to absolute path
46
48
  let absPath;
47
- if (isAbsolute(source)) {
48
- absPath = source;
49
+ if (isAbsolute(rawPath)) {
50
+ absPath = rawPath;
49
51
  }
50
52
  else if (importer) {
51
- absPath = resolve(dirname(importer), source);
53
+ absPath = resolve(dirname(importer), rawPath);
52
54
  }
53
55
  else {
54
- absPath = resolve(source);
56
+ absPath = resolve(rawPath);
55
57
  }
56
58
  // Only handle .veryl files that exist
57
59
  if (!existsSync(absPath))
58
60
  return;
59
- return VERYL_PREFIX + absPath;
61
+ // Preserve query string in virtual ID
62
+ return VERYL_PREFIX + absPath + (queryStr ? `?${queryStr}` : "");
60
63
  },
61
64
  load(id) {
62
65
  if (!id.startsWith(VERYL_PREFIX))
63
66
  return;
64
- const absPath = id.slice(VERYL_PREFIX.length);
67
+ const rest = id.slice(VERYL_PREFIX.length);
68
+ const [absPath, queryStr] = rest.split("?", 2);
69
+ const params = new URLSearchParams(queryStr ?? "");
70
+ // Parse ?dse= query parameter
71
+ let dsePolicy;
72
+ if (params.has("dse")) {
73
+ const raw = params.get("dse");
74
+ // ?dse (no value) defaults to "preserveAllPorts" (safe side)
75
+ dsePolicy = raw || "preserveAllPorts";
76
+ }
65
77
  const data = cache.get();
66
78
  // Find the relative source file path
67
79
  const relPath = makeRelative(absPath, projectRoot);
@@ -70,13 +82,16 @@ export default function celoxPlugin(options) {
70
82
  this.warn(`No modules found in ${relPath}`);
71
83
  return "export {};";
72
84
  }
85
+ const defaultOptions = dsePolicy
86
+ ? { deadStorePolicy: dsePolicy }
87
+ : undefined;
73
88
  // Build ESM exports for each module in this file
74
89
  const exports = moduleNames
75
90
  .map((name) => {
76
91
  const mod = data.modules.find((m) => m.moduleName === name);
77
92
  if (!mod)
78
93
  return "";
79
- return generateEsmExport(mod, data.projectPath);
94
+ return generateEsmExport(mod, data.projectPath, defaultOptions);
80
95
  })
81
96
  .filter((s) => s.length > 0)
82
97
  .join("\n\n");
@@ -120,7 +135,7 @@ function makeRelative(absPath, base) {
120
135
  const normAbs = absPath.replace(/\\/g, "/");
121
136
  const normBase = base.replace(/\\/g, "/").replace(/\/$/, "");
122
137
  let rel = normAbs;
123
- if (normAbs.startsWith(normBase + "/")) {
138
+ if (normAbs.startsWith(`${normBase}/`)) {
124
139
  rel = normAbs.slice(normBase.length + 1);
125
140
  }
126
141
  else if (normAbs.startsWith(normBase)) {
@@ -134,19 +149,22 @@ function makeRelative(absPath, base) {
134
149
  /**
135
150
  * Generate an ESM export for a single module.
136
151
  */
137
- function generateEsmExport(mod, projectPath) {
152
+ function generateEsmExport(mod, projectPath, defaultOptions) {
138
153
  const portsJson = JSON.stringify(mod.ports, null, 2)
139
154
  .split("\n")
140
- .map((line, i) => (i === 0 ? line : " " + line))
155
+ .map((line, i) => (i === 0 ? line : ` ${line}`))
141
156
  .join("\n");
142
157
  const eventsJson = JSON.stringify(mod.events);
158
+ const defaultOptsLine = defaultOptions
159
+ ? `\n defaultOptions: ${JSON.stringify(defaultOptions)},`
160
+ : "";
143
161
  return `export const ${mod.moduleName} = {
144
162
  __celox_module: true,
145
163
  name: ${JSON.stringify(mod.moduleName)},
146
164
  source: "",
147
165
  projectPath: ${JSON.stringify(projectPath)},
148
166
  ports: ${portsJson},
149
- events: ${eventsJson},
167
+ events: ${eventsJson},${defaultOptsLine}
150
168
  };`;
151
169
  }
152
170
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,CAkCV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUnD"}
1
+ {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,MAAM,GACjB,MAAM,EAAE,CAkCV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUnD"}
package/dist/sidecar.js CHANGED
@@ -1,5 +1,5 @@
1
- import { writeFileSync, mkdirSync, unlinkSync, existsSync } from "node:fs";
2
- import { join, resolve, dirname, relative, isAbsolute } from "node:path";
1
+ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
3
3
  /** Default directory (relative to project root) for generated sidecar files. */
4
4
  export const SIDECAR_DIR = ".celox";
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACzD;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACxD;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B;AAED,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IAClC,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celox-sim/vite-plugin",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "Vite plugin for importing .veryl files as typed ModuleDefinition objects",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,7 @@
33
33
  "vite": ">=5.0.0"
34
34
  },
35
35
  "dependencies": {
36
- "@celox-sim/celox": "0.1.12"
36
+ "@celox-sim/celox": "0.1.14"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^25.3.2",
package/src/cache.ts CHANGED
@@ -1,75 +1,72 @@
1
- import { readdirSync, statSync } from "node:fs";
2
- import { join, extname } from "node:path";
3
- import type { GenTsJsonOutput } from "./types.js";
1
+ import { type Dirent, readdirSync, statSync } from "node:fs";
2
+ import { extname, join } from "node:path";
4
3
  import { runGenTs } from "./generator.js";
4
+ import type { GenTsJsonOutput } from "./types.js";
5
5
 
6
6
  export class GenTsCache {
7
- private _data: GenTsJsonOutput | undefined;
8
- private _mtimeKey = "";
7
+ private _data: GenTsJsonOutput | undefined;
8
+ private _mtimeKey = "";
9
9
 
10
- constructor(private readonly _projectRoot: string) {}
10
+ constructor(private readonly _projectRoot: string) {}
11
11
 
12
- /** Get cached data, refreshing if any .veryl file has changed. */
13
- get(): GenTsJsonOutput {
14
- const key = this.computeMtimeKey();
15
- if (this._data && this._mtimeKey === key) {
16
- return this._data;
17
- }
18
- this._data = runGenTs(this._projectRoot);
19
- this._mtimeKey = key;
20
- return this._data;
21
- }
12
+ /** Get cached data, refreshing if any .veryl file has changed. */
13
+ get(): GenTsJsonOutput {
14
+ const key = this.computeMtimeKey();
15
+ if (this._data && this._mtimeKey === key) {
16
+ return this._data;
17
+ }
18
+ this._data = runGenTs(this._projectRoot);
19
+ this._mtimeKey = key;
20
+ return this._data;
21
+ }
22
22
 
23
- /** Force invalidation — next `get()` will re-run the generator. */
24
- invalidate(): void {
25
- this._mtimeKey = "";
26
- this._data = undefined;
27
- }
23
+ /** Force invalidation — next `get()` will re-run the generator. */
24
+ invalidate(): void {
25
+ this._mtimeKey = "";
26
+ this._data = undefined;
27
+ }
28
28
 
29
- /**
30
- * Build a key from the max mtime of all .veryl files in the project.
31
- * This is intentionally cheap — only stats, no file reads.
32
- */
33
- private computeMtimeKey(): string {
34
- let maxMtime = 0;
35
- let count = 0;
36
- this.walkVerylFiles(this._projectRoot, (mtimeMs) => {
37
- if (mtimeMs > maxMtime) maxMtime = mtimeMs;
38
- count++;
39
- });
40
- return `${count}:${maxMtime}`;
41
- }
29
+ /**
30
+ * Build a key from the max mtime of all .veryl files in the project.
31
+ * This is intentionally cheap — only stats, no file reads.
32
+ */
33
+ private computeMtimeKey(): string {
34
+ let maxMtime = 0;
35
+ let count = 0;
36
+ this.walkVerylFiles(this._projectRoot, (mtimeMs) => {
37
+ if (mtimeMs > maxMtime) maxMtime = mtimeMs;
38
+ count++;
39
+ });
40
+ return `${count}:${maxMtime}`;
41
+ }
42
42
 
43
- private walkVerylFiles(
44
- dir: string,
45
- cb: (mtimeMs: number) => void,
46
- ): void {
47
- let entries;
48
- try {
49
- entries = readdirSync(dir, { withFileTypes: true });
50
- } catch {
51
- return;
52
- }
53
- for (const entry of entries) {
54
- const full = join(dir, entry.name);
55
- if (entry.isDirectory()) {
56
- // Skip common non-source directories
57
- if (
58
- entry.name === "node_modules" ||
59
- entry.name === "target" ||
60
- entry.name === ".git" ||
61
- entry.name === "dist"
62
- ) {
63
- continue;
64
- }
65
- this.walkVerylFiles(full, cb);
66
- } else if (extname(entry.name) === ".veryl") {
67
- try {
68
- cb(statSync(full).mtimeMs);
69
- } catch {
70
- // file may have been deleted
71
- }
72
- }
73
- }
74
- }
43
+ private walkVerylFiles(dir: string, cb: (mtimeMs: number) => void): void {
44
+ let entries: Dirent<string>[] | undefined;
45
+ try {
46
+ entries = readdirSync(dir, { withFileTypes: true });
47
+ } catch {
48
+ return;
49
+ }
50
+ for (const entry of entries) {
51
+ const full = join(dir, entry.name);
52
+ if (entry.isDirectory()) {
53
+ // Skip common non-source directories
54
+ if (
55
+ entry.name === "node_modules" ||
56
+ entry.name === "target" ||
57
+ entry.name === ".git" ||
58
+ entry.name === "dist"
59
+ ) {
60
+ continue;
61
+ }
62
+ this.walkVerylFiles(full, cb);
63
+ } else if (extname(entry.name) === ".veryl") {
64
+ try {
65
+ cb(statSync(full).mtimeMs);
66
+ } catch {
67
+ // file may have been deleted
68
+ }
69
+ }
70
+ }
71
+ }
75
72
  }
package/src/generator.ts CHANGED
@@ -5,7 +5,7 @@ import type { GenTsJsonOutput } from "./types.js";
5
5
  * Run the TypeScript type generator via the NAPI addon and parse the output.
6
6
  */
7
7
  export function runGenTs(projectRoot: string): GenTsJsonOutput {
8
- const addon = loadNativeAddon();
9
- const json = addon.genTs(projectRoot);
10
- return JSON.parse(json) as GenTsJsonOutput;
8
+ const addon = loadNativeAddon();
9
+ const json = addon.genTs(projectRoot);
10
+ return JSON.parse(json) as GenTsJsonOutput;
11
11
  }
package/src/index.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { resolve, isAbsolute, dirname } from "node:path";
2
1
  import { existsSync } from "node:fs";
2
+ import { dirname, isAbsolute, resolve } from "node:path";
3
3
  import type { Plugin } from "vite";
4
- import type { CeloxPluginOptions, GenTsModule } from "./types.js";
5
4
  import { GenTsCache } from "./cache.js";
6
- import { generateSidecars, cleanSidecars } from "./sidecar.js";
5
+ import { cleanSidecars, generateSidecars } from "./sidecar.js";
6
+ import type { CeloxPluginOptions, GenTsModule } from "./types.js";
7
7
 
8
8
  export type { CeloxPluginOptions } from "./types.js";
9
9
 
@@ -23,150 +23,176 @@ const VERYL_PREFIX = "\0veryl:";
23
23
  * ```
24
24
  */
25
25
  export default function celoxPlugin(options?: CeloxPluginOptions): Plugin {
26
- let projectRoot: string;
27
- let cache: GenTsCache;
28
- let sidecarPaths: string[] = [];
29
-
30
- return {
31
- name: "vite-plugin-celox",
32
- enforce: "pre",
33
-
34
- configResolved(config) {
35
- // Determine project root
36
- if (options?.projectRoot) {
37
- projectRoot = resolve(options.projectRoot);
38
- } else {
39
- projectRoot = findVerylProjectRoot(config.root);
40
- }
41
-
42
- cache = new GenTsCache(projectRoot);
43
- },
44
-
45
- buildStart() {
46
- // Run generator and create type sidecars
47
- const data = cache.get();
48
- cleanSidecars(sidecarPaths);
49
- sidecarPaths = generateSidecars(data, projectRoot);
50
- },
51
-
52
- resolveId(source, importer) {
53
- if (!source.endsWith(".veryl")) return;
54
-
55
- // Resolve to absolute path
56
- let absPath: string;
57
- if (isAbsolute(source)) {
58
- absPath = source;
59
- } else if (importer) {
60
- absPath = resolve(dirname(importer), source);
61
- } else {
62
- absPath = resolve(source);
63
- }
64
-
65
- // Only handle .veryl files that exist
66
- if (!existsSync(absPath)) return;
67
-
68
- return VERYL_PREFIX + absPath;
69
- },
70
-
71
- load(id) {
72
- if (!id.startsWith(VERYL_PREFIX)) return;
73
-
74
- const absPath = id.slice(VERYL_PREFIX.length);
75
- const data = cache.get();
76
-
77
- // Find the relative source file path
78
- const relPath = makeRelative(absPath, projectRoot);
79
- const moduleNames = data.fileModules[relPath];
80
-
81
- if (!moduleNames || moduleNames.length === 0) {
82
- this.warn(`No modules found in ${relPath}`);
83
- return "export {};";
84
- }
85
-
86
- // Build ESM exports for each module in this file
87
- const exports = moduleNames
88
- .map((name) => {
89
- const mod = data.modules.find((m) => m.moduleName === name);
90
- if (!mod) return "";
91
- return generateEsmExport(mod, data.projectPath);
92
- })
93
- .filter((s) => s.length > 0)
94
- .join("\n\n");
95
-
96
- return exports;
97
- },
98
-
99
- handleHotUpdate({ file }) {
100
- if (!file.endsWith(".veryl")) return;
101
-
102
- // Invalidate cache so next load re-runs the generator
103
- cache.invalidate();
104
-
105
- // Re-generate sidecars
106
- const data = cache.get();
107
- cleanSidecars(sidecarPaths);
108
- sidecarPaths = generateSidecars(data, projectRoot);
109
- },
110
- };
26
+ let projectRoot: string;
27
+ let cache: GenTsCache;
28
+ let sidecarPaths: string[] = [];
29
+
30
+ return {
31
+ name: "vite-plugin-celox",
32
+ enforce: "pre",
33
+
34
+ configResolved(config) {
35
+ // Determine project root
36
+ if (options?.projectRoot) {
37
+ projectRoot = resolve(options.projectRoot);
38
+ } else {
39
+ projectRoot = findVerylProjectRoot(config.root);
40
+ }
41
+
42
+ cache = new GenTsCache(projectRoot);
43
+ },
44
+
45
+ buildStart() {
46
+ // Run generator and create type sidecars
47
+ const data = cache.get();
48
+ cleanSidecars(sidecarPaths);
49
+ sidecarPaths = generateSidecars(data, projectRoot);
50
+ },
51
+
52
+ resolveId(source, importer) {
53
+ // Split off query string (e.g. "?dse=preserveAllPorts")
54
+ const [rawPath, queryStr] = source.split("?", 2);
55
+ if (!rawPath!.endsWith(".veryl")) return;
56
+
57
+ // Resolve to absolute path
58
+ let absPath: string;
59
+ if (isAbsolute(rawPath!)) {
60
+ absPath = rawPath!;
61
+ } else if (importer) {
62
+ absPath = resolve(dirname(importer), rawPath!);
63
+ } else {
64
+ absPath = resolve(rawPath!);
65
+ }
66
+
67
+ // Only handle .veryl files that exist
68
+ if (!existsSync(absPath)) return;
69
+
70
+ // Preserve query string in virtual ID
71
+ return VERYL_PREFIX + absPath + (queryStr ? `?${queryStr}` : "");
72
+ },
73
+
74
+ load(id) {
75
+ if (!id.startsWith(VERYL_PREFIX)) return;
76
+
77
+ const rest = id.slice(VERYL_PREFIX.length);
78
+ const [absPath, queryStr] = rest.split("?", 2);
79
+ const params = new URLSearchParams(queryStr ?? "");
80
+
81
+ // Parse ?dse= query parameter
82
+ let dsePolicy: string | undefined;
83
+ if (params.has("dse")) {
84
+ const raw = params.get("dse");
85
+ // ?dse (no value) defaults to "preserveAllPorts" (safe side)
86
+ dsePolicy = raw || "preserveAllPorts";
87
+ }
88
+
89
+ const data = cache.get();
90
+
91
+ // Find the relative source file path
92
+ const relPath = makeRelative(absPath!, projectRoot);
93
+ const moduleNames = data.fileModules[relPath];
94
+
95
+ if (!moduleNames || moduleNames.length === 0) {
96
+ this.warn(`No modules found in ${relPath}`);
97
+ return "export {};";
98
+ }
99
+
100
+ const defaultOptions = dsePolicy
101
+ ? { deadStorePolicy: dsePolicy }
102
+ : undefined;
103
+
104
+ // Build ESM exports for each module in this file
105
+ const exports = moduleNames
106
+ .map((name) => {
107
+ const mod = data.modules.find((m) => m.moduleName === name);
108
+ if (!mod) return "";
109
+ return generateEsmExport(mod, data.projectPath, defaultOptions);
110
+ })
111
+ .filter((s) => s.length > 0)
112
+ .join("\n\n");
113
+
114
+ return exports;
115
+ },
116
+
117
+ handleHotUpdate({ file }) {
118
+ if (!file.endsWith(".veryl")) return;
119
+
120
+ // Invalidate cache so next load re-runs the generator
121
+ cache.invalidate();
122
+
123
+ // Re-generate sidecars
124
+ const data = cache.get();
125
+ cleanSidecars(sidecarPaths);
126
+ sidecarPaths = generateSidecars(data, projectRoot);
127
+ },
128
+ };
111
129
  }
112
130
 
113
131
  /**
114
132
  * Search upward from `startDir` for a directory containing `Veryl.toml`.
115
133
  */
116
134
  function findVerylProjectRoot(startDir: string): string {
117
- let dir = resolve(startDir);
118
- // eslint-disable-next-line no-constant-condition
119
- while (true) {
120
- if (existsSync(resolve(dir, "Veryl.toml"))) {
121
- return dir;
122
- }
123
- const parent = dirname(dir);
124
- if (parent === dir) {
125
- throw new Error(
126
- "Could not find Veryl.toml in any parent directory. " +
127
- "Set the projectRoot plugin option explicitly.",
128
- );
129
- }
130
- dir = parent;
131
- }
135
+ let dir = resolve(startDir);
136
+ // eslint-disable-next-line no-constant-condition
137
+ while (true) {
138
+ if (existsSync(resolve(dir, "Veryl.toml"))) {
139
+ return dir;
140
+ }
141
+ const parent = dirname(dir);
142
+ if (parent === dir) {
143
+ throw new Error(
144
+ "Could not find Veryl.toml in any parent directory. " +
145
+ "Set the projectRoot plugin option explicitly.",
146
+ );
147
+ }
148
+ dir = parent;
149
+ }
132
150
  }
133
151
 
134
152
  /**
135
153
  * Make `absPath` relative to `base`, using forward slashes.
136
154
  */
137
155
  function makeRelative(absPath: string, base: string): string {
138
- // Normalise to forward slashes so the comparison works on Windows
139
- const normAbs = absPath.replace(/\\/g, "/");
140
- const normBase = base.replace(/\\/g, "/").replace(/\/$/, "");
141
- let rel = normAbs;
142
- if (normAbs.startsWith(normBase + "/")) {
143
- rel = normAbs.slice(normBase.length + 1);
144
- } else if (normAbs.startsWith(normBase)) {
145
- rel = normAbs.slice(normBase.length);
146
- }
147
- if (rel.startsWith("/")) {
148
- rel = rel.slice(1);
149
- }
150
- return rel;
156
+ // Normalise to forward slashes so the comparison works on Windows
157
+ const normAbs = absPath.replace(/\\/g, "/");
158
+ const normBase = base.replace(/\\/g, "/").replace(/\/$/, "");
159
+ let rel = normAbs;
160
+ if (normAbs.startsWith(`${normBase}/`)) {
161
+ rel = normAbs.slice(normBase.length + 1);
162
+ } else if (normAbs.startsWith(normBase)) {
163
+ rel = normAbs.slice(normBase.length);
164
+ }
165
+ if (rel.startsWith("/")) {
166
+ rel = rel.slice(1);
167
+ }
168
+ return rel;
151
169
  }
152
170
 
153
171
  /**
154
172
  * Generate an ESM export for a single module.
155
173
  */
156
- function generateEsmExport(mod: GenTsModule, projectPath: string): string {
157
- const portsJson = JSON.stringify(mod.ports, null, 2)
158
- .split("\n")
159
- .map((line, i) => (i === 0 ? line : " " + line))
160
- .join("\n");
161
-
162
- const eventsJson = JSON.stringify(mod.events);
163
-
164
- return `export const ${mod.moduleName} = {
174
+ function generateEsmExport(
175
+ mod: GenTsModule,
176
+ projectPath: string,
177
+ defaultOptions?: Record<string, unknown>,
178
+ ): string {
179
+ const portsJson = JSON.stringify(mod.ports, null, 2)
180
+ .split("\n")
181
+ .map((line, i) => (i === 0 ? line : ` ${line}`))
182
+ .join("\n");
183
+
184
+ const eventsJson = JSON.stringify(mod.events);
185
+
186
+ const defaultOptsLine = defaultOptions
187
+ ? `\n defaultOptions: ${JSON.stringify(defaultOptions)},`
188
+ : "";
189
+
190
+ return `export const ${mod.moduleName} = {
165
191
  __celox_module: true,
166
192
  name: ${JSON.stringify(mod.moduleName)},
167
193
  source: "",
168
194
  projectPath: ${JSON.stringify(projectPath)},
169
195
  ports: ${portsJson},
170
- events: ${eventsJson},
196
+ events: ${eventsJson},${defaultOptsLine}
171
197
  };`;
172
198
  }
package/src/sidecar.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { writeFileSync, mkdirSync, unlinkSync, existsSync } from "node:fs";
2
- import { join, resolve, dirname, relative, isAbsolute } from "node:path";
1
+ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
3
3
  import type { GenTsJsonOutput } from "./types.js";
4
4
 
5
5
  /** Default directory (relative to project root) for generated sidecar files. */
@@ -14,65 +14,65 @@ export const SIDECAR_DIR = ".celox";
14
14
  * `.celox/src/Adder.d.veryl.ts`.
15
15
  */
16
16
  export function generateSidecars(
17
- data: GenTsJsonOutput,
18
- projectRoot: string,
17
+ data: GenTsJsonOutput,
18
+ projectRoot: string,
19
19
  ): string[] {
20
- const written: string[] = [];
21
- const root = resolve(projectRoot);
22
- const outDir = join(root, SIDECAR_DIR);
20
+ const written: string[] = [];
21
+ const root = resolve(projectRoot);
22
+ const outDir = join(root, SIDECAR_DIR);
23
23
 
24
- for (const [sourceFile, moduleNames] of Object.entries(data.fileModules)) {
25
- const verylPath = resolve(projectRoot, sourceFile);
26
- // Skip files that don't exist on disk (e.g. standard library paths
27
- // reported with a stripped leading "/" by celox-gen-ts)
28
- if (!existsSync(verylPath)) continue;
24
+ for (const [sourceFile, moduleNames] of Object.entries(data.fileModules)) {
25
+ const verylPath = resolve(projectRoot, sourceFile);
26
+ // Skip files that don't exist on disk (e.g. standard library paths
27
+ // reported with a stripped leading "/" by celox-gen-ts)
28
+ if (!existsSync(verylPath)) continue;
29
29
 
30
- const rel = relative(root, verylPath);
31
- // Skip files outside the project root (e.g. standard library from global
32
- // cache). On Windows, relative() across different drives returns an
33
- // absolute path; on all platforms, paths outside root start with "..".
34
- if (isAbsolute(rel) || rel.startsWith("..")) continue;
35
- const sidecarPath = sidecarPathFor(join(outDir, rel));
30
+ const rel = relative(root, verylPath);
31
+ // Skip files outside the project root (e.g. standard library from global
32
+ // cache). On Windows, relative() across different drives returns an
33
+ // absolute path; on all platforms, paths outside root start with "..".
34
+ if (isAbsolute(rel) || rel.startsWith("..")) continue;
35
+ const sidecarPath = sidecarPathFor(join(outDir, rel));
36
36
 
37
- const modules = moduleNames
38
- .map((name) => data.modules.find((m) => m.moduleName === name))
39
- .filter((m) => m !== undefined);
37
+ const modules = moduleNames
38
+ .map((name) => data.modules.find((m) => m.moduleName === name))
39
+ .filter((m) => m !== undefined);
40
40
 
41
- if (modules.length === 0) continue;
41
+ if (modules.length === 0) continue;
42
42
 
43
- // Combine dtsContent from all modules in this file
44
- // Each module's dtsContent already contains the import and interface
45
- const content = modules.map((m) => m.dtsContent).join("\n");
43
+ // Combine dtsContent from all modules in this file
44
+ // Each module's dtsContent already contains the import and interface
45
+ const content = modules.map((m) => m.dtsContent).join("\n");
46
46
 
47
- mkdirSync(dirname(sidecarPath), { recursive: true });
48
- writeFileSync(sidecarPath, content, "utf-8");
49
- written.push(sidecarPath);
50
- }
47
+ mkdirSync(dirname(sidecarPath), { recursive: true });
48
+ writeFileSync(sidecarPath, content, "utf-8");
49
+ written.push(sidecarPath);
50
+ }
51
51
 
52
- return written;
52
+ return written;
53
53
  }
54
54
 
55
55
  /**
56
56
  * Remove all sidecar files that were previously generated.
57
57
  */
58
58
  export function cleanSidecars(paths: string[]): void {
59
- for (const p of paths) {
60
- try {
61
- if (existsSync(p)) {
62
- unlinkSync(p);
63
- }
64
- } catch {
65
- // ignore cleanup errors
66
- }
67
- }
59
+ for (const p of paths) {
60
+ try {
61
+ if (existsSync(p)) {
62
+ unlinkSync(p);
63
+ }
64
+ } catch {
65
+ // ignore cleanup errors
66
+ }
67
+ }
68
68
  }
69
69
 
70
70
  /**
71
71
  * Given `/path/to/.celox/src/Adder.veryl`, returns `/path/to/.celox/src/Adder.d.veryl.ts`.
72
72
  */
73
73
  function sidecarPathFor(verylPath: string): string {
74
- const dir = dirname(verylPath);
75
- const base = verylPath.slice(dir.length + 1); // "Adder.veryl"
76
- const stem = base.replace(/\.veryl$/, "");
77
- return join(dir, `${stem}.d.veryl.ts`);
74
+ const dir = dirname(verylPath);
75
+ const base = verylPath.slice(dir.length + 1); // "Adder.veryl"
76
+ const stem = base.replace(/\.veryl$/, "");
77
+ return join(dir, `${stem}.d.veryl.ts`);
78
78
  }
package/src/types.ts CHANGED
@@ -1,30 +1,30 @@
1
1
  /** JSON output from `celox-gen-ts --json`. */
2
2
  export interface GenTsJsonOutput {
3
- readonly projectPath: string;
4
- readonly modules: readonly GenTsModule[];
5
- readonly fileModules: Record<string, readonly string[]>;
3
+ readonly projectPath: string;
4
+ readonly modules: readonly GenTsModule[];
5
+ readonly fileModules: Record<string, readonly string[]>;
6
6
  }
7
7
 
8
8
  /** Per-module entry from `celox-gen-ts --json`. */
9
9
  export interface GenTsModule {
10
- readonly moduleName: string;
11
- readonly sourceFile: string;
12
- readonly dtsContent: string;
13
- readonly mdContent: string;
14
- readonly ports: Record<string, GenTsPortInfo>;
15
- readonly events: readonly string[];
10
+ readonly moduleName: string;
11
+ readonly sourceFile: string;
12
+ readonly dtsContent: string;
13
+ readonly mdContent: string;
14
+ readonly ports: Record<string, GenTsPortInfo>;
15
+ readonly events: readonly string[];
16
16
  }
17
17
 
18
18
  /** Port metadata from the generator. */
19
19
  export interface GenTsPortInfo {
20
- readonly direction: "input" | "output" | "inout";
21
- readonly type: "clock" | "reset" | "logic" | "bit";
22
- readonly width: number;
23
- readonly is4state: boolean;
20
+ readonly direction: "input" | "output" | "inout";
21
+ readonly type: "clock" | "reset" | "logic" | "bit";
22
+ readonly width: number;
23
+ readonly is4state: boolean;
24
24
  }
25
25
 
26
26
  /** Plugin options. */
27
27
  export interface CeloxPluginOptions {
28
- /** Explicit path to the Veryl project root (directory containing Veryl.toml). */
29
- projectRoot?: string;
28
+ /** Explicit path to the Veryl project root (directory containing Veryl.toml). */
29
+ projectRoot?: string;
30
30
  }