tests/pagination-cursor-multifield.test.js:421:    it.skip('should maintain stable sorting with custom id property', async () => {
plugins/core/rest-api-plugin-methods/get-relationship.js:39:      fields: { [scopeName]: vars.idProperty || 'id' }
plugins/core/rest-api-plugin-methods/get-related.js:95:          fields: { [scopeName]: vars.idProperty || 'id' } // Only fetch parent ID to minimize data
tests/computed-fields.test.js:306:      // Should only have id property (minimal object)
plugins/core/rest-api-plugin.js:67:    vars.idProperty = restApiOptions.idProperty || 'id'
plugins/core/rest-api-label-plugin.js:51:        const idProp = schemaInfo.idProperty || 'id'
tests/fixtures/api-configs.js:1498: * Creates an API with custom idProperty for all resources to test idProperty functionality
tests/fixtures/api-configs.js:1534:  // Countries table with custom idProperty
tests/fixtures/api-configs.js:1546:    idProperty: 'country_id'  // Custom ID property
tests/fixtures/api-configs.js:1551:  // Publishers table with custom idProperty
tests/fixtures/api-configs.js:1566:    idProperty: 'publisher_id'
tests/fixtures/api-configs.js:1571:  // Authors table with custom idProperty
tests/fixtures/api-configs.js:1587:    idProperty: 'author_id'
tests/fixtures/api-configs.js:1592:  // Books table with custom idProperty
tests/fixtures/api-configs.js:1611:    idProperty: 'book_id'
tests/fixtures/api-configs.js:1616:  // Book-Authors pivot table with custom idProperty
tests/fixtures/api-configs.js:1625:    idProperty: 'book_author_id'
tests/fixtures/api-configs.js:1630:  // Polymorphic reviews with custom idProperty
tests/fixtures/api-configs.js:1652:    idProperty: 'review_id'
tests/fixtures/api-configs.js:1726:    idProperty: 'item_id',
plugins/core/rest-api-access.js:37:      const idProperty = schemaInfo?.idProperty || 'id'
plugins/core/rest-api-access.js:43:      if (field === idProperty) {
plugins/core/rest-api-access.js:363:      const idProperty = schemaInfo.idProperty || 'id'
plugins/core/rest-api-access.js:367:      if (field === idProperty) {
plugins/core/lib/dbTablesOperations.js:113: * @param {string} [idProperty='id'] - The name of the ID column
plugins/core/lib/dbTablesOperations.js:123:  const idProperty = schemaInfo.idProperty
plugins/core/lib/dbTablesOperations.js:127:    // Check if schema has the idProperty field with primary key
plugins/core/lib/dbTablesOperations.js:128:    const hasIdField = tableSchemaStructure[idProperty] && tableSchemaStructure[idProperty].primary === true
plugins/core/lib/dbTablesOperations.js:132:      table.increments(idProperty).primary()
plugins/core/lib/dbTablesOperations.js:138:      if (fieldName === idProperty && !hasIdField && autoIncrement) {
tests/custom-idproperty-relationships.test.js:30:describe('Custom idProperty Relationship Operations', () => {
tests/custom-idproperty-relationships.test.js:32:    // Initialize API with custom idProperty for all resources
tests/custom-idproperty-relationships.test.js:40:  describe('Basic CRUD with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:106:  describe('One-to-One (belongsTo) Relationships with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:215:  describe('Many-to-Many Relationships with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:349:  describe('Polymorphic Relationships with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:459:  describe('Nested Includes with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:566:  describe('Include with Sparse Fieldsets and custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:637:  describe('Include Depth Validation with custom idProperty', () => {
tests/custom-idproperty-relationships.test.js:696:  describe('Complex Scenarios with custom idProperty', () => {
plugins/core/lib/querying/knex-json-api-transformers-querying.js:82:  const idProperty = context.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-json-api-transformers-querying.js:98:    if (!foreignKeys.has(key) && !polymorphicFields.has(key) && !internalFields.has(key) && key !== idProperty) {
plugins/core/lib/querying/knex-json-api-transformers-querying.js:187:      schemaInfo: { schemaRelationships: relationships, idProperty }
plugins/core/lib/querying/knex-json-api-transformers-querying.js:207:      schemaInfo: { idProperty },
plugins/core/lib/querying/knex-json-api-transformers-querying.js:350:      schemaInfo: { schemaInstance, schemaRelationships: relationships, idProperty }
plugins/core/lib/querying/knex-json-api-transformers-querying.js:354:  const idField = idProperty || 'id'
plugins/core/lib/querying/knex-query-helpers.js:270:        const targetIdField = scopes[targetType].vars.schemaInfo.idProperty || 'id'
plugins/core/lib/querying/knex-query-helpers.js:353:            const nextIdField = scopes[nextScope].vars.schemaInfo.idProperty || 'id'
plugins/core/lib/storage/storage-adapter.js:53:  const idColumn = schemaInfo.idProperty || 'id'
plugins/core/lib/querying-writing/knex-field-helpers.js:60: *     schemaInfo: { idProperty: 'id', ...  }
plugins/core/lib/querying-writing/knex-field-helpers.js:70: * //   idProperty: 'id'
plugins/core/lib/querying-writing/knex-field-helpers.js:100: * //   idProperty: 'id'
plugins/core/lib/querying-writing/knex-field-helpers.js:117: * //   idProperty: 'id'
plugins/core/lib/querying-writing/knex-field-helpers.js:156:  const idProperty = context.schemaInfo.idProperty
plugins/core/lib/querying-writing/knex-field-helpers.js:159:  // Handle aliasing if idProperty is not 'id'
plugins/core/lib/querying-writing/knex-field-helpers.js:160:  if (idProperty !== 'id') {
plugins/core/lib/querying-writing/knex-field-helpers.js:161:    fieldsToSelect.add(`${idProperty} as id`)
plugins/core/lib/querying-writing/knex-field-helpers.js:323:    idProperty                                        // Pass idProperty for reference
plugins/core/lib/querying-writing/compile-schemas.js:330:    idProperty: scope.scopeOptions.idProperty || scope.vars.idProperty,
plugins/core/lib/querying-writing/knex-constants.js:23:export const getIdProperty = (schemaInfo) => schemaInfo?.idProperty || 'id'
plugins/core/lib/querying-writing/knex-json-api-transformers.js:101:      schemaInfo: { schemaInstance, schemaRelationships: relationships, idProperty }
plugins/core/lib/querying-writing/knex-json-api-transformers.js:105:  const idField = idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:364: *   - idProperty: string - The ID property name
plugins/core/lib/querying/knex-relationship-includes.js:372:  const { records, scopeName, fieldName, fieldDef, includeName, subIncludes, included, processedPaths, currentPath, fields, idProperty } = scope
plugins/core/lib/querying/knex-relationship-includes.js:410:            self: `${urlPrefix}/${scopeName}/${record[idProperty]}/relationships/${includeName}`,
plugins/core/lib/querying/knex-relationship-includes.js:411:            related: `${urlPrefix}/${scopeName}/${record[idProperty]}/${includeName}`
plugins/core/lib/querying/knex-relationship-includes.js:422:    const targetIdProperty = scopes[targetScope].vars.schemaInfo.idProperty
plugins/core/lib/querying/knex-relationship-includes.js:445:      // If no field selection but custom idProperty, we need to alias it
plugins/core/lib/querying/knex-relationship-includes.js:494:            self: `${urlPrefix}/${scopeName}/${record[idProperty]}/relationships/${includeName}`,
plugins/core/lib/querying/knex-relationship-includes.js:495:            related: `${urlPrefix}/${scopeName}/${record[idProperty]}/${includeName}`
plugins/core/lib/querying/knex-relationship-includes.js:518:            self: `${urlPrefix}/${scopeName}/${record[idProperty]}/relationships/${includeName}`,
plugins/core/lib/querying/knex-relationship-includes.js:519:            related: `${urlPrefix}/${scopeName}/${record[idProperty]}/${includeName}`
plugins/core/lib/querying/knex-relationship-includes.js:532:          { records: targetRecordsToProcess, scopeName: targetScope, includeTree: subIncludes, included, processedPaths, currentPath: nextPath, fields, idProperty: targetIdProperty },
plugins/core/lib/querying/knex-relationship-includes.js:659:      const targetIdProperty = targetScopeObject.vars.schemaInfo.idProperty
plugins/core/lib/querying/knex-relationship-includes.js:693:        const targetIdProperty = scopes[targetScope]?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:726:        const targetIdProperty = scopes[targetScope]?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:733:        // If no field selection but custom idProperty, we need to alias it
plugins/core/lib/querying/knex-relationship-includes.js:833:            { records: targetRecords, scopeName: targetScope, includeTree: subIncludes, included, processedPaths, currentPath: nextPath, fields, idProperty: targetIdProperty },
plugins/core/lib/querying/knex-relationship-includes.js:857:      const targetIdProperty = targetScopeObject.vars.schemaInfo.idProperty
plugins/core/lib/querying/knex-relationship-includes.js:1012:            { records: targetRecords, scopeName: targetScope, includeTree: subIncludes, included, processedPaths, currentPath: nextPath, fields, idProperty: targetIdProperty },
plugins/core/lib/querying/knex-relationship-includes.js:1060:  const idProperty = scopes[scopeName]?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:1061:  const mainIds = [...new Set(records.map(r => r[idProperty]).filter(Boolean))]
plugins/core/lib/querying/knex-relationship-includes.js:1084:  const targetIdProperty = targetScopeObject.vars.schemaInfo.idProperty
plugins/core/lib/querying/knex-relationship-includes.js:1120:    const recordId = record[idProperty]
plugins/core/lib/querying/knex-relationship-includes.js:1227:      // const targetIdProperty = targetScopeObject.vars.schemaInfo.idProperty;
plugins/core/lib/querying/knex-relationship-includes.js:1246:      const targetIdProperty = scopes[targetType]?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:1252:      // If no field selection but custom idProperty, we need to alias it
plugins/core/lib/querying/knex-relationship-includes.js:1335:            { records: targetRecords, scopeName: targetType, includeTree: subIncludes, included, processedPaths, currentPath: nextPath, fields, idProperty: targetIdProperty },
plugins/core/lib/querying/knex-relationship-includes.js:1446:    const targetIdProperty = targetScopeObject.vars.schemaInfo.idProperty
plugins/core/lib/querying/knex-relationship-includes.js:1467:    // If no field selection but custom idProperty, we need to alias it
plugins/core/lib/querying/knex-relationship-includes.js:1550:          { records: targetRecords, scopeName: targetScope, includeTree: subIncludes, included, processedPaths, currentPath: nextPath, fields, idProperty: targetIdProperty },
plugins/core/lib/querying/knex-relationship-includes.js:1591: *   - idProperty: string - The ID property name
plugins/core/lib/querying/knex-relationship-includes.js:1599:  const { records, scopeName, includeTree, included, processedPaths, currentPath = '', fields = {}, idProperty } = scope
plugins/core/lib/querying/knex-relationship-includes.js:1639:              { records, scopeName, fieldName, fieldDef, includeName, subIncludes, included, processedPaths, currentPath, fields, idProperty },
plugins/core/lib/querying/knex-relationship-includes.js:1740: *   - idProperty: string - The ID property name
plugins/core/lib/querying/knex-relationship-includes.js:1754: *     idProperty: 'id'
plugins/core/lib/querying/knex-relationship-includes.js:1768:  const { records, scopeName, includeParam, fields, idProperty } = scope
plugins/core/lib/querying/knex-relationship-includes.js:1802:      { records, scopeName, includeTree, included, processedPaths, currentPath: '', fields, idProperty },
plugins/core/lib/querying/knex-relationship-includes.js:1899:      const targetIdProperty = targetScope?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-relationship-includes.js:1947:        const targetIdProperty = scopes[targetScope]?.vars?.schemaInfo?.idProperty || 'id'
plugins/core/lib/querying/knex-process-includes.js:23: *     schemaInfo: { idProperty: 'id' }
plugins/core/lib/querying/knex-process-includes.js:114:    const idProperty = context.schemaInfo.idProperty
plugins/core/lib/querying/knex-process-includes.js:128:        idProperty
plugins/core/rest-api-plugin-hooks/turn-scope-init-into-vars.js:25:  // Set idProperty as scope var
plugins/core/rest-api-plugin-hooks/turn-scope-init-into-vars.js:26:  if (typeof scopeOptions.idProperty !== 'undefined') vars.idProperty = scopeOptions.idProperty
plugins/core/rest-api-knex-plugin.js:231:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:244:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:249:      const selectClause = idProperty !== 'id' ? `${idProperty} as id` : 'id'
plugins/core/rest-api-knex-plugin.js:252:        .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:268:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:298:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:318:      let query = db(tableName).where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:368:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:380:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:387:      let query = db(tableName).where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:389:      // Add alias if idProperty is not 'id'
plugins/core/rest-api-knex-plugin.js:390:      if (idProperty !== 'id') {
plugins/core/rest-api-knex-plugin.js:391:        query = query.select('*', `${idProperty} as id`)
plugins/core/rest-api-knex-plugin.js:415:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:587:          const idProperty = context.schemaInfo.idProperty || 'id'
plugins/core/rest-api-knex-plugin.js:617:                field: scope.vars.defaultSort.field || idProperty,
plugins/core/rest-api-knex-plugin.js:621:              sortFields.push({ field: idProperty, direction: 'ASC' })
plugins/core/rest-api-knex-plugin.js:685:                field: scope.vars.defaultSort.field || idProperty,
plugins/core/rest-api-knex-plugin.js:689:              sortFields.push({ field: idProperty, direction: 'ASC' })
plugins/core/rest-api-knex-plugin.js:848:        const idProperty = context.schemaInfo.idProperty || 'id'
plugins/core/rest-api-knex-plugin.js:849:        let sortFields = [idProperty]
plugins/core/rest-api-knex-plugin.js:891:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:906:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:919:      const result = await db(tableName).insert(dbAttributes).returning(idProperty)
plugins/core/rest-api-knex-plugin.js:922:      const id = result[0]?.[idProperty] || result[0]
plugins/core/rest-api-knex-plugin.js:935:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:954:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:969:      // Map 'id' to actual idProperty if needed (for PUT with specific ID)
plugins/core/rest-api-knex-plugin.js:970:      if (idProperty !== 'id' && inputRecord.data.id) {
plugins/core/rest-api-knex-plugin.js:971:        finalAttributes[idProperty] = inputRecord.data.id
plugins/core/rest-api-knex-plugin.js:978:          [idProperty]: id
plugins/core/rest-api-knex-plugin.js:985:          .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:999:        // Remove the idProperty from attributes to prevent updating the primary key
plugins/core/rest-api-knex-plugin.js:1000:        delete finalAttributes[idProperty]
plugins/core/rest-api-knex-plugin.js:1005:            .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:1020:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:1038:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:1046:        .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:1070:      // Remove the idProperty from attributes to prevent updating the primary key
plugins/core/rest-api-knex-plugin.js:1071:      delete finalAttributes[idProperty]
plugins/core/rest-api-knex-plugin.js:1076:          .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:1090:     * @param {string} params.context.schemaInfo.idProperty - The primary key field name (e.g., 'id')
plugins/core/rest-api-knex-plugin.js:1104:      const idProperty = storageAdapter?.getIdColumn?.() || context.schemaInfo.idProperty
plugins/core/rest-api-knex-plugin.js:1111:        .where(idProperty, id)
plugins/core/rest-api-knex-plugin.js:1127:        .where(idProperty, id)
plugins/core/rest-api-positioning-plugin.js:424:      const idProperty = schemaInfo.idProperty
plugins/core/rest-api-positioning-plugin.js:430:        idProperty,
plugins/core/rest-api-positioning-plugin.js:450:        const translatedId = adapter.translateFilterValue(idProperty, context.id)
plugins/core/rest-api-positioning-plugin.js:469:        [idProperty]: idColumn,
plugins/core/rest-api-positioning-plugin.js:498:            effectiveBeforeId = firstItem[idProperty]
plugins/core/rest-api-positioning-plugin.js:504:          const normalizedTargetId = adapter.translateFilterValue(idProperty, effectiveBeforeId)
plugins/core/rest-api-positioning-plugin.js:534:        : calculatePosition(items, effectiveBeforeId, idProperty, vars.positioning.field)
