@bonnard/cli 0.1.2 → 0.1.4

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 (49) hide show
  1. package/dist/bin/bon.mjs +1892 -97
  2. package/dist/bin/models-IsV2sX74.mjs +76 -0
  3. package/dist/bin/{validate-Bd1D39Bj.mjs → validate-C4EHvJzJ.mjs} +47 -4
  4. package/dist/docs/README.md +82 -0
  5. package/dist/docs/_index.md +69 -0
  6. package/dist/docs/topics/cubes.data-source.md +96 -0
  7. package/dist/docs/topics/cubes.dimensions.format.md +199 -0
  8. package/dist/docs/topics/cubes.dimensions.md +188 -0
  9. package/dist/docs/topics/cubes.dimensions.primary-key.md +110 -0
  10. package/dist/docs/topics/cubes.dimensions.sub-query.md +178 -0
  11. package/dist/docs/topics/cubes.dimensions.time.md +115 -0
  12. package/dist/docs/topics/cubes.dimensions.types.md +111 -0
  13. package/dist/docs/topics/cubes.extends.md +153 -0
  14. package/dist/docs/topics/cubes.hierarchies.md +178 -0
  15. package/dist/docs/topics/cubes.joins.md +119 -0
  16. package/dist/docs/topics/cubes.md +121 -0
  17. package/dist/docs/topics/cubes.measures.calculated.md +103 -0
  18. package/dist/docs/topics/cubes.measures.drill-members.md +162 -0
  19. package/dist/docs/topics/cubes.measures.filters.md +90 -0
  20. package/dist/docs/topics/cubes.measures.format.md +157 -0
  21. package/dist/docs/topics/cubes.measures.md +166 -0
  22. package/dist/docs/topics/cubes.measures.rolling.md +123 -0
  23. package/dist/docs/topics/cubes.measures.types.md +126 -0
  24. package/dist/docs/topics/cubes.public.md +176 -0
  25. package/dist/docs/topics/cubes.refresh-key.md +157 -0
  26. package/dist/docs/topics/cubes.segments.md +125 -0
  27. package/dist/docs/topics/cubes.sql.md +65 -0
  28. package/dist/docs/topics/pre-aggregations.md +130 -0
  29. package/dist/docs/topics/pre-aggregations.rollup.md +166 -0
  30. package/dist/docs/topics/syntax.context-variables.md +157 -0
  31. package/dist/docs/topics/syntax.md +137 -0
  32. package/dist/docs/topics/syntax.references.md +178 -0
  33. package/dist/docs/topics/views.cubes.md +166 -0
  34. package/dist/docs/topics/views.folders.md +158 -0
  35. package/dist/docs/topics/views.includes.md +143 -0
  36. package/dist/docs/topics/views.md +142 -0
  37. package/dist/docs/topics/workflow.deploy.md +132 -0
  38. package/dist/docs/topics/workflow.md +151 -0
  39. package/dist/docs/topics/workflow.query.md +203 -0
  40. package/dist/docs/topics/workflow.validate.md +156 -0
  41. package/dist/templates/claude/rules/bonnard.md +15 -0
  42. package/dist/templates/claude/settings.json +7 -0
  43. package/dist/templates/claude/skills/bonnard-cli/SKILL.md +59 -0
  44. package/dist/templates/claude/skills/bonnard-queries/SKILL.md +68 -0
  45. package/dist/templates/cursor/rules/bonnard-cli.mdc +47 -0
  46. package/dist/templates/cursor/rules/bonnard-queries.mdc +49 -0
  47. package/dist/templates/cursor/rules/bonnard.mdc +20 -0
  48. package/dist/templates/shared/bonnard.md +81 -0
  49. package/package.json +8 -3
