directus-template-cli 0.7.0-beta.3 → 0.7.0-beta.5

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 (93) hide show
  1. package/bin/dev +2 -3
  2. package/bin/dev.js +3 -0
  3. package/bin/run +0 -1
  4. package/bin/run.js +5 -0
  5. package/dist/commands/apply.d.ts +17 -17
  6. package/dist/commands/apply.js +160 -173
  7. package/dist/commands/extract.d.ts +13 -7
  8. package/dist/commands/extract.js +89 -73
  9. package/dist/commands/init.d.ts +7 -7
  10. package/dist/commands/init.js +78 -80
  11. package/dist/flags/common.d.ts +7 -7
  12. package/dist/flags/common.js +8 -11
  13. package/dist/index.js +1 -5
  14. package/dist/lib/constants.js +6 -9
  15. package/dist/lib/extract/extract-access.js +11 -15
  16. package/dist/lib/extract/extract-assets.js +20 -25
  17. package/dist/lib/extract/extract-collections.js +12 -16
  18. package/dist/lib/extract/extract-content.js +14 -19
  19. package/dist/lib/extract/extract-dashboards.js +22 -28
  20. package/dist/lib/extract/extract-extensions.js +12 -16
  21. package/dist/lib/extract/extract-fields.js +13 -17
  22. package/dist/lib/extract/extract-files.js +15 -19
  23. package/dist/lib/extract/extract-flows.js +22 -28
  24. package/dist/lib/extract/extract-folders.js +15 -19
  25. package/dist/lib/extract/extract-permissions.js +12 -16
  26. package/dist/lib/extract/extract-policies.js +12 -16
  27. package/dist/lib/extract/extract-presets.js +12 -16
  28. package/dist/lib/extract/extract-relations.js +14 -18
  29. package/dist/lib/extract/extract-roles.js +15 -19
  30. package/dist/lib/extract/extract-schema.js +17 -21
  31. package/dist/lib/extract/extract-settings.js +12 -16
  32. package/dist/lib/extract/extract-translations.js +12 -16
  33. package/dist/lib/extract/extract-users.js +15 -19
  34. package/dist/lib/extract/index.js +47 -51
  35. package/dist/lib/init/config.d.ts +1 -1
  36. package/dist/lib/init/config.js +2 -5
  37. package/dist/lib/init/index.js +54 -59
  38. package/dist/lib/init/types.js +1 -2
  39. package/dist/lib/init.d.ts +1 -0
  40. package/dist/lib/init.js +2 -0
  41. package/dist/lib/load/apply-flags.js +17 -23
  42. package/dist/lib/load/index.js +40 -44
  43. package/dist/lib/load/load-access.js +15 -20
  44. package/dist/lib/load/load-collections.js +27 -32
  45. package/dist/lib/load/load-dashboards.js +19 -25
  46. package/dist/lib/load/load-data.js +43 -49
  47. package/dist/lib/load/load-extensions.js +30 -38
  48. package/dist/lib/load/load-files.js +20 -24
  49. package/dist/lib/load/load-flows.js +23 -29
  50. package/dist/lib/load/load-folders.js +16 -20
  51. package/dist/lib/load/load-permissions.js +13 -17
  52. package/dist/lib/load/load-policies.js +14 -18
  53. package/dist/lib/load/load-presets.js +14 -18
  54. package/dist/lib/load/load-relations.d.ts +2 -0
  55. package/dist/lib/load/load-relations.js +16 -18
  56. package/dist/lib/load/load-roles.js +19 -23
  57. package/dist/lib/load/load-settings.js +18 -21
  58. package/dist/lib/load/load-translations.js +14 -18
  59. package/dist/lib/load/load-users.js +21 -25
  60. package/dist/lib/load/update-required-fields.js +13 -17
  61. package/dist/lib/sdk.d.ts +1 -2
  62. package/dist/lib/sdk.js +27 -27
  63. package/dist/lib/types/extension.js +1 -2
  64. package/dist/lib/utils/animated-bunny.js +9 -14
  65. package/dist/lib/utils/auth.d.ts +2 -2
  66. package/dist/lib/utils/auth.js +32 -33
  67. package/dist/lib/utils/catch-error.js +8 -11
  68. package/dist/lib/utils/check-template.js +4 -8
  69. package/dist/lib/utils/chunk-array.js +1 -5
  70. package/dist/lib/utils/ensure-dir.js +7 -12
  71. package/dist/lib/utils/filter-fields.js +1 -4
  72. package/dist/lib/utils/get-role-ids.d.ts +1 -1
  73. package/dist/lib/utils/get-role-ids.js +7 -12
  74. package/dist/lib/utils/get-template.js +33 -37
  75. package/dist/lib/utils/logger.js +11 -13
  76. package/dist/lib/utils/open-url.js +5 -8
  77. package/dist/lib/utils/parse-github-url.js +4 -9
  78. package/dist/lib/utils/path.js +6 -10
  79. package/dist/lib/utils/protected-domains.js +1 -4
  80. package/dist/lib/utils/read-file.js +8 -12
  81. package/dist/lib/utils/read-templates.js +9 -15
  82. package/dist/lib/utils/system-fields.js +19 -22
  83. package/dist/lib/utils/template-defaults.d.ts +1 -1
  84. package/dist/lib/utils/template-defaults.js +5 -14
  85. package/dist/lib/utils/transform-github-url.js +1 -5
  86. package/dist/lib/utils/validate-url.js +3 -6
  87. package/dist/lib/utils/wait.js +1 -5
  88. package/dist/lib/utils/write-to-file.js +8 -11
  89. package/dist/services/docker.js +19 -24
  90. package/dist/services/github.d.ts +1 -1
  91. package/dist/services/github.js +8 -12
  92. package/oclif.manifest.json +4 -4
  93. package/package.json +36 -32
