@directus/extensions-sdk 9.20.3 → 9.21.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.
- package/dist/cjs/cli/commands/add.d.ts +2 -0
- package/dist/cjs/cli/commands/add.js +242 -0
- package/dist/cjs/cli/commands/build.d.ts +1 -1
- package/dist/cjs/cli/commands/build.js +169 -43
- package/dist/cjs/cli/commands/create.d.ts +2 -2
- package/dist/cjs/cli/commands/create.js +66 -47
- package/dist/cjs/cli/commands/helpers/copy-template.d.ts +4 -0
- package/dist/cjs/cli/commands/helpers/copy-template.js +53 -0
- package/dist/cjs/cli/commands/helpers/generate-bundle-entrypoint.d.ts +3 -0
- package/dist/cjs/cli/commands/helpers/generate-bundle-entrypoint.js +24 -0
- package/dist/cjs/cli/commands/helpers/get-extension-dev-deps.d.ts +4 -0
- package/dist/cjs/cli/commands/helpers/get-extension-dev-deps.js +27 -0
- package/dist/cjs/cli/commands/helpers/load-config.d.ts +3 -0
- package/dist/cjs/cli/{utils → commands/helpers}/load-config.js +0 -0
- package/dist/cjs/cli/commands/helpers/validate-cli-options.d.ts +4 -0
- package/dist/cjs/cli/commands/helpers/validate-cli-options.js +39 -0
- package/dist/cjs/cli/run.js +3 -1
- package/dist/cjs/cli/types.d.ts +5 -5
- package/dist/cjs/cli/utils/detect-json-indent.d.ts +2 -0
- package/dist/cjs/cli/utils/detect-json-indent.js +14 -0
- package/dist/cjs/cli/utils/get-package-manager-agent.d.ts +5 -0
- package/dist/cjs/cli/utils/get-package-manager-agent.js +15 -0
- package/dist/cjs/cli/utils/get-package-manager-agent.test.d.ts +2 -0
- package/dist/cjs/cli/utils/get-package-manager-agent.test.js +24 -0
- package/dist/cjs/cli/utils/get-package-manager.d.ts +5 -0
- package/dist/cjs/cli/utils/get-package-manager.js +20 -0
- package/dist/cjs/cli/utils/get-package-manager.test.d.ts +2 -0
- package/dist/cjs/cli/utils/get-package-manager.test.js +42 -0
- package/dist/cjs/cli/utils/get-sdk-version.d.ts +2 -0
- package/dist/cjs/cli/utils/get-sdk-version.js +7 -0
- package/dist/cjs/cli/utils/get-template-path.d.ts +2 -0
- package/dist/cjs/cli/utils/get-template-path.js +10 -0
- package/dist/cjs/cli/utils/try-parse-json.d.ts +3 -0
- package/dist/cjs/cli/utils/try-parse-json.js +11 -0
- package/dist/esm/cli/commands/add.d.ts +2 -0
- package/dist/esm/cli/commands/add.js +236 -0
- package/dist/esm/cli/commands/build.d.ts +1 -1
- package/dist/esm/cli/commands/build.js +167 -41
- package/dist/esm/cli/commands/create.d.ts +2 -2
- package/dist/esm/cli/commands/create.js +66 -47
- package/dist/esm/cli/commands/helpers/copy-template.d.ts +4 -0
- package/dist/esm/cli/commands/helpers/copy-template.js +47 -0
- package/dist/esm/cli/commands/helpers/generate-bundle-entrypoint.d.ts +3 -0
- package/dist/esm/cli/commands/helpers/generate-bundle-entrypoint.js +18 -0
- package/dist/esm/cli/commands/helpers/get-extension-dev-deps.d.ts +4 -0
- package/dist/esm/cli/commands/helpers/get-extension-dev-deps.js +21 -0
- package/dist/esm/cli/commands/helpers/load-config.d.ts +3 -0
- package/dist/esm/cli/{utils → commands/helpers}/load-config.js +0 -0
- package/dist/esm/cli/commands/helpers/validate-cli-options.d.ts +4 -0
- package/dist/esm/cli/commands/helpers/validate-cli-options.js +34 -0
- package/dist/esm/cli/run.js +3 -1
- package/dist/esm/cli/types.d.ts +5 -5
- package/dist/esm/cli/utils/detect-json-indent.d.ts +2 -0
- package/dist/esm/cli/utils/detect-json-indent.js +11 -0
- package/dist/esm/cli/utils/get-package-manager-agent.d.ts +5 -0
- package/dist/esm/cli/utils/get-package-manager-agent.js +12 -0
- package/dist/esm/cli/utils/get-package-manager-agent.test.d.ts +2 -0
- package/dist/esm/cli/utils/get-package-manager-agent.test.js +19 -0
- package/dist/esm/cli/utils/get-package-manager.d.ts +5 -0
- package/dist/esm/cli/utils/get-package-manager.js +14 -0
- package/dist/esm/cli/utils/get-package-manager.test.d.ts +2 -0
- package/dist/esm/cli/utils/get-package-manager.test.js +37 -0
- package/dist/esm/cli/utils/get-sdk-version.d.ts +2 -0
- package/dist/esm/cli/utils/get-sdk-version.js +4 -0
- package/dist/esm/cli/utils/get-template-path.d.ts +2 -0
- package/dist/esm/cli/utils/get-template-path.js +4 -0
- package/dist/esm/cli/utils/try-parse-json.d.ts +3 -0
- package/dist/esm/cli/utils/try-parse-json.js +8 -0
- package/package.json +51 -21
- package/templates/common/{javascript → common/config}/_gitignore +0 -0
- package/templates/common/typescript/{tsconfig.json → config/tsconfig.json} +0 -0
- package/templates/display/javascript/{src → source}/display.vue +0 -0
- package/templates/display/javascript/{src → source}/index.js +0 -0
- package/templates/display/typescript/{src → source}/display.vue +0 -0
- package/templates/display/typescript/{src → source}/index.ts +0 -0
- package/templates/display/typescript/{src → source}/shims.d.ts +0 -0
- package/templates/endpoint/javascript/{src → source}/index.js +0 -0
- package/templates/endpoint/typescript/{src → source}/index.ts +0 -0
- package/templates/hook/javascript/{src → source}/index.js +0 -0
- package/templates/hook/typescript/{src → source}/index.ts +0 -0
- package/templates/interface/javascript/{src → source}/index.js +0 -0
- package/templates/interface/javascript/{src → source}/interface.vue +0 -0
- package/templates/interface/typescript/{src → source}/index.ts +0 -0
- package/templates/interface/typescript/{src → source}/interface.vue +0 -0
- package/templates/interface/typescript/{src → source}/shims.d.ts +0 -0
- package/templates/layout/javascript/{src → source}/index.js +0 -0
- package/templates/layout/javascript/{src → source}/layout.vue +0 -0
- package/templates/layout/typescript/{src → source}/index.ts +0 -0
- package/templates/layout/typescript/{src → source}/layout.vue +0 -0
- package/templates/layout/typescript/{src → source}/shims.d.ts +0 -0
- package/templates/module/javascript/{src → source}/index.js +0 -0
- package/templates/module/javascript/{src → source}/module.vue +0 -0
- package/templates/module/typescript/{src → source}/index.ts +0 -0
- package/templates/module/typescript/{src → source}/module.vue +0 -0
- package/templates/module/typescript/{src → source}/shims.d.ts +0 -0
- package/templates/operation/javascript/{src → source}/api.js +0 -0
- package/templates/operation/javascript/{src → source}/app.js +0 -0
- package/templates/operation/typescript/{src → source}/api.ts +0 -0
- package/templates/operation/typescript/{src → source}/app.ts +0 -0
- package/templates/operation/typescript/{src → source}/shims.d.ts +0 -0
- package/templates/panel/javascript/{src → source}/index.js +0 -0
- package/templates/panel/javascript/{src → source}/panel.vue +0 -0
- package/templates/panel/typescript/{src → source}/index.ts +0 -0
- package/templates/panel/typescript/{src → source}/panel.vue +0 -0
- package/templates/panel/typescript/{src → source}/shims.d.ts +0 -0
- package/.editorconfig +0 -12
- package/cli.d.ts +0 -1
- package/dist/cjs/cli/commands/build.d.ts.map +0 -1
- package/dist/cjs/cli/commands/create.d.ts.map +0 -1
- package/dist/cjs/cli/index.d.ts.map +0 -1
- package/dist/cjs/cli/run.d.ts.map +0 -1
- package/dist/cjs/cli/types.d.ts.map +0 -1
- package/dist/cjs/cli/utils/get-package-version.d.ts.map +0 -1
- package/dist/cjs/cli/utils/languages.d.ts.map +0 -1
- package/dist/cjs/cli/utils/load-config.d.ts +0 -3
- package/dist/cjs/cli/utils/load-config.d.ts.map +0 -1
- package/dist/cjs/cli/utils/logger.d.ts.map +0 -1
- package/dist/cjs/cli/utils/rename-map.d.ts +0 -2
- package/dist/cjs/cli/utils/rename-map.d.ts.map +0 -1
- package/dist/cjs/cli/utils/rename-map.js +0 -23
- package/dist/cjs/cli/utils/to-object.d.ts +0 -2
- package/dist/cjs/cli/utils/to-object.d.ts.map +0 -1
- package/dist/cjs/cli/utils/to-object.js +0 -17
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/esm/cli/commands/build.d.ts.map +0 -1
- package/dist/esm/cli/commands/create.d.ts.map +0 -1
- package/dist/esm/cli/index.d.ts.map +0 -1
- package/dist/esm/cli/run.d.ts.map +0 -1
- package/dist/esm/cli/types.d.ts.map +0 -1
- package/dist/esm/cli/utils/get-package-version.d.ts.map +0 -1
- package/dist/esm/cli/utils/languages.d.ts.map +0 -1
- package/dist/esm/cli/utils/load-config.d.ts +0 -3
- package/dist/esm/cli/utils/load-config.d.ts.map +0 -1
- package/dist/esm/cli/utils/logger.d.ts.map +0 -1
- package/dist/esm/cli/utils/rename-map.d.ts +0 -2
- package/dist/esm/cli/utils/rename-map.d.ts.map +0 -1
- package/dist/esm/cli/utils/rename-map.js +0 -17
- package/dist/esm/cli/utils/to-object.d.ts +0 -2
- package/dist/esm/cli/utils/to-object.d.ts.map +0 -1
- package/dist/esm/cli/utils/to-object.js +0 -14
- package/dist/esm/index.d.ts.map +0 -1
- package/src/cli/commands/build.ts +0 -493
- package/src/cli/commands/create.ts +0 -135
- package/src/cli/index.ts +0 -4
- package/src/cli/run.ts +0 -32
- package/src/cli/types.ts +0 -12
- package/src/cli/utils/get-package-version.ts +0 -9
- package/src/cli/utils/languages.ts +0 -26
- package/src/cli/utils/load-config.ts +0 -21
- package/src/cli/utils/logger.ts +0 -25
- package/src/cli/utils/rename-map.ts +0 -20
- package/src/cli/utils/to-object.ts +0 -16
- package/src/index.ts +0 -23
- package/templates/common/typescript/_gitignore +0 -3
- package/tsconfig.json +0 -30
|
@@ -12,15 +12,16 @@ const constants_1 = require("@directus/shared/constants");
|
|
|
12
12
|
const utils_1 = require("@directus/shared/utils");
|
|
13
13
|
const logger_1 = require("../utils/logger");
|
|
14
14
|
const languages_1 = require("../utils/languages");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
15
|
+
const get_sdk_version_1 = __importDefault(require("../utils/get-sdk-version"));
|
|
16
|
+
const get_extension_dev_deps_1 = __importDefault(require("./helpers/get-extension-dev-deps"));
|
|
17
|
+
const copy_template_1 = __importDefault(require("./helpers/copy-template"));
|
|
18
|
+
const get_package_manager_1 = __importDefault(require("../utils/get-package-manager"));
|
|
19
19
|
async function create(type, name, options) {
|
|
20
|
+
var _a;
|
|
20
21
|
const targetDir = name.substring(name.lastIndexOf('/') + 1);
|
|
21
22
|
const targetPath = path_1.default.resolve(targetDir);
|
|
22
|
-
if (!(0, utils_1.isIn)(type, constants_1.
|
|
23
|
-
(0, logger_1.log)(`Extension type ${chalk_1.default.bold(type)} is not supported. Available extension types: ${constants_1.
|
|
23
|
+
if (!(0, utils_1.isIn)(type, constants_1.EXTENSION_PACKAGE_TYPES)) {
|
|
24
|
+
(0, logger_1.log)(`Extension type ${chalk_1.default.bold(type)} is not supported. Available extension types: ${constants_1.EXTENSION_PACKAGE_TYPES.map((t) => chalk_1.default.bold.magenta(t)).join(', ')}.`, 'error');
|
|
24
25
|
process.exit(1);
|
|
25
26
|
}
|
|
26
27
|
if (targetDir.length === 0) {
|
|
@@ -39,61 +40,79 @@ async function create(type, name, options) {
|
|
|
39
40
|
process.exit(1);
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
|
-
if (
|
|
43
|
-
|
|
43
|
+
if ((0, utils_1.isIn)(type, constants_1.PACKAGE_EXTENSION_TYPES)) {
|
|
44
|
+
await createPackageExtension({ type, name, targetDir, targetPath });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const language = (_a = options.language) !== null && _a !== void 0 ? _a : 'javascript';
|
|
48
|
+
await createLocalExtension({ type, name, targetDir, targetPath, language });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.default = create;
|
|
52
|
+
async function createPackageExtension({ type, name, targetDir, targetPath, }) {
|
|
53
|
+
const spinner = (0, ora_1.default)(chalk_1.default.bold('Scaffolding Directus extension...')).start();
|
|
54
|
+
await fs_extra_1.default.ensureDir(targetPath);
|
|
55
|
+
await (0, copy_template_1.default)(type, targetPath);
|
|
56
|
+
const host = `^${(0, get_sdk_version_1.default)()}`;
|
|
57
|
+
const options = type === 'bundle' ? { type, path: { app: 'dist/app.js', api: 'dist/api.js' }, entries: [], host } : { type, host };
|
|
58
|
+
const packageManifest = getPackageManifest(name, options, await (0, get_extension_dev_deps_1.default)(type));
|
|
59
|
+
await fs_extra_1.default.writeJSON(path_1.default.join(targetPath, 'package.json'), packageManifest, { spaces: '\t' });
|
|
60
|
+
const packageManager = (0, get_package_manager_1.default)();
|
|
61
|
+
await (0, execa_1.default)(packageManager, ['install'], { cwd: targetPath });
|
|
62
|
+
spinner.succeed(chalk_1.default.bold('Done'));
|
|
63
|
+
(0, logger_1.log)(getDoneMessage(type, targetDir, targetPath, packageManager));
|
|
64
|
+
}
|
|
65
|
+
async function createLocalExtension({ type, name, targetDir, targetPath, language, }) {
|
|
66
|
+
if (!(0, languages_1.isLanguage)(language)) {
|
|
67
|
+
(0, logger_1.log)(`Language ${chalk_1.default.bold(language)} is not supported. Available languages: ${constants_1.EXTENSION_LANGUAGES.map((t) => chalk_1.default.bold.magenta(t)).join(', ')}.`, 'error');
|
|
44
68
|
process.exit(1);
|
|
45
69
|
}
|
|
46
70
|
const spinner = (0, ora_1.default)(chalk_1.default.bold('Scaffolding Directus extension...')).start();
|
|
47
71
|
await fs_extra_1.default.ensureDir(targetPath);
|
|
48
|
-
await
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
72
|
+
await (0, copy_template_1.default)(type, targetPath, 'src', language);
|
|
73
|
+
const host = `^${(0, get_sdk_version_1.default)()}`;
|
|
74
|
+
const options = (0, utils_1.isIn)(type, constants_1.HYBRID_EXTENSION_TYPES)
|
|
75
|
+
? {
|
|
76
|
+
type,
|
|
77
|
+
path: { app: 'dist/app.js', api: 'dist/api.js' },
|
|
78
|
+
source: { app: `src/app.${(0, languages_1.languageToShort)(language)}`, api: `src/api.${(0, languages_1.languageToShort)(language)}` },
|
|
79
|
+
host,
|
|
80
|
+
}
|
|
81
|
+
: {
|
|
82
|
+
type,
|
|
83
|
+
path: 'dist/index.js',
|
|
84
|
+
source: `src/index.${(0, languages_1.languageToShort)(language)}`,
|
|
85
|
+
host,
|
|
86
|
+
};
|
|
87
|
+
const packageManifest = getPackageManifest(name, options, await (0, get_extension_dev_deps_1.default)(type, language));
|
|
88
|
+
await fs_extra_1.default.writeJSON(path_1.default.join(targetPath, 'package.json'), packageManifest, { spaces: '\t' });
|
|
89
|
+
const packageManager = (0, get_package_manager_1.default)();
|
|
90
|
+
await (0, execa_1.default)(packageManager, ['install'], { cwd: targetPath });
|
|
91
|
+
spinner.succeed(chalk_1.default.bold('Done'));
|
|
92
|
+
(0, logger_1.log)(getDoneMessage(type, targetDir, targetPath, packageManager));
|
|
93
|
+
}
|
|
94
|
+
function getPackageManifest(name, options, deps) {
|
|
95
|
+
return {
|
|
56
96
|
name: constants_1.EXTENSION_NAME_REGEX.test(name) ? name : `directus-extension-${name}`,
|
|
57
97
|
version: '1.0.0',
|
|
58
|
-
keywords: ['directus', 'directus-extension', `directus-custom-${type}`],
|
|
59
|
-
[constants_1.EXTENSION_PKG_KEY]:
|
|
60
|
-
type,
|
|
61
|
-
path: entryPath,
|
|
62
|
-
source: sourcePath,
|
|
63
|
-
host: `^${pkg.version}`,
|
|
64
|
-
},
|
|
98
|
+
keywords: ['directus', 'directus-extension', `directus-custom-${options.type}`],
|
|
99
|
+
[constants_1.EXTENSION_PKG_KEY]: options,
|
|
65
100
|
scripts: {
|
|
66
101
|
build: 'directus-extension build',
|
|
67
102
|
dev: 'directus-extension build -w --no-minify',
|
|
68
103
|
},
|
|
69
|
-
devDependencies:
|
|
104
|
+
devDependencies: deps,
|
|
70
105
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
(0, logger_1.log)(`
|
|
106
|
+
}
|
|
107
|
+
function getDoneMessage(type, targetDir, targetPath, packageManager) {
|
|
108
|
+
return `
|
|
75
109
|
Your ${type} extension has been created at ${chalk_1.default.green(targetPath)}
|
|
76
110
|
|
|
77
111
|
To start developing, run:
|
|
78
|
-
|
|
79
|
-
|
|
112
|
+
${chalk_1.default.blue('cd')} ${targetDir}
|
|
113
|
+
${chalk_1.default.blue(`${packageManager} run`)} dev
|
|
80
114
|
|
|
81
115
|
and then to build for production, run:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
exports.default = create;
|
|
86
|
-
async function getPackageDeps(type, language) {
|
|
87
|
-
return {
|
|
88
|
-
'@directus/extensions-sdk': pkg.version,
|
|
89
|
-
...(language === 'typescript'
|
|
90
|
-
? {
|
|
91
|
-
...((0, utils_1.isIn)(type, constants_1.API_OR_HYBRID_EXTENSION_TYPES)
|
|
92
|
-
? { '@types/node': `^${await (0, get_package_version_1.default)('@types/node')}` }
|
|
93
|
-
: {}),
|
|
94
|
-
typescript: `^${await (0, get_package_version_1.default)('typescript')}`,
|
|
95
|
-
}
|
|
96
|
-
: {}),
|
|
97
|
-
...((0, utils_1.isIn)(type, constants_1.APP_OR_HYBRID_EXTENSION_TYPES) ? { vue: `^${await (0, get_package_version_1.default)('vue')}` } : {}),
|
|
98
|
-
};
|
|
116
|
+
${chalk_1.default.blue(`${packageManager} run`)} build
|
|
117
|
+
`;
|
|
99
118
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ExtensionPackageType } from '@directus/shared/types';
|
|
2
|
+
import { Language } from '../../types';
|
|
3
|
+
export default function copyTemplate(type: ExtensionPackageType, extensionPath: string, sourcePath?: string, language?: Language): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=copy-template.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const get_template_path_1 = __importDefault(require("../../utils/get-template-path"));
|
|
9
|
+
async function copyTemplateFile(templateFile, extensionPath, sourcePath) {
|
|
10
|
+
if (sourcePath !== undefined) {
|
|
11
|
+
const oldName = path_1.default.basename(templateFile.path);
|
|
12
|
+
const newName = oldName.startsWith('_') ? `.${oldName.substring(1)}` : oldName;
|
|
13
|
+
const targetPath = templateFile.type === 'config'
|
|
14
|
+
? path_1.default.join(extensionPath, newName)
|
|
15
|
+
: path_1.default.resolve(extensionPath, sourcePath, newName);
|
|
16
|
+
await fs_extra_1.default.copy(templateFile.path, targetPath, { overwrite: false });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function getFilesInDir(templatePath) {
|
|
20
|
+
if (!(await fs_extra_1.default.pathExists(templatePath)))
|
|
21
|
+
return [];
|
|
22
|
+
const files = await fs_extra_1.default.readdir(templatePath);
|
|
23
|
+
return files.map((file) => path_1.default.join(templatePath, file));
|
|
24
|
+
}
|
|
25
|
+
async function getLanguageTemplateFiles(templateLanguagePath) {
|
|
26
|
+
const [configFiles, sourceFiles] = await Promise.all([
|
|
27
|
+
getFilesInDir(path_1.default.join(templateLanguagePath, 'config')),
|
|
28
|
+
getFilesInDir(path_1.default.join(templateLanguagePath, 'source')),
|
|
29
|
+
]);
|
|
30
|
+
const configTemplateFiles = configFiles.map((file) => ({ type: 'config', path: file }));
|
|
31
|
+
const sourceTemplateFiles = sourceFiles.map((file) => ({ type: 'source', path: file }));
|
|
32
|
+
return [...configTemplateFiles, ...sourceTemplateFiles];
|
|
33
|
+
}
|
|
34
|
+
async function getTypeTemplateFiles(templateTypePath, language) {
|
|
35
|
+
const [commonTemplateFiles, languageTemplateFiles] = await Promise.all([
|
|
36
|
+
getLanguageTemplateFiles(path_1.default.join(templateTypePath, 'common')),
|
|
37
|
+
language ? getLanguageTemplateFiles(path_1.default.join(templateTypePath, language)) : null,
|
|
38
|
+
]);
|
|
39
|
+
return [...commonTemplateFiles, ...(languageTemplateFiles ? languageTemplateFiles : [])];
|
|
40
|
+
}
|
|
41
|
+
async function getTemplateFiles(type, language) {
|
|
42
|
+
const templatePath = (0, get_template_path_1.default)();
|
|
43
|
+
const [commonTemplateFiles, typeTemplateFiles] = await Promise.all([
|
|
44
|
+
getTypeTemplateFiles(path_1.default.join(templatePath, 'common'), language),
|
|
45
|
+
getTypeTemplateFiles(path_1.default.join(templatePath, type), language),
|
|
46
|
+
]);
|
|
47
|
+
return [...commonTemplateFiles, ...typeTemplateFiles];
|
|
48
|
+
}
|
|
49
|
+
async function copyTemplate(type, extensionPath, sourcePath, language) {
|
|
50
|
+
const templateFiles = await getTemplateFiles(type, language);
|
|
51
|
+
await Promise.all(templateFiles.map((templateFile) => copyTemplateFile(templateFile, extensionPath, sourcePath)));
|
|
52
|
+
}
|
|
53
|
+
exports.default = copyTemplate;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const constants_1 = require("@directus/shared/constants");
|
|
8
|
+
const utils_1 = require("@directus/shared/utils");
|
|
9
|
+
const node_1 = require("@directus/shared/utils/node");
|
|
10
|
+
function generateBundleEntrypoint(mode, entries) {
|
|
11
|
+
const types = mode === 'app' ? constants_1.APP_OR_HYBRID_EXTENSION_TYPES : constants_1.API_OR_HYBRID_EXTENSION_TYPES;
|
|
12
|
+
const entriesForTypes = entries.filter((entry) => (0, utils_1.isIn)(entry.type, types));
|
|
13
|
+
const imports = entriesForTypes.map((entry, i) => `import e${i} from './${(0, node_1.pathToRelativeUrl)(path_1.default.resolve((0, utils_1.isTypeIn)(entry, constants_1.HYBRID_EXTENSION_TYPES)
|
|
14
|
+
? mode === 'app'
|
|
15
|
+
? entry.source.app
|
|
16
|
+
: entry.source.api
|
|
17
|
+
: entry.source))}';`);
|
|
18
|
+
const exports = types.map((type) => `export const ${(0, utils_1.pluralize)(type)} = [${entriesForTypes
|
|
19
|
+
.map((entry, i) => entry.type === type ? (mode === 'app' ? `e${i}` : `{name:'${entry.name}',config:e${i}}`) : null)
|
|
20
|
+
.filter((e) => e !== null)
|
|
21
|
+
.join(',')}];`);
|
|
22
|
+
return `${imports.join('')}${exports.join('')}`;
|
|
23
|
+
}
|
|
24
|
+
exports.default = generateBundleEntrypoint;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ExtensionPackageType } from '@directus/shared/types';
|
|
2
|
+
import { Language } from '../../types';
|
|
3
|
+
export default function getExtensionDevDeps(type: ExtensionPackageType | ExtensionPackageType[], language?: Language | Language[]): Promise<Record<string, string>>;
|
|
4
|
+
//# sourceMappingURL=get-extension-dev-deps.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const constants_1 = require("@directus/shared/constants");
|
|
7
|
+
const utils_1 = require("@directus/shared/utils");
|
|
8
|
+
const get_package_version_1 = __importDefault(require("../../utils/get-package-version"));
|
|
9
|
+
const get_sdk_version_1 = __importDefault(require("../../utils/get-sdk-version"));
|
|
10
|
+
async function getExtensionDevDeps(type, language = []) {
|
|
11
|
+
const types = Array.isArray(type) ? type : [type];
|
|
12
|
+
const languages = Array.isArray(language) ? language : [language];
|
|
13
|
+
const deps = {
|
|
14
|
+
'@directus/extensions-sdk': (0, get_sdk_version_1.default)(),
|
|
15
|
+
};
|
|
16
|
+
if (languages.includes('typescript')) {
|
|
17
|
+
if (types.some((type) => (0, utils_1.isIn)(type, constants_1.API_OR_HYBRID_EXTENSION_TYPES))) {
|
|
18
|
+
deps['@types/node'] = `^${await (0, get_package_version_1.default)('@types/node')}`;
|
|
19
|
+
}
|
|
20
|
+
deps['typescript'] = `^${await (0, get_package_version_1.default)('typescript')}`;
|
|
21
|
+
}
|
|
22
|
+
if (types.some((type) => (0, utils_1.isIn)(type, constants_1.APP_OR_HYBRID_EXTENSION_TYPES))) {
|
|
23
|
+
deps['vue'] = `^${await (0, get_package_version_1.default)('vue')}`;
|
|
24
|
+
}
|
|
25
|
+
return deps;
|
|
26
|
+
}
|
|
27
|
+
exports.default = getExtensionDevDeps;
|
|
File without changes
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ExtensionOptionsBundleEntry, JsonValue, SplitEntrypoint } from '@directus/shared/types';
|
|
2
|
+
export declare function validateSplitEntrypointOption(option: JsonValue | undefined): option is SplitEntrypoint;
|
|
3
|
+
export declare function validateBundleEntriesOption(option: JsonValue | undefined): option is ExtensionOptionsBundleEntry[];
|
|
4
|
+
//# sourceMappingURL=validate-cli-options.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateBundleEntriesOption = exports.validateSplitEntrypointOption = void 0;
|
|
4
|
+
const utils_1 = require("@directus/shared/utils");
|
|
5
|
+
function validateNonPrimitive(value) {
|
|
6
|
+
if (value === undefined ||
|
|
7
|
+
value === null ||
|
|
8
|
+
typeof value === 'string' ||
|
|
9
|
+
typeof value === 'number' ||
|
|
10
|
+
typeof value === 'boolean') {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
function validateSplitEntrypointOption(option) {
|
|
16
|
+
if (!validateNonPrimitive(option) || Array.isArray(option)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (!option.app || !option.api) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
exports.validateSplitEntrypointOption = validateSplitEntrypointOption;
|
|
25
|
+
function validateBundleEntriesOption(option) {
|
|
26
|
+
if (!validateNonPrimitive(option) || !Array.isArray(option)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (!option.every((entry) => {
|
|
30
|
+
if (!validateNonPrimitive(entry) || Array.isArray(entry)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return (0, utils_1.validateExtensionOptionsBundleEntry)(entry);
|
|
34
|
+
})) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
exports.validateBundleEntriesOption = validateBundleEntriesOption;
|
package/dist/cjs/cli/run.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const commander_1 = require("commander");
|
|
7
7
|
const create_1 = __importDefault(require("./commands/create"));
|
|
8
|
+
const add_1 = __importDefault(require("./commands/add"));
|
|
8
9
|
const build_1 = __importDefault(require("./commands/build"));
|
|
9
10
|
const pkg = require('../../../package.json');
|
|
10
11
|
const program = new commander_1.Command();
|
|
@@ -14,8 +15,9 @@ program
|
|
|
14
15
|
.command('create')
|
|
15
16
|
.arguments('<type> <name>')
|
|
16
17
|
.description('Scaffold a new Directus extension')
|
|
17
|
-
.option('-l, --language <language>', 'specify the language to use'
|
|
18
|
+
.option('-l, --language <language>', 'specify the language to use')
|
|
18
19
|
.action(create_1.default);
|
|
20
|
+
program.command('add').description('Add entries to an existing Directus extension').action(add_1.default);
|
|
19
21
|
program
|
|
20
22
|
.command('build')
|
|
21
23
|
.description('Bundle a Directus extension to a single entrypoint')
|
package/dist/cjs/cli/types.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { EXTENSION_LANGUAGES } from '@directus/shared/constants';
|
|
2
2
|
import { Plugin, RollupOptions, OutputOptions as RollupOutputOptions } from 'rollup';
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
3
|
+
export type Language = typeof EXTENSION_LANGUAGES[number];
|
|
4
|
+
export type LanguageShort = 'js' | 'ts';
|
|
5
|
+
export type Config = {
|
|
6
6
|
plugins?: Plugin[];
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type RollupConfig = {
|
|
9
9
|
rollupOptions: RollupOptions;
|
|
10
10
|
rollupOutputOptions: RollupOutputOptions;
|
|
11
11
|
};
|
|
12
|
-
export
|
|
12
|
+
export type RollupMode = 'browser' | 'node';
|
|
13
13
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function detectJsonIndent(json) {
|
|
4
|
+
var _a;
|
|
5
|
+
const lines = json.split(/\r?\n/);
|
|
6
|
+
const braceLine = lines.findIndex((line) => /^(?:\{|\[)/.test(line));
|
|
7
|
+
if (braceLine === -1 || braceLine + 1 > lines.length - 1)
|
|
8
|
+
return null;
|
|
9
|
+
const indent = (_a = lines[braceLine + 1].match(/[ \t]+/)) === null || _a === void 0 ? void 0 : _a[0];
|
|
10
|
+
if (indent === undefined)
|
|
11
|
+
return null;
|
|
12
|
+
return indent;
|
|
13
|
+
}
|
|
14
|
+
exports.default = detectJsonIndent;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Extract the npm user agent from the npm_config_user_agent environment variable string
|
|
5
|
+
*/
|
|
6
|
+
function getPackageManagerAgent() {
|
|
7
|
+
const userAgent = process.env.npm_config_user_agent;
|
|
8
|
+
if (!userAgent)
|
|
9
|
+
return null;
|
|
10
|
+
const values = userAgent.split(' ');
|
|
11
|
+
const fields = values.filter((field) => field.includes('/'));
|
|
12
|
+
const [platform, arch] = values.filter((field) => !field.includes('/'));
|
|
13
|
+
return Object.fromEntries(fields.map((field) => field.split('/')).concat([['os', `${platform} (${arch})`]]));
|
|
14
|
+
}
|
|
15
|
+
exports.default = getPackageManagerAgent;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const get_package_manager_agent_1 = __importDefault(require("./get-package-manager-agent"));
|
|
8
|
+
const envCopy = { ...process.env };
|
|
9
|
+
(0, vitest_1.afterEach)(() => {
|
|
10
|
+
process.env = envCopy;
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.test)('Returns null if user agent cannot be extracted from env', () => {
|
|
13
|
+
delete process.env.npm_config_user_agent;
|
|
14
|
+
(0, vitest_1.expect)((0, get_package_manager_agent_1.default)()).toBe(null);
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.test)('Returns information object from parsed user agent', () => {
|
|
17
|
+
process.env.npm_config_user_agent = 'pnpm/7.16.0 npm/? node/v18.12.1 darwin arm64';
|
|
18
|
+
(0, vitest_1.expect)((0, get_package_manager_agent_1.default)()).toStrictEqual({
|
|
19
|
+
node: 'v18.12.1',
|
|
20
|
+
npm: '?',
|
|
21
|
+
os: 'darwin (arm64)',
|
|
22
|
+
pnpm: '7.16.0',
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const get_package_manager_agent_1 = __importDefault(require("./get-package-manager-agent"));
|
|
7
|
+
/**
|
|
8
|
+
* Determine whether to use pnpm, yarn, or npm based on the parsed package manager agent info
|
|
9
|
+
*/
|
|
10
|
+
function getPackageManager() {
|
|
11
|
+
const agent = (0, get_package_manager_agent_1.default)();
|
|
12
|
+
if (agent !== null) {
|
|
13
|
+
if ('pnpm' in agent && agent.pnpm !== '?')
|
|
14
|
+
return 'pnpm';
|
|
15
|
+
if ('yarn' in agent && agent.yarn !== '?')
|
|
16
|
+
return 'yarn';
|
|
17
|
+
}
|
|
18
|
+
return 'npm';
|
|
19
|
+
}
|
|
20
|
+
exports.default = getPackageManager;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const get_package_manager_agent_1 = __importDefault(require("./get-package-manager-agent"));
|
|
8
|
+
const get_package_manager_1 = __importDefault(require("./get-package-manager"));
|
|
9
|
+
vitest_1.vi.mock('./get-package-manager-agent');
|
|
10
|
+
(0, vitest_1.afterEach)(() => {
|
|
11
|
+
vitest_1.vi.clearAllMocks();
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.test)('Returns npm is agent data is unavailable', () => {
|
|
14
|
+
vitest_1.vi.mocked(get_package_manager_agent_1.default).mockReturnValueOnce(null);
|
|
15
|
+
(0, vitest_1.expect)((0, get_package_manager_1.default)()).toBe('npm');
|
|
16
|
+
});
|
|
17
|
+
(0, vitest_1.test)('Returns pnpm if pnpm exists in agent and is not ?', () => {
|
|
18
|
+
vitest_1.vi.mocked(get_package_manager_agent_1.default).mockReturnValueOnce({
|
|
19
|
+
node: 'v18.12.1',
|
|
20
|
+
npm: '?',
|
|
21
|
+
os: 'darwin (arm64)',
|
|
22
|
+
pnpm: '7.16.0',
|
|
23
|
+
});
|
|
24
|
+
(0, vitest_1.expect)((0, get_package_manager_1.default)()).toBe('pnpm');
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.test)('Returns yarn if yarn exists in agent and is not ?', () => {
|
|
27
|
+
vitest_1.vi.mocked(get_package_manager_agent_1.default).mockReturnValueOnce({
|
|
28
|
+
node: 'v18.12.1',
|
|
29
|
+
npm: '?',
|
|
30
|
+
os: 'darwin (arm64)',
|
|
31
|
+
yarn: '2',
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.expect)((0, get_package_manager_1.default)()).toBe('yarn');
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.test)('Returns npm is neither pnpm or yarn exist', () => {
|
|
36
|
+
vitest_1.vi.mocked(get_package_manager_agent_1.default).mockReturnValueOnce({
|
|
37
|
+
node: 'v18.12.1',
|
|
38
|
+
npm: '8.19.2',
|
|
39
|
+
os: 'darwin (arm64)',
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.expect)((0, get_package_manager_1.default)()).toBe('npm');
|
|
42
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
function getTemplatePath() {
|
|
8
|
+
return path_1.default.resolve(__dirname, '..', '..', '..', '..', 'templates');
|
|
9
|
+
}
|
|
10
|
+
exports.default = getTemplatePath;
|