@hubspot/local-dev-lib 4.0.4 → 5.0.0-beta.1

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 (205) hide show
  1. package/api/appsDev.d.ts +2 -2
  2. package/api/appsDev.js +13 -22
  3. package/api/crm.d.ts +2 -2
  4. package/api/crm.js +9 -16
  5. package/api/customObjects.d.ts +2 -2
  6. package/api/customObjects.js +13 -22
  7. package/api/designManager.d.ts +2 -2
  8. package/api/designManager.js +5 -10
  9. package/api/devSecrets.d.ts +2 -2
  10. package/api/devSecrets.js +9 -16
  11. package/api/developerTestAccounts.d.ts +2 -4
  12. package/api/developerTestAccounts.js +23 -52
  13. package/api/fileManager.d.ts +2 -2
  14. package/api/fileManager.js +14 -24
  15. package/api/fileMapper.d.ts +2 -3
  16. package/api/fileMapper.js +34 -49
  17. package/api/fileTransport.d.ts +1 -1
  18. package/api/fileTransport.js +12 -21
  19. package/api/fireAlarm.d.ts +2 -3
  20. package/api/fireAlarm.js +5 -9
  21. package/api/functions.d.ts +2 -2
  22. package/api/functions.js +11 -19
  23. package/api/github.d.ts +2 -4
  24. package/api/github.js +16 -27
  25. package/api/hubdb.d.ts +2 -2
  26. package/api/hubdb.js +19 -31
  27. package/api/lighthouseScore.d.ts +2 -2
  28. package/api/lighthouseScore.js +7 -13
  29. package/api/localDevAuth.d.ts +3 -6
  30. package/api/localDevAuth.js +10 -37
  31. package/api/marketplaceValidation.d.ts +2 -2
  32. package/api/marketplaceValidation.js +7 -13
  33. package/api/projects.d.ts +6 -8
  34. package/api/projects.js +65 -100
  35. package/api/sandboxHubs.d.ts +2 -5
  36. package/api/sandboxHubs.js +15 -42
  37. package/api/sandboxSync.d.ts +2 -2
  38. package/api/sandboxSync.js +7 -12
  39. package/api/secrets.d.ts +2 -2
  40. package/api/secrets.js +9 -16
  41. package/api/validateHubl.d.ts +2 -2
  42. package/api/validateHubl.js +3 -7
  43. package/config/defaultAccountOverride.d.ts +2 -1
  44. package/config/defaultAccountOverride.js +16 -26
  45. package/config/index.d.ts +4 -4
  46. package/config/index.js +141 -177
  47. package/config/migrate.d.ts +2 -2
  48. package/config/migrate.js +26 -37
  49. package/config/state.d.ts +1 -1
  50. package/config/state.js +17 -45
  51. package/config/utils.d.ts +4 -4
  52. package/config/utils.js +85 -108
  53. package/constants/api.js +3 -6
  54. package/constants/auth.js +9 -12
  55. package/constants/config.js +37 -43
  56. package/constants/endpoints.d.ts +6 -0
  57. package/constants/endpoints.js +6 -0
  58. package/constants/environments.js +1 -4
  59. package/constants/extensions.js +6 -9
  60. package/constants/files.js +5 -8
  61. package/constants/ports.js +3 -6
  62. package/constants/projects.js +2 -5
  63. package/enums/build.d.ts +1 -0
  64. package/enums/build.js +6 -8
  65. package/enums/deploy.js +2 -5
  66. package/enums/project.js +1 -4
  67. package/errors/index.d.ts +4 -5
  68. package/errors/index.js +17 -39
  69. package/errors/isSystemError.d.ts +2 -0
  70. package/errors/isSystemError.js +9 -0
  71. package/http/addQueryParams.d.ts +1 -1
  72. package/http/addQueryParams.js +1 -5
  73. package/http/client.js +14 -42
  74. package/http/getAxiosConfig.d.ts +1 -1
  75. package/http/getAxiosConfig.js +21 -31
  76. package/http/index.d.ts +2 -2
  77. package/http/index.js +39 -46
  78. package/http/unauthed.d.ts +1 -1
  79. package/http/unauthed.js +15 -18
  80. package/lang/en.json +1 -1
  81. package/lib/archive.d.ts +1 -3
  82. package/lib/archive.js +37 -67
  83. package/lib/cms/functions.d.ts +1 -1
  84. package/lib/cms/functions.js +45 -55
  85. package/lib/cms/handleFieldsJS.js +36 -44
  86. package/lib/cms/modules.d.ts +2 -2
  87. package/lib/cms/modules.js +49 -59
  88. package/lib/cms/processFieldsJs.js +17 -32
  89. package/lib/cms/templates.js +17 -26
  90. package/lib/cms/themes.js +10 -18
  91. package/lib/cms/uploadFolder.d.ts +4 -4
  92. package/lib/cms/uploadFolder.js +55 -64
  93. package/lib/cms/validate.d.ts +1 -1
  94. package/lib/cms/validate.js +11 -18
  95. package/lib/cms/watch.d.ts +2 -2
  96. package/lib/cms/watch.js +66 -73
  97. package/lib/crm.d.ts +1 -1
  98. package/lib/crm.js +15 -23
  99. package/lib/customObjects.d.ts +1 -1
  100. package/lib/customObjects.js +15 -25
  101. package/lib/environment.d.ts +1 -1
  102. package/lib/environment.js +5 -11
  103. package/lib/escapeRegExp.js +1 -5
  104. package/lib/fileManager.js +43 -51
  105. package/lib/fileMapper.d.ts +1 -1
  106. package/lib/fileMapper.js +68 -84
  107. package/lib/fs.d.ts +1 -1
  108. package/lib/fs.js +18 -27
  109. package/lib/github.d.ts +1 -3
  110. package/lib/github.js +39 -51
  111. package/lib/gitignore.d.ts +1 -1
  112. package/lib/gitignore.js +16 -24
  113. package/lib/hubdb.d.ts +1 -1
  114. package/lib/hubdb.js +29 -40
  115. package/lib/ignoreRules.js +25 -34
  116. package/lib/isDeepEqual.js +1 -5
  117. package/lib/logger.d.ts +8 -20
  118. package/lib/logger.js +47 -59
  119. package/lib/notify.js +9 -16
  120. package/lib/oauth.d.ts +2 -2
  121. package/lib/oauth.js +12 -17
  122. package/lib/path.d.ts +0 -1
  123. package/lib/path.js +30 -48
  124. package/lib/personalAccessKey.d.ts +2 -4
  125. package/lib/personalAccessKey.js +43 -60
  126. package/lib/portManager.d.ts +2 -2
  127. package/lib/portManager.js +26 -41
  128. package/lib/text.js +2 -7
  129. package/lib/trackUsage.d.ts +0 -2
  130. package/lib/trackUsage.js +23 -29
  131. package/lib/urls.js +4 -9
  132. package/models/FileSystemError.d.ts +1 -1
  133. package/models/FileSystemError.js +12 -16
  134. package/models/HubSpotConfigError.d.ts +1 -1
  135. package/models/HubSpotConfigError.js +8 -12
  136. package/models/HubSpotHttpError.d.ts +1 -1
  137. package/models/HubSpotHttpError.js +22 -26
  138. package/models/OAuth2Manager.d.ts +1 -1
  139. package/models/OAuth2Manager.js +17 -24
  140. package/package.json +20 -16
  141. package/types/Accounts.d.ts +6 -5
  142. package/types/Accounts.js +1 -2
  143. package/types/Activity.d.ts +3 -3
  144. package/types/Activity.js +1 -2
  145. package/types/Api.d.ts +1 -1
  146. package/types/Api.js +1 -2
  147. package/types/Apps.js +1 -2
  148. package/types/Archive.js +1 -2
  149. package/types/Build.d.ts +4 -5
  150. package/types/Build.js +1 -2
  151. package/types/CLIOptions.js +1 -2
  152. package/types/ComponentStructure.d.ts +2 -2
  153. package/types/ComponentStructure.js +1 -2
  154. package/types/Config.d.ts +4 -6
  155. package/types/Config.js +1 -2
  156. package/types/Crm.js +1 -2
  157. package/types/Deploy.d.ts +5 -11
  158. package/types/Deploy.js +1 -2
  159. package/types/DesignManager.js +1 -2
  160. package/types/DevSecrets.js +1 -2
  161. package/types/Error.js +1 -2
  162. package/types/FieldsJS.js +1 -2
  163. package/types/FileManager.js +1 -2
  164. package/types/Files.d.ts +4 -4
  165. package/types/Files.js +1 -2
  166. package/types/FireAlarm.js +1 -2
  167. package/types/Functions.js +1 -2
  168. package/types/Github.d.ts +1 -1
  169. package/types/Github.js +1 -2
  170. package/types/Http.d.ts +0 -4
  171. package/types/Http.js +1 -2
  172. package/types/Hubdb.js +1 -2
  173. package/types/HublValidation.js +1 -2
  174. package/types/Lang.d.ts +1 -1
  175. package/types/Lang.js +1 -2
  176. package/types/Lighthouse.js +1 -2
  177. package/types/MarketplaceValidation.js +1 -2
  178. package/types/Migration.d.ts +2 -2
  179. package/types/Migration.js +1 -4
  180. package/types/Modules.js +1 -2
  181. package/types/PortManager.js +1 -2
  182. package/types/Project.d.ts +3 -21
  183. package/types/Project.js +1 -2
  184. package/types/ProjectComponents.d.ts +24 -0
  185. package/types/ProjectComponents.js +1 -0
  186. package/types/ProjectLog.js +1 -2
  187. package/types/Sandbox.js +2 -5
  188. package/types/Schemas.js +1 -2
  189. package/types/Secrets.js +1 -2
  190. package/types/Utils.js +1 -2
  191. package/types/developerTestAccounts.js +1 -2
  192. package/utils/PortManagerServer.d.ts +1 -2
  193. package/utils/PortManagerServer.js +32 -38
  194. package/utils/cms/fieldsJS.d.ts +1 -1
  195. package/utils/cms/fieldsJS.js +1 -5
  196. package/utils/cms/modules.d.ts +1 -1
  197. package/utils/cms/modules.js +13 -22
  198. package/utils/detectPort.js +12 -19
  199. package/utils/git.js +17 -26
  200. package/utils/lang.d.ts +1 -1
  201. package/utils/lang.js +5 -14
  202. package/utils/personalAccessKey.d.ts +8 -0
  203. package/utils/personalAccessKey.js +51 -0
  204. package/errors/errors_DEPRECATED.d.ts +0 -3
  205. package/errors/errors_DEPRECATED.js +0 -60