@@ -1,22 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const constants_1 = require("../constants");
7
- const sdk_2 = require("../sdk");
8
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
9
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
1
+ import { readFields, readRelations } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import { DIRECTUS_PINK } from '../constants.js';
4
+ import { api } from '../sdk.js';
5
+ import catchError from '../utils/catch-error.js';
6
+ import writeToFile from '../utils/write-to-file.js';
10
7
  /**
11
8
  * Extract relations from the Directus instance
12
9
  */
13
- async function extractRelations(dir) {
14
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting relations'));
10
+ export default async function extractRelations(dir) {
11
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting relations'));
15
12
  try {
16
- const response = await sdk_2.api.client.request((0, sdk_1.readRelations)());
13
+ const response = await api.client.request(readRelations());
17
14
  // Fetching fields to filter out system fields while retaining custom fields on system collections
18
- const fields = await sdk_2.api.client.request((0, sdk_1.readFields)());
19
- const customFields = fields.filter((i) => { var _a; return !((_a = i.meta) === null || _a === void 0 ? void 0 : _a.system); });
15
+ const fields = await api.client.request(readFields());
16
+ const customFields = fields.filter((i) => !i.meta?.system);
20
17
  const relations = response
21
18
  // Filter out relations where the collection starts with 'directus_' && the field is not within the customFields array
22
19
  .filter((i) => !i.collection.startsWith('directus_', 0)
@@ -25,11 +22,10 @@ async function extractRelations(dir) {
25
22
  delete i.meta.id;
26
23
  return i;
27
24
  });
28
- await (0, write_to_file_1.default)('relations', relations, dir);
25
+ await writeToFile('relations', relations, dir);
29
26
  }
30
27
  catch (error) {
31
- (0, catch_error_1.default)(error);
28
+ catchError(error);
32
29
  }
33
- core_1.ux.action.stop();
30
+ ux.action.stop();
34
31
  }
35
- exports.default = extractRelations;
@@ -1,27 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const constants_1 = require("../constants");
7
- const sdk_2 = require("../sdk");
8
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
9
- const filter_fields_1 = tslib_1.__importDefault(require("../utils/filter-fields"));
10
- const system_fields_1 = require("../utils/system-fields");
11
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
1
+ import { readRoles } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import { DIRECTUS_PINK } from '../constants.js';
4
+ import { api } from '../sdk.js';
5
+ import catchError from '../utils/catch-error.js';
6
+ import filterFields from '../utils/filter-fields.js';
7
+ import { directusRoleFields } from '../utils/system-fields.js';
8
+ import writeToFile from '../utils/write-to-file.js';
12
9
  /**
13
10
  * Extract roles from the API
14
11
  */
15
- async function extractRoles(dir) {
16
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting roles'));
12
+ export default async function extractRoles(dir) {
13
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting roles'));
17
14
  try {
18
- const response = await sdk_2.api.client.request((0, sdk_1.readRoles)({ limit: -1 }));
19
- const roles = (0, filter_fields_1.default)(response, system_fields_1.directusRoleFields);
20
- await (0, write_to_file_1.default)('roles', roles, dir);
15
+ const response = await api.client.request(readRoles({ limit: -1 }));
16
+ const roles = filterFields(response, directusRoleFields);
17
+ await writeToFile('roles', roles, dir);
21
18
  }
22
19
  catch (error) {
23
- (0, catch_error_1.default)(error);
20
+ catchError(error);
24
21
  }
25
- core_1.ux.action.stop();
22
+ ux.action.stop();
26
23
  }
27
- exports.default = extractRoles;
@@ -1,27 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
7
- const node_path_1 = tslib_1.__importDefault(require("node:path"));
8
- const constants_1 = require("../constants");
9
- const sdk_2 = require("../sdk");
10
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
11
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
12
- async function extractSchema(dir) {
13
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting schema snapshot'));
1
+ import { schemaSnapshot } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import fs from 'node:fs';
4
+ import path from 'pathe';
5
+ import { DIRECTUS_PINK } from '../constants.js';
6
+ import { api } from '../sdk.js';
7
+ import catchError from '../utils/catch-error.js';
8
+ import writeToFile from '../utils/write-to-file.js';
9
+ export default async function extractSchema(dir) {
10
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting schema snapshot'));
14
11
  try {
15
- const schemaDir = node_path_1.default.join(dir, 'schema');
16
- if (!node_fs_1.default.existsSync(schemaDir)) {
17
- node_fs_1.default.mkdirSync(schemaDir, { recursive: true });
12
+ const schemaDir = path.join(dir, 'schema');
13
+ if (!fs.existsSync(schemaDir)) {
14
+ fs.mkdirSync(schemaDir, { recursive: true });
18
15
  }
19
- const schema = await sdk_2.api.client.request((0, sdk_1.schemaSnapshot)());
20
- await (0, write_to_file_1.default)('schema/snapshot', schema, dir);
16
+ const schema = await api.client.request(schemaSnapshot());
17
+ await writeToFile('schema/snapshot', schema, dir);
21
18
  }
22
19
  catch (error) {
23
- (0, catch_error_1.default)(error);
20
+ catchError(error);
24
21
  }
25
- core_1.ux.action.stop();
22
+ ux.action.stop();
26
23
  }
27
- exports.default = extractSchema;
@@ -1,24 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const constants_1 = require("../constants");
7
- const sdk_2 = require("../sdk");
8
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
9
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
1
+ import { readSettings } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import { DIRECTUS_PINK } from '../constants.js';
4
+ import { api } from '../sdk.js';
5
+ import catchError from '../utils/catch-error.js';
6
+ import writeToFile from '../utils/write-to-file.js';
10
7
  /**
11
8
  * Extract settings from the Directus instance
12
9
  */
13
- async function extractSettings(dir) {
14
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting settings'));
10
+ export default async function extractSettings(dir) {
11
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting settings'));
15
12
  try {
16
- const settings = await sdk_2.api.client.request((0, sdk_1.readSettings)({ limit: -1 }));
17
- await (0, write_to_file_1.default)('settings', settings, dir);
13
+ const settings = await api.client.request(readSettings({ limit: -1 }));
14
+ await writeToFile('settings', settings, dir);
18
15
  }
19
16
  catch (error) {
20
- (0, catch_error_1.default)(error);
17
+ catchError(error);
21
18
  }
22
- core_1.ux.action.stop();
19
+ ux.action.stop();
23
20
  }
24
- exports.default = extractSettings;
@@ -1,24 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const constants_1 = require("../constants");
7
- const sdk_2 = require("../sdk");
8
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
9
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
1
+ import { readTranslations } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import { DIRECTUS_PINK } from '../constants.js';
4
+ import { api } from '../sdk.js';
5
+ import catchError from '../utils/catch-error.js';
6
+ import writeToFile from '../utils/write-to-file.js';
10
7
  /**
11
8
  * Extract translations from the Directus instance
12
9
  */
13
- async function extractTranslations(dir) {
14
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting translations'));
10
+ export default async function extractTranslations(dir) {
11
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting translations'));
15
12
  try {
16
- const translations = await sdk_2.api.client.request((0, sdk_1.readTranslations)({ limit: -1 }));
17
- await (0, write_to_file_1.default)('translations', translations, dir);
13
+ const translations = await api.client.request(readTranslations({ limit: -1 }));
14
+ await writeToFile('translations', translations, dir);
18
15
  }
19
16
  catch (error) {
20
- (0, catch_error_1.default)(error);
17
+ catchError(error);
21
18
  }
22
- core_1.ux.action.stop();
19
+ ux.action.stop();
23
20
  }
24
- exports.default = extractTranslations;
@@ -1,27 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const sdk_1 = require("@directus/sdk");
5
- const core_1 = require("@oclif/core");
6
- const constants_1 = require("../constants");
7
- const sdk_2 = require("../sdk");
8
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
9
- const filter_fields_1 = tslib_1.__importDefault(require("../utils/filter-fields"));
10
- const system_fields_1 = require("../utils/system-fields");
11
- const write_to_file_1 = tslib_1.__importDefault(require("../utils/write-to-file"));
1
+ import { readUsers } from '@directus/sdk';
2
+ import { ux } from '@oclif/core';
3
+ import { DIRECTUS_PINK } from '../constants.js';
4
+ import { api } from '../sdk.js';
5
+ import catchError from '../utils/catch-error.js';
6
+ import filterFields from '../utils/filter-fields.js';
7
+ import { directusUserFields } from '../utils/system-fields.js';
8
+ import writeToFile from '../utils/write-to-file.js';
12
9
  /**
13
10
  * Extract users from the Directus instance
14
11
  */
15
- async function extractUsers(dir) {
16
- core_1.ux.action.start(core_1.ux.colorize(constants_1.DIRECTUS_PINK, 'Extracting users'));
12
+ export default async function extractUsers(dir) {
13
+ ux.action.start(ux.colorize(DIRECTUS_PINK, 'Extracting users'));
17
14
  try {
18
- const response = await sdk_2.api.client.request((0, sdk_1.readUsers)({ limit: -1 }));
19
- const users = (0, filter_fields_1.default)(response, system_fields_1.directusUserFields);
20
- await (0, write_to_file_1.default)('users', users, dir);
15
+ const response = await api.client.request(readUsers({ limit: -1 }));
16
+ const users = filterFields(response, directusUserFields);
17
+ await writeToFile('users', users, dir);
21
18
  }
22
19
  catch (error) {
23
- (0, catch_error_1.default)(error);
20
+ catchError(error);
24
21
  }
25
- core_1.ux.action.stop();
22
+ ux.action.stop();
26
23
  }
27
- exports.default = extractUsers;
@@ -1,56 +1,52 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const core_1 = require("@oclif/core");
5
- const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
6
- const extract_access_1 = tslib_1.__importDefault(require("./extract-access"));
7
- const extract_assets_1 = require("./extract-assets");
8
- const extract_collections_1 = tslib_1.__importDefault(require("./extract-collections"));
9
- const extract_content_1 = require("./extract-content");
10
- const extract_dashboards_1 = require("./extract-dashboards");
11
- const extract_extensions_1 = tslib_1.__importDefault(require("./extract-extensions"));
12
- const extract_fields_1 = tslib_1.__importDefault(require("./extract-fields"));
13
- const extract_files_1 = tslib_1.__importDefault(require("./extract-files"));
14
- const extract_flows_1 = require("./extract-flows");
15
- const extract_folders_1 = tslib_1.__importDefault(require("./extract-folders"));
16
- const extract_permissions_1 = tslib_1.__importDefault(require("./extract-permissions"));
17
- const extract_policies_1 = tslib_1.__importDefault(require("./extract-policies"));
18
- const extract_presets_1 = tslib_1.__importDefault(require("./extract-presets"));
19
- const extract_relations_1 = tslib_1.__importDefault(require("./extract-relations"));
20
- const extract_roles_1 = tslib_1.__importDefault(require("./extract-roles"));
21
- const extract_schema_1 = tslib_1.__importDefault(require("./extract-schema"));
22
- const extract_settings_1 = tslib_1.__importDefault(require("./extract-settings"));
23
- const extract_translations_1 = tslib_1.__importDefault(require("./extract-translations"));
24
- const extract_users_1 = tslib_1.__importDefault(require("./extract-users"));
25
- async function extract(dir) {
1
+ import { ux } from '@oclif/core';
2
+ import fs from 'node:fs';
3
+ import extractAccess from './extract-access.js';
4
+ import { downloadAllFiles } from './extract-assets.js';
5
+ import extractCollections from './extract-collections.js';
6
+ import { extractContent } from './extract-content.js';
7
+ import { extractDashboards, extractPanels } from './extract-dashboards.js';
8
+ import extractExtensions from './extract-extensions.js';
9
+ import extractFields from './extract-fields.js';
10
+ import extractFiles from './extract-files.js';
11
+ import { extractFlows, extractOperations } from './extract-flows.js';
12
+ import extractFolders from './extract-folders.js';
13
+ import extractPermissions from './extract-permissions.js';
14
+ import extractPolicies from './extract-policies.js';
15
+ import extractPresets from './extract-presets.js';
16
+ import extractRelations from './extract-relations.js';
17
+ import extractRoles from './extract-roles.js';
18
+ import extractSchema from './extract-schema.js';
19
+ import extractSettings from './extract-settings.js';
20
+ import extractTranslations from './extract-translations.js';
21
+ import extractUsers from './extract-users.js';
22
+ export default async function extract(dir) {
26
23
  // Get the destination directory for the actual files
27
- const destination = dir + '/src';
24
+ const destination = `${dir}/src`;
28
25
  // Check if directory exists, if not, then create it.
29
- if (!node_fs_1.default.existsSync(destination)) {
30
- core_1.ux.log(`Attempting to create directory at: ${destination}`);
31
- node_fs_1.default.mkdirSync(destination, { recursive: true });
26
+ if (!fs.existsSync(destination)) {
27
+ ux.stdout(`Attempting to create directory at: ${destination}`);
28
+ fs.mkdirSync(destination, { recursive: true });
32
29
  }
33
- await (0, extract_schema_1.default)(destination);
34
- await (0, extract_collections_1.default)(destination);
35
- await (0, extract_fields_1.default)(destination);
36
- await (0, extract_relations_1.default)(destination);
37
- await (0, extract_folders_1.default)(destination);
38
- await (0, extract_files_1.default)(destination);
39
- await (0, extract_users_1.default)(destination);
40
- await (0, extract_roles_1.default)(destination);
41
- await (0, extract_permissions_1.default)(destination);
42
- await (0, extract_policies_1.default)(destination);
43
- await (0, extract_access_1.default)(destination);
44
- await (0, extract_presets_1.default)(destination);
45
- await (0, extract_translations_1.default)(destination);
46
- await (0, extract_flows_1.extractFlows)(destination);
47
- await (0, extract_flows_1.extractOperations)(destination);
48
- await (0, extract_dashboards_1.extractDashboards)(destination);
49
- await (0, extract_dashboards_1.extractPanels)(destination);
50
- await (0, extract_settings_1.default)(destination);
51
- await (0, extract_extensions_1.default)(destination);
52
- await (0, extract_content_1.extractContent)(destination);
53
- await (0, extract_assets_1.downloadAllFiles)(destination);
30
+ await extractSchema(destination);
31
+ await extractCollections(destination);
32
+ await extractFields(destination);
33
+ await extractRelations(destination);
34
+ await extractFolders(destination);
35
+ await extractFiles(destination);
36
+ await extractUsers(destination);
37
+ await extractRoles(destination);
38
+ await extractPermissions(destination);
39
+ await extractPolicies(destination);
40
+ await extractAccess(destination);
41
+ await extractPresets(destination);
42
+ await extractTranslations(destination);
43
+ await extractFlows(destination);
44
+ await extractOperations(destination);
45
+ await extractDashboards(destination);
46
+ await extractPanels(destination);
47
+ await extractSettings(destination);
48
+ await extractExtensions(destination);
49
+ await extractContent(destination);
50
+ await downloadAllFiles(destination);
54
51
  return {};
55
52
  }
56
- exports.default = extract;
@@ -1,3 +1,3 @@
1
- import type { DirectusConfig, DockerConfig } from './types';
1
+ import type { DirectusConfig, DockerConfig } from './types.js';
2
2
  export declare const DIRECTUS_CONFIG: DirectusConfig;
3
3
  export declare const DOCKER_CONFIG: DockerConfig;
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DOCKER_CONFIG = exports.DIRECTUS_CONFIG = void 0;
4
- exports.DIRECTUS_CONFIG = {
1
+ export const DIRECTUS_CONFIG = {
5
2
  adminEmail: 'admin@example.com',
6
3
  adminPassword: 'd1r3ctu5',
7
4
  port: 8055,
8
5
  url: 'http://localhost',
9
6
  };
10
- exports.DOCKER_CONFIG = {
7
+ export const DOCKER_CONFIG = {
11
8
  composeFile: 'docker-compose.yml',
12
9
  healthCheckEndpoint: '/server/health',
13
10
  interval: 5000,
@@ -1,71 +1,68 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.init = void 0;
4
- const tslib_1 = require("tslib");
5
- const prompts_1 = require("@clack/prompts");
6
- const core_1 = require("@oclif/core");
7
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
- const giget_1 = require("giget");
9
- const glob_1 = require("glob");
10
- const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
11
- const node_path_1 = tslib_1.__importDefault(require("node:path"));
12
- const nypm_1 = require("nypm");
13
- const apply_1 = tslib_1.__importDefault(require("../../commands/apply"));
14
- const docker_1 = require("../../services/docker");
15
- const catch_error_1 = tslib_1.__importDefault(require("../utils/catch-error"));
16
- const parse_github_url_1 = require("../utils/parse-github-url");
17
- const config_1 = require("./config");
18
- async function init(dir, flags) {
1
+ import { note, outro, spinner } from '@clack/prompts';
2
+ import { ux } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import { execa } from 'execa';
5
+ import { downloadTemplate } from 'giget';
6
+ import { glob } from 'glob';
7
+ import fs from 'node:fs';
8
+ import { detectPackageManager, installDependencies } from 'nypm';
9
+ import path from 'pathe';
10
+ import ApplyCommand from '../../commands/apply.js';
11
+ import { createDocker } from '../../services/docker.js';
12
+ import catchError from '../utils/catch-error.js';
13
+ import { createGigetString, parseGitHubUrl } from '../utils/parse-github-url.js';
14
+ import { DIRECTUS_CONFIG, DOCKER_CONFIG } from './config.js';
15
+ export async function init(dir, flags) {
19
16
  // Check target directory
20
17
  const shouldForce = flags.overrideDir;
21
- if (node_fs_1.default.existsSync(dir) && !shouldForce) {
18
+ if (fs.existsSync(dir) && !shouldForce) {
22
19
  throw new Error('Directory already exists. Use --override-dir to override.');
23
20
  }
24
- const frontendDir = node_path_1.default.join(dir, flags.frontend);
25
- const directusDir = node_path_1.default.join(dir, 'directus');
21
+ const frontendDir = path.join(dir, flags.frontend);
22
+ const directusDir = path.join(dir, 'directus');
26
23
  let template;
27
24
  try {
28
25
  // Download the template from GitHub
29
- const parsedUrl = (0, parse_github_url_1.parseGitHubUrl)(flags.template);
30
- template = await (0, giget_1.downloadTemplate)((0, parse_github_url_1.createGigetString)(parsedUrl), {
26
+ const parsedUrl = parseGitHubUrl(flags.template);
27
+ template = await downloadTemplate(createGigetString(parsedUrl), {
31
28
  dir,
32
29
  force: shouldForce,
33
30
  });
34
31
  // Cleanup the template
35
32
  if (flags.frontend) {
36
33
  // Ensure directus directory exists before cleaning up
37
- if (!node_fs_1.default.existsSync(directusDir)) {
38
- node_fs_1.default.mkdirSync(directusDir, { recursive: true });
34
+ if (!fs.existsSync(directusDir)) {
35
+ fs.mkdirSync(directusDir, { recursive: true });
39
36
  }
40
37
  // Read and parse package.json
41
- const packageJsonPath = node_path_1.default.join(dir, 'package.json');
42
- if (!node_fs_1.default.existsSync(packageJsonPath)) {
38
+ const packageJsonPath = path.join(dir, 'package.json');
39
+ if (!fs.existsSync(packageJsonPath)) {
43
40
  throw new Error('package.json not found in template');
44
41
  }
45
- const packageJson = JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf8'));
42
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
46
43
  const templateConfig = packageJson['directus:template'];
47
44
  // Get all frontend paths from the configuration
48
- const frontendPaths = Object.values((templateConfig === null || templateConfig === void 0 ? void 0 : templateConfig.frontends) || {})
45
+ const frontendPaths = Object.values(templateConfig?.frontends || {})
49
46
  .map(frontend => frontend.path.replace(/^\.\//, ''))
50
47
  .filter(path => path !== flags.frontend); // Exclude the selected frontend
51
48
  // Remove unused frontend directories
52
49
  for (const frontendPath of frontendPaths) {
53
- const pathToRemove = node_path_1.default.join(dir, frontendPath);
54
- if (node_fs_1.default.existsSync(pathToRemove)) {
55
- node_fs_1.default.rmSync(pathToRemove, { recursive: true });
50
+ const pathToRemove = path.join(dir, frontendPath);
51
+ if (fs.existsSync(pathToRemove)) {
52
+ fs.rmSync(pathToRemove, { recursive: true });
56
53
  }
57
54
  }
58
55
  }
59
56
  // Find and copy all .env.example files
60
- const envFiles = glob_1.glob.sync(node_path_1.default.join(dir, '**', '.env.example'));
57
+ const envFiles = glob.sync(path.join(dir, '**', '.env.example'));
61
58
  for (const file of envFiles) {
62
59
  const envFile = file.replace('.env.example', '.env');
63
- node_fs_1.default.copyFileSync(file, envFile);
60
+ fs.copyFileSync(file, envFile);
64
61
  }
65
62
  // Start Directus and apply template only if directus directory exists
66
- if (node_fs_1.default.existsSync(directusDir)) {
63
+ if (fs.existsSync(directusDir)) {
67
64
  // Initialize Docker service
68
- const dockerService = (0, docker_1.createDocker)(config_1.DOCKER_CONFIG);
65
+ const dockerService = createDocker(DOCKER_CONFIG);
69
66
  // Check if Docker is installed
70
67
  const dockerStatus = await dockerService.checkDocker();
71
68
  if (!dockerStatus.installed || !dockerStatus.running) {
@@ -73,41 +70,41 @@ async function init(dir, flags) {
73
70
  }
74
71
  try {
75
72
  await dockerService.startContainers(directusDir);
76
- const healthCheckUrl = `${config_1.DIRECTUS_CONFIG.url}:${config_1.DIRECTUS_CONFIG.port}${config_1.DOCKER_CONFIG.healthCheckEndpoint}`;
73
+ const healthCheckUrl = `${DIRECTUS_CONFIG.url}:${DIRECTUS_CONFIG.port}${DOCKER_CONFIG.healthCheckEndpoint}`;
77
74
  await dockerService.waitForHealthy(healthCheckUrl);
78
- const templatePath = node_path_1.default.join(directusDir, 'template');
75
+ const templatePath = path.join(directusDir, 'template');
79
76
  // const s = spinner()
80
77
  // s.start(`Attempting to apply template from: ${templatePath}`)
81
- // ux.log(`Attempting to apply template from: ${templatePath}`)
82
- await apply_1.default.run([
78
+ // ux.stdout(`Attempting to apply template from: ${templatePath}`)
79
+ await ApplyCommand.run([
83
80
  '--directusUrl=http://localhost:8055',
84
81
  '-p',
85
82
  '--userEmail=admin@example.com',
86
83
  '--userPassword=d1r3ctu5',
87
- '--templateLocation=' + templatePath,
84
+ `--templateLocation=${templatePath}`,
88
85
  ]);
89
86
  // s.stop('Template applied!')
90
87
  }
91
88
  catch (error) {
92
- core_1.ux.error('Failed to start Directus containers or apply template');
89
+ ux.error('Failed to start Directus containers or apply template');
93
90
  throw error;
94
91
  }
95
92
  }
96
93
  // Install dependencies for frontend if it exists
97
- if (flags.installDeps && node_fs_1.default.existsSync(frontendDir)) {
98
- const s = (0, prompts_1.spinner)();
94
+ if (flags.installDeps && fs.existsSync(frontendDir)) {
95
+ const s = spinner();
99
96
  s.start('Installing dependencies');
100
97
  // ux.action.start('Installing dependencies')
101
98
  try {
102
- const packageManager = await (0, nypm_1.detectPackageManager)(frontendDir);
103
- await (0, nypm_1.installDependencies)({
99
+ const packageManager = await detectPackageManager(frontendDir);
100
+ await installDependencies({
104
101
  cwd: frontendDir,
105
102
  packageManager,
106
103
  silent: true,
107
104
  });
108
105
  }
109
106
  catch (error) {
110
- core_1.ux.warn('Failed to install dependencies');
107
+ ux.warn('Failed to install dependencies');
111
108
  throw error;
112
109
  }
113
110
  // ux.action.stop()
@@ -115,7 +112,7 @@ async function init(dir, flags) {
115
112
  }
116
113
  // Initialize Git repo
117
114
  if (flags.gitInit) {
118
- const s = (0, prompts_1.spinner)();
115
+ const s = spinner();
119
116
  s.start('Initializing git repository');
120
117
  // ux.action.start('Initializing git repository')
121
118
  await initGit(dir);
@@ -123,16 +120,16 @@ async function init(dir, flags) {
123
120
  s.stop('Git repository initialized!');
124
121
  }
125
122
  // Finishing up
126
- const relativeDir = node_path_1.default.relative(process.cwd(), dir);
127
- const nextSteps = `- Directus is running on http://localhost:8055 \n- Navigate to your project directory using ${chalk_1.default.cyan(`cd ${relativeDir}`)} and start developing! \n- Review the \`./README.md\` file for next steps.`;
128
- (0, prompts_1.note)(nextSteps, 'Next Steps');
129
- // ux.log('You\'ll find the following directories in your project:')
130
- // ux.log('• directus')
131
- // ux.log(`• ${flags.frontend}`)
132
- (0, prompts_1.outro)(`Problems? Join the community on Discord at ${chalk_1.default.underline(chalk_1.default.cyan('https://directus.chat'))}`);
123
+ const relativeDir = path.relative(process.cwd(), dir);
124
+ const nextSteps = `- Directus is running on http://localhost:8055 \n- Navigate to your project directory using ${chalk.cyan(`cd ${relativeDir}`)} and start developing! \n- Review the \`./README.md\` file for next steps.`;
125
+ note(nextSteps, 'Next Steps');
126
+ // ux.stdout('You\'ll find the following directories in your project:')
127
+ // ux.stdout('• directus')
128
+ // ux.stdout(`• ${flags.frontend}`)
129
+ outro(`Problems? Join the community on Discord at ${chalk.underline(chalk.cyan('https://directus.chat'))}`);
133
130
  }
134
131
  catch (error) {
135
- (0, catch_error_1.default)(error, {
132
+ catchError(error, {
136
133
  context: { dir, flags, function: 'init' },
137
134
  fatal: true,
138
135
  logToFile: true,
@@ -144,7 +141,6 @@ async function init(dir, flags) {
144
141
  template,
145
142
  };
146
143
  }
147
- exports.init = init;
148
144
  /**
149
145
  * Initialize a git repository
150
146
  * @param targetDir - The directory to initialize the git repository in
@@ -153,12 +149,11 @@ exports.init = init;
153
149
  async function initGit(targetDir) {
154
150
  try {
155
151
  // ux.action.start('Initializing git repository')
156
- const { execa } = await Promise.resolve().then(() => tslib_1.__importStar(require('execa')));
157
152
  await execa('git', ['init'], { cwd: targetDir });
158
153
  // ux.action.stop()
159
154
  }
160
155
  catch (error) {
161
- (0, catch_error_1.default)(error, {
156
+ catchError(error, {
162
157
  context: { function: 'initGit', targetDir },
163
158
  fatal: false,
164
159
  logToFile: true,
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -0,0 +1 @@
1
+ export { init } from './init/index.js';
@@ -0,0 +1,2 @@
1
+ // Re-export from init/index.js
2
+ export { init } from './init/index.js';