@ronin/compiler 0.10.2-leo-ron-1083-experimental-214 → 0.10.3-leo-ron-1083-experimental-215
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/index.js +60 -40
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -65,6 +65,23 @@ var convertToCamelCase = (str) => {
|
|
65
65
|
return sanitize(str).split(SPLIT_REGEX).map((part, index) => index === 0 ? part.toLowerCase() : capitalize(part)).join("");
|
66
66
|
};
|
67
67
|
var isObject = (value) => value != null && typeof value === "object" && Array.isArray(value) === false;
|
68
|
+
var getSymbol = (value) => {
|
69
|
+
if (!isObject(value)) return null;
|
70
|
+
const objectValue = value;
|
71
|
+
if (RONIN_MODEL_SYMBOLS.QUERY in objectValue) {
|
72
|
+
return {
|
73
|
+
type: "query",
|
74
|
+
value: objectValue[RONIN_MODEL_SYMBOLS.QUERY]
|
75
|
+
};
|
76
|
+
}
|
77
|
+
if (RONIN_MODEL_SYMBOLS.EXPRESSION in objectValue) {
|
78
|
+
return {
|
79
|
+
type: "expression",
|
80
|
+
value: objectValue[RONIN_MODEL_SYMBOLS.EXPRESSION]
|
81
|
+
};
|
82
|
+
}
|
83
|
+
return null;
|
84
|
+
};
|
68
85
|
var findInObject = (obj, pattern, replacer) => {
|
69
86
|
let found = false;
|
70
87
|
for (const key in obj) {
|
@@ -85,10 +102,11 @@ var findInObject = (obj, pattern, replacer) => {
|
|
85
102
|
var flatten = (obj, prefix = "", res = {}) => {
|
86
103
|
for (const key in obj) {
|
87
104
|
const path = prefix ? `${prefix}.${key}` : key;
|
88
|
-
|
89
|
-
|
105
|
+
const value = obj[key];
|
106
|
+
if (typeof value === "object" && value !== null && !getSymbol(value)) {
|
107
|
+
flatten(value, path, res);
|
90
108
|
} else {
|
91
|
-
res[path] =
|
109
|
+
res[path] = value;
|
92
110
|
}
|
93
111
|
}
|
94
112
|
return res;
|
@@ -278,23 +296,6 @@ var formatIdentifiers = ({ identifiers }, queryInstructions) => {
|
|
278
296
|
[type]: newNestedInstructions
|
279
297
|
};
|
280
298
|
};
|
281
|
-
var getSymbol = (value) => {
|
282
|
-
if (!isObject(value)) return null;
|
283
|
-
const objectValue = value;
|
284
|
-
if (RONIN_MODEL_SYMBOLS.QUERY in objectValue) {
|
285
|
-
return {
|
286
|
-
type: "query",
|
287
|
-
value: objectValue[RONIN_MODEL_SYMBOLS.QUERY]
|
288
|
-
};
|
289
|
-
}
|
290
|
-
if (RONIN_MODEL_SYMBOLS.EXPRESSION in objectValue) {
|
291
|
-
return {
|
292
|
-
type: "expression",
|
293
|
-
value: objectValue[RONIN_MODEL_SYMBOLS.EXPRESSION]
|
294
|
-
};
|
295
|
-
}
|
296
|
-
return null;
|
297
|
-
};
|
298
299
|
|
299
300
|
// src/instructions/with.ts
|
300
301
|
var getMatcher = (value, negative) => {
|
@@ -1183,32 +1184,44 @@ var handleOrderedBy = (model, instruction) => {
|
|
1183
1184
|
};
|
1184
1185
|
|
1185
1186
|
// src/instructions/selecting.ts
|
1186
|
-
var handleSelecting = (model, statementParams, instructions) => {
|
1187
|
+
var handleSelecting = (models, model, statementParams, instructions, options) => {
|
1187
1188
|
let isJoining = false;
|
1188
1189
|
let statement = instructions.selecting ? instructions.selecting.map((slug) => {
|
1189
1190
|
return getFieldFromModel(model, slug, "selecting").fieldSelector;
|
1190
1191
|
}).join(", ") : "*";
|
1191
1192
|
if (instructions.including) {
|
1192
|
-
const filteredObject = Object.entries(instructions.including).
|
1193
|
+
const filteredObject = Object.entries(instructions.including).flatMap(([key, value]) => {
|
1193
1194
|
const symbol = getSymbol(value);
|
1194
|
-
if (symbol) {
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1195
|
+
if (symbol?.type === "query") {
|
1196
|
+
isJoining = true;
|
1197
|
+
if (!options?.expandColumns) return null;
|
1198
|
+
const { queryModel: queryModelSlug } = splitQuery(symbol.value);
|
1199
|
+
const queryModel = getModelBySlug(models, queryModelSlug);
|
1200
|
+
const tableName = `including_${key}`;
|
1201
|
+
const duplicatedFields = queryModel.fields.filter((field) => {
|
1202
|
+
if (field.type === "group") return null;
|
1203
|
+
return model.fields.some((modelField) => modelField.slug === field.slug);
|
1204
|
+
}).filter((item) => item !== null);
|
1205
|
+
return duplicatedFields.map((field) => ({
|
1206
|
+
key: `${tableName}.${field.slug}`,
|
1207
|
+
value: {
|
1208
|
+
[RONIN_MODEL_SYMBOLS.EXPRESSION]: `${RONIN_MODEL_SYMBOLS.FIELD}${field.slug}`
|
1209
|
+
}
|
1210
|
+
}));
|
1202
1211
|
}
|
1203
|
-
return
|
1204
|
-
}).filter((entry) => entry !== null);
|
1212
|
+
return { key, value };
|
1213
|
+
}).filter((entry) => entry !== null).map((entry) => [entry.key, entry.value]);
|
1205
1214
|
const newObjectEntries = Object.entries(flatten(Object.fromEntries(filteredObject)));
|
1206
1215
|
if (newObjectEntries.length > 0) {
|
1207
1216
|
statement += ", ";
|
1208
1217
|
statement += newObjectEntries.map(([key, value]) => {
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1218
|
+
const symbol = getSymbol(value);
|
1219
|
+
if (symbol?.type === "expression") {
|
1220
|
+
value = `(${parseFieldExpression(model, "including", symbol.value)})`;
|
1221
|
+
} else {
|
1222
|
+
value = prepareStatementValue(statementParams, value);
|
1223
|
+
}
|
1224
|
+
return `${value} as "${key}"`;
|
1212
1225
|
}).join(", ");
|
1213
1226
|
}
|
1214
1227
|
}
|
@@ -1355,10 +1368,16 @@ var compileQueryInput = (defaultQuery, models, statementParams, options) => {
|
|
1355
1368
|
if (instructions && Object.hasOwn(instructions, "for")) {
|
1356
1369
|
instructions = handleFor(model, instructions);
|
1357
1370
|
}
|
1358
|
-
const { columns, isJoining } = handleSelecting(
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1371
|
+
const { columns, isJoining } = handleSelecting(
|
1372
|
+
models,
|
1373
|
+
model,
|
1374
|
+
statementParams,
|
1375
|
+
{
|
1376
|
+
selecting: instructions?.selecting,
|
1377
|
+
including: instructions?.including
|
1378
|
+
},
|
1379
|
+
options
|
1380
|
+
);
|
1362
1381
|
let statement = "";
|
1363
1382
|
switch (queryType) {
|
1364
1383
|
case "get":
|
@@ -1518,7 +1537,8 @@ var Transaction = class {
|
|
1518
1537
|
const result = compileQueryInput(
|
1519
1538
|
query,
|
1520
1539
|
modelListWithPresets,
|
1521
|
-
options?.inlineParams ? null : []
|
1540
|
+
options?.inlineParams ? null : [],
|
1541
|
+
{ expandColumns: options?.expandColumns }
|
1522
1542
|
);
|
1523
1543
|
dependencyStatements.push(...result.dependencies);
|
1524
1544
|
mainStatements.push(result.main);
|
package/package.json
CHANGED