@shoper/cli 0.1.0-8 → 0.2.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 (170) hide show
  1. package/build/cli/auth/cli_auth_errors_factory.js +1 -1
  2. package/build/cli/auth/tokens/cli_auth_tokens_errors_factory.js +1 -1
  3. package/build/cli/auth/tokens/cli_auth_tokens_initalizer.js +1 -1
  4. package/build/cli/class/errors/file_system_errors_factory.js +1 -1
  5. package/build/cli/class/errors/http/http_errors_constants.js +1 -0
  6. package/build/cli/class/errors/{http_errors_factory.js → http/http_errors_factory.js} +3 -2
  7. package/build/cli/commands/auth/cli_auth_add_token_command.js +22 -19
  8. package/build/cli/commands/auth/cli_auth_commands_constants.js +3 -0
  9. package/build/cli/commands/auth/cli_auth_commands_utils.js +46 -0
  10. package/build/cli/commands/auth/cli_auth_list_tokens_command.js +19 -6
  11. package/build/cli/commands/auth/cli_auth_remove_token_command.js +36 -10
  12. package/build/cli/commands/auth/cli_auth_switch_token_command.js +19 -9
  13. package/build/cli/commands/auth/ui/invalid_token_index_error.js +11 -0
  14. package/build/cli/commands/auth/ui/missing_credentials_error.js +9 -0
  15. package/build/cli/commands/auth/ui/missing_token_index_error.js +19 -0
  16. package/build/cli/commands/cli_ui_dump_command.js +11 -0
  17. package/build/cli/commands/cli_update_command.js +13 -4
  18. package/build/cli/commands/commands_constants.js +2 -1
  19. package/build/cli/core/cli_setup.js +5 -1
  20. package/build/cli/features/controls/controls_constants.js +12 -0
  21. package/build/cli/features/controls/controls_dto_mappers.js +55 -0
  22. package/build/cli/features/controls/ui/controls_mappers.js +62 -0
  23. package/build/cli/features/controls/ui/form.js +4 -0
  24. package/build/cli/features/controls/ui/form_constants.js +7 -0
  25. package/build/cli/features/controls/validators/greater_eq_than_validator.js +5 -0
  26. package/build/cli/features/controls/validators/length_validator.js +6 -0
  27. package/build/cli/features/controls/validators/required_validator.js +5 -0
  28. package/build/cli/features/controls/validators/validator_constants.js +13 -0
  29. package/build/cli/features/execution_context/execution_context_service.js +5 -5
  30. package/build/cli/features/http_requester/http_requester_initializer.js +1 -1
  31. package/build/cli/hooks/authorization/ensure_authorization_hook.js +2 -2
  32. package/build/cli/hooks/authorization/ensure_authorization_hook_constants.js +8 -8
  33. package/build/index.js +37 -19
  34. package/build/theme/class/checksums/theme_checksums.js +174 -0
  35. package/build/theme/{features/theme/utils → class}/checksums/theme_checksums_error_factory.js +1 -1
  36. package/build/theme/class/checksums/theme_checksums_utils.js +17 -0
  37. package/build/theme/class/fetch_resources/fetch_resources.js +5 -3
  38. package/build/theme/class/fetch_resources/fetch_resources_errors_factory.js +1 -1
  39. package/build/theme/class/fetch_resources/fetch_resources_utils.js +4 -1
  40. package/build/theme/commands/delete/theme_delete_command.js +111 -0
  41. package/build/theme/commands/delete/ui/theme_deleted_successfully.js +15 -0
  42. package/build/theme/commands/delete/ui/theme_deletion_warning.js +10 -0
  43. package/build/theme/commands/info/theme_info_command.js +94 -0
  44. package/build/theme/commands/info/theme_info_command_utils.js +39 -0
  45. package/build/theme/commands/init/theme_init_command.js +97 -0
  46. package/build/theme/commands/init/ui/theme_created_success.js +15 -0
  47. package/build/theme/commands/list/theme_list_command.js +25 -0
  48. package/build/theme/commands/list/theme_list_command_utils.js +27 -0
  49. package/build/theme/commands/publish/theme_publish_command.js +92 -0
  50. package/build/theme/commands/pull/theme_pull_command.js +194 -0
  51. package/build/theme/commands/pull/ui/theme_pull_id_mismatch_error.js +7 -0
  52. package/build/theme/commands/pull/ui/theme_pull_unpublished_changes_warning.js +10 -0
  53. package/build/theme/commands/pull/ui/theme_pulled_success.js +5 -0
  54. package/build/theme/commands/push/theme_push_command.js +134 -0
  55. package/build/theme/commands/push/ui/theme_push_skip_into.js +7 -0
  56. package/build/theme/commands/push/ui/theme_pushed_success.js +5 -0
  57. package/build/theme/commands/push/ui/theme_unpermitted_actions_error.js +12 -0
  58. package/build/theme/commands/theme_commands_constants.js +4 -1
  59. package/build/theme/commands/theme_show_changes_command.js +1 -0
  60. package/build/theme/commands/theme_verify_command.js +8 -7
  61. package/build/theme/commands/ui/invalid_theme_id.js +11 -0
  62. package/build/theme/commands/ui/missing_theme_files.js +15 -0
  63. package/build/theme/commands/ui/missing_theme_id_error.js +13 -0
  64. package/build/theme/commands/ui/ouside_of_theme_directory_context_error.js +7 -0
  65. package/build/theme/commands/ui/theme_directory_context_error.js +7 -0
  66. package/build/theme/commands/ui/theme_work_url_mismatch.js +17 -0
  67. package/build/theme/commands/ui/unpermitted_command_error.js +18 -0
  68. package/build/theme/features/theme/actions/api/theme_actions_api.js +3 -0
  69. package/build/theme/features/theme/actions/service/theme_actions_service.js +15 -3
  70. package/build/theme/features/theme/actions/service/theme_actions_service_constants.js +1 -0
  71. package/build/theme/features/theme/actions/theme_actions_constants.js +3 -1
  72. package/build/theme/features/theme/actions/theme_actions_initializer.js +1 -1
  73. package/build/theme/features/theme/actions/theme_actions_utils.js +20 -7
  74. package/build/theme/features/theme/delete/api/theme_delete_api.js +13 -0
  75. package/build/theme/features/theme/delete/http/theme_delete_http_api.js +17 -0
  76. package/build/theme/features/theme/delete/service/theme_delete_service.js +31 -0
  77. package/build/theme/features/theme/delete/theme_delete_constants.js +2 -0
  78. package/build/theme/features/theme/delete/theme_delete_initalizer.js +20 -0
  79. package/build/theme/features/theme/fetch/service/theme_fetch_service.js +30 -10
  80. package/build/theme/features/theme/info/theme_info_utils.js +9 -0
  81. package/build/theme/features/theme/init/service/theme_init_service.js +9 -4
  82. package/build/theme/features/theme/merge/api/theme_merge_api.js +0 -12
  83. package/build/theme/features/theme/merge/service/theme_merge_service.js +20 -28
  84. package/build/theme/features/theme/push/service/theme_push_service.js +102 -73
  85. package/build/theme/features/theme/push/theme_push_constants.js +2 -0
  86. package/build/theme/features/theme/push/theme_push_errors_factory.js +7 -4
  87. package/build/theme/features/theme/push/theme_push_initializer.js +0 -3
  88. package/build/theme/features/theme/push/theme_push_utils.js +25 -0
  89. package/build/theme/features/theme/skinstore/api/theme_skinstore_api.js +19 -0
  90. package/build/theme/features/theme/skinstore/http/theme_skinstore_http_api.js +17 -0
  91. package/build/theme/features/theme/skinstore/service/theme_skinstore_service.js +32 -0
  92. package/build/theme/features/theme/skinstore/theme_publish_constants.js +4 -0
  93. package/build/theme/features/theme/skinstore/theme_skinstore_initialzier.js +20 -0
  94. package/build/theme/features/theme/utils/files_structure/theme_files_structure_utils.js +40 -0
  95. package/build/theme/features/theme/utils/hidden_directory/hidden_directory_utils.js +32 -0
  96. package/build/theme/features/theme/utils/meta_data/theme_meta_data_constants.js +1 -0
  97. package/build/theme/features/theme/utils/meta_data/theme_meta_data_error_factory.js +15 -0
  98. package/build/theme/features/theme/utils/meta_data/theme_meta_data_utils.js +39 -0
  99. package/build/theme/features/theme/utils/{directories → resources}/theme_resources_with_id_directory_utils.js +3 -14
  100. package/build/theme/features/theme/utils/theme_images_utils.js +5 -6
  101. package/build/theme/features/themes/list/api/themes_list_api.js +3 -0
  102. package/build/theme/features/themes/list/services/themes_list_service.js +13 -7
  103. package/build/theme/hooks/{ensure_theme_meta_data_untouched.js → ensure_theme_meta_data_untouched_hook.js} +2 -2
  104. package/build/theme/hooks/theme_checksums/ensure_theme_current_checksums_up_to_date_constants.js +1 -1
  105. package/build/theme/hooks/theme_checksums/{ensure_theme_current_checksums_up_to_date.js → ensure_theme_current_checksums_up_to_date_hook.js} +2 -5
  106. package/build/theme/hooks/themes_actions/ensure_themes_actions_hook.js +1 -0
  107. package/build/theme/hooks/themes_actions/ensure_themes_actions_hook_constants.js +1 -0
  108. package/build/theme/index.js +11 -5
  109. package/build/theme/utils/directory_validator/directory_validator_constants.js +2 -6
  110. package/build/theme/utils/directory_validator/directory_validator_utils.js +18 -38
  111. package/build/ui/box.js +2 -0
  112. package/build/ui/color_constants.js +30 -0
  113. package/build/ui/command.js +6 -0
  114. package/build/ui/file_name.js +6 -0
  115. package/build/ui/flag.js +6 -0
  116. package/build/ui/icons/error_icon.js +7 -0
  117. package/build/ui/icons/info_icon.js +7 -0
  118. package/build/ui/icons/success_icon.js +7 -0
  119. package/build/ui/icons/warning_icon.js +7 -0
  120. package/build/ui/link.js +8 -0
  121. package/build/ui/list/list.js +10 -0
  122. package/build/ui/list/list_constants.js +4 -0
  123. package/build/ui/list/list_item.js +11 -0
  124. package/build/ui/message_box/error.js +4 -0
  125. package/build/ui/message_box/info.js +4 -0
  126. package/build/ui/message_box/message_box.js +11 -0
  127. package/build/ui/message_box/message_box_constants.js +24 -0
  128. package/build/ui/message_box/success.js +4 -0
  129. package/build/ui/message_box/warning.js +4 -0
  130. package/build/ui/prompts/prompt_confirmation.js +11 -0
  131. package/build/ui/prompts/prompt_input.js +10 -0
  132. package/build/ui/table/t_cell.js +7 -0
  133. package/build/ui/table/t_header.js +9 -0
  134. package/build/ui/table/t_row.js +5 -0
  135. package/build/ui/table/table.js +18 -0
  136. package/build/ui/text.js +2 -0
  137. package/build/ui/tip.js +9 -0
  138. package/build/ui/ui_dump/ui_component_box.js +9 -0
  139. package/build/ui/ui_dump/ui_dump.js +53 -0
  140. package/build/ui/ui_dump/ui_dump_constants.js +21 -0
  141. package/build/ui/ui_utils.js +11 -0
  142. package/build/ui/validation_errors/validation_error_content.js +19 -0
  143. package/build/ui/validation_errors/validation_errors.js +21 -0
  144. package/build/ui/validation_errors/validation_errors_utils.js +17 -0
  145. package/build/utils/checksums/checksums_utils.js +9 -26
  146. package/build/utils/download_file/download_file_errors_factory.js +1 -1
  147. package/build/utils/download_file/download_file_utils.js +4 -2
  148. package/build/utils/fs/errors/stream_read_error.js +1 -1
  149. package/build/utils/fs/errors/stream_write_error.js +1 -1
  150. package/build/utils/fs/fs_utils.js +17 -3
  151. package/build/utils/path_utils.js +20 -1
  152. package/build/utils/platform_utils.js +3 -0
  153. package/build/utils/zip/create_zip_utils.js +1 -1
  154. package/build/utils/zip/errors/create_zip_error.js +1 -1
  155. package/build/utils/zip/errors/open_zip_error.js +1 -1
  156. package/oclif.config.js +2 -2
  157. package/package.json +15 -8
  158. package/build/theme/commands/theme_init_command.js +0 -53
  159. package/build/theme/commands/theme_list_command.js +0 -16
  160. package/build/theme/commands/theme_pull_command.js +0 -124
  161. package/build/theme/commands/theme_push_command.js +0 -65
  162. package/build/theme/features/theme/directory/theme_directory_utils.js +0 -76
  163. package/build/theme/features/theme/publish/theme_publish_constants.js +0 -2
  164. package/build/theme/features/theme/utils/checksums/theme_checksums_utils.js +0 -94
  165. /package/build/cli/{features → class}/caches/cache_factory.js +0 -0
  166. /package/build/cli/{features → class}/caches/json_cache/json_cache.js +0 -0
  167. /package/build/cli/{features → class}/caches/memory_cache.js +0 -0
  168. /package/build/cli/class/errors/{app_error → app}/app_error.js +0 -0
  169. /package/build/cli/class/errors/{app_error → app}/app_error_constants.js +0 -0
  170. /package/build/theme/features/theme/{publish → skinstore}/theme_publish_utils.js +0 -0
