@ops-ai/astro-feature-flags-toggly 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/LICENSE +23 -0
- package/README.md +462 -0
- package/dist/chunk-354E3C57.js +173 -0
- package/dist/chunk-354E3C57.js.map +1 -0
- package/dist/chunk-4UKIT2NP.js +44 -0
- package/dist/chunk-4UKIT2NP.js.map +1 -0
- package/dist/chunk-FK633ULF.js +200 -0
- package/dist/chunk-FK633ULF.js.map +1 -0
- package/dist/chunk-XCJSQJHR.js +74 -0
- package/dist/chunk-XCJSQJHR.js.map +1 -0
- package/dist/chunk-XQGKGTBK.js +161 -0
- package/dist/chunk-XQGKGTBK.js.map +1 -0
- package/dist/client/setup.d.ts +3 -0
- package/dist/client/setup.js +21 -0
- package/dist/client/setup.js.map +1 -0
- package/dist/client/store.d.ts +59 -0
- package/dist/client/store.js +25 -0
- package/dist/client/store.js.map +1 -0
- package/dist/components/Feature.astro +79 -0
- package/dist/components/FeatureClient.astro +144 -0
- package/dist/frameworks/react/Feature.d.ts +86 -0
- package/dist/frameworks/react/Feature.js +14 -0
- package/dist/frameworks/react/Feature.js.map +1 -0
- package/dist/frameworks/react/index.d.ts +3 -0
- package/dist/frameworks/react/index.js +12 -0
- package/dist/frameworks/react/index.js.map +1 -0
- package/dist/frameworks/svelte/Feature.svelte +75 -0
- package/dist/frameworks/svelte/stores.d.ts +54 -0
- package/dist/frameworks/svelte/stores.js +34 -0
- package/dist/frameworks/svelte/stores.js.map +1 -0
- package/dist/frameworks/vue/Feature.vue +93 -0
- package/dist/frameworks/vue/composables.d.ts +56 -0
- package/dist/frameworks/vue/composables.js +39 -0
- package/dist/frameworks/vue/composables.js.map +1 -0
- package/dist/index-S3g0i0FH.d.ts +102 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/index.d.ts +24 -0
- package/dist/integration/index.js +10 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/server/toggly-server.d.ts +53 -0
- package/dist/server/toggly-server.js +9 -0
- package/dist/server/toggly-server.js.map +1 -0
- package/dist/server/utils.d.ts +43 -0
- package/dist/server/utils.js +13 -0
- package/dist/server/utils.js.map +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
$flags,
|
|
3
|
+
$isReady
|
|
4
|
+
} from "../../chunk-FK633ULF.js";
|
|
5
|
+
|
|
6
|
+
// src/frameworks/vue/composables.ts
|
|
7
|
+
import { computed } from "vue";
|
|
8
|
+
import { useStore } from "@nanostores/vue";
|
|
9
|
+
function useFeatureFlag(flagKey, defaultValue = false) {
|
|
10
|
+
const flags = useStore($flags);
|
|
11
|
+
const isReady = useStore($isReady);
|
|
12
|
+
const enabled = computed(() => flags.value[flagKey] ?? defaultValue);
|
|
13
|
+
return { enabled, isReady };
|
|
14
|
+
}
|
|
15
|
+
function useFeatureGate(flagKeys, requirement = "all", negate = false) {
|
|
16
|
+
const flags = useStore($flags);
|
|
17
|
+
const isReady = useStore($isReady);
|
|
18
|
+
const enabled = computed(() => {
|
|
19
|
+
if (flagKeys.length === 0) {
|
|
20
|
+
return !negate;
|
|
21
|
+
}
|
|
22
|
+
let isEnabled;
|
|
23
|
+
if (requirement === "any") {
|
|
24
|
+
isEnabled = flagKeys.some((key) => flags.value[key] === true);
|
|
25
|
+
} else {
|
|
26
|
+
isEnabled = flagKeys.every((key) => flags.value[key] === true);
|
|
27
|
+
}
|
|
28
|
+
if (negate) {
|
|
29
|
+
isEnabled = !isEnabled;
|
|
30
|
+
}
|
|
31
|
+
return isEnabled;
|
|
32
|
+
});
|
|
33
|
+
return { enabled, isReady };
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
useFeatureFlag,
|
|
37
|
+
useFeatureGate
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=composables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/frameworks/vue/composables.ts"],"sourcesContent":["/**\n * Vue Composables for Toggly\n */\n\nimport { computed, type Ref } from 'vue';\nimport { useStore } from '@nanostores/vue';\nimport { $flags, $isReady } from '../../client/store.js';\n\n/**\n * Hook to check if a feature flag is enabled\n * \n * @param flagKey - Feature flag key to check\n * @param defaultValue - Default value if flag not found (default: false)\n * @returns Object with enabled state and ready state\n * \n * @example\n * ```vue\n * <script setup>\n * const { enabled, isReady } = useFeatureFlag('new-dashboard');\n * </script>\n * \n * <template>\n * <Loading v-if=\"!isReady\" />\n * <NewDashboard v-else-if=\"enabled\" />\n * <OldDashboard v-else />\n * </template>\n * ```\n */\nexport function useFeatureFlag(\n flagKey: string,\n defaultValue: boolean = false\n): {\n enabled: Readonly<Ref<boolean>>;\n isReady: Readonly<Ref<boolean>>;\n} {\n const flags = useStore($flags);\n const isReady = useStore($isReady);\n\n const enabled = computed(() => flags.value[flagKey] ?? defaultValue);\n\n return { enabled, isReady };\n}\n\n/**\n * Hook to check if multiple feature flags are enabled\n * \n * @param flagKeys - Array of feature flag keys to check\n * @param requirement - 'all' or 'any' (default: 'all')\n * @param negate - If true, negates the result (default: false)\n * @returns Object with enabled state and ready state\n * \n * @example\n * ```vue\n * <script setup>\n * const { enabled } = useFeatureGate(['feature1', 'feature2'], 'any');\n * </script>\n * \n * <template>\n * <NewFeatures v-if=\"enabled\" />\n * <OldFeatures v-else />\n * </template>\n * ```\n */\nexport function useFeatureGate(\n flagKeys: string[],\n requirement: 'all' | 'any' = 'all',\n negate: boolean = false\n): {\n enabled: Readonly<Ref<boolean>>;\n isReady: Readonly<Ref<boolean>>;\n} {\n const flags = useStore($flags);\n const isReady = useStore($isReady);\n\n const enabled = computed(() => {\n if (flagKeys.length === 0) {\n return !negate;\n }\n\n let isEnabled: boolean;\n\n if (requirement === 'any') {\n isEnabled = flagKeys.some((key) => flags.value[key] === true);\n } else {\n isEnabled = flagKeys.every((key) => flags.value[key] === true);\n }\n\n if (negate) {\n isEnabled = !isEnabled;\n }\n\n return isEnabled;\n });\n\n return { enabled, isReady };\n}\n\n\n"],"mappings":";;;;;;AAIA,SAAS,gBAA0B;AACnC,SAAS,gBAAgB;AAuBlB,SAAS,eACd,SACA,eAAwB,OAIxB;AACA,QAAM,QAAQ,SAAS,MAAM;AAC7B,QAAM,UAAU,SAAS,QAAQ;AAEjC,QAAM,UAAU,SAAS,MAAM,MAAM,MAAM,OAAO,KAAK,YAAY;AAEnE,SAAO,EAAE,SAAS,QAAQ;AAC5B;AAsBO,SAAS,eACd,UACA,cAA6B,OAC7B,SAAkB,OAIlB;AACA,QAAM,QAAQ,SAAS,MAAM;AAC7B,QAAM,UAAU,SAAS,QAAQ;AAEjC,QAAM,UAAU,SAAS,MAAM;AAC7B,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,CAAC;AAAA,IACV;AAEA,QAAI;AAEJ,QAAI,gBAAgB,OAAO;AACzB,kBAAY,SAAS,KAAK,CAAC,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI;AAAA,IAC9D,OAAO;AACL,kBAAY,SAAS,MAAM,CAAC,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI;AAAA,IAC/D;AAEA,QAAI,QAAQ;AACV,kBAAY,CAAC;AAAA,IACf;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,SAAS,QAAQ;AAC5B;","names":[]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toggly Astro SDK - Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Configuration options for Toggly integration
|
|
6
|
+
*/
|
|
7
|
+
interface TogglyConfig {
|
|
8
|
+
/** Base URI for the Toggly API (default: 'https://client.toggly.io') */
|
|
9
|
+
baseURI?: string;
|
|
10
|
+
/** Application key from Toggly */
|
|
11
|
+
appKey?: string;
|
|
12
|
+
/** Environment name (e.g., 'Production', 'Staging') (default: 'Production') */
|
|
13
|
+
environment?: string;
|
|
14
|
+
/** Default flag values to use when API is unavailable */
|
|
15
|
+
flagDefaults?: Record<string, boolean>;
|
|
16
|
+
/** Feature flags refresh interval in milliseconds (default: 180000 = 3 minutes) */
|
|
17
|
+
featureFlagsRefreshInterval?: number;
|
|
18
|
+
/** Enable debug logging (default: false) */
|
|
19
|
+
isDebug?: boolean;
|
|
20
|
+
/** Connection timeout in milliseconds (default: 5000) */
|
|
21
|
+
connectTimeout?: number;
|
|
22
|
+
/** User identity for targeting (optional) */
|
|
23
|
+
identity?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Map of feature flag keys to their boolean values
|
|
27
|
+
*/
|
|
28
|
+
type Flags = Record<string, boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Toggly client instance interface
|
|
31
|
+
*/
|
|
32
|
+
interface TogglyClient {
|
|
33
|
+
/**
|
|
34
|
+
* Get all feature flags as a map of key-value pairs
|
|
35
|
+
* @returns Promise resolving to a map of flag keys to boolean values
|
|
36
|
+
*/
|
|
37
|
+
getFlags(): Promise<Flags>;
|
|
38
|
+
/**
|
|
39
|
+
* Get a single feature flag value
|
|
40
|
+
* @param key - The feature flag key
|
|
41
|
+
* @param defaultValue - Optional default value if flag is not found (default: false)
|
|
42
|
+
* @returns Promise resolving to the flag's boolean value
|
|
43
|
+
*/
|
|
44
|
+
getFlag(key: string, defaultValue?: boolean): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Evaluate a feature gate with multiple flags
|
|
47
|
+
* @param keys - Array of feature flag keys to evaluate
|
|
48
|
+
* @param requirement - 'all' requires all flags to be true, 'any' requires at least one
|
|
49
|
+
* @param negate - If true, negates the result
|
|
50
|
+
* @returns Promise resolving to boolean evaluation result
|
|
51
|
+
*/
|
|
52
|
+
evaluateGate(keys: string[], requirement?: 'all' | 'any', negate?: boolean): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Manually refresh the feature flags cache by fetching from the API
|
|
55
|
+
* @returns Promise that resolves when flags have been refreshed
|
|
56
|
+
*/
|
|
57
|
+
refreshFlags(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Page feature mapping for frontmatter extraction
|
|
61
|
+
*/
|
|
62
|
+
interface PageFeatureMapping {
|
|
63
|
+
[routePath: string]: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Props for Feature component
|
|
67
|
+
*/
|
|
68
|
+
interface FeatureProps {
|
|
69
|
+
/** Single feature flag key to check */
|
|
70
|
+
flag?: string;
|
|
71
|
+
/** Multiple feature flag keys to check */
|
|
72
|
+
flags?: string[];
|
|
73
|
+
/** Requirement for multiple flags: 'all' or 'any' (default: 'all') */
|
|
74
|
+
requirement?: 'all' | 'any';
|
|
75
|
+
/** If true, negates the result (default: false) */
|
|
76
|
+
negate?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Props for FeatureClient component
|
|
80
|
+
*/
|
|
81
|
+
interface FeatureClientProps {
|
|
82
|
+
/** Feature flag key to check */
|
|
83
|
+
flag: string;
|
|
84
|
+
/** Hydration strategy: 'load', 'idle', or 'visible' */
|
|
85
|
+
client?: 'load' | 'idle' | 'visible';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Augment Astro global types
|
|
89
|
+
*/
|
|
90
|
+
declare global {
|
|
91
|
+
namespace App {
|
|
92
|
+
interface Locals {
|
|
93
|
+
toggly: TogglyClient;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
interface Window {
|
|
97
|
+
__TOGGLY_CONFIG__?: TogglyConfig;
|
|
98
|
+
__TOGGLY_PAGE_FEATURES__?: PageFeatureMapping;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export type { Flags as F, PageFeatureMapping as P, TogglyConfig as T, TogglyClient as a, FeatureProps as b, FeatureClientProps as c };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { TogglyIntegrationOptions, createTogglyMiddleware, default as togglyIntegration } from './integration/index.js';
|
|
2
|
+
export { TogglyServer, createTogglyServerClient } from './server/toggly-server.js';
|
|
3
|
+
export { allFeaturesEnabled, anyFeatureEnabled, getTogglyFromAstroGlobal, withFeatureFlag } from './server/utils.js';
|
|
4
|
+
export { $error, $flag, $flags, $gate, $isReady, clearIdentity, initTogglyClient, refreshFlags, setIdentity, stopRefreshInterval } from './client/store.js';
|
|
5
|
+
export { c as FeatureClientProps, b as FeatureProps, F as Flags, P as PageFeatureMapping, a as TogglyClient, T as TogglyConfig } from './index-S3g0i0FH.js';
|
|
6
|
+
import 'astro';
|
|
7
|
+
import 'nanostores';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTogglyMiddleware,
|
|
3
|
+
togglyIntegration
|
|
4
|
+
} from "./chunk-354E3C57.js";
|
|
5
|
+
import {
|
|
6
|
+
TogglyServer,
|
|
7
|
+
createTogglyServerClient
|
|
8
|
+
} from "./chunk-XQGKGTBK.js";
|
|
9
|
+
import {
|
|
10
|
+
allFeaturesEnabled,
|
|
11
|
+
anyFeatureEnabled,
|
|
12
|
+
getTogglyFromAstroGlobal,
|
|
13
|
+
withFeatureFlag
|
|
14
|
+
} from "./chunk-4UKIT2NP.js";
|
|
15
|
+
import {
|
|
16
|
+
$error,
|
|
17
|
+
$flag,
|
|
18
|
+
$flags,
|
|
19
|
+
$gate,
|
|
20
|
+
$isReady,
|
|
21
|
+
clearIdentity,
|
|
22
|
+
initTogglyClient,
|
|
23
|
+
refreshFlags,
|
|
24
|
+
setIdentity,
|
|
25
|
+
stopRefreshInterval
|
|
26
|
+
} from "./chunk-FK633ULF.js";
|
|
27
|
+
export {
|
|
28
|
+
$error,
|
|
29
|
+
$flag,
|
|
30
|
+
$flags,
|
|
31
|
+
$gate,
|
|
32
|
+
$isReady,
|
|
33
|
+
TogglyServer,
|
|
34
|
+
allFeaturesEnabled,
|
|
35
|
+
anyFeatureEnabled,
|
|
36
|
+
clearIdentity,
|
|
37
|
+
createTogglyMiddleware,
|
|
38
|
+
createTogglyServerClient,
|
|
39
|
+
getTogglyFromAstroGlobal,
|
|
40
|
+
initTogglyClient,
|
|
41
|
+
refreshFlags,
|
|
42
|
+
setIdentity,
|
|
43
|
+
stopRefreshInterval,
|
|
44
|
+
togglyIntegration,
|
|
45
|
+
withFeatureFlag
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AstroIntegration } from 'astro';
|
|
2
|
+
import { T as TogglyConfig } from '../index-S3g0i0FH.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Toggly Astro Integration
|
|
6
|
+
*
|
|
7
|
+
* Provides build-time configuration, frontmatter extraction, and runtime injection
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
interface TogglyIntegrationOptions extends TogglyConfig {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Toggly Astro Integration
|
|
14
|
+
*/
|
|
15
|
+
declare function togglyIntegration(options?: TogglyIntegrationOptions): AstroIntegration;
|
|
16
|
+
/**
|
|
17
|
+
* Astro middleware to inject Toggly into locals
|
|
18
|
+
* This should be added to src/middleware.ts in the user's project
|
|
19
|
+
*/
|
|
20
|
+
declare function createTogglyMiddleware(config: TogglyConfig): ({ locals }: {
|
|
21
|
+
locals: Record<string, any>;
|
|
22
|
+
}, next: () => Promise<Response>) => Promise<Response>;
|
|
23
|
+
|
|
24
|
+
export { type TogglyIntegrationOptions, createTogglyMiddleware, togglyIntegration as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { T as TogglyConfig, a as TogglyClient, F as Flags } from '../index-S3g0i0FH.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Toggly Server-Side Client for Astro SSR/SSG
|
|
5
|
+
*
|
|
6
|
+
* This module provides server-side feature flag evaluation for Astro applications.
|
|
7
|
+
* It caches flags for SSG builds and fetches fresh flags for SSR requests.
|
|
8
|
+
* This is a complete, embedded Toggly client implementation.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Server-side Toggly client implementation
|
|
13
|
+
*/
|
|
14
|
+
declare class TogglyServer implements TogglyClient {
|
|
15
|
+
private config;
|
|
16
|
+
private cache;
|
|
17
|
+
private fetchPromise;
|
|
18
|
+
constructor(config: TogglyConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Get API URL for fetching flags
|
|
21
|
+
*/
|
|
22
|
+
private getApiUrl;
|
|
23
|
+
/**
|
|
24
|
+
* Check if cache is valid
|
|
25
|
+
*/
|
|
26
|
+
private isCacheValid;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch flags from Toggly API
|
|
29
|
+
*/
|
|
30
|
+
private fetchFlags;
|
|
31
|
+
/**
|
|
32
|
+
* Refresh flags cache
|
|
33
|
+
*/
|
|
34
|
+
refreshFlags(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Get all feature flags
|
|
37
|
+
*/
|
|
38
|
+
getFlags(): Promise<Flags>;
|
|
39
|
+
/**
|
|
40
|
+
* Get a single feature flag value
|
|
41
|
+
*/
|
|
42
|
+
getFlag(key: string, defaultValue?: boolean): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Evaluate a feature gate with multiple flags
|
|
45
|
+
*/
|
|
46
|
+
evaluateGate(keys: string[], requirement?: 'all' | 'any', negate?: boolean): Promise<boolean>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a new Toggly server-side client instance
|
|
50
|
+
*/
|
|
51
|
+
declare function createTogglyServerClient(config: TogglyConfig): TogglyServer;
|
|
52
|
+
|
|
53
|
+
export { TogglyServer, createTogglyServerClient };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { AstroGlobal } from 'astro';
|
|
2
|
+
import { a as TogglyClient } from '../index-S3g0i0FH.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Toggly Server Utilities for Astro
|
|
6
|
+
*
|
|
7
|
+
* Helper functions for server-side feature flag evaluation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get Toggly client from Astro global
|
|
12
|
+
*
|
|
13
|
+
* @param Astro - Astro global object
|
|
14
|
+
* @returns TogglyClient instance
|
|
15
|
+
* @throws Error if Toggly client is not initialized
|
|
16
|
+
*/
|
|
17
|
+
declare function getTogglyFromAstroGlobal(Astro: AstroGlobal): TogglyClient;
|
|
18
|
+
/**
|
|
19
|
+
* Higher-order function for page-level feature gating
|
|
20
|
+
*
|
|
21
|
+
* @param featureKey - Feature flag key to check
|
|
22
|
+
* @param Astro - Astro global object
|
|
23
|
+
* @returns Boolean indicating if feature is enabled
|
|
24
|
+
*/
|
|
25
|
+
declare function withFeatureFlag(featureKey: string, Astro: AstroGlobal): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if any of the provided feature flags are enabled
|
|
28
|
+
*
|
|
29
|
+
* @param featureKeys - Array of feature flag keys to check
|
|
30
|
+
* @param Astro - Astro global object
|
|
31
|
+
* @returns Boolean indicating if any feature is enabled
|
|
32
|
+
*/
|
|
33
|
+
declare function anyFeatureEnabled(featureKeys: string[], Astro: AstroGlobal): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if all of the provided feature flags are enabled
|
|
36
|
+
*
|
|
37
|
+
* @param featureKeys - Array of feature flag keys to check
|
|
38
|
+
* @param Astro - Astro global object
|
|
39
|
+
* @returns Boolean indicating if all features are enabled
|
|
40
|
+
*/
|
|
41
|
+
declare function allFeaturesEnabled(featureKeys: string[], Astro: AstroGlobal): Promise<boolean>;
|
|
42
|
+
|
|
43
|
+
export { allFeaturesEnabled, anyFeatureEnabled, getTogglyFromAstroGlobal, withFeatureFlag };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
allFeaturesEnabled,
|
|
3
|
+
anyFeatureEnabled,
|
|
4
|
+
getTogglyFromAstroGlobal,
|
|
5
|
+
withFeatureFlag
|
|
6
|
+
} from "../chunk-4UKIT2NP.js";
|
|
7
|
+
export {
|
|
8
|
+
allFeaturesEnabled,
|
|
9
|
+
anyFeatureEnabled,
|
|
10
|
+
getTogglyFromAstroGlobal,
|
|
11
|
+
withFeatureFlag
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ops-ai/astro-feature-flags-toggly",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Toggly feature flags SDK for Astro with SSR, SSG, and framework support",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./integration": {
|
|
15
|
+
"types": "./dist/integration/index.d.ts",
|
|
16
|
+
"import": "./dist/integration/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./components/Feature.astro": "./dist/components/Feature.astro",
|
|
19
|
+
"./components/FeatureClient.astro": "./dist/components/FeatureClient.astro",
|
|
20
|
+
"./react": {
|
|
21
|
+
"types": "./dist/frameworks/react/index.d.ts",
|
|
22
|
+
"import": "./dist/frameworks/react/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./vue": {
|
|
25
|
+
"types": "./dist/frameworks/vue/index.d.ts",
|
|
26
|
+
"import": "./dist/frameworks/vue/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./vue/Feature.vue": "./dist/frameworks/vue/Feature.vue",
|
|
29
|
+
"./svelte": {
|
|
30
|
+
"types": "./dist/frameworks/svelte/index.d.ts",
|
|
31
|
+
"import": "./dist/frameworks/svelte/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./svelte/Feature.svelte": "./dist/frameworks/svelte/Feature.svelte"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsup && npm run copy-components",
|
|
40
|
+
"copy-components": "mkdir -p dist/components dist/frameworks/vue dist/frameworks/svelte && cp src/components/*.astro dist/components/ && cp src/frameworks/vue/*.vue dist/frameworks/vue/ && cp src/frameworks/svelte/*.svelte dist/frameworks/svelte/",
|
|
41
|
+
"dev": "tsup --watch",
|
|
42
|
+
"typecheck": "tsc --noEmit",
|
|
43
|
+
"clean": "rm -rf dist"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"astro",
|
|
47
|
+
"feature-flags",
|
|
48
|
+
"toggly",
|
|
49
|
+
"feature-toggle",
|
|
50
|
+
"ssr",
|
|
51
|
+
"ssg"
|
|
52
|
+
],
|
|
53
|
+
"author": "Ops.AI <hello@ops.ai>",
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"repository": {
|
|
56
|
+
"type": "git",
|
|
57
|
+
"url": "https://github.com/ops-ai/Toggly.FeatureManagement"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"glob": "^10.3.10"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@astrojs/check": "^0.9.0",
|
|
64
|
+
"@nanostores/react": "^1.0.0",
|
|
65
|
+
"@nanostores/vue": "^1.0.1",
|
|
66
|
+
"@types/node": "^20.11.0",
|
|
67
|
+
"@types/react": "^19.2.7",
|
|
68
|
+
"astro": "^5.16.0",
|
|
69
|
+
"react": "^19.2.3",
|
|
70
|
+
"svelte": "^5.46.1",
|
|
71
|
+
"tsup": "^8.0.0",
|
|
72
|
+
"typescript": "^5.3.3",
|
|
73
|
+
"vue": "^3.5.26"
|
|
74
|
+
},
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"@nanostores/react": "^1.0.0",
|
|
77
|
+
"@nanostores/svelte": "^0.10.0",
|
|
78
|
+
"@nanostores/vue": "^1.0.0",
|
|
79
|
+
"astro": "^5.0.0",
|
|
80
|
+
"nanostores": "^1.0.0",
|
|
81
|
+
"react": ">=18.0.0",
|
|
82
|
+
"svelte": ">=4.0.0",
|
|
83
|
+
"vue": ">=3.0.0"
|
|
84
|
+
},
|
|
85
|
+
"peerDependenciesMeta": {
|
|
86
|
+
"@nanostores/react": {
|
|
87
|
+
"optional": true
|
|
88
|
+
},
|
|
89
|
+
"@nanostores/svelte": {
|
|
90
|
+
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"@nanostores/vue": {
|
|
93
|
+
"optional": true
|
|
94
|
+
},
|
|
95
|
+
"react": {
|
|
96
|
+
"optional": true
|
|
97
|
+
},
|
|
98
|
+
"svelte": {
|
|
99
|
+
"optional": true
|
|
100
|
+
},
|
|
101
|
+
"vue": {
|
|
102
|
+
"optional": true
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|