Skip to main content
Glama
swifty.rs8.83 kB
use dal::{ BuiltinsResult, ComponentType, DalContext, PropKind, SchemaId, action::prototype::ActionKind, pkg::{ ImportOptions, import_pkg_from_pkg, }, prop::PropPath, }; use si_pkg::{ ActionFuncSpec, AttrFuncInputSpec, AttrFuncInputSpecKind, FuncSpec, FuncSpecBackendKind, FuncSpecBackendResponseType, FuncSpecData, LeafFunctionSpec, LeafInputLocation, LeafKind, PkgSpec, PropSpec, SchemaSpec, SchemaSpecData, SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpec, SocketSpecData, SocketSpecKind, }; use crate::test_exclusive_schemas::{ PKG_CREATED_BY, PKG_VERSION, build_action_func, build_asset_func, build_codegen_func, create_identity_func, }; pub(crate) async fn migrate_test_exclusive_schema_swifty( ctx: &DalContext, schema_id: SchemaId, ) -> BuiltinsResult<()> { let mut swifty_builder = PkgSpec::builder(); let schema_name = "swifty"; swifty_builder .name(schema_name) .version(PKG_VERSION) .created_by(PKG_CREATED_BY); let identity_func_spec = create_identity_func()?; // Build Create Action Func let create_action_code = "async function main() { return { payload: { \"poop\": true }, status: \"ok\" }; }"; let fn_name = "test:createActionSwifty"; let create_action_func = build_action_func(create_action_code, fn_name)?; // Build Update Action Func let update_action_code = "async function main(component: Input): Promise<Output> { return { payload: { \"poonami\": true }, status: \"ok\" }; }"; let fn_name = "test:updateActionSwifty"; let update_action_func = build_action_func(update_action_code, fn_name)?; // Build Delete Action Func let delete_action_code = "async function main() { return { payload: undefined, status: \"ok\" }; }"; let fn_name = "test:deleteActionSwifty"; let delete_action_func = build_action_func(delete_action_code, fn_name)?; // Build Refresh Action Func let refresh_action_code = "async function main(component: Input): Promise<Output> { return { payload: JSON.parse(component.properties.resource?.payload) || { \"poop\": true } , status: \"ok\" }; }"; let fn_name = "test:refreshActionSwifty"; let refresh_action_func = build_action_func(refresh_action_code, fn_name)?; // Create Scaffold Func let fn_name = "test:scaffoldSwiftyAsset"; let swifty_authoring_schema_func = build_asset_func(fn_name)?; // Build CodeGen Func let codegen_fn_name = "test:generateCode"; let codegen_func_code = "async function main(input: Input): Promise < Output > { return { format: \"json\", code: JSON.stringify(input.domain || {}, null, 2), }; }"; let code_gen_func = build_codegen_func(codegen_func_code, codegen_fn_name)?; // Assemble Qualification Func let (qualification_func_spec, qualfiication_leaf_func_spec) = assemble_qualification()?; let swifty_schema = SchemaSpec::builder() .name(schema_name) .data( SchemaSpecData::builder() .name(schema_name) .category("test exclusive") .category_name(schema_name) .build()?, ) .variant( SchemaVariantSpec::builder() .version("v0") .unique_id("swifty_sv") .data( SchemaVariantSpecData::builder() .version("v0") .color("#ffffff") .func_unique_id(&swifty_authoring_schema_func.unique_id) .component_type(ComponentType::ConfigurationFrameUp) .build()?, ) .domain_prop( PropSpec::builder() .name("name") .kind(PropKind::String) .func_unique_id(&identity_func_spec.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::Prop) .name("identity") .prop_path(PropPath::new(["root", "si", "name"])) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("fallout") .data( SocketSpecData::builder() .name("fallout") .connection_annotations(serde_json::to_string(&vec!["fallout"])?) .kind(SocketSpecKind::Input) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("anything") .data( SocketSpecData::builder() .name("anything") .connection_annotations(serde_json::to_string(&vec!["anything"])?) .kind(SocketSpecKind::Output) .build()?, ) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Create) .name(Some("test:createActionSwifty".to_string())) .func_unique_id(&create_action_func.unique_id) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Destroy) .func_unique_id(&delete_action_func.unique_id) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Refresh) .func_unique_id(&refresh_action_func.unique_id) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Update) .func_unique_id(&update_action_func.unique_id) .build()?, ) .leaf_function( LeafFunctionSpec::builder() .func_unique_id(codegen_fn_name) .leaf_kind(LeafKind::CodeGeneration) .inputs(vec![LeafInputLocation::Domain]) .build()?, ) .leaf_function(qualfiication_leaf_func_spec) .build()?, ) .build()?; let swifty_spec = swifty_builder .func(identity_func_spec) .func(refresh_action_func) .func(create_action_func) .func(delete_action_func) .func(update_action_func) .func(swifty_authoring_schema_func) .func(code_gen_func) .func(qualification_func_spec) .schema(swifty_schema) .build()?; let pkg = SiPkg::load_from_spec(swifty_spec)?; import_pkg_from_pkg( ctx, &pkg, Some(ImportOptions { schema_id: Some(schema_id.into()), ..Default::default() }), ) .await?; Ok(()) } fn assemble_qualification() -> BuiltinsResult<(FuncSpec, LeafFunctionSpec)> { let fn_code = "async function qualification(_component: Input): Promise<Output> {\ return { result: 'success', message: 'this cannot fail' }; }"; let fn_name = "test:swiftyQualification"; let func_spec = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(fn_code) .handler("qualification") .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::Qualification) .build()?, ) .build()?; let leaf_function_spec = LeafFunctionSpec::builder() .func_unique_id(&func_spec.unique_id) .leaf_kind(LeafKind::Qualification) .inputs(vec![LeafInputLocation::Domain]) .build()?; Ok((func_spec, leaf_function_spec)) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server