@oak-digital/types-4-strapi-2 0.1.2 → 0.2.2
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 +9 -0
- package/.eslintrc.json +52 -0
- package/.prettierrc.json +7 -0
- package/README.md +67 -0
- package/lib/.prettierrc.json +7 -0
- package/lib/index.js +9 -4
- package/lib/interface/Attributes.d.ts +3 -3
- package/lib/interface/Attributes.js +34 -9
- package/lib/interface/BuiltinComponentInterface.d.ts +5 -0
- package/lib/interface/BuiltinComponentInterface.js +36 -0
- package/lib/interface/BuiltinInterface.d.ts +5 -0
- package/lib/interface/BuiltinInterface.js +33 -0
- package/lib/interface/ComponentInterface.d.ts +2 -1
- package/lib/interface/ComponentInterface.js +14 -3
- package/lib/interface/Interface.d.ts +4 -0
- package/lib/interface/Interface.js +4 -4
- package/lib/interface/InterfaceManager.d.ts +6 -0
- package/lib/interface/InterfaceManager.js +65 -15
- package/lib/interface/builtinInterfaces.d.ts +4 -0
- package/lib/interface/builtinInterfaces.js +73 -0
- package/lib/src/index.d.ts +1 -0
- package/lib/src/index.js +25 -0
- package/lib/src/interface/Attributes.d.ts +11 -0
- package/lib/src/interface/Attributes.js +148 -0
- package/lib/src/interface/BuiltinComponentInterface.d.ts +5 -0
- package/lib/src/interface/BuiltinComponentInterface.js +36 -0
- package/lib/src/interface/BuiltinInterface.d.ts +5 -0
- package/lib/src/interface/BuiltinInterface.js +33 -0
- package/lib/src/interface/ComponentInterface.d.ts +8 -0
- package/lib/src/interface/ComponentInterface.js +58 -0
- package/lib/src/interface/Interface.d.ts +31 -0
- package/lib/src/interface/Interface.js +112 -0
- package/lib/src/interface/InterfaceManager.d.ts +25 -0
- package/lib/src/interface/InterfaceManager.js +288 -0
- package/lib/src/interface/builtinInterfaces.d.ts +4 -0
- package/lib/src/interface/builtinInterfaces.js +81 -0
- package/lib/src/interface/schemaReader.d.ts +14 -0
- package/lib/src/interface/schemaReader.js +172 -0
- package/lib/src/utils/index.d.ts +3 -0
- package/lib/src/utils/index.js +67 -0
- package/package.json +8 -2
|
@@ -43,9 +43,11 @@ var fs_1 = require("fs");
|
|
|
43
43
|
var promises_1 = require("fs/promises");
|
|
44
44
|
var path_1 = require("path");
|
|
45
45
|
var utils_1 = require("../utils");
|
|
46
|
+
var builtinInterfaces_1 = require("./builtinInterfaces");
|
|
46
47
|
var ComponentInterface_1 = __importDefault(require("./ComponentInterface"));
|
|
47
48
|
var Interface_1 = __importDefault(require("./Interface"));
|
|
48
49
|
var schemaReader_1 = require("./schemaReader");
|
|
50
|
+
var prettier_1 = __importDefault(require("prettier"));
|
|
49
51
|
var InterfaceManager = /** @class */ (function () {
|
|
50
52
|
function InterfaceManager(outRoot, strapiSrcRoot, options) {
|
|
51
53
|
if (options === void 0) { options = {}; }
|
|
@@ -54,6 +56,28 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
54
56
|
this.StrapiSrcRoot = strapiSrcRoot;
|
|
55
57
|
this.Options = Object.assign({}, InterfaceManager.BaseOptions, options);
|
|
56
58
|
}
|
|
59
|
+
InterfaceManager.prototype.loadPrettierConfig = function () {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
61
|
+
var defaultOptions, resolved;
|
|
62
|
+
return __generator(this, function (_a) {
|
|
63
|
+
switch (_a.label) {
|
|
64
|
+
case 0:
|
|
65
|
+
defaultOptions = {
|
|
66
|
+
parser: 'typescript',
|
|
67
|
+
};
|
|
68
|
+
if (!this.Options.prettierFile) {
|
|
69
|
+
this.PrettierOptions = defaultOptions;
|
|
70
|
+
return [2 /*return*/];
|
|
71
|
+
}
|
|
72
|
+
return [4 /*yield*/, prettier_1.default.resolveConfig(this.Options.prettierFile)];
|
|
73
|
+
case 1:
|
|
74
|
+
resolved = _a.sent();
|
|
75
|
+
this.PrettierOptions = Object.assign({}, defaultOptions, resolved);
|
|
76
|
+
return [2 /*return*/];
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
};
|
|
57
81
|
InterfaceManager.prototype.createInterfaces = function () {
|
|
58
82
|
return __awaiter(this, void 0, void 0, function () {
|
|
59
83
|
var apiSchemasPromise, componentSchemasPromise, apiSchemas, componentSchemas;
|
|
@@ -69,7 +93,7 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
69
93
|
apiSchemas.forEach(function (schema) {
|
|
70
94
|
var name = schema.name, attributes = schema.attributes;
|
|
71
95
|
var strapiName = "api::".concat(name, ".").concat(name);
|
|
72
|
-
var inter = new Interface_1.default(name, attributes,
|
|
96
|
+
var inter = new Interface_1.default(name, attributes, './', _this.Options.prefix);
|
|
73
97
|
_this.Interfaces[strapiName] = inter;
|
|
74
98
|
});
|
|
75
99
|
return [4 /*yield*/, componentSchemasPromise];
|
|
@@ -80,7 +104,7 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
80
104
|
category.schemas.forEach(function (schema) {
|
|
81
105
|
var componentName = schema.name;
|
|
82
106
|
var strapiName = "".concat(categoryName, ".").concat(schema.name);
|
|
83
|
-
var componentPrefix = "".concat(_this.Options.componentPrefix).concat(_this.Options.useCategoryPrefix ? (0, utils_1.pascalCase)(categoryName) :
|
|
107
|
+
var componentPrefix = "".concat(_this.Options.componentPrefix).concat(_this.Options.useCategoryPrefix ? (0, utils_1.pascalCase)(categoryName) : '');
|
|
84
108
|
var prefix = _this.Options.componentPrefixOverridesPrefix ? componentPrefix : _this.Options.prefix + componentPrefix;
|
|
85
109
|
// TODO: make component interface
|
|
86
110
|
var inter = new ComponentInterface_1.default(componentName, schema.attributes, "./".concat(categoryName), categoryName, prefix);
|
|
@@ -92,6 +116,16 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
92
116
|
});
|
|
93
117
|
});
|
|
94
118
|
};
|
|
119
|
+
InterfaceManager.prototype.createBuiltinInterfaces = function () {
|
|
120
|
+
var _this = this;
|
|
121
|
+
var outDir = './builtins';
|
|
122
|
+
var builtinInterfaces = [];
|
|
123
|
+
builtinInterfaces.push((0, builtinInterfaces_1.createMediaInterface)(outDir, this.Options.prefix));
|
|
124
|
+
builtinInterfaces.push((0, builtinInterfaces_1.createMediaFormatInterface)(outDir, this.Options.prefix));
|
|
125
|
+
builtinInterfaces.forEach(function (inter) {
|
|
126
|
+
_this.Interfaces[inter.getStrapiName()] = inter;
|
|
127
|
+
});
|
|
128
|
+
};
|
|
95
129
|
// Inject dependencies into all interfaces
|
|
96
130
|
InterfaceManager.prototype.injectDependencies = function () {
|
|
97
131
|
var _this = this;
|
|
@@ -108,7 +142,7 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
108
142
|
};
|
|
109
143
|
InterfaceManager.prototype.makeFolders = function () {
|
|
110
144
|
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
-
var componentCategories;
|
|
145
|
+
var componentCategories, promises, componentCategoriesPromises, builtinsPath;
|
|
112
146
|
var _this = this;
|
|
113
147
|
return __generator(this, function (_a) {
|
|
114
148
|
switch (_a.label) {
|
|
@@ -122,7 +156,9 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
122
156
|
case 2:
|
|
123
157
|
_a.sent();
|
|
124
158
|
_a.label = 3;
|
|
125
|
-
case 3:
|
|
159
|
+
case 3:
|
|
160
|
+
promises = [];
|
|
161
|
+
componentCategoriesPromises = componentCategories.map(function (category) { return __awaiter(_this, void 0, void 0, function () {
|
|
126
162
|
var path;
|
|
127
163
|
return __generator(this, function (_a) {
|
|
128
164
|
switch (_a.label) {
|
|
@@ -137,7 +173,13 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
137
173
|
return [2 /*return*/];
|
|
138
174
|
}
|
|
139
175
|
});
|
|
140
|
-
}); })
|
|
176
|
+
}); });
|
|
177
|
+
promises.push.apply(promises, componentCategoriesPromises);
|
|
178
|
+
builtinsPath = (0, path_1.join)(this.OutRoot, 'builtins');
|
|
179
|
+
if (!(0, fs_1.existsSync)(builtinsPath)) {
|
|
180
|
+
promises.push((0, promises_1.mkdir)((0, path_1.join)(this.OutRoot, 'builtins')));
|
|
181
|
+
}
|
|
182
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
141
183
|
case 4:
|
|
142
184
|
_a.sent();
|
|
143
185
|
return [2 /*return*/];
|
|
@@ -153,14 +195,15 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
153
195
|
switch (_a.label) {
|
|
154
196
|
case 0:
|
|
155
197
|
writePromises = Object.keys(this.Interfaces).map(function (strapiName) { return __awaiter(_this, void 0, void 0, function () {
|
|
156
|
-
var inter, fileData, filePath;
|
|
198
|
+
var inter, fileData, formattedFileData, filePath;
|
|
157
199
|
return __generator(this, function (_a) {
|
|
158
200
|
switch (_a.label) {
|
|
159
201
|
case 0:
|
|
160
202
|
inter = this.Interfaces[strapiName];
|
|
161
203
|
fileData = inter.toString();
|
|
204
|
+
formattedFileData = prettier_1.default.format(fileData, this.PrettierOptions);
|
|
162
205
|
filePath = (0, path_1.join)(this.OutRoot, inter.getRelativeRootPathFile());
|
|
163
|
-
return [4 /*yield*/, (0, promises_1.writeFile)(filePath,
|
|
206
|
+
return [4 /*yield*/, (0, promises_1.writeFile)(filePath, formattedFileData)];
|
|
164
207
|
case 1:
|
|
165
208
|
_a.sent();
|
|
166
209
|
return [2 /*return*/];
|
|
@@ -177,7 +220,7 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
177
220
|
};
|
|
178
221
|
InterfaceManager.prototype.writeIndexFile = function () {
|
|
179
222
|
return __awaiter(this, void 0, void 0, function () {
|
|
180
|
-
var strings, fileData, filePath;
|
|
223
|
+
var strings, fileData, formattedFileData, filePath;
|
|
181
224
|
var _this = this;
|
|
182
225
|
return __generator(this, function (_a) {
|
|
183
226
|
switch (_a.label) {
|
|
@@ -186,9 +229,10 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
186
229
|
var inter = _this.Interfaces[strapiName];
|
|
187
230
|
return "export * from '".concat(inter.getRelativeRootPath(), "'");
|
|
188
231
|
});
|
|
189
|
-
fileData = strings.join(
|
|
190
|
-
|
|
191
|
-
|
|
232
|
+
fileData = strings.join('\n');
|
|
233
|
+
formattedFileData = prettier_1.default.format(fileData, this.PrettierOptions);
|
|
234
|
+
filePath = (0, path_1.join)(this.OutRoot, 'index.ts');
|
|
235
|
+
return [4 /*yield*/, (0, promises_1.writeFile)(filePath, formattedFileData)];
|
|
192
236
|
case 1:
|
|
193
237
|
_a.sent();
|
|
194
238
|
return [2 /*return*/];
|
|
@@ -198,18 +242,21 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
198
242
|
};
|
|
199
243
|
InterfaceManager.prototype.run = function () {
|
|
200
244
|
return __awaiter(this, void 0, void 0, function () {
|
|
201
|
-
var createInterfacesPromise, makeFoldersPromise, err_1;
|
|
245
|
+
var createInterfacesPromise, makeFoldersPromise, loadPrettierPromise, err_1;
|
|
202
246
|
return __generator(this, function (_a) {
|
|
203
247
|
switch (_a.label) {
|
|
204
248
|
case 0:
|
|
205
249
|
_a.trys.push([0, 4, , 5]);
|
|
206
250
|
createInterfacesPromise = this.createInterfaces();
|
|
207
251
|
makeFoldersPromise = this.makeFolders();
|
|
252
|
+
loadPrettierPromise = this.loadPrettierConfig();
|
|
253
|
+
this.createBuiltinInterfaces();
|
|
208
254
|
return [4 /*yield*/, createInterfacesPromise];
|
|
209
255
|
case 1:
|
|
210
256
|
_a.sent();
|
|
257
|
+
// Create all interfaces before injecting
|
|
211
258
|
this.injectDependencies();
|
|
212
|
-
return [4 /*yield*/, makeFoldersPromise];
|
|
259
|
+
return [4 /*yield*/, Promise.all([makeFoldersPromise, loadPrettierPromise])];
|
|
213
260
|
case 2:
|
|
214
261
|
_a.sent();
|
|
215
262
|
return [4 /*yield*/, Promise.all([this.writeInterfaces(), this.writeIndexFile()])];
|
|
@@ -226,10 +273,13 @@ var InterfaceManager = /** @class */ (function () {
|
|
|
226
273
|
});
|
|
227
274
|
};
|
|
228
275
|
InterfaceManager.BaseOptions = {
|
|
229
|
-
prefix:
|
|
276
|
+
prefix: 'I',
|
|
230
277
|
useCategoryPrefix: true,
|
|
231
|
-
componentPrefix:
|
|
278
|
+
componentPrefix: '',
|
|
232
279
|
componentPrefixOverridesPrefix: false,
|
|
280
|
+
builtinsPrefix: '',
|
|
281
|
+
builtinsPrefixOverridesPrefix: false,
|
|
282
|
+
prettierFile: null,
|
|
233
283
|
};
|
|
234
284
|
return InterfaceManager;
|
|
235
285
|
}());
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import BuiltinComponentInterface from "./BuiltinComponentInterface";
|
|
2
|
+
import BuiltinInterface from "./BuiltinInterface";
|
|
3
|
+
export declare function createMediaInterface(directory: string, prefix: string): BuiltinInterface;
|
|
4
|
+
export declare function createMediaFormatInterface(directory: string, prefix: string): BuiltinComponentInterface;
|
|
@@ -0,0 +1,73 @@
|
|
|
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.createMediaFormatInterface = exports.createMediaInterface = void 0;
|
|
7
|
+
var BuiltinComponentInterface_1 = __importDefault(require("./BuiltinComponentInterface"));
|
|
8
|
+
var BuiltinInterface_1 = __importDefault(require("./BuiltinInterface"));
|
|
9
|
+
function createMediaInterface(directory, prefix) {
|
|
10
|
+
var stringFields = [
|
|
11
|
+
"name",
|
|
12
|
+
"alternativeText",
|
|
13
|
+
"caption",
|
|
14
|
+
"hash",
|
|
15
|
+
"ext",
|
|
16
|
+
"mime",
|
|
17
|
+
"url",
|
|
18
|
+
"previewUrl",
|
|
19
|
+
"provider",
|
|
20
|
+
];
|
|
21
|
+
var numberFields = [
|
|
22
|
+
"width",
|
|
23
|
+
"height",
|
|
24
|
+
"size",
|
|
25
|
+
];
|
|
26
|
+
var mediaFormat = {
|
|
27
|
+
type: "component",
|
|
28
|
+
repeatable: false,
|
|
29
|
+
component: "builtins::MediaFormat",
|
|
30
|
+
};
|
|
31
|
+
var mediaAttrs = {
|
|
32
|
+
formats: {
|
|
33
|
+
// types-4-strapi-2 specific
|
|
34
|
+
type: "nested",
|
|
35
|
+
fields: {
|
|
36
|
+
thumbnail: mediaFormat,
|
|
37
|
+
medium: mediaFormat,
|
|
38
|
+
small: mediaFormat,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
stringFields.forEach(function (s) { return mediaAttrs[s] = { type: "string" }; });
|
|
43
|
+
numberFields.forEach(function (s) { return mediaAttrs[s] = { type: "integer" }; });
|
|
44
|
+
// const dataAttrs = {
|
|
45
|
+
// data: {
|
|
46
|
+
// type: "nested",
|
|
47
|
+
// fields: mediaAttrs,
|
|
48
|
+
// nullable: true,
|
|
49
|
+
// },
|
|
50
|
+
// };
|
|
51
|
+
return new BuiltinInterface_1.default("Media", mediaAttrs, directory, prefix);
|
|
52
|
+
}
|
|
53
|
+
exports.createMediaInterface = createMediaInterface;
|
|
54
|
+
function createMediaFormatInterface(directory, prefix) {
|
|
55
|
+
var stringFields = [
|
|
56
|
+
"name",
|
|
57
|
+
"hash",
|
|
58
|
+
"ext",
|
|
59
|
+
"mime",
|
|
60
|
+
"path",
|
|
61
|
+
"url",
|
|
62
|
+
];
|
|
63
|
+
var numberFields = [
|
|
64
|
+
"width",
|
|
65
|
+
"height",
|
|
66
|
+
"size",
|
|
67
|
+
];
|
|
68
|
+
var mediaAttrs = {};
|
|
69
|
+
stringFields.forEach(function (s) { return mediaAttrs[s] = { type: "string" }; });
|
|
70
|
+
numberFields.forEach(function (s) { return mediaAttrs[s] = { type: "integer" }; });
|
|
71
|
+
return new BuiltinComponentInterface_1.default("MediaFormat", mediaAttrs, directory, prefix);
|
|
72
|
+
}
|
|
73
|
+
exports.createMediaFormatInterface = createMediaFormatInterface;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/src/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
var commander_1 = require("commander");
|
|
7
|
+
var InterfaceManager_1 = __importDefault(require("./interface/InterfaceManager"));
|
|
8
|
+
commander_1.program
|
|
9
|
+
.name('t4s');
|
|
10
|
+
commander_1.program
|
|
11
|
+
.option('-i, --in <dir>', 'The src directory for strapi', './src')
|
|
12
|
+
.option('-o, --out <dir>', 'The output directory to output the types to', './types')
|
|
13
|
+
.option('--component-prefix <prefix>', 'A prefix for components', '')
|
|
14
|
+
.option('--prettier <file>', 'The prettier config file to use for formatting typescript interfaces');
|
|
15
|
+
commander_1.program.parse();
|
|
16
|
+
var options = commander_1.program.opts();
|
|
17
|
+
console.log(options);
|
|
18
|
+
var input = options.in, out = options.out, componentPrefix = options.componentPrefix, prettierFile = options.prettier;
|
|
19
|
+
var manager = new InterfaceManager_1.default(out, input, {
|
|
20
|
+
componentPrefix: componentPrefix,
|
|
21
|
+
prettierFile: prettierFile,
|
|
22
|
+
});
|
|
23
|
+
manager.run().catch(function (err) {
|
|
24
|
+
console.error(err);
|
|
25
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RelationNames } from './Interface';
|
|
2
|
+
export default class Attributes {
|
|
3
|
+
Attrs: Record<string, Record<string, any>>;
|
|
4
|
+
private RelationNames;
|
|
5
|
+
constructor(attr: Record<string, Record<string, any>>, relationNames: RelationNames);
|
|
6
|
+
isAttributeOptional(attr: any): boolean;
|
|
7
|
+
getDependencies(): any[];
|
|
8
|
+
attributeToString(attrName: string, attr: any): string;
|
|
9
|
+
toFieldsString(): string;
|
|
10
|
+
toString(): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var Attributes = /** @class */ (function () {
|
|
4
|
+
function Attributes(attr, relationNames) {
|
|
5
|
+
this.RelationNames = {};
|
|
6
|
+
this.Attrs = attr;
|
|
7
|
+
this.RelationNames = relationNames;
|
|
8
|
+
}
|
|
9
|
+
Attributes.prototype.isAttributeOptional = function (attr) {
|
|
10
|
+
// If it is a component / relation / dynamiczone it is always optional due to population
|
|
11
|
+
switch (attr.type) {
|
|
12
|
+
case 'nested':
|
|
13
|
+
return attr.nullable === true;
|
|
14
|
+
case 'component':
|
|
15
|
+
case 'dynamiczone':
|
|
16
|
+
case 'relation':
|
|
17
|
+
return true;
|
|
18
|
+
default:
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
};
|
|
23
|
+
Attributes.prototype.getDependencies = function () {
|
|
24
|
+
var dependencies = [];
|
|
25
|
+
for (var attrName in this.Attrs) {
|
|
26
|
+
var attr = this.Attrs[attrName];
|
|
27
|
+
var dependencyNames = [];
|
|
28
|
+
switch (attr.type) {
|
|
29
|
+
case 'nested':
|
|
30
|
+
var attrs = new Attributes(attr.fields, this.RelationNames);
|
|
31
|
+
dependencyNames.push.apply(dependencyNames, attrs.getDependencies());
|
|
32
|
+
break;
|
|
33
|
+
case 'relation':
|
|
34
|
+
dependencyNames.push(attr.target);
|
|
35
|
+
break;
|
|
36
|
+
case 'component':
|
|
37
|
+
dependencyNames.push(attr.component);
|
|
38
|
+
break;
|
|
39
|
+
case 'media':
|
|
40
|
+
dependencyNames.push('builtins::Media');
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// // If the current dependency is the interface itself, do not report it as a dependency
|
|
46
|
+
// if (dependencyName === strapiName) {
|
|
47
|
+
// continue;
|
|
48
|
+
// }
|
|
49
|
+
dependencyNames.forEach(function (dependencyName) {
|
|
50
|
+
if (!dependencies.includes(dependencyName)) {
|
|
51
|
+
dependencies.push(dependencyName);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return dependencies;
|
|
56
|
+
};
|
|
57
|
+
Attributes.prototype.attributeToString = function (attrName, attr) {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
var optionalString = this.isAttributeOptional(attr) ? '?' : '';
|
|
60
|
+
var str = " ".concat(attrName).concat(optionalString, ": ");
|
|
61
|
+
var isArray = false;
|
|
62
|
+
switch (attr.type) {
|
|
63
|
+
// types-4-strapi-2 specific, used for builtin types
|
|
64
|
+
case 'nested':
|
|
65
|
+
// Be careful with recursion
|
|
66
|
+
// console.log(attr);
|
|
67
|
+
var newAttrs = new Attributes(attr.fields, this.RelationNames);
|
|
68
|
+
str += newAttrs.toString();
|
|
69
|
+
break;
|
|
70
|
+
case 'relation':
|
|
71
|
+
var apiName = attr.target;
|
|
72
|
+
// console.log(this.RelationNames, apiName)
|
|
73
|
+
var dependencyName = this.RelationNames[apiName].name;
|
|
74
|
+
isArray = attr.relation.endsWith('ToMany');
|
|
75
|
+
str += dependencyName;
|
|
76
|
+
break;
|
|
77
|
+
case 'component':
|
|
78
|
+
var componentName = attr.component;
|
|
79
|
+
var relationNameObj = this.RelationNames[componentName];
|
|
80
|
+
var dependencyComponentName = relationNameObj.name;
|
|
81
|
+
isArray = (_a = attr.repeatable) !== null && _a !== void 0 ? _a : false;
|
|
82
|
+
str += dependencyComponentName;
|
|
83
|
+
break;
|
|
84
|
+
case 'media':
|
|
85
|
+
var mediaOptional = attr.required !== true ? '?' : '';
|
|
86
|
+
str += "{ data".concat(mediaOptional, ": ").concat(this.RelationNames['builtins::Media'].name, "; }");
|
|
87
|
+
isArray = (_b = attr.multiple) !== null && _b !== void 0 ? _b : false;
|
|
88
|
+
break;
|
|
89
|
+
case 'password':
|
|
90
|
+
return null;
|
|
91
|
+
case 'enumeration':
|
|
92
|
+
var hasDefault = 'default' in attr;
|
|
93
|
+
var enums = attr.enum.map(function (en) { return "\"".concat(en, "\""); });
|
|
94
|
+
enums.push('null');
|
|
95
|
+
var typeString = enums.join(' | ');
|
|
96
|
+
str += typeString;
|
|
97
|
+
break;
|
|
98
|
+
case 'string':
|
|
99
|
+
case 'text':
|
|
100
|
+
case 'richtext':
|
|
101
|
+
case 'email':
|
|
102
|
+
case 'uid':
|
|
103
|
+
str += 'string';
|
|
104
|
+
break;
|
|
105
|
+
case 'integer':
|
|
106
|
+
case 'biginteger':
|
|
107
|
+
case 'decimal':
|
|
108
|
+
case 'float':
|
|
109
|
+
str += 'number';
|
|
110
|
+
break;
|
|
111
|
+
case 'date':
|
|
112
|
+
case 'datetime':
|
|
113
|
+
case 'time':
|
|
114
|
+
str += 'Date';
|
|
115
|
+
break;
|
|
116
|
+
case 'boolean':
|
|
117
|
+
str += attr.type;
|
|
118
|
+
break;
|
|
119
|
+
case 'json':
|
|
120
|
+
default:
|
|
121
|
+
str += 'any';
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
var isArrayString = isArray ? '[]' : '';
|
|
125
|
+
str += "".concat(isArrayString, ";");
|
|
126
|
+
return str;
|
|
127
|
+
};
|
|
128
|
+
Attributes.prototype.toFieldsString = function () {
|
|
129
|
+
var strings = [];
|
|
130
|
+
for (var attrName in this.Attrs) {
|
|
131
|
+
var attr = this.Attrs[attrName];
|
|
132
|
+
var attrString = this.attributeToString(attrName, attr);
|
|
133
|
+
if (attrString === null) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
strings.push(attrString);
|
|
137
|
+
}
|
|
138
|
+
return strings.map(function (s) { return "".concat(s, "\n"); }).join('');
|
|
139
|
+
};
|
|
140
|
+
Attributes.prototype.toString = function () {
|
|
141
|
+
var strings = ['{'];
|
|
142
|
+
strings.push(this.toFieldsString());
|
|
143
|
+
strings.push('}');
|
|
144
|
+
return strings.join('\n');
|
|
145
|
+
};
|
|
146
|
+
return Attributes;
|
|
147
|
+
}());
|
|
148
|
+
exports.default = Attributes;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var ComponentInterface_1 = __importDefault(require("./ComponentInterface"));
|
|
22
|
+
var BuiltinComponentInterface = /** @class */ (function (_super) {
|
|
23
|
+
__extends(BuiltinComponentInterface, _super);
|
|
24
|
+
function BuiltinComponentInterface(baseName, attributes, relativeDirectoryPath, prefix) {
|
|
25
|
+
if (prefix === void 0) { prefix = ''; }
|
|
26
|
+
return _super.call(this, baseName, attributes, relativeDirectoryPath, 'builtins', prefix, {
|
|
27
|
+
hasId: false,
|
|
28
|
+
hasComponent: false,
|
|
29
|
+
}) || this;
|
|
30
|
+
}
|
|
31
|
+
BuiltinComponentInterface.prototype.updateStrapiName = function () {
|
|
32
|
+
this.StrapiName = "builtins::".concat(this.BaseName);
|
|
33
|
+
};
|
|
34
|
+
return BuiltinComponentInterface;
|
|
35
|
+
}(ComponentInterface_1.default));
|
|
36
|
+
exports.default = BuiltinComponentInterface;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var Interface_1 = __importDefault(require("./Interface"));
|
|
22
|
+
var BuiltinInterface = /** @class */ (function (_super) {
|
|
23
|
+
__extends(BuiltinInterface, _super);
|
|
24
|
+
function BuiltinInterface(baseName, attributes, relativeDirectoryPath, prefix) {
|
|
25
|
+
if (prefix === void 0) { prefix = ''; }
|
|
26
|
+
return _super.call(this, baseName, attributes, relativeDirectoryPath, prefix) || this;
|
|
27
|
+
}
|
|
28
|
+
BuiltinInterface.prototype.updateStrapiName = function () {
|
|
29
|
+
this.StrapiName = "builtins::".concat(this.BaseName);
|
|
30
|
+
};
|
|
31
|
+
return BuiltinInterface;
|
|
32
|
+
}(Interface_1.default));
|
|
33
|
+
exports.default = BuiltinInterface;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Interface from './Interface';
|
|
2
|
+
export default class ComponentInterface extends Interface {
|
|
3
|
+
protected Category: string;
|
|
4
|
+
protected Options: Record<string, any>;
|
|
5
|
+
constructor(baseName: string, attributes: any, relativeDirectoryPath: string, category: string, prefix?: string, options?: Record<string, any>);
|
|
6
|
+
updateStrapiName(): void;
|
|
7
|
+
getInterfaceFieldsString(): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var Interface_1 = __importDefault(require("./Interface"));
|
|
22
|
+
var ComponentInterface = /** @class */ (function (_super) {
|
|
23
|
+
__extends(ComponentInterface, _super);
|
|
24
|
+
function ComponentInterface(baseName, attributes, relativeDirectoryPath, category, prefix, options) {
|
|
25
|
+
if (prefix === void 0) { prefix = ''; }
|
|
26
|
+
if (options === void 0) { options = {}; }
|
|
27
|
+
var _this = _super.call(this, baseName, attributes, relativeDirectoryPath, prefix) || this;
|
|
28
|
+
_this.Options = {
|
|
29
|
+
hasId: true,
|
|
30
|
+
hasComponent: true,
|
|
31
|
+
};
|
|
32
|
+
_this.Category = category;
|
|
33
|
+
// this.Attributes.id = {
|
|
34
|
+
// type: "number", // Components have a id field with a number
|
|
35
|
+
// required: true,
|
|
36
|
+
// };
|
|
37
|
+
_this.updateStrapiName();
|
|
38
|
+
Object.assign(_this.Options, options);
|
|
39
|
+
return _this;
|
|
40
|
+
}
|
|
41
|
+
ComponentInterface.prototype.updateStrapiName = function () {
|
|
42
|
+
this.StrapiName = "".concat(this.Category, ".").concat(this.getBaseName());
|
|
43
|
+
};
|
|
44
|
+
ComponentInterface.prototype.getInterfaceFieldsString = function () {
|
|
45
|
+
var attrs = this.getAttributes();
|
|
46
|
+
var str = '';
|
|
47
|
+
var _a = this.Options, hasId = _a.hasId, hasComponent = _a.hasComponent;
|
|
48
|
+
if (hasId) {
|
|
49
|
+
str += ' id: number;\n';
|
|
50
|
+
}
|
|
51
|
+
if (hasComponent) {
|
|
52
|
+
str += " __component: \"".concat(this.getStrapiName(), "\";\n");
|
|
53
|
+
}
|
|
54
|
+
return str + attrs.toFieldsString();
|
|
55
|
+
};
|
|
56
|
+
return ComponentInterface;
|
|
57
|
+
}(Interface_1.default));
|
|
58
|
+
exports.default = ComponentInterface;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import Attributes from './Attributes';
|
|
2
|
+
export declare type RelationNames = Record<string, {
|
|
3
|
+
name: string;
|
|
4
|
+
inter: Interface;
|
|
5
|
+
}>;
|
|
6
|
+
export default class Interface {
|
|
7
|
+
protected BaseName: string;
|
|
8
|
+
private Relations;
|
|
9
|
+
private RelationNames;
|
|
10
|
+
private RelationNamesCounter;
|
|
11
|
+
private NamePrefix;
|
|
12
|
+
protected Attributes: any;
|
|
13
|
+
private RelativeDirectoryPath;
|
|
14
|
+
protected StrapiName: string;
|
|
15
|
+
constructor(baseName: string, attributes: any, relativeDirectoryPath: string, prefix?: string);
|
|
16
|
+
protected updateStrapiName(): void;
|
|
17
|
+
getBaseName(): string;
|
|
18
|
+
getStrapiName(): string;
|
|
19
|
+
getDependencies(): any[];
|
|
20
|
+
getFullInterfaceName(): string;
|
|
21
|
+
getRelativeRootPath(): any;
|
|
22
|
+
getRelativeRootDir(): string;
|
|
23
|
+
getRelativeRootPathFile(): string;
|
|
24
|
+
setRelations(relations: Interface[]): void;
|
|
25
|
+
private getTsImports;
|
|
26
|
+
getAttributes(): Attributes;
|
|
27
|
+
attributesToString(): string;
|
|
28
|
+
getInerfaceString(): string;
|
|
29
|
+
getInterfaceFieldsString(): string;
|
|
30
|
+
toString(): string;
|
|
31
|
+
}
|