@claryai/cli 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 (237) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +197 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/ajv.d.ts +3 -0
  5. package/dist/ajv.d.ts.map +1 -0
  6. package/dist/ajv.js +13 -0
  7. package/dist/analytics/analytics.d.ts +370 -0
  8. package/dist/analytics/analytics.d.ts.map +1 -0
  9. package/dist/analytics/analytics.js +143 -0
  10. package/dist/config.d.ts +34 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +134 -0
  13. package/dist/dbt/context.d.ts +14 -0
  14. package/dist/dbt/context.d.ts.map +1 -0
  15. package/dist/dbt/context.js +76 -0
  16. package/dist/dbt/context.test.d.ts +2 -0
  17. package/dist/dbt/context.test.d.ts.map +1 -0
  18. package/dist/dbt/context.test.js +152 -0
  19. package/dist/dbt/manifest.d.ts +7 -0
  20. package/dist/dbt/manifest.d.ts.map +1 -0
  21. package/dist/dbt/manifest.js +23 -0
  22. package/dist/dbt/models.d.ts +43 -0
  23. package/dist/dbt/models.d.ts.map +1 -0
  24. package/dist/dbt/models.js +256 -0
  25. package/dist/dbt/models.test.d.ts +2 -0
  26. package/dist/dbt/models.test.d.ts.map +1 -0
  27. package/dist/dbt/models.test.js +19 -0
  28. package/dist/dbt/profile.d.ts +9 -0
  29. package/dist/dbt/profile.d.ts.map +1 -0
  30. package/dist/dbt/profile.js +86 -0
  31. package/dist/dbt/profiles.test.d.ts +2 -0
  32. package/dist/dbt/profiles.test.d.ts.map +1 -0
  33. package/dist/dbt/profiles.test.js +50 -0
  34. package/dist/dbt/schema.d.ts +31 -0
  35. package/dist/dbt/schema.d.ts.map +1 -0
  36. package/dist/dbt/schema.js +49 -0
  37. package/dist/dbt/targets/Bigquery/index.d.ts +18 -0
  38. package/dist/dbt/targets/Bigquery/index.d.ts.map +1 -0
  39. package/dist/dbt/targets/Bigquery/index.js +105 -0
  40. package/dist/dbt/targets/Bigquery/oauth.d.ts +2 -0
  41. package/dist/dbt/targets/Bigquery/oauth.d.ts.map +1 -0
  42. package/dist/dbt/targets/Bigquery/oauth.js +43 -0
  43. package/dist/dbt/targets/Bigquery/serviceAccount.d.ts +35 -0
  44. package/dist/dbt/targets/Bigquery/serviceAccount.d.ts.map +1 -0
  45. package/dist/dbt/targets/Bigquery/serviceAccount.js +149 -0
  46. package/dist/dbt/targets/Databricks/oauth.d.ts +21 -0
  47. package/dist/dbt/targets/Databricks/oauth.d.ts.map +1 -0
  48. package/dist/dbt/targets/Databricks/oauth.js +184 -0
  49. package/dist/dbt/targets/athena.d.ts +21 -0
  50. package/dist/dbt/targets/athena.d.ts.map +1 -0
  51. package/dist/dbt/targets/athena.js +91 -0
  52. package/dist/dbt/targets/athena.test.d.ts +2 -0
  53. package/dist/dbt/targets/athena.test.d.ts.map +1 -0
  54. package/dist/dbt/targets/athena.test.js +60 -0
  55. package/dist/dbt/targets/clickhouse.d.ts +24 -0
  56. package/dist/dbt/targets/clickhouse.d.ts.map +1 -0
  57. package/dist/dbt/targets/clickhouse.js +90 -0
  58. package/dist/dbt/targets/databricks.d.ts +27 -0
  59. package/dist/dbt/targets/databricks.d.ts.map +1 -0
  60. package/dist/dbt/targets/databricks.js +138 -0
  61. package/dist/dbt/targets/duckdb.d.ts +16 -0
  62. package/dist/dbt/targets/duckdb.d.ts.map +1 -0
  63. package/dist/dbt/targets/duckdb.js +63 -0
  64. package/dist/dbt/targets/duckdb.test.d.ts +2 -0
  65. package/dist/dbt/targets/duckdb.test.d.ts.map +1 -0
  66. package/dist/dbt/targets/duckdb.test.js +37 -0
  67. package/dist/dbt/targets/postgres.d.ts +26 -0
  68. package/dist/dbt/targets/postgres.d.ts.map +1 -0
  69. package/dist/dbt/targets/postgres.js +142 -0
  70. package/dist/dbt/targets/redshift.d.ts +23 -0
  71. package/dist/dbt/targets/redshift.d.ts.map +1 -0
  72. package/dist/dbt/targets/redshift.js +96 -0
  73. package/dist/dbt/targets/snowflake.d.ts +4 -0
  74. package/dist/dbt/targets/snowflake.d.ts.map +1 -0
  75. package/dist/dbt/targets/snowflake.js +134 -0
  76. package/dist/dbt/targets/trino.d.ts +16 -0
  77. package/dist/dbt/targets/trino.d.ts.map +1 -0
  78. package/dist/dbt/targets/trino.js +65 -0
  79. package/dist/dbt/templating.d.ts +15 -0
  80. package/dist/dbt/templating.d.ts.map +1 -0
  81. package/dist/dbt/templating.js +50 -0
  82. package/dist/dbt/templating.test.d.ts +2 -0
  83. package/dist/dbt/templating.test.d.ts.map +1 -0
  84. package/dist/dbt/templating.test.js +51 -0
  85. package/dist/dbt/types.d.ts +17 -0
  86. package/dist/dbt/types.d.ts.map +1 -0
  87. package/dist/dbt/types.js +2 -0
  88. package/dist/dbt/validation.d.ts +9 -0
  89. package/dist/dbt/validation.d.ts.map +1 -0
  90. package/dist/dbt/validation.js +54 -0
  91. package/dist/env.d.ts +12 -0
  92. package/dist/env.d.ts.map +1 -0
  93. package/dist/env.js +40 -0
  94. package/dist/error.d.ts +2 -0
  95. package/dist/error.d.ts.map +1 -0
  96. package/dist/error.js +12 -0
  97. package/dist/globalState.d.ts +29 -0
  98. package/dist/globalState.d.ts.map +1 -0
  99. package/dist/globalState.js +67 -0
  100. package/dist/handlers/asyncQuery.d.ts +7 -0
  101. package/dist/handlers/asyncQuery.d.ts.map +1 -0
  102. package/dist/handlers/asyncQuery.js +50 -0
  103. package/dist/handlers/compile.d.ts +16 -0
  104. package/dist/handlers/compile.d.ts.map +1 -0
  105. package/dist/handlers/compile.js +277 -0
  106. package/dist/handlers/compile.test.d.ts +2 -0
  107. package/dist/handlers/compile.test.d.ts.map +1 -0
  108. package/dist/handlers/compile.test.js +201 -0
  109. package/dist/handlers/createProject.d.ts +37 -0
  110. package/dist/handlers/createProject.d.ts.map +1 -0
  111. package/dist/handlers/createProject.js +272 -0
  112. package/dist/handlers/dbt/apiClient.d.ts +14 -0
  113. package/dist/handlers/dbt/apiClient.d.ts.map +1 -0
  114. package/dist/handlers/dbt/apiClient.js +167 -0
  115. package/dist/handlers/dbt/compile.d.ts +35 -0
  116. package/dist/handlers/dbt/compile.d.ts.map +1 -0
  117. package/dist/handlers/dbt/compile.js +220 -0
  118. package/dist/handlers/dbt/getDbtProfileTargetName.d.ts +9 -0
  119. package/dist/handlers/dbt/getDbtProfileTargetName.d.ts.map +1 -0
  120. package/dist/handlers/dbt/getDbtProfileTargetName.js +44 -0
  121. package/dist/handlers/dbt/getDbtVersion.d.ts +16 -0
  122. package/dist/handlers/dbt/getDbtVersion.d.ts.map +1 -0
  123. package/dist/handlers/dbt/getDbtVersion.js +141 -0
  124. package/dist/handlers/dbt/getDbtVersion.mocks.d.ts +11 -0
  125. package/dist/handlers/dbt/getDbtVersion.mocks.d.ts.map +1 -0
  126. package/dist/handlers/dbt/getDbtVersion.mocks.js +70 -0
  127. package/dist/handlers/dbt/getDbtVersion.test.d.ts +2 -0
  128. package/dist/handlers/dbt/getDbtVersion.test.d.ts.map +1 -0
  129. package/dist/handlers/dbt/getDbtVersion.test.js +97 -0
  130. package/dist/handlers/dbt/getWarehouseClient.d.ts +24 -0
  131. package/dist/handlers/dbt/getWarehouseClient.d.ts.map +1 -0
  132. package/dist/handlers/dbt/getWarehouseClient.js +312 -0
  133. package/dist/handlers/dbt/refresh.d.ts +11 -0
  134. package/dist/handlers/dbt/refresh.d.ts.map +1 -0
  135. package/dist/handlers/dbt/refresh.js +114 -0
  136. package/dist/handlers/dbt/run.d.ts +14 -0
  137. package/dist/handlers/dbt/run.d.ts.map +1 -0
  138. package/dist/handlers/dbt/run.js +67 -0
  139. package/dist/handlers/deploy.d.ts +26 -0
  140. package/dist/handlers/deploy.d.ts.map +1 -0
  141. package/dist/handlers/deploy.js +377 -0
  142. package/dist/handlers/diagnostics.d.ts +11 -0
  143. package/dist/handlers/diagnostics.d.ts.map +1 -0
  144. package/dist/handlers/diagnostics.js +194 -0
  145. package/dist/handlers/download.d.ts +29 -0
  146. package/dist/handlers/download.d.ts.map +1 -0
  147. package/dist/handlers/download.js +955 -0
  148. package/dist/handlers/exportChartImage.d.ts +7 -0
  149. package/dist/handlers/exportChartImage.d.ts.map +1 -0
  150. package/dist/handlers/exportChartImage.js +33 -0
  151. package/dist/handlers/generate.d.ts +13 -0
  152. package/dist/handlers/generate.d.ts.map +1 -0
  153. package/dist/handlers/generate.js +159 -0
  154. package/dist/handlers/generateExposures.d.ts +8 -0
  155. package/dist/handlers/generateExposures.d.ts.map +1 -0
  156. package/dist/handlers/generateExposures.js +100 -0
  157. package/dist/handlers/getProject.d.ts +6 -0
  158. package/dist/handlers/getProject.d.ts.map +1 -0
  159. package/dist/handlers/getProject.js +43 -0
  160. package/dist/handlers/installSkills.d.ts +12 -0
  161. package/dist/handlers/installSkills.d.ts.map +1 -0
  162. package/dist/handlers/installSkills.js +321 -0
  163. package/dist/handlers/lint/ajvToSarif.d.ts +66 -0
  164. package/dist/handlers/lint/ajvToSarif.d.ts.map +1 -0
  165. package/dist/handlers/lint/ajvToSarif.js +222 -0
  166. package/dist/handlers/lint/sarifFormatter.d.ts +14 -0
  167. package/dist/handlers/lint/sarifFormatter.d.ts.map +1 -0
  168. package/dist/handlers/lint/sarifFormatter.js +111 -0
  169. package/dist/handlers/lint.d.ts +8 -0
  170. package/dist/handlers/lint.d.ts.map +1 -0
  171. package/dist/handlers/lint.js +308 -0
  172. package/dist/handlers/listProjects.d.ts +6 -0
  173. package/dist/handlers/listProjects.d.ts.map +1 -0
  174. package/dist/handlers/listProjects.js +53 -0
  175. package/dist/handlers/login/oauth.d.ts +2 -0
  176. package/dist/handlers/login/oauth.d.ts.map +1 -0
  177. package/dist/handlers/login/oauth.js +27 -0
  178. package/dist/handlers/login/pat.d.ts +2 -0
  179. package/dist/handlers/login/pat.d.ts.map +1 -0
  180. package/dist/handlers/login/pat.js +31 -0
  181. package/dist/handlers/login.d.ts +15 -0
  182. package/dist/handlers/login.d.ts.map +1 -0
  183. package/dist/handlers/login.js +239 -0
  184. package/dist/handlers/metadataFile.d.ts +9 -0
  185. package/dist/handlers/metadataFile.d.ts.map +1 -0
  186. package/dist/handlers/metadataFile.js +34 -0
  187. package/dist/handlers/oauthLogin.d.ts +6 -0
  188. package/dist/handlers/oauthLogin.d.ts.map +1 -0
  189. package/dist/handlers/oauthLogin.js +191 -0
  190. package/dist/handlers/preview.d.ts +29 -0
  191. package/dist/handlers/preview.d.ts.map +1 -0
  192. package/dist/handlers/preview.js +415 -0
  193. package/dist/handlers/renameHandler.d.ts +16 -0
  194. package/dist/handlers/renameHandler.d.ts.map +1 -0
  195. package/dist/handlers/renameHandler.js +160 -0
  196. package/dist/handlers/runChart.d.ts +10 -0
  197. package/dist/handlers/runChart.d.ts.map +1 -0
  198. package/dist/handlers/runChart.js +105 -0
  199. package/dist/handlers/selectProject.d.ts +20 -0
  200. package/dist/handlers/selectProject.d.ts.map +1 -0
  201. package/dist/handlers/selectProject.js +91 -0
  202. package/dist/handlers/setProject.d.ts +14 -0
  203. package/dist/handlers/setProject.d.ts.map +1 -0
  204. package/dist/handlers/setProject.js +131 -0
  205. package/dist/handlers/setWarehouse.d.ts +14 -0
  206. package/dist/handlers/setWarehouse.d.ts.map +1 -0
  207. package/dist/handlers/setWarehouse.js +94 -0
  208. package/dist/handlers/sql.d.ts +9 -0
  209. package/dist/handlers/sql.d.ts.map +1 -0
  210. package/dist/handlers/sql.js +89 -0
  211. package/dist/handlers/utils.d.ts +11 -0
  212. package/dist/handlers/utils.d.ts.map +1 -0
  213. package/dist/handlers/utils.js +36 -0
  214. package/dist/handlers/validate.d.ts +22 -0
  215. package/dist/handlers/validate.d.ts.map +1 -0
  216. package/dist/handlers/validate.js +201 -0
  217. package/dist/index.d.ts +3 -0
  218. package/dist/index.d.ts.map +1 -0
  219. package/dist/index.js +581 -0
  220. package/dist/lightdash/loader.d.ts +21 -0
  221. package/dist/lightdash/loader.d.ts.map +1 -0
  222. package/dist/lightdash/loader.js +122 -0
  223. package/dist/lightdash/projectType.d.ts +84 -0
  224. package/dist/lightdash/projectType.d.ts.map +1 -0
  225. package/dist/lightdash/projectType.js +75 -0
  226. package/dist/lightdash-config/index.d.ts +2 -0
  227. package/dist/lightdash-config/index.d.ts.map +1 -0
  228. package/dist/lightdash-config/index.js +41 -0
  229. package/dist/lightdash-config/lightdash-config.test.d.ts +2 -0
  230. package/dist/lightdash-config/lightdash-config.test.d.ts.map +1 -0
  231. package/dist/lightdash-config/lightdash-config.test.js +70 -0
  232. package/dist/styles.d.ts +10 -0
  233. package/dist/styles.d.ts.map +1 -0
  234. package/dist/styles.js +14 -0
  235. package/entitlements.plist +33 -0
  236. package/package.json +71 -0
  237. package/track.sh +116 -0
