synthra 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +4 -0
  3. data/.rubocop.yml +40 -0
  4. data/.yardopts +18 -0
  5. data/ACCESS_DOCS.md +116 -0
  6. data/ADVANCED_FEATURES_SUMMARY.md +245 -0
  7. data/CHANGELOG.md +498 -0
  8. data/CODE_OF_CONDUCT.md +122 -0
  9. data/CONTRIBUTING.md +307 -0
  10. data/DOCUMENTATION.md +204 -0
  11. data/DOCUMENTATION_GUIDE.md +194 -0
  12. data/LICENSE +22 -0
  13. data/README.md +1458 -0
  14. data/Rakefile +128 -0
  15. data/benchmark/README.md +591 -0
  16. data/benchmark/batch_generation.rb +63 -0
  17. data/benchmark/engine_comparison.rb +295 -0
  18. data/benchmark/single_record.rb +108 -0
  19. data/benchmark/streaming.rb +74 -0
  20. data/docs/ACTIVERECORD_INFERENCE.md +524 -0
  21. data/docs/API_SERVER.md +278 -0
  22. data/docs/CONFIG_FILE.md +315 -0
  23. data/docs/DATA_CONTRACTS.md +312 -0
  24. data/docs/ENHANCED_REPL.md +304 -0
  25. data/docs/FACTORY_BOT.md +271 -0
  26. data/docs/GITHUB_ACTION.md +420 -0
  27. data/docs/GRAPHQL_EXPORT.md +303 -0
  28. data/docs/GRAPHQL_FEDERATION.md +651 -0
  29. data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
  30. data/docs/LSP.md +189 -0
  31. data/docs/MIGRATION_GENERATOR.md +547 -0
  32. data/docs/MOCK_SERVER.md +280 -0
  33. data/docs/NATIVE_ENGINE.md +298 -0
  34. data/docs/OPENAPI_EXPORT.md +252 -0
  35. data/docs/PERFORMANCE_MODE.md +228 -0
  36. data/docs/PERSONAS.md +547 -0
  37. data/docs/PROPERTY_TESTING.md +284 -0
  38. data/docs/PROTOBUF_EXPORT.md +276 -0
  39. data/docs/QUALITY_METRICS.md +555 -0
  40. data/docs/QUICK_REFERENCE.md +88 -0
  41. data/docs/RAILS_ENGINE.md +404 -0
  42. data/docs/RAILS_INTEGRATION.md +454 -0
  43. data/docs/README.md +175 -0
  44. data/docs/REPL_QUICK_REFERENCE.md +149 -0
  45. data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
  46. data/docs/SCENARIOS.md +576 -0
  47. data/docs/SECURITY_TESTING.md +318 -0
  48. data/docs/SNAPSHOT_TESTING.md +308 -0
  49. data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
  50. data/docs/TERRAFORM_EXPORT.md +447 -0
  51. data/docs/TIME_TRAVEL.md +507 -0
  52. data/docs/USAGE_GUIDE.md +980 -0
  53. data/docs/WEBHOOK_SIMULATOR.md +579 -0
  54. data/docs/advanced_features.md +183 -0
  55. data/docs/api_reference.md +153 -0
  56. data/docs/behaviors.md +138 -0
  57. data/docs/best_practices.md +191 -0
  58. data/docs/dsl_reference.md +172 -0
  59. data/docs/examples.md +162 -0
  60. data/docs/generation_modes.md +125 -0
  61. data/docs/getting_started.md +92 -0
  62. data/docs/index.html +177 -0
  63. data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
  64. data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
  65. data/docs/troubleshooting.md +215 -0
  66. data/docs/type_reference.md +224 -0
  67. data/examples/hostile_mode_demo.rb +64 -0
  68. data/exe/synthra +6 -0
  69. data/ext/synthra_native/Cargo.lock +972 -0
  70. data/ext/synthra_native/Cargo.toml +46 -0
  71. data/ext/synthra_native/extconf.rb +41 -0
  72. data/ext/synthra_native/src/generator.rs +397 -0
  73. data/ext/synthra_native/src/lib.rs +229 -0
  74. data/ext/synthra_native/src/types.rs +1485 -0
  75. data/lib/generators/synthra/install_generator.rb +86 -0
  76. data/lib/generators/synthra/templates/api_response.dsl +15 -0
  77. data/lib/generators/synthra/templates/fake_data.rake +116 -0
  78. data/lib/generators/synthra/templates/synthra.yml +31 -0
  79. data/lib/generators/synthra/templates/synthra_support.rb +19 -0
  80. data/lib/generators/synthra/templates/user.dsl +11 -0
  81. data/lib/synthra/activerecord_inference.rb +394 -0
  82. data/lib/synthra/api.rb +381 -0
  83. data/lib/synthra/api_server.rb +718 -0
  84. data/lib/synthra/behaviors/applicator.rb +165 -0
  85. data/lib/synthra/behaviors/base.rb +155 -0
  86. data/lib/synthra/behaviors/close_connection.rb +60 -0
  87. data/lib/synthra/behaviors/deprecated.rb +100 -0
  88. data/lib/synthra/behaviors/failure.rb +69 -0
  89. data/lib/synthra/behaviors/latency.rb +103 -0
  90. data/lib/synthra/behaviors/partial_data.rb +83 -0
  91. data/lib/synthra/behaviors/randomize_order.rb +74 -0
  92. data/lib/synthra/behaviors/registry.rb +238 -0
  93. data/lib/synthra/behaviors/simulate_error.rb +79 -0
  94. data/lib/synthra/cli/commands/base.rb +105 -0
  95. data/lib/synthra/cli/commands/diff.rb +227 -0
  96. data/lib/synthra/cli/commands/docs.rb +67 -0
  97. data/lib/synthra/cli/commands/export.rb +150 -0
  98. data/lib/synthra/cli/commands/generate.rb +72 -0
  99. data/lib/synthra/cli/commands/import.rb +80 -0
  100. data/lib/synthra/cli/commands/lint.rb +53 -0
  101. data/lib/synthra/cli/commands/live.rb +57 -0
  102. data/lib/synthra/cli/commands/seed.rb +99 -0
  103. data/lib/synthra/cli/commands/validate.rb +28 -0
  104. data/lib/synthra/cli.rb +2471 -0
  105. data/lib/synthra/config_file.rb +129 -0
  106. data/lib/synthra/configuration.rb +281 -0
  107. data/lib/synthra/contracts_registry.rb +408 -0
  108. data/lib/synthra/database_seeder.rb +268 -0
  109. data/lib/synthra/deterministic_ids.rb +218 -0
  110. data/lib/synthra/documentation_generator.rb +414 -0
  111. data/lib/synthra/engine.rb +251 -0
  112. data/lib/synthra/errors.rb +1169 -0
  113. data/lib/synthra/export/base.rb +85 -0
  114. data/lib/synthra/export/csv.rb +101 -0
  115. data/lib/synthra/export/graphql.rb +266 -0
  116. data/lib/synthra/export/graphql_federation.rb +377 -0
  117. data/lib/synthra/export/graphviz.rb +258 -0
  118. data/lib/synthra/export/javascript.rb +327 -0
  119. data/lib/synthra/export/json_data.rb +61 -0
  120. data/lib/synthra/export/json_schema.rb +290 -0
  121. data/lib/synthra/export/openapi.rb +514 -0
  122. data/lib/synthra/export/protobuf.rb +483 -0
  123. data/lib/synthra/export/python.rb +560 -0
  124. data/lib/synthra/export/sql.rb +381 -0
  125. data/lib/synthra/export/sql_insert.rb +152 -0
  126. data/lib/synthra/export/terraform.rb +501 -0
  127. data/lib/synthra/export/type_mapping.rb +389 -0
  128. data/lib/synthra/export/typescript.rb +300 -0
  129. data/lib/synthra/export/xml_data.rb +104 -0
  130. data/lib/synthra/export/yaml_data.rb +56 -0
  131. data/lib/synthra/export.rb +404 -0
  132. data/lib/synthra/factory_bot_integration.rb +157 -0
  133. data/lib/synthra/field.rb +440 -0
  134. data/lib/synthra/functions/registry.rb +104 -0
  135. data/lib/synthra/generator/context.rb +372 -0
  136. data/lib/synthra/generator/engine.rb +336 -0
  137. data/lib/synthra/generator/faker_adapter.rb +425 -0
  138. data/lib/synthra/generator/modes.rb +444 -0
  139. data/lib/synthra/generator/resolver.rb +256 -0
  140. data/lib/synthra/generator/rng.rb +273 -0
  141. data/lib/synthra/generator/streamer.rb +63 -0
  142. data/lib/synthra/generator/uniqueness.rb +118 -0
  143. data/lib/synthra/initializer.rb +97 -0
  144. data/lib/synthra/limits.rb +279 -0
  145. data/lib/synthra/live_preview.rb +518 -0
  146. data/lib/synthra/loader_config.rb +78 -0
  147. data/lib/synthra/lsp/server.rb +689 -0
  148. data/lib/synthra/migration_generator.rb +301 -0
  149. data/lib/synthra/mixin.rb +174 -0
  150. data/lib/synthra/mock_server.rb +458 -0
  151. data/lib/synthra/native_engine.rb +304 -0
  152. data/lib/synthra/openapi_importer.rb +228 -0
  153. data/lib/synthra/output/json_formatter.rb +40 -0
  154. data/lib/synthra/output/ndjson_formatter.rb +55 -0
  155. data/lib/synthra/parser/ast.rb +1287 -0
  156. data/lib/synthra/parser/lexer.rb +1152 -0
  157. data/lib/synthra/parser/parser.rb +1664 -0
  158. data/lib/synthra/parser/tokens.rb +461 -0
  159. data/lib/synthra/performance_mode.rb +364 -0
  160. data/lib/synthra/personas.rb +397 -0
  161. data/lib/synthra/property_testing.rb +172 -0
  162. data/lib/synthra/quality_metrics.rb +405 -0
  163. data/lib/synthra/rails_test_helper.rb +248 -0
  164. data/lib/synthra/registry.rb +533 -0
  165. data/lib/synthra/relationships.rb +193 -0
  166. data/lib/synthra/repl/enhanced_repl.rb +607 -0
  167. data/lib/synthra/repl/formatter.rb +191 -0
  168. data/lib/synthra/scenarios.rb +423 -0
  169. data/lib/synthra/schema.rb +605 -0
  170. data/lib/synthra/schema_inheritance.rb +104 -0
  171. data/lib/synthra/schema_versioning.rb +212 -0
  172. data/lib/synthra/snapshot_testing.rb +199 -0
  173. data/lib/synthra/time_travel.rb +338 -0
  174. data/lib/synthra/type_definitions.rb +274 -0
  175. data/lib/synthra/types/address_location/addresses.rb +125 -0
  176. data/lib/synthra/types/address_location/airports.rb +200 -0
  177. data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
  178. data/lib/synthra/types/address_location/locations.rb +406 -0
  179. data/lib/synthra/types/base.rb +48 -0
  180. data/lib/synthra/types/commerce_products/commerce.rb +119 -0
  181. data/lib/synthra/types/commerce_products/companies.rb +71 -0
  182. data/lib/synthra/types/commerce_products/construction.rb +126 -0
  183. data/lib/synthra/types/commerce_products/products.rb +205 -0
  184. data/lib/synthra/types/core/collections.rb +513 -0
  185. data/lib/synthra/types/core/defaults.rb +76 -0
  186. data/lib/synthra/types/core/enums.rb +102 -0
  187. data/lib/synthra/types/core/identifiers.rb +445 -0
  188. data/lib/synthra/types/core/primitives.rb +586 -0
  189. data/lib/synthra/types/core/references.rb +466 -0
  190. data/lib/synthra/types/core/sequences.rb +304 -0
  191. data/lib/synthra/types/crypto/crypto.rb +162 -0
  192. data/lib/synthra/types/date_time/dates.rb +387 -0
  193. data/lib/synthra/types/finance_banking/banking.rb +424 -0
  194. data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
  195. data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
  196. data/lib/synthra/types/formula.rb +184 -0
  197. data/lib/synthra/types/health_medical/medical.rb +150 -0
  198. data/lib/synthra/types/hostile_payloads.rb +122 -0
  199. data/lib/synthra/types/json_array.rb +51 -0
  200. data/lib/synthra/types/media_entertainment/media.rb +62 -0
  201. data/lib/synthra/types/naughty_string.rb +30 -0
  202. data/lib/synthra/types/personal_names/chinese.rb +41 -0
  203. data/lib/synthra/types/personal_names/identifiers.rb +187 -0
  204. data/lib/synthra/types/personal_names/names.rb +246 -0
  205. data/lib/synthra/types/personal_names/national_id.rb +89 -0
  206. data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
  207. data/lib/synthra/types/regex.rb +248 -0
  208. data/lib/synthra/types/registry.rb +182 -0
  209. data/lib/synthra/types/repeating_element.rb +50 -0
  210. data/lib/synthra/types/scenario.rb +29 -0
  211. data/lib/synthra/types/technology_internet/apps.rb +67 -0
  212. data/lib/synthra/types/technology_internet/communication.rb +162 -0
  213. data/lib/synthra/types/technology_internet/devices.rb +80 -0
  214. data/lib/synthra/types/technology_internet/formats.rb +139 -0
  215. data/lib/synthra/types/technology_internet/networking.rb +143 -0
  216. data/lib/synthra/types/template.rb +92 -0
  217. data/lib/synthra/types/text_content/business.rb +128 -0
  218. data/lib/synthra/types/text_content/colors.rb +70 -0
  219. data/lib/synthra/types/text_content/misc.rb +237 -0
  220. data/lib/synthra/types/text_content/security.rb +130 -0
  221. data/lib/synthra/types/text_content/text_generation.rb +532 -0
  222. data/lib/synthra/types/travel/travel.rb +150 -0
  223. data/lib/synthra/utils/string_distance.rb +133 -0
  224. data/lib/synthra/validator/dsl_validator.rb +339 -0
  225. data/lib/synthra/validator/path_validator.rb +615 -0
  226. data/lib/synthra/version.rb +35 -0
  227. data/lib/synthra/webhook_simulator.rb +341 -0
  228. data/lib/synthra.rb +259 -0
  229. data/schemas/address.dsl +16 -0
  230. data/schemas/api_response.dsl +8 -0
  231. data/schemas/error_payload.dsl +9 -0
  232. data/schemas/order.dsl +10 -0
  233. data/schemas/order_item.dsl +8 -0
  234. data/schemas/payment.dsl +11 -0
  235. data/schemas/social_post.dsl +13 -0
  236. data/schemas/user.dsl +10 -0
  237. data/scripts/batch_fix_all.rb +96 -0
  238. data/scripts/delete_old_files.rb +32 -0
  239. data/scripts/fix_all_grouped_files.rb +137 -0
  240. data/scripts/fix_all_indentation.rb +48 -0
  241. data/scripts/fix_all_syntax.rb +124 -0
  242. data/scripts/fix_grouped_files.rb +184 -0
  243. data/scripts/fix_syntax_errors.rb +108 -0
  244. data/scripts/group_domain_types.rb +112 -0
  245. data/scripts/group_domain_types_fixed.rb +150 -0
  246. data/scripts/merge_domains_to_one_file.rb +68 -0
  247. data/scripts/move_existing_types.rb +130 -0
  248. data/scripts/split_grouped_types.rb +142 -0
  249. data/tech_docs/README.md +134 -0
  250. data/tech_docs/advanced/streaming.md +405 -0
  251. data/tech_docs/advanced/thread_safety.md +253 -0
  252. data/tech_docs/api/overview.md +485 -0
  253. data/tech_docs/appendices/type_chart.md +193 -0
  254. data/tech_docs/basic_concepts.md +383 -0
  255. data/tech_docs/behaviors/overview.md +346 -0
  256. data/tech_docs/dsl/complex_types.md +790 -0
  257. data/tech_docs/dsl/core_types.md +464 -0
  258. data/tech_docs/dsl/datetime_types.md +325 -0
  259. data/tech_docs/dsl/field_modifiers.md +414 -0
  260. data/tech_docs/dsl/grammar.md +431 -0
  261. data/tech_docs/dsl/schema_definition.md +399 -0
  262. data/tech_docs/export/README.md +276 -0
  263. data/tech_docs/installation.md +273 -0
  264. data/tech_docs/integration/ci_cd.md +707 -0
  265. data/tech_docs/integration/ci_cd_guide.md +579 -0
  266. data/tech_docs/integration/factory_bot.md +485 -0
  267. data/tech_docs/integration/rails.md +630 -0
  268. data/tech_docs/integration/rspec.md +449 -0
  269. data/tech_docs/modes/overview.md +350 -0
  270. data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
  271. data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
  272. data/tech_docs/quick_start.md +256 -0
  273. data/tech_docs/templates/README.md +805 -0
  274. data/tech_docs/tutorials/advanced.md +371 -0
  275. data/tech_docs/tutorials/getting_started.md +189 -0
  276. data/tech_docs/tutorials/intermediate.md +231 -0
  277. data/tech_docs/tutorials/template_gallery.md +569 -0
  278. data/tech_example/01_basic_usage.rb +238 -0
  279. data/tech_example/02_types_demo.rb +336 -0
  280. data/tech_example/04_cli_usage.md +429 -0
  281. data/tech_example/05_database_seeding.rb +283 -0
  282. data/tech_example/07_rspec_integration.rb +359 -0
  283. data/tech_example/10_custom_types.rb +387 -0
  284. data/tech_example/12_behaviors.rb +372 -0
  285. data/tech_example/13_twitter_dm_example.rb +120 -0
  286. data/tech_example/14_exact_json_structure.rb +253 -0
  287. data/tech_example/16_lsp_server.rb +56 -0
  288. data/tech_example/17_property_testing.rb +92 -0
  289. data/tech_example/18_enhanced_repl.rb +120 -0
  290. data/tech_example/19_security_fuzzing.rb +145 -0
  291. data/tech_example/NEW_FEATURES.md +169 -0
  292. data/tech_example/README.md +118 -0
  293. data/tech_example/schemas/api_response.dsl +123 -0
  294. data/tech_example/schemas/ecommerce.dsl +121 -0
  295. data/tech_example/schemas/twitter_dm.dsl +109 -0
  296. data/tech_example/schemas/user.dsl +36 -0
  297. data/vscode-extension/README.md +246 -0
  298. data/vscode-extension/language-configuration.json +31 -0
  299. data/vscode-extension/package.json +55 -0
  300. data/vscode-extension/snippets/fakedatadsl.json +198 -0
  301. data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
  302. metadata +478 -0
