@jewel998/config 0.1.0 → 0.1.2

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.
Files changed (108) hide show
  1. package/dist/client/ConfigClient.d.ts +3 -1
  2. package/dist/client/ConfigClient.d.ts.map +1 -1
  3. package/dist/client/ConfigClient.js +53 -19
  4. package/dist/client/ConfigClient.js.map +1 -1
  5. package/dist/context/autoContext.d.ts +28 -0
  6. package/dist/context/autoContext.d.ts.map +1 -0
  7. package/dist/context/autoContext.js +135 -0
  8. package/dist/context/autoContext.js.map +1 -0
  9. package/dist/createConfig.d.ts.map +1 -1
  10. package/dist/createConfig.js +31 -7
  11. package/dist/createConfig.js.map +1 -1
  12. package/dist/index.d.ts +6 -15
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +8 -9
  15. package/dist/index.js.map +1 -1
  16. package/dist/initConfig.d.ts +66 -0
  17. package/dist/initConfig.d.ts.map +1 -0
  18. package/dist/initConfig.js +128 -0
  19. package/dist/initConfig.js.map +1 -0
  20. package/dist/loading/pessimistic.d.ts.map +1 -1
  21. package/dist/loading/pessimistic.js +12 -5
  22. package/dist/loading/pessimistic.js.map +1 -1
  23. package/dist/plugins/models.d.ts +1 -0
  24. package/dist/plugins/models.d.ts.map +1 -1
  25. package/dist/plugins/prerequisites/prerequisitePlugin.d.ts.map +1 -1
  26. package/dist/plugins/prerequisites/prerequisitePlugin.js +22 -2
  27. package/dist/plugins/prerequisites/prerequisitePlugin.js.map +1 -1
  28. package/dist/transport/HttpTransport.d.ts +4 -0
  29. package/dist/transport/HttpTransport.d.ts.map +1 -1
  30. package/dist/transport/HttpTransport.js +15 -4
  31. package/dist/transport/HttpTransport.js.map +1 -1
  32. package/dist/types.d.ts +24 -37
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js.map +1 -1
  35. package/dist/webhook-formats.d.ts +92 -0
  36. package/dist/webhook-formats.d.ts.map +1 -0
  37. package/dist/webhook-formats.js +141 -0
  38. package/dist/webhook-formats.js.map +1 -0
  39. package/package.json +1 -1
  40. package/dist/cache/storage.d.ts +0 -15
  41. package/dist/cache/storage.d.ts.map +0 -1
  42. package/dist/cache/storage.js +0 -43
  43. package/dist/cache/storage.js.map +0 -1
  44. package/dist/cache/types.d.ts +0 -3
  45. package/dist/cache/types.js +0 -2
  46. package/dist/cache/types.js.map +0 -1
  47. package/dist/client.d.ts +0 -15
  48. package/dist/client.d.ts.map +0 -1
  49. package/dist/client.js +0 -80
  50. package/dist/client.js.map +0 -1
  51. package/dist/core/resolver.d.ts +0 -8
  52. package/dist/core/resolver.d.ts.map +0 -1
  53. package/dist/core/resolver.js +0 -22
  54. package/dist/core/resolver.js.map +0 -1
  55. package/dist/errors/index.d.ts +0 -17
  56. package/dist/errors/index.d.ts.map +0 -1
  57. package/dist/errors/index.js +0 -29
  58. package/dist/errors/index.js.map +0 -1
  59. package/dist/example.d.ts +0 -2
  60. package/dist/example.d.ts.map +0 -1
  61. package/dist/example.js +0 -23
  62. package/dist/example.js.map +0 -1
  63. package/dist/loading/deferred.d.ts +0 -3
  64. package/dist/loading/deferred.js +0 -5
  65. package/dist/loading/deferred.js.map +0 -1
  66. package/dist/loading/optimistic.d.ts +0 -3
  67. package/dist/loading/pessimistic.d.ts +0 -3
  68. package/dist/management/index.d.ts +0 -3
  69. package/dist/management/index.d.ts.map +0 -1
  70. package/dist/management/index.js +0 -2
  71. package/dist/management/index.js.map +0 -1
  72. package/dist/management/manager.d.ts +0 -34
  73. package/dist/management/manager.d.ts.map +0 -1
  74. package/dist/management/manager.js +0 -21
  75. package/dist/management/manager.js.map +0 -1
  76. package/dist/management/memory-backend.d.ts +0 -6
  77. package/dist/management/memory-backend.d.ts.map +0 -1
  78. package/dist/management/memory-backend.js +0 -78
  79. package/dist/management/memory-backend.js.map +0 -1
  80. package/dist/plugins/index.d.ts +0 -5
  81. package/dist/plugins/lifecycle/index.d.ts +0 -4
  82. package/dist/plugins/overrides/index.d.ts +0 -2
  83. package/dist/plugins/prerequisites/index.d.ts +0 -3
  84. package/dist/plugins/rollout/index.d.ts +0 -3
  85. package/dist/plugins/rollout/murmurhash3.d.ts +0 -6
  86. package/dist/plugins/rollout/murmurhash3.d.ts.map +0 -1
  87. package/dist/plugins/rollout/murmurhash3.js +0 -56
  88. package/dist/plugins/rollout/murmurhash3.js.map +0 -1
  89. package/dist/plugins/schedule/index.d.ts +0 -2
  90. package/dist/plugins/targeting/index.d.ts +0 -4
  91. package/dist/plugins/targeting/predicates.d.ts +0 -23
  92. package/dist/plugins/targeting/predicates.js +0 -110
  93. package/dist/plugins/targeting/predicates.js.map +0 -1
  94. package/dist/plugins/types.d.ts +0 -35
  95. package/dist/plugins/types.js +0 -13
  96. package/dist/plugins/types.js.map +0 -1
  97. package/dist/registry.d.ts +0 -9
  98. package/dist/registry.d.ts.map +0 -1
  99. package/dist/registry.js +0 -22
  100. package/dist/registry.js.map +0 -1
  101. package/dist/remote/firebase-adapter.d.ts +0 -6
  102. package/dist/remote/firebase-adapter.d.ts.map +0 -1
  103. package/dist/remote/firebase-adapter.js +0 -12
  104. package/dist/remote/firebase-adapter.js.map +0 -1
  105. package/dist/remote/provider.d.ts +0 -6
  106. package/dist/remote/provider.d.ts.map +0 -1
  107. package/dist/remote/provider.js +0 -5
  108. package/dist/remote/provider.js.map +0 -1
