@replanejs/sdk 0.9.2 → 1.0.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/dist/index.d.cts CHANGED
@@ -14,20 +14,20 @@ interface SegmentationCondition {
14
14
  }
15
15
  interface AndCondition {
16
16
  operator: "and";
17
- conditions: RenderedCondition[];
17
+ conditions: Condition[];
18
18
  }
19
19
  interface OrCondition {
20
20
  operator: "or";
21
- conditions: RenderedCondition[];
21
+ conditions: Condition[];
22
22
  }
23
23
  interface NotCondition {
24
24
  operator: "not";
25
- condition: RenderedCondition;
25
+ condition: Condition;
26
26
  }
27
- type RenderedCondition = PropertyCondition | SegmentationCondition | AndCondition | OrCondition | NotCondition;
28
- interface RenderedOverride {
27
+ type Condition = PropertyCondition | SegmentationCondition | AndCondition | OrCondition | NotCondition;
28
+ interface Override {
29
29
  name: string;
30
- conditions: RenderedCondition[];
30
+ conditions: Condition[];
31
31
  value: unknown;
32
32
  }
33
33
  //#endregion
@@ -63,10 +63,7 @@ interface GetConfigOptions<T> {
63
63
  /**
64
64
  * Helper type for mapping configs to their names and values
65
65
  */
66
- type MapConfig<T extends object> = { [K in keyof T]: {
67
- name: K;
68
- value: T[K];
69
- } }[keyof T];
66
+
70
67
  /**
71
68
  * Serializable snapshot of the client state.
72
69
  * Can be used to restore a client on the client-side from server-fetched configs.
@@ -76,7 +73,7 @@ interface ReplaneSnapshot<_T extends object = object> {
76
73
  configs: Array<{
77
74
  name: string;
78
75
  value: unknown;
79
- overrides: RenderedOverride[];
76
+ overrides: Override[];
80
77
  }>;
81
78
  }
82
79
  /**
@@ -204,132 +201,15 @@ interface ConnectOptions {
204
201
  * ```
205
202
  */
206
203
  declare class Replane<T extends object = Record<string, unknown>> {
207
- private configs;
208
- private context;
209
- private logger;
210
- private storage;
211
- private configSubscriptions;
212
- private clientSubscriptions;
213
- /**
214
- * Create a new Replane client.
215
- *
216
- * The client is usable immediately after construction with defaults or snapshot data.
217
- * Call `connect()` to establish a real-time connection for live updates.
218
- *
219
- * @param options - Configuration options
220
- */
221
204
  constructor(options?: ReplaneOptions<T>);
222
- /**
223
- * Connect to the Replane server for real-time config updates.
224
- *
225
- * This method establishes an SSE connection to receive live config updates.
226
- * If already connected, it will disconnect first and reconnect with new options.
227
- *
228
- * @param options - Connection options including baseUrl and sdkKey
229
- * @returns Promise that resolves when the initial connection is established
230
- * @throws {ReplaneError} If connection times out and no defaults are available
231
- *
232
- * @example
233
- * ```typescript
234
- * await client.connect({
235
- * baseUrl: 'https://app.replane.dev',
236
- * sdkKey: 'rp_xxx'
237
- * });
238
- * ```
239
- */
240
205
  connect(options: ConnectOptions): Promise<void>;
241
- /**
242
- * Disconnect from the Replane server.
243
- *
244
- * Stops the SSE connection and cleans up resources.
245
- * The client remains usable with cached config values.
246
- * Can call `connect()` again to reconnect.
247
- */
248
206
  disconnect(): void;
249
- /**
250
- * Get a config value by name.
251
- *
252
- * Evaluates any overrides based on the client context and per-call context.
253
- *
254
- * @param configName - The name of the config to retrieve
255
- * @param options - Optional settings for this call
256
- * @returns The config value
257
- * @throws {ReplaneError} If config not found and no default provided
258
- *
259
- * @example
260
- * ```typescript
261
- * // Simple get
262
- * const value = client.get('myConfig');
263
- *
264
- * // With default fallback
265
- * const value = client.get('myConfig', { default: 'fallback' });
266
- *
267
- * // With per-call context for override evaluation
268
- * const value = client.get('myConfig', { context: { userId: '123' } });
269
- * ```
270
- */
271
207
  get<K extends keyof T>(configName: K, options?: GetConfigOptions<T[K]>): T[K];
272
- /**
273
- * Subscribe to config changes.
274
- *
275
- * @param callback - Function called when any config changes
276
- * @returns Unsubscribe function
277
- *
278
- * @example
279
- * ```typescript
280
- * const unsubscribe = client.subscribe((change) => {
281
- * console.log(`Config ${change.name} changed to ${change.value}`);
282
- * });
283
- *
284
- * // Later: stop listening
285
- * unsubscribe();
286
- * ```
287
- */
288
- subscribe(callback: (config: MapConfig<T>) => void): () => void;
289
- /**
290
- * Subscribe to a specific config's changes.
291
- *
292
- * @param configName - The config to watch
293
- * @param callback - Function called when the config changes
294
- * @returns Unsubscribe function
295
- *
296
- * @example
297
- * ```typescript
298
- * const unsubscribe = client.subscribe('myConfig', (change) => {
299
- * console.log(`myConfig changed to ${change.value}`);
300
- * });
301
- * ```
302
- */
303
208
  subscribe<K extends keyof T>(configName: K, callback: (config: {
304
209
  name: K;
305
210
  value: T[K];
306
211
  }) => void): () => void;
307
- /**
308
- * Get a serializable snapshot of the current client state.
309
- *
310
- * Useful for SSR/hydration scenarios where you want to pass
311
- * configs from server to client.
312
- *
313
- * @returns Snapshot object that can be serialized to JSON
314
- *
315
- * @example
316
- * ```typescript
317
- * // On server
318
- * const snapshot = client.getSnapshot();
319
- * const json = JSON.stringify(snapshot);
320
- *
321
- * // On client
322
- * const client = new Replane({ snapshot: JSON.parse(json) });
323
- * ```
324
- */
325
212
  getSnapshot(): ReplaneSnapshot<T>;
326
- /**
327
- * Check if the client is currently connected.
328
- */
329
- get isConnected(): boolean;
330
- private startStreaming;
331
- private processConfigUpdates;
332
- private toFinalOptions;
333
213
  }
334
214
  //# sourceMappingURL=client.d.ts.map
335
215
  //#endregion
@@ -398,7 +278,163 @@ declare function getReplaneSnapshot<T extends object>(options: GetReplaneSnapsho
398
278
  * Clears the client cache used by getReplaneSnapshot.
399
279
  * Useful for testing or when you need to force re-initialization.
400
280
  */
401
-
402
281
  //#endregion
403
- export { type ConnectOptions, type GetConfigOptions, type GetReplaneSnapshotOptions, Replane, type ReplaneContext, ReplaneError, ReplaneErrorCode, type ReplaneLogger, type ReplaneOptions, type ReplaneSnapshot, getReplaneSnapshot };
282
+ //#region src/in-memory.d.ts
283
+ /**
284
+ * Options for setting a config with overrides.
285
+ */
286
+ interface SetConfigOptions {
287
+ /** Override rules for context-based value selection */
288
+ overrides?: Override[];
289
+ }
290
+ /**
291
+ * Options for InMemoryReplaneClient constructor.
292
+ */
293
+ interface InMemoryReplaneClientOptions<T extends object> {
294
+ /**
295
+ * Optional logger (defaults to console).
296
+ */
297
+ logger?: ReplaneLogger;
298
+ /**
299
+ * Default context for all config evaluations.
300
+ * Can be overridden per-request in `client.get()`.
301
+ */
302
+ context?: ReplaneContext;
303
+ /**
304
+ * Initial config values.
305
+ * @example
306
+ * {
307
+ * defaults: {
308
+ * "feature-enabled": true,
309
+ * "rate-limit": 100,
310
+ * },
311
+ * }
312
+ */
313
+ defaults?: { [K in keyof T]?: T[K] };
314
+ }
315
+ /**
316
+ * An in-memory Replane client for testing.
317
+ *
318
+ * This client provides the same interface as `Replane` but stores
319
+ * all configs in memory. It's useful for unit tests where you don't want
320
+ * to connect to a real Replane server.
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * // Basic usage
325
+ * const client = new InMemoryReplaneClient({
326
+ * defaults: { "feature-enabled": true, "rate-limit": 100 },
327
+ * });
328
+ * expect(client.get("feature-enabled")).toBe(true);
329
+ *
330
+ * // Update config at runtime
331
+ * client.set("feature-enabled", false);
332
+ * expect(client.get("feature-enabled")).toBe(false);
333
+ *
334
+ * // With overrides
335
+ * client.setConfig("rate-limit", 100, {
336
+ * overrides: [{
337
+ * name: "premium-users",
338
+ * conditions: [{ operator: "equals", property: "plan", value: "premium" }],
339
+ * value: 1000,
340
+ * }],
341
+ * });
342
+ * expect(client.get("rate-limit")).toBe(100);
343
+ * expect(client.get("rate-limit", { context: { plan: "premium" } })).toBe(1000);
344
+ * ```
345
+ *
346
+ * @typeParam T - Type definition for config keys and values
347
+ */
348
+ declare class InMemoryReplaneClient<T extends object = Record<string, unknown>> {
349
+ constructor(options?: InMemoryReplaneClientOptions<T>);
350
+ /**
351
+ * Get a config value by name.
352
+ *
353
+ * Evaluates any overrides based on the client context and per-call context.
354
+ *
355
+ * @param configName - The name of the config to retrieve
356
+ * @param options - Optional settings for this call
357
+ * @returns The config value
358
+ * @throws {ReplaneError} If config not found and no default provided
359
+ */
360
+ get<K extends keyof T>(configName: K, options?: GetConfigOptions<T[K]>): T[K];
361
+ /**
362
+ * Subscribe to a specific config's changes.
363
+ *
364
+ * @param configName - The config to watch
365
+ * @param callback - Function called when the config changes
366
+ * @returns Unsubscribe function
367
+ */
368
+ subscribe<K extends keyof T>(configName: K, callback: (config: {
369
+ name: K;
370
+ value: T[K];
371
+ }) => void): () => void;
372
+ /**
373
+ * Get a serializable snapshot of the current client state.
374
+ *
375
+ * @returns Snapshot object that can be serialized to JSON
376
+ */
377
+ getSnapshot(): ReplaneSnapshot<T>;
378
+ /**
379
+ * Set a config value (simple form without overrides).
380
+ *
381
+ * @param name - Config name
382
+ * @param value - Config value
383
+ *
384
+ * @example
385
+ * ```typescript
386
+ * client.set("feature-enabled", true);
387
+ * client.set("rate-limit", 500);
388
+ * ```
389
+ */
390
+ set<K extends keyof T>(name: K, value: T[K]): void;
391
+ /**
392
+ * Set a config with optional overrides.
393
+ *
394
+ * @param name - Config name
395
+ * @param value - Base config value
396
+ * @param options - Optional settings including overrides
397
+ *
398
+ * @example
399
+ * ```typescript
400
+ * client.setConfig("rate-limit", 100, {
401
+ * overrides: [{
402
+ * name: "premium-users",
403
+ * conditions: [
404
+ * { operator: "in", property: "plan", value: ["pro", "enterprise"] }
405
+ * ],
406
+ * value: 1000,
407
+ * }],
408
+ * });
409
+ * ```
410
+ */
411
+ setConfig<K extends keyof T>(name: K, value: T[K], options?: SetConfigOptions): void;
412
+ /**
413
+ * Delete a config.
414
+ *
415
+ * @param name - Config name to delete
416
+ * @returns True if config was deleted, false if it didn't exist
417
+ */
418
+ delete<K extends keyof T>(name: K): boolean;
419
+ /**
420
+ * Clear all configs.
421
+ */
422
+ clear(): void;
423
+ /**
424
+ * Check if a config exists.
425
+ *
426
+ * @param name - Config name to check
427
+ * @returns True if config exists
428
+ */
429
+ has<K extends keyof T>(name: K): boolean;
430
+ /**
431
+ * Get all config names.
432
+ *
433
+ * @returns Array of config names
434
+ */
435
+ keys(): (keyof T)[];
436
+ }
437
+ //# sourceMappingURL=in-memory.d.ts.map
438
+ //#endregion
439
+ export { type Condition, type ConnectOptions, type GetConfigOptions, type GetReplaneSnapshotOptions, InMemoryReplaneClient, type InMemoryReplaneClientOptions, type Override, Replane, type ReplaneContext, ReplaneError, ReplaneErrorCode, type ReplaneLogger, type ReplaneOptions, type ReplaneSnapshot, type SetConfigOptions, getReplaneSnapshot };
404
440
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/client-types.ts","../src/client.ts","../src/error.ts","../src/snapshot.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/client-types.ts","../src/client.ts","../src/error.ts","../src/snapshot.ts","../src/in-memory.ts"],"sourcesContent":[],"mappings":"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"}