@@ -0,0 +1,569 @@
1
+ # Schema Template Gallery
2
+
3
+ Ready-to-use schema templates for common use cases. Copy, paste, and customize!
4
+
5
+ ## Table of Contents
6
+
7
+ - [API Response Templates](#api-response-templates)
8
+ - [E-Commerce Templates](#e-commerce-templates)
9
+ - [Social Media Templates](#social-media-templates)
10
+ - [User & Authentication Templates](#user--authentication-templates)
11
+ - [Webhook Templates](#webhook-templates)
12
+ - [Database Seeding Templates](#database-seeding-templates)
13
+ - [Testing Templates](#testing-templates)
14
+
15
+ ---
16
+
17
+ ## API Response Templates
18
+
19
+ ### Success Response
20
+
21
+ ```dsl
22
+ APIResponse:
23
+ success: const(true)
24
+ data: object
25
+ timestamp: now
26
+ request_id: uuid
27
+ ```
28
+
29
+ ### Paginated Response
30
+
31
+ ```dsl
32
+ PaginatedResponse:
33
+ success: const(true)
34
+ data: array(Item, 10..25)
35
+ pagination: Pagination
36
+ timestamp: now
37
+
38
+ Pagination:
39
+ page: number(1..10)
40
+ per_page: const(25)
41
+ total: number(100..1000)
42
+ total_pages: number(4..40)
43
+ has_next: boolean(true:80%)
44
+ has_prev: boolean(true:70%)
45
+ ```
46
+
47
+ ### Error Response
48
+
49
+ ```dsl
50
+ ErrorResponse:
51
+ success: const(false)
52
+ error: ErrorDetails
53
+ timestamp: now
54
+ request_id: uuid
55
+
56
+ ErrorDetails:
57
+ code: enum(VALIDATION_ERROR, NOT_FOUND, UNAUTHORIZED, RATE_LIMITED)
58
+ message: text(20..100)
59
+ field?: text(5..20)
60
+ details?: array(text(10..50), 0..3)
61
+ ```
62
+
63
+ ### API with Behaviors
64
+
65
+ ```dsl
66
+ RealisticAPI:
67
+ @latency 50..500ms
68
+ @failure 2%
69
+ @simulate_error 429:1%
70
+ @simulate_error 500:0.5%
71
+
72
+ success: boolean(true:95%)
73
+ data: object
74
+ timestamp: now
75
+ ```
76
+
77
+ ---
78
+
79
+ ## E-Commerce Templates
80
+
81
+ ### Product Catalog
82
+
83
+ ```dsl
84
+ Product:
85
+ id: uuid(unique: true)
86
+ name: text(10..50)
87
+ description: paragraph(1..3)
88
+ sku: text(8..12)
89
+ price: money(range: 9.99..999.99)
90
+ compare_at_price?: money(range: 19.99..1199.99)
91
+ category: enum(electronics, clothing, home, sports, beauty)
92
+ tags: array(text(3..15), 1..5)
93
+ images: array(url, 1..5)
94
+ in_stock: boolean(true:85%)
95
+ stock_quantity: number(0..500)
96
+ rating: number(1..5)
97
+ review_count: number(0..1000)
98
+ created_at: past_date(2y)
99
+ updated_at: past_date(30d)
100
+ ```
101
+
102
+ ### Shopping Cart
103
+
104
+ ```dsl
105
+ ShoppingCart:
106
+ id: uuid
107
+ user_id: Ref(User.id)
108
+ items: array(CartItem, 1..10)
109
+ currency: const("USD")
110
+ created_at: past_date(7d)
111
+ updated_at: now
112
+
113
+ CartItem:
114
+ product_id: Ref(Product.id)
115
+ product_name: text(10..50)
116
+ quantity: number(1..5)
117
+ unit_price: money(range: 9.99..199.99)
118
+ variant?: text(5..20)
119
+ ```
120
+
121
+ ### Order with Line Items
122
+
123
+ ```dsl
124
+ Order:
125
+ id: uuid(unique: true)
126
+ order_number: id_sequence(start: 10000)
127
+ customer: Customer
128
+ items: array(OrderItem, 1..5)
129
+ subtotal: money(range: 29.99..999.99)
130
+ tax: money(range: 0..100)
131
+ shipping: money(range: 0..25)
132
+ total: money(range: 29.99..1200)
133
+ status: enum(pending:20%, processing:30%, shipped:25%, delivered:20%, cancelled:5%)
134
+ payment_status: enum(pending:10%, paid:85%, refunded:5%)
135
+ shipping_address: Address
136
+ billing_address: Address
137
+ created_at: past_date(30d)
138
+ shipped_at?: past_date(7d)
139
+ delivered_at?: past_date(3d)
140
+
141
+ OrderItem:
142
+ id: uuid
143
+ product_id: Ref(Product.id)
144
+ product_name: text(10..50)
145
+ quantity: number(1..3)
146
+ unit_price: money(range: 9.99..199.99)
147
+ total: money(range: 9.99..599.97)
148
+
149
+ Customer:
150
+ id: uuid
151
+ email: email
152
+ name: full_name
153
+ phone?: phone
154
+
155
+ Address:
156
+ street: text(10..50)
157
+ city: city
158
+ state: state
159
+ postal_code: postal_code
160
+ country: country_code
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Social Media Templates
166
+
167
+ ### User Profile
168
+
169
+ ```dsl
170
+ SocialProfile:
171
+ id: snowflake_id(as: string)
172
+ username: social_handle
173
+ display_name: full_name
174
+ bio: text(20..160)
175
+ avatar_url: url
176
+ cover_url?: url
177
+ website?: url
178
+ location?: city
179
+ verified: boolean(false:95%)
180
+ followers_count: number(0..1000000)
181
+ following_count: number(0..5000)
182
+ posts_count: number(0..10000)
183
+ joined_at: past_date(5y)
184
+ last_active: past_date(7d)
185
+ ```
186
+
187
+ ### Social Post
188
+
189
+ ```dsl
190
+ SocialPost:
191
+ id: snowflake_id(as: string)
192
+ author: SocialProfile
193
+ content: text(10..280)
194
+ media?: array(MediaAttachment, 0..4)
195
+ likes_count: number(0..100000)
196
+ reposts_count: number(0..10000)
197
+ replies_count: number(0..5000)
198
+ created_at: past_date(30d)
199
+ edited_at?: past_date(7d)
200
+
201
+ MediaAttachment:
202
+ id: uuid
203
+ type: enum(image:70%, video:20%, gif:10%)
204
+ url: url
205
+ thumbnail_url?: url
206
+ width: number(320..1920)
207
+ height: number(240..1080)
208
+ duration_ms?: number(1000..300000)
209
+ ```
210
+
211
+ ### Comment Thread
212
+
213
+ ```dsl
214
+ CommentThread:
215
+ id: uuid
216
+ post_id: Ref(SocialPost.id)
217
+ comments: array(Comment, 1..20)
218
+ total_count: number(1..1000)
219
+
220
+ Comment:
221
+ id: uuid
222
+ author: SocialProfile
223
+ content: text(5..500)
224
+ likes_count: number(0..1000)
225
+ created_at: past_date(7d)
226
+ replies?: array(Comment, 0..5)
227
+ ```
228
+
229
+ ---
230
+
231
+ ## User & Authentication Templates
232
+
233
+ ### User Account
234
+
235
+ ```dsl
236
+ User:
237
+ @version 2.0
238
+
239
+ id: uuid(unique: true)
240
+ email: email(unique: true)
241
+ username: username
242
+ password_hash: text(60..60)
243
+ first_name: first_name
244
+ last_name: last_name
245
+ phone?: phone
246
+ avatar_url?: url
247
+ role: enum(user:85%, admin:5%, moderator:10%)
248
+ status: enum(active:90%, pending:5%, suspended:3%, deleted:2%)
249
+ email_verified: boolean(true:80%)
250
+ two_factor_enabled: boolean(false:90%)
251
+ created_at: past_date(2y)
252
+ updated_at: past_date(30d)
253
+ last_login_at?: past_date(7d)
254
+ ```
255
+
256
+ ### Authentication Token
257
+
258
+ ```dsl
259
+ AuthToken:
260
+ access_token: uuid
261
+ refresh_token: uuid
262
+ token_type: const("Bearer")
263
+ expires_in: const(3600)
264
+ scope: enum(read, write, admin)
265
+ created_at: now
266
+ ```
267
+
268
+ ### Session
269
+
270
+ ```dsl
271
+ Session:
272
+ id: uuid
273
+ user_id: Ref(User.id)
274
+ ip_address: ip
275
+ user_agent: user_agent
276
+ device_type: enum(desktop:50%, mobile:40%, tablet:10%)
277
+ location?: city
278
+ created_at: past_date(7d)
279
+ expires_at: future_date(7d)
280
+ last_active_at: past_date(1d)
281
+ ```
282
+
283
+ ---
284
+
285
+ ## Webhook Templates
286
+
287
+ ### Generic Webhook Event
288
+
289
+ ```dsl
290
+ WebhookEvent:
291
+ id: uuid
292
+ type: enum(created, updated, deleted)
293
+ resource: enum(user, order, product, payment)
294
+ resource_id: uuid
295
+ timestamp: unix_timestamp_ms
296
+ data: object
297
+ signature: text(64)
298
+ ```
299
+
300
+ ### Payment Webhook (Stripe-style)
301
+
302
+ ```dsl
303
+ PaymentWebhook:
304
+ id: text(27..27)
305
+ object: const("event")
306
+ type: enum(payment_intent.succeeded:60%, payment_intent.failed:10%, charge.refunded:10%, customer.subscription.created:20%)
307
+ created: unix_timestamp
308
+ data: PaymentEventData
309
+ livemode: boolean(false:90%)
310
+ pending_webhooks: number(0..3)
311
+ request: WebhookRequest
312
+
313
+ PaymentEventData:
314
+ object: PaymentIntent
315
+
316
+ PaymentIntent:
317
+ id: text(27..27)
318
+ object: const("payment_intent")
319
+ amount: number(100..100000)
320
+ currency: enum(usd:80%, eur:15%, gbp:5%)
321
+ status: enum(succeeded:85%, failed:10%, canceled:5%)
322
+ customer: text(18..18)
323
+
324
+ WebhookRequest:
325
+ id: text(24..24)
326
+ idempotency_key?: uuid
327
+ ```
328
+
329
+ ### Twitter DM Webhook (Complete)
330
+
331
+ ```dsl
332
+ TwitterDMWebhook:
333
+ for_user_id: copy("users.recipient.id")
334
+ direct_message_events: array(DMEvent, 1..1)
335
+ users: map_by_field("id", sender: TwitterUser, recipient: shared(TwitterUser))
336
+
337
+ DMEvent:
338
+ type: const("message_create")
339
+ id: snowflake_id(as: string)
340
+ created_timestamp: unix_timestamp_ms(as: string)
341
+ message_create: MessageCreate
342
+
343
+ MessageCreate:
344
+ target: Target
345
+ sender_id: copy("users.sender.id")
346
+ message_data: MessageData
347
+
348
+ Target:
349
+ recipient_id: copy("users.recipient.id")
350
+
351
+ MessageData:
352
+ text: message_text
353
+ entities: Entities
354
+
355
+ Entities:
356
+ hashtags: empty_array
357
+ symbols: empty_array
358
+ user_mentions: empty_array
359
+ urls: empty_array
360
+
361
+ TwitterUser:
362
+ id: snowflake_id(as: string)
363
+ name: full_name
364
+ screen_name: social_handle
365
+ location?: city
366
+ verified: boolean(false:95%)
367
+ followers_count: number(10..1000000)
368
+ friends_count: number(5..5000)
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Database Seeding Templates
374
+
375
+ ### Blog System
376
+
377
+ ```dsl
378
+ Author:
379
+ id: uuid(unique: true)
380
+ name: full_name
381
+ email: email(unique: true)
382
+ bio: text(50..200)
383
+ avatar_url: url
384
+ created_at: past_date(2y)
385
+
386
+ Post:
387
+ id: uuid(unique: true)
388
+ title: text(20..100)
389
+ slug: text(20..50)
390
+ content: paragraph(5..15)
391
+ excerpt: text(100..200)
392
+ author: Author
393
+ category: Category
394
+ tags: array(text(3..15), 1..5)
395
+ status: enum(draft:20%, published:70%, archived:10%)
396
+ featured: boolean(false:90%)
397
+ views: number(0..100000)
398
+ created_at: past_date(1y)
399
+ published_at?: past_date(11m)
400
+ updated_at: past_date(30d)
401
+
402
+ Category:
403
+ id: uuid
404
+ name: text(5..30)
405
+ slug: text(5..30)
406
+ description?: text(20..100)
407
+ ```
408
+
409
+ ### Multi-tenant SaaS
410
+
411
+ ```dsl
412
+ Organization:
413
+ id: uuid(unique: true)
414
+ name: text(5..50)
415
+ slug: text(5..30)
416
+ plan: enum(free:40%, starter:30%, pro:20%, enterprise:10%)
417
+ status: enum(active:85%, trial:10%, suspended:5%)
418
+ member_count: number(1..100)
419
+ created_at: past_date(2y)
420
+
421
+ Member:
422
+ id: uuid(unique: true)
423
+ organization_id: Ref(Organization.id)
424
+ user_id: Ref(User.id)
425
+ role: enum(owner:5%, admin:15%, member:80%)
426
+ invited_by?: Ref(User.id)
427
+ joined_at: past_date(1y)
428
+ ```
429
+
430
+ ---
431
+
432
+ ## Testing Templates
433
+
434
+ ### Edge Case User
435
+
436
+ ```dsl
437
+ EdgeCaseUser:
438
+ id: uuid
439
+ name: enum("", "A", "Test User With A Very Long Name That Exceeds Normal Limits", "User123", "user@special#chars")
440
+ email: enum("test@test.com", "a@b.co", "very.long.email.address@subdomain.example.com")
441
+ age: enum(0, 1, 13, 18, 65, 100, 120)
442
+ balance: enum(0, -1, 0.01, 999999.99)
443
+ ```
444
+
445
+ ### Load Testing Records
446
+
447
+ ```dsl
448
+ LoadTestRecord:
449
+ id: uuid(unique: true)
450
+ data: text(100..1000)
451
+ timestamp: now
452
+ sequence: id_sequence
453
+ ```
454
+
455
+ ### Mixed Mode Testing
456
+
457
+ ```dsl
458
+ MixedModeRecord:
459
+ required_field: text(10..50)
460
+ optional_field?: text(10..50)
461
+ nullable_field: text?
462
+ both_field?: text?
463
+ conditional_field: text if has_feature
464
+ has_feature: boolean
465
+ ```
466
+
467
+ ---
468
+
469
+ ## How to Use These Templates
470
+
471
+ ### 1. Copy and Save
472
+
473
+ ```bash
474
+ # Save to a file
475
+ cat > schemas/user.dsl << 'EOF'
476
+ User:
477
+ id: uuid
478
+ name: full_name
479
+ email: email
480
+ EOF
481
+ ```
482
+
483
+ ### 2. Validate
484
+
485
+ ```bash
486
+ fake_data_dsl validate schemas/user.dsl
487
+ fake_data_dsl lint schemas/
488
+ ```
489
+
490
+ ### 3. Preview
491
+
492
+ ```bash
493
+ fake_data_dsl preview User --dir schemas
494
+ ```
495
+
496
+ ### 4. Generate
497
+
498
+ ```bash
499
+ # Single record
500
+ fake_data_dsl generate User --dir schemas --pretty
501
+
502
+ # Multiple records
503
+ fake_data_dsl generate User --dir schemas --count 100
504
+
505
+ # With seed for reproducibility
506
+ fake_data_dsl generate User --dir schemas --count 10 --seed 12345
507
+ ```
508
+
509
+ ### 5. Export
510
+
511
+ ```bash
512
+ # JSON Schema for API documentation
513
+ fake_data_dsl export User --dir schemas --format json-schema
514
+
515
+ # TypeScript for frontend
516
+ fake_data_dsl export User --dir schemas --format typescript
517
+ ```
518
+
519
+ ---
520
+
521
+ ## Customization Tips
522
+
523
+ ### Adding Custom Fields
524
+
525
+ ```dsl
526
+ # Start with a template
527
+ User:
528
+ id: uuid
529
+ name: full_name
530
+ email: email
531
+
532
+ # Add your custom fields
533
+ department: enum(engineering, sales, marketing, support)
534
+ employee_id: id_sequence(start: 1000)
535
+ hire_date: past_date(5y)
536
+ ```
537
+
538
+ ### Combining Templates
539
+
540
+ ```dsl
541
+ # Import concepts from multiple templates
542
+ OrderWithUser:
543
+ order: Order
544
+ customer: User
545
+ payment: PaymentIntent
546
+ ```
547
+
548
+ ### Adjusting Probabilities
549
+
550
+ ```dsl
551
+ # Make most users active
552
+ User:
553
+ status: enum(active:95%, suspended:3%, deleted:2%)
554
+
555
+ # Make failures rare in testing
556
+ APIResponse:
557
+ @failure 0.1%
558
+ success: boolean(true:99.9%)
559
+ ```
560
+
561
+ ---
562
+
563
+ ## Next Steps
564
+
565
+ - [Getting Started Tutorial](getting_started.md)
566
+ - [Intermediate Tutorial](intermediate.md)
567
+ - [Advanced Tutorial](advanced.md)
568
+ - [Type Reference](../appendices/type_chart.md)
569
+