@ronin/compiler 0.16.4-leo-ron-1099-1-experimental-372 → 0.16.4
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 -6
- package/dist/index.d.ts +0 -4
- package/dist/index.js +36 -99
- package/package.json +1 -1
package/README.md
CHANGED
@@ -127,12 +127,7 @@ new Transaction(queries, {
|
|
127
127
|
// Instead of returning an array of parameters for every statement (which allows for
|
128
128
|
// preventing SQL injections), all parameters are inlined directly into the SQL strings.
|
129
129
|
// This option should only be used if the generated SQL will be manually verified.
|
130
|
-
inlineParams: true
|
131
|
-
|
132
|
-
// By default, the compiler relies on dynamic column default values for computing the
|
133
|
-
// values of all meta fields (such as `id`, `ronin.createdAt`, etc). In order to compute
|
134
|
-
// those values at the time of insertion instead, use this option.
|
135
|
-
inlineDefaults: true
|
130
|
+
inlineParams: true
|
136
131
|
});
|
137
132
|
```
|
138
133
|
|
package/dist/index.d.ts
CHANGED
@@ -404,10 +404,6 @@ interface TransactionOptions {
|
|
404
404
|
* separating them out into a dedicated `params` array.
|
405
405
|
*/
|
406
406
|
inlineParams?: boolean;
|
407
|
-
/**
|
408
|
-
* Whether to compute default field values as part of the generated statement.
|
409
|
-
*/
|
410
|
-
inlineDefaults?: boolean;
|
411
407
|
}
|
412
408
|
declare class Transaction {
|
413
409
|
#private;
|
package/dist/index.js
CHANGED
@@ -23,12 +23,6 @@ var RAW_FIELD_TYPES = ["string", "number", "boolean"];
|
|
23
23
|
var CURRENT_TIME_EXPRESSION = {
|
24
24
|
[QUERY_SYMBOLS.EXPRESSION]: `strftime('%Y-%m-%dT%H:%M:%f', 'now') || 'Z'`
|
25
25
|
};
|
26
|
-
var ID_EXPRESSION = (idPrefix) => ({
|
27
|
-
// Since default values in SQLite cannot rely on other columns, we unfortunately
|
28
|
-
// cannot rely on the `idPrefix` column here. Instead, we need to inject it directly
|
29
|
-
// into the expression as a static string.
|
30
|
-
[QUERY_SYMBOLS.EXPRESSION]: `'${idPrefix}_' || lower(substr(hex(randomblob(12)), 1, 16))`
|
31
|
-
});
|
32
26
|
var MOUNTING_PATH_SUFFIX = /(.*?)(\{(\d+)\})?$/;
|
33
27
|
var composeMountingPath = (single, key, mountingPath) => {
|
34
28
|
if (key === "ronin_root") {
|
@@ -263,9 +257,7 @@ var handleBeforeOrAfter = (model, statementParams, queryType, instructions) => {
|
|
263
257
|
};
|
264
258
|
|
265
259
|
// src/instructions/including.ts
|
266
|
-
var handleIncluding = (models, model, statementParams, single, instruction, options = {
|
267
|
-
inlineDefaults: false
|
268
|
-
}) => {
|
260
|
+
var handleIncluding = (models, model, statementParams, single, instruction, options = {}) => {
|
269
261
|
let statement = "";
|
270
262
|
let tableSubQuery;
|
271
263
|
for (const ephemeralFieldSlug in instruction) {
|
@@ -301,7 +293,7 @@ var handleIncluding = (models, model, statementParams, single, instruction, opti
|
|
301
293
|
},
|
302
294
|
models,
|
303
295
|
statementParams,
|
304
|
-
{ parentModel: model
|
296
|
+
{ parentModel: model }
|
305
297
|
);
|
306
298
|
relatedTableSelector = `(${subSelect.main.statement})`;
|
307
299
|
}
|
@@ -330,7 +322,7 @@ var handleIncluding = (models, model, statementParams, single, instruction, opti
|
|
330
322
|
statementParams,
|
331
323
|
subSingle,
|
332
324
|
modifiableQueryInstructions.including,
|
333
|
-
{ mountingPath: subMountingPath
|
325
|
+
{ mountingPath: subMountingPath }
|
334
326
|
);
|
335
327
|
statement += ` ${subIncluding.statement}`;
|
336
328
|
}
|
@@ -375,7 +367,7 @@ var handleOrderedBy = (model, instruction) => {
|
|
375
367
|
};
|
376
368
|
|
377
369
|
// src/instructions/selecting.ts
|
378
|
-
var handleSelecting = (models, model, statementParams, single, instructions, options = {
|
370
|
+
var handleSelecting = (models, model, statementParams, single, instructions, options = {}) => {
|
379
371
|
let isJoining = false;
|
380
372
|
const selectedFields = filterSelectedFields(
|
381
373
|
model,
|
@@ -403,8 +395,7 @@ var handleSelecting = (models, model, statementParams, single, instructions, opt
|
|
403
395
|
const subQueryModel = getModelBySlug(models, queryModel);
|
404
396
|
if (queryType === "count") {
|
405
397
|
const subSelect = compileQueryInput(symbol2.value, models, statementParams, {
|
406
|
-
parentModel: { ...model, tableAlias: model.table }
|
407
|
-
inlineDefaults: options.inlineDefaults
|
398
|
+
parentModel: { ...model, tableAlias: model.table }
|
408
399
|
});
|
409
400
|
selectedFields.push({
|
410
401
|
slug: key,
|
@@ -466,23 +457,16 @@ var handleSelecting = (models, model, statementParams, single, instructions, opt
|
|
466
457
|
};
|
467
458
|
|
468
459
|
// src/instructions/to.ts
|
469
|
-
var handleTo = (models, model, statementParams, queryType, dependencyStatements, instructions,
|
460
|
+
var handleTo = (models, model, statementParams, queryType, dependencyStatements, instructions, parentModel) => {
|
470
461
|
const { with: withInstruction, to: toInstruction } = instructions;
|
471
462
|
const defaultFields = {};
|
472
|
-
|
473
|
-
|
474
|
-
defaultFields.id = toInstruction.id || ID_EXPRESSION(model.idPrefix);
|
475
|
-
}
|
476
|
-
if (queryType === "add" || queryType === "set" || toInstruction.ronin) {
|
477
|
-
const defaults = {
|
478
|
-
// If records are being created, set their creation time.
|
479
|
-
...inlineDefaultInsertionFields ? { createdAt: CURRENT_TIME_EXPRESSION } : {},
|
463
|
+
if (queryType === "set" || toInstruction.ronin) {
|
464
|
+
defaultFields.ronin = {
|
480
465
|
// If records are being updated, bump their update time.
|
481
|
-
...queryType === "set"
|
466
|
+
...queryType === "set" ? { updatedAt: CURRENT_TIME_EXPRESSION } : {},
|
482
467
|
// Allow for overwriting the default values provided above.
|
483
468
|
...toInstruction.ronin
|
484
469
|
};
|
485
|
-
if (Object.keys(defaults).length > 0) defaultFields.ronin = defaults;
|
486
470
|
}
|
487
471
|
const symbol = getQuerySymbol(toInstruction);
|
488
472
|
if (symbol?.type === "query") {
|
@@ -508,10 +492,7 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
|
|
508
492
|
});
|
509
493
|
statement2 = `(${columns.join(", ")}) `;
|
510
494
|
}
|
511
|
-
statement2 += compileQueryInput(symbol.value, models, statementParams
|
512
|
-
// biome-ignore lint/complexity/useSimplifiedLogicExpression: This is needed.
|
513
|
-
inlineDefaults: options?.inlineDefaults || false
|
514
|
-
}).main.statement;
|
495
|
+
statement2 += compileQueryInput(symbol.value, models, statementParams).main.statement;
|
515
496
|
return statement2;
|
516
497
|
}
|
517
498
|
Object.assign(toInstruction, defaultFields);
|
@@ -539,8 +520,7 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
|
|
539
520
|
},
|
540
521
|
models,
|
541
522
|
[],
|
542
|
-
|
543
|
-
{ returning: false, inlineDefaults: options?.inlineDefaults || false }
|
523
|
+
{ returning: false }
|
544
524
|
).main;
|
545
525
|
dependencyStatements.push({ ...query, after: true });
|
546
526
|
};
|
@@ -561,7 +541,7 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
|
|
561
541
|
}
|
562
542
|
}
|
563
543
|
let statement = composeConditions(models, model, statementParams, "to", toInstruction, {
|
564
|
-
parentModel
|
544
|
+
parentModel,
|
565
545
|
type: queryType === "add" ? "fields" : void 0
|
566
546
|
});
|
567
547
|
if (queryType === "add") {
|
@@ -572,7 +552,7 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
|
|
572
552
|
"to",
|
573
553
|
toInstruction,
|
574
554
|
{
|
575
|
-
parentModel
|
555
|
+
parentModel,
|
576
556
|
type: "values"
|
577
557
|
}
|
578
558
|
);
|
@@ -645,11 +625,7 @@ var compileQueryInput = (defaultQuery, models, statementParams, options) => {
|
|
645
625
|
models,
|
646
626
|
dependencyStatements,
|
647
627
|
statementParams,
|
648
|
-
defaultQuery
|
649
|
-
{
|
650
|
-
// biome-ignore lint/complexity/useSimplifiedLogicExpression: This is needed.
|
651
|
-
inlineDefaults: options?.inlineDefaults || false
|
652
|
-
}
|
628
|
+
defaultQuery
|
653
629
|
);
|
654
630
|
if (query === null)
|
655
631
|
return { dependencies: [], main: dependencyStatements[0], selectedFields: [] };
|
@@ -679,9 +655,7 @@ var compileQueryInput = (defaultQuery, models, statementParams, options) => {
|
|
679
655
|
{
|
680
656
|
selecting: instructions?.selecting,
|
681
657
|
including: instructions?.including
|
682
|
-
}
|
683
|
-
// biome-ignore lint/complexity/useSimplifiedLogicExpression: This is needed.
|
684
|
-
{ inlineDefaults: options?.inlineDefaults || false }
|
658
|
+
}
|
685
659
|
);
|
686
660
|
let statement = "";
|
687
661
|
switch (queryType) {
|
@@ -735,7 +709,7 @@ var compileQueryInput = (defaultQuery, models, statementParams, options) => {
|
|
735
709
|
queryType,
|
736
710
|
dependencyStatements,
|
737
711
|
{ with: instructions.with, to: instructionValue },
|
738
|
-
options
|
712
|
+
options?.parentModel
|
739
713
|
);
|
740
714
|
statement += `${toStatement} `;
|
741
715
|
}
|
@@ -1484,7 +1458,12 @@ var getSystemFields = (idPrefix) => [
|
|
1484
1458
|
name: "ID",
|
1485
1459
|
type: "string",
|
1486
1460
|
slug: "id",
|
1487
|
-
defaultValue:
|
1461
|
+
defaultValue: {
|
1462
|
+
// Since default values in SQLite cannot rely on other columns, we unfortunately
|
1463
|
+
// cannot rely on the `idPrefix` column here. Instead, we need to inject it directly
|
1464
|
+
// into the expression as a static string.
|
1465
|
+
[QUERY_SYMBOLS.EXPRESSION]: `'${idPrefix}_' || lower(substr(hex(randomblob(12)), 1, 16))`
|
1466
|
+
}
|
1488
1467
|
},
|
1489
1468
|
{
|
1490
1469
|
name: "RONIN - Created At",
|
@@ -1643,7 +1622,7 @@ var formatModelEntity = (type, entities) => {
|
|
1643
1622
|
});
|
1644
1623
|
return entries ? Object.fromEntries(entries) : void 0;
|
1645
1624
|
};
|
1646
|
-
var handleSystemModel = (models, dependencyStatements, action,
|
1625
|
+
var handleSystemModel = (models, dependencyStatements, action, systemModel, newModel) => {
|
1647
1626
|
const { system: _, ...systemModelClean } = systemModel;
|
1648
1627
|
const query = {
|
1649
1628
|
[action]: { model: action === "create" ? systemModelClean : systemModelClean.slug }
|
@@ -1652,10 +1631,10 @@ var handleSystemModel = (models, dependencyStatements, action, inlineDefaults, s
|
|
1652
1631
|
const { system: _2, ...newModelClean } = newModel;
|
1653
1632
|
query.alter.to = newModelClean;
|
1654
1633
|
}
|
1655
|
-
const statement = compileQueryInput(query, models, []
|
1634
|
+
const statement = compileQueryInput(query, models, []);
|
1656
1635
|
dependencyStatements.push(...statement.dependencies);
|
1657
1636
|
};
|
1658
|
-
var handleSystemModels = (models, dependencyStatements, previousModel, newModel
|
1637
|
+
var handleSystemModels = (models, dependencyStatements, previousModel, newModel) => {
|
1659
1638
|
const currentSystemModels = models.filter(({ system }) => {
|
1660
1639
|
return system?.model === newModel.id;
|
1661
1640
|
});
|
@@ -1679,32 +1658,19 @@ var handleSystemModels = (models, dependencyStatements, previousModel, newModel,
|
|
1679
1658
|
const exists = newSystemModels.find(matchSystemModels.bind(null, systemModel));
|
1680
1659
|
if (exists) {
|
1681
1660
|
if (exists.slug !== systemModel.slug) {
|
1682
|
-
handleSystemModel(
|
1683
|
-
models,
|
1684
|
-
dependencyStatements,
|
1685
|
-
"alter",
|
1686
|
-
inlineDefaults,
|
1687
|
-
systemModel,
|
1688
|
-
exists
|
1689
|
-
);
|
1661
|
+
handleSystemModel(models, dependencyStatements, "alter", systemModel, exists);
|
1690
1662
|
}
|
1691
1663
|
continue;
|
1692
1664
|
}
|
1693
|
-
handleSystemModel(models, dependencyStatements, "drop",
|
1665
|
+
handleSystemModel(models, dependencyStatements, "drop", systemModel);
|
1694
1666
|
}
|
1695
1667
|
for (const systemModel of newSystemModels) {
|
1696
1668
|
const exists = currentSystemModels.find(matchSystemModels.bind(null, systemModel));
|
1697
1669
|
if (exists) continue;
|
1698
|
-
handleSystemModel(
|
1699
|
-
models,
|
1700
|
-
dependencyStatements,
|
1701
|
-
"create",
|
1702
|
-
inlineDefaults,
|
1703
|
-
systemModel
|
1704
|
-
);
|
1670
|
+
handleSystemModel(models, dependencyStatements, "create", systemModel);
|
1705
1671
|
}
|
1706
1672
|
};
|
1707
|
-
var transformMetaQuery = (models, dependencyStatements, statementParams, query
|
1673
|
+
var transformMetaQuery = (models, dependencyStatements, statementParams, query) => {
|
1708
1674
|
const { queryType } = splitQuery(query);
|
1709
1675
|
const subAltering = "alter" in query && query.alter && !("to" in query.alter);
|
1710
1676
|
const action = subAltering && query.alter ? Object.keys(query.alter).filter((key) => key !== "model")[0] : queryType;
|
@@ -1777,9 +1743,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query,
|
|
1777
1743
|
}
|
1778
1744
|
}
|
1779
1745
|
};
|
1780
|
-
transformMetaQuery(models, dependencyStatements, null, query2
|
1781
|
-
inlineDefaults: options.inlineDefaults
|
1782
|
-
});
|
1746
|
+
transformMetaQuery(models, dependencyStatements, null, query2);
|
1783
1747
|
}
|
1784
1748
|
}
|
1785
1749
|
const modelWithObjects = Object.assign({}, modelWithPresets);
|
@@ -1789,13 +1753,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query,
|
|
1789
1753
|
}
|
1790
1754
|
queryTypeDetails = { with: modelWithObjects };
|
1791
1755
|
getSystemModels(models, modelWithPresets).map((systemModel) => {
|
1792
|
-
return handleSystemModel(
|
1793
|
-
models,
|
1794
|
-
dependencyStatements,
|
1795
|
-
"create",
|
1796
|
-
options.inlineDefaults,
|
1797
|
-
systemModel
|
1798
|
-
);
|
1756
|
+
return handleSystemModel(models, dependencyStatements, "create", systemModel);
|
1799
1757
|
});
|
1800
1758
|
}
|
1801
1759
|
if (action === "alter" && model) {
|
@@ -1818,26 +1776,14 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query,
|
|
1818
1776
|
},
|
1819
1777
|
to: modelWithPresets
|
1820
1778
|
};
|
1821
|
-
handleSystemModels(
|
1822
|
-
models,
|
1823
|
-
dependencyStatements,
|
1824
|
-
modelBeforeUpdate2,
|
1825
|
-
model,
|
1826
|
-
options.inlineDefaults
|
1827
|
-
);
|
1779
|
+
handleSystemModels(models, dependencyStatements, modelBeforeUpdate2, model);
|
1828
1780
|
}
|
1829
1781
|
if (action === "drop" && model) {
|
1830
1782
|
models.splice(models.indexOf(model), 1);
|
1831
1783
|
dependencyStatements.push({ statement: `DROP TABLE "${model.table}"`, params: [] });
|
1832
1784
|
queryTypeDetails = { with: { slug } };
|
1833
1785
|
models.filter(({ system }) => system?.model === model.id).map((systemModel) => {
|
1834
|
-
return handleSystemModel(
|
1835
|
-
models,
|
1836
|
-
dependencyStatements,
|
1837
|
-
"drop",
|
1838
|
-
options.inlineDefaults,
|
1839
|
-
systemModel
|
1840
|
-
);
|
1786
|
+
return handleSystemModel(models, dependencyStatements, "drop", systemModel);
|
1841
1787
|
});
|
1842
1788
|
}
|
1843
1789
|
const modelSlug2 = "to" in queryTypeDetails ? queryTypeDetails?.to?.slug : "with" in queryTypeDetails ? queryTypeDetails?.with?.slug : void 0;
|
@@ -1985,8 +1931,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query,
|
|
1985
1931
|
const effectStatements = trigger.effects.map((effectQuery) => {
|
1986
1932
|
return compileQueryInput(effectQuery, models, null, {
|
1987
1933
|
returning: false,
|
1988
|
-
parentModel: existingModel
|
1989
|
-
inlineDefaults: options.inlineDefaults
|
1934
|
+
parentModel: existingModel
|
1990
1935
|
}).main.statement;
|
1991
1936
|
});
|
1992
1937
|
statementParts.push("BEGIN");
|
@@ -2021,13 +1966,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query,
|
|
2021
1966
|
targetEntity.splice(targetEntityIndex, 1);
|
2022
1967
|
}
|
2023
1968
|
}
|
2024
|
-
handleSystemModels(
|
2025
|
-
models,
|
2026
|
-
dependencyStatements,
|
2027
|
-
modelBeforeUpdate,
|
2028
|
-
existingModel,
|
2029
|
-
options.inlineDefaults
|
2030
|
-
);
|
1969
|
+
handleSystemModels(models, dependencyStatements, modelBeforeUpdate, existingModel);
|
2031
1970
|
return {
|
2032
1971
|
set: {
|
2033
1972
|
model: {
|
@@ -2090,9 +2029,7 @@ var Transaction = class {
|
|
2090
2029
|
const { dependencies, main, selectedFields } = compileQueryInput(
|
2091
2030
|
query,
|
2092
2031
|
modelsWithPresets,
|
2093
|
-
options?.inlineParams ? null : []
|
2094
|
-
// biome-ignore lint/complexity/useSimplifiedLogicExpression: This is needed.
|
2095
|
-
{ inlineDefaults: options?.inlineDefaults || false }
|
2032
|
+
options?.inlineParams ? null : []
|
2096
2033
|
);
|
2097
2034
|
const preDependencies = dependencies.filter(({ after }) => !after);
|
2098
2035
|
const postDependencies = dependencies.map(({ after, ...rest }) => after ? rest : null).filter((item) => item != null);
|