@balena/abstract-sql-to-typescript 3.1.0 → 3.1.1-build-reference-aliases-ef99ea06ebdb35456940db014e92764bada5a8fc-1
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/.versionbot/CHANGELOG.yml +13 -1
- package/CHANGELOG.md +4 -0
- package/out/generate.js +31 -13
- package/out/generate.js.map +1 -1
- package/package.json +2 -2
- package/src/generate.ts +50 -27
- package/test/index.ts +6 -0
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
- commits:
|
|
2
|
+
- subject: Include reference aliases in generated types
|
|
3
|
+
hash: ef99ea06ebdb35456940db014e92764bada5a8fc
|
|
4
|
+
body: ""
|
|
5
|
+
footer:
|
|
6
|
+
Change-type: patch
|
|
7
|
+
change-type: patch
|
|
8
|
+
author: Pagan Gazzard
|
|
9
|
+
nested: []
|
|
10
|
+
version: 3.1.1
|
|
11
|
+
title: ""
|
|
12
|
+
date: 2024-06-03T17:48:27.735Z
|
|
1
13
|
- commits:
|
|
2
14
|
- subject: Add a default export which maps OData names to typescript interfaces
|
|
3
15
|
hash: 877a7987da8cdbaf1f1bfaa4ddd1eff0792692ff
|
|
@@ -9,7 +21,7 @@
|
|
|
9
21
|
nested: []
|
|
10
22
|
version: 3.1.0
|
|
11
23
|
title: ""
|
|
12
|
-
date: 2024-05-28T15:
|
|
24
|
+
date: 2024-05-28T15:19:24.280Z
|
|
13
25
|
- commits:
|
|
14
26
|
- subject: Improve `Resource` typing
|
|
15
27
|
hash: ba1301734f1a71dc2a920d1f378173a6bfa7c4a5
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file
|
|
|
4
4
|
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
|
|
5
5
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
|
7
|
+
## 3.1.1 - 2024-06-03
|
|
8
|
+
|
|
9
|
+
* Include reference aliases in generated types [Pagan Gazzard]
|
|
10
|
+
|
|
7
11
|
## 3.1.0 - 2024-05-28
|
|
8
12
|
|
|
9
13
|
* Add a default export which maps OData names to typescript interfaces [Pagan Gazzard]
|
package/out/generate.js
CHANGED
|
@@ -35,30 +35,48 @@ const sqlTypeToTypescriptType = (m, f, mode) => {
|
|
|
35
35
|
return `Types['${f.dataType}']['${mode}']`;
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
const
|
|
38
|
+
const fieldToInterfaceProps = (key, m, f, mode) => {
|
|
39
39
|
const nullable = f.required ? '' : ' | null';
|
|
40
|
-
return `${(0, odata_to_abstract_sql_1.sqlNameToODataName)(
|
|
41
|
-
}
|
|
40
|
+
return `${(0, odata_to_abstract_sql_1.sqlNameToODataName)(key)}: ${sqlTypeToTypescriptType(m, f, mode)}${nullable};`;
|
|
41
|
+
};
|
|
42
|
+
const fieldsToInterfaceProps = (m, fields, mode) => fields.map((f) => fieldToInterfaceProps(f.fieldName, m, f, mode));
|
|
42
43
|
const recurseRelationships = (m, relationships, inverseSynonyms, mode, currentTable, parentKey) => Object.keys(relationships).flatMap((key) => {
|
|
43
44
|
if (key === '$') {
|
|
44
45
|
const [localField, referencedField] = relationships.$;
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
if (referencedField != null) {
|
|
47
|
+
if (currentTable.idField === localField) {
|
|
48
|
+
const referencedTable = m.tables[referencedField[0]];
|
|
49
|
+
if (referencedTable != null) {
|
|
50
|
+
const referencedInterface = getReferencedInterface(referencedTable.name, mode);
|
|
51
|
+
const propDefinitons = [
|
|
52
|
+
`${(0, odata_to_abstract_sql_1.sqlNameToODataName)(parentKey)}?: Array<${referencedInterface}>;`,
|
|
53
|
+
];
|
|
54
|
+
const synonym = inverseSynonyms[parentKey];
|
|
55
|
+
if (synonym != null) {
|
|
56
|
+
propDefinitons.push(`${(0, odata_to_abstract_sql_1.sqlNameToODataName)(synonym)}?: Array<${referencedInterface}>;`);
|
|
57
|
+
}
|
|
58
|
+
return propDefinitons;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const f = currentTable.fields.find(({ fieldName }) => fieldName === localField);
|
|
63
|
+
const propDefinitons = [];
|
|
64
|
+
const addDefinition = (propName) => {
|
|
65
|
+
if (f.fieldName !== propName) {
|
|
66
|
+
propDefinitons.push(fieldToInterfaceProps(propName, m, f, mode));
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
addDefinition(parentKey);
|
|
70
|
+
const synonym = inverseSynonyms[parentKey];
|
|
53
71
|
if (synonym != null) {
|
|
54
|
-
|
|
72
|
+
addDefinition(synonym);
|
|
55
73
|
}
|
|
56
74
|
return propDefinitons;
|
|
57
75
|
}
|
|
58
76
|
}
|
|
59
77
|
return [];
|
|
60
78
|
}
|
|
61
|
-
return recurseRelationships(m, relationships[key], inverseSynonyms, mode, currentTable, `${parentKey}
|
|
79
|
+
return recurseRelationships(m, relationships[key], inverseSynonyms, mode, currentTable, `${parentKey}-${key}`);
|
|
62
80
|
});
|
|
63
81
|
const relationshipsToInterfaceProps = (m, table, mode) => {
|
|
64
82
|
const relationships = m.relationships[table.resourceName];
|
package/out/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":";;;AASA,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@balena/abstract-sql-to-typescript",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1-build-reference-aliases-ef99ea06ebdb35456940db014e92764bada5a8fc-1",
|
|
4
4
|
"description": "A translator for abstract sql into typescript types.",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"types": "out/index.d.ts",
|
|
@@ -50,6 +50,6 @@
|
|
|
50
50
|
"_": "test/**/*.ts"
|
|
51
51
|
},
|
|
52
52
|
"versionist": {
|
|
53
|
-
"publishedAt": "2024-
|
|
53
|
+
"publishedAt": "2024-06-03T17:48:27.945Z"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/generate.ts
CHANGED
|
@@ -7,10 +7,7 @@ import type {
|
|
|
7
7
|
RelationshipInternalNode,
|
|
8
8
|
RelationshipLeafNode,
|
|
9
9
|
} from '@balena/abstract-sql-compiler';
|
|
10
|
-
import {
|
|
11
|
-
odataNameToSqlName,
|
|
12
|
-
sqlNameToODataName,
|
|
13
|
-
} from '@balena/odata-to-abstract-sql';
|
|
10
|
+
import { sqlNameToODataName } from '@balena/odata-to-abstract-sql';
|
|
14
11
|
import { replaceResultTransformer, TemplateTag } from 'common-tags';
|
|
15
12
|
|
|
16
13
|
type RequiredModelSubset = Pick<
|
|
@@ -70,19 +67,26 @@ const sqlTypeToTypescriptType = (
|
|
|
70
67
|
}
|
|
71
68
|
};
|
|
72
69
|
|
|
70
|
+
const fieldToInterfaceProps = (
|
|
71
|
+
key: string,
|
|
72
|
+
m: RequiredModelSubset,
|
|
73
|
+
f: AbstractSqlField,
|
|
74
|
+
mode: Mode,
|
|
75
|
+
): string => {
|
|
76
|
+
const nullable = f.required ? '' : ' | null';
|
|
77
|
+
return `${sqlNameToODataName(key)}: ${sqlTypeToTypescriptType(
|
|
78
|
+
m,
|
|
79
|
+
f,
|
|
80
|
+
mode,
|
|
81
|
+
)}${nullable};`;
|
|
82
|
+
};
|
|
83
|
+
|
|
73
84
|
const fieldsToInterfaceProps = (
|
|
74
85
|
m: RequiredModelSubset,
|
|
75
86
|
fields: AbstractSqlField[],
|
|
76
87
|
mode: Mode,
|
|
77
88
|
): string[] =>
|
|
78
|
-
fields.map((f) =>
|
|
79
|
-
const nullable = f.required ? '' : ' | null';
|
|
80
|
-
return `${sqlNameToODataName(f.fieldName)}: ${sqlTypeToTypescriptType(
|
|
81
|
-
m,
|
|
82
|
-
f,
|
|
83
|
-
mode,
|
|
84
|
-
)}${nullable};`;
|
|
85
|
-
});
|
|
89
|
+
fields.map((f) => fieldToInterfaceProps(f.fieldName, m, f, mode));
|
|
86
90
|
|
|
87
91
|
const recurseRelationships = (
|
|
88
92
|
m: RequiredModelSubset,
|
|
@@ -97,21 +101,40 @@ const recurseRelationships = (
|
|
|
97
101
|
const [localField, referencedField] = (
|
|
98
102
|
relationships as RelationshipLeafNode
|
|
99
103
|
).$;
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const propDefinitons = [
|
|
108
|
-
`${parentKey}?: Array<${referencedInterface}>;`,
|
|
109
|
-
];
|
|
110
|
-
const synonym = inverseSynonyms[odataNameToSqlName(parentKey)];
|
|
111
|
-
if (synonym != null) {
|
|
112
|
-
propDefinitons.push(
|
|
113
|
-
`${sqlNameToODataName(synonym)}?: Array<${referencedInterface}>;`,
|
|
104
|
+
if (referencedField != null) {
|
|
105
|
+
if (currentTable.idField === localField) {
|
|
106
|
+
const referencedTable = m.tables[referencedField[0]];
|
|
107
|
+
if (referencedTable != null) {
|
|
108
|
+
const referencedInterface = getReferencedInterface(
|
|
109
|
+
referencedTable.name,
|
|
110
|
+
mode,
|
|
114
111
|
);
|
|
112
|
+
const propDefinitons = [
|
|
113
|
+
`${sqlNameToODataName(parentKey)}?: Array<${referencedInterface}>;`,
|
|
114
|
+
];
|
|
115
|
+
const synonym = inverseSynonyms[parentKey];
|
|
116
|
+
if (synonym != null) {
|
|
117
|
+
propDefinitons.push(
|
|
118
|
+
`${sqlNameToODataName(synonym)}?: Array<${referencedInterface}>;`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
return propDefinitons;
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
const f = currentTable.fields.find(
|
|
125
|
+
({ fieldName }) => fieldName === localField,
|
|
126
|
+
)!;
|
|
127
|
+
const propDefinitons: string[] = [];
|
|
128
|
+
const addDefinition = (propName: string) => {
|
|
129
|
+
// Only add the relationship if it doesn't directly match the field name to avoid duplicates
|
|
130
|
+
if (f.fieldName !== propName) {
|
|
131
|
+
propDefinitons.push(fieldToInterfaceProps(propName, m, f, mode));
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
addDefinition(parentKey);
|
|
135
|
+
const synonym = inverseSynonyms[parentKey];
|
|
136
|
+
if (synonym != null) {
|
|
137
|
+
addDefinition(synonym);
|
|
115
138
|
}
|
|
116
139
|
return propDefinitons;
|
|
117
140
|
}
|
|
@@ -124,7 +147,7 @@ const recurseRelationships = (
|
|
|
124
147
|
inverseSynonyms,
|
|
125
148
|
mode,
|
|
126
149
|
currentTable,
|
|
127
|
-
`${parentKey}
|
|
150
|
+
`${parentKey}-${key}`,
|
|
128
151
|
);
|
|
129
152
|
});
|
|
130
153
|
|
package/test/index.ts
CHANGED
|
@@ -243,6 +243,11 @@ const testTable: Partial<AbstractSqlModel> = {
|
|
|
243
243
|
$: ['id', ['test-has-tag key', 'test']],
|
|
244
244
|
},
|
|
245
245
|
},
|
|
246
|
+
aliased: {
|
|
247
|
+
tag: {
|
|
248
|
+
$: ['id', ['test-has-tag key', 'test']],
|
|
249
|
+
},
|
|
250
|
+
},
|
|
246
251
|
references: {
|
|
247
252
|
other: {
|
|
248
253
|
$: ['references-other', ['other', 'id']],
|
|
@@ -327,6 +332,7 @@ test(
|
|
|
327
332
|
a_file: Types['WebResource']['Read'];
|
|
328
333
|
parent: { __id: Parent['Read']['id'] } | [Parent['Read']];
|
|
329
334
|
references__other: { __id: Other['Read']['id'] } | [Other['Read']];
|
|
335
|
+
aliased__tag?: Array<TestTag['Read']>;
|
|
330
336
|
test__has__tag_key?: Array<TestTag['Read']>;
|
|
331
337
|
test_tag?: Array<TestTag['Read']>;
|
|
332
338
|
}
|