@spine-event-engine/proto-tools 2.0.0-snapshot.2
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.
- package/LICENSE +201 -0
- package/README.md +102 -0
- package/REFERENCE.md +80 -0
- package/bin/spine-proto.mjs +2 -0
- package/dist/src/cli/spine-proto-bootstrap.d.ts +4 -0
- package/dist/src/cli/spine-proto-bootstrap.d.ts.map +1 -0
- package/dist/src/cli/spine-proto-bootstrap.js +52 -0
- package/dist/src/cli/spine-proto-bootstrap.js.map +1 -0
- package/dist/src/cli/spine-proto.d.ts +3 -0
- package/dist/src/cli/spine-proto.d.ts.map +1 -0
- package/dist/src/cli/spine-proto.js +32 -0
- package/dist/src/cli/spine-proto.js.map +1 -0
- package/dist/src/generation/authored-interface-provider.d.ts +28 -0
- package/dist/src/generation/authored-interface-provider.d.ts.map +1 -0
- package/dist/src/generation/authored-interface-provider.js +244 -0
- package/dist/src/generation/authored-interface-provider.js.map +1 -0
- package/dist/src/generation/generated-source-policy.d.ts +21 -0
- package/dist/src/generation/generated-source-policy.d.ts.map +1 -0
- package/dist/src/generation/generated-source-policy.js +126 -0
- package/dist/src/generation/generated-source-policy.js.map +1 -0
- package/dist/src/generation/generation-reuse.mjs +84 -0
- package/dist/src/generation/generator.d.ts +195 -0
- package/dist/src/generation/generator.d.ts.map +1 -0
- package/dist/src/generation/generator.js +566 -0
- package/dist/src/generation/generator.js.map +1 -0
- package/dist/src/generation/handler-generator.d.ts +7 -0
- package/dist/src/generation/handler-generator.d.ts.map +1 -0
- package/dist/src/generation/handler-generator.js +55 -0
- package/dist/src/generation/handler-generator.js.map +1 -0
- package/dist/src/generation/interface-generator.d.ts +21 -0
- package/dist/src/generation/interface-generator.d.ts.map +1 -0
- package/dist/src/generation/interface-generator.js +277 -0
- package/dist/src/generation/interface-generator.js.map +1 -0
- package/dist/src/generation/interface-provider.d.ts +30 -0
- package/dist/src/generation/interface-provider.d.ts.map +1 -0
- package/dist/src/generation/interface-provider.js +15 -0
- package/dist/src/generation/interface-provider.js.map +1 -0
- package/dist/src/generation/rejection-generator.d.ts +9 -0
- package/dist/src/generation/rejection-generator.d.ts.map +1 -0
- package/dist/src/generation/rejection-generator.js +62 -0
- package/dist/src/generation/rejection-generator.js.map +1 -0
- package/dist/src/generation/source-view.d.ts +103 -0
- package/dist/src/generation/source-view.d.ts.map +1 -0
- package/dist/src/generation/source-view.js +298 -0
- package/dist/src/generation/source-view.js.map +1 -0
- package/dist/src/index.d.ts +139 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +546 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/io/atomic-manifest.d.ts +32 -0
- package/dist/src/io/atomic-manifest.d.ts.map +1 -0
- package/dist/src/io/atomic-manifest.js +56 -0
- package/dist/src/io/atomic-manifest.js.map +1 -0
- package/dist/src/io/manifest-reader.d.ts +8 -0
- package/dist/src/io/manifest-reader.d.ts.map +1 -0
- package/dist/src/io/manifest-reader.js +19 -0
- package/dist/src/io/manifest-reader.js.map +1 -0
- package/dist/src/model/model-graph.d.ts +68 -0
- package/dist/src/model/model-graph.d.ts.map +1 -0
- package/dist/src/model/model-graph.js +220 -0
- package/dist/src/model/model-graph.js.map +1 -0
- package/dist/src/model/npm-package-name.d.ts +7 -0
- package/dist/src/model/npm-package-name.d.ts.map +1 -0
- package/dist/src/model/npm-package-name.js +33 -0
- package/dist/src/model/npm-package-name.js.map +1 -0
- package/dist/src/model/registry-dependency.d.ts +10 -0
- package/dist/src/model/registry-dependency.d.ts.map +1 -0
- package/dist/src/model/registry-dependency.js +66 -0
- package/dist/src/model/registry-dependency.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +51 -0
- package/scripts/clean-dist.mjs +7 -0
- package/scripts/copy-runtime-modules.mjs +23 -0
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
import { closeSync, copyFileSync, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readdirSync, renameSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
15
|
+
import { constants } from "node:fs";
|
|
16
|
+
import { createRequire } from "node:module";
|
|
17
|
+
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
import { spawnSync } from "node:child_process";
|
|
20
|
+
import { ProtoConfig, ProtoManifest } from "../index.js";
|
|
21
|
+
import { generationMarkerFile, reusableGenerationId } from "./generation-reuse.mjs";
|
|
22
|
+
import { readManifestAt } from "../io/manifest-reader.js";
|
|
23
|
+
import { ModelGraph } from "../model/model-graph.js";
|
|
24
|
+
import { ManifestFile } from "../io/atomic-manifest.js";
|
|
25
|
+
import { generatedSource, normalizeGeneratedTree } from "./generated-source-policy.js";
|
|
26
|
+
import { assertSourceViewCurrent, modelSourceView, writeViewRecord } from "./source-view.js";
|
|
27
|
+
const bufTimeoutMs = 300_000;
|
|
28
|
+
const bufMaxBuffer = 1_048_576;
|
|
29
|
+
function snapshotRegularClaim(path) {
|
|
30
|
+
let descriptor;
|
|
31
|
+
try {
|
|
32
|
+
descriptor = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new Error("generation claim is not a regular file");
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const stats = fstatSync(descriptor);
|
|
39
|
+
if (!stats.isFile())
|
|
40
|
+
throw new Error("generation claim is not a regular file");
|
|
41
|
+
return {
|
|
42
|
+
content: readFileSync(descriptor, "utf8"),
|
|
43
|
+
identity: `${String(stats.dev)}:${String(stats.ino)}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
closeSync(descriptor);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function readRegularClaim(path) {
|
|
51
|
+
return snapshotRegularClaim(path).content;
|
|
52
|
+
}
|
|
53
|
+
function claimQuarantine(path) {
|
|
54
|
+
return join(dirname(path), `${basename(path)}.quarantine-${crypto.randomUUID()}`);
|
|
55
|
+
}
|
|
56
|
+
const defaultLockOperations = {
|
|
57
|
+
create: (path, content) => {
|
|
58
|
+
writeFileSync(path, content, { flag: "wx" });
|
|
59
|
+
},
|
|
60
|
+
list: (directory) => readdirSync(directory),
|
|
61
|
+
read: readRegularClaim,
|
|
62
|
+
snapshot: snapshotRegularClaim,
|
|
63
|
+
inspect: (path) => {
|
|
64
|
+
const entry = lstatSync(path);
|
|
65
|
+
if (entry.isSymbolicLink())
|
|
66
|
+
return "symlink";
|
|
67
|
+
return entry.isFile() ? "regular" : "other";
|
|
68
|
+
},
|
|
69
|
+
remove: (path) => {
|
|
70
|
+
unlinkSync(path);
|
|
71
|
+
},
|
|
72
|
+
move: renameSync,
|
|
73
|
+
liveness: (pid) => protoGeneration.claimLiveness(pid),
|
|
74
|
+
};
|
|
75
|
+
function completeLockOperations(operations) {
|
|
76
|
+
return { ...defaultLockOperations, ...operations };
|
|
77
|
+
}
|
|
78
|
+
function removeSnapshotClaim(operations, path, snapshot) {
|
|
79
|
+
const retired = claimQuarantine(path);
|
|
80
|
+
operations.move(path, retired);
|
|
81
|
+
const retiredSnapshot = operations.snapshot(retired);
|
|
82
|
+
if (retiredSnapshot.identity !== snapshot.identity)
|
|
83
|
+
throw new Error("generation claim ownership changed");
|
|
84
|
+
operations.remove(retired);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Reports Proto artifact generation failures.
|
|
88
|
+
*/
|
|
89
|
+
const ProtoGenerationErrors = Object.freeze({
|
|
90
|
+
fail(owner, message) {
|
|
91
|
+
throw new Error(`spine-proto: ${owner}: ${message}`);
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Generates and composes deterministic Protobuf package artifacts.
|
|
96
|
+
*/
|
|
97
|
+
const protoGeneration = Object.freeze({
|
|
98
|
+
// prettier-ignore
|
|
99
|
+
/**
|
|
100
|
+
* Builds a model package's owned Protobuf-ES sources and module descriptor.
|
|
101
|
+
*
|
|
102
|
+
* @param packageRoot The root of the model package to generate.
|
|
103
|
+
* @param operations Optional bounded filesystem and process seams for tests.
|
|
104
|
+
*/
|
|
105
|
+
generate(packageRoot, operations = {}) {
|
|
106
|
+
const config = ProtoConfig.read(packageRoot);
|
|
107
|
+
if (config.mode !== "model")
|
|
108
|
+
ProtoGenerationErrors.fail(packageRoot, "generate requires model mode");
|
|
109
|
+
const lock = protoGeneration.acquireLock(packageRoot, config.packageName, operations.lockOperations);
|
|
110
|
+
let primaryError;
|
|
111
|
+
try {
|
|
112
|
+
let generationId = crypto.randomUUID();
|
|
113
|
+
let manifest = ProtoManifest.create(packageRoot, undefined, generationId);
|
|
114
|
+
const graph = ModelGraph.resolve(packageRoot, config.dependencies);
|
|
115
|
+
const target = join(packageRoot, config.generatedRoot);
|
|
116
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
117
|
+
const stage = mkdtempSync(join(dirname(target), `.${basename(target)}.stage-`));
|
|
118
|
+
const moduleRoot = join(stage, "module");
|
|
119
|
+
const output = join(moduleRoot, "output");
|
|
120
|
+
try {
|
|
121
|
+
const sourceView = modelSourceView(operations.livePackageRoot ?? packageRoot, config.generatedRoot, output);
|
|
122
|
+
protoGeneration.copyOwnedSources(packageRoot, config.protoRoot, moduleRoot, manifest.protoFiles);
|
|
123
|
+
for (const model of graph.models)
|
|
124
|
+
protoGeneration.copyDependencySources(model, moduleRoot);
|
|
125
|
+
(operations.runBuf ?? protoGeneration.runBuf)(moduleRoot, output, manifest.protoFiles, config.packageName, operations.runProcess);
|
|
126
|
+
const runInterfacePhase = operations.runInterfacePhase ??
|
|
127
|
+
(operations.runBuf === undefined ? protoGeneration.runInterfacePhase : () => undefined);
|
|
128
|
+
runInterfacePhase(moduleRoot, output, manifest.protoFiles, config.packageName, sourceView, operations.runProcess);
|
|
129
|
+
protoGeneration.assertRejectionRuntimeDependency(packageRoot, config.packageName, output);
|
|
130
|
+
(operations.rewriteImports ?? protoGeneration.rewriteDependencyImports)(output, graph.protoOwners, config.packageName, new Set(config.dependencies));
|
|
131
|
+
(operations.writeModule ?? protoGeneration.writeModule)(output, config.moduleExport, config.packageName, graph.models.filter((model) => config.dependencies.includes(model.name)));
|
|
132
|
+
normalizeGeneratedTree(output, manifest.protoFiles);
|
|
133
|
+
writeFileSync(join(output, generationMarkerFile), `${JSON.stringify({ generationId })}\n`, "utf8");
|
|
134
|
+
const reusedGenerationId = protoGeneration.reusableGenerationId(packageRoot, target, output, manifest);
|
|
135
|
+
if (reusedGenerationId !== undefined) {
|
|
136
|
+
generationId = reusedGenerationId;
|
|
137
|
+
manifest = ProtoManifest.create(packageRoot, undefined, generationId);
|
|
138
|
+
writeFileSync(join(output, generationMarkerFile), `${JSON.stringify({ generationId })}\n`, "utf8");
|
|
139
|
+
}
|
|
140
|
+
assertSourceViewCurrent(sourceView);
|
|
141
|
+
if (operations.livePackageRoot !== undefined)
|
|
142
|
+
writeViewRecord(packageRoot, sourceView);
|
|
143
|
+
protoGeneration.publish(packageRoot, config.generatedRoot, output, manifest, operations.rename, operations.manifestOperations);
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
rmSync(stage, { recursive: true, force: true });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
primaryError = error;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
protoGeneration.releaseLock(lock, config.packageName, operations.lockOperations);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
if (primaryError === undefined)
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
if (primaryError !== undefined) {
|
|
160
|
+
if (primaryError instanceof Error)
|
|
161
|
+
throw primaryError;
|
|
162
|
+
throw new Error(`spine-proto: ${config.packageName}: generation failed`, {
|
|
163
|
+
cause: primaryError,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
acquireLock(packageRoot, packageName, operations = {}) {
|
|
168
|
+
const token = crypto.randomUUID();
|
|
169
|
+
const lock = join(packageRoot, `.spine-proto-generate.lock.${token}`);
|
|
170
|
+
const lockOperations = completeLockOperations(operations);
|
|
171
|
+
try {
|
|
172
|
+
lockOperations.create(lock, JSON.stringify({ pid: process.pid, token }));
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
ProtoGenerationErrors.fail(packageName, "cannot acquire generation claim");
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
for (let scan = 0; scan < 2; scan += 1) {
|
|
179
|
+
const claims = lockOperations
|
|
180
|
+
.list(packageRoot)
|
|
181
|
+
.filter((name) => name.startsWith(".spine-proto-generate.lock."))
|
|
182
|
+
.sort();
|
|
183
|
+
if (claims.length > 1000)
|
|
184
|
+
ProtoGenerationErrors.fail(packageName, "generation claim count exceeds 1000");
|
|
185
|
+
for (const name of claims) {
|
|
186
|
+
const path = join(packageRoot, name);
|
|
187
|
+
if (path === lock)
|
|
188
|
+
continue;
|
|
189
|
+
const quarantine = claimQuarantine(path);
|
|
190
|
+
try {
|
|
191
|
+
lockOperations.move(path, quarantine);
|
|
192
|
+
const snapshot = lockOperations.snapshot(quarantine);
|
|
193
|
+
const owner = JSON.parse(snapshot.content);
|
|
194
|
+
if (typeof owner.pid !== "number" || owner.pid <= 0)
|
|
195
|
+
throw new Error();
|
|
196
|
+
if (lockOperations.liveness(owner.pid) !== "dead")
|
|
197
|
+
ProtoGenerationErrors.fail(packageName, "generation already in progress for this package");
|
|
198
|
+
removeSnapshotClaim(lockOperations, quarantine, snapshot);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
if (error instanceof Error && error.message.startsWith("spine-proto:"))
|
|
202
|
+
throw error;
|
|
203
|
+
if (error instanceof Error &&
|
|
204
|
+
error.message === "generation claim is not a regular file")
|
|
205
|
+
ProtoGenerationErrors.fail(packageName, error.message);
|
|
206
|
+
ProtoGenerationErrors.fail(packageName, "generation claim has invalid owner metadata");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
try {
|
|
213
|
+
protoGeneration.releaseLock({ path: lock, token }, packageName, lockOperations);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Preserve the primary claim-admission failure.
|
|
217
|
+
}
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
return { path: lock, token };
|
|
221
|
+
},
|
|
222
|
+
releaseLock(lock, packageName, operations = {}) {
|
|
223
|
+
const lockOperations = completeLockOperations(operations);
|
|
224
|
+
const quarantine = claimQuarantine(lock.path);
|
|
225
|
+
try {
|
|
226
|
+
lockOperations.move(lock.path, quarantine);
|
|
227
|
+
const snapshot = lockOperations.snapshot(quarantine);
|
|
228
|
+
const owner = JSON.parse(snapshot.content);
|
|
229
|
+
if (owner.token !== lock.token)
|
|
230
|
+
ProtoGenerationErrors.fail(packageName, "generation lock ownership changed");
|
|
231
|
+
removeSnapshotClaim(lockOperations, quarantine, snapshot);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
ProtoGenerationErrors.fail(packageName, "cannot clean up generation lock");
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
/**
|
|
238
|
+
* Returns a signal-zero probe result without treating unknown process errors as death.
|
|
239
|
+
*
|
|
240
|
+
* @param pid The process identifier to probe.
|
|
241
|
+
* @param probe The signal-zero probe to run.
|
|
242
|
+
* @returns Whether the claim owner is alive, dead, or indeterminate.
|
|
243
|
+
*/
|
|
244
|
+
claimLiveness(pid, probe = (candidate) => process.kill(candidate, 0)) {
|
|
245
|
+
try {
|
|
246
|
+
probe(pid);
|
|
247
|
+
return "alive";
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
if (error.code === "ESRCH")
|
|
251
|
+
return "dead";
|
|
252
|
+
return "indeterminate";
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
/**
|
|
256
|
+
* Writes the explicit, deterministic application model registry.
|
|
257
|
+
*
|
|
258
|
+
* @param packageRoot The root of the application package to compose.
|
|
259
|
+
* @param operations Optional bounded manifest publication seams for tests.
|
|
260
|
+
*/
|
|
261
|
+
compose(packageRoot, operations = {}) {
|
|
262
|
+
const config = ProtoConfig.read(packageRoot);
|
|
263
|
+
if (config.mode !== "application")
|
|
264
|
+
ProtoGenerationErrors.fail(packageRoot, "compose requires application mode");
|
|
265
|
+
const imports = ModelGraph.resolve(packageRoot, config.modelPackages)
|
|
266
|
+
.models.filter((model) => config.modelPackages.includes(model.name))
|
|
267
|
+
.slice()
|
|
268
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
269
|
+
const aliases = imports.map((_, index) => `model${String(index)}`);
|
|
270
|
+
const sources = imports.flatMap((model) => ProtoManifest.read(model.root).protoFiles);
|
|
271
|
+
const source = generatedSource([
|
|
272
|
+
'import { TypeRegistry } from "@spine-event-engine/core";',
|
|
273
|
+
...imports.map((model, index) => `import { ${model.moduleExport} as ${aliases[index] ?? "model"} } from ${JSON.stringify(model.name)};`),
|
|
274
|
+
"",
|
|
275
|
+
"/**",
|
|
276
|
+
" * The application type registry composed from every declared model package.",
|
|
277
|
+
" */",
|
|
278
|
+
`export const typeRegistry: TypeRegistry = TypeRegistry.from(${aliases.join(", ")});`,
|
|
279
|
+
"",
|
|
280
|
+
].join("\n"), sources);
|
|
281
|
+
const target = join(packageRoot, config.registryOutput);
|
|
282
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
283
|
+
ManifestFile.writeAtomically(target, source, operations.registryOperations);
|
|
284
|
+
},
|
|
285
|
+
copyOwnedSources(packageRoot, protoRoot, destination, protoFiles) {
|
|
286
|
+
for (const protoFile of protoFiles) {
|
|
287
|
+
const source = join(packageRoot, protoRoot, protoFile);
|
|
288
|
+
protoGeneration.assertRegularFile(source, packageRoot);
|
|
289
|
+
const target = join(destination, protoFile);
|
|
290
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
291
|
+
copyFileSync(source, target);
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
assertRejectionRuntimeDependency(packageRoot, packageName, output) {
|
|
295
|
+
if (!protoGeneration.files(output).some((file) => file.endsWith("rejections.ts")))
|
|
296
|
+
return;
|
|
297
|
+
let dependencies;
|
|
298
|
+
try {
|
|
299
|
+
const packageJson = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
|
|
300
|
+
dependencies =
|
|
301
|
+
packageJson !== null && typeof packageJson === "object"
|
|
302
|
+
? packageJson.dependencies
|
|
303
|
+
: undefined;
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
ProtoGenerationErrors.fail(packageName, "cannot read package runtime dependencies");
|
|
307
|
+
}
|
|
308
|
+
if (dependencies === null ||
|
|
309
|
+
typeof dependencies !== "object" ||
|
|
310
|
+
typeof dependencies["@spine-event-engine/core"] !== "string")
|
|
311
|
+
ProtoGenerationErrors.fail(packageName, "rejection generation requires direct runtime dependency @spine-event-engine/core");
|
|
312
|
+
},
|
|
313
|
+
copyDependencySources(model, destination) {
|
|
314
|
+
const manifestPath = protoGeneration.resolveExportedManifest(model.root, model.name);
|
|
315
|
+
for (const protoPath of readManifestAt(model.root, manifestPath).protoFiles) {
|
|
316
|
+
const source = protoGeneration.resolveExportedProto(model.root, model.name, protoPath);
|
|
317
|
+
const target = join(destination, protoPath);
|
|
318
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
319
|
+
protoGeneration.assertRegularFile(source, model.name);
|
|
320
|
+
copyFileSync(source, target);
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
resolveExportedManifest(packageRoot, packageName) {
|
|
324
|
+
try {
|
|
325
|
+
return createRequire(join(packageRoot, "package.json")).resolve(`${packageName}/spine-proto-manifest.json`);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return ProtoGenerationErrors.fail(packageName, "cannot resolve exported manifest");
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
resolveExportedProto(requesterRoot, packageName, protoPath) {
|
|
332
|
+
try {
|
|
333
|
+
return createRequire(join(requesterRoot, "package.json")).resolve(`${packageName}/proto/${protoPath}`);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
return ProtoGenerationErrors.fail(packageName, `cannot resolve exported Proto source ${protoPath}`);
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
assertRegularFile(path, owner) {
|
|
340
|
+
try {
|
|
341
|
+
const entry = lstatSync(path);
|
|
342
|
+
if (entry.isSymbolicLink() || !entry.isFile())
|
|
343
|
+
throw new Error();
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
ProtoGenerationErrors.fail(owner, "exported Proto source is missing or unsafe");
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
runBuf(moduleRoot, output, owned, packageName, runner = (command, arguments_, options) => spawnSync(command, arguments_, options)) {
|
|
350
|
+
const protocGenEs = protoGeneration.resolveTool("@bufbuild/protoc-gen-es/bin/protoc-gen-es");
|
|
351
|
+
const rejectionGenerator = fileURLToPath(new URL(import.meta.url.endsWith(".ts") ? "./rejection-generator.ts" : "./rejection-generator.js", import.meta.url));
|
|
352
|
+
writeFileSync(join(moduleRoot, "buf.yaml"), "version: v2\nmodules:\n - path: .\n", "utf8");
|
|
353
|
+
writeFileSync(join(moduleRoot, "buf.gen.yaml"), [
|
|
354
|
+
"version: v2",
|
|
355
|
+
"plugins:",
|
|
356
|
+
` - local: ${protocGenEs}`,
|
|
357
|
+
" out: output",
|
|
358
|
+
" opt:",
|
|
359
|
+
" - target=ts",
|
|
360
|
+
" - import_extension=js",
|
|
361
|
+
" - local:",
|
|
362
|
+
` - ${process.execPath}`,
|
|
363
|
+
` - ${rejectionGenerator}`,
|
|
364
|
+
" out: output",
|
|
365
|
+
" opt:",
|
|
366
|
+
" - target=ts",
|
|
367
|
+
" - import_extension=js",
|
|
368
|
+
"",
|
|
369
|
+
].join("\n"), "utf8");
|
|
370
|
+
const buf = protoGeneration.resolveTool("@bufbuild/buf/bin/buf");
|
|
371
|
+
const generated = runner(buf, ["generate", "--template", "buf.gen.yaml", ...owned.flatMap((file) => ["--path", file])], {
|
|
372
|
+
cwd: moduleRoot,
|
|
373
|
+
encoding: "utf8",
|
|
374
|
+
timeout: bufTimeoutMs,
|
|
375
|
+
maxBuffer: bufMaxBuffer,
|
|
376
|
+
});
|
|
377
|
+
protoGeneration.assertBufResult(packageName, "generation", generated);
|
|
378
|
+
const built = runner(buf, ["build", "--as-file-descriptor-set", "-o", "descriptor.bin"], {
|
|
379
|
+
cwd: moduleRoot,
|
|
380
|
+
encoding: "utf8",
|
|
381
|
+
timeout: bufTimeoutMs,
|
|
382
|
+
maxBuffer: bufMaxBuffer,
|
|
383
|
+
});
|
|
384
|
+
protoGeneration.assertBufResult(packageName, "validation", built);
|
|
385
|
+
if (!existsSync(output))
|
|
386
|
+
ProtoGenerationErrors.fail(packageName, "Buf generated no owned output");
|
|
387
|
+
},
|
|
388
|
+
runInterfacePhase(moduleRoot, output, owned, packageName, sourceView, runner = (command, arguments_, options) => spawnSync(command, arguments_, options)) {
|
|
389
|
+
writeFileSync(join(moduleRoot, ".spine-source-view.json"), `${JSON.stringify(sourceView)}\n`, "utf8");
|
|
390
|
+
const interfaceGenerator = fileURLToPath(new URL(import.meta.url.endsWith(".ts") ? "./interface-generator.ts" : "./interface-generator.js", import.meta.url));
|
|
391
|
+
writeFileSync(join(moduleRoot, "buf.interfaces.gen.yaml"), [
|
|
392
|
+
"version: v2",
|
|
393
|
+
"plugins:",
|
|
394
|
+
" - local:",
|
|
395
|
+
` - ${process.execPath}`,
|
|
396
|
+
` - ${interfaceGenerator}`,
|
|
397
|
+
" out: output",
|
|
398
|
+
" opt:",
|
|
399
|
+
" - target=ts",
|
|
400
|
+
" - import_extension=js",
|
|
401
|
+
"",
|
|
402
|
+
].join("\n"), "utf8");
|
|
403
|
+
const buf = protoGeneration.resolveTool("@bufbuild/buf/bin/buf");
|
|
404
|
+
const generated = runner(buf, [
|
|
405
|
+
"generate",
|
|
406
|
+
"--template",
|
|
407
|
+
"buf.interfaces.gen.yaml",
|
|
408
|
+
...owned.flatMap((file) => ["--path", file]),
|
|
409
|
+
], { cwd: moduleRoot, encoding: "utf8", timeout: bufTimeoutMs, maxBuffer: bufMaxBuffer });
|
|
410
|
+
protoGeneration.assertBufResult(packageName, "interface generation", generated);
|
|
411
|
+
},
|
|
412
|
+
assertBufResult(packageName, phase, result) {
|
|
413
|
+
if (result.error !== undefined) {
|
|
414
|
+
if (result.error.code === "ETIMEDOUT")
|
|
415
|
+
ProtoGenerationErrors.fail(packageName, `Buf ${phase} timed out`);
|
|
416
|
+
ProtoGenerationErrors.fail(packageName, `Buf ${phase} could not start: ${result.error.message}`);
|
|
417
|
+
}
|
|
418
|
+
if (result.signal !== null)
|
|
419
|
+
ProtoGenerationErrors.fail(packageName, `Buf ${phase} ended by signal ${result.signal}`);
|
|
420
|
+
if (result.status === null)
|
|
421
|
+
ProtoGenerationErrors.fail(packageName, `Buf ${phase} ended without an exit status`);
|
|
422
|
+
if (result.status !== 0)
|
|
423
|
+
ProtoGenerationErrors.fail(packageName, `Buf ${phase} failed: ${(result.stderr || result.stdout).trim()}`);
|
|
424
|
+
},
|
|
425
|
+
resolveTool(specifier) {
|
|
426
|
+
try {
|
|
427
|
+
return createRequire(import.meta.url).resolve(specifier);
|
|
428
|
+
}
|
|
429
|
+
catch {
|
|
430
|
+
return ProtoGenerationErrors.fail("@spine-event-engine/proto-tools", `cannot resolve packaged executable ${specifier}`);
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
rewriteDependencyImports(output, owners, currentPackage, directDependencies) {
|
|
434
|
+
for (const file of protoGeneration.files(output)) {
|
|
435
|
+
if (!file.endsWith(".ts"))
|
|
436
|
+
continue;
|
|
437
|
+
const rewritten = readFileSync(file, "utf8").replaceAll(/from "(\.\.?\/[^" ]+_pb\.js)"/g, (whole, specifier) => {
|
|
438
|
+
const proto = relative(output, resolve(dirname(file), specifier))
|
|
439
|
+
.replace(/_pb\.js$/, ".proto")
|
|
440
|
+
.replaceAll("\\", "/");
|
|
441
|
+
const owner = owners[proto];
|
|
442
|
+
if (owner === undefined)
|
|
443
|
+
return whole;
|
|
444
|
+
if (owner.packageName === currentPackage)
|
|
445
|
+
return whole;
|
|
446
|
+
if (!directDependencies.has(owner.packageName))
|
|
447
|
+
ProtoGenerationErrors.fail(currentPackage, `generated import ${proto} is owned by transitive dependency ${owner.packageName}`);
|
|
448
|
+
if (owner.generatedExport.length === 0)
|
|
449
|
+
ProtoGenerationErrors.fail(currentPackage, `unmapped generated import ${proto}`);
|
|
450
|
+
return `from ${JSON.stringify(`${owner.packageName}/${owner.generatedExport}`)}`;
|
|
451
|
+
});
|
|
452
|
+
writeFileSync(file, rewritten, "utf8");
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
writeModule(output, exportName, packageName, dependencies) {
|
|
456
|
+
const generated = protoGeneration
|
|
457
|
+
.files(output)
|
|
458
|
+
.filter((file) => file.endsWith("_pb.ts"))
|
|
459
|
+
.sort()
|
|
460
|
+
.map((file, index) => ({
|
|
461
|
+
alias: `schemas${String(index)}`,
|
|
462
|
+
path: `./${relative(output, file).replaceAll("\\", "/").replace(/\.ts$/, ".js")}`,
|
|
463
|
+
}));
|
|
464
|
+
const dependencyImports = dependencies
|
|
465
|
+
.slice()
|
|
466
|
+
.sort((left, right) => left.name.localeCompare(right.name))
|
|
467
|
+
.map((dependency, index) => ({ ...dependency, alias: `dependency${String(index)}` }));
|
|
468
|
+
const sources = generated.map(({ path }) => path.replace(/^\.\//u, "").replace(/_pb\.js$/u, ".proto"));
|
|
469
|
+
const source = generatedSource([
|
|
470
|
+
'import type { ProtoModule } from "@spine-event-engine/proto";',
|
|
471
|
+
'import type { Message } from "@bufbuild/protobuf";',
|
|
472
|
+
'import type { GenMessage } from "@bufbuild/protobuf/codegenv2";',
|
|
473
|
+
...generated.map(({ alias, path }) => `import * as ${alias} from ${JSON.stringify(path)};`),
|
|
474
|
+
...dependencyImports.map(({ name, moduleExport, alias }) => `import { ${moduleExport} as ${alias} } from ${JSON.stringify(name)};`),
|
|
475
|
+
"",
|
|
476
|
+
"const schemas = Object.freeze([",
|
|
477
|
+
...generated.map(({ alias }) => [
|
|
478
|
+
` ...Object.values(${alias})`,
|
|
479
|
+
' .filter((value) => typeof value === "object" && value !== null &&',
|
|
480
|
+
' (value as { kind?: unknown }).kind === "message")',
|
|
481
|
+
" .map((value) => value as unknown as GenMessage<Message>),",
|
|
482
|
+
].join("\n")),
|
|
483
|
+
"].sort((left, right) =>",
|
|
484
|
+
" (left as { typeName: string }).typeName.localeCompare(",
|
|
485
|
+
" (right as { typeName: string }).typeName,",
|
|
486
|
+
" ),",
|
|
487
|
+
"));",
|
|
488
|
+
"",
|
|
489
|
+
`/** All Protobuf message schemas owned by \`${packageName}\`. */`,
|
|
490
|
+
`export const ${exportName}: ProtoModule = Object.freeze({`,
|
|
491
|
+
` name: ${JSON.stringify(packageName)},`,
|
|
492
|
+
" schemas,",
|
|
493
|
+
` dependencies: Object.freeze([${dependencyImports.map(({ alias }) => alias).join(", ")}]),`,
|
|
494
|
+
"});",
|
|
495
|
+
"",
|
|
496
|
+
].join("\n"), sources);
|
|
497
|
+
writeFileSync(join(output, "proto-module.ts"), source, "utf8");
|
|
498
|
+
},
|
|
499
|
+
publish(packageRoot, generatedRoot, output, manifest, onRename = renameSync, manifestOperations = {}) {
|
|
500
|
+
const target = join(packageRoot, generatedRoot);
|
|
501
|
+
const backup = join(dirname(target), `.${basename(target)}.${crypto.randomUUID()}.backup`);
|
|
502
|
+
const manifestTarget = join(packageRoot, "spine-proto-manifest.json");
|
|
503
|
+
const oldManifest = existsSync(manifestTarget)
|
|
504
|
+
? readFileSync(manifestTarget, "utf8")
|
|
505
|
+
: undefined;
|
|
506
|
+
let outputPublished = false;
|
|
507
|
+
try {
|
|
508
|
+
if (existsSync(target))
|
|
509
|
+
onRename(target, backup);
|
|
510
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
511
|
+
onRename(output, target);
|
|
512
|
+
outputPublished = true;
|
|
513
|
+
ManifestFile.writeAtomically(manifestTarget, `${JSON.stringify(manifest, null, 2)}\n`, manifestOperations);
|
|
514
|
+
rmSync(backup, { recursive: true, force: true });
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
if (outputPublished)
|
|
518
|
+
rmSync(target, { recursive: true, force: true });
|
|
519
|
+
if (existsSync(backup)) {
|
|
520
|
+
renameSync(backup, target);
|
|
521
|
+
}
|
|
522
|
+
if (oldManifest === undefined)
|
|
523
|
+
rmSync(manifestTarget, { force: true });
|
|
524
|
+
else
|
|
525
|
+
ManifestFile.writeAtomically(manifestTarget, oldManifest, manifestOperations);
|
|
526
|
+
throw error;
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
reusableGenerationId(packageRoot, target, output, manifest) {
|
|
530
|
+
return reusableGenerationId(join(packageRoot, "spine-proto-manifest.json"), target, manifest, output);
|
|
531
|
+
},
|
|
532
|
+
files(root) {
|
|
533
|
+
const output = [];
|
|
534
|
+
const pending = [[root, 0]];
|
|
535
|
+
let entries = 0;
|
|
536
|
+
while (pending.length > 0) {
|
|
537
|
+
const entry = pending.pop();
|
|
538
|
+
if (entry === undefined)
|
|
539
|
+
continue;
|
|
540
|
+
const [directory, depth] = entry;
|
|
541
|
+
if (depth > 64)
|
|
542
|
+
throw new Error("generated source traversal exceeds bounded inventory");
|
|
543
|
+
for (const name of readdirSync(directory)) {
|
|
544
|
+
const path = join(directory, name);
|
|
545
|
+
entries += 1;
|
|
546
|
+
if (entries > 1_000)
|
|
547
|
+
throw new Error("generated source traversal exceeds bounded inventory");
|
|
548
|
+
const status = lstatSync(path);
|
|
549
|
+
if (status.isSymbolicLink())
|
|
550
|
+
throw new Error("generated source traversal must not contain symlinks");
|
|
551
|
+
if (status.isDirectory())
|
|
552
|
+
pending.push([path, depth + 1]);
|
|
553
|
+
else if (status.isFile())
|
|
554
|
+
output.push(path);
|
|
555
|
+
else
|
|
556
|
+
throw new Error("generated source traversal must contain only regular files and directories");
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return output;
|
|
560
|
+
},
|
|
561
|
+
});
|
|
562
|
+
/**
|
|
563
|
+
* Generates and composes deterministic Protobuf package artifacts.
|
|
564
|
+
*/
|
|
565
|
+
export const ProtoGeneration = Object.freeze(protoGeneration);
|
|
566
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/generation/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-generator.d.ts","sourceRoot":"","sources":["../../../src/generation/handler-generator.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAsChF,CAAC"}
|