@@ -1,74 +1,67 @@
1
- "use strict";
2
1
  // FILE MANAGER - not to be confused with fileMapper.ts
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.downloadFileOrFolder = exports.uploadFolder = void 0;
8
- const fs_extra_1 = __importDefault(require("fs-extra"));
9
- const path_1 = __importDefault(require("path"));
10
- const fileManager_1 = require("../api/fileManager");
11
- const fs_1 = require("./fs");
12
- const logger_1 = require("./logger");
13
- const ignoreRules_1 = require("./ignoreRules");
14
- const http_1 = require("../http");
15
- const escapeRegExp_1 = require("./escapeRegExp");
16
- const path_2 = require("./path");
17
- const lang_1 = require("../utils/lang");
18
- const errors_1 = require("../errors");
19
- const FileSystemError_1 = require("../models/FileSystemError");
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { uploadFile, fetchStat, fetchFiles, fetchFolders, } from '../api/fileManager.js';
5
+ import { walk } from './fs.js';
6
+ import { logger } from './logger.js';
7
+ import { createIgnoreFilter } from './ignoreRules.js';
8
+ import { http } from '../http/index.js';
9
+ import { escapeRegExp } from './escapeRegExp.js';
10
+ import { getCwd, convertToUnixPath, convertToLocalFileSystemPath, } from './path.js';
11
+ import { i18n } from '../utils/lang.js';
12
+ import { isAuthError, isHubSpotHttpError } from '../errors/index.js';
13
+ import { FileSystemError } from '../models/FileSystemError.js';
20
14
  const i18nKey = 'lib.fileManager';
