@jewel998/config 0.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.
- package/dist/cache/browserStorage.d.ts +3 -0
- package/dist/cache/browserStorage.d.ts.map +1 -0
- package/dist/cache/browserStorage.js +54 -0
- package/dist/cache/browserStorage.js.map +1 -0
- package/dist/cache/memoryStorage.d.ts +3 -0
- package/dist/cache/memoryStorage.d.ts.map +1 -0
- package/dist/cache/memoryStorage.js +30 -0
- package/dist/cache/memoryStorage.js.map +1 -0
- package/dist/cache/storage.d.ts +15 -0
- package/dist/cache/storage.d.ts.map +1 -0
- package/dist/cache/storage.js +43 -0
- package/dist/cache/storage.js.map +1 -0
- package/dist/cache/types.d.ts +3 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client/ConfigClient.d.ts +16 -0
- package/dist/client/ConfigClient.d.ts.map +1 -0
- package/dist/client/ConfigClient.js +215 -0
- package/dist/client/ConfigClient.js.map +1 -0
- package/dist/client.d.ts +15 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +80 -0
- package/dist/client.js.map +1 -0
- package/dist/core/resolver.d.ts +8 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +22 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/createConfig.d.ts +6 -0
- package/dist/createConfig.d.ts.map +1 -0
- package/dist/createConfig.js +110 -0
- package/dist/createConfig.js.map +1 -0
- package/dist/errors/index.d.ts +17 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +29 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/EventEmitter.d.ts +9 -0
- package/dist/events/EventEmitter.d.ts.map +1 -0
- package/dist/events/EventEmitter.js +30 -0
- package/dist/events/EventEmitter.js.map +1 -0
- package/dist/example.d.ts +2 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +23 -0
- package/dist/example.js.map +1 -0
- package/dist/fetch/batchFetcher.d.ts +3 -0
- package/dist/fetch/batchFetcher.d.ts.map +1 -0
- package/dist/fetch/batchFetcher.js +12 -0
- package/dist/fetch/batchFetcher.js.map +1 -0
- package/dist/fetch/projectedFetcher.d.ts +3 -0
- package/dist/fetch/projectedFetcher.d.ts.map +1 -0
- package/dist/fetch/projectedFetcher.js +43 -0
- package/dist/fetch/projectedFetcher.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/loading/deferred.d.ts +3 -0
- package/dist/loading/deferred.d.ts.map +1 -0
- package/dist/loading/deferred.js +5 -0
- package/dist/loading/deferred.js.map +1 -0
- package/dist/loading/optimistic.d.ts +3 -0
- package/dist/loading/optimistic.d.ts.map +1 -0
- package/dist/loading/optimistic.js +35 -0
- package/dist/loading/optimistic.js.map +1 -0
- package/dist/loading/pessimistic.d.ts +3 -0
- package/dist/loading/pessimistic.d.ts.map +1 -0
- package/dist/loading/pessimistic.js +24 -0
- package/dist/loading/pessimistic.js.map +1 -0
- package/dist/management/index.d.ts +3 -0
- package/dist/management/index.d.ts.map +1 -0
- package/dist/management/index.js +2 -0
- package/dist/management/index.js.map +1 -0
- package/dist/management/manager.d.ts +34 -0
- package/dist/management/manager.d.ts.map +1 -0
- package/dist/management/manager.js +21 -0
- package/dist/management/manager.js.map +1 -0
- package/dist/management/memory-backend.d.ts +6 -0
- package/dist/management/memory-backend.d.ts.map +1 -0
- package/dist/management/memory-backend.js +78 -0
- package/dist/management/memory-backend.js.map +1 -0
- package/dist/plugins/evaluatePipeline.d.ts +15 -0
- package/dist/plugins/evaluatePipeline.d.ts.map +1 -0
- package/dist/plugins/evaluatePipeline.js +39 -0
- package/dist/plugins/evaluatePipeline.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +6 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/lifecycle/archivedPlugin.d.ts +14 -0
- package/dist/plugins/lifecycle/archivedPlugin.d.ts.map +1 -0
- package/dist/plugins/lifecycle/archivedPlugin.js +26 -0
- package/dist/plugins/lifecycle/archivedPlugin.js.map +1 -0
- package/dist/plugins/lifecycle/index.d.ts +4 -0
- package/dist/plugins/lifecycle/index.d.ts.map +1 -0
- package/dist/plugins/lifecycle/index.js +6 -0
- package/dist/plugins/lifecycle/index.js.map +1 -0
- package/dist/plugins/lifecycle/stateTransitions.d.ts +27 -0
- package/dist/plugins/lifecycle/stateTransitions.d.ts.map +1 -0
- package/dist/plugins/lifecycle/stateTransitions.js +33 -0
- package/dist/plugins/lifecycle/stateTransitions.js.map +1 -0
- package/dist/plugins/models.d.ts +50 -0
- package/dist/plugins/models.d.ts.map +1 -0
- package/dist/plugins/models.js +5 -0
- package/dist/plugins/models.js.map +1 -0
- package/dist/plugins/overrides/index.d.ts +2 -0
- package/dist/plugins/overrides/index.d.ts.map +1 -0
- package/dist/plugins/overrides/index.js +5 -0
- package/dist/plugins/overrides/index.js.map +1 -0
- package/dist/plugins/overrides/overridesPlugin.d.ts +12 -0
- package/dist/plugins/overrides/overridesPlugin.d.ts.map +1 -0
- package/dist/plugins/overrides/overridesPlugin.js +40 -0
- package/dist/plugins/overrides/overridesPlugin.js.map +1 -0
- package/dist/plugins/prerequisites/index.d.ts +3 -0
- package/dist/plugins/prerequisites/index.d.ts.map +1 -0
- package/dist/plugins/prerequisites/index.js +5 -0
- package/dist/plugins/prerequisites/index.js.map +1 -0
- package/dist/plugins/prerequisites/prerequisitePlugin.d.ts +24 -0
- package/dist/plugins/prerequisites/prerequisitePlugin.d.ts.map +1 -0
- package/dist/plugins/prerequisites/prerequisitePlugin.js +62 -0
- package/dist/plugins/prerequisites/prerequisitePlugin.js.map +1 -0
- package/dist/plugins/rollout/computeBucket.d.ts +12 -0
- package/dist/plugins/rollout/computeBucket.d.ts.map +1 -0
- package/dist/plugins/rollout/computeBucket.js +20 -0
- package/dist/plugins/rollout/computeBucket.js.map +1 -0
- package/dist/plugins/rollout/index.d.ts +3 -0
- package/dist/plugins/rollout/index.d.ts.map +1 -0
- package/dist/plugins/rollout/index.js +6 -0
- package/dist/plugins/rollout/index.js.map +1 -0
- package/dist/plugins/rollout/murmurhash3.d.ts +6 -0
- package/dist/plugins/rollout/murmurhash3.d.ts.map +1 -0
- package/dist/plugins/rollout/murmurhash3.js +56 -0
- package/dist/plugins/rollout/murmurhash3.js.map +1 -0
- package/dist/plugins/rollout/rolloutPlugin.d.ts +13 -0
- package/dist/plugins/rollout/rolloutPlugin.d.ts.map +1 -0
- package/dist/plugins/rollout/rolloutPlugin.js +44 -0
- package/dist/plugins/rollout/rolloutPlugin.js.map +1 -0
- package/dist/plugins/schedule/index.d.ts +2 -0
- package/dist/plugins/schedule/index.d.ts.map +1 -0
- package/dist/plugins/schedule/index.js +5 -0
- package/dist/plugins/schedule/index.js.map +1 -0
- package/dist/plugins/schedule/schedulePlugin.d.ts +14 -0
- package/dist/plugins/schedule/schedulePlugin.d.ts.map +1 -0
- package/dist/plugins/schedule/schedulePlugin.js +38 -0
- package/dist/plugins/schedule/schedulePlugin.js.map +1 -0
- package/dist/plugins/targeting/index.d.ts +4 -0
- package/dist/plugins/targeting/index.d.ts.map +1 -0
- package/dist/plugins/targeting/index.js +4 -0
- package/dist/plugins/targeting/index.js.map +1 -0
- package/dist/plugins/targeting/predicates.d.ts +23 -0
- package/dist/plugins/targeting/predicates.d.ts.map +1 -0
- package/dist/plugins/targeting/predicates.js +110 -0
- package/dist/plugins/targeting/predicates.js.map +1 -0
- package/dist/plugins/targeting/segmentResolver.d.ts +16 -0
- package/dist/plugins/targeting/segmentResolver.d.ts.map +1 -0
- package/dist/plugins/targeting/segmentResolver.js +27 -0
- package/dist/plugins/targeting/segmentResolver.js.map +1 -0
- package/dist/plugins/targeting/targetingPlugin.d.ts +19 -0
- package/dist/plugins/targeting/targetingPlugin.d.ts.map +1 -0
- package/dist/plugins/targeting/targetingPlugin.js +80 -0
- package/dist/plugins/targeting/targetingPlugin.js.map +1 -0
- package/dist/plugins/types.d.ts +35 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +13 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +22 -0
- package/dist/registry.js.map +1 -0
- package/dist/remote/firebase-adapter.d.ts +6 -0
- package/dist/remote/firebase-adapter.d.ts.map +1 -0
- package/dist/remote/firebase-adapter.js +12 -0
- package/dist/remote/firebase-adapter.js.map +1 -0
- package/dist/remote/provider.d.ts +6 -0
- package/dist/remote/provider.d.ts.map +1 -0
- package/dist/remote/provider.js +5 -0
- package/dist/remote/provider.js.map +1 -0
- package/dist/retry/RetryEngine.d.ts +5 -0
- package/dist/retry/RetryEngine.d.ts.map +1 -0
- package/dist/retry/RetryEngine.js +36 -0
- package/dist/retry/RetryEngine.js.map +1 -0
- package/dist/transport/HttpTransport.d.ts +7 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -0
- package/dist/transport/HttpTransport.js +34 -0
- package/dist/transport/HttpTransport.js.map +1 -0
- package/dist/types.d.ts +217 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,13 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { RetryConfig } from "../types";
|
|
2
|
+
export declare const sleep: (ms: number) => Promise<void>;
|
|
3
|
+
export declare const isNonRetryableError: (error: unknown) => boolean;
|
|
4
|
+
export declare const withRetry: <T>(fn: () => Promise<T>, options?: RetryConfig, onRetry?: (attempt: number, error: Error, nextDelay: number) => void) => Promise<T>;
|
|
5
|
+
//# sourceMappingURL=RetryEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetryEngine.d.ts","sourceRoot":"","sources":["../../src/retry/RetryEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CACI,CAAC;AAEpD,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,OAQpD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,CAAC,EAC/B,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,WAAW,EACrB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,KACnE,OAAO,CAAC,CAAC,CA6BX,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AuthenticationError, ConfigError } from "../errors/index";
|
|
2
|
+
import { DEFAULT_RETRY } from "../types";
|
|
3
|
+
export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
4
|
+
export const isNonRetryableError = (error) => {
|
|
5
|
+
if (error instanceof AuthenticationError) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
if (error instanceof ConfigError && error.code === "REVOKED") {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
};
|
|
13
|
+
export const withRetry = async (fn, options, onRetry) => {
|
|
14
|
+
const config = { ...DEFAULT_RETRY, ...options };
|
|
15
|
+
let lastError;
|
|
16
|
+
for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
|
|
17
|
+
try {
|
|
18
|
+
return await fn();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
lastError = error;
|
|
22
|
+
if (isNonRetryableError(error)) {
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
if (attempt < config.maxRetries) {
|
|
26
|
+
const delay = Math.min(config.baseDelay * Math.pow(config.multiplier, attempt), config.maxDelay);
|
|
27
|
+
// Add jitter (±25%) to prevent thundering herd
|
|
28
|
+
const jitter = delay * (0.75 + Math.random() * 0.5);
|
|
29
|
+
onRetry?.(attempt + 1, lastError, jitter);
|
|
30
|
+
await sleep(jitter);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw lastError;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=RetryEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetryEngine.js","sourceRoot":"","sources":["../../src/retry/RetryEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC7D,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,EAAoB,EACpB,OAAqB,EACrB,OAAoE,EACxD,EAAE;IACd,MAAM,MAAM,GAA0B,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACvE,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAc,CAAC;YAE3B,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EACvD,MAAM,CAAC,QAAQ,CAChB,CAAC;gBACF,+CAA+C;gBAC/C,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;gBAEpD,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAU,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,eAAe,KACtB,aAyCD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
import { AuthenticationError, ConfigError } from "../errors/index";
|
|
3
|
+
export const createHttpTransport = (config) => ({
|
|
4
|
+
async request(endpoint, body) {
|
|
5
|
+
const url = `${config.baseUrl}/${endpoint}`;
|
|
6
|
+
const response = await fetch(url, {
|
|
7
|
+
method: "POST",
|
|
8
|
+
headers: {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
data: {
|
|
13
|
+
clientId: config.clientId,
|
|
14
|
+
...body,
|
|
15
|
+
},
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const errorBody = await response.json().catch(() => ({}));
|
|
20
|
+
const errorData = errorBody;
|
|
21
|
+
const code = errorData.error?.code ?? "NETWORK_ERROR";
|
|
22
|
+
const message = errorData.error?.message ?? `HTTP ${response.status}`;
|
|
23
|
+
if (response.status === 401) {
|
|
24
|
+
throw new AuthenticationError(message);
|
|
25
|
+
}
|
|
26
|
+
if (response.status === 429) {
|
|
27
|
+
throw new ConfigError(message, "RATE_LIMITED");
|
|
28
|
+
}
|
|
29
|
+
throw new ConfigError(message, code);
|
|
30
|
+
}
|
|
31
|
+
return (await response.json());
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=HttpTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAQnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAuB,EACR,EAAE,CAAC,CAAC;IACnB,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,IAA8B;QAE9B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE;oBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,GAAG,IAAI;iBACR;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,SAEjB,CAAC;YACF,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,eAAe,CAAC;YACtD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,IAAuB,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import type { EvaluationContext, EvaluationPlugin } from "./plugins/types.js";
|
|
2
|
+
/** Loading strategy for SDK initialization */
|
|
3
|
+
export type LoadingStrategy = "optimistic" | "pessimistic" | "deferred";
|
|
4
|
+
/** Fetch granularity for remote config retrieval */
|
|
5
|
+
export type FetchGranularity = "batch" | "projected";
|
|
6
|
+
/** Default cache TTL: 7 days in milliseconds */
|
|
7
|
+
export declare const DEFAULT_CACHE_TTL: number;
|
|
8
|
+
/** Default pessimistic timeout in milliseconds */
|
|
9
|
+
export declare const DEFAULT_TIMEOUT = 10000;
|
|
10
|
+
export interface CreateConfigOptions {
|
|
11
|
+
/** Required. The clientId token generated in the Portal. */
|
|
12
|
+
clientId: string;
|
|
13
|
+
/**
|
|
14
|
+
* Loading strategy for initialization.
|
|
15
|
+
* - "optimistic" (default): Sync return, background fetch
|
|
16
|
+
* - "pessimistic": Async, blocks until fetch completes
|
|
17
|
+
* - "deferred": Sync return, lazy fetch on first access
|
|
18
|
+
*/
|
|
19
|
+
loadingStrategy?: LoadingStrategy;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch granularity for remote config retrieval.
|
|
22
|
+
* - "batch" (default): Fetch all keys in one request
|
|
23
|
+
* - "projected": Fetch only requested keys on demand
|
|
24
|
+
*/
|
|
25
|
+
fetchGranularity?: FetchGranularity;
|
|
26
|
+
/** Cache storage adapter. Default: memoryStorage() */
|
|
27
|
+
storage?: CacheStorage;
|
|
28
|
+
/** Retry configuration for failed fetches */
|
|
29
|
+
retry?: RetryConfig;
|
|
30
|
+
/** Timeout for pessimistic loading (ms). Default: 10000 */
|
|
31
|
+
timeout?: number;
|
|
32
|
+
/** Cloud Function base URL (override for testing/custom deployments) */
|
|
33
|
+
baseUrl?: string;
|
|
34
|
+
/** Evaluation plugins to register (tree-shakeable pipeline steps) */
|
|
35
|
+
plugins?: EvaluationPlugin[];
|
|
36
|
+
/** Evaluation context for plugin pipeline (can be updated post-init via setContext) */
|
|
37
|
+
context?: EvaluationContext;
|
|
38
|
+
/** Enable consent-aware mode (GDPR): if true and context.consentGranted !== true, returns defaults */
|
|
39
|
+
consentAware?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface ConfigClient {
|
|
42
|
+
/** Get a typed config value by key. */
|
|
43
|
+
getValue<T = unknown>(key: string): T | undefined;
|
|
44
|
+
getValue<T = unknown>(key: string, defaultValue: T): T;
|
|
45
|
+
/** Get a boolean flag by key. Returns false if missing. */
|
|
46
|
+
getFlag(key: string): boolean;
|
|
47
|
+
/** Get all config key-value pairs. */
|
|
48
|
+
getAll(): Record<string, unknown>;
|
|
49
|
+
/** Force refresh from remote. Updates cache and emits 'updated'. */
|
|
50
|
+
refresh(): Promise<void>;
|
|
51
|
+
/** Update the evaluation context (used by plugins for targeting, rollout, etc.) */
|
|
52
|
+
setContext(newContext: EvaluationContext): void;
|
|
53
|
+
/** Subscribe to a lifecycle event. */
|
|
54
|
+
on<E extends ConfigEventType>(event: E, callback: ConfigEventCallback<E>): void;
|
|
55
|
+
/** Unsubscribe from a lifecycle event. */
|
|
56
|
+
off<E extends ConfigEventType>(event: E, callback: ConfigEventCallback<E>): void;
|
|
57
|
+
}
|
|
58
|
+
export interface RetryConfig {
|
|
59
|
+
/** Maximum number of retry attempts. Default: 3 */
|
|
60
|
+
maxRetries?: number;
|
|
61
|
+
/** Base delay in milliseconds. Default: 1000 */
|
|
62
|
+
baseDelay?: number;
|
|
63
|
+
/** Backoff multiplier. Default: 2 (exponential) */
|
|
64
|
+
multiplier?: number;
|
|
65
|
+
/** Maximum delay cap in milliseconds. Default: 30000 */
|
|
66
|
+
maxDelay?: number;
|
|
67
|
+
}
|
|
68
|
+
export declare const DEFAULT_RETRY: Required<RetryConfig>;
|
|
69
|
+
export interface CacheStorage {
|
|
70
|
+
/** Get a value by key. Returns undefined if missing or TTL expired. */
|
|
71
|
+
get<T>(key: string): T | undefined;
|
|
72
|
+
/** Set a value with optional TTL override (ms). Default TTL: 7 days. */
|
|
73
|
+
set<T>(key: string, value: T, ttl?: number): void;
|
|
74
|
+
/** Delete a specific key from cache. */
|
|
75
|
+
delete(key: string): void;
|
|
76
|
+
/** Clear all cached values. */
|
|
77
|
+
clear(): void;
|
|
78
|
+
}
|
|
79
|
+
export interface CacheEntry<T = unknown> {
|
|
80
|
+
value: T;
|
|
81
|
+
expiresAt: number;
|
|
82
|
+
}
|
|
83
|
+
export interface BrowserStorageOptions {
|
|
84
|
+
/** localStorage key prefix. Default: "@jewel998/config" */
|
|
85
|
+
prefix?: string;
|
|
86
|
+
/** Default TTL in milliseconds. Default: 604800000 (7 days) */
|
|
87
|
+
defaultTtl?: number;
|
|
88
|
+
}
|
|
89
|
+
export type ConfigEventType = "ready" | "updated" | "fetchError" | "revoked";
|
|
90
|
+
export interface ConfigEventPayloads {
|
|
91
|
+
ready: {
|
|
92
|
+
loadingStrategy: LoadingStrategy;
|
|
93
|
+
cachedKeys: number;
|
|
94
|
+
};
|
|
95
|
+
updated: {
|
|
96
|
+
keys: string[];
|
|
97
|
+
source: "background" | "refresh";
|
|
98
|
+
};
|
|
99
|
+
fetchError: {
|
|
100
|
+
error: Error;
|
|
101
|
+
retryCount: number;
|
|
102
|
+
willRetry: boolean;
|
|
103
|
+
};
|
|
104
|
+
revoked: {
|
|
105
|
+
clientId: string;
|
|
106
|
+
message: string;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export type ConfigEventCallback<E extends ConfigEventType> = (payload: ConfigEventPayloads[E]) => void;
|
|
110
|
+
export interface LoadingContext {
|
|
111
|
+
clientId: string;
|
|
112
|
+
fetcher: ConfigFetcher;
|
|
113
|
+
cache: CacheStorage;
|
|
114
|
+
events: EventEmitterInterface;
|
|
115
|
+
retry: Required<RetryConfig>;
|
|
116
|
+
timeout: number;
|
|
117
|
+
granularity: FetchGranularity;
|
|
118
|
+
}
|
|
119
|
+
export interface LoadingResult {
|
|
120
|
+
initialData: Record<string, unknown>;
|
|
121
|
+
status: "ready" | "pending";
|
|
122
|
+
}
|
|
123
|
+
export interface LoadingStrategyHandler {
|
|
124
|
+
execute(context: LoadingContext): LoadingResult | Promise<LoadingResult>;
|
|
125
|
+
}
|
|
126
|
+
export interface ConfigFetcher {
|
|
127
|
+
/** Fetch all configs for the bound project+environment */
|
|
128
|
+
fetchAll(): Promise<Record<string, unknown>>;
|
|
129
|
+
/** Fetch specific keys only */
|
|
130
|
+
fetchKeys(keys: string[]): Promise<Record<string, unknown>>;
|
|
131
|
+
}
|
|
132
|
+
export interface HttpTransport {
|
|
133
|
+
request<T>(endpoint: string, body?: Record<string, unknown>): Promise<T>;
|
|
134
|
+
}
|
|
135
|
+
export interface GetConfigRequest {
|
|
136
|
+
clientId: string;
|
|
137
|
+
keys?: string[];
|
|
138
|
+
}
|
|
139
|
+
export interface GetConfigResponse {
|
|
140
|
+
data: Record<string, unknown>;
|
|
141
|
+
version: string;
|
|
142
|
+
timestamp: string;
|
|
143
|
+
}
|
|
144
|
+
export interface EventEmitterInterface {
|
|
145
|
+
on<E extends ConfigEventType>(event: E, callback: ConfigEventCallback<E>): void;
|
|
146
|
+
off<E extends ConfigEventType>(event: E, callback: ConfigEventCallback<E>): void;
|
|
147
|
+
emit<E extends ConfigEventType>(event: E, payload: ConfigEventPayloads[E]): void;
|
|
148
|
+
removeAllListeners(): void;
|
|
149
|
+
}
|
|
150
|
+
/** @deprecated Use CreateConfigOptions instead */
|
|
151
|
+
export type ConfigScope = "tenant" | "project" | "environment";
|
|
152
|
+
/** @deprecated Use LoadingStrategy instead */
|
|
153
|
+
export type ConfigSourceMode = "offline" | "remote" | "hybrid";
|
|
154
|
+
/** @deprecated Config definitions are no longer needed client-side */
|
|
155
|
+
export interface ConfigDefinition<T = unknown> {
|
|
156
|
+
key: string;
|
|
157
|
+
defaultValue: T;
|
|
158
|
+
sourceMode: ConfigSourceMode;
|
|
159
|
+
scope: ConfigScope;
|
|
160
|
+
fallbackValue?: T;
|
|
161
|
+
}
|
|
162
|
+
/** @deprecated Scoping is handled by clientId */
|
|
163
|
+
export interface ConfigResolveContext {
|
|
164
|
+
tenantId?: string;
|
|
165
|
+
projectId?: string;
|
|
166
|
+
environment?: string;
|
|
167
|
+
}
|
|
168
|
+
export interface ProjectRecord {
|
|
169
|
+
id: string;
|
|
170
|
+
name: string;
|
|
171
|
+
ownerId: string;
|
|
172
|
+
authorizedUsers: string[];
|
|
173
|
+
createdAt: string;
|
|
174
|
+
updatedAt: string;
|
|
175
|
+
}
|
|
176
|
+
export interface EnvironmentRecord {
|
|
177
|
+
id: string;
|
|
178
|
+
projectId: string;
|
|
179
|
+
name: string;
|
|
180
|
+
allowedDomains: string[];
|
|
181
|
+
createdAt: string;
|
|
182
|
+
updatedAt: string;
|
|
183
|
+
}
|
|
184
|
+
export interface ClientIdRecord {
|
|
185
|
+
token: string;
|
|
186
|
+
status: "active" | "revoked";
|
|
187
|
+
createdAt: string;
|
|
188
|
+
revokedAt: string | null;
|
|
189
|
+
createdBy: string;
|
|
190
|
+
label?: string;
|
|
191
|
+
}
|
|
192
|
+
export interface ConfigRecord {
|
|
193
|
+
key: string;
|
|
194
|
+
value: unknown;
|
|
195
|
+
valueType: "string" | "number" | "boolean" | "json";
|
|
196
|
+
version: string;
|
|
197
|
+
publishedAt: string;
|
|
198
|
+
updatedAt: string;
|
|
199
|
+
updatedBy: string;
|
|
200
|
+
}
|
|
201
|
+
/** @deprecated Use ProjectRecord instead */
|
|
202
|
+
export interface TenantRecord {
|
|
203
|
+
id: string;
|
|
204
|
+
name: string;
|
|
205
|
+
ownerId: string;
|
|
206
|
+
createdAt: string;
|
|
207
|
+
}
|
|
208
|
+
/** @deprecated Use ConfigRecord instead */
|
|
209
|
+
export interface ConfigVersionRecord {
|
|
210
|
+
id: string;
|
|
211
|
+
projectId: string;
|
|
212
|
+
environmentId?: string;
|
|
213
|
+
version: string;
|
|
214
|
+
payload: Record<string, unknown>;
|
|
215
|
+
publishedAt?: string;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════
|
|
2
|
+
// Core SDK Types
|
|
3
|
+
// ═══════════════════════════════════════════════════════════════
|
|
4
|
+
/** Default cache TTL: 7 days in milliseconds */
|
|
5
|
+
export const DEFAULT_CACHE_TTL = 7 * 24 * 60 * 60 * 1000; // 604_800_000 ms
|
|
6
|
+
/** Default pessimistic timeout in milliseconds */
|
|
7
|
+
export const DEFAULT_TIMEOUT = 10_000;
|
|
8
|
+
export const DEFAULT_RETRY = {
|
|
9
|
+
maxRetries: 3,
|
|
10
|
+
baseDelay: 1000,
|
|
11
|
+
multiplier: 2,
|
|
12
|
+
maxDelay: 30_000,
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,iBAAiB;AACjB,kEAAkE;AAUlE,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,iBAAiB;AAE3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAmGtC,MAAM,CAAC,MAAM,aAAa,GAA0B;IAClD,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,MAAM;CACjB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jewel998/config",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"description": "Free, self-hosted feature flags and remote configuration SDK",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/jewel998/config.git",
|
|
11
|
+
"directory": "packages/config"
|
|
12
|
+
},
|
|
13
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
14
|
+
"main": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./storage": {
|
|
22
|
+
"types": "./dist/cache/memoryStorage.d.ts",
|
|
23
|
+
"import": "./dist/cache/memoryStorage.js"
|
|
24
|
+
},
|
|
25
|
+
"./management": {
|
|
26
|
+
"types": "./dist/management/index.d.ts",
|
|
27
|
+
"import": "./dist/management/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./targeting": {
|
|
30
|
+
"types": "./dist/plugins/targeting/index.d.ts",
|
|
31
|
+
"import": "./dist/plugins/targeting/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./rollout": {
|
|
34
|
+
"types": "./dist/plugins/rollout/index.d.ts",
|
|
35
|
+
"import": "./dist/plugins/rollout/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./schedule": {
|
|
38
|
+
"types": "./dist/plugins/schedule/index.d.ts",
|
|
39
|
+
"import": "./dist/plugins/schedule/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./prerequisites": {
|
|
42
|
+
"types": "./dist/plugins/prerequisites/index.d.ts",
|
|
43
|
+
"import": "./dist/plugins/prerequisites/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./lifecycle": {
|
|
46
|
+
"types": "./dist/plugins/lifecycle/index.d.ts",
|
|
47
|
+
"import": "./dist/plugins/lifecycle/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./overrides": {
|
|
50
|
+
"types": "./dist/plugins/overrides/index.d.ts",
|
|
51
|
+
"import": "./dist/plugins/overrides/index.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist",
|
|
56
|
+
"README.md"
|
|
57
|
+
],
|
|
58
|
+
"engines": {
|
|
59
|
+
"node": ">=22.0.0"
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "tsc -p tsconfig.json",
|
|
63
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"lint": "oxlint src",
|
|
66
|
+
"typecheck": "tsc --noEmit"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"typescript": "^5.9.3",
|
|
70
|
+
"vitest": "^4.1.10"
|
|
71
|
+
}
|
|
72
|
+
}
|