@ronin/compiler 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -52,6 +52,9 @@ const transaction = new Transaction([
52
52
 
53
53
  transaction.statements;
54
54
  // [{
55
+ // statement: 'CREATE TABLE "accounts" ...',
56
+ // params: []
57
+ // }, {
55
58
  // statement: 'SELECT * FROM "accounts"',
56
59
  // params: [],
57
60
  // returning: true,
package/dist/index.d.ts CHANGED
@@ -5919,6 +5919,10 @@ type ModelTriggerField<T extends Array<ModelField> = Array<ModelField>> = {
5919
5919
  slug: T[number]['slug'];
5920
5920
  };
5921
5921
  type ModelTrigger<T extends Array<ModelField> = Array<ModelField>> = {
5922
+ /**
5923
+ * The identifier of the trigger.
5924
+ */
5925
+ slug?: string;
5922
5926
  /** The type of query for which the trigger should fire. */
5923
5927
  action: 'INSERT' | 'UPDATE' | 'DELETE';
5924
5928
  /** When the trigger should fire in the case that a matching query is executed. */
@@ -5957,17 +5961,25 @@ interface Model<T extends Array<ModelField> = Array<ModelField>> {
5957
5961
  */
5958
5962
  tableAlias?: string;
5959
5963
  /**
5960
- * If the model is used to associate two models with each other (in the case of
5961
- * many-cardinality link fields), this property should contain the field slug to which
5962
- * the associative model should be mounted on the source model.
5964
+ * Details that identify the model as a model that was automatically created by RONIN,
5965
+ * instead of being manually created by a developer.
5963
5966
  */
5964
- associationSlug?: string;
5967
+ system?: {
5968
+ /** The model that caused the system model to get created. */
5969
+ model: string | 'root';
5970
+ /**
5971
+ * If the model is used to associate two models with each other (in the case of
5972
+ * many-cardinality link fields), this property should contain the field slug to
5973
+ * which the associative model should be mounted on the source model.
5974
+ */
5975
+ associationSlug?: string;
5976
+ };
5965
5977
  fields: T;
5966
5978
  indexes?: Array<ModelIndex<T>>;
5967
5979
  triggers?: Array<ModelTrigger<T>>;
5968
5980
  presets?: Array<ModelPreset>;
5969
5981
  }
5970
- type PublicModel<T extends Array<ModelField> = Array<ModelField>> = Omit<Partial<Model<T>>, 'slug' | 'identifiers' | 'associationSlug' | 'table' | 'tableAlias'> & {
5982
+ type PublicModel<T extends Array<ModelField> = Array<ModelField>> = Omit<Partial<Model<T>>, 'slug' | 'identifiers' | 'system' | 'table' | 'tableAlias'> & {
5971
5983
  slug: Required<Model['slug']>;
5972
5984
  identifiers?: Partial<Model['identifiers']>;
5973
5985
  };
package/dist/index.js CHANGED
@@ -20,6 +20,12 @@ var RONIN_MODEL_FIELD_REGEX = new RegExp(
20
20
  `${RONIN_MODEL_SYMBOLS.FIELD}[_a-zA-Z0-9]+`,
21
21
  "g"
22
22
  );
23
+ var MODEL_ENTITY_ERROR_CODES = {
24
+ field: "FIELD_NOT_FOUND",
25
+ index: "INDEX_NOT_FOUND",
26
+ trigger: "TRIGGER_NOT_FOUND",
27
+ preset: "PRESET_NOT_FOUND"
28
+ };
23
29
  var RoninError = class extends Error {
24
30
  code;
25
31
  field;
@@ -459,67 +465,67 @@ var SYSTEM_FIELDS = [
459
465
  slug: "ronin.updatedBy"
460
466
  }
461
467
  ];
462
- var SYSTEM_MODELS = [
463
- {
464
- slug: "model",
465
- identifiers: {
466
- name: "name",
467
- slug: "slug"
468
- },
469
- // This name mimics the `sqlite_schema` table in SQLite.
470
- table: "ronin_schema",
471
- fields: [
472
- { slug: "name", type: "string" },
473
- { slug: "pluralName", type: "string" },
474
- { slug: "slug", type: "string" },
475
- { slug: "pluralSlug", type: "string" },
476
- { slug: "idPrefix", type: "string" },
477
- { slug: "table", type: "string" },
478
- { slug: "identifiers", type: "group" },
479
- { slug: "identifiers.name", type: "string" },
480
- { slug: "identifiers.slug", type: "string" },
481
- // Providing an empty object as a default value allows us to use `json_insert`
482
- // without needing to fall back to an empty object in the insertion statement,
483
- // which makes the statement shorter.
484
- { slug: "fields", type: "json", defaultValue: "{}" },
485
- { slug: "indexes", type: "json", defaultValue: "{}" },
486
- { slug: "triggers", type: "json", defaultValue: "{}" },
487
- { slug: "presets", type: "json", defaultValue: "{}" }
488
- ]
489
- }
490
- ];
491
- var addSystemModels = (models) => {
492
- const associativeModels = models.flatMap((model) => {
493
- const addedModels = [];
494
- for (const field of model.fields || []) {
495
- if (field.type === "link" && !field.slug.startsWith("ronin.")) {
496
- const relatedModel = getModelBySlug(models, field.target);
497
- let fieldSlug = relatedModel.slug;
498
- if (field.kind === "many") {
499
- fieldSlug = composeAssociationModelSlug(model, field);
500
- addedModels.push({
501
- pluralSlug: fieldSlug,
502
- slug: fieldSlug,
503
- associationSlug: field.slug,
504
- fields: [
505
- {
506
- slug: "source",
507
- type: "link",
508
- target: model.slug
509
- },
510
- {
511
- slug: "target",
512
- type: "link",
513
- target: relatedModel.slug
514
- }
515
- ]
516
- });
517
- }
468
+ var ROOT_MODEL = {
469
+ slug: "model",
470
+ identifiers: {
471
+ name: "name",
472
+ slug: "slug"
473
+ },
474
+ // This name mimics the `sqlite_schema` table in SQLite.
475
+ table: "ronin_schema",
476
+ // Indicates that the model was automatically generated by RONIN.
477
+ system: { model: "root" },
478
+ fields: [
479
+ { slug: "name", type: "string" },
480
+ { slug: "pluralName", type: "string" },
481
+ { slug: "slug", type: "string" },
482
+ { slug: "pluralSlug", type: "string" },
483
+ { slug: "idPrefix", type: "string" },
484
+ { slug: "table", type: "string" },
485
+ { slug: "identifiers", type: "group" },
486
+ { slug: "identifiers.name", type: "string" },
487
+ { slug: "identifiers.slug", type: "string" },
488
+ // Providing an empty object as a default value allows us to use `json_insert`
489
+ // without needing to fall back to an empty object in the insertion statement,
490
+ // which makes the statement shorter.
491
+ { slug: "fields", type: "json", defaultValue: "{}" },
492
+ { slug: "indexes", type: "json", defaultValue: "{}" },
493
+ { slug: "triggers", type: "json", defaultValue: "{}" },
494
+ { slug: "presets", type: "json", defaultValue: "{}" }
495
+ ]
496
+ };
497
+ var getSystemModels = (models, model) => {
498
+ const addedModels = [];
499
+ for (const field of model.fields || []) {
500
+ if (field.type === "link" && !field.slug.startsWith("ronin.")) {
501
+ const relatedModel = getModelBySlug(models, field.target);
502
+ let fieldSlug = relatedModel.slug;
503
+ if (field.kind === "many") {
504
+ fieldSlug = composeAssociationModelSlug(model, field);
505
+ addedModels.push({
506
+ pluralSlug: fieldSlug,
507
+ slug: fieldSlug,
508
+ system: {
509
+ model: model.slug,
510
+ associationSlug: field.slug
511
+ },
512
+ fields: [
513
+ {
514
+ slug: "source",
515
+ type: "link",
516
+ target: model.slug
517
+ },
518
+ {
519
+ slug: "target",
520
+ type: "link",
521
+ target: relatedModel.slug
522
+ }
523
+ ]
524
+ });
518
525
  }
519
526
  }
520
- return addedModels;
521
- });
522
- return [...SYSTEM_MODELS, ...associativeModels, ...models];
527
+ }
528
+ return addedModels;
523
529
  };
524
530
  var addDefaultModelPresets = (list, model) => {
525
531
  const defaultPresets = [];
@@ -561,7 +567,7 @@ var addDefaultModelPresets = (list, model) => {
561
567
  for (const childMatch of childModels) {
562
568
  const { model: childModel, field: childField } = childMatch;
563
569
  const pluralSlug = childModel.pluralSlug;
564
- const presetSlug = childModel.associationSlug || pluralSlug;
570
+ const presetSlug = childModel.system?.associationSlug || pluralSlug;
565
571
  defaultPresets.push({
566
572
  instructions: {
567
573
  including: {
@@ -617,6 +623,7 @@ var getFieldStatement = (models, model, field) => {
617
623
  statement += ` GENERATED ALWAYS AS (${parseFieldExpression(model, "to", symbol?.value)}) ${kind}`;
618
624
  }
619
625
  if (field.type === "link") {
626
+ if (field.kind === "many") return null;
620
627
  const actions = field.actions || {};
621
628
  const targetTable = getModelBySlug(models, field.target).table;
622
629
  statement += ` REFERENCES ${targetTable}("id")`;
@@ -641,6 +648,14 @@ var formatModelEntity = (type, entities) => {
641
648
  });
642
649
  return entries ? Object.fromEntries(entries) : void 0;
643
650
  };
651
+ var composeSystemModelStatement = (models, dependencyStatements, action, systemModel) => {
652
+ const { system: _, ...systemModelClean } = systemModel;
653
+ const query = {
654
+ [action]: { model: action === "create" ? systemModelClean : systemModelClean.slug }
655
+ };
656
+ const statement = compileQueryInput(query, models, []);
657
+ dependencyStatements.push(...statement.dependencies);
658
+ };
644
659
  var transformMetaQuery = (models, dependencyStatements, statementParams, query) => {
645
660
  const { queryType } = splitQuery(query);
646
661
  const subAltering = query.alter && !("to" in query.alter);
@@ -669,16 +684,16 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
669
684
  }
670
685
  }
671
686
  if (!(modelSlug && slug)) return query;
672
- const tableAction = ["model", "index", "trigger"].includes(entity) ? action.toUpperCase() : "ALTER";
673
- const tableName = convertToSnakeCase(pluralize(modelSlug));
674
687
  const model = action === "create" && entity === "model" ? null : getModelBySlug(models, modelSlug);
675
- const statement = `${tableAction} TABLE "${tableName}"`;
676
688
  if (entity === "model") {
677
689
  let queryTypeDetails;
678
690
  if (action === "create") {
679
691
  const newModel = jsonValue;
680
692
  const modelWithFields = addDefaultModelFields(newModel, true);
681
- const modelWithPresets = addDefaultModelPresets(models, modelWithFields);
693
+ const modelWithPresets = addDefaultModelPresets(
694
+ [...models, modelWithFields],
695
+ modelWithFields
696
+ );
682
697
  const entities = Object.fromEntries(
683
698
  Object.entries(PLURAL_MODEL_ENTITIES).map(([type, pluralType2]) => {
684
699
  const list = modelWithPresets[pluralType2];
@@ -687,7 +702,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
687
702
  );
688
703
  const columns = modelWithPresets.fields.map((field2) => getFieldStatement(models, modelWithPresets, field2)).filter(Boolean);
689
704
  dependencyStatements.push({
690
- statement: `${statement} (${columns.join(", ")})`,
705
+ statement: `CREATE TABLE "${modelWithPresets.table}" (${columns.join(", ")})`,
691
706
  params: []
692
707
  });
693
708
  models.push(modelWithPresets);
@@ -696,16 +711,23 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
696
711
  if (entities[entity2]) finalModel[entity2] = entities[entity2];
697
712
  }
698
713
  queryTypeDetails = { to: finalModel };
714
+ getSystemModels(models, modelWithPresets).map((systemModel) => {
715
+ return composeSystemModelStatement(
716
+ models,
717
+ dependencyStatements,
718
+ "create",
719
+ systemModel
720
+ );
721
+ });
699
722
  }
700
723
  if (action === "alter" && model) {
701
724
  const newModel = jsonValue;
702
725
  const modelWithFields = addDefaultModelFields(newModel, false);
703
726
  const modelWithPresets = addDefaultModelPresets(models, modelWithFields);
704
- const newSlug = modelWithPresets.pluralSlug;
705
- if (newSlug) {
706
- const newTable = convertToSnakeCase(newSlug);
727
+ const newTableName = modelWithPresets.table;
728
+ if (newTableName) {
707
729
  dependencyStatements.push({
708
- statement: `${statement} RENAME TO "${newTable}"`,
730
+ statement: `ALTER TABLE "${model.table}" RENAME TO "${newTableName}"`,
709
731
  params: []
710
732
  });
711
733
  }
@@ -719,8 +741,16 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
719
741
  }
720
742
  if (action === "drop" && model) {
721
743
  models.splice(models.indexOf(model), 1);
722
- dependencyStatements.push({ statement, params: [] });
744
+ dependencyStatements.push({ statement: `DROP TABLE "${model.table}"`, params: [] });
723
745
  queryTypeDetails = { with: { slug } };
746
+ models.filter(({ system }) => system?.model === model.slug).map((systemModel) => {
747
+ return composeSystemModelStatement(
748
+ models,
749
+ dependencyStatements,
750
+ "drop",
751
+ systemModel
752
+ );
753
+ });
724
754
  }
725
755
  const queryTypeAction = action === "create" ? "add" : action === "alter" ? "set" : "remove";
726
756
  return {
@@ -729,14 +759,30 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
729
759
  }
730
760
  };
731
761
  }
732
- if (entity === "field" && model) {
762
+ const existingModel = model;
763
+ const pluralType = PLURAL_MODEL_ENTITIES[entity];
764
+ const targetEntityIndex = existingModel[pluralType]?.findIndex(
765
+ (entity2) => entity2.slug === slug
766
+ );
767
+ if ((action === "alter" || action === "drop") && (typeof targetEntityIndex === "undefined" || targetEntityIndex === -1)) {
768
+ throw new RoninError({
769
+ message: `No ${entity} with slug "${slug}" defined in model "${existingModel.name}".`,
770
+ code: MODEL_ENTITY_ERROR_CODES[entity]
771
+ });
772
+ }
773
+ const existingEntity = existingModel[pluralType]?.[targetEntityIndex];
774
+ if (entity === "field") {
775
+ const statement = `ALTER TABLE "${existingModel.table}"`;
733
776
  if (action === "create") {
734
777
  const field2 = jsonValue;
735
778
  field2.type = field2.type || "string";
736
- dependencyStatements.push({
737
- statement: `${statement} ADD COLUMN ${getFieldStatement(models, model, field2)}`,
738
- params: []
739
- });
779
+ const fieldStatement = getFieldStatement(models, existingModel, field2);
780
+ if (fieldStatement) {
781
+ dependencyStatements.push({
782
+ statement: `${statement} ADD COLUMN ${fieldStatement}`,
783
+ params: []
784
+ });
785
+ }
740
786
  } else if (action === "alter") {
741
787
  const newSlug = jsonValue?.slug;
742
788
  if (newSlug) {
@@ -746,41 +792,45 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
746
792
  });
747
793
  }
748
794
  } else if (action === "drop") {
749
- dependencyStatements.push({
750
- statement: `${statement} DROP COLUMN "${slug}"`,
751
- params: []
752
- });
795
+ const existingField = existingEntity;
796
+ if (!(existingField.type === "link" && existingField.kind === "many")) {
797
+ dependencyStatements.push({
798
+ statement: `${statement} DROP COLUMN "${slug}"`,
799
+ params: []
800
+ });
801
+ }
753
802
  }
754
803
  }
755
- if (entity === "index" && model) {
804
+ const statementAction = action.toUpperCase();
805
+ if (entity === "index") {
756
806
  const index = jsonValue;
757
807
  const indexName = convertToSnakeCase(slug);
758
808
  const params = [];
759
- let statement2 = `${tableAction}${index?.unique ? " UNIQUE" : ""} INDEX "${indexName}"`;
809
+ let statement = `${statementAction}${index?.unique ? " UNIQUE" : ""} INDEX "${indexName}"`;
760
810
  if (action === "create") {
761
811
  const columns = index.fields.map((field2) => {
762
812
  let fieldSelector = "";
763
813
  if ("slug" in field2) {
764
- ({ fieldSelector } = getFieldFromModel(model, field2.slug, "to"));
814
+ ({ fieldSelector } = getFieldFromModel(existingModel, field2.slug, "to"));
765
815
  } else if ("expression" in field2) {
766
- fieldSelector = parseFieldExpression(model, "to", field2.expression);
816
+ fieldSelector = parseFieldExpression(existingModel, "to", field2.expression);
767
817
  }
768
818
  if (field2.collation) fieldSelector += ` COLLATE ${field2.collation}`;
769
819
  if (field2.order) fieldSelector += ` ${field2.order}`;
770
820
  return fieldSelector;
771
821
  });
772
- statement2 += ` ON "${tableName}" (${columns.join(", ")})`;
822
+ statement += ` ON "${existingModel.table}" (${columns.join(", ")})`;
773
823
  if (index.filter) {
774
- const withStatement = handleWith(models, model, params, index.filter);
775
- statement2 += ` WHERE (${withStatement})`;
824
+ const withStatement = handleWith(models, existingModel, params, index.filter);
825
+ statement += ` WHERE (${withStatement})`;
776
826
  }
777
827
  }
778
- dependencyStatements.push({ statement: statement2, params });
828
+ dependencyStatements.push({ statement, params });
779
829
  }
780
- if (entity === "trigger" && model) {
830
+ if (entity === "trigger") {
781
831
  const triggerName = convertToSnakeCase(slug);
782
832
  const params = [];
783
- let statement2 = `${tableAction} TRIGGER "${triggerName}"`;
833
+ let statement = `${statementAction} TRIGGER "${triggerName}"`;
784
834
  if (action === "create") {
785
835
  const trigger = jsonValue;
786
836
  const statementParts = [`${trigger.when} ${trigger.action}`];
@@ -793,11 +843,11 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
793
843
  });
794
844
  }
795
845
  const fieldSelectors = trigger.fields.map((field2) => {
796
- return getFieldFromModel(model, field2.slug, "to").fieldSelector;
846
+ return getFieldFromModel(existingModel, field2.slug, "to").fieldSelector;
797
847
  });
798
848
  statementParts.push(`OF (${fieldSelectors.join(", ")})`);
799
849
  }
800
- statementParts.push("ON", `"${tableName}"`);
850
+ statementParts.push("ON", `"${existingModel.table}"`);
801
851
  if (trigger.filter || trigger.effects.some((query2) => findInObject(query2, RONIN_MODEL_SYMBOLS.FIELD))) {
802
852
  statementParts.push("FOR EACH ROW");
803
853
  }
@@ -805,7 +855,7 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
805
855
  const tableAlias = trigger.action === "DELETE" ? RONIN_MODEL_SYMBOLS.FIELD_PARENT_OLD : RONIN_MODEL_SYMBOLS.FIELD_PARENT_NEW;
806
856
  const withStatement = handleWith(
807
857
  models,
808
- { ...model, tableAlias },
858
+ { ...existingModel, tableAlias },
809
859
  params,
810
860
  trigger.filter
811
861
  );
@@ -814,34 +864,55 @@ var transformMetaQuery = (models, dependencyStatements, statementParams, query)
814
864
  const effectStatements = trigger.effects.map((effectQuery) => {
815
865
  return compileQueryInput(effectQuery, models, params, {
816
866
  returning: false,
817
- parentModel: model
867
+ parentModel: existingModel
818
868
  }).main.statement;
819
869
  });
820
870
  if (effectStatements.length > 1) statementParts.push("BEGIN");
821
871
  statementParts.push(effectStatements.join("; "));
822
872
  if (effectStatements.length > 1) statementParts.push("END");
823
- statement2 += ` ${statementParts.join(" ")}`;
873
+ statement += ` ${statementParts.join(" ")}`;
824
874
  }
825
- dependencyStatements.push({ statement: statement2, params });
875
+ dependencyStatements.push({ statement, params });
826
876
  }
827
- const pluralType = PLURAL_MODEL_ENTITIES[entity];
828
877
  const field = `${RONIN_MODEL_SYMBOLS.FIELD}${pluralType}`;
829
878
  let json;
830
879
  switch (action) {
831
880
  case "create": {
832
881
  const value = prepareStatementValue(statementParams, jsonValue);
833
882
  json = `json_insert(${field}, '$.${slug}', ${value})`;
883
+ existingModel[pluralType] = [
884
+ ...existingModel[pluralType] || [],
885
+ jsonValue
886
+ ];
834
887
  break;
835
888
  }
836
889
  case "alter": {
837
890
  const value = prepareStatementValue(statementParams, jsonValue);
838
891
  json = `json_set(${field}, '$.${slug}', json_patch(json_extract(${field}, '$.${slug}'), ${value}))`;
892
+ const targetEntity = existingModel[pluralType];
893
+ targetEntity[targetEntityIndex] = jsonValue;
839
894
  break;
840
895
  }
841
896
  case "drop": {
842
897
  json = `json_remove(${field}, '$.${slug}')`;
898
+ const targetEntity = existingModel[pluralType];
899
+ targetEntity.splice(targetEntityIndex, 1);
843
900
  }
844
901
  }
902
+ const currentSystemModels = models.filter(({ system }) => {
903
+ return system?.model === existingModel.slug;
904
+ });
905
+ const newSystemModels = getSystemModels(models, existingModel);
906
+ for (const systemModel of currentSystemModels) {
907
+ const exists = newSystemModels.find((model2) => model2.slug === systemModel.slug);
908
+ if (exists) continue;
909
+ composeSystemModelStatement(models, dependencyStatements, "drop", systemModel);
910
+ }
911
+ for (const systemModel of newSystemModels) {
912
+ const exists = currentSystemModels.find((model2) => model2.slug === systemModel.slug);
913
+ if (exists) continue;
914
+ composeSystemModelStatement(models, dependencyStatements, "create", systemModel);
915
+ }
845
916
  return {
846
917
  set: {
847
918
  model: {
@@ -1212,13 +1283,19 @@ var handleTo = (models, model, statementParams, queryType, dependencyStatements,
1212
1283
  };
1213
1284
 
1214
1285
  // src/utils/index.ts
1215
- var compileQueryInput = (query, models, statementParams, options) => {
1286
+ var compileQueryInput = (defaultQuery, models, statementParams, options) => {
1287
+ const dependencyStatements = [];
1288
+ const query = transformMetaQuery(
1289
+ models,
1290
+ dependencyStatements,
1291
+ statementParams,
1292
+ defaultQuery
1293
+ );
1216
1294
  const parsedQuery = splitQuery(query);
1217
1295
  const { queryType, queryModel, queryInstructions } = parsedQuery;
1218
1296
  const model = getModelBySlug(models, queryModel);
1219
1297
  const single = queryModel !== model.pluralSlug;
1220
1298
  let instructions = formatIdentifiers(model, queryInstructions);
1221
- const dependencyStatements = [];
1222
1299
  const returning = options?.returning ?? true;
1223
1300
  if (instructions && Object.hasOwn(instructions, "for")) {
1224
1301
  instructions = handleFor(model, instructions);
@@ -1370,7 +1447,11 @@ var Transaction = class {
1370
1447
  * @returns The composed SQL statements.
1371
1448
  */
1372
1449
  compileQueries = (queries, models, options) => {
1373
- const modelList = addSystemModels(models).map((model) => {
1450
+ const modelList = [
1451
+ ROOT_MODEL,
1452
+ ...models.flatMap((model) => getSystemModels(models, model)),
1453
+ ...models
1454
+ ].map((model) => {
1374
1455
  return addDefaultModelFields(model, true);
1375
1456
  });
1376
1457
  const modelListWithPresets = modelList.map((model) => {
@@ -1379,17 +1460,10 @@ var Transaction = class {
1379
1460
  const dependencyStatements = [];
1380
1461
  const mainStatements = [];
1381
1462
  for (const query of queries) {
1382
- const statementValues = options?.inlineParams ? null : [];
1383
- const transformedQuery = transformMetaQuery(
1384
- modelListWithPresets,
1385
- dependencyStatements,
1386
- statementValues,
1387
- query
1388
- );
1389
1463
  const result = compileQueryInput(
1390
- transformedQuery,
1464
+ query,
1391
1465
  modelListWithPresets,
1392
- statementValues
1466
+ options?.inlineParams ? null : []
1393
1467
  );
1394
1468
  dependencyStatements.push(...result.dependencies);
1395
1469
  mainStatements.push(result.main);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ronin/compiler",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "description": "Compiles RONIN queries to SQL statements.",
6
6
  "publishConfig": {