firebase-admin-node icon indicating copy to clipboard operation
firebase-admin-node copied to clipboard

[FR] Public API to Detect FieldValue.increment()

Open oconnorjoseph opened this issue 6 months ago • 2 comments

The Firebase Admin Node SDK currently does not provide a public API to detect if a value is a FieldValue.increment() object. This forces developers to rely on internal implementation details like checking for constructor.name === 'NumericIncrementTransform', which is fragile and may break with SDK updates.

Current Workaround

// Current approach relies on internal implementation
function hasFieldValueIncrement(value: unknown): boolean {
  return (
    typeof value === 'object' &&
    value.constructor &&
    value.constructor.name === 'NumericIncrementTransform'
  );
}

Problem

  1. Fragility: The NumericIncrementTransform class name is an internal implementation detail
  2. No Stability Guarantee: This approach may break in future SDK versions
  3. Lack of Documentation: No official way to detect increment operations

Requested Enhancement

Please provide a public API method to detect FieldValue.increment() objects, similar to how other Firebase features provide type guards.

Suggested API

import { FieldValue } from 'firebase-admin/firestore';

// Option 1: Static method on FieldValue
FieldValue.isIncrement(value: unknown): value is FieldValue

// Option 2: Dedicated type guard function
import { isIncrement } from 'firebase-admin/firestore';
isIncrement(value: unknown): value is FieldValue

Use Case

This is needed for:

  • Data validation pipelines that need to identify increment operations
  • Custom diffing systems that handle FieldValue operations differently
  • Development tools that analyze Firestore update patterns
  • Testing utilities that need to verify increment operations

oconnorjoseph avatar Aug 08 '25 02:08 oconnorjoseph

I found a few problems with this issue:

  • I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
  • This issue does not seem to follow the issue template. Make sure you provide all the required information.

google-oss-bot avatar Aug 08 '25 02:08 google-oss-bot

Thanks for reporting @oconnorjoseph. It sounds reasonable. We'll evaluate this against other priorities. But if you'd like a faster turnaround, we highly welcome external contributions (likely you'll need to make the changes in https://github.com/googleapis/nodejs-firestore, which this repo re-exports). I think option 1 is a nice clean way to do it, and perhaps do it for other FieldValue sentinels as well. e.g.

FieldValue.isServerTimestamp(value)
FieldValue.isIncrement(value)
FieldValue.isDecrement(value)
FieldValue.isArrayUnion(value)
FieldValue.isArrayRemove(value)

Do you also need to know what the increment/decrement amount was for your usecases?

ehsannas avatar Aug 12 '25 19:08 ehsannas