diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6077087df..60bacd869 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,8 +36,6 @@ jobs: steps: - name: Checkout uses: namespacelabs/nscloud-checkout-action@v5 - with: - fetch-depth: 0 - name: Setup caches uses: namespacelabs/nscloud-cache-action@v1 @@ -58,11 +56,6 @@ jobs: with: node-version: 20 - - name: Secret Scanning - uses: trufflesecurity/trufflehog@main - with: - extra_args: --only-verified - - run: bun install - run: bun check @@ -123,6 +116,15 @@ jobs: done echo "Updated version to $VERSION" + - uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/config/package.json + access: public + provenance: false + strategy: all + tag: ${{ env.TAG }} + - uses: JS-DevTools/npm-publish@v3 with: token: ${{ secrets.NPM_TOKEN }} @@ -168,6 +170,7 @@ jobs: # 📦 Packages | Package | Install | | ------- | -------------------- | + | Config | `bun add @settlemint/btp-sdk-config@${{ env.VERSION }}` | | CLI | `bun add @settlemint/btp-sdk-cli@${{ env.VERSION }}` | | Next | `bun add @settlemint/btp-sdk-next@${{ env.VERSION }}` | | React | `bun add @settlemint/btp-sdk-react@${{ env.VERSION }}` | diff --git a/packages/cli/package.json b/packages/cli/package.json index 75cfeb2ea..979ffeea4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -49,6 +49,7 @@ "@types/npmcli__package-json": "4.0.4" }, "dependencies": { + "@settlemint/btp-sdk-config": "workspace:*", "@clack/prompts": "0.7.0", "@commander-js/extra-typings": "12.1.0", "@graphql-codegen/cli": "5.0.2", @@ -56,12 +57,9 @@ "commander": "12.1.0", "cosmiconfig": "9.0.0", "cross-spawn": "7.0.3", - "dotenv": "16.4.5", "openapi-typescript": "7.3.0", "semver": "7.6.3", - "ts-deepmerge": "7.0.1", - "yoctocolors": "2.1.1", - "zod": "3.23.8" + "yoctocolors": "2.1.1" }, "peerDependencies": { "graphql": "^16", diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 478b015a4..577a64021 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -1,7 +1,7 @@ import { Command } from "@commander-js/extra-typings"; +import { config } from "@settlemint/btp-sdk-config"; import { greenBright } from "yoctocolors"; import { printAsciiArt, printCancel, printIntro, printNote, printOutro, printSpinner } from "../lib/cli-message"; -import { config } from "../lib/config"; import { createGqlClient } from "../lib/graphql"; import { createRestClient } from "../lib/rest"; import { writeTsConfig } from "../lib/tsconfig"; diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index ed2bc27d7..1e32f613e 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -1,4 +1,5 @@ import { Command } from "@commander-js/extra-typings"; +import { type ConfigEnv, config, createConfig, createEnv, detectFramework } from "@settlemint/btp-sdk-config"; import { greenBright } from "yoctocolors"; import pkg from "../../package.json"; import { @@ -12,8 +13,6 @@ import { } from "../lib/cli-message"; import { type Works, getServices } from "../lib/cluster-manager"; import { coerceSelect, coerceText } from "../lib/coerce"; -import { type ConfigEnv, config, createConfig, createEnv } from "../lib/config"; -import { detectFramework } from "../lib/framework"; import { updateGitignore } from "../lib/gitignore"; import { addDependencies } from "../lib/package-json"; import { install } from "../lib/package-manager"; diff --git a/packages/cli/src/lib/gitignore.ts b/packages/cli/src/lib/gitignore.ts index b9d46a730..08f732d98 100644 --- a/packages/cli/src/lib/gitignore.ts +++ b/packages/cli/src/lib/gitignore.ts @@ -1,6 +1,6 @@ +import { findProjectRoot } from "@settlemint/btp-sdk-config"; import { existsSync, readFileSync, writeFileSync } from "node:fs"; import { join } from "node:path"; -import { findProjectRoot } from "./path"; export function updateGitignore() { const root = findProjectRoot(process.cwd()); diff --git a/packages/cli/src/lib/graphql.ts b/packages/cli/src/lib/graphql.ts index 53dac7da1..d8ffb66b5 100644 --- a/packages/cli/src/lib/graphql.ts +++ b/packages/cli/src/lib/graphql.ts @@ -1,7 +1,7 @@ import { generate } from "@graphql-codegen/cli"; +import { findProjectRoot } from "@settlemint/btp-sdk-config"; import { mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; -import { findProjectRoot } from "./path"; export interface CreateGqlClientOptions { framework: string; @@ -29,12 +29,12 @@ export async function createGqlClient(options: CreateDefaultGqlClientOptions | C const { framework, type, gqlUrl, personalAccessToken } = options; // Create directory structure - const btpDir = join(findProjectRoot(process.cwd()), ".btp"); - + const root = findProjectRoot(process.cwd()); + const btpDir = join(root, ".btp"); const typeDir = join(btpDir, type); const typeGqlDir = join(typeDir, "gql"); const typeCodegenDir = join(typeGqlDir, "codegen"); - const typeQueriesDir = join(findProjectRoot(process.cwd()), "graphql", type); + const typeQueriesDir = join(root, "graphql", type); mkdirSync(typeCodegenDir, { recursive: true }); mkdirSync(typeQueriesDir, { recursive: true }); diff --git a/packages/cli/src/lib/package-json.ts b/packages/cli/src/lib/package-json.ts index 524fa1dbf..e9a2fa467 100644 --- a/packages/cli/src/lib/package-json.ts +++ b/packages/cli/src/lib/package-json.ts @@ -1,6 +1,6 @@ import { type PackageJson, default as pkgj } from "@npmcli/package-json"; +import { findProjectRoot } from "@settlemint/btp-sdk-config"; import { lt } from "semver"; -import { findProjectRoot } from "./path"; export async function addDependencies(dependencies: Record, checkVersion = false) { // Read the package.json file diff --git a/packages/cli/src/lib/rest.ts b/packages/cli/src/lib/rest.ts index be6504a11..cac6171e1 100644 --- a/packages/cli/src/lib/rest.ts +++ b/packages/cli/src/lib/rest.ts @@ -1,8 +1,8 @@ import { createConfig } from "@redocly/openapi-core"; +import { findProjectRoot } from "@settlemint/btp-sdk-config"; import { mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import openapiTS, { astToString } from "openapi-typescript"; -import { findProjectRoot } from "./path"; /** * Creates a Portal REST client based on the OpenAPI specification. diff --git a/packages/cli/src/lib/tsconfig.ts b/packages/cli/src/lib/tsconfig.ts index ae94adc46..bdc5372e9 100644 --- a/packages/cli/src/lib/tsconfig.ts +++ b/packages/cli/src/lib/tsconfig.ts @@ -1,6 +1,6 @@ +import { findProjectRoot } from "@settlemint/btp-sdk-config"; import { existsSync, mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; -import { findProjectRoot } from "./path"; export function writeTsConfig() { const root = findProjectRoot(process.cwd()); diff --git a/packages/config/README.md b/packages/config/README.md new file mode 100644 index 000000000..edd591324 --- /dev/null +++ b/packages/config/README.md @@ -0,0 +1,43 @@ +

