@directus/extensions-sdk 9.0.0-rc.100
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/.editorconfig +12 -0
- package/cli.d.ts +1 -0
- package/cli.js +2 -0
- package/dist/cjs/cli/commands/build.d.ts +11 -0
- package/dist/cjs/cli/commands/build.d.ts.map +1 -0
- package/dist/cjs/cli/commands/build.js +181 -0
- package/dist/cjs/cli/commands/create.d.ts +6 -0
- package/dist/cjs/cli/commands/create.d.ts.map +1 -0
- package/dist/cjs/cli/commands/create.js +96 -0
- package/dist/cjs/cli/index.d.ts +4 -0
- package/dist/cjs/cli/index.d.ts.map +1 -0
- package/dist/cjs/cli/index.js +10 -0
- package/dist/cjs/cli/run.d.ts +2 -0
- package/dist/cjs/cli/run.d.ts.map +1 -0
- package/dist/cjs/cli/run.js +29 -0
- package/dist/cjs/cli/types.d.ts +4 -0
- package/dist/cjs/cli/types.d.ts.map +1 -0
- package/dist/cjs/cli/types.js +2 -0
- package/dist/cjs/cli/utils/get-package-version.d.ts +2 -0
- package/dist/cjs/cli/utils/get-package-version.d.ts.map +1 -0
- package/dist/cjs/cli/utils/get-package-version.js +12 -0
- package/dist/cjs/cli/utils/languages.d.ts +5 -0
- package/dist/cjs/cli/utils/languages.d.ts.map +1 -0
- package/dist/cjs/cli/utils/languages.js +30 -0
- package/dist/cjs/cli/utils/load-config.d.ts +2 -0
- package/dist/cjs/cli/utils/load-config.d.ts.map +1 -0
- package/dist/cjs/cli/utils/load-config.js +20 -0
- package/dist/cjs/cli/utils/logger.d.ts +2 -0
- package/dist/cjs/cli/utils/logger.d.ts.map +1 -0
- package/dist/cjs/cli/utils/logger.js +22 -0
- package/dist/cjs/cli/utils/rename-map.d.ts +2 -0
- package/dist/cjs/cli/utils/rename-map.d.ts.map +1 -0
- package/dist/cjs/cli/utils/rename-map.js +23 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/esm/cli/commands/build.d.ts +11 -0
- package/dist/esm/cli/commands/build.d.ts.map +1 -0
- package/dist/esm/cli/commands/build.js +175 -0
- package/dist/esm/cli/commands/create.d.ts +6 -0
- package/dist/esm/cli/commands/create.d.ts.map +1 -0
- package/dist/esm/cli/commands/create.js +90 -0
- package/dist/esm/cli/index.d.ts +4 -0
- package/dist/esm/cli/index.d.ts.map +1 -0
- package/dist/esm/cli/index.js +3 -0
- package/dist/esm/cli/run.d.ts +2 -0
- package/dist/esm/cli/run.d.ts.map +1 -0
- package/dist/esm/cli/run.js +24 -0
- package/dist/esm/cli/types.d.ts +4 -0
- package/dist/esm/cli/types.d.ts.map +1 -0
- package/dist/esm/cli/types.js +1 -0
- package/dist/esm/cli/utils/get-package-version.d.ts +2 -0
- package/dist/esm/cli/utils/get-package-version.d.ts.map +1 -0
- package/dist/esm/cli/utils/get-package-version.js +6 -0
- package/dist/esm/cli/utils/languages.d.ts +5 -0
- package/dist/esm/cli/utils/languages.d.ts.map +1 -0
- package/dist/esm/cli/utils/languages.js +24 -0
- package/dist/esm/cli/utils/load-config.d.ts +2 -0
- package/dist/esm/cli/utils/load-config.d.ts.map +1 -0
- package/dist/esm/cli/utils/load-config.js +14 -0
- package/dist/esm/cli/utils/logger.d.ts +2 -0
- package/dist/esm/cli/utils/logger.d.ts.map +1 -0
- package/dist/esm/cli/utils/logger.js +16 -0
- package/dist/esm/cli/utils/rename-map.d.ts +2 -0
- package/dist/esm/cli/utils/rename-map.d.ts.map +1 -0
- package/dist/esm/cli/utils/rename-map.js +17 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/license +674 -0
- package/package.json +56 -0
- package/readme.md +3 -0
- package/src/cli/commands/build.ts +211 -0
- package/src/cli/commands/create.ts +121 -0
- package/src/cli/index.ts +4 -0
- package/src/cli/run.ts +30 -0
- package/src/cli/types.ts +4 -0
- package/src/cli/utils/get-package-version.ts +9 -0
- package/src/cli/utils/languages.ts +26 -0
- package/src/cli/utils/load-config.ts +19 -0
- package/src/cli/utils/logger.ts +15 -0
- package/src/cli/utils/rename-map.ts +20 -0
- package/src/index.ts +11 -0
- package/templates/common/javascript/_gitignore +3 -0
- package/templates/common/typescript/_gitignore +3 -0
- package/templates/common/typescript/tsconfig.json +28 -0
- package/templates/display/javascript/src/display.vue +14 -0
- package/templates/display/javascript/src/index.js +11 -0
- package/templates/display/typescript/src/display.vue +16 -0
- package/templates/display/typescript/src/index.ts +12 -0
- package/templates/display/typescript/src/shims.d.ts +5 -0
- package/templates/endpoint/javascript/src/index.js +3 -0
- package/templates/endpoint/typescript/src/index.ts +5 -0
- package/templates/hook/javascript/src/index.js +5 -0
- package/templates/hook/typescript/src/index.ts +7 -0
- package/templates/interface/javascript/src/index.js +11 -0
- package/templates/interface/javascript/src/interface.vue +22 -0
- package/templates/interface/typescript/src/index.ts +12 -0
- package/templates/interface/typescript/src/interface.vue +24 -0
- package/templates/interface/typescript/src/shims.d.ts +5 -0
- package/templates/layout/javascript/src/index.js +19 -0
- package/templates/layout/javascript/src/layout.vue +22 -0
- package/templates/layout/typescript/src/index.ts +20 -0
- package/templates/layout/typescript/src/layout.vue +24 -0
- package/templates/layout/typescript/src/shims.d.ts +5 -0
- package/templates/module/javascript/src/index.js +13 -0
- package/templates/module/javascript/src/module.vue +7 -0
- package/templates/module/typescript/src/index.ts +14 -0
- package/templates/module/typescript/src/module.vue +9 -0
- package/templates/module/typescript/src/shims.d.ts +5 -0
- package/tsconfig.json +30 -0
package/.editorconfig
ADDED
package/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dist/esm/cli';
|
package/cli.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare type BuildOptions = {
|
|
2
|
+
type: string;
|
|
3
|
+
input: string;
|
|
4
|
+
output: string;
|
|
5
|
+
language: string;
|
|
6
|
+
force: boolean;
|
|
7
|
+
watch: boolean;
|
|
8
|
+
};
|
|
9
|
+
export default function build(options: BuildOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build.ts"],"names":[],"mappings":"AA4BA,aAAK,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtH,wBAA8B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FxE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
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 chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const rollup_1 = require("rollup");
|
|
11
|
+
const plugin_node_resolve_1 = require("@rollup/plugin-node-resolve");
|
|
12
|
+
const plugin_commonjs_1 = __importDefault(require("@rollup/plugin-commonjs"));
|
|
13
|
+
const plugin_json_1 = __importDefault(require("@rollup/plugin-json"));
|
|
14
|
+
const plugin_replace_1 = __importDefault(require("@rollup/plugin-replace"));
|
|
15
|
+
const rollup_plugin_typescript2_1 = __importDefault(require("rollup-plugin-typescript2"));
|
|
16
|
+
const rollup_plugin_terser_1 = require("rollup-plugin-terser");
|
|
17
|
+
const rollup_plugin_styles_1 = __importDefault(require("rollup-plugin-styles"));
|
|
18
|
+
const rollup_plugin_vue_1 = __importDefault(require("rollup-plugin-vue"));
|
|
19
|
+
const constants_1 = require("@directus/shared/constants");
|
|
20
|
+
const utils_1 = require("@directus/shared/utils");
|
|
21
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
22
|
+
const languages_1 = require("../utils/languages");
|
|
23
|
+
const load_config_1 = __importDefault(require("../utils/load-config"));
|
|
24
|
+
async function build(options) {
|
|
25
|
+
var _a, _b, _c;
|
|
26
|
+
const packagePath = path_1.default.resolve('package.json');
|
|
27
|
+
let extensionManifest = {};
|
|
28
|
+
if (!(await fs_extra_1.default.pathExists(packagePath))) {
|
|
29
|
+
(0, logger_1.default)(`Current directory is not a package.`, !options.force ? 'error' : 'warn');
|
|
30
|
+
if (!options.force)
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
extensionManifest = await fs_extra_1.default.readJSON(packagePath);
|
|
35
|
+
if (!(0, utils_1.validateExtensionManifest)(extensionManifest)) {
|
|
36
|
+
(0, logger_1.default)(`Current directory is not a Directus extension.`, !options.force ? 'error' : 'warn');
|
|
37
|
+
if (!options.force)
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const type = options.type || ((_a = extensionManifest[constants_1.EXTENSION_PKG_KEY]) === null || _a === void 0 ? void 0 : _a.type);
|
|
42
|
+
const input = options.input || ((_b = extensionManifest[constants_1.EXTENSION_PKG_KEY]) === null || _b === void 0 ? void 0 : _b.source);
|
|
43
|
+
const output = options.output || ((_c = extensionManifest[constants_1.EXTENSION_PKG_KEY]) === null || _c === void 0 ? void 0 : _c.path);
|
|
44
|
+
if (!type || !(0, utils_1.isExtension)(type)) {
|
|
45
|
+
(0, logger_1.default)(`Extension type ${chalk_1.default.bold(type)} does not exist. Available extension types: ${constants_1.EXTENSION_TYPES.map((t) => chalk_1.default.bold.magenta(t)).join(', ')}.`, 'error');
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
if (!input || !(await fs_extra_1.default.pathExists(input)) || !(await fs_extra_1.default.stat(input)).isFile()) {
|
|
49
|
+
(0, logger_1.default)(`Entrypoint ${chalk_1.default.bold(input)} does not exist.`, 'error');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
if (!output) {
|
|
53
|
+
(0, logger_1.default)(`Output file must be a valid path.`, 'error');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const language = options.language || (0, languages_1.getLanguageFromPath)(input);
|
|
57
|
+
if (!(0, languages_1.isLanguage)(language)) {
|
|
58
|
+
(0, logger_1.default)(`Language ${chalk_1.default.bold(language)} is not supported.`, 'error');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const config = await (0, load_config_1.default)();
|
|
62
|
+
const spinner = (0, ora_1.default)('Building Directus extension...').start();
|
|
63
|
+
const rollupOptions = getRollupOptions(type, language, input, config.plugins);
|
|
64
|
+
const rollupOutputOptions = getRollupOutputOptions(type, output);
|
|
65
|
+
if (options.watch) {
|
|
66
|
+
const watcher = (0, rollup_1.watch)({
|
|
67
|
+
...rollupOptions,
|
|
68
|
+
output: rollupOutputOptions,
|
|
69
|
+
});
|
|
70
|
+
watcher.on('event', async (event) => {
|
|
71
|
+
switch (event.code) {
|
|
72
|
+
case 'ERROR': {
|
|
73
|
+
spinner.fail(chalk_1.default.bold('Failed'));
|
|
74
|
+
handleRollupError(event.error);
|
|
75
|
+
spinner.start(chalk_1.default.bold('Watching files for changes...'));
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 'BUNDLE_END':
|
|
79
|
+
await event.result.close();
|
|
80
|
+
spinner.succeed(chalk_1.default.bold('Done'));
|
|
81
|
+
spinner.start(chalk_1.default.bold('Watching files for changes...'));
|
|
82
|
+
break;
|
|
83
|
+
case 'BUNDLE_START':
|
|
84
|
+
spinner.text = 'Building Directus extension...';
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
try {
|
|
91
|
+
const bundle = await (0, rollup_1.rollup)(rollupOptions);
|
|
92
|
+
await bundle.write(rollupOutputOptions);
|
|
93
|
+
await bundle.close();
|
|
94
|
+
spinner.succeed(chalk_1.default.bold('Done'));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
spinner.fail(chalk_1.default.bold('Failed'));
|
|
98
|
+
handleRollupError(error);
|
|
99
|
+
process.exitCode = 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.default = build;
|
|
104
|
+
function getRollupOptions(type, language, input, plugins = []) {
|
|
105
|
+
if ((0, utils_1.isAppExtension)(type)) {
|
|
106
|
+
return {
|
|
107
|
+
input,
|
|
108
|
+
external: constants_1.APP_SHARED_DEPS,
|
|
109
|
+
plugins: [
|
|
110
|
+
(0, rollup_plugin_vue_1.default)({ preprocessStyles: true }),
|
|
111
|
+
language === 'typescript' ? (0, rollup_plugin_typescript2_1.default)({ check: false }) : null,
|
|
112
|
+
(0, rollup_plugin_styles_1.default)(),
|
|
113
|
+
...plugins,
|
|
114
|
+
(0, plugin_node_resolve_1.nodeResolve)({ browser: true }),
|
|
115
|
+
(0, plugin_commonjs_1.default)({ esmExternals: true, sourceMap: false }),
|
|
116
|
+
(0, plugin_json_1.default)(),
|
|
117
|
+
(0, plugin_replace_1.default)({
|
|
118
|
+
values: {
|
|
119
|
+
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
120
|
+
},
|
|
121
|
+
preventAssignment: true,
|
|
122
|
+
}),
|
|
123
|
+
(0, rollup_plugin_terser_1.terser)(),
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return {
|
|
129
|
+
input,
|
|
130
|
+
external: constants_1.API_SHARED_DEPS,
|
|
131
|
+
plugins: [
|
|
132
|
+
language === 'typescript' ? (0, rollup_plugin_typescript2_1.default)({ check: false }) : null,
|
|
133
|
+
...plugins,
|
|
134
|
+
(0, plugin_node_resolve_1.nodeResolve)(),
|
|
135
|
+
(0, plugin_commonjs_1.default)({ sourceMap: false }),
|
|
136
|
+
(0, plugin_json_1.default)(),
|
|
137
|
+
(0, plugin_replace_1.default)({
|
|
138
|
+
values: {
|
|
139
|
+
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
140
|
+
},
|
|
141
|
+
preventAssignment: true,
|
|
142
|
+
}),
|
|
143
|
+
(0, rollup_plugin_terser_1.terser)(),
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function getRollupOutputOptions(type, output) {
|
|
149
|
+
if ((0, utils_1.isAppExtension)(type)) {
|
|
150
|
+
return {
|
|
151
|
+
file: output,
|
|
152
|
+
format: 'es',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
return {
|
|
157
|
+
file: output,
|
|
158
|
+
format: 'cjs',
|
|
159
|
+
exports: 'default',
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function handleRollupError(error) {
|
|
164
|
+
const pluginPrefix = error.plugin ? `(plugin ${error.plugin}) ` : '';
|
|
165
|
+
(0, logger_1.default)('\n' + chalk_1.default.red.bold(`${pluginPrefix}${error.name}: ${error.message}`));
|
|
166
|
+
if (error.url) {
|
|
167
|
+
(0, logger_1.default)(chalk_1.default.cyan(error.url), 'error');
|
|
168
|
+
}
|
|
169
|
+
if (error.loc) {
|
|
170
|
+
(0, logger_1.default)(`${(error.loc.file || error.id)} (${error.loc.line}:${error.loc.column})`);
|
|
171
|
+
}
|
|
172
|
+
else if (error.id) {
|
|
173
|
+
(0, logger_1.default)(error.id);
|
|
174
|
+
}
|
|
175
|
+
if (error.frame) {
|
|
176
|
+
(0, logger_1.default)(chalk_1.default.dim(error.frame));
|
|
177
|
+
}
|
|
178
|
+
if (error.stack) {
|
|
179
|
+
(0, logger_1.default)(chalk_1.default.dim(error.stack));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAkBA,aAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,wBAA8B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EtG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const execa_1 = __importDefault(require("execa"));
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const constants_1 = require("@directus/shared/constants");
|
|
12
|
+
const utils_1 = require("@directus/shared/utils");
|
|
13
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
14
|
+
const languages_1 = require("../utils/languages");
|
|
15
|
+
const rename_map_1 = __importDefault(require("../utils/rename-map"));
|
|
16
|
+
const get_package_version_1 = __importDefault(require("../utils/get-package-version"));
|
|
17
|
+
const pkg = require('../../../../package.json');
|
|
18
|
+
const TEMPLATE_PATH = path_1.default.resolve(__dirname, '../../../../templates');
|
|
19
|
+
async function create(type, name, options) {
|
|
20
|
+
const targetPath = path_1.default.resolve(name);
|
|
21
|
+
if (!(0, utils_1.isExtension)(type)) {
|
|
22
|
+
(0, logger_1.default)(`Extension type ${chalk_1.default.bold(type)} does not exist. Available extension types: ${constants_1.EXTENSION_TYPES.map((t) => chalk_1.default.bold.magenta(t)).join(', ')}.`, 'error');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (await fs_extra_1.default.pathExists(targetPath)) {
|
|
26
|
+
const info = await fs_extra_1.default.stat(targetPath);
|
|
27
|
+
if (!info.isDirectory()) {
|
|
28
|
+
(0, logger_1.default)(`Destination ${chalk_1.default.bold(name)} already exists and is not a directory.`, 'error');
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const files = await fs_extra_1.default.readdir(targetPath);
|
|
32
|
+
if (files.length > 0) {
|
|
33
|
+
(0, logger_1.default)(`Destination ${chalk_1.default.bold(name)} already exists and is not empty.`, 'error');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (!(0, languages_1.isLanguage)(options.language)) {
|
|
38
|
+
(0, logger_1.default)(`Language ${chalk_1.default.bold(options.language)} is not supported. Available languages: ${constants_1.EXTENSION_LANGUAGES.map((t) => chalk_1.default.bold.magenta(t)).join(', ')}.`, 'error');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const spinner = (0, ora_1.default)(`Scaffolding Directus extension...`).start();
|
|
42
|
+
await fs_extra_1.default.ensureDir(targetPath);
|
|
43
|
+
await fs_extra_1.default.copy(path_1.default.join(TEMPLATE_PATH, 'common', options.language), targetPath);
|
|
44
|
+
await fs_extra_1.default.copy(path_1.default.join(TEMPLATE_PATH, type, options.language), targetPath);
|
|
45
|
+
await (0, rename_map_1.default)(targetPath, (name) => (name.startsWith('_') ? `.${name.substring(1)}` : null));
|
|
46
|
+
const packageManifest = {
|
|
47
|
+
name: `directus-extension-${name}`,
|
|
48
|
+
version: '1.0.0',
|
|
49
|
+
keywords: ['directus', 'directus-extension', `directus-custom-${type}`],
|
|
50
|
+
[constants_1.EXTENSION_PKG_KEY]: {
|
|
51
|
+
type,
|
|
52
|
+
path: 'dist/index.js',
|
|
53
|
+
source: `src/index.${(0, languages_1.languageToShort)(options.language)}`,
|
|
54
|
+
host: `^${pkg.version}`,
|
|
55
|
+
},
|
|
56
|
+
scripts: {
|
|
57
|
+
build: 'directus-extension build',
|
|
58
|
+
},
|
|
59
|
+
devDependencies: await getPackageDeps(type, options.language),
|
|
60
|
+
};
|
|
61
|
+
await fs_extra_1.default.writeJSON(path_1.default.join(targetPath, 'package.json'), packageManifest, { spaces: '\t' });
|
|
62
|
+
await (0, execa_1.default)('npm', ['install'], { cwd: targetPath });
|
|
63
|
+
spinner.succeed(chalk_1.default.bold('Done'));
|
|
64
|
+
(0, logger_1.default)(`
|
|
65
|
+
Your ${type} extension has been created at ${chalk_1.default.green(targetPath)}
|
|
66
|
+
|
|
67
|
+
Build your extension by running:
|
|
68
|
+
${chalk_1.default.blue('cd')} ${name}
|
|
69
|
+
${chalk_1.default.blue('npm run')} build
|
|
70
|
+
`);
|
|
71
|
+
}
|
|
72
|
+
exports.default = create;
|
|
73
|
+
async function getPackageDeps(type, language) {
|
|
74
|
+
if ((0, utils_1.isAppExtension)(type)) {
|
|
75
|
+
return {
|
|
76
|
+
'@directus/extensions-sdk': pkg.version,
|
|
77
|
+
...(language === 'typescript'
|
|
78
|
+
? {
|
|
79
|
+
typescript: `^${await (0, get_package_version_1.default)('typescript')}`,
|
|
80
|
+
}
|
|
81
|
+
: {}),
|
|
82
|
+
vue: `^${await (0, get_package_version_1.default)('vue', 'next')}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return {
|
|
87
|
+
'@directus/extensions-sdk': pkg.version,
|
|
88
|
+
...(language === 'typescript'
|
|
89
|
+
? {
|
|
90
|
+
'@types/node': `^${await (0, get_package_version_1.default)('@types/node')}`,
|
|
91
|
+
typescript: `^${await (0, get_package_version_1.default)('typescript')}`,
|
|
92
|
+
}
|
|
93
|
+
: {}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -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
|
+
exports.build = exports.create = void 0;
|
|
7
|
+
const create_1 = __importDefault(require("./commands/create"));
|
|
8
|
+
exports.create = create_1.default;
|
|
9
|
+
const build_1 = __importDefault(require("./commands/build"));
|
|
10
|
+
exports.build = build_1.default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 commander_1 = require("commander");
|
|
7
|
+
const create_1 = __importDefault(require("./commands/create"));
|
|
8
|
+
const build_1 = __importDefault(require("./commands/build"));
|
|
9
|
+
const pkg = require('../../../package.json');
|
|
10
|
+
const program = new commander_1.Command();
|
|
11
|
+
program.name('directus-extension').usage('[command] [options]');
|
|
12
|
+
program.version(pkg.version, '-v, --version');
|
|
13
|
+
program
|
|
14
|
+
.command('create')
|
|
15
|
+
.arguments('<type> <name>')
|
|
16
|
+
.description('Scaffold a new Directus extension')
|
|
17
|
+
.option('-l, --language <language>', 'specify the language to use', 'javascript')
|
|
18
|
+
.action(create_1.default);
|
|
19
|
+
program
|
|
20
|
+
.command('build')
|
|
21
|
+
.description('Bundle a Directus extension to a single entrypoint')
|
|
22
|
+
.option('-t, --type <type>', 'overwrite the extension type read from package manifest')
|
|
23
|
+
.option('-i, --input <file>', 'overwrite the entrypoint read from package manifest')
|
|
24
|
+
.option('-o, --output <file>', 'overwrite the output file read from package manifest')
|
|
25
|
+
.option('-l, --language <language>', 'overwrite the language to use')
|
|
26
|
+
.option('-f, --force', 'ignore the package manifest')
|
|
27
|
+
.option('-w, --watch', 'watch and rebuild on changes')
|
|
28
|
+
.action(build_1.default);
|
|
29
|
+
program.parse(process.argv);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,oBAAY,QAAQ,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC1D,oBAAY,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-package-version.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/get-package-version.ts"],"names":[],"mappings":"AAEA,wBAA8B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7F"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 execa_1 = __importDefault(require("execa"));
|
|
7
|
+
async function getPackageVersion(name, tag = 'latest') {
|
|
8
|
+
const npmView = await (0, execa_1.default)('npm', ['view', name, '--json']);
|
|
9
|
+
const packageInfo = JSON.parse(npmView.stdout);
|
|
10
|
+
return packageInfo['dist-tags'][tag];
|
|
11
|
+
}
|
|
12
|
+
exports.default = getPackageVersion;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Language, LanguageShort } from '../types';
|
|
2
|
+
export declare function isLanguage(language: string): language is Language;
|
|
3
|
+
export declare function languageToShort(language: Language): LanguageShort;
|
|
4
|
+
export declare function getLanguageFromPath(path: string): string;
|
|
5
|
+
//# sourceMappingURL=languages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/languages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEnD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAEjE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUxD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLanguageFromPath = exports.languageToShort = exports.isLanguage = void 0;
|
|
4
|
+
const constants_1 = require("@directus/shared/constants");
|
|
5
|
+
function isLanguage(language) {
|
|
6
|
+
return constants_1.EXTENSION_LANGUAGES.includes(language);
|
|
7
|
+
}
|
|
8
|
+
exports.isLanguage = isLanguage;
|
|
9
|
+
function languageToShort(language) {
|
|
10
|
+
if (language === 'javascript') {
|
|
11
|
+
return 'js';
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return 'ts';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.languageToShort = languageToShort;
|
|
18
|
+
function getLanguageFromPath(path) {
|
|
19
|
+
const fileExtension = path.substring(path.lastIndexOf('.') + 1);
|
|
20
|
+
if (fileExtension === 'js') {
|
|
21
|
+
return 'javascript';
|
|
22
|
+
}
|
|
23
|
+
else if (fileExtension === 'ts') {
|
|
24
|
+
return 'typescript';
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return fileExtension;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.getLanguageFromPath = getLanguageFromPath;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/load-config.ts"],"names":[],"mappings":"AAQA,wBAA8B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAUvE"}
|
|
@@ -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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const CONFIG_FILE_NAMES = ['extension.config.js', 'extension.config.mjs', 'extension.config.cjs'];
|
|
9
|
+
// This is needed to work around Typescript always transpiling import() to require() for CommonJS targets.
|
|
10
|
+
const _import = new Function('url', 'return import(url)');
|
|
11
|
+
async function loadConfig() {
|
|
12
|
+
for (const fileName of CONFIG_FILE_NAMES) {
|
|
13
|
+
if (await fs_extra_1.default.pathExists(fileName)) {
|
|
14
|
+
const configFile = await _import(path_1.default.join(process.cwd(), fileName));
|
|
15
|
+
return configFile.default;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
exports.default = loadConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/logger.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAUnF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
function log(message, type) {
|
|
9
|
+
if (type === 'info') {
|
|
10
|
+
console.log(`${chalk_1.default.bold.gray('[Info]')} ${message}`);
|
|
11
|
+
}
|
|
12
|
+
else if (type === 'warn') {
|
|
13
|
+
console.warn(`${chalk_1.default.bold.yellow('[Warn]')} ${message}`);
|
|
14
|
+
}
|
|
15
|
+
else if (type === 'error') {
|
|
16
|
+
console.error(`${chalk_1.default.bold.red('[Error]')} ${message}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.log(message);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.default = log;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-map.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/rename-map.ts"],"names":[],"mappings":"AAGA,wBAA8B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
async function renameMap(file, map) {
|
|
9
|
+
const info = await fs_extra_1.default.stat(file);
|
|
10
|
+
if (info.isFile()) {
|
|
11
|
+
const newName = map(path_1.default.basename(file));
|
|
12
|
+
if (newName !== null) {
|
|
13
|
+
fs_extra_1.default.rename(file, path_1.default.join(path_1.default.dirname(file), newName));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const subFiles = await fs_extra_1.default.readdir(file);
|
|
18
|
+
for (const subFile of subFiles) {
|
|
19
|
+
await renameMap(path_1.default.join(file, subFile), map);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = renameMap;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { defineInterface, defineDisplay, defineLayout, defineModule, defineHook, defineEndpoint, getFieldsFromTemplate, getRelationType, } from '@directus/shared/utils';
|
|
2
|
+
export { useStores, useApi, useSync, useCollection, useItems, useFilterFields } from '@directus/shared/composables';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,eAAe,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFilterFields = exports.useItems = exports.useCollection = exports.useSync = exports.useApi = exports.useStores = exports.getRelationType = exports.getFieldsFromTemplate = exports.defineEndpoint = exports.defineHook = exports.defineModule = exports.defineLayout = exports.defineDisplay = exports.defineInterface = void 0;
|
|
4
|
+
var utils_1 = require("@directus/shared/utils");
|
|
5
|
+
Object.defineProperty(exports, "defineInterface", { enumerable: true, get: function () { return utils_1.defineInterface; } });
|
|
6
|
+
Object.defineProperty(exports, "defineDisplay", { enumerable: true, get: function () { return utils_1.defineDisplay; } });
|
|
7
|
+
Object.defineProperty(exports, "defineLayout", { enumerable: true, get: function () { return utils_1.defineLayout; } });
|
|
8
|
+
Object.defineProperty(exports, "defineModule", { enumerable: true, get: function () { return utils_1.defineModule; } });
|
|
9
|
+
Object.defineProperty(exports, "defineHook", { enumerable: true, get: function () { return utils_1.defineHook; } });
|
|
10
|
+
Object.defineProperty(exports, "defineEndpoint", { enumerable: true, get: function () { return utils_1.defineEndpoint; } });
|
|
11
|
+
Object.defineProperty(exports, "getFieldsFromTemplate", { enumerable: true, get: function () { return utils_1.getFieldsFromTemplate; } });
|
|
12
|
+
Object.defineProperty(exports, "getRelationType", { enumerable: true, get: function () { return utils_1.getRelationType; } });
|
|
13
|
+
var composables_1 = require("@directus/shared/composables");
|
|
14
|
+
Object.defineProperty(exports, "useStores", { enumerable: true, get: function () { return composables_1.useStores; } });
|
|
15
|
+
Object.defineProperty(exports, "useApi", { enumerable: true, get: function () { return composables_1.useApi; } });
|
|
16
|
+
Object.defineProperty(exports, "useSync", { enumerable: true, get: function () { return composables_1.useSync; } });
|
|
17
|
+
Object.defineProperty(exports, "useCollection", { enumerable: true, get: function () { return composables_1.useCollection; } });
|
|
18
|
+
Object.defineProperty(exports, "useItems", { enumerable: true, get: function () { return composables_1.useItems; } });
|
|
19
|
+
Object.defineProperty(exports, "useFilterFields", { enumerable: true, get: function () { return composables_1.useFilterFields; } });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare type BuildOptions = {
|
|
2
|
+
type: string;
|
|
3
|
+
input: string;
|
|
4
|
+
output: string;
|
|
5
|
+
language: string;
|
|
6
|
+
force: boolean;
|
|
7
|
+
watch: boolean;
|
|
8
|
+
};
|
|
9
|
+
export default function build(options: BuildOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build.ts"],"names":[],"mappings":"AA4BA,aAAK,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtH,wBAA8B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FxE"}
|