@duckcodeailabs/dql-cli 0.1.1 → 0.1.2
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.
- package/dist/assets/notebook-browser/app.js +537 -0
- package/dist/assets/notebook-browser/index.html +83 -0
- package/dist/assets/notebook-browser/styles.css +336 -0
- package/dist/assets/templates/ecommerce/README.md +27 -0
- package/dist/assets/templates/ecommerce/blocks/repeat_rate.dql +26 -0
- package/dist/assets/templates/ecommerce/blocks/revenue_by_segment.dql +24 -0
- package/dist/assets/templates/ecommerce/dashboards/revenue_command_center.dql +25 -0
- package/dist/assets/templates/ecommerce/data/customers.csv +11 -0
- package/dist/assets/templates/ecommerce/data/funnel.csv +6 -0
- package/dist/assets/templates/ecommerce/data/orders.csv +16 -0
- package/dist/assets/templates/ecommerce/dql.config.json +13 -0
- package/dist/assets/templates/ecommerce/semantic-layer/dimensions/channel.yaml +4 -0
- package/dist/assets/templates/ecommerce/semantic-layer/metrics/gmv.yaml +4 -0
- package/dist/assets/templates/ecommerce/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/saas/README.md +20 -0
- package/dist/assets/templates/saas/blocks/churn_pressure.dql +25 -0
- package/dist/assets/templates/saas/blocks/revenue_by_segment.dql +25 -0
- package/dist/assets/templates/saas/dashboards/growth_scorecard.dql +25 -0
- package/dist/assets/templates/saas/data/cohorts.csv +7 -0
- package/dist/assets/templates/saas/data/subscriptions.csv +13 -0
- package/dist/assets/templates/saas/dql.config.json +13 -0
- package/dist/assets/templates/saas/semantic-layer/metrics/mrr.yaml +4 -0
- package/dist/assets/templates/saas/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/starter/README.md +54 -0
- package/dist/assets/templates/starter/blocks/revenue_by_segment.dql +29 -0
- package/dist/assets/templates/starter/blocks/revenue_trend_query_only.dql +20 -0
- package/dist/assets/templates/starter/dashboards/.gitkeep +1 -0
- package/dist/assets/templates/starter/data/revenue.csv +13 -0
- package/dist/assets/templates/starter/dql.config.json +13 -0
- package/dist/assets/templates/starter/semantic-layer/blocks/revenue_by_segment.yaml +11 -0
- package/dist/assets/templates/starter/semantic-layer/dimensions/segment_tier.yaml +6 -0
- package/dist/assets/templates/starter/semantic-layer/hierarchies/revenue_time.yaml +12 -0
- package/dist/assets/templates/starter/semantic-layer/metrics/revenue.yaml +7 -0
- package/dist/assets/templates/starter/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/taxi/README.md +19 -0
- package/dist/assets/templates/taxi/blocks/airport_mix.dql +25 -0
- package/dist/assets/templates/taxi/blocks/revenue_by_segment.dql +24 -0
- package/dist/assets/templates/taxi/dashboards/city_operations.dql +25 -0
- package/dist/assets/templates/taxi/data/trips.csv +13 -0
- package/dist/assets/templates/taxi/dql.config.json +13 -0
- package/dist/assets/templates/taxi/semantic-layer/.gitkeep +1 -0
- package/dist/assets/templates/taxi/workbooks/.gitkeep +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/notebook.d.ts.map +1 -1
- package/dist/commands/notebook.js +4 -1
- package/dist/commands/notebook.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# __PROJECT_NAME__
|
|
2
|
+
|
|
3
|
+
This starter gives you a local-first DQL project that is ready for parsing,
|
|
4
|
+
previewing, notebook exploration, and experimentation.
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
blocks/
|
|
8
|
+
dashboards/
|
|
9
|
+
data/
|
|
10
|
+
dql.config.json
|
|
11
|
+
notebooks/
|
|
12
|
+
workbooks/
|
|
13
|
+
semantic-layer/
|
|
14
|
+
metrics/
|
|
15
|
+
dimensions/
|
|
16
|
+
hierarchies/
|
|
17
|
+
blocks/
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
dql doctor
|
|
24
|
+
dql notebook
|
|
25
|
+
dql new block "Pipeline Health"
|
|
26
|
+
dql new semantic-block "ARR Growth"
|
|
27
|
+
dql new dashboard "Revenue Overview"
|
|
28
|
+
dql new workbook "Quarterly Review"
|
|
29
|
+
dql parse blocks/pipeline_health.dql
|
|
30
|
+
dql preview blocks/pipeline_health.dql --open
|
|
31
|
+
dql build blocks/pipeline_health.dql
|
|
32
|
+
dql serve dist/pipeline_health
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## What's Included
|
|
36
|
+
|
|
37
|
+
- `blocks/` — example charted and query-only DQL blocks
|
|
38
|
+
- `dashboards/` — empty folder for dashboard scaffolds
|
|
39
|
+
- `data/` — sample revenue CSV for local DuckDB/file preview flows
|
|
40
|
+
- `dql.config.json` — starter project configuration
|
|
41
|
+
- `notebooks/welcome.dqlnb` — guided notebook walkthrough for the browser notebook
|
|
42
|
+
- `workbooks/` — empty folder for workbook scaffolds
|
|
43
|
+
- `semantic-layer/` — example metrics, dimensions, hierarchies, and companion metadata
|
|
44
|
+
|
|
45
|
+
## Adopt the Starter Safely
|
|
46
|
+
|
|
47
|
+
- start in local file mode first
|
|
48
|
+
- keep sample datasets under `data/`
|
|
49
|
+
- run `dql doctor` before previewing if setup feels off
|
|
50
|
+
- add tests to every reusable block
|
|
51
|
+
|
|
52
|
+
## Learn More
|
|
53
|
+
|
|
54
|
+
- See the main DQL documentation for `project-config` and `data-sources` guidance.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
block "Revenue by Segment" {
|
|
2
|
+
domain = "revenue"
|
|
3
|
+
type = "custom"
|
|
4
|
+
description = "Starter block for segment revenue analysis using local CSV sample data"
|
|
5
|
+
tags = ["starter", "revenue"]
|
|
6
|
+
owner = "template"
|
|
7
|
+
|
|
8
|
+
params {
|
|
9
|
+
period = "current_quarter"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
query = """
|
|
13
|
+
SELECT segment_tier AS segment, SUM(amount) AS revenue
|
|
14
|
+
FROM read_csv_auto('./data/revenue.csv')
|
|
15
|
+
WHERE fiscal_period = ${period}
|
|
16
|
+
GROUP BY segment_tier
|
|
17
|
+
ORDER BY revenue DESC
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
visualization {
|
|
21
|
+
chart = "bar"
|
|
22
|
+
x = segment
|
|
23
|
+
y = revenue
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
tests {
|
|
27
|
+
assert row_count > 0
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
block "Revenue Trend Query" {
|
|
2
|
+
domain = "revenue"
|
|
3
|
+
type = "custom"
|
|
4
|
+
description = "Starter query-only block for monthly revenue trends using local CSV sample data"
|
|
5
|
+
tags = ["starter", "revenue", "query-only"]
|
|
6
|
+
owner = "template"
|
|
7
|
+
|
|
8
|
+
query = """
|
|
9
|
+
SELECT
|
|
10
|
+
DATE_TRUNC('month', CAST(recognized_at AS DATE)) AS revenue_month,
|
|
11
|
+
SUM(amount) AS total_revenue
|
|
12
|
+
FROM read_csv_auto('./data/revenue.csv')
|
|
13
|
+
GROUP BY 1
|
|
14
|
+
ORDER BY 1
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
tests {
|
|
18
|
+
assert row_count > 0
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
recognized_at,segment_tier,amount,fiscal_period,fiscal_year,fiscal_quarter
|
|
2
|
+
2025-01-03,Enterprise,185000,current_quarter,2025,Q1
|
|
3
|
+
2025-01-14,Mid-Market,92000,current_quarter,2025,Q1
|
|
4
|
+
2025-01-25,SMB,28000,current_quarter,2025,Q1
|
|
5
|
+
2025-02-05,Enterprise,210000,current_quarter,2025,Q1
|
|
6
|
+
2025-02-09,Mid-Market,101000,current_quarter,2025,Q1
|
|
7
|
+
2025-02-18,SMB,31000,current_quarter,2025,Q1
|
|
8
|
+
2025-03-02,Enterprise,223000,current_quarter,2025,Q1
|
|
9
|
+
2025-03-11,Mid-Market,108000,current_quarter,2025,Q1
|
|
10
|
+
2025-03-19,SMB,34000,current_quarter,2025,Q1
|
|
11
|
+
2025-04-07,Enterprise,205000,next_quarter,2025,Q2
|
|
12
|
+
2025-04-16,Mid-Market,99000,next_quarter,2025,Q2
|
|
13
|
+
2025-04-23,SMB,29000,next_quarter,2025,Q2
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
name: revenue_by_segment
|
|
2
|
+
block: revenue_by_segment
|
|
3
|
+
domain: revenue
|
|
4
|
+
description: Optional companion metadata for the starter block
|
|
5
|
+
tags:
|
|
6
|
+
- revenue
|
|
7
|
+
- starter
|
|
8
|
+
semanticMappings:
|
|
9
|
+
segment: segment_tier
|
|
10
|
+
revenue: total_revenue
|
|
11
|
+
reviewStatus: draft
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: revenue_time
|
|
2
|
+
label: Revenue Time
|
|
3
|
+
description: Example fiscal calendar hierarchy
|
|
4
|
+
domain: revenue
|
|
5
|
+
levels:
|
|
6
|
+
- name: fiscal_year
|
|
7
|
+
dimension: fiscal_year
|
|
8
|
+
order: 1
|
|
9
|
+
- name: fiscal_quarter
|
|
10
|
+
dimension: fiscal_quarter
|
|
11
|
+
order: 2
|
|
12
|
+
defaultRollup: sum
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# __PROJECT_NAME__
|
|
2
|
+
|
|
3
|
+
This template packages a city mobility analytics sandbox with taxi trip data.
|
|
4
|
+
|
|
5
|
+
## Included assets
|
|
6
|
+
|
|
7
|
+
- `blocks/revenue_by_segment.dql` — trip volume by pickup borough
|
|
8
|
+
- `blocks/airport_mix.dql` — airport trip fare mix
|
|
9
|
+
- `dashboards/city_operations.dql` — operations dashboard with fares and trip counts
|
|
10
|
+
- `data/trips.csv` — local taxi trip sample dataset
|
|
11
|
+
- `notebooks/welcome.dqlnb` — browser notebook walkthrough
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
dql doctor
|
|
17
|
+
dql notebook
|
|
18
|
+
dql preview blocks/revenue_by_segment.dql --open
|
|
19
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
block "Airport Fare Mix" {
|
|
2
|
+
domain = "mobility"
|
|
3
|
+
type = "custom"
|
|
4
|
+
description = "Average fare for airport versus non-airport trips"
|
|
5
|
+
tags = ["taxi", "airport"]
|
|
6
|
+
owner = "template"
|
|
7
|
+
|
|
8
|
+
query = """
|
|
9
|
+
SELECT CASE WHEN airport_flag THEN 'Airport' ELSE 'City' END AS trip_type,
|
|
10
|
+
ROUND(AVG(fare_amount), 2) AS avg_fare
|
|
11
|
+
FROM read_csv_auto('./data/trips.csv')
|
|
12
|
+
GROUP BY trip_type
|
|
13
|
+
ORDER BY avg_fare DESC
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
visualization {
|
|
17
|
+
chart = "bar"
|
|
18
|
+
x = trip_type
|
|
19
|
+
y = avg_fare
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
tests {
|
|
23
|
+
assert row_count > 0
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
block "Trips by Borough" {
|
|
2
|
+
domain = "mobility"
|
|
3
|
+
type = "custom"
|
|
4
|
+
description = "Trip count by pickup borough"
|
|
5
|
+
tags = ["taxi", "operations"]
|
|
6
|
+
owner = "template"
|
|
7
|
+
|
|
8
|
+
query = """
|
|
9
|
+
SELECT pickup_borough, COUNT(*) AS revenue
|
|
10
|
+
FROM read_csv_auto('./data/trips.csv')
|
|
11
|
+
GROUP BY pickup_borough
|
|
12
|
+
ORDER BY revenue DESC
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
visualization {
|
|
16
|
+
chart = "bar"
|
|
17
|
+
x = pickup_borough
|
|
18
|
+
y = revenue
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
tests {
|
|
22
|
+
assert row_count > 0
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
dashboard "City Operations" {
|
|
2
|
+
chart.kpi(
|
|
3
|
+
SELECT COUNT(*) AS total_trips
|
|
4
|
+
FROM read_csv_auto('./data/trips.csv'),
|
|
5
|
+
metrics = ["total_trips"],
|
|
6
|
+
title = "Total Trips"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
chart.line(
|
|
10
|
+
SELECT pickup_hour, ROUND(AVG(fare_amount), 2) AS avg_fare
|
|
11
|
+
FROM read_csv_auto('./data/trips.csv')
|
|
12
|
+
GROUP BY pickup_hour
|
|
13
|
+
ORDER BY pickup_hour,
|
|
14
|
+
x = pickup_hour,
|
|
15
|
+
y = avg_fare,
|
|
16
|
+
title = "Average Fare by Hour"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
chart.table(
|
|
20
|
+
SELECT pickup_date, pickup_borough, dropoff_borough, trip_miles, fare_amount, tip_amount
|
|
21
|
+
FROM read_csv_auto('./data/trips.csv')
|
|
22
|
+
ORDER BY fare_amount DESC,
|
|
23
|
+
title = "Highest Fare Trips"
|
|
24
|
+
)
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
trip_id,pickup_date,pickup_hour,pickup_borough,dropoff_borough,payment_type,fare_amount,tip_amount,trip_miles,airport_flag
|
|
2
|
+
T-001,2025-01-03,6,Manhattan,Queens,Card,32.5,6.2,8.4,true
|
|
3
|
+
T-002,2025-01-03,7,Brooklyn,Manhattan,Card,21.4,4.1,5.6,false
|
|
4
|
+
T-003,2025-01-04,8,Queens,Manhattan,Cash,27.8,0,7.1,true
|
|
5
|
+
T-004,2025-01-04,9,Manhattan,Brooklyn,Card,18.9,3.7,4.9,false
|
|
6
|
+
T-005,2025-01-05,11,Bronx,Manhattan,Card,25.7,5.1,6.8,false
|
|
7
|
+
T-006,2025-01-05,12,Manhattan,Queens,Card,34.2,6.8,8.9,true
|
|
8
|
+
T-007,2025-01-06,13,Queens,Brooklyn,Card,19.3,3.5,5.2,false
|
|
9
|
+
T-008,2025-01-06,15,Manhattan,Manhattan,Card,14.6,3.2,2.8,false
|
|
10
|
+
T-009,2025-01-07,17,Brooklyn,Queens,Cash,16.8,0,4.1,false
|
|
11
|
+
T-010,2025-01-07,18,Manhattan,Staten Island,Card,41.1,7.4,12.3,false
|
|
12
|
+
T-011,2025-01-08,19,Queens,Manhattan,Card,29.6,5.9,7.7,true
|
|
13
|
+
T-012,2025-01-08,21,Brooklyn,Manhattan,Card,22.1,4.6,5.9,false
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkB3C,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DtF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -4,7 +4,9 @@ import { fileURLToPath } from 'node:url';
|
|
|
4
4
|
import { createWelcomeNotebook, serializeNotebook } from '@duckcodeailabs/dql-notebook';
|
|
5
5
|
import { runNotebook } from './notebook.js';
|
|
6
6
|
const COMMAND_DIR = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const
|
|
7
|
+
const PACKAGED_TEMPLATE_ROOT = resolve(COMMAND_DIR, '../assets/templates');
|
|
8
|
+
const REPO_TEMPLATE_ROOT = resolve(COMMAND_DIR, '../../../../templates');
|
|
9
|
+
const TEMPLATE_ROOT = existsSync(PACKAGED_TEMPLATE_ROOT) ? PACKAGED_TEMPLATE_ROOT : REPO_TEMPLATE_ROOT;
|
|
8
10
|
const TEXT_FILE_EXTENSIONS = new Set([
|
|
9
11
|
'.json',
|
|
10
12
|
'.md',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,MAAM,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAc3C,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
1
2
|
import { dirname, resolve } from 'node:path';
|
|
2
3
|
import { fileURLToPath } from 'node:url';
|
|
3
4
|
import { QueryExecutor } from '@duckcodeailabs/dql-connectors';
|
|
4
5
|
import { assertLocalQueryRuntimeReady, findProjectRoot, loadProjectConfig, startLocalServer, } from '../local-runtime.js';
|
|
5
6
|
import { maybeOpenBrowser } from '../open-browser.js';
|
|
6
7
|
const COMMAND_DIR = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const
|
|
8
|
+
const PACKAGED_NOTEBOOK_APP_DIR = resolve(COMMAND_DIR, '../assets/notebook-browser');
|
|
9
|
+
const REPO_NOTEBOOK_APP_DIR = resolve(COMMAND_DIR, '../../../../apps/notebook-browser');
|
|
10
|
+
const NOTEBOOK_APP_DIR = existsSync(PACKAGED_NOTEBOOK_APP_DIR) ? PACKAGED_NOTEBOOK_APP_DIR : REPO_NOTEBOOK_APP_DIR;
|
|
8
11
|
export async function runNotebook(targetArg, flags) {
|
|
9
12
|
const baseDir = resolve(targetArg ?? '.');
|
|
10
13
|
const projectRoot = findProjectRoot(baseDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,MAAM,
|
|
1
|
+
{"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,MAAM,yBAAyB,GAAG,OAAO,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;AACrF,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;AACxF,MAAM,gBAAgB,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAEnH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAwB,EAAE,KAAe;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEjG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,OAAO,EAAE,gBAAgB;QACzB,WAAW;QACX,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;KAC1D,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckcodeailabs/dql-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Public CLI for parsing, formatting, testing, and certifying DQL blocks",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"directory": "apps/cli"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@duckcodeailabs/dql-connectors": "0.1.
|
|
23
|
-
"@duckcodeailabs/dql-
|
|
24
|
-
"@duckcodeailabs/dql-
|
|
25
|
-
"@duckcodeailabs/dql-
|
|
26
|
-
"@duckcodeailabs/dql-project": "0.1.
|
|
27
|
-
"@duckcodeailabs/dql-notebook": "0.1.
|
|
22
|
+
"@duckcodeailabs/dql-connectors": "0.1.2",
|
|
23
|
+
"@duckcodeailabs/dql-compiler": "0.1.2",
|
|
24
|
+
"@duckcodeailabs/dql-core": "0.1.2",
|
|
25
|
+
"@duckcodeailabs/dql-governance": "0.1.2",
|
|
26
|
+
"@duckcodeailabs/dql-project": "0.1.2",
|
|
27
|
+
"@duckcodeailabs/dql-notebook": "0.1.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"typescript": "^5.7.0",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"node": ">=18.0.0"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
|
-
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc -b",
|
|
38
|
+
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc -b && node ./scripts/copy-runtime-assets.mjs",
|
|
39
39
|
"dev": "tsx src/index.ts",
|
|
40
40
|
"test": "vitest run --passWithNoTests",
|
|
41
41
|
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|