+ SettleMint logo +

SettleMint Blockchain Transformation Platform SDK (Config)

+

+ ✨ https://settlemint.com ✨ +
+ Integrate the SettleMint Blockchain Transformation Platform into your application with ease. +

+

+
+

+CI status +License +npm +stars +

+ +
+ Documentation +   â€¢   + Discord +   â€¢   + NPM +   â€¢   + Issues +
+
+ +## Installation + +```bash +# Using npm +npm install @settlemint/btp-sdk-config + +# Using yarn +yarn add @settlemint/btp-sdk-config + +# Using pnpm +pnpm add @settlemint/btp-sdk-config + +# Using bun +bun add @settlemint/btp-sdk-config +``` \ No newline at end of file diff --git a/packages/config/package.json b/packages/config/package.json new file mode 100644 index 000000000..ec1d8b35a --- /dev/null +++ b/packages/config/package.json @@ -0,0 +1,53 @@ +{ + "name": "@settlemint/btp-sdk-config", + "version": "0.3.2", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "type": "module", + "private": false, + "license": "MIT", + "author": { + "name": "SettleMint", + "email": "support@settlemint.com", + "url": "https://settlemint.com" + }, + "homepage": "https://github.com/settlemint/btp-sdk/blob/main/packages/config/README.md", + "repository": { + "type": "git", + "url": "git+https://github.com/settlemint/btp-sdk.git" + }, + "bugs": { + "url": "https://github.com/settlemint/btp-sdk/issues", + "email": "support@settlemint.com" + }, + "files": ["dist"], + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + }, + "scripts": { + "build": "tsup src/index.ts --format cjs,esm --dts", + "dev": "tsup src/index.ts --format cjs,esm --dts --watch", + "packcheck": "attw --pack ." + }, + "devDependencies": { + "tsup": "8.2.4" + }, + "dependencies": { + "cosmiconfig": "^9.0.0", + "dotenv": "16.4.5", + "ts-deepmerge": "^7.0.1", + "zod": "^3.23.8" + }, + "peerDependencies": {} +} diff --git a/packages/cli/src/lib/config.ts b/packages/config/src/config.ts similarity index 94% rename from packages/cli/src/lib/config.ts rename to packages/config/src/config.ts index 9c6fe1f08..04ab3b522 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/config/src/config.ts @@ -4,7 +4,6 @@ import { readFileSync, writeFileSync } from "node:fs"; import path from "node:path"; import { merge } from "ts-deepmerge"; import { z } from "zod"; -import { printCancel } from "./cli-message"; import { findProjectRoot } from "./path"; /** @@ -92,14 +91,8 @@ async function parseConfig(): Promise { if (!result) { return undefined; } - try { - // Attempt to parse and validate the configuration - return ConfigSchema.parse(result.config); - } catch (e) { - // If parsing fails, print a message and return undefined - printCancel("Configuration file does not match the expected format. Starting fresh!"); - return undefined; - } + // Attempt to parse and validate the configuration + return ConfigSchema.parse(result.config); } /** diff --git a/packages/cli/src/lib/framework.ts b/packages/config/src/framework.ts similarity index 100% rename from packages/cli/src/lib/framework.ts rename to packages/config/src/framework.ts diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts new file mode 100644 index 000000000..0e29f7b12 --- /dev/null +++ b/packages/config/src/index.ts @@ -0,0 +1,3 @@ +export * from "./config"; +export * from "./framework"; +export * from "./path"; diff --git a/packages/cli/src/lib/path.ts b/packages/config/src/path.ts similarity index 100% rename from packages/cli/src/lib/path.ts rename to packages/config/src/path.ts diff --git a/packages/config/tsup.config.ts b/packages/config/tsup.config.ts new file mode 100644 index 000000000..732899ebb --- /dev/null +++ b/packages/config/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +export default defineConfig(() => { + return { + minify: true, + entry: ["src/index.ts"], + sourcemap: true, + clean: true, + treeshake: true, + splitting: false, + }; +}); diff --git a/packages/next/package.json b/packages/next/package.json index 743912f38..bf03b4f2a 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -41,10 +41,14 @@ "packcheck": "attw --pack ." }, "dependencies": { - "@settlemint/btp-sdk-react": "workspace:*" + "@settlemint/btp-sdk-react": "workspace:*", + "@settlemint/btp-sdk-cli": "workspace:*" }, "devDependencies": { - "tsup": "8.2.4" + "tsup": "8.2.4", + "next": "14.2.5" }, - "peerDependencies": {} + "peerDependencies": { + "next": "^14 || ^15" + } } diff --git a/packages/next/src/config/with-btp.ts b/packages/next/src/config/with-btp.ts new file mode 100644 index 000000000..838726ce2 --- /dev/null +++ b/packages/next/src/config/with-btp.ts @@ -0,0 +1,21 @@ +import { config } from "@settlemint/btp-sdk-config"; +import type { NextConfig } from "next"; + +export type WithBTPOptions = { + disabled?: boolean; +}; + +/** + * Modifies the passed in Next.js configuration + */ +export async function withBTP(nextConfig: C, { disabled }: WithBTPOptions = {}): Promise { + if (disabled) { + const cfg = await config(); + + return { + output: "standalone", + ...nextConfig, + } as C; + } + return nextConfig; +}