From 12737a0d68fde1a40de7e0032fc7ffdc0888963c Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Fri, 26 Dec 2025 01:05:56 +0000 Subject: [PATCH] code: stream,packages,nextjs (4 files) --- .../lib/codegen/create-project-template.ts | 6 ++-- .../src/lib/codegen/generate-codegen-zip.ts | 20 +++++++++++++ .../stream_cast/static_content/cli/main.cpp | 10 +++++++ packages/stream_cast/tests/metadata.test.ts | 28 +++++++++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 frontends/nextjs/src/lib/codegen/generate-codegen-zip.ts create mode 100644 packages/stream_cast/static_content/cli/main.cpp create mode 100644 packages/stream_cast/tests/metadata.test.ts diff --git a/frontends/nextjs/src/lib/codegen/create-project-template.ts b/frontends/nextjs/src/lib/codegen/create-project-template.ts index ec4465a6f..91ba1f3b5 100644 --- a/frontends/nextjs/src/lib/codegen/create-project-template.ts +++ b/frontends/nextjs/src/lib/codegen/create-project-template.ts @@ -1,4 +1,4 @@ -import { CodegenProjectTemplate } from './codegen-types' +import { CodegenProjectTemplate, CodegenSpec } from './codegen-types' const sanitizeProjectName = (value: string) => value @@ -22,10 +22,10 @@ const describeRuntime = (runtime: string) => { } } -export const createProjectTemplate = (spec: Parameters[0] & { projectName: string } & { packageId: string } & { runtime: string }) => { +export const createProjectTemplate = (spec: CodegenSpec): CodegenProjectTemplate => { const baseName = sanitizeProjectName(spec.projectName || 'metabuilder-starter') const rootDir = baseName || 'metabuilder-starter' - const manifest = { + const manifest: CodegenProjectTemplate['manifest'] = { projectName: spec.projectName, packageId: spec.packageId, runtime: spec.runtime, diff --git a/frontends/nextjs/src/lib/codegen/generate-codegen-zip.ts b/frontends/nextjs/src/lib/codegen/generate-codegen-zip.ts new file mode 100644 index 000000000..8061734dc --- /dev/null +++ b/frontends/nextjs/src/lib/codegen/generate-codegen-zip.ts @@ -0,0 +1,20 @@ +import JSZip from 'jszip' + +import { CodegenSpec } from './codegen-types' +import { createProjectTemplate } from './create-project-template' + +export const generateCodegenZip = async (spec: CodegenSpec) => { + const template = createProjectTemplate(spec) + const zip = new JSZip() + + template.files.forEach((file) => { + zip.file(file.path, file.contents) + }) + + const uint8Array = await zip.generateAsync({ type: 'uint8array', compression: 'DEFLATE' }) + return { + fileName: template.zipName, + manifest: template.manifest, + zipBuffer: Buffer.from(uint8Array), + } +} diff --git a/packages/stream_cast/static_content/cli/main.cpp b/packages/stream_cast/static_content/cli/main.cpp new file mode 100644 index 000000000..18987f875 --- /dev/null +++ b/packages/stream_cast/static_content/cli/main.cpp @@ -0,0 +1,10 @@ +#include + +int main() { + std::cout << "Stream Cast CLI" << std::endl; + std::cout << "Run of show:" << std::endl; + std::cout << "00:00 Intro" << std::endl; + std::cout << "00:10 Main" << std::endl; + std::cout << "00:30 Q&A" << std::endl; + return 0; +} diff --git a/packages/stream_cast/tests/metadata.test.ts b/packages/stream_cast/tests/metadata.test.ts new file mode 100644 index 000000000..04ae22bae --- /dev/null +++ b/packages/stream_cast/tests/metadata.test.ts @@ -0,0 +1,28 @@ +import { describe, it, expect } from 'vitest' +import metadata from '../seed/metadata.json' + +describe('Stream Cast Package Metadata', () => { + it('should have valid package structure', () => { + expect(metadata.packageId).toBe('stream_cast') + expect(metadata.name).toBe('Stream Cast') + expect(metadata.version).toBeDefined() + expect(metadata.description).toBeDefined() + }) + + it('should have correct package ID format', () => { + expect(metadata.packageId).toMatch(/^[a-z_]+$/) + }) + + it('should have semantic version', () => { + expect(metadata.version).toMatch(/^\d+\.\d+\.\d+$/) + }) + + it('should have exports defined', () => { + expect(metadata.exports).toBeDefined() + expect(metadata.exports.components).toBeInstanceOf(Array) + }) + + it('should have dependencies array', () => { + expect(metadata.dependencies).toBeInstanceOf(Array) + }) +})