@@ -1,78 +0,0 @@
1
- /**
2
- * In-memory backend for testing and local development.
3
- */
4
- export const createMemoryBackend = () => {
5
- const projects = [];
6
- const environments = [];
7
- const versions = [];
8
- let idCounter = 0;
9
- const nextId = () => {
10
- idCounter++;
11
- return `mem-${idCounter.toString().padStart(4, "0")}`;
12
- };
13
- return {
14
- createProject: async (name, ownerId) => {
15
- const project = {
16
- id: nextId(),
17
- name,
18
- ownerId,
19
- authorizedUsers: [ownerId],
20
- createdAt: new Date().toISOString(),
21
- updatedAt: new Date().toISOString(),
22
- };
23
- projects.push(project);
24
- return project;
25
- },
26
- deleteProject: async (projectId) => {
27
- const index = projects.findIndex((p) => p.id === projectId);
28
- if (index >= 0) {
29
- projects.splice(index, 1);
30
- }
31
- },
32
- listProjects: async (ownerId) => projects.filter((p) => p.ownerId === ownerId || p.authorizedUsers.includes(ownerId)),
33
- createEnvironment: async (projectId, name) => {
34
- const environment = {
35
- id: nextId(),
36
- projectId,
37
- name,
38
- allowedDomains: [],
39
- createdAt: new Date().toISOString(),
40
- updatedAt: new Date().toISOString(),
41
- };
42
- environments.push(environment);
43
- return environment;
44
- },
45
- deleteEnvironment: async (_projectId, environmentId) => {
46
- const index = environments.findIndex((e) => e.id === environmentId);
47
- if (index >= 0) {
48
- environments.splice(index, 1);
49
- }
50
- },
51
- listEnvironments: async (projectId) => environments.filter((e) => e.projectId === projectId),
52
- createVersion: async (projectId, version, payload, environmentId) => {
53
- const record = {
54
- id: nextId(),
55
- projectId,
56
- environmentId,
57
- version,
58
- payload,
59
- publishedAt: undefined,
60
- };
61
- versions.push(record);
62
- return record;
63
- },
64
- publishVersion: async (_projectId, versionId) => {
65
- const record = versions.find((v) => v.id === versionId);
66
- if (!record) {
67
- throw new Error(`Version ${versionId} not found.`);
68
- }
69
- if (record.publishedAt) {
70
- throw new Error(`Version ${versionId} is already published.`);
71
- }
72
- record.publishedAt = new Date().toISOString();
73
- return record;
74
- },
75
- listVersions: async (projectId) => versions.filter((v) => v.projectId === projectId),
76
- };
77
- };
78
- //# sourceMappingURL=memory-backend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../../src/management/memory-backend.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export type { PipelineStepId, EvaluationContext, PipelineStepResult, EvaluationPlugin, PipelineHelpers, } from "./types.js";
2
- export { PIPELINE_ORDER } from "./types.js";
3
- export type { ConfigFlagData, TargetingRule, PredicateGroup, Predicate, PredicateOperator, Segment, } from "./models.js";
4
- export { evaluatePipeline } from "./evaluatePipeline.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1,4 +0,0 @@
1
- export { archivedPlugin } from "./archivedPlugin.js";
2
- export { validateStateTransition, VALID_TRANSITIONS, } from "./stateTransitions.js";
3
- export type { LifecycleState } from "./stateTransitions.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1,2 +0,0 @@
1
- export { overridesPlugin } from "./overridesPlugin.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1,3 +0,0 @@
1
- export { prerequisitePlugin } from "./prerequisitePlugin.js";
2
- export type { PrerequisitePluginOptions } from "./prerequisitePlugin.js";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,3 +0,0 @@
1
- export { computeBucket } from "./computeBucket.js";
2
- export { rolloutPlugin } from "./rolloutPlugin.js";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,6 +0,0 @@
1
- /**
2
- * MurmurHash3_x86_32 — deterministic 32-bit hash.
3
- * Used for percentage rollout bucketing (same algorithm as flagd/OpenFeature).
4
- */
5
- export declare function murmurhash3_32(key: string, seed?: number): number;
6
- //# sourceMappingURL=murmurhash3.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"murmurhash3.d.ts","sourceRoot":"","sources":["../../../src/plugins/rollout/murmurhash3.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,MAAM,CAkDpE"}
@@ -1,56 +0,0 @@
1
- // ═══════════════════════════════════════════════════════════════
2
- // MurmurHash3_x86_32
3
- // Public domain — Austin Appleby
4
- // Adapted for TypeScript (operates on UTF-8 encoded string bytes)
5
- // ═══════════════════════════════════════════════════════════════
6
- /**
7
- * MurmurHash3_x86_32 — deterministic 32-bit hash.
8
- * Used for percentage rollout bucketing (same algorithm as flagd/OpenFeature).
9
- */
10
- export function murmurhash3_32(key, seed = 0) {
11
- const encoder = new TextEncoder();
12
- const bytes = encoder.encode(key);
13
- const len = bytes.length;
14
- let h1 = seed >>> 0;
15
- const c1 = 0xcc9e2d51;
16
- const c2 = 0x1b873593;
17
- let i = 0;
18
- while (i + 4 <= len) {
19
- let k1 = (bytes[i] |
20
- (bytes[i + 1] << 8) |
21
- (bytes[i + 2] << 16) |
22
- (bytes[i + 3] << 24)) >>>
23
- 0;
24
- k1 = Math.imul(k1, c1) >>> 0;
25
- k1 = ((k1 << 15) | (k1 >>> 17)) >>> 0;
26
- k1 = Math.imul(k1, c2) >>> 0;
27
- h1 ^= k1;
28
- h1 = ((h1 << 13) | (h1 >>> 19)) >>> 0;
29
- h1 = (Math.imul(h1, 5) + 0xe6546b64) >>> 0;
30
- i += 4;
31
- }
32
- let k1 = 0;
33
- const remainder = len & 3;
34
- if (remainder >= 3) {
35
- k1 ^= bytes[i + 2] << 16;
36
- }
37
- if (remainder >= 2) {
38
- k1 ^= bytes[i + 1] << 8;
39
- }
40
- if (remainder >= 1) {
41
- k1 ^= bytes[i];
42
- k1 = Math.imul(k1, c1) >>> 0;
43
- k1 = ((k1 << 15) | (k1 >>> 17)) >>> 0;
44
- k1 = Math.imul(k1, c2) >>> 0;
45
- h1 ^= k1;
46
- }
47
- h1 ^= len;
48
- // fmix32
49
- h1 ^= h1 >>> 16;
50
- h1 = Math.imul(h1, 0x85ebca6b) >>> 0;
51
- h1 ^= h1 >>> 13;
52
- h1 = Math.imul(h1, 0xc2b2ae35) >>> 0;
53
- h1 ^= h1 >>> 16;
54
- return h1 >>> 0;
55
- }
56
- //# sourceMappingURL=murmurhash3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"murmurhash3.js","sourceRoot":"","sources":["../../../src/plugins/rollout/murmurhash3.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { schedulePlugin } from "./schedulePlugin.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1,4 +0,0 @@
1
- export { targetingPlugin } from "./targetingPlugin.js";
2
- export { evaluatePredicate, evaluatePredicateGroups } from "./predicates.js";
3
- export { resolveSegment } from "./segmentResolver.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1,23 +0,0 @@
1
- import type { Predicate, PredicateGroup } from "../models.js";
2
- type AttributeValue = string | number | boolean | string[];
3
- /**
4
- * Evaluate a single predicate against the provided attributes.
5
- *
6
- * Returns false for:
7
- * - Missing attributes in context
8
- * - Type mismatches (e.g., greater_than on a non-numeric value)
9
- * - Invalid regex patterns (also calls emitError)
10
- * - in_segment / not_in_segment (handled externally by segment resolver)
11
- */
12
- export declare function evaluatePredicate(predicate: Predicate, attributes: Record<string, AttributeValue>, emitError?: (message: string) => void): boolean;
13
- /**
14
- * Evaluate predicate groups in Disjunctive Normal Form (DNF).
15
- *
16
- * Groups are OR'd — any group matching means the whole expression matches.
17
- * Within each group, predicates are AND'd — all must match.
18
- *
19
- * Returns false if groups array is empty.
20
- */
21
- export declare function evaluatePredicateGroups(groups: PredicateGroup[], attributes: Record<string, AttributeValue>, emitError?: (message: string) => void): boolean;
22
- export {};
23
- //# sourceMappingURL=predicates.d.ts.map
@@ -1,110 +0,0 @@
1
- // ═══════════════════════════════════════════════════════════════
2
- // Predicate Evaluator — DNF logic for targeting rules
3
- // ═══════════════════════════════════════════════════════════════
4
- /**
5
- * Evaluate a single predicate against the provided attributes.
6
- *
7
- * Returns false for:
8
- * - Missing attributes in context
9
- * - Type mismatches (e.g., greater_than on a non-numeric value)
10
- * - Invalid regex patterns (also calls emitError)
11
- * - in_segment / not_in_segment (handled externally by segment resolver)
12
- */
13
- export function evaluatePredicate(predicate, attributes, emitError) {
14
- const { attribute, operator, value } = predicate;
15
- // in_segment / not_in_segment are resolved externally by the segment resolver
16
- if (operator === "in_segment" || operator === "not_in_segment") {
17
- return false;
18
- }
19
- // Missing attribute → predicate is non-matching (Property 4)
20
- if (!(attribute in attributes)) {
21
- return false;
22
- }
23
- const attrValue = attributes[attribute];
24
- // Attribute value is undefined/null → non-matching
25
- if (attrValue === undefined || attrValue === null) {
26
- return false;
27
- }
28
- switch (operator) {
29
- case "equals":
30
- return attrValue === value;
31
- case "not_equals":
32
- return attrValue !== value;
33
- case "contains": {
34
- if (typeof attrValue !== "string" || typeof value !== "string") {
35
- return false;
36
- }
37
- return attrValue.includes(value);
38
- }
39
- case "starts_with": {
40
- if (typeof attrValue !== "string" || typeof value !== "string") {
41
- return false;
42
- }
43
- return attrValue.startsWith(value);
44
- }
45
- case "ends_with": {
46
- if (typeof attrValue !== "string" || typeof value !== "string") {
47
- return false;
48
- }
49
- return attrValue.endsWith(value);
50
- }
51
- case "in_list": {
52
- if (!Array.isArray(value)) {
53
- return false;
54
- }
55
- return value.includes(attrValue);
56
- }
57
- case "not_in_list": {
58
- if (!Array.isArray(value)) {
59
- return false;
60
- }
61
- return !value.includes(attrValue);
62
- }
63
- case "greater_than": {
64
- if (typeof attrValue !== "number" || typeof value !== "number") {
65
- return false;
66
- }
67
- return attrValue > value;
68
- }
69
- case "less_than": {
70
- if (typeof attrValue !== "number" || typeof value !== "number") {
71
- return false;
72
- }
73
- return attrValue < value;
74
- }
75
- case "regex_match": {
76
- if (typeof attrValue !== "string" || typeof value !== "string") {
77
- return false;
78
- }
79
- try {
80
- const regex = new RegExp(value);
81
- return regex.test(attrValue);
82
- }
83
- catch {
84
- emitError?.(`Invalid regex pattern: ${value}`);
85
- return false;
86
- }
87
- }
88
- default:
89
- return false;
90
- }
91
- }
92
- /**
93
- * Evaluate predicate groups in Disjunctive Normal Form (DNF).
94
- *
95
- * Groups are OR'd — any group matching means the whole expression matches.
96
- * Within each group, predicates are AND'd — all must match.
97
- *
98
- * Returns false if groups array is empty.
99
- */
100
- export function evaluatePredicateGroups(groups, attributes, emitError) {
101
- if (groups.length === 0) {
102
- return false;
103
- }
104
- // OR across groups: at least one group must fully match
105
- return groups.some((group) => {
106
- // AND within each group: all predicates must match
107
- return group.predicates.every((predicate) => evaluatePredicate(predicate, attributes, emitError));
108
- });
109
- }
110
- //# sourceMappingURL=predicates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../../src/plugins/targeting/predicates.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { ConfigFlagData } from "./models.js";
2
- /** Pipeline step identifier — determines execution order */
3
- export type PipelineStepId = "archived" | "prerequisites" | "overrides" | "schedule" | "targeting" | "rollout";
4
- /** The fixed execution order (per Requirement 11) */
5
- export declare const PIPELINE_ORDER: PipelineStepId[];
6
- /** Evaluation context provided by the consumer */
7
- export interface EvaluationContext {
8
- userId?: string;
9
- attributes?: Record<string, string | number | boolean | string[]>;
10
- consentGranted?: boolean;
11
- }
12
- /** Result from a pipeline step */
13
- export type PipelineStepResult = {
14
- resolved: true;
15
- value: unknown;
16
- } | {
17
- resolved: false;
18
- };
19
- /** A registered evaluation plugin */
20
- export interface EvaluationPlugin {
21
- /** Which pipeline step this plugin handles */
22
- stepId: PipelineStepId;
23
- /** Evaluate a config flag at this pipeline step */
24
- evaluate(flag: ConfigFlagData, context: EvaluationContext, helpers: PipelineHelpers): PipelineStepResult;
25
- }
26
- /** Helpers provided to plugins for cross-cutting concerns */
27
- export interface PipelineHelpers {
28
- /** Evaluate another flag (for prerequisites) */
29
- evaluateFlag(key: string, context: EvaluationContext): unknown;
30
- /** Emit an error */
31
- emitError(message: string): void;
32
- /** Current timestamp (injectable for testing) */
33
- now(): number;
34
- }
35
- //# sourceMappingURL=types.d.ts.map
@@ -1,13 +0,0 @@
1
- // ═══════════════════════════════════════════════════════════════
2
- // Plugin System Types and Pipeline Interfaces
3
- // ═══════════════════════════════════════════════════════════════
4
- /** The fixed execution order (per Requirement 11) */
5
- export const PIPELINE_ORDER = [
6
- "archived",
7
- "prerequisites",
8
- "overrides",
9
- "schedule",
10
- "targeting",
11
- "rollout",
12
- ];
13
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8CAA8C;AAC9C,kEAAkE;AAalE,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,UAAU;IACV,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,SAAS;CACV,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { ConfigDefinition } from "./types";
2
- export interface ConfigRegistry {
3
- definitions: ConfigDefinition[];
4
- get(key: string): ConfigDefinition | undefined;
5
- add(definition: ConfigDefinition): void;
6
- remove(key: string): void;
7
- }
8
- export declare const createConfigRegistry: (definitions?: ConfigDefinition[]) => ConfigRegistry;
9
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB,GAC/B,cAAa,gBAAgB,EAAO,KACnC,cAuBF,CAAC"}
package/dist/registry.js DELETED
@@ -1,22 +0,0 @@
1
- export const createConfigRegistry = (definitions = []) => {
2
- const items = [...definitions];
3
- return {
4
- definitions: items,
5
- get: (key) => items.find((definition) => definition.key === key),
6
- add: (definition) => {
7
- const existingIndex = items.findIndex((entry) => entry.key === definition.key);
8
- if (existingIndex >= 0) {
9
- items[existingIndex] = definition;
10
- return;
11
- }
12
- items.push(definition);
13
- },
14
- remove: (key) => {
15
- const index = items.findIndex((definition) => definition.key === key);
16
- if (index >= 0) {
17
- items.splice(index, 1);
18
- }
19
- },
20
- };
21
- };
22
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,cAAkC,EAAE,EACpB,EAAE;IAClB,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAE/B,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC;QACxE,GAAG,EAAE,CAAC,UAA4B,EAAE,EAAE;YACpC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CACnC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CACxC,CAAC;YACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACtE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { RemoteConfigProvider } from "./provider";
2
- export interface FirebaseRemoteConfigOptions {
3
- fetcher?: (key: string) => Promise<unknown>;
4
- }
5
- export declare const createFirebaseRemoteConfigProvider: (options?: FirebaseRemoteConfigOptions) => RemoteConfigProvider;
6
- //# sourceMappingURL=firebase-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firebase-adapter.d.ts","sourceRoot":"","sources":["../../src/remote/firebase-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AAED,eAAO,MAAM,kCAAkC,GAC7C,UAAS,2BAAgC,KACxC,oBAWD,CAAC"}
@@ -1,12 +0,0 @@
1
- export const createFirebaseRemoteConfigProvider = (options = {}) => ({
2
- getValue: async (key) => {
3
- const fetcher = options.fetcher;
4
- if (!fetcher) {
5
- return undefined;
6
- }
7
- const value = await fetcher(key);
8
- return value;
9
- },
10
- refresh: async () => { },
11
- });
12
- //# sourceMappingURL=firebase-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firebase-adapter.js","sourceRoot":"","sources":["../../src/remote/firebase-adapter.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAChD,UAAuC,EAAE,EACnB,EAAE,CAAC,CAAC;IAC1B,QAAQ,EAAE,KAAK,EAAK,GAAW,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,SAA0B,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,KAAsB,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;CACxB,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- export interface RemoteConfigProvider {
2
- getValue<T>(key: string): Promise<T | undefined>;
3
- refresh(): Promise<void>;
4
- }
5
- export declare const createRemoteConfigProvider: () => RemoteConfigProvider;
6
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/remote/provider.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,eAAO,MAAM,0BAA0B,QAAO,oBAG5C,CAAC"}
@@ -1,5 +0,0 @@
1
- export const createRemoteConfigProvider = () => ({
2
- getValue: async () => undefined,
3
- refresh: async () => { },
4
- });
5
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/remote/provider.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAyB,EAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;IAC/B,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;CACxB,CAAC,CAAC"}