54 lines
2.8 KiB
Plaintext
54 lines
2.8 KiB
Plaintext
workspace WebStudioFixture id "workspace:web-studio-fixture" revision "workspace:web-studio-fixture@1" commit "1111111111111111111111111111111111111111" {
|
|
atom Project id "atom:project";
|
|
atom ProjectComponent id "atom:project-component";
|
|
|
|
interface ReactComponent id "interface:org.quixos.web-studio.react-component" revision "interface:org.quixos.web-studio.react-component@1" source {
|
|
repository "https://repos.quixos.org/org-quixos-web-studio/interface-react-component.git";
|
|
commit "2222222222222222222222222222222222222222";
|
|
} {
|
|
value props id "member:org.quixos.web-studio.react-component:props" : string {
|
|
get id "operation:org.quixos.web-studio.react-component:props:get";
|
|
}
|
|
}
|
|
|
|
interface HasReactComponent id "interface:org.quixos.web-studio.has-react-component" revision "interface:org.quixos.web-studio.has-react-component@1" source {
|
|
repository "https://repos.quixos.org/org-quixos-web-studio/interface-has-react-component.git";
|
|
commit "3333333333333333333333333333333333333333";
|
|
} {
|
|
relation component id "member:org.quixos.web-studio.has-react-component:component" : optional-one interface ReactComponent {
|
|
resolve id "operation:org.quixos.web-studio.has-react-component:component:resolve";
|
|
}
|
|
}
|
|
|
|
package ComponentRuntime id "package:component-runtime" revision "package:component-runtime@1" source {
|
|
repository "https://repos.quixos.org/quixos-test/package-component-runtime.git";
|
|
commit "4444444444444444444444444444444444444444";
|
|
} {
|
|
constructor createComponent id "export:component-runtime:create-component" constructs ProjectComponent : atom-ref<Project>;
|
|
operation propsGet id "export:component-runtime:props-get" : unit -> string mode call receiver atom ProjectComponent requires {
|
|
edge subject id "port:component:subject" : exactly-one atom Project [resolve];
|
|
state projectName id "port:component:project-name" : string [read];
|
|
};
|
|
}
|
|
|
|
shared state ProjectName id "slot:project:name" on Project : string
|
|
policy optimistic-register default "Untitled project";
|
|
shared edge ProjectComponentEdge id "edge:project:component" {
|
|
atom ProjectComponent projection subject id "projection:component:subject" exactly-one;
|
|
atom Project projection component id "projection:project:component" optional-one;
|
|
}
|
|
|
|
conform Project as HasReactComponent {
|
|
bind component.resolve to edge ProjectComponentEdge.component.resolve;
|
|
materialize component if absent using constructor ProjectComponent via edge ProjectComponentEdge.subject;
|
|
}
|
|
conform ProjectComponent as ReactComponent {
|
|
bind props.get to package ComponentRuntime.propsGet with {
|
|
subject to edge ProjectComponentEdge.subject;
|
|
projectName to state ProjectName via edge ProjectComponentEdge.subject;
|
|
};
|
|
}
|
|
|
|
constructor ProjectComponent to ComponentRuntime.createComponent;
|
|
}
|