ormbridge 0.8.0 → 0.9.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.
- package/README.md +1 -0
- package/dist/cliRunner.js +3 -3
- package/dist/cliRunner.js.map +1 -1
- package/dist/config.d.ts +3 -2
- package/dist/config.js.map +1 -1
- package/dist/emitters/efcore.d.ts +40 -0
- package/dist/emitters/efcore.js +686 -0
- package/dist/emitters/efcore.js.map +1 -0
- package/dist/emitters/efcoreColumns.d.ts +75 -0
- package/dist/emitters/efcoreColumns.js +492 -0
- package/dist/emitters/efcoreColumns.js.map +1 -0
- package/dist/emitters/efcoreNames.d.ts +30 -0
- package/dist/emitters/efcoreNames.js +268 -0
- package/dist/emitters/efcoreNames.js.map +1 -0
- package/dist/emitters/efcoreRender.d.ts +2 -0
- package/dist/emitters/efcoreRender.js +570 -0
- package/dist/emitters/efcoreRender.js.map +1 -0
- package/dist/emitters/efcoreTypes.d.ts +114 -0
- package/dist/emitters/efcoreTypes.js +2 -0
- package/dist/emitters/efcoreTypes.js.map +1 -0
- package/dist/formats.d.ts +7 -4
- package/dist/formats.js +34 -0
- package/dist/formats.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/io.js +25 -1
- package/dist/io.js.map +1 -1
- package/dist/parsers/csharpChains.d.ts +36 -0
- package/dist/parsers/csharpChains.js +157 -0
- package/dist/parsers/csharpChains.js.map +1 -0
- package/dist/parsers/csharpDeclarations.d.ts +3 -0
- package/dist/parsers/csharpDeclarations.js +293 -0
- package/dist/parsers/csharpDeclarations.js.map +1 -0
- package/dist/parsers/csharpSyntax.d.ts +130 -0
- package/dist/parsers/csharpSyntax.js +339 -0
- package/dist/parsers/csharpSyntax.js.map +1 -0
- package/dist/parsers/efcore.d.ts +17 -0
- package/dist/parsers/efcore.js +265 -0
- package/dist/parsers/efcore.js.map +1 -0
- package/dist/parsers/efcoreAnnotations.d.ts +19 -0
- package/dist/parsers/efcoreAnnotations.js +293 -0
- package/dist/parsers/efcoreAnnotations.js.map +1 -0
- package/dist/parsers/efcoreBuild.d.ts +13 -0
- package/dist/parsers/efcoreBuild.js +523 -0
- package/dist/parsers/efcoreBuild.js.map +1 -0
- package/dist/parsers/efcoreEntities.d.ts +13 -0
- package/dist/parsers/efcoreEntities.js +468 -0
- package/dist/parsers/efcoreEntities.js.map +1 -0
- package/dist/parsers/efcoreFields.d.ts +22 -0
- package/dist/parsers/efcoreFields.js +285 -0
- package/dist/parsers/efcoreFields.js.map +1 -0
- package/dist/parsers/efcoreFluent.d.ts +47 -0
- package/dist/parsers/efcoreFluent.js +375 -0
- package/dist/parsers/efcoreFluent.js.map +1 -0
- package/dist/parsers/efcoreModel.d.ts +209 -0
- package/dist/parsers/efcoreModel.js +2 -0
- package/dist/parsers/efcoreModel.js.map +1 -0
- package/dist/parsers/efcoreRelations.d.ts +46 -0
- package/dist/parsers/efcoreRelations.js +317 -0
- package/dist/parsers/efcoreRelations.js.map +1 -0
- package/dist/parsers/efcoreSteps.d.ts +89 -0
- package/dist/parsers/efcoreSteps.js +793 -0
- package/dist/parsers/efcoreSteps.js.map +1 -0
- package/dist/parsers/efcoreTypes.d.ts +35 -0
- package/dist/parsers/efcoreTypes.js +404 -0
- package/dist/parsers/efcoreTypes.js.map +1 -0
- package/dist/styles.d.ts +3 -2
- package/dist/styles.js +4 -1
- package/dist/styles.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Name and literal helpers of the Entity Framework Core emitter. */
|
|
2
|
+
/** The namespace of the generated classes when none is given. */
|
|
3
|
+
export declare const DEFAULT_EFCORE_NAMESPACE: string;
|
|
4
|
+
/** Type names the generated code refers to, which a model of the same name would hide. */
|
|
5
|
+
export declare const RESERVED_TYPE_NAMES: ReadonlySet<string>;
|
|
6
|
+
/** Members every object has, or that `DbContext` has; a property of the same name would hide them. */
|
|
7
|
+
export declare const RESERVED_MEMBER_NAMES: ReadonlySet<string>;
|
|
8
|
+
/** Members of `DbContext` that a `DbSet` property must not take the name of. */
|
|
9
|
+
export declare const DBCONTEXT_MEMBER_NAMES: ReadonlySet<string>;
|
|
10
|
+
/** True for a valid C# identifier that is not a keyword. */
|
|
11
|
+
export declare function isCsharpIdentifier(value: string): boolean;
|
|
12
|
+
/** True for a dotted C# namespace such as `App.Models`. */
|
|
13
|
+
export declare function isValidCsharpNamespace(value: string): boolean;
|
|
14
|
+
/** Writes a name as an identifier: a keyword gets the `@` prefix. */
|
|
15
|
+
export declare function verbatim(name: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Turns any text into a valid PascalCase identifier. Returns undefined when nothing usable is left
|
|
18
|
+
* (a name made only of characters an identifier cannot hold).
|
|
19
|
+
*/
|
|
20
|
+
export declare function pascalIdentifier(raw: string): string | undefined;
|
|
21
|
+
/** Keeps a name that is already a valid identifier and repairs one that is not. */
|
|
22
|
+
export declare function repairedIdentifier(raw: string): string;
|
|
23
|
+
/** Reserves `base` in `used`, appending a number when the name is taken. */
|
|
24
|
+
export declare function uniqueName(base: string, used: Set<string>): string;
|
|
25
|
+
/** Reserves a navigation name: a name that is taken gets the suffix `Ref` before a number is tried. */
|
|
26
|
+
export declare function navigationName(base: string, used: Set<string>): string;
|
|
27
|
+
/** A C# string literal. */
|
|
28
|
+
export declare function csString(value: string): string;
|
|
29
|
+
/** Pluralizes the last word of a PascalCase name: `BlogPost` is `BlogPosts`, `Category` `Categories`. */
|
|
30
|
+
export declare function pluralize(name: string): string;
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { toPascalCase } from '../naming.js';
|
|
2
|
+
/** Name and literal helpers of the Entity Framework Core emitter. */
|
|
3
|
+
/** The namespace of the generated classes when none is given. */
|
|
4
|
+
export const DEFAULT_EFCORE_NAMESPACE = 'App.Models';
|
|
5
|
+
const IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6
|
+
/** C# keywords: an identifier with one of these names needs the `@` prefix. */
|
|
7
|
+
const KEYWORDS = new Set([
|
|
8
|
+
'abstract',
|
|
9
|
+
'as',
|
|
10
|
+
'base',
|
|
11
|
+
'bool',
|
|
12
|
+
'break',
|
|
13
|
+
'byte',
|
|
14
|
+
'case',
|
|
15
|
+
'catch',
|
|
16
|
+
'char',
|
|
17
|
+
'checked',
|
|
18
|
+
'class',
|
|
19
|
+
'const',
|
|
20
|
+
'continue',
|
|
21
|
+
'decimal',
|
|
22
|
+
'default',
|
|
23
|
+
'delegate',
|
|
24
|
+
'do',
|
|
25
|
+
'double',
|
|
26
|
+
'else',
|
|
27
|
+
'enum',
|
|
28
|
+
'event',
|
|
29
|
+
'explicit',
|
|
30
|
+
'extern',
|
|
31
|
+
'false',
|
|
32
|
+
'finally',
|
|
33
|
+
'fixed',
|
|
34
|
+
'float',
|
|
35
|
+
'for',
|
|
36
|
+
'foreach',
|
|
37
|
+
'goto',
|
|
38
|
+
'if',
|
|
39
|
+
'implicit',
|
|
40
|
+
'in',
|
|
41
|
+
'int',
|
|
42
|
+
'interface',
|
|
43
|
+
'internal',
|
|
44
|
+
'is',
|
|
45
|
+
'lock',
|
|
46
|
+
'long',
|
|
47
|
+
'namespace',
|
|
48
|
+
'new',
|
|
49
|
+
'null',
|
|
50
|
+
'object',
|
|
51
|
+
'operator',
|
|
52
|
+
'out',
|
|
53
|
+
'override',
|
|
54
|
+
'params',
|
|
55
|
+
'private',
|
|
56
|
+
'protected',
|
|
57
|
+
'public',
|
|
58
|
+
'readonly',
|
|
59
|
+
'ref',
|
|
60
|
+
'return',
|
|
61
|
+
'sbyte',
|
|
62
|
+
'sealed',
|
|
63
|
+
'short',
|
|
64
|
+
'sizeof',
|
|
65
|
+
'stackalloc',
|
|
66
|
+
'static',
|
|
67
|
+
'string',
|
|
68
|
+
'struct',
|
|
69
|
+
'switch',
|
|
70
|
+
'this',
|
|
71
|
+
'throw',
|
|
72
|
+
'true',
|
|
73
|
+
'try',
|
|
74
|
+
'typeof',
|
|
75
|
+
'uint',
|
|
76
|
+
'ulong',
|
|
77
|
+
'unchecked',
|
|
78
|
+
'unsafe',
|
|
79
|
+
'ushort',
|
|
80
|
+
'using',
|
|
81
|
+
'virtual',
|
|
82
|
+
'void',
|
|
83
|
+
'volatile',
|
|
84
|
+
'while',
|
|
85
|
+
]);
|
|
86
|
+
/** Type names the generated code refers to, which a model of the same name would hide. */
|
|
87
|
+
export const RESERVED_TYPE_NAMES = new Set([
|
|
88
|
+
'Array',
|
|
89
|
+
'Attribute',
|
|
90
|
+
'Boolean',
|
|
91
|
+
'Byte',
|
|
92
|
+
'ChangeTracker',
|
|
93
|
+
'DateOnly',
|
|
94
|
+
'DateTime',
|
|
95
|
+
'Decimal',
|
|
96
|
+
'DeleteBehavior',
|
|
97
|
+
'Dictionary',
|
|
98
|
+
'Double',
|
|
99
|
+
'DbContext',
|
|
100
|
+
'DbContextOptions',
|
|
101
|
+
'DbSet',
|
|
102
|
+
'ICollection',
|
|
103
|
+
'IEntityTypeConfiguration',
|
|
104
|
+
'Int32',
|
|
105
|
+
'Int64',
|
|
106
|
+
'IPAddress',
|
|
107
|
+
'Guid',
|
|
108
|
+
'List',
|
|
109
|
+
'ModelBuilder',
|
|
110
|
+
'Nullable',
|
|
111
|
+
'NpgsqlRange',
|
|
112
|
+
'Object',
|
|
113
|
+
'String',
|
|
114
|
+
'Task',
|
|
115
|
+
'TimeOnly',
|
|
116
|
+
'TimeSpan',
|
|
117
|
+
'Type',
|
|
118
|
+
'ValueConverter',
|
|
119
|
+
]);
|
|
120
|
+
/** Members every object has, or that `DbContext` has; a property of the same name would hide them. */
|
|
121
|
+
export const RESERVED_MEMBER_NAMES = new Set([
|
|
122
|
+
'Equals',
|
|
123
|
+
'Finalize',
|
|
124
|
+
'GetHashCode',
|
|
125
|
+
'GetType',
|
|
126
|
+
'MemberwiseClone',
|
|
127
|
+
'ReferenceEquals',
|
|
128
|
+
'ToString',
|
|
129
|
+
]);
|
|
130
|
+
/** Members of `DbContext` that a `DbSet` property must not take the name of. */
|
|
131
|
+
export const DBCONTEXT_MEMBER_NAMES = new Set([
|
|
132
|
+
'ChangeTracker',
|
|
133
|
+
'ContextId',
|
|
134
|
+
'Database',
|
|
135
|
+
'Dispose',
|
|
136
|
+
'Entry',
|
|
137
|
+
'Model',
|
|
138
|
+
'SaveChanges',
|
|
139
|
+
'Set',
|
|
140
|
+
]);
|
|
141
|
+
/** True for a valid C# identifier that is not a keyword. */
|
|
142
|
+
export function isCsharpIdentifier(value) {
|
|
143
|
+
return IDENTIFIER_PATTERN.test(value) && !KEYWORDS.has(value);
|
|
144
|
+
}
|
|
145
|
+
/** True for a dotted C# namespace such as `App.Models`. */
|
|
146
|
+
export function isValidCsharpNamespace(value) {
|
|
147
|
+
return (value.length > 0 &&
|
|
148
|
+
value.split('.').every((part) => isCsharpIdentifier(part)));
|
|
149
|
+
}
|
|
150
|
+
/** Writes a name as an identifier: a keyword gets the `@` prefix. */
|
|
151
|
+
export function verbatim(name) {
|
|
152
|
+
return KEYWORDS.has(name) ? `@${name}` : name;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Turns any text into a valid PascalCase identifier. Returns undefined when nothing usable is left
|
|
156
|
+
* (a name made only of characters an identifier cannot hold).
|
|
157
|
+
*/
|
|
158
|
+
export function pascalIdentifier(raw) {
|
|
159
|
+
const pascal = toPascalCase(raw);
|
|
160
|
+
if (pascal === '') {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
return /^[0-9]/.test(pascal) ? `_${pascal}` : pascal;
|
|
164
|
+
}
|
|
165
|
+
/** Keeps a name that is already a valid identifier and repairs one that is not. */
|
|
166
|
+
export function repairedIdentifier(raw) {
|
|
167
|
+
if (IDENTIFIER_PATTERN.test(raw)) {
|
|
168
|
+
return raw;
|
|
169
|
+
}
|
|
170
|
+
const replaced = raw.replace(/[^A-Za-z0-9_]/g, '_');
|
|
171
|
+
const prefixed = /^[0-9]/.test(replaced) ? `_${replaced}` : replaced;
|
|
172
|
+
return prefixed === '' || /^_+$/.test(prefixed) ? 'Value' : prefixed;
|
|
173
|
+
}
|
|
174
|
+
/** Reserves `base` in `used`, appending a number when the name is taken. */
|
|
175
|
+
export function uniqueName(base, used) {
|
|
176
|
+
let candidate = base;
|
|
177
|
+
let suffix = 2;
|
|
178
|
+
while (used.has(candidate)) {
|
|
179
|
+
candidate = `${base}${suffix}`;
|
|
180
|
+
suffix += 1;
|
|
181
|
+
}
|
|
182
|
+
used.add(candidate);
|
|
183
|
+
return candidate;
|
|
184
|
+
}
|
|
185
|
+
/** Reserves a navigation name: a name that is taken gets the suffix `Ref` before a number is tried. */
|
|
186
|
+
export function navigationName(base, used) {
|
|
187
|
+
return uniqueName(used.has(base) ? `${base}Ref` : base, used);
|
|
188
|
+
}
|
|
189
|
+
/** A C# string literal. */
|
|
190
|
+
export function csString(value) {
|
|
191
|
+
let escaped = '';
|
|
192
|
+
for (const character of value) {
|
|
193
|
+
const code = character.codePointAt(0) ?? 0;
|
|
194
|
+
switch (character) {
|
|
195
|
+
case '\\':
|
|
196
|
+
escaped += '\\\\';
|
|
197
|
+
break;
|
|
198
|
+
case '"':
|
|
199
|
+
escaped += '\\"';
|
|
200
|
+
break;
|
|
201
|
+
case '\n':
|
|
202
|
+
escaped += '\\n';
|
|
203
|
+
break;
|
|
204
|
+
case '\r':
|
|
205
|
+
escaped += '\\r';
|
|
206
|
+
break;
|
|
207
|
+
case '\t':
|
|
208
|
+
escaped += '\\t';
|
|
209
|
+
break;
|
|
210
|
+
default:
|
|
211
|
+
escaped +=
|
|
212
|
+
code < 0x20 || code === 0x7f
|
|
213
|
+
? `\\u${code.toString(16).padStart(4, '0')}`
|
|
214
|
+
: character;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return `"${escaped}"`;
|
|
218
|
+
}
|
|
219
|
+
const UNCOUNTABLE = new Set([
|
|
220
|
+
'series',
|
|
221
|
+
'news',
|
|
222
|
+
'species',
|
|
223
|
+
'sheep',
|
|
224
|
+
'fish',
|
|
225
|
+
'equipment',
|
|
226
|
+
'information',
|
|
227
|
+
'metadata',
|
|
228
|
+
'data',
|
|
229
|
+
'media',
|
|
230
|
+
]);
|
|
231
|
+
const IRREGULAR = {
|
|
232
|
+
person: 'people',
|
|
233
|
+
child: 'children',
|
|
234
|
+
man: 'men',
|
|
235
|
+
woman: 'women',
|
|
236
|
+
};
|
|
237
|
+
function pluralizeWord(word) {
|
|
238
|
+
const lower = word.toLowerCase();
|
|
239
|
+
if (UNCOUNTABLE.has(lower)) {
|
|
240
|
+
return word;
|
|
241
|
+
}
|
|
242
|
+
const irregular = IRREGULAR[lower];
|
|
243
|
+
if (irregular !== undefined) {
|
|
244
|
+
return word.charAt(0) === word.charAt(0).toUpperCase()
|
|
245
|
+
? irregular.charAt(0).toUpperCase() + irregular.slice(1)
|
|
246
|
+
: irregular;
|
|
247
|
+
}
|
|
248
|
+
if (/[^s]s$/.test(lower) && !/(us|is|ous)$/.test(lower)) {
|
|
249
|
+
// Already plural (`PostTags`).
|
|
250
|
+
return word;
|
|
251
|
+
}
|
|
252
|
+
if (/(s|x|z|ch|sh)$/.test(lower)) {
|
|
253
|
+
return `${word}es`;
|
|
254
|
+
}
|
|
255
|
+
if (/[^aeiou]y$/.test(lower)) {
|
|
256
|
+
return `${word.slice(0, -1)}ies`;
|
|
257
|
+
}
|
|
258
|
+
return `${word}s`;
|
|
259
|
+
}
|
|
260
|
+
/** Pluralizes the last word of a PascalCase name: `BlogPost` is `BlogPosts`, `Category` `Categories`. */
|
|
261
|
+
export function pluralize(name) {
|
|
262
|
+
const match = name.match(/^(.*?)([A-Z][a-z0-9]*|[a-z0-9]+)$/);
|
|
263
|
+
if (match === null) {
|
|
264
|
+
return `${name}s`;
|
|
265
|
+
}
|
|
266
|
+
return `${match[1] ?? ''}${pluralizeWord(match[2] ?? '')}`;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=efcoreNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"efcoreNames.js","sourceRoot":"","sources":["../../src/emitters/efcoreNames.ts"],"names":[],"mappings":"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"}
|