@@ -0,0 +1,178 @@
1
+ # syntax.references
2
+
3
+ > Reference columns, members, and other cubes in SQL expressions.
4
+
5
+ ## Overview
6
+
7
+ Cube provides special syntax for referencing columns, measures, dimensions, and other cubes within SQL expressions. This enables dynamic, maintainable data models.
8
+
9
+ ## Reference Types
10
+
11
+ ### Column References
12
+
13
+ Simple column name (no braces):
14
+
15
+ ```yaml
16
+ dimensions:
17
+ - name: status
18
+ type: string
19
+ sql: status
20
+ ```
21
+
22
+ ### Member References
23
+
24
+ Reference other members in the same cube with `{member_name}`:
25
+
26
+ ```yaml
27
+ dimensions:
28
+ - name: first_name
29
+ type: string
30
+ sql: first_name
31
+
32
+ - name: last_name
33
+ type: string
34
+ sql: last_name
35
+
36
+ - name: full_name
37
+ type: string
38
+ sql: "CONCAT({first_name}, ' ', {last_name})"
39
+ ```
40
+
41
+ ### {CUBE} Placeholder
42
+
43
+ Reference the current cube's columns:
44
+
45
+ ```yaml
46
+ measures:
47
+ - name: completed_count
48
+ type: count
49
+ filters:
50
+ - sql: "{CUBE}.status = 'completed'"
51
+ ```
52
+
53
+ Equivalent notations:
54
+
55
+ ```yaml
56
+ # These are equivalent
57
+ sql: "{CUBE}.amount"
58
+ sql: "{CUBE.amount}"
59
+ ```
60
+
61
+ ### Cross-Cube References
62
+
63
+ Reference other cubes with `{cube_name.member}`:
64
+
65
+ ```yaml
66
+ joins:
67
+ - name: users
68
+ relationship: many_to_one
69
+ sql: "{CUBE}.user_id = {users.id}"
70
+ ```
71
+
72
+ ### Measure References in Calculated Measures
73
+
74
+ ```yaml
75
+ measures:
76
+ - name: total_orders
77
+ type: count
78
+
79
+ - name: total_revenue
80
+ type: sum
81
+ sql: amount
82
+
83
+ - name: average_order_value
84
+ type: number
85
+ sql: "{total_revenue} / NULLIF({total_orders}, 0)"
86
+ ```
87
+
88
+ ## SQL Reuse
89
+
90
+ ### {cube.sql()} Function
91
+
92
+ Reference another cube's SQL definition:
93
+
94
+ ```yaml
95
+ cubes:
96
+ - name: active_users
97
+ sql: >
98
+ SELECT * FROM {users.sql()}
99
+ WHERE is_active = true
100
+ ```
101
+
102
+ ## Time Dimension Granularities
103
+
104
+ Reference time dimensions with granularity:
105
+
106
+ ```yaml
107
+ # In pre-aggregations or calculated fields
108
+ sql: "{created_at.day}"
109
+ sql: "{created_at.month}"
110
+ sql: "{created_at.year}"
111
+ ```
112
+
113
+ ## Join Path References
114
+
115
+ In views, specify join paths with dot notation:
116
+
117
+ ```yaml
118
+ views:
119
+ - name: order_details
120
+ cubes:
121
+ # Direct cube
122
+ - join_path: orders
123
+
124
+ # Joined cube (orders -> users)
125
+ - join_path: orders.users
126
+
127
+ # Multi-hop (orders -> users -> countries)
128
+ - join_path: orders.users.countries
129
+ ```
130
+
131
+ ## Escaping Braces
132
+
133
+ For literal curly braces in SQL (e.g., JSON), escape with backslash:
134
+
135
+ ```yaml
136
+ sql: "metadata->>'\{key\}'"
137
+ ```
138
+
139
+ ## Common Patterns
140
+
141
+ ### Safe Division
142
+
143
+ ```yaml
144
+ - name: conversion_rate
145
+ type: number
146
+ sql: "{conversions} / NULLIF({visits}, 0)"
147
+ ```
148
+
149
+ ### Conditional Logic
150
+
151
+ ```yaml
152
+ - name: revenue_category
153
+ type: string
154
+ sql: >
155
+ CASE
156
+ WHEN {total_revenue} > 10000 THEN 'high'
157
+ WHEN {total_revenue} > 1000 THEN 'medium'
158
+ ELSE 'low'
159
+ END
160
+ ```
161
+
162
+ ### Cross-Cube Calculations
163
+
164
+ ```yaml
165
+ - name: orders_per_user
166
+ type: number
167
+ sql: "{orders.count} / NULLIF({users.count}, 0)"
168
+ ```
169
+
170
+ ## See Also
171
+
172
+ - syntax
173
+ - cubes.measures.calculated
174
+ - cubes.joins
175
+
176
+ ## More Information
177
+
178
+ https://cube.dev/docs/product/data-modeling/syntax#references
@@ -0,0 +1,166 @@
1
+ # views.cubes
2
+
3
+ > Select which cubes and members to expose in a view.
4
+
5
+ ## Overview
6
+
7
+ The `cubes` property defines which cubes are combined in a view and which of their members (measures, dimensions, segments) are exposed. This is the core mechanism for building focused analytical interfaces.
8
+
9
+ ## Example
10
+
11
+ ```yaml
12
+ views:
13
+ - name: orders_overview
14
+ cubes:
15
+ - join_path: orders
16
+ includes:
17
+ - count
18
+ - total_revenue
19
+ - status
20
+ - created_at
21
+
22
+ - join_path: orders.users
23
+ includes:
24
+ - name
25
+ - email
26
+ ```
27
+
28
+ ## Properties
29
+
30
+ ### join_path (required)
31
+
32
+ Specifies which cube to include and how to reach it via joins:
33
+
34
+ ```yaml
35
+ cubes:
36
+ # Direct cube reference
37
+ - join_path: orders
38
+
39
+ # Joined cube (orders -> users)
40
+ - join_path: orders.users
41
+
42
+ # Multi-hop join (orders -> users -> countries)
43
+ - join_path: orders.users.countries
44
+ ```
45
+
46
+ ### includes
47
+
48
+ List specific members to expose:
49
+
50
+ ```yaml
51
+ - join_path: orders
52
+ includes:
53
+ - count # measure
54
+ - total_revenue # measure
55
+ - status # dimension
56
+ - created_at # dimension
57
+ ```
58
+
59
+ Include all members with `"*"`:
60
+
61
+ ```yaml
62
+ - join_path: orders
63
+ includes: "*"
64
+ ```
65
+
66
+ ### excludes
67
+
68
+ Remove specific members when using `includes: "*"`:
69
+
70
+ ```yaml
71
+ - join_path: orders
72
+ includes: "*"
73
+ excludes:
74
+ - internal_notes
75
+ - debug_flag
76
+ ```
77
+
78
+ ### prefix
79
+
80
+ Add cube name prefix to avoid naming collisions:
81
+
82
+ ```yaml
83
+ - join_path: orders
84
+ prefix: true
85
+ includes:
86
+ - count # Becomes "orders_count" in the view
87
+ ```
88
+
89
+ ## Member Customization
90
+
91
+ Override member properties when including:
92
+
93
+ ```yaml
94
+ - join_path: orders
95
+ includes:
96
+ - name: count
97
+ alias: order_count
98
+ title: "Total Orders"
99
+ description: "Number of orders placed"
100
+
101
+ - name: total_revenue
102
+ alias: revenue
103
+ format: currency
104
+ ```
105
+
106
+ ### Customization Options
107
+
108
+ | Option | Description |
109
+ |--------|-------------|
110
+ | `alias` | Rename the member in this view |
111
+ | `title` | Override display name |
112
+ | `description` | Override description |
113
+ | `format` | Override data format |
114
+ | `meta` | Override metadata |
115
+
116
+ ## Common Patterns
117
+
118
+ ### Focused Dashboard View
119
+
120
+ ```yaml
121
+ views:
122
+ - name: sales_dashboard
123
+ cubes:
124
+ - join_path: orders
125
+ includes:
126
+ - count
127
+ - total_revenue
128
+ - average_order_value
129
+ - created_at
130
+
131
+ - join_path: orders.products
132
+ includes:
133
+ - name: name
134
+ alias: product_name
135
+ - category
136
+ ```
137
+
138
+ ### Multi-Cube Aggregation
139
+
140
+ ```yaml
141
+ views:
142
+ - name: customer_360
143
+ cubes:
144
+ - join_path: users
145
+ includes: "*"
146
+ excludes: [password_hash, api_key]
147
+
148
+ - join_path: users.orders
149
+ includes:
150
+ - count
151
+ - total_revenue
152
+
153
+ - join_path: users.support_tickets
154
+ includes:
155
+ - count
156
+ ```
157
+
158
+ ## See Also
159
+
160
+ - views
161
+ - views.includes
162
+ - cubes.joins
163
+
164
+ ## More Information
165
+
166
+ https://cube.dev/docs/reference/data-model/view#cubes
@@ -0,0 +1,158 @@
1
+ # views.folders
2
+
3
+ > Organize view members into logical groups.
4
+
5
+ ## Overview
6
+
7
+ Folders organize view members into logical categories, making large views easier to navigate. They appear as hierarchical groupings in BI tools and the Cube Playground.
8
+
9
+ ## Example
10
+
11
+ ```yaml
12
+ views:
13
+ - name: sales_analytics
14
+ cubes:
15
+ - join_path: orders
16
+ includes: "*"
17
+
18
+ folders:
19
+ - name: Revenue Metrics
20
+ members:
21
+ - total_revenue
22
+ - average_order_value
23
+ - revenue_growth
24
+
25
+ - name: Volume Metrics
26
+ members:
27
+ - count
28
+ - items_sold
29
+
30
+ - name: Time
31
+ members:
32
+ - created_at
33
+ - shipped_at
34
+ ```
35
+
36
+ ## Syntax
37
+
38
+ ### Basic Folder
39
+
40
+ ```yaml
41
+ folders:
42
+ - name: "Folder Name"
43
+ members:
44
+ - member_one
45
+ - member_two
46
+ ```
47
+
48
+ ### Nested Folders
49
+
50
+ ```yaml
51
+ folders:
52
+ - name: Metrics
53
+ folders:
54
+ - name: Revenue
55
+ members:
56
+ - total_revenue
57
+ - net_revenue
58
+
59
+ - name: Volume
60
+ members:
61
+ - count
62
+ - quantity
63
+ ```
64
+
65
+ ## Properties
66
+
67
+ | Property | Description |
68
+ |----------|-------------|
69
+ | `name` | Display name for the folder |
70
+ | `members` | List of member names to include |
71
+ | `folders` | Nested sub-folders |
72
+
73
+ ## Common Patterns
74
+
75
+ ### By Data Type
76
+
77
+ ```yaml
78
+ folders:
79
+ - name: Measures
80
+ members:
81
+ - count
82
+ - total_revenue
83
+ - average_order_value
84
+
85
+ - name: Dimensions
86
+ members:
87
+ - status
88
+ - category
89
+ - region
90
+
91
+ - name: Time
92
+ members:
93
+ - created_at
94
+ - updated_at
95
+ ```
96
+
97
+ ### By Business Domain
98
+
99
+ ```yaml
100
+ folders:
101
+ - name: Customer Info
102
+ members:
103
+ - customer_name
104
+ - customer_email
105
+ - customer_segment
106
+
107
+ - name: Order Details
108
+ members:
109
+ - order_status
110
+ - order_total
111
+ - items_count
112
+
113
+ - name: Shipping
114
+ members:
115
+ - shipped_at
116
+ - delivery_status
117
+ - shipping_cost
118
+ ```
119
+
120
+ ### By Analysis Type
121
+
122
+ ```yaml
123
+ folders:
124
+ - name: KPIs
125
+ members:
126
+ - total_revenue
127
+ - order_count
128
+ - conversion_rate
129
+
130
+ - name: Trends
131
+ members:
132
+ - created_at
133
+ - revenue_growth
134
+ - yoy_change
135
+
136
+ - name: Breakdowns
137
+ members:
138
+ - category
139
+ - region
140
+ - channel
141
+ ```
142
+
143
+ ## Best Practices
144
+
145
+ 1. **Keep folders shallow** — avoid deep nesting
146
+ 2. **Use clear names** — business-friendly labels
147
+ 3. **Group logically** — related members together
148
+ 4. **Limit folder count** — 3-7 folders per view
149
+
150
+ ## See Also
151
+
152
+ - views
153
+ - views.cubes
154
+ - views.includes
155
+
156
+ ## More Information
157
+
158
+ https://cube.dev/docs/reference/data-model/view#folders
@@ -0,0 +1,143 @@
1
+ # views.includes
2
+
3
+ > Control which cube members appear in a view.
4
+
5
+ ## Overview
6
+
7
+ The `includes` and `excludes` properties control which measures, dimensions, and segments from a cube are exposed in a view. This enables creating focused interfaces that show only relevant data.
8
+
9
+ ## Basic Syntax
10
+
11
+ ### Include Specific Members
12
+
13
+ ```yaml
14
+ - join_path: orders
15
+ includes:
16
+ - count
17
+ - total_revenue
18
+ - status
19
+ ```
20
+
21
+ ### Include All Members
22
+
23
+ ```yaml
24
+ - join_path: orders
25
+ includes: "*"
26
+ ```
27
+
28
+ ### Exclude Specific Members
29
+
30
+ ```yaml
31
+ - join_path: orders
32
+ includes: "*"
33
+ excludes:
34
+ - internal_id
35
+ - debug_flag
36
+ ```
37
+
38
+ ## Member Types
39
+
40
+ All cube member types can be included:
41
+
42
+ ```yaml
43
+ - join_path: orders
44
+ includes:
45
+ # Measures
46
+ - count
47
+ - total_revenue
48
+ - average_order_value
49
+
50
+ # Dimensions
51
+ - status
52
+ - created_at
53
+ - customer_email
54
+
55
+ # Segments
56
+ - completed
57
+ - high_value
58
+ ```
59
+
60
+ ## Renaming with Alias
61
+
62
+ Rename members to avoid collisions or improve clarity:
63
+
64
+ ```yaml
65
+ - join_path: orders
66
+ includes:
67
+ - name: count
68
+ alias: order_count
69
+
70
+ - name: created_at
71
+ alias: order_date
72
+ ```
73
+
74
+ ## Prefix Mode
75
+
76
+ Automatically prefix all members with cube name:
77
+
78
+ ```yaml
79
+ - join_path: orders
80
+ prefix: true
81
+ includes: "*"
82
+ # count -> orders_count
83
+ # status -> orders_status
84
+ ```
85
+
86
+ Custom prefix:
87
+
88
+ ```yaml
89
+ - join_path: orders
90
+ prefix: true
91
+ includes:
92
+ - name: count
93
+ alias: total_orders # Override automatic prefix
94
+ ```
95
+
96
+ ## Combining Multiple Cubes
97
+
98
+ When including the same member name from multiple cubes, use aliases:
99
+
100
+ ```yaml
101
+ views:
102
+ - name: combined_metrics
103
+ cubes:
104
+ - join_path: orders
105
+ includes:
106
+ - name: count
107
+ alias: order_count
108
+
109
+ - join_path: users
110
+ includes:
111
+ - name: count
112
+ alias: user_count
113
+ ```
114
+
115
+ ## Wildcard Patterns
116
+
117
+ Use `"*"` to include all, then exclude what you don't need:
118
+
119
+ ```yaml
120
+ - join_path: users
121
+ includes: "*"
122
+ excludes:
123
+ - password_hash
124
+ - api_secret
125
+ - internal_notes
126
+ ```
127
+
128
+ ## Best Practices
129
+
130
+ 1. **Be explicit** — list specific members rather than using `"*"` in production
131
+ 2. **Use aliases** — make member names clear and consistent
132
+ 3. **Exclude sensitive data** — never expose passwords, keys, or PII
133
+ 4. **Document with descriptions** — override descriptions for clarity
134
+
135
+ ## See Also
136
+
137
+ - views
138
+ - views.cubes
139
+ - views.folders
140
+
141
+ ## More Information
142
+
143
+ https://cube.dev/docs/reference/data-model/view#includes