@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 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, inlineDefaults: options.inlineDefaults }
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, inlineDefaults: options.inlineDefaults }
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 = { inlineDefaults: false }) => {
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, options) => {
460
+ var handleTo = (models, model, statementParams, queryType, dependencyStatements, instructions, parentModel) => {
470
461
  const { with: withInstruction, to: toInstruction } = instructions;
471
462
  const defaultFields = {};
472
- const inlineDefaultInsertionFields = queryType === "add" && options?.inlineDefaults;
473
- if (inlineDefaultInsertionFields) {
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" || inlineDefaultInsertionFields ? { updatedAt: CURRENT_TIME_EXPRESSION } : {},
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
- // biome-ignore lint/complexity/useSimplifiedLogicExpression: This is needed.
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: options?.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: options?.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: ID_EXPRESSION(idPrefix)
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, inlineDefaults, systemModel, newModel) => {
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, [], { inlineDefaults });
1634
+ const statement = compileQueryInput(query, models, []);
1656
1635
  dependencyStatements.push(...statement.dependencies);
1657
1636
  };
1658
- var handleSystemModels = (models, dependencyStatements, previousModel, newModel, inlineDefaults) => {
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", inlineDefaults, systemModel);
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, options) => {
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ronin/compiler",
3
- "version": "0.16.4-leo-ron-1099-1-experimental-372",
3
+ "version": "0.16.4",
4
4
  "type": "module",
5
5
  "description": "Compiles RONIN queries to SQL statements.",
6
6
  "publishConfig": {