@ronin/compiler 0.11.0 → 0.11.1
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.d.ts +4 -1
- package/dist/index.js +55 -22
- package/package.json +1 -1
    
        package/dist/index.d.ts
    CHANGED
    
    | @@ -5989,8 +5989,11 @@ type ObjectRow = Record<string, unknown>; | |
| 5989 5989 | 
             
            type NativeRecord = Record<string, unknown> & {
         | 
| 5990 5990 | 
             
                id: string;
         | 
| 5991 5991 | 
             
                ronin: {
         | 
| 5992 | 
            +
                    locked: boolean;
         | 
| 5992 5993 | 
             
                    createdAt: Date;
         | 
| 5994 | 
            +
                    createdBy: string | null;
         | 
| 5993 5995 | 
             
                    updatedAt: Date;
         | 
| 5996 | 
            +
                    updatedBy: string | null;
         | 
| 5994 5997 | 
             
                };
         | 
| 5995 5998 | 
             
            };
         | 
| 5996 5999 | 
             
            type SingleRecordResult = {
         | 
| @@ -6072,7 +6075,7 @@ declare class Transaction { | |
| 6072 6075 | 
             
                 * @returns The composed SQL statements.
         | 
| 6073 6076 | 
             
                 */
         | 
| 6074 6077 | 
             
                private compileQueries;
         | 
| 6075 | 
            -
                private  | 
| 6078 | 
            +
                private formatRows;
         | 
| 6076 6079 | 
             
                formatResults(results: Array<Array<RawRow>>, raw?: true): Array<Result>;
         | 
| 6077 6080 | 
             
                formatResults(results: Array<Array<ObjectRow>>, raw?: false): Array<Result>;
         | 
| 6078 6081 | 
             
            }
         | 
    
        package/dist/index.js
    CHANGED
    
    | @@ -131,6 +131,25 @@ var expand = (obj) => { | |
| 131 131 | 
             
            var getProperty = (obj, path) => {
         | 
| 132 132 | 
             
              return path.split(".").reduce((acc, key) => acc?.[key], obj);
         | 
| 133 133 | 
             
            };
         | 
| 134 | 
            +
            var setProperty = (obj, path, value) => {
         | 
| 135 | 
            +
              if (!obj) return setProperty({}, path, value);
         | 
| 136 | 
            +
              const segments = path.split(/[.[\]]/g).filter((x) => !!x.trim());
         | 
| 137 | 
            +
              const _set = (node) => {
         | 
| 138 | 
            +
                if (segments.length > 1) {
         | 
| 139 | 
            +
                  const key = segments.shift();
         | 
| 140 | 
            +
                  const nextIsNum = !Number.isNaN(Number.parseInt(segments[0]));
         | 
| 141 | 
            +
                  if (typeof node[key] !== "object" || node[key] === null) {
         | 
| 142 | 
            +
                    node[key] = nextIsNum ? [] : {};
         | 
| 143 | 
            +
                  }
         | 
| 144 | 
            +
                  _set(node[key]);
         | 
| 145 | 
            +
                } else {
         | 
| 146 | 
            +
                  node[segments[0]] = value;
         | 
| 147 | 
            +
                }
         | 
| 148 | 
            +
              };
         | 
| 149 | 
            +
              const cloned = structuredClone(obj);
         | 
| 150 | 
            +
              _set(cloned);
         | 
| 151 | 
            +
              return cloned;
         | 
| 152 | 
            +
            };
         | 
| 134 153 | 
             
            var splitQuery = (query) => {
         | 
| 135 154 | 
             
              const queryType = Object.keys(query)[0];
         | 
| 136 155 | 
             
              const queryModel = Object.keys(query[queryType])[0];
         | 
| @@ -1131,11 +1150,10 @@ var handleIncluding = (models, model, statementParams, instruction) => { | |
| 1131 1150 | 
             
                  relatedTableSelector = `(${subSelect.main.statement})`;
         | 
| 1132 1151 | 
             
                }
         | 
| 1133 1152 | 
             
                statement += `${joinType} JOIN ${relatedTableSelector} as ${tableAlias}`;
         | 
| 1134 | 
            -
                model.tableAlias = model.table;
         | 
| 1153 | 
            +
                model.tableAlias = model.tableAlias || model.table;
         | 
| 1135 1154 | 
             
                if (joinType === "LEFT") {
         | 
| 1136 1155 | 
             
                  if (!single) {
         | 
| 1137 1156 | 
             
                    tableSubQuery = `SELECT * FROM "${model.table}" LIMIT 1`;
         | 
| 1138 | 
            -
                    model.tableAlias = `sub_${model.table}`;
         | 
| 1139 1157 | 
             
                  }
         | 
| 1140 1158 | 
             
                  const subStatement = composeConditions(
         | 
| 1141 1159 | 
             
                    models,
         | 
| @@ -1203,7 +1221,11 @@ var handleSelecting = (models, model, statementParams, instructions, options) => | |
| 1203 1221 | 
             
                    isJoining = true;
         | 
| 1204 1222 | 
             
                    const { queryModel, queryInstructions } = splitQuery(symbol.value);
         | 
| 1205 1223 | 
             
                    const subQueryModel = getModelBySlug(models, queryModel);
         | 
| 1206 | 
            -
                    const  | 
| 1224 | 
            +
                    const tableAlias = composeIncludedTableAlias(key);
         | 
| 1225 | 
            +
                    const single = queryModel !== subQueryModel.pluralSlug;
         | 
| 1226 | 
            +
                    if (!single) {
         | 
| 1227 | 
            +
                      model.tableAlias = `sub_${model.table}`;
         | 
| 1228 | 
            +
                    }
         | 
| 1207 1229 | 
             
                    const queryModelFields = queryInstructions?.selecting ? subQueryModel.fields.filter((field) => {
         | 
| 1208 1230 | 
             
                      return queryInstructions.selecting?.includes(field.slug);
         | 
| 1209 1231 | 
             
                    }) : subQueryModel.fields;
         | 
| @@ -1211,11 +1233,11 @@ var handleSelecting = (models, model, statementParams, instructions, options) => | |
| 1211 1233 | 
             
                      loadedFields.push({ ...field, parentField: key });
         | 
| 1212 1234 | 
             
                      if (options?.expandColumns) {
         | 
| 1213 1235 | 
             
                        const newValue2 = parseFieldExpression(
         | 
| 1214 | 
            -
                          { ...subQueryModel, tableAlias | 
| 1236 | 
            +
                          { ...subQueryModel, tableAlias },
         | 
| 1215 1237 | 
             
                          "including",
         | 
| 1216 1238 | 
             
                          `${QUERY_SYMBOLS.FIELD}${field.slug}`
         | 
| 1217 1239 | 
             
                        );
         | 
| 1218 | 
            -
                        instructions.including[`${ | 
| 1240 | 
            +
                        instructions.including[`${tableAlias}.${field.slug}`] = newValue2;
         | 
| 1219 1241 | 
             
                      }
         | 
| 1220 1242 | 
             
                    }
         | 
| 1221 1243 | 
             
                    continue;
         | 
| @@ -1578,23 +1600,34 @@ var Transaction = class { | |
| 1578 1600 | 
             
                this.models = modelListWithPresets;
         | 
| 1579 1601 | 
             
                return [...dependencyStatements, ...mainStatements];
         | 
| 1580 1602 | 
             
              };
         | 
| 1581 | 
            -
               | 
| 1582 | 
            -
                const  | 
| 1583 | 
            -
                for (let  | 
| 1584 | 
            -
                  const  | 
| 1585 | 
            -
                   | 
| 1586 | 
            -
             | 
| 1587 | 
            -
             | 
| 1588 | 
            -
             | 
| 1589 | 
            -
             | 
| 1590 | 
            -
                     | 
| 1591 | 
            -
             | 
| 1592 | 
            -
             | 
| 1593 | 
            -
             | 
| 1603 | 
            +
              formatRows(fields, rows, single) {
         | 
| 1604 | 
            +
                const records = [];
         | 
| 1605 | 
            +
                for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
         | 
| 1606 | 
            +
                  const row = rows[rowIndex];
         | 
| 1607 | 
            +
                  for (let valueIndex = 0; valueIndex < row.length; valueIndex++) {
         | 
| 1608 | 
            +
                    const value = row[valueIndex];
         | 
| 1609 | 
            +
                    const field = fields[valueIndex];
         | 
| 1610 | 
            +
                    let newSlug = field.slug;
         | 
| 1611 | 
            +
                    let newValue = value;
         | 
| 1612 | 
            +
                    if (field.type === "json") {
         | 
| 1613 | 
            +
                      newValue = JSON.parse(value);
         | 
| 1614 | 
            +
                    } else if (field.type === "boolean") {
         | 
| 1615 | 
            +
                      newValue = Boolean(value);
         | 
| 1616 | 
            +
                    }
         | 
| 1617 | 
            +
                    const parentFieldSlug = field.parentField;
         | 
| 1618 | 
            +
                    let usableRowIndex = rowIndex;
         | 
| 1619 | 
            +
                    if (parentFieldSlug) {
         | 
| 1620 | 
            +
                      if (rows.length === 1) {
         | 
| 1621 | 
            +
                        newSlug = `${parentFieldSlug}.${field.slug}`;
         | 
| 1622 | 
            +
                      } else {
         | 
| 1623 | 
            +
                        newSlug = `${parentFieldSlug}[${rowIndex}].${field.slug}`;
         | 
| 1624 | 
            +
                        usableRowIndex = 0;
         | 
| 1625 | 
            +
                      }
         | 
| 1626 | 
            +
                    }
         | 
| 1627 | 
            +
                    records[usableRowIndex] = setProperty(records[usableRowIndex], newSlug, newValue);
         | 
| 1594 1628 | 
             
                  }
         | 
| 1595 | 
            -
                  record[newSlug] = newValue;
         | 
| 1596 1629 | 
             
                }
         | 
| 1597 | 
            -
                return  | 
| 1630 | 
            +
                return single ? records[0] : records;
         | 
| 1598 1631 | 
             
              }
         | 
| 1599 1632 | 
             
              /**
         | 
| 1600 1633 | 
             
               * Format the results returned from the database into RONIN records.
         | 
| @@ -1629,11 +1662,11 @@ var Transaction = class { | |
| 1629 1662 | 
             
                  }
         | 
| 1630 1663 | 
             
                  const single = queryModel !== model.pluralSlug;
         | 
| 1631 1664 | 
             
                  if (single) {
         | 
| 1632 | 
            -
                    return { record: this. | 
| 1665 | 
            +
                    return { record: rows[0] ? this.formatRows(fields, rows, single) : null };
         | 
| 1633 1666 | 
             
                  }
         | 
| 1634 1667 | 
             
                  const pageSize = queryInstructions?.limitedTo;
         | 
| 1635 1668 | 
             
                  const output = {
         | 
| 1636 | 
            -
                    records:  | 
| 1669 | 
            +
                    records: this.formatRows(fields, rows, single)
         | 
| 1637 1670 | 
             
                  };
         | 
| 1638 1671 | 
             
                  if (pageSize && output.records.length > 0) {
         | 
| 1639 1672 | 
             
                    if (queryInstructions?.before || queryInstructions?.after) {
         |