@ronin/compiler 0.9.0 → 0.10.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 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": {