From 31b96cc1b301d57de4cd2bbaf9955637b815a664 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Wed, 20 Mar 2024 20:34:46 -0700 Subject: [PATCH 01/25] Create jsr.json --- packages/shared/common/jsr.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/shared/common/jsr.json diff --git a/packages/shared/common/jsr.json b/packages/shared/common/jsr.json new file mode 100644 index 0000000000..66c8f879b1 --- /dev/null +++ b/packages/shared/common/jsr.json @@ -0,0 +1,7 @@ +{ + "name": "@launchdarkly/js-sdk-common", + "version": "2.3.0", + "exports": { + ".": "./dist/index.js" + } +} From c39756bd0648a089b9b692aa8a95f6689bcebd1e Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Fri, 22 Mar 2024 14:09:48 -0700 Subject: [PATCH 02/25] fix: Added explicit return types. --- packages/sdk/cloudflare/jsr.json | 9 +++++++++ packages/sdk/cloudflare/src/createPlatformInfo.ts | 5 +++-- packages/sdk/cloudflare/src/index.ts | 10 +++++++--- packages/sdk/cloudflare/tsconfig.json | 2 +- packages/shared/common/jsr.json | 7 ------- 5 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 packages/sdk/cloudflare/jsr.json delete mode 100644 packages/shared/common/jsr.json diff --git a/packages/sdk/cloudflare/jsr.json b/packages/sdk/cloudflare/jsr.json new file mode 100644 index 0000000000..fe2d86c38f --- /dev/null +++ b/packages/sdk/cloudflare/jsr.json @@ -0,0 +1,9 @@ +{ + "name": "@launchdarkly/cloudflare-server-sdk", + "version": "2.4.1", + "exports": "./src/index.ts", + "publish": { + "include": ["LICENSE", "README.md", "package.json", "src/**/*.ts"], + "exclude": ["src/**/*.test.ts"] + } +} diff --git a/packages/sdk/cloudflare/src/createPlatformInfo.ts b/packages/sdk/cloudflare/src/createPlatformInfo.ts index e66971d953..96fe8c06eb 100644 --- a/packages/sdk/cloudflare/src/createPlatformInfo.ts +++ b/packages/sdk/cloudflare/src/createPlatformInfo.ts @@ -1,6 +1,7 @@ import type { Info, PlatformData, SdkData } from '@launchdarkly/js-server-sdk-common-edge'; -import { name, version } from '../package.json'; +// eslint-disable-next-line prettier/prettier +import { name, version } from '../package.json' assert { type: "json" }; class CloudflarePlatformInfo implements Info { platformData(): PlatformData { @@ -18,6 +19,6 @@ class CloudflarePlatformInfo implements Info { } } -const createPlatformInfo = () => new CloudflarePlatformInfo(); +const createPlatformInfo = (): CloudflarePlatformInfo => new CloudflarePlatformInfo() export default createPlatformInfo; diff --git a/packages/sdk/cloudflare/src/index.ts b/packages/sdk/cloudflare/src/index.ts index 692a0c6fc4..064e6e969b 100644 --- a/packages/sdk/cloudflare/src/index.ts +++ b/packages/sdk/cloudflare/src/index.ts @@ -14,8 +14,8 @@ import { BasicLogger, EdgeFeatureStore, init as initEdge, - LDClient, - LDOptions, + type LDClient, + type LDOptions, } from '@launchdarkly/js-server-sdk-common-edge'; import createPlatformInfo from './createPlatformInfo'; @@ -45,7 +45,11 @@ export type { LDClient }; * @return * The new {@link LDClient} instance. */ -export const init = (clientSideID: string, kvNamespace: KVNamespace, options: LDOptions = {}) => { +export const init = ( + clientSideID: string, + kvNamespace: KVNamespace, + options: LDOptions = {}, +): LDClient => { const logger = options.logger ?? BasicLogger.get(); return initEdge(clientSideID, createPlatformInfo(), { featureStore: new EdgeFeatureStore(kvNamespace, clientSideID, 'Cloudflare', logger), diff --git a/packages/sdk/cloudflare/tsconfig.json b/packages/sdk/cloudflare/tsconfig.json index d46b7b5e95..290c9853ab 100644 --- a/packages/sdk/cloudflare/tsconfig.json +++ b/packages/sdk/cloudflare/tsconfig.json @@ -4,7 +4,7 @@ "declaration": true, "declarationMap": true, "lib": ["es6"], - "module": "ES6", + "module": "ESNext", "moduleResolution": "node", "noImplicitOverride": true, "outDir": "dist", diff --git a/packages/shared/common/jsr.json b/packages/shared/common/jsr.json deleted file mode 100644 index 66c8f879b1..0000000000 --- a/packages/shared/common/jsr.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@launchdarkly/js-sdk-common", - "version": "2.3.0", - "exports": { - ".": "./dist/index.js" - } -} From 05353a3bc3283dde340955a1923acadbf22c7675 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Fri, 22 Mar 2024 14:19:59 -0700 Subject: [PATCH 03/25] fix: Include jsr.json when publishing. --- packages/sdk/cloudflare/jsr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sdk/cloudflare/jsr.json b/packages/sdk/cloudflare/jsr.json index fe2d86c38f..43524f3117 100644 --- a/packages/sdk/cloudflare/jsr.json +++ b/packages/sdk/cloudflare/jsr.json @@ -1,9 +1,9 @@ { "name": "@launchdarkly/cloudflare-server-sdk", - "version": "2.4.1", + "version": "0.0.1", "exports": "./src/index.ts", "publish": { - "include": ["LICENSE", "README.md", "package.json", "src/**/*.ts"], + "include": ["LICENSE", "README.md", "package.json", "jsr.json", "src/**/*.ts"], "exclude": ["src/**/*.test.ts"] } } From cde1ba49e8c99dcab58d8047d6a84b9c2fd9652e Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 15:47:28 -0700 Subject: [PATCH 04/25] fix: Modify package.json import to resolve esbuild error. Update esbuild to latest version. Set cf sdk to jsr. --- packages/sdk/cloudflare/example/package.json | 4 ++-- packages/sdk/cloudflare/src/createPlatformInfo.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/sdk/cloudflare/example/package.json b/packages/sdk/cloudflare/example/package.json index fbabf0d18d..1da685da3e 100644 --- a/packages/sdk/cloudflare/example/package.json +++ b/packages/sdk/cloudflare/example/package.json @@ -5,12 +5,12 @@ "module": "./dist/index.mjs", "packageManager": "yarn@3.4.1", "dependencies": { - "@launchdarkly/cloudflare-server-sdk": "2.2.3" + "@launchdarkly/cloudflare-server-sdk": "npm:@jsr/launchdarkly__cloudflare-server-sdk@^0.0.1" }, "devDependencies": { "@cloudflare/workers-types": "^4.20230321.0", "@types/jest": "^29.5.5", - "esbuild": "^0.14.41", + "esbuild": "0.20.2", "jest": "^29.7.0", "jest-environment-miniflare": "^2.5.0", "miniflare": "^2.5.0", diff --git a/packages/sdk/cloudflare/src/createPlatformInfo.ts b/packages/sdk/cloudflare/src/createPlatformInfo.ts index 96fe8c06eb..481c059a5d 100644 --- a/packages/sdk/cloudflare/src/createPlatformInfo.ts +++ b/packages/sdk/cloudflare/src/createPlatformInfo.ts @@ -1,7 +1,9 @@ import type { Info, PlatformData, SdkData } from '@launchdarkly/js-server-sdk-common-edge'; // eslint-disable-next-line prettier/prettier -import { name, version } from '../package.json' assert { type: "json" }; +import packageJson from '../package.json' assert { type: "json" } + +const { name, version } = packageJson class CloudflarePlatformInfo implements Info { platformData(): PlatformData { From 2c305ca7161d0918f7e1e53560e4c933b24df5c9 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 15:49:04 -0700 Subject: [PATCH 05/25] chore: Added jsr registry to npmrc and yarnrc. --- .yarnrc.yml | 4 ++++ packages/sdk/cloudflare/example/.npmrc | 1 + 2 files changed, 5 insertions(+) create mode 100644 packages/sdk/cloudflare/example/.npmrc diff --git a/.yarnrc.yml b/.yarnrc.yml index 41bc1d890d..5a857bef1a 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -2,6 +2,10 @@ nodeLinker: node-modules npmPublishAccess: public +npmScopes: + jsr: + npmRegistryServer: 'https://npm.jsr.io' + plugins: - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs spec: '@yarnpkg/plugin-workspace-tools' diff --git a/packages/sdk/cloudflare/example/.npmrc b/packages/sdk/cloudflare/example/.npmrc new file mode 100644 index 0000000000..41583e36ca --- /dev/null +++ b/packages/sdk/cloudflare/example/.npmrc @@ -0,0 +1 @@ +@jsr:registry=https://npm.jsr.io From fba552ada00bace75cbfae980a5aff308d4cd392 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 15:55:38 -0700 Subject: [PATCH 06/25] Update .prettierrc --- .prettierrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.prettierrc b/.prettierrc index 932bffe392..c4564e090e 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,5 +5,6 @@ "importOrder": ["^@launchdarkly/(.*)$", "^[./]"], "importOrderCaseInsensitive": true, "importOrderSeparation": true, - "importOrderSortSpecifiers": true + "importOrderSortSpecifiers": true, + "trailingComma": "all" } From af96d8267e1dad26a6250392fee5a73f6dfea414 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 15:57:24 -0700 Subject: [PATCH 07/25] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 88dc724c5f..37ff832f46 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ yarn-error.log .DS_Store .vscode dump.rdb +.wrangler From 8f06f60f43898be6e58f339210f8507d37eef045 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 15:58:17 -0700 Subject: [PATCH 08/25] Update jsr.json --- packages/sdk/cloudflare/jsr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/cloudflare/jsr.json b/packages/sdk/cloudflare/jsr.json index 43524f3117..3e94eb7613 100644 --- a/packages/sdk/cloudflare/jsr.json +++ b/packages/sdk/cloudflare/jsr.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/cloudflare-server-sdk", - "version": "0.0.1", + "version": "0.0.2", "exports": "./src/index.ts", "publish": { "include": ["LICENSE", "README.md", "package.json", "jsr.json", "src/**/*.ts"], From 5e014f83ab5afd61ef9076f3e0d06a1ee5129138 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 28 Mar 2024 16:02:28 -0700 Subject: [PATCH 09/25] Update package.json --- packages/sdk/cloudflare/example/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/cloudflare/example/package.json b/packages/sdk/cloudflare/example/package.json index 1da685da3e..e15186dadd 100644 --- a/packages/sdk/cloudflare/example/package.json +++ b/packages/sdk/cloudflare/example/package.json @@ -5,7 +5,7 @@ "module": "./dist/index.mjs", "packageManager": "yarn@3.4.1", "dependencies": { - "@launchdarkly/cloudflare-server-sdk": "npm:@jsr/launchdarkly__cloudflare-server-sdk@^0.0.1" + "@launchdarkly/cloudflare-server-sdk": "npm:@jsr/launchdarkly__cloudflare-server-sdk@^0.0.2" }, "devDependencies": { "@cloudflare/workers-types": "^4.20230321.0", From e5886161e43bbba9978e4a7ba3a79dee85565ddb Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 11:53:55 -0700 Subject: [PATCH 10/25] fix: Prettier ignore import assert. --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 2ef3c10866..e43a1c6132 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,4 @@ coverage .vscode **/*/CHANGELOG.md packages/sdk/akamai-edgekv/src/edgekv/edgekv.js +packages/sdk/cloudflare/src/createPlatformInfo.ts From cc7f0dc5dec18bf81cbb919118a66a212cd06804 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 13:27:52 -0700 Subject: [PATCH 11/25] fix: ts-ignore for import assertion because ts-jest errors. --- packages/sdk/cloudflare/src/createPlatformInfo.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sdk/cloudflare/src/createPlatformInfo.ts b/packages/sdk/cloudflare/src/createPlatformInfo.ts index 481c059a5d..fe9c7d6c22 100644 --- a/packages/sdk/cloudflare/src/createPlatformInfo.ts +++ b/packages/sdk/cloudflare/src/createPlatformInfo.ts @@ -1,7 +1,8 @@ import type { Info, PlatformData, SdkData } from '@launchdarkly/js-server-sdk-common-edge'; +// @ts-ignore // eslint-disable-next-line prettier/prettier -import packageJson from '../package.json' assert { type: "json" } +import * as packageJson from '../package.json' assert { type: "json" } const { name, version } = packageJson From b416c412b70d0bb0d1384c6cff8d5165535145c3 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 13:47:56 -0700 Subject: [PATCH 12/25] chore: Corrected example sdk key. Updated example README. --- packages/sdk/cloudflare/example/README.md | 10 ++++++++-- packages/sdk/cloudflare/example/src/index.ts | 2 +- packages/sdk/cloudflare/tsconfig.json | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/sdk/cloudflare/example/README.md b/packages/sdk/cloudflare/example/README.md index 1cf8915388..62e57cb856 100644 --- a/packages/sdk/cloudflare/example/README.md +++ b/packages/sdk/cloudflare/example/README.md @@ -25,10 +25,9 @@ yarn && yarn build kv_namespaces = [{ binding = "LD_KV", id = "YOUR_KV_ID", preview_id = "YOUR_PREVIEW_KV_ID" }] ``` -3. Insert test data to the preview environment: +3. Insert test data to the preview environment. You must use your own clientSideID and prefix it with `LD-Env-`. In the example below, our clientSideID is `test-sdk-key`. Internally, the Cloudflare SDK uses this `LD-Env-` namespace to distinguish LaunchDarkly data from others. ```shell -# The Cloudflare SDK automatically adds the "LD-Env-" prefix to your sdk key npx wrangler kv:key put --binding=LD_KV "LD-Env-test-sdk-key" --path ./src/testData.json --preview ``` @@ -38,6 +37,13 @@ npx wrangler kv:key put --binding=LD_KV "LD-Env-test-sdk-key" --path ./src/testD npx wrangler kv:key get --binding=LD_KV "LD-Env-test-sdk-key" --preview ``` +5. Edit [index.ts](https://github.com/launchdarkly/js-core/blob/main/packages/sdk/cloudflare/example/src/index.ts#L6) to use your clientSideID and a valid flag key from the test data you just inserted. + +```ts + const clientSideID = 'test-sdk-key'; + const flagKey = 'test-boolean-flag'; +``` + 5. Finally: ```shell diff --git a/packages/sdk/cloudflare/example/src/index.ts b/packages/sdk/cloudflare/example/src/index.ts index 8c44228cbb..15ce952657 100644 --- a/packages/sdk/cloudflare/example/src/index.ts +++ b/packages/sdk/cloudflare/example/src/index.ts @@ -3,7 +3,7 @@ import { init as initLD } from '@launchdarkly/cloudflare-server-sdk'; export default { async fetch(request: Request, env: Bindings, ctx: ExecutionContext): Promise { - const clientSideID = 'test-client-side-id'; + const clientSideID = 'test-sdk-key'; const flagKey = 'testFlag1'; const { searchParams } = new URL(request.url); diff --git a/packages/sdk/cloudflare/tsconfig.json b/packages/sdk/cloudflare/tsconfig.json index 290c9853ab..d46b7b5e95 100644 --- a/packages/sdk/cloudflare/tsconfig.json +++ b/packages/sdk/cloudflare/tsconfig.json @@ -4,7 +4,7 @@ "declaration": true, "declarationMap": true, "lib": ["es6"], - "module": "ESNext", + "module": "ES6", "moduleResolution": "node", "noImplicitOverride": true, "outDir": "dist", From 117363c7d13973bff1ce1d9a20ac9cee50a71300 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 13:57:17 -0700 Subject: [PATCH 13/25] chore: Added jsr instructions. --- packages/sdk/cloudflare/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/sdk/cloudflare/README.md b/packages/sdk/cloudflare/README.md index 3d06f21fdd..745a09dbb4 100644 --- a/packages/sdk/cloudflare/README.md +++ b/packages/sdk/cloudflare/README.md @@ -15,7 +15,14 @@ For more information, see the [complete reference guide for this SDK](https://do ## Install ```shell +# npm npm i @launchdarkly/cloudflare-server-sdk + +# yarn +yarn add @launchdarkly/cloudflare-server-sdk + +# jsr +npx jsr add @launchdarkly/cloudflare-server-sdk ``` Then turn on the Node.js compatibility flag in your `wrangler.toml`. This allows the SDK to use `node:events`: @@ -24,6 +31,10 @@ Then turn on the Node.js compatibility flag in your `wrangler.toml`. This allows compatibility_flags = [ "nodejs_compat" ] ``` +## Additional JSR setup + +If you want to install this package as a JSR package, you will need to use [`esbuild` version >= 19.7](https://github.com/evanw/esbuild/releases/tag/v0.19.7) to enable support for `import attributes`. + ## Quickstart Initialize the ldClient with your client side sdk key and the [Cloudflare KV namespace](https://developers.cloudflare.com/workers/runtime-apis/kv#kv-bindings): From a7d7dae7ca827d31dfe3ccfab184ba149bf0f3bb Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:00:10 -0700 Subject: [PATCH 14/25] chore: Reverted example cf sdk version. --- packages/sdk/cloudflare/example/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/cloudflare/example/package.json b/packages/sdk/cloudflare/example/package.json index e15186dadd..6aee0708e3 100644 --- a/packages/sdk/cloudflare/example/package.json +++ b/packages/sdk/cloudflare/example/package.json @@ -5,7 +5,7 @@ "module": "./dist/index.mjs", "packageManager": "yarn@3.4.1", "dependencies": { - "@launchdarkly/cloudflare-server-sdk": "npm:@jsr/launchdarkly__cloudflare-server-sdk@^0.0.2" + "@launchdarkly/cloudflare-server-sdk": "2.2.3" }, "devDependencies": { "@cloudflare/workers-types": "^4.20230321.0", From 4fdab2a43fae625fab4f2f66ad56934a78b15b43 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:19:34 -0700 Subject: [PATCH 15/25] chore: Minor readme and version updates after testing. --- packages/sdk/cloudflare/example/README.md | 4 ++-- packages/sdk/cloudflare/jsr.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/sdk/cloudflare/example/README.md b/packages/sdk/cloudflare/example/README.md index 62e57cb856..883d173b30 100644 --- a/packages/sdk/cloudflare/example/README.md +++ b/packages/sdk/cloudflare/example/README.md @@ -25,7 +25,7 @@ yarn && yarn build kv_namespaces = [{ binding = "LD_KV", id = "YOUR_KV_ID", preview_id = "YOUR_PREVIEW_KV_ID" }] ``` -3. Insert test data to the preview environment. You must use your own clientSideID and prefix it with `LD-Env-`. In the example below, our clientSideID is `test-sdk-key`. Internally, the Cloudflare SDK uses this `LD-Env-` namespace to distinguish LaunchDarkly data from others. +3. Insert test data to the preview environment. You must use your own clientSideID and prefix it with `LD-Env-`. In the example below, the clientSideID is `test-sdk-key`. Internally, the Cloudflare SDK uses this `LD-Env-` namespace to distinguish LaunchDarkly data from others. ```shell npx wrangler kv:key put --binding=LD_KV "LD-Env-test-sdk-key" --path ./src/testData.json --preview @@ -44,7 +44,7 @@ npx wrangler kv:key get --binding=LD_KV "LD-Env-test-sdk-key" --preview const flagKey = 'test-boolean-flag'; ``` -5. Finally: +6. Finally: ```shell yarn start diff --git a/packages/sdk/cloudflare/jsr.json b/packages/sdk/cloudflare/jsr.json index 3e94eb7613..2770ea1534 100644 --- a/packages/sdk/cloudflare/jsr.json +++ b/packages/sdk/cloudflare/jsr.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/cloudflare-server-sdk", - "version": "0.0.2", + "version": "0.0.3", "exports": "./src/index.ts", "publish": { "include": ["LICENSE", "README.md", "package.json", "jsr.json", "src/**/*.ts"], From 55feca34c813529cef6830ba759e81f6143cafb2 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:21:52 -0700 Subject: [PATCH 16/25] Delete .npmrc --- packages/sdk/cloudflare/example/.npmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/sdk/cloudflare/example/.npmrc diff --git a/packages/sdk/cloudflare/example/.npmrc b/packages/sdk/cloudflare/example/.npmrc deleted file mode 100644 index 41583e36ca..0000000000 --- a/packages/sdk/cloudflare/example/.npmrc +++ /dev/null @@ -1 +0,0 @@ -@jsr:registry=https://npm.jsr.io From 9c9ca3c759e9854b23daea4d49e0aba04e405272 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:29:43 -0700 Subject: [PATCH 17/25] chore: Remove trailingCommas setting because its redundant. --- .prettierrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.prettierrc b/.prettierrc index c4564e090e..932bffe392 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,6 +5,5 @@ "importOrder": ["^@launchdarkly/(.*)$", "^[./]"], "importOrderCaseInsensitive": true, "importOrderSeparation": true, - "importOrderSortSpecifiers": true, - "trailingComma": "all" + "importOrderSortSpecifiers": true } From 4b29910b7f64c705b248c647ddbfc0c9d00be190 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:34:02 -0700 Subject: [PATCH 18/25] Update package.json --- packages/sdk/cloudflare/example/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/cloudflare/example/package.json b/packages/sdk/cloudflare/example/package.json index 6aee0708e3..d7efaa6d5e 100644 --- a/packages/sdk/cloudflare/example/package.json +++ b/packages/sdk/cloudflare/example/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@cloudflare/workers-types": "^4.20230321.0", "@types/jest": "^29.5.5", - "esbuild": "0.20.2", + "esbuild": "^0.20.2", "jest": "^29.7.0", "jest-environment-miniflare": "^2.5.0", "miniflare": "^2.5.0", From f2cbc4fe2eb2ce067592a95bcd72b5b6c90051c4 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:50:32 -0700 Subject: [PATCH 19/25] chore: Replace all instances of sdkKey with clientSideID. --- packages/sdk/cloudflare/README.md | 4 ++-- packages/sdk/cloudflare/example/README.md | 8 ++++---- packages/sdk/cloudflare/example/package.json | 2 +- packages/sdk/cloudflare/example/src/index.test.ts | 2 +- packages/sdk/cloudflare/example/src/index.ts | 2 +- packages/sdk/cloudflare/src/index.test.ts | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/sdk/cloudflare/README.md b/packages/sdk/cloudflare/README.md index 745a09dbb4..56171ce9f4 100644 --- a/packages/sdk/cloudflare/README.md +++ b/packages/sdk/cloudflare/README.md @@ -44,12 +44,12 @@ import { init as initLD } from '@launchdarkly/cloudflare-server-sdk'; export default { async fetch(request: Request, env: Bindings): Promise { - const sdkKey = 'test-sdk-key'; + const clientSideID = 'test-client-side-id'; const flagKey = 'testFlag1'; const context = { kind: 'user', key: 'test-user-key-1' }; // init the ldClient, wait and finally evaluate - const client = initLD(sdkKey, env.LD_KV); + const client = initLD(clientSideID, env.LD_KV); await client.waitForInitialization(); const flagValue = await client.variation(flagKey, context, false); diff --git a/packages/sdk/cloudflare/example/README.md b/packages/sdk/cloudflare/example/README.md index 883d173b30..4a96552020 100644 --- a/packages/sdk/cloudflare/example/README.md +++ b/packages/sdk/cloudflare/example/README.md @@ -25,22 +25,22 @@ yarn && yarn build kv_namespaces = [{ binding = "LD_KV", id = "YOUR_KV_ID", preview_id = "YOUR_PREVIEW_KV_ID" }] ``` -3. Insert test data to the preview environment. You must use your own clientSideID and prefix it with `LD-Env-`. In the example below, the clientSideID is `test-sdk-key`. Internally, the Cloudflare SDK uses this `LD-Env-` namespace to distinguish LaunchDarkly data from others. +3. Insert test data to the preview environment. You must use your own clientSideID and prefix it with `LD-Env-`. In the example below, the clientSideID is `test-client-side-id`. Internally, the Cloudflare SDK uses this `LD-Env-` namespace to distinguish LaunchDarkly data from others. ```shell -npx wrangler kv:key put --binding=LD_KV "LD-Env-test-sdk-key" --path ./src/testData.json --preview +npx wrangler kv:key put --binding=LD_KV "LD-Env-test-client-side-id" --path ./src/testData.json --preview ``` 4. View that test data to ensure it's present: ```shell -npx wrangler kv:key get --binding=LD_KV "LD-Env-test-sdk-key" --preview +npx wrangler kv:key get --binding=LD_KV "LD-Env-test-client-side-id" --preview ``` 5. Edit [index.ts](https://github.com/launchdarkly/js-core/blob/main/packages/sdk/cloudflare/example/src/index.ts#L6) to use your clientSideID and a valid flag key from the test data you just inserted. ```ts - const clientSideID = 'test-sdk-key'; + const clientSideID = 'test-client-side-id'; const flagKey = 'test-boolean-flag'; ``` diff --git a/packages/sdk/cloudflare/example/package.json b/packages/sdk/cloudflare/example/package.json index d7efaa6d5e..94f5ea7bb4 100644 --- a/packages/sdk/cloudflare/example/package.json +++ b/packages/sdk/cloudflare/example/package.json @@ -14,7 +14,7 @@ "jest": "^29.7.0", "jest-environment-miniflare": "^2.5.0", "miniflare": "^2.5.0", - "prettier": "^2.6.2", + "prettier": "^3.2.5", "ts-jest": "^28.0.3", "typescript": "5.1.6", "wrangler": "2.20.2" diff --git a/packages/sdk/cloudflare/example/src/index.test.ts b/packages/sdk/cloudflare/example/src/index.test.ts index 4ae6b27c8d..d8bf5e0c31 100644 --- a/packages/sdk/cloudflare/example/src/index.test.ts +++ b/packages/sdk/cloudflare/example/src/index.test.ts @@ -16,7 +16,7 @@ describe('test', () => { }; env = getMiniflareBindings(); const { LD_KV } = env; - await LD_KV.put('LD-Env-test-sdk-key', JSON.stringify(testData)); + await LD_KV.put('LD-Env-test-client-side-id', JSON.stringify(testData)); }); afterEach(() => { diff --git a/packages/sdk/cloudflare/example/src/index.ts b/packages/sdk/cloudflare/example/src/index.ts index 15ce952657..8c44228cbb 100644 --- a/packages/sdk/cloudflare/example/src/index.ts +++ b/packages/sdk/cloudflare/example/src/index.ts @@ -3,7 +3,7 @@ import { init as initLD } from '@launchdarkly/cloudflare-server-sdk'; export default { async fetch(request: Request, env: Bindings, ctx: ExecutionContext): Promise { - const clientSideID = 'test-sdk-key'; + const clientSideID = 'test-client-side-id'; const flagKey = 'testFlag1'; const { searchParams } = new URL(request.url); diff --git a/packages/sdk/cloudflare/src/index.test.ts b/packages/sdk/cloudflare/src/index.test.ts index 978d525d63..747bc75e17 100644 --- a/packages/sdk/cloudflare/src/index.test.ts +++ b/packages/sdk/cloudflare/src/index.test.ts @@ -12,13 +12,13 @@ const mf = new Miniflare({ kvNamespaces: ['TEST_NAMESPACE'], }); -const sdkKey = 'test-sdk-key'; +const clientSideID = 'test-client-side-id'; const flagKey1 = 'testFlag1'; const flagKey2 = 'testFlag2'; const flagKey3 = 'testFlag3'; const context: LDContext = { kind: 'user', key: 'test-user-key-1' }; const namespace = 'LD_KV'; -const rootEnvKey = `LD-Env-${sdkKey}`; +const rootEnvKey = `LD-Env-${clientSideID}`; describe('init', () => { let kv: KVNamespace; @@ -27,7 +27,7 @@ describe('init', () => { beforeAll(async () => { kv = (await mf.getKVNamespace(namespace)) as unknown as KVNamespace; await kv.put(rootEnvKey, JSON.stringify(allFlagsSegments)); - ldClient = init(sdkKey, kv); + ldClient = init(clientSideID, kv); await ldClient.waitForInitialization(); }); From a03c457ec538b66cf8c067cb5e3a5eb365dc4d15 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 1 Apr 2024 14:55:18 -0700 Subject: [PATCH 20/25] chore: Added extra files for cloudflare. --- release-please-config.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index 9aa9c36498..b101377bbe 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -5,7 +5,15 @@ "packages/shared/sdk-server": {}, "packages/shared/sdk-server-edge": {}, "packages/shared/akamai-edgeworker-sdk": {}, - "packages/sdk/cloudflare": {}, + "packages/sdk/cloudflare": { + "extra-files": [ + { + "type": "json", + "path": "jsr.json", + "jsonpath": "$.version" + } + ] + }, "packages/sdk/react-native": {}, "packages/sdk/server-node": {}, "packages/sdk/vercel": { From 9338fb397ab688b3e3924d801488f24b19dce9bc Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Wed, 10 Apr 2024 13:53:26 -0700 Subject: [PATCH 21/25] chore: Initial naive attempt to publish to jsr. --- .github/workflows/release-please.yml | 4 ++-- scripts/publish.sh | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 70dbaf2b58..8104dd0742 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -151,8 +151,8 @@ jobs: contents: write if: ${{ needs.release-please.outputs.package-cloudflare-released == 'true'}} steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 16.x registry-url: 'https://registry.npmjs.org' diff --git a/scripts/publish.sh b/scripts/publish.sh index 7f326fd18c..6f6d47406a 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -8,6 +8,13 @@ else echo "Publishing with prerelease tag." npm publish --tag prerelease --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } else + echo "Publishing to npm." npm publish --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } + + if [ -f "./$WORKSPACE_PATH/jsr.json" ]; then + echo "Publishing to jsr." + cd $WORKSPACE_PATH + npx jsr publish || { echo "jsr publish failed" >&2; exit 1; } + fi fi fi From 544a5330506dcb7fca3178be19b047df5120bc61 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Thu, 11 Apr 2024 19:58:56 -0700 Subject: [PATCH 22/25] feat: Support publishing to jsr. --- scripts/publish.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/publish.sh b/scripts/publish.sh index 6f6d47406a..f111ce352d 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -8,13 +8,13 @@ else echo "Publishing with prerelease tag." npm publish --tag prerelease --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } else - echo "Publishing to npm." - npm publish --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } - if [ -f "./$WORKSPACE_PATH/jsr.json" ]; then echo "Publishing to jsr." cd $WORKSPACE_PATH npx jsr publish || { echo "jsr publish failed" >&2; exit 1; } fi + + echo "Publishing to npm." + npm publish --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } fi fi From 920b848a0521eeb201e679ae808ea589e18bfc19 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 15 Apr 2024 12:22:47 -0700 Subject: [PATCH 23/25] chore: Independent jsr publishing scripts. --- .github/workflows/manual-publish.yml | 25 +++++++++++++++++++++---- actions/full-release/action.yml | 5 +++++ actions/publish-jsr/action.yml | 25 +++++++++++++++++++++++++ scripts/publish-jsr.sh | 13 +++++++++++++ scripts/publish.sh | 7 ------- 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 actions/publish-jsr/action.yml create mode 100755 scripts/publish-jsr.sh diff --git a/.github/workflows/manual-publish.yml b/.github/workflows/manual-publish.yml index d75cb03191..06ef51bfd4 100644 --- a/.github/workflows/manual-publish.yml +++ b/.github/workflows/manual-publish.yml @@ -2,6 +2,14 @@ name: Publish Package on: workflow_dispatch: inputs: + package_registry: + description: 'Publish to' + required: true + default: 'npm' + type: choice + options: + - npm + - jsr workspace_path: description: 'The workspace to publish' required: true @@ -39,8 +47,8 @@ jobs: id-token: write contents: read steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 16.x registry-url: 'https://registry.npmjs.org' @@ -81,8 +89,17 @@ jobs: yarn config set npmScopes.launchdarkly.npmRegistryServer "https://registry.npmjs.org" yarn config set npmScopes.launchdarkly.npmAlwaysAuth true yarn config set npmScopes.launchdarkly.npmAuthToken $NODE_AUTH_TOKEN - - id: publish - name: Publish Package + - id: publish-jsr + name: Publish Package to jsr + if: ${{ inputs.package_registry == 'jsr' }} + uses: ./actions/publish-jsr + with: + workspace_name: ${{ env.WORKSPACE_NAME }} + workspace_path: ${{ inputs.workspace_path }} + dry_run: ${{ inputs.dry_run }} + - id: publish-npm + name: Publish Package to npm + if: ${{ inputs.package_registry == 'npm' }} uses: ./actions/publish with: workspace_name: ${{ env.WORKSPACE_NAME }} diff --git a/actions/full-release/action.yml b/actions/full-release/action.yml index 17ff7e8f85..6a2d31a709 100644 --- a/actions/full-release/action.yml +++ b/actions/full-release/action.yml @@ -31,6 +31,11 @@ runs: yarn config set npmScopes.launchdarkly.npmRegistryServer "https://registry.npmjs.org" yarn config set npmScopes.launchdarkly.npmAlwaysAuth true yarn config set npmScopes.launchdarkly.npmAuthToken $NODE_AUTH_TOKEN + - uses: ./actions/publish-jsr + with: + workspace_name: ${{ env.WORKSPACE_NAME }} + workspace_path: ${{ inputs.workspace_path }} + dry_run: false - uses: ./actions/publish with: workspace_name: ${{ env.WORKSPACE_NAME }} diff --git a/actions/publish-jsr/action.yml b/actions/publish-jsr/action.yml new file mode 100644 index 0000000000..3765f482fc --- /dev/null +++ b/actions/publish-jsr/action.yml @@ -0,0 +1,25 @@ +name: Publish to jsr +description: Publish a package to jsr from the workspace. +inputs: + workspace_name: + description: 'The workspace to publish' + required: true + workspace_path: + description: 'Path to the workspace (for jsr publish)' + required: true + dry_run: + description: 'Is this a dry run. If so no package will be published.' + required: true + +runs: + using: composite + steps: + - name: Publish jsr + shell: bash + run: | + echo "Publishing jsr: $WORKSPACE" + ./scripts/publish-jsr.sh + env: + WORKSPACE: ${{ inputs.workspace_name }} + WORKSPACE_PATH: ${{ inputs.workspace_path }} + LD_RELEASE_IS_DRYRUN: ${{ inputs.dry_run }} diff --git a/scripts/publish-jsr.sh b/scripts/publish-jsr.sh new file mode 100755 index 0000000000..9c16714ce9 --- /dev/null +++ b/scripts/publish-jsr.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +if [ -f "./$WORKSPACE_PATH/jsr.json" ]; then + cd $WORKSPACE_PATH + + if $LD_RELEASE_IS_DRYRUN ; then + echo "Doing a dry run of jsr publishing." + npx jsr publish --dry-run || { echo "jsr publish failed" >&2; exit 1; } + elif [ -f "./$WORKSPACE_PATH/jsr.json" ]; then + echo "Publishing to jsr." + npx jsr publish || { echo "jsr publish failed" >&2; exit 1; } + fi +fi diff --git a/scripts/publish.sh b/scripts/publish.sh index f111ce352d..7f326fd18c 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -8,13 +8,6 @@ else echo "Publishing with prerelease tag." npm publish --tag prerelease --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } else - if [ -f "./$WORKSPACE_PATH/jsr.json" ]; then - echo "Publishing to jsr." - cd $WORKSPACE_PATH - npx jsr publish || { echo "jsr publish failed" >&2; exit 1; } - fi - - echo "Publishing to npm." npm publish --provenance --access public "./$WORKSPACE_PATH/package.tgz" || { echo "npm publish failed" >&2; exit 1; } fi fi From e45bbfb0858e3937cfd5b3e1744dda035e3e6e48 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 15 Apr 2024 12:24:52 -0700 Subject: [PATCH 24/25] Update release-please.yml --- .github/workflows/release-please.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 8104dd0742..70dbaf2b58 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -151,8 +151,8 @@ jobs: contents: write if: ${{ needs.release-please.outputs.package-cloudflare-released == 'true'}} steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 16.x registry-url: 'https://registry.npmjs.org' From cbb856ac695a7dff61aaea2f61d4db97f1c13fc2 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 15 Apr 2024 12:33:50 -0700 Subject: [PATCH 25/25] Update publish-jsr.sh --- scripts/publish-jsr.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/publish-jsr.sh b/scripts/publish-jsr.sh index 9c16714ce9..33fbd934cc 100755 --- a/scripts/publish-jsr.sh +++ b/scripts/publish-jsr.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash if [ -f "./$WORKSPACE_PATH/jsr.json" ]; then + yarn workspace $WORKSPACE pack cd $WORKSPACE_PATH if $LD_RELEASE_IS_DRYRUN ; then