firestore-schema-kit 1.0.0 → 2.1.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.
@@ -0,0 +1,24 @@
1
+ import { type ZodError, type ZodIssue } from 'zod';
2
+ import { type FieldShape, type InferFields, type SchemaBuilder } from './fields.js';
3
+ export declare class SchemaValidationError extends Error {
4
+ readonly collection: string;
5
+ readonly issues: ZodIssue[];
6
+ constructor(collectionName: string, zodError: ZodError);
7
+ }
8
+ export type CollectionSafeParseResult<TData extends Record<string, unknown>> = {
9
+ success: true;
10
+ data: TData;
11
+ } | {
12
+ success: false;
13
+ error: SchemaValidationError;
14
+ };
15
+ export interface CollectionSchema<TData extends Record<string, unknown>, TShape extends FieldShape = FieldShape> {
16
+ _name: string;
17
+ _fieldDefs: TShape;
18
+ _type: 'CollectionSchema';
19
+ validate: (data: unknown) => TData;
20
+ validatePartial: (data: unknown) => Partial<TData>;
21
+ safeParse: (data: unknown) => CollectionSafeParseResult<TData>;
22
+ }
23
+ export declare function defineCollection<const TShape extends FieldShape>(collectionName: string, builder: (s: SchemaBuilder) => TShape): CollectionSchema<InferFields<TShape>, TShape>;
24
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAA;AACrD,OAAO,EAAK,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEtF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,UAAU,EAAE,MAAM,CAAA;IAClC,SAAgB,MAAM,EAAE,QAAQ,EAAE,CAAA;gBAEtB,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CAUvD;AAED,MAAM,MAAM,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvE;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GAC9B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAEpD,MAAM,WAAW,gBAAgB,CAC/B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,MAAM,SAAS,UAAU,GAAG,UAAU;IAEtC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,kBAAkB,CAAA;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAA;IAClC,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,yBAAyB,CAAC,KAAK,CAAC,CAAA;CAC/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,MAAM,SAAS,UAAU,EAC9D,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,MAAM,GACpC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAqD/C"}
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ import { s } from './fields.js';
3
+ export class SchemaValidationError extends Error {
4
+ collection;
5
+ issues;
6
+ constructor(collectionName, zodError) {
7
+ const issues = zodError.issues
8
+ .map((issue) => ` - ${issue.path.join('.')}: ${issue.message}`)
9
+ .join('\n');
10
+ super(`[${collectionName}] Schema validation failed:\n${issues}`);
11
+ this.name = 'SchemaValidationError';
12
+ this.collection = collectionName;
13
+ this.issues = zodError.issues;
14
+ }
15
+ }
16
+ export function defineCollection(collectionName, builder) {
17
+ if (typeof collectionName !== 'string' || !collectionName.trim()) {
18
+ throw new Error('defineCollection: collectionName must be a non-empty string');
19
+ }
20
+ if (typeof builder !== 'function') {
21
+ throw new Error('defineCollection: builder must be a function');
22
+ }
23
+ const fieldDefs = builder(s);
24
+ if (!fieldDefs || typeof fieldDefs !== 'object') {
25
+ throw new Error('defineCollection: builder must return an object of field definitions');
26
+ }
27
+ const zodShape = {};
28
+ for (const [key, field] of Object.entries(fieldDefs)) {
29
+ if (!field || typeof field !== 'object' || typeof field.toZod !== 'function') {
30
+ throw new Error(`defineCollection [${collectionName}]: field "${key}" is not a valid schema field. ` +
31
+ 'Use s.string(), s.number(), etc.');
32
+ }
33
+ zodShape[key] = field.toZod();
34
+ }
35
+ const zodSchema = z.object(zodShape);
36
+ const zodPartialSchema = zodSchema.partial();
37
+ return {
38
+ _name: collectionName,
39
+ _fieldDefs: fieldDefs,
40
+ _type: 'CollectionSchema',
41
+ validate(data) {
42
+ const result = zodSchema.safeParse(data);
43
+ if (!result.success)
44
+ throw new SchemaValidationError(collectionName, result.error);
45
+ return result.data;
46
+ },
47
+ validatePartial(data) {
48
+ const result = zodPartialSchema.safeParse(data);
49
+ if (!result.success)
50
+ throw new SchemaValidationError(collectionName, result.error);
51
+ return result.data;
52
+ },
53
+ safeParse(data) {
54
+ const result = zodSchema.safeParse(data);
55
+ if (!result.success) {
56
+ return { success: false, error: new SchemaValidationError(collectionName, result.error) };
57
+ }
58
+ return { success: true, data: result.data };
59
+ },
60
+ };
61
+ }
62
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import type { DocumentReference, FieldValue, Timestamp } from 'firebase/firestore';
3
+ export declare const fieldOutputSymbol: unique symbol;
4
+ export type FieldOutput<TField extends BaseField<any>> = TField[typeof fieldOutputSymbol];
5
+ export type FieldShape = Record<string, BaseField<any>>;
6
+ export type InferFields<TShape extends FieldShape> = {
7
+ [K in keyof TShape]: FieldOutput<TShape[K]>;
8
+ };
9
+ type LiteralValue = string | number | bigint | boolean | null | undefined;
10
+ export type TimestampLike = Date | Timestamp | FieldValue;
11
+ export declare abstract class BaseField<TOutput = unknown> {
12
+ readonly [fieldOutputSymbol]: TOutput;
13
+ protected _optional: boolean;
14
+ protected _nullable: boolean;
15
+ protected _hasDefault: boolean;
16
+ protected _defaultVal: unknown;
17
+ optional(): this & BaseField<TOutput | undefined>;
18
+ nullable(): this & BaseField<TOutput | null>;
19
+ default<TValue>(val: TValue): this & BaseField<Exclude<TOutput, undefined>>;
20
+ protected abstract _baseZod(): z.ZodTypeAny;
21
+ toZod(): z.ZodType<TOutput>;
22
+ }
23
+ export declare class StringField extends BaseField<string> {
24
+ private _min;
25
+ private _max;
26
+ private _email;
27
+ private _url;
28
+ private _uuid;
29
+ private _regex;
30
+ min(n: number): this;
31
+ max(n: number): this;
32
+ email(): this;
33
+ url(): this;
34
+ uuid(): this;
35
+ regex(r: RegExp): this;
36
+ protected _baseZod(): z.ZodString;
37
+ }
38
+ export declare class NumberField extends BaseField<number> {
39
+ private _min;
40
+ private _max;
41
+ private _int;
42
+ private _positive;
43
+ private _negative;
44
+ min(n: number): this;
45
+ max(n: number): this;
46
+ int(): this;
47
+ positive(): this;
48
+ negative(): this;
49
+ protected _baseZod(): z.ZodNumber;
50
+ }
51
+ export declare class BooleanField extends BaseField<boolean> {
52
+ protected _baseZod(): z.ZodBoolean;
53
+ }
54
+ export declare class TimestampField extends BaseField<TimestampLike> {
55
+ protected _baseZod(): z.ZodType<TimestampLike>;
56
+ }
57
+ export declare class ArrayField<TItemField extends BaseField<any>> extends BaseField<Array<FieldOutput<TItemField>>> {
58
+ private readonly _itemField;
59
+ private _min;
60
+ private _max;
61
+ constructor(itemField: TItemField);
62
+ min(n: number): this;
63
+ max(n: number): this;
64
+ protected _baseZod(): z.ZodType<Array<FieldOutput<TItemField>>>;
65
+ }
66
+ export declare class MapField<TShape extends FieldShape> extends BaseField<InferFields<TShape>> {
67
+ private readonly _shape;
68
+ constructor(shape: TShape);
69
+ protected _baseZod(): z.ZodType<InferFields<TShape>>;
70
+ }
71
+ export declare class EnumField<TValues extends readonly [string, ...string[]]> extends BaseField<TValues[number]> {
72
+ private readonly _values;
73
+ constructor(values: TValues);
74
+ protected _baseZod(): z.ZodType<TValues[number]>;
75
+ }
76
+ export declare class LiteralField<TValue extends LiteralValue> extends BaseField<TValue> {
77
+ private readonly _value;
78
+ constructor(value: TValue);
79
+ protected _baseZod(): z.ZodLiteral<TValue>;
80
+ }
81
+ export declare class ReferenceField extends BaseField<DocumentReference> {
82
+ protected _baseZod(): z.ZodType<DocumentReference>;
83
+ }
84
+ export declare class UnionField<TFields extends readonly [BaseField<any>, ...BaseField<any>[]]> extends BaseField<FieldOutput<TFields[number]>> {
85
+ private readonly _fields;
86
+ constructor(fields: TFields);
87
+ protected _baseZod(): z.ZodType<FieldOutput<TFields[number]>>;
88
+ }
89
+ export declare class AnyField extends BaseField<any> {
90
+ protected _baseZod(): z.ZodAny;
91
+ }
92
+ export interface SchemaBuilder {
93
+ string: () => StringField;
94
+ number: () => NumberField;
95
+ boolean: () => BooleanField;
96
+ timestamp: () => TimestampField;
97
+ array: <TItemField extends BaseField<any>>(itemField: TItemField) => ArrayField<TItemField>;
98
+ map: <TShape extends FieldShape>(shape: TShape) => MapField<TShape>;
99
+ enum: <const TValues extends readonly [string, ...string[]]>(values: TValues) => EnumField<TValues>;
100
+ literal: <TValue extends LiteralValue>(value: TValue) => LiteralField<TValue>;
101
+ reference: () => ReferenceField;
102
+ union: <TFields extends readonly [BaseField<any>, ...BaseField<any>[]]>(fields: TFields) => UnionField<TFields>;
103
+ any: () => AnyField;
104
+ }
105
+ export declare const s: SchemaBuilder;
106
+ export {};
107
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../fields.ts"],"names":[],"mappings":"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"}
package/dist/fields.js ADDED
@@ -0,0 +1,242 @@
1
+ import { z } from 'zod';
2
+ function isRecord(value) {
3
+ return typeof value === 'object' && value !== null;
4
+ }
5
+ function hasToDate(value) {
6
+ return isRecord(value) && typeof value.toDate === 'function';
7
+ }
8
+ function isServerTimestampSentinel(value) {
9
+ return isRecord(value) && '_methodName' in value;
10
+ }
11
+ export class BaseField {
12
+ _optional = false;
13
+ _nullable = false;
14
+ _hasDefault = false;
15
+ _defaultVal = undefined;
16
+ optional() {
17
+ this._optional = true;
18
+ return this;
19
+ }
20
+ nullable() {
21
+ this._nullable = true;
22
+ return this;
23
+ }
24
+ default(val) {
25
+ this._hasDefault = true;
26
+ this._defaultVal = val;
27
+ return this;
28
+ }
29
+ toZod() {
30
+ let schema = this._baseZod();
31
+ if (this._nullable)
32
+ schema = schema.nullable();
33
+ if (this._hasDefault)
34
+ schema = schema.default(this._defaultVal);
35
+ if (this._optional)
36
+ schema = schema.optional();
37
+ return schema;
38
+ }
39
+ }
40
+ export class StringField extends BaseField {
41
+ _min = null;
42
+ _max = null;
43
+ _email = false;
44
+ _url = false;
45
+ _uuid = false;
46
+ _regex = null;
47
+ min(n) {
48
+ this._min = n;
49
+ return this;
50
+ }
51
+ max(n) {
52
+ this._max = n;
53
+ return this;
54
+ }
55
+ email() {
56
+ this._email = true;
57
+ return this;
58
+ }
59
+ url() {
60
+ this._url = true;
61
+ return this;
62
+ }
63
+ uuid() {
64
+ this._uuid = true;
65
+ return this;
66
+ }
67
+ regex(r) {
68
+ this._regex = r;
69
+ return this;
70
+ }
71
+ _baseZod() {
72
+ let schema = z.string();
73
+ if (this._min !== null)
74
+ schema = schema.min(this._min);
75
+ if (this._max !== null)
76
+ schema = schema.max(this._max);
77
+ if (this._email)
78
+ schema = schema.email();
79
+ if (this._url)
80
+ schema = schema.url();
81
+ if (this._uuid)
82
+ schema = schema.uuid();
83
+ if (this._regex !== null)
84
+ schema = schema.regex(this._regex);
85
+ return schema;
86
+ }
87
+ }
88
+ export class NumberField extends BaseField {
89
+ _min = null;
90
+ _max = null;
91
+ _int = false;
92
+ _positive = false;
93
+ _negative = false;
94
+ min(n) {
95
+ this._min = n;
96
+ return this;
97
+ }
98
+ max(n) {
99
+ this._max = n;
100
+ return this;
101
+ }
102
+ int() {
103
+ this._int = true;
104
+ return this;
105
+ }
106
+ positive() {
107
+ this._positive = true;
108
+ return this;
109
+ }
110
+ negative() {
111
+ this._negative = true;
112
+ return this;
113
+ }
114
+ _baseZod() {
115
+ let schema = this._int ? z.number().int() : z.number();
116
+ if (this._min !== null)
117
+ schema = schema.min(this._min);
118
+ if (this._max !== null)
119
+ schema = schema.max(this._max);
120
+ if (this._positive)
121
+ schema = schema.positive();
122
+ if (this._negative)
123
+ schema = schema.negative();
124
+ return schema;
125
+ }
126
+ }
127
+ export class BooleanField extends BaseField {
128
+ _baseZod() {
129
+ return z.boolean();
130
+ }
131
+ }
132
+ export class TimestampField extends BaseField {
133
+ _baseZod() {
134
+ return z.custom((val) => {
135
+ if (!val)
136
+ return false;
137
+ if (val instanceof Date)
138
+ return true;
139
+ if (hasToDate(val))
140
+ return true;
141
+ if (isServerTimestampSentinel(val))
142
+ return true;
143
+ return false;
144
+ }, { message: 'Expected a Date, Firestore Timestamp, or serverTimestamp()' });
145
+ }
146
+ }
147
+ export class ArrayField extends BaseField {
148
+ _itemField;
149
+ _min = null;
150
+ _max = null;
151
+ constructor(itemField) {
152
+ super();
153
+ this._itemField = itemField;
154
+ }
155
+ min(n) {
156
+ this._min = n;
157
+ return this;
158
+ }
159
+ max(n) {
160
+ this._max = n;
161
+ return this;
162
+ }
163
+ _baseZod() {
164
+ let schema = z.array(this._itemField.toZod());
165
+ if (this._min !== null)
166
+ schema = schema.min(this._min);
167
+ if (this._max !== null)
168
+ schema = schema.max(this._max);
169
+ return schema;
170
+ }
171
+ }
172
+ export class MapField extends BaseField {
173
+ _shape;
174
+ constructor(shape) {
175
+ super();
176
+ this._shape = shape;
177
+ }
178
+ _baseZod() {
179
+ const zodShape = {};
180
+ for (const [key, field] of Object.entries(this._shape)) {
181
+ zodShape[key] = field.toZod();
182
+ }
183
+ return z.object(zodShape);
184
+ }
185
+ }
186
+ export class EnumField extends BaseField {
187
+ _values;
188
+ constructor(values) {
189
+ super();
190
+ this._values = values;
191
+ }
192
+ _baseZod() {
193
+ return z.enum(this._values);
194
+ }
195
+ }
196
+ export class LiteralField extends BaseField {
197
+ _value;
198
+ constructor(value) {
199
+ super();
200
+ this._value = value;
201
+ }
202
+ _baseZod() {
203
+ return z.literal(this._value);
204
+ }
205
+ }
206
+ export class ReferenceField extends BaseField {
207
+ _baseZod() {
208
+ return z.custom((val) => isRecord(val) &&
209
+ typeof val.path === 'string' &&
210
+ typeof val.id === 'string', { message: 'Expected a Firestore DocumentReference' });
211
+ }
212
+ }
213
+ export class UnionField extends BaseField {
214
+ _fields;
215
+ constructor(fields) {
216
+ super();
217
+ this._fields = fields;
218
+ }
219
+ _baseZod() {
220
+ const schemas = this._fields.map((field) => field.toZod());
221
+ return z.union(schemas);
222
+ }
223
+ }
224
+ export class AnyField extends BaseField {
225
+ _baseZod() {
226
+ return z.any();
227
+ }
228
+ }
229
+ export const s = {
230
+ string: () => new StringField(),
231
+ number: () => new NumberField(),
232
+ boolean: () => new BooleanField(),
233
+ timestamp: () => new TimestampField(),
234
+ array: (itemField) => new ArrayField(itemField),
235
+ map: (shape) => new MapField(shape),
236
+ enum: (values) => new EnumField(values),
237
+ literal: (value) => new LiteralField(value),
238
+ reference: () => new ReferenceField(),
239
+ union: (fields) => new UnionField(fields),
240
+ any: () => new AnyField(),
241
+ };
242
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { s } from './fields.js';
2
+ export { defineCollection, SchemaValidationError } from './collection.js';
3
+ export { initFirestoreSchema } from './operations.js';
4
+ export type { BaseField, FieldOutput, FieldShape, InferFields, SchemaBuilder, TimestampLike, } from './fields.js';
5
+ export type { CollectionSafeParseResult, CollectionSchema, } from './collection.js';
6
+ export type { FirestoreSchemaOperations, SchemaBatch, SchemaTransaction, WithId, } from './operations.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,YAAY,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,yBAAyB,EACzB,WAAW,EACX,iBAAiB,EACjB,MAAM,GACP,MAAM,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { s } from './fields.js';
2
+ export { defineCollection, SchemaValidationError } from './collection.js';
3
+ export { initFirestoreSchema } from './operations.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,34 @@
1
+ import type { CollectionReference, DocumentData, DocumentReference, Firestore, QueryConstraint, SetOptions, Unsubscribe } from 'firebase/firestore';
2
+ import type { CollectionSchema } from './collection.js';
3
+ export type WithId<TData extends DocumentData> = TData & {
4
+ id: string;
5
+ };
6
+ export interface SchemaBatch {
7
+ create: <TData extends DocumentData>(schema: CollectionSchema<TData>, data: TData) => DocumentReference<TData>;
8
+ set: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: TData | Partial<TData>, options?: SetOptions) => SchemaBatch;
9
+ update: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: Partial<TData>) => SchemaBatch;
10
+ delete: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference) => SchemaBatch;
11
+ commit: () => Promise<void>;
12
+ }
13
+ export interface SchemaTransaction {
14
+ get: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference) => Promise<WithId<TData> | null>;
15
+ set: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: TData | Partial<TData>, options?: SetOptions) => SchemaTransaction;
16
+ update: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: Partial<TData>) => SchemaTransaction;
17
+ delete: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference) => SchemaTransaction;
18
+ }
19
+ export interface FirestoreSchemaOperations {
20
+ createDoc: <TData extends DocumentData>(schema: CollectionSchema<TData>, data: TData) => Promise<DocumentReference<TData>>;
21
+ setDoc: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: TData | Partial<TData>, options?: SetOptions) => Promise<void>;
22
+ updateDoc: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, data: Partial<TData>) => Promise<void>;
23
+ deleteDoc: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference) => Promise<void>;
24
+ getDoc: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference) => Promise<WithId<TData> | null>;
25
+ getDocs: <TData extends DocumentData>(schema: CollectionSchema<TData>, ...constraints: QueryConstraint[]) => Promise<Array<WithId<TData>>>;
26
+ getDocRef: <TData extends DocumentData>(schema: CollectionSchema<TData>, id: string) => DocumentReference<TData>;
27
+ getCollectionRef: <TData extends DocumentData>(schema: CollectionSchema<TData>) => CollectionReference<TData>;
28
+ onDocSnapshot: <TData extends DocumentData>(schema: CollectionSchema<TData>, idOrRef: string | DocumentReference, callback: (data: WithId<TData> | null) => void, onError?: (error: Error) => void) => Unsubscribe;
29
+ onCollectionSnapshot: <TData extends DocumentData>(schema: CollectionSchema<TData>, callback: (docs: Array<WithId<TData>>) => void, ...constraints: QueryConstraint[]) => Unsubscribe;
30
+ createBatch: () => SchemaBatch;
31
+ runTransaction: <TResult>(updateFn: (t: SchemaTransaction) => Promise<TResult>) => Promise<TResult>;
32
+ }
33
+ export declare function initFirestoreSchema(db: Firestore): FirestoreSchemaOperations;
34
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../operations.ts"],"names":[],"mappings":"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"}