@@ -1,65 +0,0 @@
1
- import { BaseThemeCommand } from '../class/base_theme_command.js';
2
- import { CLI_AUTH_API_NAME } from '../../cli/auth/cli_auth_constants.js';
3
- import { EXECUTION_CONTEXT_API_NAME, EXECUTION_CONTEXTS } from '../../cli/features/execution_context/execution_context_constants.js';
4
- import { THEME_ACTIONS_API_NAME, THEME_ACTIONS_TYPES } from '../features/theme/actions/theme_actions_constants.js';
5
- import { THEME_PUSH_API_NAME } from '../features/theme/push/theme_push_constants.js';
6
- import { ThemeDirectoryUtils } from '../features/theme/directory/theme_directory_utils.js';
7
- import { mapChecksumToTree } from '../../utils/checksums/checksums_utils.js';
8
- import { mapToPermissionsTree } from '../utils/directory_validator/directory_validator_utils.js';
9
- import { ThemeChecksumsUtils } from '../features/theme/utils/checksums/theme_checksums_utils.js';
10
- export class ThemePushCommand extends BaseThemeCommand {
11
- static description = 'Upload theme files to the shop';
12
- async run() {
13
- const cliAuthApi = this.getApi(CLI_AUTH_API_NAME);
14
- const themePushApi = this.getApi(THEME_PUSH_API_NAME);
15
- const themeActionsApi = this.getApi(THEME_ACTIONS_API_NAME);
16
- const executionContextApi = this.getApi(EXECUTION_CONTEXT_API_NAME);
17
- const credentials = cliAuthApi.getCredentials();
18
- if (!credentials)
19
- this.error('Credentials not found. Please authorize first.');
20
- const executionContext = await executionContextApi.getExecutionContext();
21
- if (executionContext.type !== EXECUTION_CONTEXTS.theme)
22
- this.error('You cannot run this command outside theme context.');
23
- const pushAction = themeActionsApi.getThemeAction({
24
- actionType: THEME_ACTIONS_TYPES.push,
25
- themeId: executionContext.themeId,
26
- credentials
27
- });
28
- if (!pushAction)
29
- this.error(`You cannot push theme with id ${executionContext.themeId}`);
30
- const checksums = await ThemeChecksumsUtils.getThemeCurrentChecksums(executionContext.themeRootDir);
31
- const permissions = await ThemeDirectoryUtils.getFilesPermissions(executionContext.themeRootDir);
32
- if (!checksums || !permissions)
33
- this.error('Theme checksums or permissions not found. Please ensure you are in the correct theme directory.');
34
- try {
35
- const validationResult = await ThemeDirectoryUtils.validateThemeDirectoryStructure({
36
- checksums: mapChecksumToTree(checksums),
37
- permissions: mapToPermissionsTree(permissions),
38
- rootDirectory: executionContext.themeRootDir
39
- });
40
- //TODO jak wysyla folder z nazwa posiadajaco \ na windows, wychodzimy
41
- //TODO validacja folderów przed pushem
42
- if (!validationResult.isValid) {
43
- validationResult.unpermittedActions.forEach((unpermittedAction) => {
44
- console.log('Unpermitted action:', unpermittedAction.type, unpermittedAction.path);
45
- });
46
- return;
47
- }
48
- const filesStructure = await ThemeDirectoryUtils.getThemeFilesStructure(executionContext.themeRootDir);
49
- if (!filesStructure)
50
- this.error('Theme files structure not found. Please ensure you are in the correct theme directory.');
51
- await themePushApi.push({
52
- credentials,
53
- checksums,
54
- filesStructure,
55
- pushAction,
56
- executionContext
57
- });
58
- console.log('Theme pushed successfully!');
59
- }
60
- catch (err) {
61
- console.log(err);
62
- this.error(`Failed to push theme: ${err instanceof Error ? err.message : String(err)}`);
63
- }
64
- }
65
- }
@@ -1,76 +0,0 @@
1
- import { closestFile, fileExists, getAllFilesNamesInside, readJSONFile, writeJSONFile } from '../../../../utils/fs/fs_utils.js';
2
- import { SHOPER_THEME_METADATA_DIR } from '../../../constants/directory_contstants.js';
3
- import { join } from '../../../../utils/path_utils.js';
4
- import { validateDirectory } from '../../../utils/directory_validator/directory_validator_utils.js';
5
- import { THEME_CURRENT_CHECKSUMS_FILE_NAME, THEME_CURRENT_CHECKSUMS_VERITY_FILE_NAME, THEME_FILES_STRUCTURE_FILE_NAME, THEME_INITIAL_CHECKSUMS_FILE_NAME, THEME_INITIAL_CHECKSUMS_VERITY_FILE_NAME } from '../theme_constants.js';
6
- import { computeFileChecksum } from '../../../../utils/checksums/checksums_utils.js';
7
- import { ThemeChecksumsUtils } from '../utils/checksums/theme_checksums_utils.js';
8
- /**
9
- * jezli modzisz lokalnie
10
- * robisz pull, ale na remove nic ise nie zmienia
11
- * tow nie pownno byc pytania
12
- */
13
- export class ThemeDirectoryUtils {
14
- static async closestThemeRootDirectory(path) {
15
- return closestFile(SHOPER_THEME_METADATA_DIR, path);
16
- }
17
- static async isThemeRootDirectory(path) {
18
- return fileExists(join(path, SHOPER_THEME_METADATA_DIR));
19
- }
20
- static getThemeMetaDataDirPath(themeDirectory) {
21
- return join(themeDirectory, SHOPER_THEME_METADATA_DIR);
22
- }
23
- static async getThemeDirectoryMetadata(themeDirectory) {
24
- const filePath = join(this.getThemeMetaDataDirPath(themeDirectory), 'metadata.json');
25
- const metadataFileContent = await readJSONFile(filePath);
26
- return {
27
- themeId: String(metadataFileContent.skin_id)
28
- };
29
- }
30
- static async getThemeFilesStructure(themeDirectory) {
31
- return await readJSONFile(join(themeDirectory, SHOPER_THEME_METADATA_DIR, THEME_FILES_STRUCTURE_FILE_NAME));
32
- }
33
- static async writeThemeFilesStructure(themeDirectory, filesStructure) {
34
- const filePath = join(themeDirectory, SHOPER_THEME_METADATA_DIR, THEME_FILES_STRUCTURE_FILE_NAME);
35
- await writeJSONFile(filePath, filesStructure);
36
- }
37
- static async getFilesPermissions(themeDirectory) {
38
- //TODO convert paths sepearator to os
39
- const fileStructure = await ThemeDirectoryUtils.getThemeFilesStructure(themeDirectory);
40
- return Object.entries(fileStructure).reduce((acc, [key, value]) => {
41
- return {
42
- ...acc,
43
- [key]: value.permissions
44
- };
45
- }, {});
46
- }
47
- static async validateThemeDirectoryStructure({ checksums, permissions, rootDirectory }) {
48
- return await validateDirectory({
49
- permissions,
50
- checksums,
51
- rootDirectory
52
- });
53
- }
54
- static async ensureFilesInsideThemeMetaDataDirectoryUntouched(themeDirectory) {
55
- const themeMetadataPath = this.getThemeMetaDataDirPath(themeDirectory);
56
- const checksums = await ThemeChecksumsUtils.getThemeCurrentChecksums(themeDirectory);
57
- if (!checksums)
58
- throw new Error(`Checksums file not found in theme metadata directory: ${themeMetadataPath}`);
59
- if (!(await ThemeChecksumsUtils.verifyThemeChecksums(themeDirectory)))
60
- throw new Error('Theme checksum file is not valid');
61
- const filesNames = (await getAllFilesNamesInside(themeMetadataPath)).filter((fileName) => fileName !== THEME_CURRENT_CHECKSUMS_FILE_NAME &&
62
- fileName !== THEME_CURRENT_CHECKSUMS_VERITY_FILE_NAME &&
63
- fileName !== THEME_INITIAL_CHECKSUMS_FILE_NAME &&
64
- fileName !== THEME_INITIAL_CHECKSUMS_VERITY_FILE_NAME);
65
- for (const fileName of filesNames) {
66
- if (fileName === THEME_CURRENT_CHECKSUMS_FILE_NAME)
67
- continue;
68
- const fileFullPath = join(themeMetadataPath, fileName);
69
- const fileRelativePath = join(SHOPER_THEME_METADATA_DIR, fileName);
70
- const currentChecksum = await computeFileChecksum(fileFullPath);
71
- if (currentChecksum !== checksums[fileRelativePath]) {
72
- throw new Error(`File ${fileName} inside theme metadata directory (${themeMetadataPath}) has been modified. You cannot modify files inside .shoper directory`);
73
- }
74
- }
75
- }
76
- }
@@ -1,2 +0,0 @@
1
- export const THEME_SKINSTORE_LOCATION = 'skinstore';
2
- export const THEME_SKINSTORE_SETTINGS_FILE_NAME = 'settings.json';
@@ -1,94 +0,0 @@
1
- import { join } from '../../../../../utils/path_utils.js';
2
- import { THEME_CURRENT_CHECKSUMS_FILE_NAME, THEME_CURRENT_CHECKSUMS_VERITY_FILE_NAME, THEME_INITIAL_CHECKSUMS_FILE_NAME, THEME_INITIAL_CHECKSUMS_VERITY_FILE_NAME } from '../../theme_constants.js';
3
- import { createWriteStream } from 'fs';
4
- import { copyFile, readJSONFile, removeFile } from '../../../../../utils/fs/fs_utils.js';
5
- import { ThemeChecksumsErrorFactory } from './theme_checksums_error_factory.js';
6
- import { ThemeDirectoryUtils } from '../../directory/theme_directory_utils.js';
7
- import { computeFileChecksum } from '../../../../../utils/checksums/checksums_utils.js';
8
- import { JSON_FILE_INDENT } from '../../../../../cli/cli_constants.js';
9
- export class ThemeChecksumsUtils {
10
- static getCurrentThemeChecksumsFilePath(themeDir) {
11
- return join(ThemeDirectoryUtils.getThemeMetaDataDirPath(themeDir), THEME_CURRENT_CHECKSUMS_FILE_NAME);
12
- }
13
- static getInitialThemeChecksumsFilePath(themeDir) {
14
- return join(ThemeDirectoryUtils.getThemeMetaDataDirPath(themeDir), THEME_INITIAL_CHECKSUMS_FILE_NAME);
15
- }
16
- static getCurrentThemeChecksumsVerificationFilePath(themeDir) {
17
- return join(ThemeDirectoryUtils.getThemeMetaDataDirPath(themeDir), THEME_CURRENT_CHECKSUMS_VERITY_FILE_NAME);
18
- }
19
- static getInitialThemeChecksumsVerificationFilePath(themeDir) {
20
- return join(ThemeDirectoryUtils.getThemeMetaDataDirPath(themeDir), THEME_INITIAL_CHECKSUMS_VERITY_FILE_NAME);
21
- }
22
- static async createThemeChecksumsFiles(themeDir, checksums) {
23
- return new Promise((resolve, reject) => {
24
- const currentChecksumFilePath = this.getCurrentThemeChecksumsFilePath(themeDir);
25
- const initialChecksumFilePath = this.getInitialThemeChecksumsFilePath(themeDir);
26
- const checksumStream = createWriteStream(initialChecksumFilePath);
27
- checksumStream.write(JSON.stringify(checksums, null, JSON_FILE_INDENT));
28
- checksumStream.end();
29
- checksumStream
30
- .on('finish', async () => {
31
- const initialChecksumVerifyFilePath = this.getInitialThemeChecksumsVerificationFilePath(themeDir);
32
- const currentChecksumVerifyFilePath = this.getCurrentThemeChecksumsVerificationFilePath(themeDir);
33
- await this.createThemeChecksumVerifyFile(initialChecksumFilePath, initialChecksumVerifyFilePath);
34
- await copyFile(initialChecksumFilePath, currentChecksumFilePath);
35
- await copyFile(initialChecksumVerifyFilePath, currentChecksumVerifyFilePath);
36
- resolve();
37
- })
38
- .on('error', async (err) => {
39
- await removeFile(initialChecksumFilePath, { force: true });
40
- reject(ThemeChecksumsErrorFactory.createThemeChecksumError(err.stack));
41
- });
42
- });
43
- }
44
- static async createThemeCurrentChecksumsFile(themeDir, checksums) {
45
- return new Promise((resolve, reject) => {
46
- const currentChecksumFilePath = this.getCurrentThemeChecksumsFilePath(themeDir);
47
- const checksumStream = createWriteStream(currentChecksumFilePath);
48
- checksumStream.write(JSON.stringify(checksums, null, JSON_FILE_INDENT));
49
- checksumStream.end();
50
- checksumStream
51
- .on('finish', async () => {
52
- const currentChecksumVerifyFilePath = this.getCurrentThemeChecksumsVerificationFilePath(themeDir);
53
- await this.createThemeChecksumVerifyFile(currentChecksumFilePath, currentChecksumVerifyFilePath);
54
- resolve();
55
- })
56
- .on('error', async (err) => {
57
- await removeFile(currentChecksumFilePath, { force: true });
58
- reject(ThemeChecksumsErrorFactory.createThemeChecksumError(err.stack));
59
- });
60
- });
61
- }
62
- static async createThemeChecksumVerifyFile(checksumFilePath, checksumVerifyFullPath) {
63
- const checksumVerifyStream = createWriteStream(checksumVerifyFullPath);
64
- const checksumVerify = await computeFileChecksum(checksumFilePath);
65
- checksumVerifyStream
66
- .on('error', async (err) => {
67
- await removeFile(checksumFilePath, { force: true });
68
- throw ThemeChecksumsErrorFactory.createThemeChecksumError(err.stack);
69
- })
70
- .write(JSON.stringify(checksumVerify));
71
- checksumVerifyStream.end();
72
- }
73
- static async getThemeCurrentChecksums(themeDir) {
74
- const checksumFilePath = this.getCurrentThemeChecksumsFilePath(themeDir);
75
- return await readJSONFile(checksumFilePath);
76
- }
77
- static async getThemeInitialChecksums(themeDir) {
78
- const checksumFilePath = this.getInitialThemeChecksumsFilePath(themeDir);
79
- return await readJSONFile(checksumFilePath);
80
- }
81
- static async verifyThemeChecksums(themeDir) {
82
- const initialChecksumFilePath = this.getInitialThemeChecksumsFilePath(themeDir);
83
- const initialChecksumVerifyFilePath = this.getInitialThemeChecksumsVerificationFilePath(themeDir);
84
- const initialChecksum = await computeFileChecksum(initialChecksumFilePath);
85
- const initialChecksumVerify = await readJSONFile(initialChecksumVerifyFilePath);
86
- return initialChecksum === initialChecksumVerify;
87
- }
88
- static async getThemeCurrentChecksumsVerification(themeDir) {
89
- return await readJSONFile(this.getCurrentThemeChecksumsVerificationFilePath(themeDir));
90
- }
91
- static async getInitialChecksumsVerification(themeDir) {
92
- return await readJSONFile(this.getInitialThemeChecksumsVerificationFilePath(themeDir));
93
- }
94
- }