21
- async function uploadFolder(accountId, src, dest) {
22
- const regex = new RegExp(`^${(0, escapeRegExp_1.escapeRegExp)(src)}`);
23
- const files = await (0, fs_1.walk)(src);
24
- const filesToUpload = files.filter((0, ignoreRules_1.createIgnoreFilter)(false));
15
+ export async function uploadFolder(accountId, src, dest) {
16
+ const regex = new RegExp(`^${escapeRegExp(src)}`);
17
+ const files = await walk(src);
18
+ const filesToUpload = files.filter(createIgnoreFilter(false));
25
19
  const len = filesToUpload.length;
26
20
  for (let index = 0; index < len; index++) {
27
21
  const file = filesToUpload[index];
28
22
  const relativePath = file.replace(regex, '');
29
- const destPath = (0, path_2.convertToUnixPath)(path_1.default.join(dest, relativePath));
30
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.uploadStarted`, {
23
+ const destPath = convertToUnixPath(path.join(dest, relativePath));
24
+ logger.debug(i18n(`${i18nKey}.uploadStarted`, {
31
25
  file,
32
26
  destPath,
33
27
  accountId,
34
28
  }));
35
29
  try {
36
- await (0, fileManager_1.uploadFile)(accountId, file, destPath);
37
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.uploadSuccess`, { file, destPath }));
30
+ await uploadFile(accountId, file, destPath);
31
+ logger.log(i18n(`${i18nKey}.uploadSuccess`, { file, destPath }));
38
32
  }
39
33
  catch (err) {
40
- if ((0, errors_1.isHubSpotHttpError)(err)) {
34
+ if (isHubSpotHttpError(err)) {
41
35
  err.updateContext({
42
36
  filepath: file,
43
37
  dest: destPath,
44
38
  });
45
39
  throw err;
46
40
  }
47
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.uploadFailed`, {
41
+ throw new Error(i18n(`${i18nKey}.errors.uploadFailed`, {
48
42
  file,
49
43
  destPath,
50
44
  }));
51
45
  }
52
46
  }
53
47
  }
54
- exports.uploadFolder = uploadFolder;
55
48
  async function skipExisting(overwrite, filepath) {
56
49
  if (overwrite) {
57
50
  return false;
58
51
  }
59
- if (await fs_extra_1.default.pathExists(filepath)) {
60
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.skippedExisting`, { filepath }));
52
+ if (await fs.pathExists(filepath)) {
53
+ logger.log(i18n(`${i18nKey}.skippedExisting`, { filepath }));
61
54
  return true;
62
55
  }
63
56
  return false;
64
57
  }
