Skip to content

Commit 5cef3c1

Browse files
authored
Add behaviors/objects/functions details in ExtensionShortHeader (reviewed tier) (#1617)
1 parent 9f5f2ab commit 5cef3c1

File tree

3 files changed

+148
-24
lines changed

3 files changed

+148
-24
lines changed

scripts/generate-extensions-registry.js

Lines changed: 108 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ const args = require('minimist')(process.argv.slice(2));
1616
/** @typedef {import('./types').ExtensionWithFileInfo} ExtensionWithFileInfo */
1717
/** @typedef {import('./types').ExtensionTier} ExtensionTier */
1818
/** @typedef {import('./types').Extension} Extension */
19+
/** @typedef {import('./types').EventsBasedObject} EventsBasedObject */
20+
/** @typedef {import('./types').EventsBasedObjectInsideExtensionShortHeader} EventsBasedObjectInsideExtensionShortHeader */
1921
/** @typedef {import('./types').EventsBasedBehavior} EventsBasedBehavior */
22+
/** @typedef {import('./types').EventsBasedBehaviorInsideExtensionShortHeader} EventsBasedBehaviorInsideExtensionShortHeader */
23+
/** @typedef {import('./types').EventsFunction} EventsFunction */
24+
/** @typedef {import('./types').EventsFunctionInsideExtensionShortHeader} EventsFunctionInsideExtensionShortHeader */
2025

2126
const extensionsBasePath = path.join(__dirname, '..', 'extensions');
2227
const reviewedExtensionsTier = 'reviewed';
@@ -130,6 +135,70 @@ const findAllRequiredBehaviorTypes = (
130135
return requiredBehaviorTypes;
131136
};
132137

138+
/**
139+
* @param {EventsFunction} eventFunction
140+
* @returns {EventsFunctionInsideExtensionShortHeader}
141+
*/
142+
const formatEventFunctionInsideExtensionShortHeader = (eventFunction) => {
143+
// TODO: Empty fullname => remove.
144+
return {
145+
description: eventFunction.description,
146+
fullName: eventFunction.fullName,
147+
functionType: eventFunction.functionType,
148+
name: eventFunction.name,
149+
};
150+
};
151+
152+
/**
153+
* @param {EventsBasedBehavior} eventsBasedBehavior
154+
* @returns {EventsBasedBehaviorInsideExtensionShortHeader}
155+
*/
156+
const formatEventsBasedBehaviorInsideExtensionShortHeader = (
157+
eventsBasedBehavior
158+
) => {
159+
return {
160+
description: eventsBasedBehavior.description,
161+
fullName: eventsBasedBehavior.fullName,
162+
name: eventsBasedBehavior.name,
163+
objectType: eventsBasedBehavior.objectType,
164+
eventsFunctions: filterEventsFunctions(
165+
eventsBasedBehavior.eventsFunctions
166+
).map(formatEventFunctionInsideExtensionShortHeader),
167+
};
168+
};
169+
170+
/**
171+
* @param {EventsBasedObject} eventsBasedObject
172+
* @returns {EventsBasedObjectInsideExtensionShortHeader}
173+
*/
174+
const formatEventsBasedObjectInsideExtensionShortHeader = (
175+
eventsBasedObject
176+
) => {
177+
return {
178+
description: eventsBasedObject.description,
179+
fullName: eventsBasedObject.fullName,
180+
name: eventsBasedObject.name,
181+
defaultName: eventsBasedObject.defaultName,
182+
eventsFunctions: filterEventsFunctions(
183+
eventsBasedObject.eventsFunctions
184+
).map(formatEventFunctionInsideExtensionShortHeader),
185+
};
186+
};
187+
188+
/** @param {Array<EventsBasedBehavior>} behaviors */
189+
const filterEventsBasedBehaviors = (behaviors) =>
190+
behaviors.filter((behavior) => !behavior.private);
191+
192+
/** @param {Array<EventsBasedObject>} objects */
193+
const filterEventsBasedObjects = (objects) =>
194+
objects.filter((object) => !object.private);
195+
196+
/** @param {Array<EventsFunction>} eventsFunctions */
197+
const filterEventsFunctions = (eventsFunctions) =>
198+
eventsFunctions.filter(
199+
(eventFunction) => !eventFunction.fullName || eventFunction.private
200+
);
201+
133202
(async () => {
134203
try {
135204
shell.mkdir('-p', distBasePath);
@@ -235,16 +304,39 @@ const findAllRequiredBehaviorTypes = (
235304
gdevelopVersion: extension.gdevelopVersion,
236305
};
237306

307+
// Some part of the extension are filtered if private or internal.
308+
const eventsBasedBehaviors = filterEventsBasedBehaviors(
309+
extension.eventsBasedBehaviors
310+
);
311+
const eventsFunctions = filterEventsFunctions(
312+
extension.eventsFunctions
313+
);
314+
const eventsBasedObjects = filterEventsBasedObjects(
315+
extension.eventsBasedObjects || []
316+
);
317+
238318
/** @type {ExtensionShortHeader} */
239319
const extensionShortHeader = {
240320
...registryItem,
241321
shortDescription: extension.shortDescription,
242322
fullName: extension.fullName,
243323
name,
244-
eventsBasedBehaviorsCount: extension.eventsBasedBehaviors.length,
245-
eventsFunctionsCount: extension.eventsFunctions.length,
324+
eventsBasedBehaviorsCount: eventsBasedBehaviors.length,
325+
eventsFunctionsCount: eventsFunctions.length,
246326
};
247327

328+
if (tier === 'reviewed') {
329+
extensionShortHeader.eventsBasedBehaviors = eventsBasedBehaviors.map(
330+
formatEventsBasedBehaviorInsideExtensionShortHeader
331+
);
332+
extensionShortHeader.eventsFunctions = eventsFunctions.map(
333+
formatEventFunctionInsideExtensionShortHeader
334+
);
335+
extensionShortHeader.eventsBasedObjects = eventsBasedObjects.map(
336+
formatEventsBasedObjectInsideExtensionShortHeader
337+
);
338+
}
339+
248340
extensionShortHeaders.push(extensionShortHeader);
249341

250342
/** @type {ExtensionHeader} */
@@ -260,24 +352,20 @@ const findAllRequiredBehaviorTypes = (
260352
/** @type {Array<BehaviorShortHeader>} */
261353
behaviorShortHeaders.push.apply(
262354
behaviorShortHeaders,
263-
extension.eventsBasedBehaviors
264-
.map((behavior) =>
265-
behavior.private
266-
? null
267-
: {
268-
...registryItem,
269-
extensionName: name,
270-
name: behavior.name,
271-
fullName: behavior.fullName,
272-
description: behavior.description,
273-
objectType: behavior.objectType,
274-
allRequiredBehaviorTypes: findAllRequiredBehaviorTypes(
275-
extension,
276-
behavior
277-
),
278-
}
279-
)
280-
.filter(Boolean)
355+
filterEventsBasedBehaviors(extension.eventsBasedBehaviors).map(
356+
(behavior) => ({
357+
...registryItem,
358+
extensionName: name,
359+
name: behavior.name,
360+
fullName: behavior.fullName,
361+
description: behavior.description,
362+
objectType: behavior.objectType,
363+
allRequiredBehaviorTypes: findAllRequiredBehaviorTypes(
364+
extension,
365+
behavior
366+
),
367+
})
368+
)
281369
);
282370

283371
/** @type {Array<ObjectShortHeader>} */

scripts/lib/rules/FilledOutDescriptions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/** @typedef {import("../../types").Extension} Extension */
22
/** @typedef {import("../../types").EventsFunction} EventsFunction */
33
/** @typedef {import("../../types").EventsBasedBehavior} EventsBasedBehaviors */
4-
/** @typedef {import("../../types").EventsBasedObjects} EventsBasedObjects */
4+
/** @typedef {import("../../types").EventsBasedObject} EventsBasedObject */
55
/** @typedef {import("../../types").Parameter} Parameter */
66

77
/**
@@ -18,7 +18,7 @@ const NECESSARY_FIELDS = {
1818
ACTION_WITH_OPERATOR: ['name', 'getterName'],
1919
/** @type {Partial<keyof EventsBasedBehaviors>[]} */
2020
BEHAVIOR: ['name', 'fullName', 'description'],
21-
/** @type {Partial<keyof EventsBasedObjects>[]} */
21+
/** @type {Partial<keyof EventsBasedObject>[]} */
2222
OBJECT: ['name', 'fullName', 'description'],
2323
/** @type {Partial<keyof Parameter>[]} */
2424
PARAMETER: ['description', 'name', 'type'],

scripts/types.d.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,49 @@ interface ExtensionAndHeaderFields {
3131
iconUrl: string;
3232
}
3333

34+
export interface EventsFunctionInsideExtensionShortHeader {
35+
description: string;
36+
fullName: string;
37+
functionType:
38+
| 'StringExpression'
39+
| 'Expression'
40+
| 'Action'
41+
| 'Condition'
42+
| 'ExpressionAndCondition'
43+
| 'ActionWithOperator';
44+
name: string;
45+
}
46+
47+
export interface EventsBasedBehaviorInsideExtensionShortHeader {
48+
description: string;
49+
fullName: string;
50+
name: string;
51+
objectType: string;
52+
eventsFunctions: EventsFunctionInsideExtensionShortHeader[];
53+
}
54+
55+
export interface EventsBasedObjectInsideExtensionShortHeader {
56+
description: string;
57+
fullName: string;
58+
name: string;
59+
defaultName: string;
60+
eventsFunctions: EventsFunctionInsideExtensionShortHeader[];
61+
}
62+
3463
export interface ExtensionShortHeader
3564
extends RegistryItem,
3665
ExtensionAndShortHeaderFields {
3766
tier: ExtensionTier;
3867
url: string;
3968
headerUrl: string;
69+
/** Only defined for "reviewed" extensions. */
70+
eventsBasedBehaviors?: EventsBasedBehaviorInsideExtensionShortHeader[];
4071
eventsBasedBehaviorsCount: number;
72+
/** Only defined for "reviewed" extensions. */
73+
eventsFunctions?: EventsFunctionInsideExtensionShortHeader[];
4174
eventsFunctionsCount: number;
75+
/** Only defined for "reviewed" extensions. */
76+
eventsBasedObjects?: EventsBasedObjectInsideExtensionShortHeader[];
4277
}
4378

4479
interface BehaviorAndShortHeaderFields {
@@ -167,11 +202,12 @@ export interface EventsBasedBehavior {
167202
propertyDescriptors: PropertyDescriptor[];
168203
}
169204

170-
export interface EventsBasedObjects {
205+
export interface EventsBasedObject {
171206
description: string;
172207
fullName: string;
173208
name: string;
174209
defaultName: string;
210+
private?: boolean;
175211
eventsFunctions: EventsFunction[];
176212
}
177213

@@ -181,7 +217,7 @@ export interface Extension
181217
tags: string | string[];
182218
eventsFunctions: EventsFunction[];
183219
eventsBasedBehaviors: EventsBasedBehavior[];
184-
eventsBasedObjects?: EventsBasedObjects[];
220+
eventsBasedObjects?: EventsBasedObject[];
185221
}
186222

187223
export interface ExtensionWithProperFileInfo {

0 commit comments

Comments
 (0)