@flagsync/nextjs-sdk 0.8.5 → 0.8.6-alpha.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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/identify.ts"],"sourcesContent":["export type {\n CustomAttributes,\n CustomAttributeValue,\n FsConfig,\n FsClient,\n LogLevel,\n FsUserContext,\n FeatureFlags,\n} from '@flagsync/node-sdk';\n\nexport { SyncType } from '@flagsync/node-sdk';\n\nexport type { JsonObject } from './types';\n\nexport { createTypedFlag, createClient, createAdapter } from './adapter';\nexport { createIdentify } from './identify';\n","import {\n FeatureFlags,\n FlagReturnType,\n FlagSyncFactory,\n FsClient,\n type FsConfig,\n type FsUserContext,\n NoExplicitReturnType,\n} from '@flagsync/node-sdk';\nimport { Adapter, FlagDeclaration } from 'flags';\nimport { flag } from 'flags/next';\n\n/**\n * Creates a FlagSync client instance that can be used across multiple feature flags.\n * This function should be called once to create a singleton client for your application.\n */\nexport function createClient(config: FsConfig): FsClient {\n const instance = FlagSyncFactory({\n ...config,\n metadata: {\n sdkName: '@flagsync/nextjs-sdk',\n sdkVersion: '0.8.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/identify.ts"],"sourcesContent":["export type {\n CustomAttributes,\n CustomAttributeValue,\n FsConfig,\n FsClient,\n LogLevel,\n FsUserContext,\n FeatureFlags,\n} from '@flagsync/node-sdk';\n\nexport { SyncType } from '@flagsync/node-sdk';\n\nexport type { JsonObject } from './types';\n\nexport { createTypedFlag, createClient, createAdapter } from './adapter';\nexport { createIdentify } from './identify';\n","import {\n FeatureFlags,\n FlagReturnType,\n FlagSyncFactory,\n FsClient,\n type FsConfig,\n type FsUserContext,\n NoExplicitReturnType,\n} from '@flagsync/node-sdk';\nimport { Adapter, FlagDeclaration } from 'flags';\nimport { flag } from 'flags/next';\n\n/**\n * Creates a FlagSync client instance that can be used across multiple feature flags.\n * This function should be called once to create a singleton client for your application.\n */\nexport function createClient(config: FsConfig): FsClient {\n const instance = FlagSyncFactory({\n ...config,\n metadata: {\n sdkName: '@flagsync/nextjs-sdk',\n sdkVersion: '0.8.6-alpha.0',\n },\n });\n return instance.client();\n}\n\n/**\n * Creates an adapter factory that integrates FlagSync with Vercel's feature flag system.\n * This adapter handles the communication between your application and the FlagSync service.\n */\nexport function createAdapter(client: FsClient) {\n let isReady = false;\n\n /**\n * Ensures the FlagSync client is ready before making any flag decisions.\n * This is called internally before each flag evaluation.\n */\n const ensureReady = async () => {\n if (!isReady) {\n await client.waitForReady();\n isReady = true;\n }\n };\n\n function adapter<T = any>(): Adapter<\n FlagReturnType<T, string, FeatureFlags>,\n FsUserContext\n > {\n return {\n async decide({\n key,\n entities,\n defaultValue,\n }: {\n key: string;\n entities?: FsUserContext;\n defaultValue?: FlagReturnType<T, string, FeatureFlags>;\n }): Promise<FlagReturnType<T, string, FeatureFlags>> {\n await ensureReady();\n\n const userContext: FsUserContext = {\n key: 'anonymous',\n ...(entities ?? {}),\n };\n\n return client.flag(userContext, key, defaultValue);\n },\n };\n }\n\n return adapter;\n}\n\n/**\n * Creates an adapter factory that integrates FlagSync with Vercel's feature flag system.\n * This adapter handles the communication between your application and the FlagSync service.\n */\nfunction createTypedAdapter(client: FsClient) {\n let isReady = false;\n\n /**\n * Ensures the FlagSync client is ready before making any flag decisions.\n * This is called internally before each flag evaluation.\n */\n const ensureReady = async () => {\n if (!isReady) {\n await client.waitForReady();\n isReady = true;\n }\n };\n\n /**\n * Creates a generic adapter instance that works with any flag.\n * This function is generic over the expected return type (R) and the key type (K)\n * to correctly type the Adapter's `decide` method.\n *\n * @template R The explicit return type for the flag (e.g., `boolean`, `string`).\n * Defaults to `NoExplicitReturnType` if not provided.\n * @template K The literal string type of the flag key. Defaults to `string`.\n * @returns An `Adapter` instance with its generic `T` correctly set to `FlagReturnType<R, K, FeatureFlags>`.\n */\n function flagSyncAdapter<\n R = NoExplicitReturnType, // The explicit return type generic\n K extends string = string, // The key type generic\n >(): Adapter<FlagReturnType<R, K, FeatureFlags>, FsUserContext> {\n return {\n async decide({\n key,\n entities,\n defaultValue,\n }: {\n key: string; // The Adapter interface mandates 'string' here.\n entities?: FsUserContext;\n defaultValue?: FlagReturnType<R, K, FeatureFlags>;\n }): Promise<FlagReturnType<R, K, FeatureFlags>> {\n await ensureReady();\n\n const userContext: FsUserContext = {\n key: 'anonymous',\n ...(entities ?? {}),\n };\n\n // Call client.flag with the generics R and K.\n // We must cast 'key as K' because the Adapter's 'key' is 'string',\n // but client.flag's 'flagKey' parameter can be more restrictive (e.g., 'keyof FeatureFlags').\n // This means strict key validation for the 'key' parameter is bypassed at this point,\n // but the return type will still be correct.\n return client.flag<R, K>(userContext, key as K, defaultValue);\n },\n };\n }\n\n return flagSyncAdapter;\n}\n\n/**\n * Initializes the FlagSync typed helpers.\n * @param client An FsClient instance from createFlagSyncClient.\n * @returns An object containing the typed `flag` function.\n */\nexport function createTypedFlag(client: FsClient) {\n const adapter = createTypedAdapter(client);\n /**\n * A type-safe wrapper around Vercel's `flag` function that is\n * aware of your FeatureFlags interface.\n */\n function typedFlag<TKey extends keyof FeatureFlags>(\n options: Omit<\n FlagDeclaration<FeatureFlags[TKey], FsUserContext>,\n 'key' | 'adapter' | 'decide'\n > & {\n key: TKey;\n },\n ) {\n const specificAdapter = adapter<FeatureFlags[TKey], TKey>();\n\n const fullFlagDeclaration: FlagDeclaration<\n FeatureFlags[TKey],\n FsUserContext\n > = {\n ...options,\n key: options.key,\n adapter: specificAdapter as unknown as Adapter<\n FeatureFlags[TKey],\n FsUserContext\n >,\n };\n\n return flag(fullFlagDeclaration);\n }\n\n return {\n flag: typedFlag,\n };\n}\n","import { FsUserContext } from '@flagsync/node-sdk';\nimport { Identify } from 'flags';\n\ntype ExtractParams<T> = T extends (params: infer P) => any ? P : never;\n\nexport const createIdentify =\n (\n callback: (\n params: ExtractParams<Identify<FsUserContext>>,\n ) => Promise<FsUserContext> | FsUserContext,\n ): Identify<FsUserContext> =>\n (params) =>\n callback(params);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,IAAAA,mBAAyB;;;ACVzB,sBAQO;AAEP,kBAAqB;AAMd,SAAS,aAAa,QAA4B;AACvD,QAAM,eAAW,iCAAgB;AAAA,IAC/B,GAAG;AAAA,IACH,UAAU;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO,SAAS,OAAO;AACzB;AAMO,SAAS,cAAc,QAAkB;AAC9C,MAAI,UAAU;AAMd,QAAM,cAAc,YAAY;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,OAAO,aAAa;AAC1B,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,WAAS,UAGP;AACA,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAIqD;AACnD,cAAM,YAAY;AAElB,cAAM,cAA6B;AAAA,UACjC,KAAK;AAAA,UACL,GAAI,YAAY,CAAC;AAAA,QACnB;AAEA,eAAO,OAAO,KAAK,aAAa,KAAK,YAAY;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAMA,SAAS,mBAAmB,QAAkB;AAC5C,MAAI,UAAU;AAMd,QAAM,cAAc,YAAY;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,OAAO,aAAa;AAC1B,gBAAU;AAAA,IACZ;AAAA,EACF;AAYA,WAAS,kBAGuD;AAC9D,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAIgD;AAC9C,cAAM,YAAY;AAElB,cAAM,cAA6B;AAAA,UACjC,KAAK;AAAA,UACL,GAAI,YAAY,CAAC;AAAA,QACnB;AAOA,eAAO,OAAO,KAAW,aAAa,KAAU,YAAY;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,gBAAgB,QAAkB;AAChD,QAAM,UAAU,mBAAmB,MAAM;AAKzC,WAAS,UACP,SAMA;AACA,UAAM,kBAAkB,QAAkC;AAE1D,UAAM,sBAGF;AAAA,MACF,GAAG;AAAA,MACH,KAAK,QAAQ;AAAA,MACb,SAAS;AAAA,IAIX;AAEA,eAAO,kBAAK,mBAAmB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;;;AC1KO,IAAM,iBACX,CACE,aAIF,CAAC,WACC,SAAS,MAAM;","names":["import_node_sdk"]}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/identify.ts"],"sourcesContent":["export type {\n CustomAttributes,\n CustomAttributeValue,\n FsConfig,\n FsClient,\n LogLevel,\n FsUserContext,\n FeatureFlags,\n} from '@flagsync/node-sdk';\n\nexport { SyncType } from '@flagsync/node-sdk';\n\nexport type { JsonObject } from './types';\n\nexport { createTypedFlag, createClient, createAdapter } from './adapter';\nexport { createIdentify } from './identify';\n","import {\n FeatureFlags,\n FlagReturnType,\n FlagSyncFactory,\n FsClient,\n type FsConfig,\n type FsUserContext,\n NoExplicitReturnType,\n} from '@flagsync/node-sdk';\nimport { Adapter, FlagDeclaration } from 'flags';\nimport { flag } from 'flags/next';\n\n/**\n * Creates a FlagSync client instance that can be used across multiple feature flags.\n * This function should be called once to create a singleton client for your application.\n */\nexport function createClient(config: FsConfig): FsClient {\n const instance = FlagSyncFactory({\n ...config,\n metadata: {\n sdkName: '@flagsync/nextjs-sdk',\n sdkVersion: '0.8.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/identify.ts"],"sourcesContent":["export type {\n CustomAttributes,\n CustomAttributeValue,\n FsConfig,\n FsClient,\n LogLevel,\n FsUserContext,\n FeatureFlags,\n} from '@flagsync/node-sdk';\n\nexport { SyncType } from '@flagsync/node-sdk';\n\nexport type { JsonObject } from './types';\n\nexport { createTypedFlag, createClient, createAdapter } from './adapter';\nexport { createIdentify } from './identify';\n","import {\n FeatureFlags,\n FlagReturnType,\n FlagSyncFactory,\n FsClient,\n type FsConfig,\n type FsUserContext,\n NoExplicitReturnType,\n} from '@flagsync/node-sdk';\nimport { Adapter, FlagDeclaration } from 'flags';\nimport { flag } from 'flags/next';\n\n/**\n * Creates a FlagSync client instance that can be used across multiple feature flags.\n * This function should be called once to create a singleton client for your application.\n */\nexport function createClient(config: FsConfig): FsClient {\n const instance = FlagSyncFactory({\n ...config,\n metadata: {\n sdkName: '@flagsync/nextjs-sdk',\n sdkVersion: '0.8.6-alpha.0',\n },\n });\n return instance.client();\n}\n\n/**\n * Creates an adapter factory that integrates FlagSync with Vercel's feature flag system.\n * This adapter handles the communication between your application and the FlagSync service.\n */\nexport function createAdapter(client: FsClient) {\n let isReady = false;\n\n /**\n * Ensures the FlagSync client is ready before making any flag decisions.\n * This is called internally before each flag evaluation.\n */\n const ensureReady = async () => {\n if (!isReady) {\n await client.waitForReady();\n isReady = true;\n }\n };\n\n function adapter<T = any>(): Adapter<\n FlagReturnType<T, string, FeatureFlags>,\n FsUserContext\n > {\n return {\n async decide({\n key,\n entities,\n defaultValue,\n }: {\n key: string;\n entities?: FsUserContext;\n defaultValue?: FlagReturnType<T, string, FeatureFlags>;\n }): Promise<FlagReturnType<T, string, FeatureFlags>> {\n await ensureReady();\n\n const userContext: FsUserContext = {\n key: 'anonymous',\n ...(entities ?? {}),\n };\n\n return client.flag(userContext, key, defaultValue);\n },\n };\n }\n\n return adapter;\n}\n\n/**\n * Creates an adapter factory that integrates FlagSync with Vercel's feature flag system.\n * This adapter handles the communication between your application and the FlagSync service.\n */\nfunction createTypedAdapter(client: FsClient) {\n let isReady = false;\n\n /**\n * Ensures the FlagSync client is ready before making any flag decisions.\n * This is called internally before each flag evaluation.\n */\n const ensureReady = async () => {\n if (!isReady) {\n await client.waitForReady();\n isReady = true;\n }\n };\n\n /**\n * Creates a generic adapter instance that works with any flag.\n * This function is generic over the expected return type (R) and the key type (K)\n * to correctly type the Adapter's `decide` method.\n *\n * @template R The explicit return type for the flag (e.g., `boolean`, `string`).\n * Defaults to `NoExplicitReturnType` if not provided.\n * @template K The literal string type of the flag key. Defaults to `string`.\n * @returns An `Adapter` instance with its generic `T` correctly set to `FlagReturnType<R, K, FeatureFlags>`.\n */\n function flagSyncAdapter<\n R = NoExplicitReturnType, // The explicit return type generic\n K extends string = string, // The key type generic\n >(): Adapter<FlagReturnType<R, K, FeatureFlags>, FsUserContext> {\n return {\n async decide({\n key,\n entities,\n defaultValue,\n }: {\n key: string; // The Adapter interface mandates 'string' here.\n entities?: FsUserContext;\n defaultValue?: FlagReturnType<R, K, FeatureFlags>;\n }): Promise<FlagReturnType<R, K, FeatureFlags>> {\n await ensureReady();\n\n const userContext: FsUserContext = {\n key: 'anonymous',\n ...(entities ?? {}),\n };\n\n // Call client.flag with the generics R and K.\n // We must cast 'key as K' because the Adapter's 'key' is 'string',\n // but client.flag's 'flagKey' parameter can be more restrictive (e.g., 'keyof FeatureFlags').\n // This means strict key validation for the 'key' parameter is bypassed at this point,\n // but the return type will still be correct.\n return client.flag<R, K>(userContext, key as K, defaultValue);\n },\n };\n }\n\n return flagSyncAdapter;\n}\n\n/**\n * Initializes the FlagSync typed helpers.\n * @param client An FsClient instance from createFlagSyncClient.\n * @returns An object containing the typed `flag` function.\n */\nexport function createTypedFlag(client: FsClient) {\n const adapter = createTypedAdapter(client);\n /**\n * A type-safe wrapper around Vercel's `flag` function that is\n * aware of your FeatureFlags interface.\n */\n function typedFlag<TKey extends keyof FeatureFlags>(\n options: Omit<\n FlagDeclaration<FeatureFlags[TKey], FsUserContext>,\n 'key' | 'adapter' | 'decide'\n > & {\n key: TKey;\n },\n ) {\n const specificAdapter = adapter<FeatureFlags[TKey], TKey>();\n\n const fullFlagDeclaration: FlagDeclaration<\n FeatureFlags[TKey],\n FsUserContext\n > = {\n ...options,\n key: options.key,\n adapter: specificAdapter as unknown as Adapter<\n FeatureFlags[TKey],\n FsUserContext\n >,\n };\n\n return flag(fullFlagDeclaration);\n }\n\n return {\n flag: typedFlag,\n };\n}\n","import { FsUserContext } from '@flagsync/node-sdk';\nimport { Identify } from 'flags';\n\ntype ExtractParams<T> = T extends (params: infer P) => any ? P : never;\n\nexport const createIdentify =\n (\n callback: (\n params: ExtractParams<Identify<FsUserContext>>,\n ) => Promise<FsUserContext> | FsUserContext,\n ): Identify<FsUserContext> =>\n (params) =>\n callback(params);\n"],"mappings":";AAUA,SAAS,gBAAgB;;;ACVzB;AAAA,EAGE;AAAA,OAKK;AAEP,SAAS,YAAY;AAMd,SAAS,aAAa,QAA4B;AACvD,QAAM,WAAW,gBAAgB;AAAA,IAC/B,GAAG;AAAA,IACH,UAAU;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO,SAAS,OAAO;AACzB;AAMO,SAAS,cAAc,QAAkB;AAC9C,MAAI,UAAU;AAMd,QAAM,cAAc,YAAY;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,OAAO,aAAa;AAC1B,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,WAAS,UAGP;AACA,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAIqD;AACnD,cAAM,YAAY;AAElB,cAAM,cAA6B;AAAA,UACjC,KAAK;AAAA,UACL,GAAI,YAAY,CAAC;AAAA,QACnB;AAEA,eAAO,OAAO,KAAK,aAAa,KAAK,YAAY;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAMA,SAAS,mBAAmB,QAAkB;AAC5C,MAAI,UAAU;AAMd,QAAM,cAAc,YAAY;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,OAAO,aAAa;AAC1B,gBAAU;AAAA,IACZ;AAAA,EACF;AAYA,WAAS,kBAGuD;AAC9D,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAIgD;AAC9C,cAAM,YAAY;AAElB,cAAM,cAA6B;AAAA,UACjC,KAAK;AAAA,UACL,GAAI,YAAY,CAAC;AAAA,QACnB;AAOA,eAAO,OAAO,KAAW,aAAa,KAAU,YAAY;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,gBAAgB,QAAkB;AAChD,QAAM,UAAU,mBAAmB,MAAM;AAKzC,WAAS,UACP,SAMA;AACA,UAAM,kBAAkB,QAAkC;AAE1D,UAAM,sBAGF;AAAA,MACF,GAAG;AAAA,MACH,KAAK,QAAQ;AAAA,MACb,SAAS;AAAA,IAIX;AAEA,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;;;AC1KO,IAAM,iBACX,CACE,aAIF,CAAC,WACC,SAAS,MAAM;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flagsync/nextjs-sdk",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.6-alpha.0",
|
|
4
4
|
"description": "FlagSync adapter for Vercel's Flags SDK",
|
|
5
5
|
"author": "Mike Chabot",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"flags": "^4.0.1"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@flagsync/node-sdk": "0.8.
|
|
42
|
+
"@flagsync/node-sdk": "0.8.4-alpha.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@eslint/eslintrc": "^3.3.1",
|