package/dist/config.js ADDED
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setAnswer = exports.setContext = exports.setDefaultUser = exports.unsetPreviewProject = exports.setPreviewProject = exports.unsetProject = exports.setProject = exports.getConfig = exports.configFilePath = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = require("fs");
6
+ const yaml = tslib_1.__importStar(require("js-yaml"));
7
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
8
+ const os = tslib_1.__importStar(require("os"));
9
+ const path = tslib_1.__importStar(require("path"));
10
+ const uuid_1 = require("uuid");
11
+ const configDir = path.join(os.homedir(), '.config', 'clary');
12
+ exports.configFilePath = path.join(configDir, 'config.yaml');
13
+ const setConfig = async (config) => {
14
+ await fs_1.promises.mkdir(path.dirname(exports.configFilePath), { recursive: true });
15
+ await fs_1.promises.writeFile(exports.configFilePath, yaml.dump(config), 'utf8');
16
+ };
17
+ const getRawConfig = async () => {
18
+ try {
19
+ const raw = yaml.load(await fs_1.promises.readFile(exports.configFilePath, 'utf8'));
20
+ return raw;
21
+ }
22
+ catch (e) {
23
+ if (e instanceof Error && 'code' in e && e.code === 'ENOENT') {
24
+ return {};
25
+ }
26
+ throw e;
27
+ }
28
+ };
29
+ const setAnonymousUuid = async (anonymousUuid) => {
30
+ const config = await getRawConfig();
31
+ const newConfig = {
32
+ ...config,
33
+ user: {
34
+ ...(config.user || {}),
35
+ anonymousUuid,
36
+ },
37
+ };
38
+ await setConfig(newConfig);
39
+ return newConfig;
40
+ };
41
+ const getConfig = async () => {
42
+ let rawConfig = await getRawConfig();
43
+ if (rawConfig.user?.anonymousUuid === undefined) {
44
+ rawConfig = await setAnonymousUuid((0, uuid_1.v4)());
45
+ }
46
+ return {
47
+ ...rawConfig,
48
+ context: {
49
+ ...(rawConfig.context || {}),
50
+ apiKey: process.env.CLARY_API_KEY || rawConfig.context?.apiKey,
51
+ project: process.env.CLARY_PROJECT || rawConfig.context?.project,
52
+ serverUrl: process.env.CLARY_URL || rawConfig.context?.serverUrl,
53
+ proxyAuthorization: process.env.CLARY_PROXY_AUTHORIZATION ||
54
+ rawConfig.context?.proxyAuthorization,
55
+ },
56
+ };
57
+ };
58
+ exports.getConfig = getConfig;
59
+ const setProject = async (projectUuid, projectName) => {
60
+ const config = await getRawConfig();
61
+ await setConfig({
62
+ ...config,
63
+ context: {
64
+ ...(config.context || {}),
65
+ project: projectUuid,
66
+ projectName,
67
+ },
68
+ });
69
+ };
70
+ exports.setProject = setProject;
71
+ const unsetProject = async () => {
72
+ const config = await getRawConfig();
73
+ await setConfig({
74
+ ...config,
75
+ context: {
76
+ ...(config.context || {}),
77
+ project: undefined,
78
+ projectName: undefined,
79
+ },
80
+ });
81
+ };
82
+ exports.unsetProject = unsetProject;
83
+ const setPreviewProject = async (projectUuid, name) => {
84
+ const config = await getRawConfig();
85
+ await setConfig({
86
+ ...config,
87
+ context: {
88
+ ...(config.context || {}),
89
+ previewProject: projectUuid,
90
+ previewName: name,
91
+ },
92
+ });
93
+ };
94
+ exports.setPreviewProject = setPreviewProject;
95
+ const unsetPreviewProject = async () => {
96
+ const config = await getRawConfig();
97
+ await setConfig({
98
+ ...config,
99
+ context: {
100
+ ...(config.context || {}),
101
+ previewProject: undefined,
102
+ previewName: undefined,
103
+ },
104
+ });
105
+ };
106
+ exports.unsetPreviewProject = unsetPreviewProject;
107
+ const setDefaultUser = async (userUuid, organizationUuid) => {
108
+ const config = await getRawConfig();
109
+ await setConfig({
110
+ ...config,
111
+ user: {
112
+ ...(config.user || {}),
113
+ userUuid,
114
+ organizationUuid,
115
+ },
116
+ });
117
+ };
118
+ exports.setDefaultUser = setDefaultUser;
119
+ const setContext = async (context) => {
120
+ const config = await getRawConfig();
121
+ await setConfig({
122
+ ...config,
123
+ context,
124
+ });
125
+ };
126
+ exports.setContext = setContext;
127
+ const setAnswer = async (answer) => {
128
+ const config = await getRawConfig();
129
+ await setConfig({
130
+ ...config,
131
+ answers: lodash_1.default.merge(config.answers, answer),
132
+ });
133
+ };
134
+ exports.setAnswer = setAnswer;
@@ -0,0 +1,14 @@
1
+ type GetDbtContextArgs = {
2
+ projectDir: string;
3
+ initialProjectDir?: string;
4
+ targetPath?: string;
5
+ };
6
+ export type DbtContext = {
7
+ projectName: string;
8
+ profileName: string;
9
+ targetDir: string;
10
+ modelsDir: string;
11
+ };
12
+ export declare const getDbtContext: ({ projectDir, initialProjectDir, targetPath, }: GetDbtContextArgs) => Promise<DbtContext>;
13
+ export {};
14
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/dbt/context.ts"],"names":[],"mappings":"AAOA,KAAK,iBAAiB,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAkBF,eAAO,MAAM,aAAa,GAAU,gDAIjC,iBAAiB,KAAG,OAAO,CAAC,UAAU,CAqExC,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDbtContext = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@lightdash/common");
6
+ const fs_1 = require("fs");
7
+ const yaml = tslib_1.__importStar(require("js-yaml"));
8
+ const path = tslib_1.__importStar(require("path"));
9
+ const globalState_1 = tslib_1.__importDefault(require("../globalState"));
10
+ const templating_1 = require("./templating");
11
+ function tryRenderVariable(variableName, raw) {
12
+ try {
13
+ return (0, templating_1.renderTemplatedYml)(raw);
14
+ }
15
+ catch (e) {
16
+ globalState_1.default.debug(`> Warning: Failed to render Jinja in dbt_project.yml ${variableName}: ${(0, common_1.getErrorMessage)(e)}`);
17
+ globalState_1.default.debug('> Falling back to parsing raw YAML without Jinja rendering');
18
+ return raw;
19
+ }
20
+ }
21
+ const getDbtContext = async ({ projectDir, initialProjectDir, targetPath, }) => {
22
+ globalState_1.default.debug(`> Loading dbt_project.yml file from: ${projectDir}`);
23
+ const projectFilename = path.join(projectDir, 'dbt_project.yml');
24
+ let file;
25
+ try {
26
+ file = await fs_1.promises.readFile(projectFilename, { encoding: 'utf-8' });
27
+ }
28
+ catch (e) {
29
+ if (projectDir !== path.parse(projectDir).root) {
30
+ const parentDir = path.join(projectDir, '..');
31
+ return (0, exports.getDbtContext)({
32
+ projectDir: parentDir,
33
+ initialProjectDir: initialProjectDir || projectDir,
34
+ targetPath,
35
+ });
36
+ }
37
+ const msg = (0, common_1.getErrorMessage)(e);
38
+ throw new common_1.ParseError(`Is ${initialProjectDir} a valid dbt project directory? Couldn't find a valid dbt_project.yml on ${initialProjectDir} or any of its parents:\n ${msg}`);
39
+ }
40
+ const config = yaml.load(file);
41
+ // Try to render Jinja templating (e.g., env_var) for each individual config key needed
42
+ let targetSubDir;
43
+ // Precedence: CLI option > env var > dbt_project.yml > default
44
+ if (targetPath) {
45
+ targetSubDir = targetPath;
46
+ globalState_1.default.debug(`> Using target-path from CLI option: ${targetSubDir}`);
47
+ }
48
+ else if (process.env.DBT_TARGET_PATH) {
49
+ targetSubDir = process.env.DBT_TARGET_PATH;
50
+ globalState_1.default.debug(`> Using target-path from DBT_TARGET_PATH env var: ${targetSubDir}`);
51
+ }
52
+ else {
53
+ targetSubDir = config['target-path'] || './target';
54
+ targetSubDir = tryRenderVariable('target-path', targetSubDir);
55
+ globalState_1.default.debug(`> Using target-path from dbt_project.yml: ${targetSubDir}`);
56
+ }
57
+ let modelsSubDir = config['models-path'] || './models';
58
+ let projectName = config.name;
59
+ let profileName = config.profile;
60
+ // ! Important: We only render the variables that are needed for the context, other variables are not rendered to avoid unexpected behavior.
61
+ modelsSubDir = tryRenderVariable('models-path', modelsSubDir);
62
+ projectName = tryRenderVariable('name', projectName);
63
+ profileName = tryRenderVariable('profile', profileName);
64
+ globalState_1.default.debug(`> dbt target directory: ${targetSubDir}`);
65
+ const targetDir = path.isAbsolute(targetSubDir)
66
+ ? targetSubDir
67
+ : path.join(projectDir, targetSubDir);
68
+ const modelsDir = path.join(projectDir, modelsSubDir);
69
+ return {
70
+ projectName,
71
+ profileName,
72
+ targetDir,
73
+ modelsDir,
74
+ };
75
+ };
76
+ exports.getDbtContext = getDbtContext;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../src/dbt/context.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const fs_1 = require("fs");
5
+ const os = tslib_1.__importStar(require("os"));
6
+ const path = tslib_1.__importStar(require("path"));
7
+ const context_1 = require("./context");
8
+ describe('getDbtContext', () => {
9
+ const { env } = process;
10
+ let tempDir;
11
+ beforeEach(async () => {
12
+ jest.resetModules();
13
+ process.env = { ...env };
14
+ // Create a temporary directory for test files
15
+ tempDir = await fs_1.promises.mkdtemp(path.join(os.tmpdir(), 'dbt-context-test-'));
16
+ });
17
+ afterEach(async () => {
18
+ process.env = env;
19
+ // Clean up temporary directory
20
+ await fs_1.promises.rm(tempDir, { recursive: true, force: true });
21
+ });
22
+ describe('target-path with env_var templating', () => {
23
+ test('should resolve env_var in target-path', async () => {
24
+ process.env.DBT_ENV__TARGET_FOLDER = 'custom-target';
25
+ const dbtProjectContent = `name: test_project
26
+ profile: test_profile
27
+ target-path: "{{ env_var('DBT_ENV__TARGET_FOLDER', 'target') }}"
28
+ models-path: "models"
29
+ `;
30
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
31
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
32
+ expect(context.targetDir).toBe(path.join(tempDir, 'custom-target'));
33
+ expect(context.projectName).toBe('test_project');
34
+ expect(context.profileName).toBe('test_profile');
35
+ });
36
+ test('should use default value when env_var is not set', async () => {
37
+ const dbtProjectContent = `name: test_project
38
+ profile: test_profile
39
+ target-path: "{{ env_var('DBT_ENV__TARGET_FOLDER', 'target') }}"
40
+ models-path: "models"
41
+ `;
42
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
43
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
44
+ expect(context.targetDir).toBe(path.join(tempDir, 'target'));
45
+ });
46
+ test('should work with models-path env_var', async () => {
47
+ process.env.DBT_MODELS_PATH = 'custom-models';
48
+ const dbtProjectContent = `name: test_project
49
+ profile: test_profile
50
+ target-path: "target"
51
+ models-path: "{{ env_var('DBT_MODELS_PATH', 'models') }}"
52
+ `;
53
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
54
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
55
+ expect(context.modelsDir).toBe(path.join(tempDir, 'custom-models'));
56
+ });
57
+ test('should work without any templating', async () => {
58
+ const dbtProjectContent = `name: test_project
59
+ profile: test_profile
60
+ target-path: "target"
61
+ models-path: "models"
62
+ `;
63
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
64
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
65
+ expect(context.targetDir).toBe(path.join(tempDir, 'target'));
66
+ expect(context.modelsDir).toBe(path.join(tempDir, 'models'));
67
+ });
68
+ });
69
+ describe('target-path precedence', () => {
70
+ test('should use DBT_TARGET_PATH env var when set', async () => {
71
+ process.env.DBT_TARGET_PATH = 'env-target';
72
+ const dbtProjectContent = `name: test_project
73
+ profile: test_profile
74
+ target-path: "yml-target"
75
+ models-path: "models"
76
+ `;
77
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
78
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
79
+ expect(context.targetDir).toBe(path.join(tempDir, 'env-target'));
80
+ });
81
+ test('should use CLI option over DBT_TARGET_PATH env var', async () => {
82
+ process.env.DBT_TARGET_PATH = 'env-target';
83
+ const dbtProjectContent = `name: test_project
84
+ profile: test_profile
85
+ target-path: "yml-target"
86
+ models-path: "models"
87
+ `;
88
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
89
+ const context = await (0, context_1.getDbtContext)({
90
+ projectDir: tempDir,
91
+ targetPath: 'cli-target',
92
+ });
93
+ expect(context.targetDir).toBe(path.join(tempDir, 'cli-target'));
94
+ });
95
+ test('should use CLI option over dbt_project.yml', async () => {
96
+ const dbtProjectContent = `name: test_project
97
+ profile: test_profile
98
+ target-path: "yml-target"
99
+ models-path: "models"
100
+ `;
101
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
102
+ const context = await (0, context_1.getDbtContext)({
103
+ projectDir: tempDir,
104
+ targetPath: 'cli-target',
105
+ });
106
+ expect(context.targetDir).toBe(path.join(tempDir, 'cli-target'));
107
+ });
108
+ test('should use dbt_project.yml when no env var or CLI option', async () => {
109
+ const dbtProjectContent = `name: test_project
110
+ profile: test_profile
111
+ target-path: "yml-target"
112
+ models-path: "models"
113
+ `;
114
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
115
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
116
+ expect(context.targetDir).toBe(path.join(tempDir, 'yml-target'));
117
+ });
118
+ test('should use default target when nothing is set', async () => {
119
+ const dbtProjectContent = `name: test_project
120
+ profile: test_profile
121
+ models-path: "models"
122
+ `;
123
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
124
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
125
+ expect(context.targetDir).toBe(path.join(tempDir, './target'));
126
+ });
127
+ test('should use absolute path from DBT_TARGET_PATH without joining', async () => {
128
+ const absoluteTargetPath = '/usr/app/examples/full-jaffle-shop/dbt/test_target';
129
+ process.env.DBT_TARGET_PATH = absoluteTargetPath;
130
+ const dbtProjectContent = `name: test_project
131
+ profile: test_profile
132
+ models-path: "models"
133
+ `;
134
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
135
+ const context = await (0, context_1.getDbtContext)({ projectDir: tempDir });
136
+ expect(context.targetDir).toBe(absoluteTargetPath);
137
+ });
138
+ test('should use absolute path from CLI option without joining', async () => {
139
+ const absoluteTargetPath = '/usr/app/examples/full-jaffle-shop/dbt/test_target';
140
+ const dbtProjectContent = `name: test_project
141
+ profile: test_profile
142
+ models-path: "models"
143
+ `;
144
+ await fs_1.promises.writeFile(path.join(tempDir, 'dbt_project.yml'), dbtProjectContent);
145
+ const context = await (0, context_1.getDbtContext)({
146
+ projectDir: tempDir,
147
+ targetPath: absoluteTargetPath,
148
+ });
149
+ expect(context.targetDir).toBe(absoluteTargetPath);
150
+ });
151
+ });
152
+ });
@@ -0,0 +1,7 @@
1
+ import { DbtManifest } from '@lightdash/common';
2
+ export type LoadManifestArgs = {
3
+ targetDir: string;
4
+ };
5
+ export declare const getManifestPath: (targetDir: string) => Promise<string>;
6
+ export declare const loadManifest: ({ targetDir, }: LoadManifestArgs) => Promise<DbtManifest>;
7
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/dbt/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AAKjE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAC/B,CAAC;AAE1C,eAAO,MAAM,YAAY,GAAU,gBAEhC,gBAAgB,KAAG,OAAO,CAAC,WAAW,CAYxC,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadManifest = exports.getManifestPath = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@lightdash/common");
6
+ const fs_1 = require("fs");
7
+ const path = tslib_1.__importStar(require("path"));
8
+ const globalState_1 = tslib_1.__importDefault(require("../globalState"));
9
+ const getManifestPath = async (targetDir) => path.join(targetDir, 'manifest.json');
10
+ exports.getManifestPath = getManifestPath;
11
+ const loadManifest = async ({ targetDir, }) => {
12
+ const filename = await (0, exports.getManifestPath)(targetDir);
13
+ globalState_1.default.debug(`> Loading dbt manifest from ${filename}`);
14
+ try {
15
+ const manifest = JSON.parse(await fs_1.promises.readFile(filename, { encoding: 'utf-8' }));
16
+ return manifest;
17
+ }
18
+ catch (err) {
19
+ const msg = (0, common_1.getErrorMessage)(err);
20
+ throw new Error(`Could not load manifest from ${filename}:\n ${msg}`);
21
+ }
22
+ };
23
+ exports.loadManifest = loadManifest;
@@ -0,0 +1,43 @@
1
+ import { DbtDoc, DbtModelNode, DbtSchemaEditor, SupportedDbtVersions } from '@lightdash/common';
2
+ import { WarehouseClient, WarehouseTableSchema } from '@lightdash/warehouses';
3
+ type CompiledModel = {
4
+ name: string;
5
+ schema: string;
6
+ database: string;
7
+ originalFilePath: string;
8
+ patchPath: string | null | undefined;
9
+ packageName: string;
10
+ alias?: string;
11
+ };
12
+ type GetDatabaseTableForModelArgs = {
13
+ model: CompiledModel;
14
+ warehouseClient: WarehouseClient;
15
+ preserveColumnCase: boolean;
16
+ };
17
+ export declare const getWarehouseTableForModel: ({ model, warehouseClient, preserveColumnCase, }: GetDatabaseTableForModelArgs) => Promise<WarehouseTableSchema>;
18
+ export declare const isDocBlock: (text?: string | undefined) => boolean;
19
+ type FindAndUpdateModelYamlArgs = {
20
+ model: CompiledModel;
21
+ table: WarehouseTableSchema;
22
+ docs: Record<string, DbtDoc>;
23
+ includeMeta: boolean;
24
+ projectDir: string;
25
+ projectName: string;
26
+ assumeYes: boolean;
27
+ dbtVersion?: SupportedDbtVersions;
28
+ };
29
+ export declare const findAndUpdateModelYaml: ({ model, table, docs, includeMeta, projectDir, projectName, assumeYes, dbtVersion, }: FindAndUpdateModelYamlArgs) => Promise<{
30
+ updatedYml: DbtSchemaEditor;
31
+ outputFilePath: string;
32
+ }>;
33
+ export declare const getCompiledModels: (models: DbtModelNode[], args: {
34
+ select: string[] | undefined;
35
+ exclude: string[] | undefined;
36
+ projectDir: string | undefined;
37
+ profilesDir: string | undefined;
38
+ target: string | undefined;
39
+ profile: string | undefined;
40
+ vars: string | undefined;
41
+ }) => Promise<CompiledModel[]>;
42
+ export {};
43
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/dbt/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,YAAY,EACZ,eAAe,EAIf,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAQ9E,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;CAC/B,CAAC;AACF,eAAO,MAAM,yBAAyB,GAAU,iDAI7C,4BAA4B,KAAG,OAAO,CAAC,oBAAoB,CA6B7D,CAAC;AAyDF,eAAO,MAAM,UAAU,GAAI,OAAM,MAAM,GAAG,SAAc,KAAG,OACX,CAAC;AA8BjD,KAAK,0BAA0B,GAAG;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACrC,CAAC;AACF,eAAO,MAAM,sBAAsB,GAAU,sFAS1C,0BAA0B,KAAG,OAAO,CAAC;IACpC,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CAC1B,CAiKA,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC1B,QAAQ,YAAY,EAAE,EACtB,MAAM;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,KACF,OAAO,CAAC,aAAa,EAAE,CAoEzB,CAAC"}