27 lines
32 KiB
XML
27 lines
32 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<project version="4">
|
||
<component name="CopilotDiffPersistence">
|
||
<option name="pendingDiffs">
|
||
<map>
|
||
<entry key="$PROJECT_DIR$/debug.go">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/debug.go" />
|
||
<option name="originalContent" value="package main import ( 	"fmt" 	"masonry/lang" ) func main() { 	// Test the complete DSL with servers, entities, endpoints, and pages 	input := `server MyApp host "localhost" port 8080 	 	entity User desc "User account management" 		id: uuid required unique 		email: string required validate email 		name: string default "Anonymous" 		 	endpoint GET "/users" for User desc "List users" auth 		param page: int from query 		param limit: int from query 		returns list as "json" fields [id, email, name] 		 	endpoint POST "/users" for User desc "Create user" 		param user_data: object required from body 		returns object fields [id, email, name] 		 	page UserManagement at "/admin/users" layout AdminLayout title "User Management" auth 		meta description "Manage system users" 		meta keywords "users, admin, management" 		 		component Table for User 			fields [email, name, id] 			actions [edit via "/users/{id}", delete via "/users/{id}", create via "/users"] 			data from "/users" 			style modern classes ["table-striped", "table-hover"] 			pagination size 20 			filters [email as text label "Search email", name as text label "Search name"] 			validate 			 		component Form for User 			fields [email, name] 			actions [save via "/users", cancel] 			style clean 			validate 			 	page UserList at "/users" layout MainLayout title "Users" 		component Table for User 			fields [email, name] 			data from "/users" 			pagination size 10` 	ast, err := lang.ParseInput(input) 	if err != nil { 		fmt.Printf("Error: %v\n", err) 	} else { 		fmt.Printf(" Successfully parsed complete DSL with pages!\n\n") 		for _, def := range ast.Definitions { 			if def.Server != nil { 				fmt.Printf(" Server: %s\n", def.Server.Name) 				for _, setting := range def.Server.Settings { 					if setting.Host != nil { 						fmt.Printf(" host: %s\n", *setting.Host) 					} 					if setting.Port != nil { 						fmt.Printf(" port: %d\n", *setting.Port) 					} 				} 				fmt.Printf("\n") 			} 			if def.Entity != nil { 				entity := def.Entity 				fmt.Printf("️ Entity: %s", entity.Name) 				if entity.Description != nil { 					fmt.Printf(" - %s", *entity.Description) 				} 				fmt.Printf("\n") 				for _, field := range entity.Fields { 					fmt.Printf(" %s: %s", field.Name, field.Type) 					if field.Required { 						fmt.Printf(" (required)") 					} 					if field.Unique { 						fmt.Printf(" (unique)") 					} 					if field.Default != nil { 						fmt.Printf(" default=%s", *field.Default) 					} 					fmt.Printf("\n") 				} 				fmt.Printf("\n") 			} 			if def.Endpoint != nil { 				endpoint := def.Endpoint 				fmt.Printf(" Endpoint: %s %s", endpoint.Method, endpoint.Path) 				if endpoint.Entity != nil { 					fmt.Printf(" (for %s)", *endpoint.Entity) 				} 				if endpoint.Description != nil { 					fmt.Printf(" - %s", *endpoint.Description) 				} 				if endpoint.Auth { 					fmt.Printf(" [AUTH]") 				} 				fmt.Printf("\n\n") 			} 			if def.Page != nil { 				page := def.Page 				fmt.Printf(" Page: %s at %s", page.Name, page.Path) 				if page.Title != nil { 					fmt.Printf(" - %s", *page.Title) 				} 				if page.Auth { 					fmt.Printf(" [AUTH]") 				} 				fmt.Printf("\n") 				fmt.Printf(" Layout: %s\n", page.Layout) 				for _, meta := range page.Meta { 					fmt.Printf(" Meta %s: %s\n", meta.Name, meta.Content) 				} 				for _, comp := range page.Components { 					fmt.Printf(" Component: %s", comp.Type) 					if comp.Entity != nil { 						fmt.Printf(" for %s", *comp.Entity) 					} 					fmt.Printf("\n") 					for _, attr := range comp.Config { 						if attr.Fields != nil { 							fmt.Printf(" fields: %v\n", attr.Fields.Fields) 						} 						if attr.Actions != nil { 							fmt.Printf(" actions: ") 							for i, action := range attr.Actions.Actions { 								if i > 0 { 									fmt.Printf(", ") 								} 								fmt.Printf("%s", action.Name) 								if action.Endpoint != nil { 									fmt.Printf(" via %s", *action.Endpoint) 								} 							} 							fmt.Printf("\n") 						} 						if attr.DataSource != nil { 							fmt.Printf(" data from: %s\n", attr.DataSource.Endpoint) 						} 						if attr.Style != nil { 							fmt.Printf(" style: %s", *attr.Style.Theme) 							if len(attr.Style.Classes) > 0 { 								fmt.Printf(" classes: %v", attr.Style.Classes) 							} 							fmt.Printf("\n") 						} 						if attr.Pagination != nil { 							fmt.Printf(" pagination: enabled") 							if attr.Pagination.PageSize != nil { 								fmt.Printf(" size %d", *attr.Pagination.PageSize) 							} 							fmt.Printf("\n") 						} 						if attr.Filters != nil { 							fmt.Printf(" filters: ") 							for i, filter := range attr.Filters.Filters { 								if i > 0 { 									fmt.Printf(", ") 								} 								fmt.Printf("%s as %s", filter.Field, filter.Type) 								if filter.Label != nil { 									fmt.Printf(" (%s)", *filter.Label) 								} 							} 							fmt.Printf("\n") 						} 						if attr.Validation { 							fmt.Printf(" validation: enabled\n") 						} 					} 				} 				fmt.Printf("\n") 			} 		} 	} } " />
|
||
<option name="updatedContent" value="package main import ( 	"fmt" 	"io/ioutil" 	"masonry/lang" ) func main() { 	// Read the example.masonry file 	content, err := ioutil.ReadFile("example.masonry") 	if err != nil { 		fmt.Printf("Error reading example.masonry: %v\n", err) 		return 	} 	input := string(content) 	ast, err := lang.ParseInput(input) 	if err != nil { 		fmt.Printf("Error: %v\n", err) 	} else { 		fmt.Printf(" Successfully parsed complete DSL with pages!\n\n") 		for _, def := range ast.Definitions { 			if def.Server != nil { 				fmt.Printf(" Server: %s\n", def.Server.Name) 				for _, setting := range def.Server.Settings { 					if setting.Host != nil { 						fmt.Printf(" host: %s\n", *setting.Host) 					} 					if setting.Port != nil { 						fmt.Printf(" port: %d\n", *setting.Port) 					} 				} 				fmt.Printf("\n") 			} 			if def.Entity != nil { 				entity := def.Entity 				fmt.Printf("️ Entity: %s", entity.Name) 				if entity.Description != nil { 					fmt.Printf(" - %s", *entity.Description) 				} 				fmt.Printf("\n") 				for _, field := range entity.Fields { 					fmt.Printf(" %s: %s", field.Name, field.Type) 					if field.Required { 						fmt.Printf(" (required)") 					} 					if field.Unique { 						fmt.Printf(" (unique)") 					} 					if field.Default != nil { 						fmt.Printf(" default=%s", *field.Default) 					} 					fmt.Printf("\n") 				} 				fmt.Printf("\n") 			} 			if def.Endpoint != nil { 				endpoint := def.Endpoint 				fmt.Printf(" Endpoint: %s %s", endpoint.Method, endpoint.Path) 				if endpoint.Entity != nil { 					fmt.Printf(" (for %s)", *endpoint.Entity) 				} 				if endpoint.Description != nil { 					fmt.Printf(" - %s", *endpoint.Description) 				} 				if endpoint.Auth { 					fmt.Printf(" [AUTH]") 				} 				fmt.Printf("\n\n") 			} 			if def.Page != nil { 				page := def.Page 				fmt.Printf(" Page: %s at %s", page.Name, page.Path) 				if page.Title != nil { 					fmt.Printf(" - %s", *page.Title) 				} 				if page.Auth { 					fmt.Printf(" [AUTH]") 				} 				fmt.Printf("\n") 				fmt.Printf(" Layout: %s\n", page.Layout) 				for _, meta := range page.Meta { 					fmt.Printf(" Meta %s: %s\n", meta.Name, meta.Content) 				} 				for _, comp := range page.Components { 					fmt.Printf(" Component: %s", comp.Type) 					if comp.Entity != nil { 						fmt.Printf(" for %s", *comp.Entity) 					} 					fmt.Printf("\n") 					for _, attr := range comp.Config { 						if attr.Fields != nil { 							fmt.Printf(" fields: %v\n", attr.Fields.Fields) 						} 						if attr.Actions != nil { 							fmt.Printf(" actions: ") 							for i, action := range attr.Actions.Actions { 								if i > 0 { 									fmt.Printf(", ") 								} 								fmt.Printf("%s", action.Name) 								if action.Endpoint != nil { 									fmt.Printf(" via %s", *action.Endpoint) 								} 							} 							fmt.Printf("\n") 						} 						if attr.DataSource != nil { 							fmt.Printf(" data from: %s\n", attr.DataSource.Endpoint) 						} 						if attr.Style != nil { 							fmt.Printf(" style: %s", *attr.Style.Theme) 							if len(attr.Style.Classes) > 0 { 								fmt.Printf(" classes: %v", attr.Style.Classes) 							} 							fmt.Printf("\n") 						} 						if attr.Pagination != nil { 							fmt.Printf(" pagination: enabled") 							if attr.Pagination.PageSize != nil { 								fmt.Printf(" size %d", *attr.Pagination.PageSize) 							} 							fmt.Printf("\n") 						} 						if attr.Filters != nil { 							fmt.Printf(" filters: ") 							for i, filter := range attr.Filters.Filters { 								if i > 0 { 									fmt.Printf(", ") 								} 								fmt.Printf("%s as %s", filter.Field, filter.Type) 								if filter.Label != nil { 									fmt.Printf(" (%s)", *filter.Label) 								} 							} 							fmt.Printf("\n") 						} 						if attr.Validation { 							fmt.Printf(" validation: enabled\n") 						} 					} 				} 				fmt.Printf("\n") 			} 		} 	} }" />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
<entry key="$PROJECT_DIR$/examples/lang/example.masonry">
|
||
<value>
|
||
<PendingDiffInfo>
|
||
<option name="filePath" value="$PROJECT_DIR$/examples/lang/example.masonry" />
|
||
<option name="originalContent" value="// Example Masonry DSL definition // This demonstrates the comprehensive language structure // Server configuration server MyApp host "localhost" port 8080 // Entity definitions with various field types and relationships entity User desc "User account management" 	id: uuid required unique 	email: string required validate email validate min_length "5" 	name: string default "Anonymous" 	created_at: timestamp default "now()" 	profile_id: uuid relates to Profile as one via "user_id" entity Profile desc "User profile information" 	id: uuid required unique 	user_id: uuid required relates to User as one 	bio: text validate max_length "500" 	avatar_url: string validate url 	updated_at: timestamp 	posts: uuid relates to Post as many entity Post desc "Blog posts" 	id: uuid required unique 	title: string required validate min_length "1" validate max_length "200" 	content: text required 	author_id: uuid required relates to User as one 	published: boolean default "false" 	created_at: timestamp default "now()" 	tags: uuid relates to Tag as many through "post_tags" entity Tag desc "Content tags" 	id: uuid required unique 	name: string required unique validate min_length "1" validate max_length "50" 	slug: string required unique indexed 	created_at: timestamp default "now()" // API Endpoints with different HTTP methods and parameter sources endpoint GET "/users" for User desc "List users" auth 	param page: int from query 	param limit: int required from query 	returns list as "json" fields [id, email, name] endpoint POST "/users" for User desc "Create user" 	param user_data: object required from body 	returns object as "json" fields [id, email, name] endpoint PUT "/users/{id}" for User desc "Update user" 	param id: uuid required from path 	param user_data: object required from body 	returns object 	custom "update_user_logic" endpoint DELETE "/users/{id}" for User desc "Delete user" auth 	param id: uuid required from path 	returns object endpoint GET "/posts" for Post desc "List posts" 	param author_id: uuid from query 	param published: boolean from query 	param page: int from query 	returns list as "json" fields [id, title, author_id, published] endpoint POST "/posts" for Post desc "Create post" auth 	param post_data: object required from body 	returns object fields [id, title, content, author_id] // Frontend pages with components page UserManagement at "/admin/users" layout AdminLayout title "User Management" auth 	meta description "Manage system users" 	meta keywords "users, admin, management" 	component Table for User 		fields [email, name, id] 		actions [edit via "/users/{id}", delete via "/users/{id}", create via "/users"] 		data from "/users" 		style modern classes ["table-striped", "table-hover"] 		pagination size 20 		filters [email as text label "Search email", name as text label "Search name"] 		validate 	component Form for User 		fields [email, name] 		actions [save via "/users", cancel] 		style clean 		validate page UserList at "/users" layout MainLayout title "Users" 	meta description "Browse all users" 	component Table for User 		fields [email, name] 		data from "/users" 		pagination size 10 		filters [name as text label "Search by name"] page PostManagement at "/admin/posts" layout AdminLayout title "Post Management" auth 	meta description "Manage blog posts" 	meta keywords "posts, blog, content" 	component Table for Post 		fields [title, author_id, published, created_at] 		actions [edit via "/posts/{id}", delete via "/posts/{id}", create via "/posts"] 		data from "/posts" 		style modern 		pagination size 15 		filters [title as text label "Search title", published as select label "Published status"] 		validate page CreatePost at "/posts/new" layout MainLayout title "Create Post" auth 	component Form for Post 		fields [title, content] 		actions [save via "/posts", cancel] 		style clean 		validate page BlogList at "/blog" layout PublicLayout title "Blog Posts" 	meta description "Read our latest blog posts" 	meta keywords "blog, articles, content" 	component Table for Post 		fields [title, created_at] 		data from "/posts" 		pagination size 5 		filters [title as text label "Search posts"] " />
|
||
<option name="updatedContent" value="// Enhanced Masonry DSL example demonstrating new features // This shows the comprehensive language structure with containers, detailed fields, and layouts // Server configuration server MyApp host "localhost" port 8080 // Entity definitions with various field types and relationships entity User desc "User account management" 	id: uuid required unique 	email: string required validate email validate min_length "5" 	name: string default "Anonymous" 	created_at: timestamp default "now()" 	profile_id: uuid relates to Profile as one via "user_id" entity Profile desc "User profile information" 	id: uuid required unique 	user_id: uuid required relates to User as one 	bio: text validate max_length "500" 	avatar_url: string validate url 	updated_at: timestamp 	posts: uuid relates to Post as many entity Post desc "Blog posts" 	id: uuid required unique 	title: string required validate min_length "1" validate max_length "200" 	content: text required 	author_id: uuid required relates to User as one 	published: boolean default "false" 	created_at: timestamp default "now()" 	tags: uuid relates to Tag as many through "post_tags" entity Tag desc "Content tags" 	id: uuid required unique 	name: string required unique validate min_length "1" validate max_length "50" 	slug: string required unique indexed 	created_at: timestamp default "now()" // API Endpoints with different HTTP methods and parameter sources endpoint GET "/users" for User desc "List users" auth 	param page: int from query 	param limit: int required from query 	returns list as "json" fields [id, email, name] endpoint POST "/users" for User desc "Create user" 	param user_data: object required from body 	returns object as "json" fields [id, email, name] endpoint PUT "/users/{id}" for User desc "Update user" 	param id: uuid required from path 	param user_data: object required from body 	returns object 	custom "update_user_logic" endpoint DELETE "/users/{id}" for User desc "Delete user" auth 	param id: uuid required from path 	returns object endpoint GET "/posts" for Post desc "List posts" 	param author_id: uuid from query 	param published: boolean from query 	param page: int from query 	returns list as "json" fields [id, title, author_id, published] endpoint POST "/posts" for Post desc "Create post" auth 	param post_data: object required from body 	returns object fields [id, title, content, author_id] // Enhanced User Management page with container layout page UserManagement at "/admin/users" layout AdminLayout title "User Management" auth 	meta description "Manage system users" 	meta keywords "users, admin, management" 	container main class "grid grid-cols-3 gap-4" 		section sidebar class "col-span-1" 			component UserStats for User 				data from "/users/stats" 		section content class "col-span-2" 			component UserTable for User 				fields [email, name, role, created_at] 				actions [edit, delete, view] 				data from "/users" 			panel UserEditPanel for User trigger "edit" position "slide-right" 				component UserForm for User 					field email type text label "Email" required 					field name type text label "Name" required 					field role type select options ["admin", "user"] 					button save label "Save User" style "primary" via "/users/{id}" 					button cancel label "Cancel" style "secondary" // Enhanced Form component with detailed field configurations page UserFormPage at "/admin/users/new" layout AdminLayout title "Create User" auth 	component Form for User 		field email type text label "Email Address" placeholder "Enter your email" required validate email 		field name type text label "Full Name" placeholder "Enter your full name" required 		field role type select label "User Role" options ["admin", "user", "moderator"] default "user" 		field avatar type file label "Profile Picture" accept "image/*" 		field bio type textarea label "Biography" placeholder "Tell us about yourself" rows 4 		when role equals "admin" 			field permissions type multiselect label "Permissions" 				options ["users.manage", "posts.manage", "system.config"] 		section actions 			button save label "Save User" style "primary" loading "Saving..." via "/users" 			button cancel label "Cancel" style "secondary" // Dashboard with tabbed interface page Dashboard at "/dashboard" layout MainLayout title "Dashboard" 	container tabs 		tab overview label "Overview" active 			component StatsCards 			component RecentActivity 		tab users label "Users" 			component UserTable for User 				data from "/users" 		tab posts label "Posts" 			component PostTable for Post 				data from "/posts" 	modal CreateUserModal trigger "create-user" 		component UserForm for User 			field email type text label "Email" required 			field name type text label "Name" required 			button save label "Create" via "/users" 			button cancel label "Cancel" // Post Management with master-detail layout page PostManagement at "/admin/posts" layout AdminLayout title "Post Management" auth 	layout "master-detail" 	master PostList 		component Table for Post 			field title type text label "Title" sortable 			field author type relation label "Author" display "name" relates to User 			field status type badge label "Status" 	detail PostEditor trigger "edit" 		component Form for Post 			section basic class "mb-4" 				field title type text label "Post Title" required 				field content type richtext label "Content" required 			section metadata class "grid grid-cols-2 gap-4" 				field author_id type autocomplete label "Author" 					source "/users" display "name" value "id" 				field published type toggle label "Published" default "false" 				field tags type multiselect label "Tags" 					source "/tags" display "name" value "id" // Simple table component with smart defaults page SimpleUserList at "/users" layout MainLayout title "Users" 	component SimpleTable for User 		fields [email, name, created_at] 		actions [edit, delete] 		data from "/users" // Detailed table when more control is needed page DetailedUserList at "/admin/users/detailed" layout AdminLayout title "Detailed User Management" auth 	component DetailedTable for User 		field email type text label "Email Address" 		field name type text label "Full Name" 		data from "/users" 		pagination size 20 // Conditional rendering example page ConditionalForm at "/conditional" layout MainLayout title "Conditional Form" 	component UserForm for User 		field email type text label "Email" required 		field role type select options ["admin", "user", "moderator"] 		when role equals "admin" 			field permissions type multiselect label "Admin Permissions" 				options ["users.manage", "posts.manage", "system.config"] 		when role equals "moderator" 			field moderation_level type select label "Moderation Level" 				options ["basic", "advanced", "full"] 		section actions 			button save label "Save User" style "primary" loading "Saving..." 			button cancel label "Cancel" style "secondary"" />
|
||
</PendingDiffInfo>
|
||
</value>
|
||
</entry>
|
||
</map>
|
||
</option>
|
||
</component>
|
||
</project> |