diff --git a/.changeset/clear-amplify-dev-server.md b/.changeset/clear-amplify-dev-server.md new file mode 100644 index 000000000..51732c4ab --- /dev/null +++ b/.changeset/clear-amplify-dev-server.md @@ -0,0 +1,5 @@ +--- +'@aws-blocks/create-blocks-app': patch +--- + +Include the local dev-server script and use public AWS Blocks imports when adding AWS Blocks to an Amplify Gen 2 project. diff --git a/packages/create-blocks-app/src/cli.test.ts b/packages/create-blocks-app/src/cli.test.ts index 48e5f0a7f..aeb8aee86 100644 --- a/packages/create-blocks-app/src/cli.test.ts +++ b/packages/create-blocks-app/src/cli.test.ts @@ -170,6 +170,17 @@ describe('create-blocks-app auto-detection', () => { const result = run(['-y', '--skip-install'], tmpDir); assert.strictEqual(result.exitCode, 0); assert.match(result.stdout, /Detected Amplify Gen 2 project/); + const packageJson = JSON.parse(readFileSync(join(tmpDir, 'package.json'), 'utf-8')); + const serverPath = join(tmpDir, 'aws-blocks', 'scripts', 'server.ts'); + const generateClientPath = join(tmpDir, 'aws-blocks', 'scripts', 'generate-client.ts'); + const cognitoVerifierPath = join(tmpDir, 'aws-blocks', 'cognito-verifier.ts'); + assert.strictEqual(packageJson.scripts['blocks:dev'], 'tsx watch aws-blocks/scripts/server.ts'); + assert.ok(existsSync(serverPath)); + assert.match(readFileSync(serverPath, 'utf-8'), /startDevServer/); + assert.match(readFileSync(generateClientPath, 'utf-8'), /from '@aws-blocks\/blocks\/scripts'/); + assert.match(readFileSync(cognitoVerifierPath, 'utf-8'), /from '@aws-blocks\/blocks'/); + assert.doesNotMatch(readFileSync(generateClientPath, 'utf-8'), /@aws-blocks\/core/); + assert.doesNotMatch(readFileSync(cognitoVerifierPath, 'utf-8'), /@aws-blocks\/core/); } finally { rmSync(tmpDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }); } diff --git a/packages/create-blocks-app/templates/amplify/aws-blocks/cognito-verifier.ts b/packages/create-blocks-app/templates/amplify/aws-blocks/cognito-verifier.ts index e631fc72a..c47335a7d 100644 --- a/packages/create-blocks-app/templates/amplify/aws-blocks/cognito-verifier.ts +++ b/packages/create-blocks-app/templates/amplify/aws-blocks/cognito-verifier.ts @@ -8,8 +8,7 @@ * No session store, no sign-in flow, no cookies — pure stateless verification. */ -import { ApiError } from '@aws-blocks/core'; -import type { BlocksContext } from '@aws-blocks/core'; +import { ApiError, type BlocksContext } from '@aws-blocks/blocks'; import { CognitoJwtVerifier } from 'aws-jwt-verify'; type CognitoVerifierInstance = ReturnType; diff --git a/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/generate-client.ts b/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/generate-client.ts index f4a1f9b72..f36bdd460 100644 --- a/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/generate-client.ts +++ b/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/generate-client.ts @@ -3,12 +3,12 @@ * * Run: npm run blocks:generate-client * - * Uses the core generateClientCode() to discover ApiNamespace exports, + * Uses generateClientCode() to discover ApiNamespace exports, * then injects the Amplify auth middleware and URL configuration. */ -import { resolve, dirname, join } from 'node:path'; -import { writeFileSync, mkdirSync } from 'node:fs'; -import { generateClientCode } from '@aws-blocks/core/scripts'; +import { mkdirSync, writeFileSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { generateClientCode } from '@aws-blocks/blocks/scripts'; const awsBlocksDir = resolve(dirname(new URL(import.meta.url).pathname), '..'); const foundationPath = join(awsBlocksDir, 'index.ts'); @@ -21,8 +21,8 @@ let code = await generateClientCode(foundationPath); // Standard: __BLOCKS_ApiNamespaceClient__('name') // Amplify: __BLOCKS_ApiNamespaceClient__('name', { url: BLOCKS_API_URL }) code = code.replace( - /__BLOCKS_ApiNamespaceClient__\('([^']+)'\)/g, - "__BLOCKS_ApiNamespaceClient__('$1', { url: BLOCKS_API_URL })" + /__BLOCKS_ApiNamespaceClient__\('([^']+)'\)/g, + "__BLOCKS_ApiNamespaceClient__('$1', { url: BLOCKS_API_URL })", ); // Replace the auto-generated header and imports with Amplify-specific preamble diff --git a/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/server.ts b/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/server.ts new file mode 100644 index 000000000..21e4d9fbd --- /dev/null +++ b/packages/create-blocks-app/templates/amplify/aws-blocks/scripts/server.ts @@ -0,0 +1,10 @@ +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { startDevServer } from '@aws-blocks/blocks/scripts'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +startDevServer({ + backendPath: join(__dirname, '..', 'index.ts'), + port: 3001, +});