@aptre/protobuf-es-lite 0.1.3 → 0.1.5
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/dist/typescript.js +40 -0
- package/package.json +7 -2
package/dist/typescript.js
CHANGED
|
@@ -33,13 +33,53 @@ function generateTs(schema) {
|
|
|
33
33
|
for (const enumeration of file.enums) {
|
|
34
34
|
generateEnum(f, enumeration);
|
|
35
35
|
}
|
|
36
|
+
const messageTypes = [];
|
|
37
|
+
const dependencies = new Map();
|
|
38
|
+
function collectMessages(message) {
|
|
39
|
+
if (message.file === file) {
|
|
40
|
+
messageTypes.push(message);
|
|
41
|
+
const deps = new Set();
|
|
42
|
+
for (const field of message.fields) {
|
|
43
|
+
if (field.fieldKind === "message" && field.message.file === file) {
|
|
44
|
+
deps.add(field.message);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
dependencies.set(message, deps);
|
|
48
|
+
for (const nestedMessage of message.nestedMessages) {
|
|
49
|
+
collectMessages(nestedMessage);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
36
53
|
for (const message of file.messages) {
|
|
54
|
+
collectMessages(message);
|
|
55
|
+
}
|
|
56
|
+
// Topological sort toensure consts are declared in the right order.
|
|
57
|
+
const sortedMessageTypes = topologicalSort(messageTypes, dependencies);
|
|
58
|
+
for (const message of sortedMessageTypes) {
|
|
37
59
|
generateMessage(schema, f, message);
|
|
38
60
|
}
|
|
39
61
|
// We do not generate anything for services or extensions
|
|
40
62
|
}
|
|
41
63
|
}
|
|
42
64
|
exports.generateTs = generateTs;
|
|
65
|
+
// topologicalSort sorts the list of messages by dependency order.
|
|
66
|
+
function topologicalSort(messages, dependencies) {
|
|
67
|
+
const result = [];
|
|
68
|
+
const visited = new Set();
|
|
69
|
+
function visit(message) {
|
|
70
|
+
if (visited.has(message))
|
|
71
|
+
return;
|
|
72
|
+
visited.add(message);
|
|
73
|
+
for (const dep of dependencies.get(message) ?? []) {
|
|
74
|
+
visit(dep);
|
|
75
|
+
}
|
|
76
|
+
result.push(message);
|
|
77
|
+
}
|
|
78
|
+
for (const message of messages) {
|
|
79
|
+
visit(message);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
43
83
|
// prettier-ignore
|
|
44
84
|
function generateEnum(f, enumeration) {
|
|
45
85
|
f.print(f.jsDoc(enumeration));
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aptre/protobuf-es-lite",
|
|
3
3
|
"description": "Lightweight Protobuf codegen for TypeScript and JavaScript.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.5",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "git+ssh://git@github.com/aperturerobotics/protobuf-es-lite.git"
|
|
@@ -40,9 +40,13 @@
|
|
|
40
40
|
"release": "npm run release:version && npm run release:commit",
|
|
41
41
|
"typecheck": "tsc --noEmit --project tsconfig.json --outDir ./dist",
|
|
42
42
|
"example": "npm run build && protoc --plugin=./bin/protoc-gen-es-lite --es-lite_out=. --es-lite_opt target=ts --es-lite_opt ts_nocheck=false ./example/example.proto",
|
|
43
|
-
"format": "prettier --write './src/**/(*.ts|*.tsx|*.html|*.css|*.scss)'"
|
|
43
|
+
"format": "prettier --write './src/**/(*.ts|*.tsx|*.html|*.css|*.scss)'",
|
|
44
|
+
"precommit": "npm run format"
|
|
44
45
|
},
|
|
45
46
|
"preferUnplugged": true,
|
|
47
|
+
"pre-commit": [
|
|
48
|
+
"precommit"
|
|
49
|
+
],
|
|
46
50
|
"dependencies": {
|
|
47
51
|
"@bufbuild/protobuf": "^1.9.0",
|
|
48
52
|
"@bufbuild/protoplugin": "1.9.0"
|
|
@@ -56,6 +60,7 @@
|
|
|
56
60
|
}
|
|
57
61
|
},
|
|
58
62
|
"devDependencies": {
|
|
63
|
+
"pre-commit": "^1.2.2",
|
|
59
64
|
"prettier": "^3.2.5",
|
|
60
65
|
"rimraf": "^5.0.5",
|
|
61
66
|
"typescript": "^5.4.5"
|