65
58
  async function downloadFile(accountId, file, dest, overwrite) {
66
59
  const fileName = `${file.name}.${file.extension}`;
67
- const destPath = (0, path_2.convertToLocalFileSystemPath)(path_1.default.join(dest, fileName));
60
+ const destPath = convertToLocalFileSystemPath(path.join(dest, fileName));
68
61
  if (await skipExisting(overwrite || false, destPath)) {
69
62
  return;
70
63
  }
71
- await http_1.http.getOctetStream(accountId, {
64
+ await http.getOctetStream(accountId, {
72
65
  baseURL: file.url,
73
66
  url: '',
74
67
  }, destPath);
@@ -79,7 +72,7 @@ async function fetchAllPagedFiles(accountId, folderId, includeArchived) {
79
72
  let count = 0;
80
73
  let offset = 0;
81
74
  while (totalFiles === null || count < totalFiles) {
82
- const { data: response } = await (0, fileManager_1.fetchFiles)(accountId, folderId, offset, includeArchived);
75
+ const { data: response } = await fetchFiles(accountId, folderId, offset, includeArchived);
83
76
  if (totalFiles === null) {
84
77
  totalFiles = response.total_count;
85
78
  }
@@ -91,26 +84,26 @@ async function fetchAllPagedFiles(accountId, folderId, includeArchived) {
91
84
  }
92
85
  async function fetchFolderContents(accountId, folder, dest, overwrite, includeArchived) {
93
86
  try {
94
- await fs_extra_1.default.ensureDir(dest);
87
+ await fs.ensureDir(dest);
95
88
  }
96
89
  catch (err) {
97
- throw new FileSystemError_1.FileSystemError({ cause: err }, {
90
+ throw new FileSystemError({ cause: err }, {
98
91
  dest,
99
92
  accountId,
100
93
  operation: 'write',
101
94
  });
102
95
  }
103
96
  const files = await fetchAllPagedFiles(accountId, folder.id, includeArchived);
104
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.fetchingFiles`, {
97
+ logger.debug(i18n(`${i18nKey}.fetchingFiles`, {
105
98
  fileCount: files.length,
106
99
  folderName: folder.name || '',
107
100
  }));
108
101
  for (const file of files) {
109
102
  await downloadFile(accountId, file, dest, overwrite);
110
103
  }
111
- const { data: { objects: folders }, } = await (0, fileManager_1.fetchFolders)(accountId, folder.id);
104
+ const { data: { objects: folders }, } = await fetchFolders(accountId, folder.id);
112
105
  for (const folder of folders) {
113
- const nestedFolder = path_1.default.join(dest, folder.name);
106
+ const nestedFolder = path.join(dest, folder.name);
114
107
  await fetchFolderContents(accountId, folder, nestedFolder, overwrite, includeArchived);
115
108
  }
116
109
  }
@@ -118,18 +111,18 @@ async function fetchFolderContents(accountId, folder, dest, overwrite, includeAr
118
111
  async function downloadFolder(accountId, src, dest, folder, overwrite, includeArchived) {
119
112
  let absolutePath;
120
113
  if (folder.name) {
121
- absolutePath = (0, path_2.convertToLocalFileSystemPath)(path_1.default.resolve((0, path_2.getCwd)(), dest, folder.name));
114
+ absolutePath = convertToLocalFileSystemPath(path.resolve(getCwd(), dest, folder.name));
122
115
  }
123
116
  else {
124
- absolutePath = (0, path_2.convertToLocalFileSystemPath)(path_1.default.resolve((0, path_2.getCwd)(), dest));
117
+ absolutePath = convertToLocalFileSystemPath(path.resolve(getCwd(), dest));
125
118
  }
126
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.fetchFolderStarted`, {
119
+ logger.log(i18n(`${i18nKey}.fetchFolderStarted`, {
127
120
  src,
128
121
  path: absolutePath,
129
122
  accountId,
130
123
  }));
131
124
  await fetchFolderContents(accountId, folder, absolutePath, overwrite, includeArchived);
132
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.fetchFolderSuccess`, {
125
+ logger.success(i18n(`${i18nKey}.fetchFolderSuccess`, {
133
126
  src,
134
127
  dest,
135
128
  }));
@@ -137,24 +130,24 @@ async function downloadFolder(accountId, src, dest, folder, overwrite, includeAr
137
130
  // Download a single file and write to local file system.
138
131
  async function downloadSingleFile(accountId, src, dest, file, overwrite, includeArchived) {
139
132
  if (!includeArchived && file.archived) {
140
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.archivedFile`, { src }));
133
+ throw new Error(i18n(`${i18nKey}.errors.archivedFile`, { src }));
141
134
  }
142
135
  if (file.hidden) {
143
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.hiddenFile`, { src }));
136
+ throw new Error(i18n(`${i18nKey}.errors.hiddenFile`, { src }));
144
137
  }
145
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.fetchFileStarted`, {
138
+ logger.log(i18n(`${i18nKey}.fetchFileStarted`, {
146
139
  src,
147
140
  dest,
148
141
  accountId,
149
142
  }));
150
143
  await downloadFile(accountId, file, dest, overwrite);
151
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.fetchFileSuccess`, {
144
+ logger.success(i18n(`${i18nKey}.fetchFileSuccess`, {
152
145
  src,
153
146
  dest,
154
147
  }));
155
148
  }
156
149
  // Lookup path in file manager and initiate download
157
- async function downloadFileOrFolder(accountId, src, dest, overwrite, includeArchived) {
150
+ export async function downloadFileOrFolder(accountId, src, dest, overwrite, includeArchived) {
158
151
  try {
159
152
  if (src == '/') {
160
153
  // Filemanager API treats 'None' as the root
@@ -162,7 +155,7 @@ async function downloadFileOrFolder(accountId, src, dest, overwrite, includeArch
162
155
  await downloadFolder(accountId, src, dest, rootFolder, overwrite, includeArchived);
163
156
  }
164
157
  else {
165
- const { data: { file, folder }, } = await (0, fileManager_1.fetchStat)(accountId, src);
158
+ const { data: { file, folder }, } = await fetchStat(accountId, src);
166
159
  if (file) {
167
160
  await downloadSingleFile(accountId, src, dest, file, overwrite, includeArchived);
168
161
  }
@@ -172,7 +165,7 @@ async function downloadFileOrFolder(accountId, src, dest, overwrite, includeArch
172
165
  }
173
166
  }
174
167
  catch (err) {
175
- if ((0, errors_1.isAuthError)(err)) {
168
+ if (isAuthError(err)) {
176
169
  err.updateContext({
177
170
  request: src,
178
171
  accountId,
@@ -181,4 +174,3 @@ async function downloadFileOrFolder(accountId, src, dest, overwrite, includeArch
181
174
  throw err;
182
175
  }
183
176
  }
184
- exports.downloadFileOrFolder = downloadFileOrFolder;
@@ -1,4 +1,4 @@
1
- import { FileMapperNode, CmsPublishMode, FileMapperOptions, FileMapperInputOptions, PathTypeData, RecursiveFileMapperCallback } from '../types/Files';
1
+ import { FileMapperNode, CmsPublishMode, FileMapperOptions, FileMapperInputOptions, PathTypeData, RecursiveFileMapperCallback } from '../types/Files.js';
2
2
  export declare function isPathToFile(filepath: string): boolean;
3
3
  export declare function isPathToModule(filepath: string): boolean;
4
4
  export declare function isPathToRoot(filepath: string): boolean;
package/lib/fileMapper.js CHANGED
@@ -1,53 +1,43 @@
1
- "use strict";
2
1
  // FILE MAPPER - not to be confused with fileManager.ts
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.downloadFileOrFolder = exports.fetchFolderFromApi = exports.writeUtimes = exports.recurseFolder = exports.getTypeDataFromPath = exports.getFileMapperQueryValues = exports.isPathToHubspot = exports.isPathToRoot = exports.isPathToModule = exports.isPathToFile = void 0;
8
- const fs_extra_1 = __importDefault(require("fs-extra"));
9
- const path_1 = __importDefault(require("path"));
10
- const p_queue_1 = __importDefault(require("p-queue"));
11
- const path_2 = require("./path");
12
- const logger_1 = require("./logger");
13
- const fileMapper_1 = require("../api/fileMapper");
14
- const extensions_1 = require("../constants/extensions");
15
- const files_1 = require("../constants/files");
16
- const errors_1 = require("../errors");
17
- const lang_1 = require("../utils/lang");
18
- const FileSystemError_1 = require("../models/FileSystemError");
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import PQueue from 'p-queue';
5
+ import { getCwd, getExt, convertToLocalFileSystemPath, isAllowedExtension, } from './path.js';
6
+ import { logger } from './logger.js';
7
+ import { fetchFileStream, download, downloadDefault, } from '../api/fileMapper.js';
8
+ import { MODULE_EXTENSION, FUNCTIONS_EXTENSION, JSR_ALLOWED_EXTENSIONS, } from '../constants/extensions.js';
9
+ import { CMS_PUBLISH_MODE } from '../constants/files.js';
10
+ import { isTimeoutError } from '../errors/index.js';
11
+ import { i18n } from '../utils/lang.js';
12
+ import { FileSystemError } from '../models/FileSystemError.js';
19
13
  const i18nKey = 'lib.fileMapper';
20
- const queue = new p_queue_1.default({
14
+ const queue = new PQueue({
21
15
  concurrency: 10,
22
16
  });
23
- function isPathToFile(filepath) {
24
- const ext = (0, path_2.getExt)(filepath);
25
- return !!ext && ext !== extensions_1.MODULE_EXTENSION && ext !== extensions_1.FUNCTIONS_EXTENSION;
17
+ export function isPathToFile(filepath) {
18
+ const ext = getExt(filepath);
19
+ return !!ext && ext !== MODULE_EXTENSION && ext !== FUNCTIONS_EXTENSION;
26
20
  }
27
- exports.isPathToFile = isPathToFile;
28
- function isPathToModule(filepath) {
29
- const ext = (0, path_2.getExt)(filepath);
30
- return ext === extensions_1.MODULE_EXTENSION;
21
+ export function isPathToModule(filepath) {
22
+ const ext = getExt(filepath);
23
+ return ext === MODULE_EXTENSION;
31
24
  }
32
- exports.isPathToModule = isPathToModule;
33
- function isPathToRoot(filepath) {
25
+ export function isPathToRoot(filepath) {
34
26
  if (typeof filepath !== 'string')
35
27
  return false;
36
28
  // Root pattern matches empty strings and: / \
37
29
  return /^(\/|\\)?$/.test(filepath.trim());
38
30
  }
39
- exports.isPathToRoot = isPathToRoot;
40
- function isPathToHubspot(filepath) {
31
+ export function isPathToHubspot(filepath) {
41
32
  if (typeof filepath !== 'string')
42
33
  return false;
43
34
  return /^(\/|\\)?@hubspot/i.test(filepath.trim());
44
35
  }
45
- exports.isPathToHubspot = isPathToHubspot;
46
36
  function useApiBuffer(cmsPublishMode) {
47
- return cmsPublishMode === files_1.CMS_PUBLISH_MODE.draft;
37
+ return cmsPublishMode === CMS_PUBLISH_MODE.draft;
48
38
  }
49
39
  // Determines API param based on publish mode and options
50
- function getFileMapperQueryValues(cmsPublishMode, { staging, assetVersion } = {}) {
40
+ export function getFileMapperQueryValues(cmsPublishMode, { staging, assetVersion } = {}) {
51
41
  return {
52
42
  params: {
53
43
  buffer: useApiBuffer(cmsPublishMode),
@@ -56,7 +46,6 @@ function getFileMapperQueryValues(cmsPublishMode, { staging, assetVersion } = {}
56
46
  },
57
47
  };
58
48
  }
59
- exports.getFileMapperQueryValues = getFileMapperQueryValues;
60
49
  // Determines version number to log based on input.options
61
50
  function getAssetVersionIdentifier(assetVersion, src) {
62
51
  if (typeof assetVersion !== 'undefined' &&
@@ -76,11 +65,11 @@ function validateFileMapperNode(node) {
76
65
  catch (err) {
77
66
  json = node;
78
67
  }
79
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.invalidNode`, {
68
+ throw new Error(i18n(`${i18nKey}.errors.invalidNode`, {
80
69
  json: JSON.stringify(json),
81
70
  }));
82
71
  }
83
- function getTypeDataFromPath(src) {
72
+ export function getTypeDataFromPath(src) {
84
73
  const isModule = isPathToModule(src);
85
74
  const isHubspot = isPathToHubspot(src);
86
75
  const isFile = !isModule && isPathToFile(src);
@@ -94,8 +83,7 @@ function getTypeDataFromPath(src) {
94
83
  isFolder,
95
84
  };
96
85
  }
97
- exports.getTypeDataFromPath = getTypeDataFromPath;
98
- function recurseFolder(node, callback, filepath = '', depth = 0) {
86
+ export function recurseFolder(node, callback, filepath = '', depth = 0) {
99
87
  validateFileMapperNode(node);
100
88
  const isRootFolder = node.folder && depth === 0;
101
89
  if (isRootFolder) {
@@ -104,7 +92,7 @@ function recurseFolder(node, callback, filepath = '', depth = 0) {
104
92
  }
105
93
  }
106
94
  else {
107
- filepath = path_1.default.join(filepath, node.name);
95
+ filepath = path.join(filepath, node.name);
108
96
  }
109
97
  let __break = callback(node, filepath, depth);
110
98
  if (__break === false)
@@ -115,28 +103,26 @@ function recurseFolder(node, callback, filepath = '', depth = 0) {
115
103
  });
116
104
  return depth === 0 ? false : __break;
117
105
  }
118
- exports.recurseFolder = recurseFolder;
119
- async function writeUtimes(accountId, filepath, node) {
106
+ export async function writeUtimes(accountId, filepath, node) {
120
107
  try {
121
108
  const now = new Date();
122
109
  const atime = node.createdAt ? new Date(node.createdAt) : now;
123
110
  const mtime = node.updatedAt ? new Date(node.updatedAt) : now;
124
- await fs_extra_1.default.utimes(filepath, atime, mtime);
111
+ await fs.utimes(filepath, atime, mtime);
125
112
  }
126
113
  catch (err) {
127
- throw new FileSystemError_1.FileSystemError({ cause: err }, {
114
+ throw new FileSystemError({ cause: err }, {
128
115
  filepath,
129
116
  accountId,
130
117
  operation: 'write',
131
118
  });
132
119
  }
133
120
  }
134
- exports.writeUtimes = writeUtimes;
135
121
  async function skipExisting(filepath, overwrite = false) {
136
122
  if (overwrite) {
137
123
  return false;
138
124
  }
139
- if (await fs_extra_1.default.pathExists(filepath)) {
125
+ if (await fs.pathExists(filepath)) {
140
126
  return true;
141
127
  }
142
128
  return false;
@@ -146,21 +132,21 @@ async function fetchAndWriteFileStream(accountId, srcPath, filepath, cmsPublishM
146
132
  return;
147
133
  }
148
134
  if (await skipExisting(filepath, options.overwrite)) {
149
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.skippedExisting`, { filepath }));
135
+ logger.log(i18n(`${i18nKey}.skippedExisting`, { filepath }));
150
136
  return;
151
137
  }
152
- if (!(0, path_2.isAllowedExtension)(srcPath, Array.from(extensions_1.JSR_ALLOWED_EXTENSIONS))) {
153
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.invalidFileType`, { srcPath }));
138
+ if (!isAllowedExtension(srcPath, Array.from(JSR_ALLOWED_EXTENSIONS))) {
139
+ throw new Error(i18n(`${i18nKey}.errors.invalidFileType`, { srcPath }));
154
140
  }
155
- const node = await (0, fileMapper_1.fetchFileStream)(accountId, srcPath, filepath, getFileMapperQueryValues(cmsPublishMode, options));
141
+ const node = await fetchFileStream(accountId, srcPath, filepath, getFileMapperQueryValues(cmsPublishMode, options));
156
142
  await writeUtimes(accountId, filepath, node);
157
143
  }
158
144
  // Writes an individual file or folder (not recursive). If file source is missing, the
159
145
  //file is fetched.
160
146
  async function writeFileMapperNode(accountId, filepath, node, cmsPublishMode, options = {}) {
161
- const localFilepath = (0, path_2.convertToLocalFileSystemPath)(path_1.default.resolve(filepath));
147
+ const localFilepath = convertToLocalFileSystemPath(path.resolve(filepath));
162
148
  if (await skipExisting(localFilepath, options.overwrite)) {
163
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.skippedExisting`, {
149
+ logger.log(i18n(`${i18nKey}.skippedExisting`, {
164
150
  filepath: localFilepath,
165
151
  }));
166
152
  return true;
@@ -175,13 +161,13 @@ async function writeFileMapperNode(accountId, filepath, node, cmsPublishMode, op
175
161
  }
176
162
  }
177
163
  try {
178
- await fs_extra_1.default.ensureDir(localFilepath);
179
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.wroteFolder`, {
164
+ await fs.ensureDir(localFilepath);
165
+ logger.log(i18n(`${i18nKey}.wroteFolder`, {
180
166
  filepath: localFilepath,
181
167
  }));
182
168
  }
183
169
  catch (err) {
184
- throw new FileSystemError_1.FileSystemError({ cause: err }, {
170
+ throw new FileSystemError({ cause: err }, {
185
171
  filepath: localFilepath,
186
172
  accountId,
187
173
  operation: 'write',
@@ -192,31 +178,31 @@ async function writeFileMapperNode(accountId, filepath, node, cmsPublishMode, op
192
178
  async function downloadFile(accountId, src, destPath, cmsPublishMode, options = {}) {
193
179
  const { isFile, isHubspot } = getTypeDataFromPath(src);
194
180
  if (!isFile) {
195
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.invalidRequest`, { src }));
181
+ throw new Error(i18n(`${i18nKey}.errors.invalidRequest`, { src }));
196
182
  }
197
183
  try {
198
- const dest = path_1.default.resolve(destPath);
199
- const cwd = (0, path_2.getCwd)();
184
+ const dest = path.resolve(destPath);
185
+ const cwd = getCwd();
200
186
  let filepath;
201
187
  if (dest === cwd) {
202
188
  // Dest: CWD
203
- filepath = path_1.default.resolve(cwd, path_1.default.basename(src));
189
+ filepath = path.resolve(cwd, path.basename(src));
204
190
  }
205
191
  else if (isPathToFile(dest)) {
206
192
  // Dest: file path
207
- filepath = path_1.default.isAbsolute(dest) ? dest : path_1.default.resolve(cwd, dest);
193
+ filepath = path.isAbsolute(dest) ? dest : path.resolve(cwd, dest);
208
194
  }
209
195
  else {
210
196
  // Dest: folder path
211
- const name = path_1.default.basename(src);
212
- filepath = path_1.default.isAbsolute(dest)
213
- ? path_1.default.resolve(dest, name)
214
- : path_1.default.resolve(cwd, dest, name);
197
+ const name = path.basename(src);
198
+ filepath = path.isAbsolute(dest)
199
+ ? path.resolve(dest, name)
200
+ : path.resolve(cwd, dest, name);
215
201
  }
216
- const localFsPath = (0, path_2.convertToLocalFileSystemPath)(filepath);
202
+ const localFsPath = convertToLocalFileSystemPath(filepath);
217
203
  await fetchAndWriteFileStream(accountId, src, localFsPath, cmsPublishMode, options);
218
204
  await queue.onIdle();
219
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.completedFetch`, {
205
+ logger.success(i18n(`${i18nKey}.completedFetch`, {
220
206
  src,
221
207
  version: getAssetVersionIdentifier(options.assetVersion, src),
222
208
  dest,
@@ -224,39 +210,38 @@ async function downloadFile(accountId, src, destPath, cmsPublishMode, options =
224
210
  }
225
211
  catch (err) {
226
212
  const error = err;
227
- if (isHubspot && (0, errors_1.isTimeoutError)(error)) {
228
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.assetTimeout`), { cause: error });
213
+ if (isHubspot && isTimeoutError(error)) {
214
+ throw new Error(i18n(`${i18nKey}.errors.assetTimeout`), { cause: error });
229
215
  }
230
216
  else {
231
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.failedToFetchFile`, { src, dest: destPath }), { cause: error });
217
+ throw new Error(i18n(`${i18nKey}.errors.failedToFetchFile`, { src, dest: destPath }), { cause: error });
232
218
  }
233
219
  }
234
220
  }
235
- async function fetchFolderFromApi(accountId, src, cmsPublishMode, options = {}) {
221
+ export async function fetchFolderFromApi(accountId, src, cmsPublishMode, options = {}) {
236
222
  const { isRoot, isFolder, isHubspot } = getTypeDataFromPath(src);
237
223
  if (!isFolder) {
238
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.invalidFetchFolderRequest`, {
224
+ throw new Error(i18n(`${i18nKey}.errors.invalidFetchFolderRequest`, {
239
225
  src,
240
226
  }));
241
227
  }
242
228
  const srcPath = isRoot ? '@root' : src;
243
229
  const queryValues = getFileMapperQueryValues(cmsPublishMode, options);
244
230
  const { data: node } = isHubspot
245
- ? await (0, fileMapper_1.downloadDefault)(accountId, srcPath, queryValues)
246
- : await (0, fileMapper_1.download)(accountId, srcPath, queryValues);
247
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.folderFetch`, { src, accountId }));
231
+ ? await downloadDefault(accountId, srcPath, queryValues)
232
+ : await download(accountId, srcPath, queryValues);
233
+ logger.log(i18n(`${i18nKey}.folderFetch`, { src, accountId }));
248
234
  return node;
249
235
  }
250
- exports.fetchFolderFromApi = fetchFolderFromApi;
251
236
  async function downloadFolder(accountId, src, destPath, cmsPublishMode, options = {}) {
252
237
  try {
253
238
  const node = await fetchFolderFromApi(accountId, src, cmsPublishMode, options);
254
239
  if (!node) {
255
240
  return;
256
241
  }
257
- const dest = path_1.default.resolve(destPath);
258
- const rootPath = dest === (0, path_2.getCwd)()
259
- ? (0, path_2.convertToLocalFileSystemPath)(path_1.default.resolve(dest, node.name))
242
+ const dest = path.resolve(destPath);
243
+ const rootPath = dest === getCwd()
244
+ ? convertToLocalFileSystemPath(path.resolve(dest, node.name))
260
245
  : dest;
261
246
  let success = true;
262
247
  recurseFolder(node, (childNode, filepath) => {
@@ -264,7 +249,7 @@ async function downloadFolder(accountId, src, destPath, cmsPublishMode, options
264
249
  const succeeded = await writeFileMapperNode(accountId, filepath || '', childNode, cmsPublishMode, options);
265
250
  if (succeeded === false) {
266
251
  success = false;
267
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.errors.failedToFetchFile`, {
252
+ logger.debug(i18n(`${i18nKey}.errors.failedToFetchFile`, {
268
253
  src: childNode.path,
269
254
  dest: filepath || '',
270
255
  }));
@@ -274,7 +259,7 @@ async function downloadFolder(accountId, src, destPath, cmsPublishMode, options
274
259
  }, rootPath);
275
260
  await queue.onIdle();
276
261
  if (success) {
277
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.completedFolderFetch`, {
262
+ logger.success(i18n(`${i18nKey}.completedFolderFetch`, {
278
263
  src,
279
264
  version: getAssetVersionIdentifier(options.assetVersion, src),
280
265
  dest,
@@ -282,16 +267,16 @@ async function downloadFolder(accountId, src, destPath, cmsPublishMode, options
282
267
  }
283
268
  else {
284
269
  // TODO: Fix this exception. It is triggering the catch block so this error is being rewritten
285
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.incompleteFetch`, { src }));
270
+ throw new Error(i18n(`${i18nKey}.errors.incompleteFetch`, { src }));
286
271
  }
287
272
  }
288
273
  catch (err) {
289
274
  const error = err;
290
- if ((0, errors_1.isTimeoutError)(error)) {
291
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.assetTimeout`), { cause: error });
275
+ if (isTimeoutError(error)) {
276
+ throw new Error(i18n(`${i18nKey}.errors.assetTimeout`), { cause: error });
292
277
  }
293
278
  else {
294
- throw new Error((0, lang_1.i18n)(`${i18nKey}.errors.failedToFetchFolder`, { src, dest: destPath }), { cause: err });
279
+ throw new Error(i18n(`${i18nKey}.errors.failedToFetchFolder`, { src, dest: destPath }), { cause: err });
295
280
  }
296
281
  }
297
282
  }
@@ -302,7 +287,7 @@ async function downloadFolder(accountId, src, destPath, cmsPublishMode, options
302
287
  * @param {FileMapperInputArguments} input
303
288
  * @returns {Promise}
304
289
  */
305
- async function downloadFileOrFolder(accountId, src, dest, cmsPublishMode, options = {}) {
290
+ export async function downloadFileOrFolder(accountId, src, dest, cmsPublishMode, options = {}) {
306
291
  if (!src) {
307
292
  return;
308
293
  }
@@ -314,4 +299,3 @@ async function downloadFileOrFolder(accountId, src, dest, cmsPublishMode, option
314
299
  await downloadFolder(accountId, src, dest, cmsPublishMode, options);
315
300
  }
316
301
  }
317
- exports.downloadFileOrFolder = downloadFileOrFolder;
package/lib/fs.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { FileData } from '../types/Files';
1
+ import { FileData } from '../types/Files.js';
2
2
  export declare function getFileInfoAsync(dir: string, file: string): Promise<FileData>;
3
3
  export declare function flattenAndRemoveSymlinks(filesData: Array<FileData>): Array<string>;
4
4
  export declare function walk(dir: string, ignoreDirs?: string[]): Promise<Array<string>>;