@strapi/plugin-documentation 5.53.0 → 5.55.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/server/services/helpers/utils/clean-schema-attributes.js +18 -6
- package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -1
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +18 -6
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs.map +1 -1
- package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -20,6 +20,7 @@ var pascalCase = require('./pascal-case.js');
|
|
|
20
20
|
* @returns Attributes using OpenAPI acceptable data types
|
|
21
21
|
*/ const cleanSchemaAttributes = (attributes, { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas })=>{
|
|
22
22
|
const schemaAttributes = {};
|
|
23
|
+
const relationTargetCache = new Map();
|
|
23
24
|
for (const prop of Object.keys(attributes)){
|
|
24
25
|
const attribute = attributes[prop];
|
|
25
26
|
switch(attribute.type){
|
|
@@ -292,13 +293,24 @@ var pascalCase = require('./pascal-case.js');
|
|
|
292
293
|
schemaAttributes[prop] = getSchemaData(isListOfEntities, {});
|
|
293
294
|
break;
|
|
294
295
|
}
|
|
296
|
+
const cachedTargetAttributes = relationTargetCache.get(attribute.target);
|
|
297
|
+
if (cachedTargetAttributes) {
|
|
298
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cachedTargetAttributes);
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
295
301
|
typeMap.set(attribute.target, true);
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
+
try {
|
|
303
|
+
const targetAttributes = strapi.contentType(attribute.target).attributes;
|
|
304
|
+
const cleanedTargetAttributes = cleanSchemaAttributes(targetAttributes, {
|
|
305
|
+
typeMap,
|
|
306
|
+
isRequest,
|
|
307
|
+
didAddStrapiComponentsToSchemas
|
|
308
|
+
});
|
|
309
|
+
relationTargetCache.set(attribute.target, cleanedTargetAttributes);
|
|
310
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanedTargetAttributes);
|
|
311
|
+
} finally{
|
|
312
|
+
typeMap.delete(attribute.target);
|
|
313
|
+
}
|
|
302
314
|
break;
|
|
303
315
|
}
|
|
304
316
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean-schema-attributes.js","sources":["../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport getSchemaData from './get-schema-data';\nimport pascalCase from './pascal-case';\n\ninterface Options {\n typeMap?: Map<string, boolean>;\n isRequest?: boolean;\n didAddStrapiComponentsToSchemas: (name: string, schema: object) => boolean;\n}\n\n/**\n * @description - Convert attribute component names to OpenAPI component names\n *\n * @returns OpenAPI component name\n */\nconst convertComponentName = (component: string, isRef = false): string => {\n const cleanComponentName = `${pascalCase(component)}Component`;\n\n if (isRef) {\n return `#/components/schemas/${cleanComponentName}`;\n }\n return cleanComponentName;\n};\n\n/**\n * @description - Converts types found on attributes to OpenAPI acceptable data types\n *\n * @returns Attributes using OpenAPI acceptable data types\n */\nconst cleanSchemaAttributes = (\n attributes: Struct.SchemaAttributes,\n { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas }: Options\n): Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> => {\n const schemaAttributes: Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> = {};\n\n for (const prop of Object.keys(attributes)) {\n const attribute = attributes[prop];\n\n switch (attribute.type) {\n case 'password': {\n if (!isRequest) {\n break;\n }\n\n schemaAttributes[prop] = { type: 'string', format: 'password', example: '*******' };\n break;\n }\n case 'email': {\n schemaAttributes[prop] = { type: 'string', format: 'email' };\n break;\n }\n case 'string':\n case 'text':\n case 'richtext': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'timestamp': {\n schemaAttributes[prop] = { type: 'string', format: 'timestamp', example: Date.now() };\n break;\n }\n case 'time': {\n schemaAttributes[prop] = { type: 'string', format: 'time', example: '12:54.000' };\n break;\n }\n case 'date': {\n schemaAttributes[prop] = { type: 'string', format: 'date' };\n break;\n }\n case 'datetime': {\n schemaAttributes[prop] = { type: 'string', format: 'date-time' };\n break;\n }\n case 'boolean': {\n schemaAttributes[prop] = { type: 'boolean' };\n break;\n }\n case 'enumeration': {\n schemaAttributes[prop] = { type: 'string', enum: [...attribute.enum] };\n break;\n }\n case 'decimal':\n case 'float': {\n schemaAttributes[prop] = { type: 'number', format: 'float' };\n break;\n }\n case 'integer': {\n schemaAttributes[prop] = { type: 'integer' };\n break;\n }\n case 'biginteger': {\n schemaAttributes[prop] = { type: 'string', pattern: '^\\\\d*$', example: '123456789' };\n break;\n }\n case 'json':\n case 'blocks': {\n schemaAttributes[prop] = {};\n break;\n }\n case 'uid': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'component': {\n const componentAttributes = strapi.components[attribute.component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(attribute.component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(attribute.component),\n rawComponentSchema\n );\n\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n if (attribute.repeatable) {\n schemaAttributes[prop] = {\n type: 'array',\n items: finalComponentSchema,\n };\n } else {\n schemaAttributes[prop] = finalComponentSchema;\n }\n break;\n }\n case 'dynamiczone': {\n const components = attribute.components.map((component) => {\n const componentAttributes = strapi.components[component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n __component: { type: 'string', enum: [component] },\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(component),\n rawComponentSchema\n );\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n return finalComponentSchema;\n });\n let discriminator: OpenAPIV3.DiscriminatorObject | undefined;\n if (components.every((component) => Object.hasOwn(component, '$ref'))) {\n discriminator = {\n propertyName: '__component',\n mapping: attribute.components.reduce(\n (acc, component) => {\n acc[component] = convertComponentName(component, true);\n return acc;\n },\n {} as {\n [value: string]: string;\n }\n ),\n };\n }\n\n schemaAttributes[prop] = {\n type: 'array',\n items: {\n anyOf: components,\n },\n discriminator,\n };\n break;\n }\n case 'media': {\n const imageAttributes = strapi.contentType('plugin::upload.file').attributes;\n const isListOfEntities = attribute.multiple ?? false;\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(imageAttributes, { typeMap, didAddStrapiComponentsToSchemas })\n );\n break;\n }\n\n case 'relation': {\n const isListOfEntities = attribute.relation.includes('ToMany');\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, {});\n\n break;\n }\n\n typeMap.set(attribute.target, true);\n const targetAttributes = strapi.contentType(attribute.target).attributes;\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(targetAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n })\n );\n\n break;\n }\n default: {\n // @ts-expect-error - This is a catch all for any other types\n throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);\n }\n }\n }\n\n return schemaAttributes;\n};\n\nexport default cleanSchemaAttributes;\n"],"names":["convertComponentName","component","isRef","cleanComponentName","pascalCase","cleanSchemaAttributes","attributes","typeMap","Map","isRequest","didAddStrapiComponentsToSchemas","schemaAttributes","prop","Object","keys","attribute","type","format","example","Date","now","enum","pattern","componentAttributes","strapi","components","rawComponentSchema","properties","id","oneOf","refComponentSchema","$ref","componentExists","finalComponentSchema","repeatable","items","map","__component","discriminator","every","hasOwn","propertyName","mapping","reduce","acc","anyOf","imageAttributes","contentType","isListOfEntities","multiple","oneOfType","getSchemaData","relation","includes","target","has","set","targetAttributes","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clean-schema-attributes.js","sources":["../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport getSchemaData from './get-schema-data';\nimport pascalCase from './pascal-case';\n\ninterface Options {\n typeMap?: Map<string, boolean>;\n isRequest?: boolean;\n didAddStrapiComponentsToSchemas: (name: string, schema: object) => boolean;\n}\n\n/**\n * @description - Convert attribute component names to OpenAPI component names\n *\n * @returns OpenAPI component name\n */\nconst convertComponentName = (component: string, isRef = false): string => {\n const cleanComponentName = `${pascalCase(component)}Component`;\n\n if (isRef) {\n return `#/components/schemas/${cleanComponentName}`;\n }\n return cleanComponentName;\n};\n\n/**\n * @description - Converts types found on attributes to OpenAPI acceptable data types\n *\n * @returns Attributes using OpenAPI acceptable data types\n */\nconst cleanSchemaAttributes = (\n attributes: Struct.SchemaAttributes,\n { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas }: Options\n): Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> => {\n const schemaAttributes: Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> = {};\n const relationTargetCache = new Map<\n string,\n Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject>\n >();\n\n for (const prop of Object.keys(attributes)) {\n const attribute = attributes[prop];\n\n switch (attribute.type) {\n case 'password': {\n if (!isRequest) {\n break;\n }\n\n schemaAttributes[prop] = { type: 'string', format: 'password', example: '*******' };\n break;\n }\n case 'email': {\n schemaAttributes[prop] = { type: 'string', format: 'email' };\n break;\n }\n case 'string':\n case 'text':\n case 'richtext': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'timestamp': {\n schemaAttributes[prop] = { type: 'string', format: 'timestamp', example: Date.now() };\n break;\n }\n case 'time': {\n schemaAttributes[prop] = { type: 'string', format: 'time', example: '12:54.000' };\n break;\n }\n case 'date': {\n schemaAttributes[prop] = { type: 'string', format: 'date' };\n break;\n }\n case 'datetime': {\n schemaAttributes[prop] = { type: 'string', format: 'date-time' };\n break;\n }\n case 'boolean': {\n schemaAttributes[prop] = { type: 'boolean' };\n break;\n }\n case 'enumeration': {\n schemaAttributes[prop] = { type: 'string', enum: [...attribute.enum] };\n break;\n }\n case 'decimal':\n case 'float': {\n schemaAttributes[prop] = { type: 'number', format: 'float' };\n break;\n }\n case 'integer': {\n schemaAttributes[prop] = { type: 'integer' };\n break;\n }\n case 'biginteger': {\n schemaAttributes[prop] = { type: 'string', pattern: '^\\\\d*$', example: '123456789' };\n break;\n }\n case 'json':\n case 'blocks': {\n schemaAttributes[prop] = {};\n break;\n }\n case 'uid': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'component': {\n const componentAttributes = strapi.components[attribute.component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(attribute.component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(attribute.component),\n rawComponentSchema\n );\n\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n if (attribute.repeatable) {\n schemaAttributes[prop] = {\n type: 'array',\n items: finalComponentSchema,\n };\n } else {\n schemaAttributes[prop] = finalComponentSchema;\n }\n break;\n }\n case 'dynamiczone': {\n const components = attribute.components.map((component) => {\n const componentAttributes = strapi.components[component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n __component: { type: 'string', enum: [component] },\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(component),\n rawComponentSchema\n );\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n return finalComponentSchema;\n });\n let discriminator: OpenAPIV3.DiscriminatorObject | undefined;\n if (components.every((component) => Object.hasOwn(component, '$ref'))) {\n discriminator = {\n propertyName: '__component',\n mapping: attribute.components.reduce(\n (acc, component) => {\n acc[component] = convertComponentName(component, true);\n return acc;\n },\n {} as {\n [value: string]: string;\n }\n ),\n };\n }\n\n schemaAttributes[prop] = {\n type: 'array',\n items: {\n anyOf: components,\n },\n discriminator,\n };\n break;\n }\n case 'media': {\n const imageAttributes = strapi.contentType('plugin::upload.file').attributes;\n const isListOfEntities = attribute.multiple ?? false;\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(imageAttributes, { typeMap, didAddStrapiComponentsToSchemas })\n );\n break;\n }\n\n case 'relation': {\n const isListOfEntities = attribute.relation.includes('ToMany');\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, {});\n\n break;\n }\n\n const cachedTargetAttributes = relationTargetCache.get(attribute.target);\n if (cachedTargetAttributes) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, cachedTargetAttributes);\n\n break;\n }\n\n typeMap.set(attribute.target, true);\n try {\n const targetAttributes = strapi.contentType(attribute.target).attributes;\n const cleanedTargetAttributes = cleanSchemaAttributes(targetAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n });\n\n relationTargetCache.set(attribute.target, cleanedTargetAttributes);\n schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanedTargetAttributes);\n } finally {\n typeMap.delete(attribute.target);\n }\n\n break;\n }\n default: {\n // @ts-expect-error - This is a catch all for any other types\n throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);\n }\n }\n }\n\n return schemaAttributes;\n};\n\nexport default cleanSchemaAttributes;\n"],"names":["convertComponentName","component","isRef","cleanComponentName","pascalCase","cleanSchemaAttributes","attributes","typeMap","Map","isRequest","didAddStrapiComponentsToSchemas","schemaAttributes","relationTargetCache","prop","Object","keys","attribute","type","format","example","Date","now","enum","pattern","componentAttributes","strapi","components","rawComponentSchema","properties","id","oneOf","refComponentSchema","$ref","componentExists","finalComponentSchema","repeatable","items","map","__component","discriminator","every","hasOwn","propertyName","mapping","reduce","acc","anyOf","imageAttributes","contentType","isListOfEntities","multiple","oneOfType","getSchemaData","relation","includes","target","has","cachedTargetAttributes","get","set","targetAttributes","cleanedTargetAttributes","delete","Error"],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ import pascalCase from './pascal-case.mjs';
|
|
|
18
18
|
* @returns Attributes using OpenAPI acceptable data types
|
|
19
19
|
*/ const cleanSchemaAttributes = (attributes, { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas })=>{
|
|
20
20
|
const schemaAttributes = {};
|
|
21
|
+
const relationTargetCache = new Map();
|
|
21
22
|
for (const prop of Object.keys(attributes)){
|
|
22
23
|
const attribute = attributes[prop];
|
|
23
24
|
switch(attribute.type){
|
|
@@ -290,13 +291,24 @@ import pascalCase from './pascal-case.mjs';
|
|
|
290
291
|
schemaAttributes[prop] = getSchemaData(isListOfEntities, {});
|
|
291
292
|
break;
|
|
292
293
|
}
|
|
294
|
+
const cachedTargetAttributes = relationTargetCache.get(attribute.target);
|
|
295
|
+
if (cachedTargetAttributes) {
|
|
296
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cachedTargetAttributes);
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
293
299
|
typeMap.set(attribute.target, true);
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
+
try {
|
|
301
|
+
const targetAttributes = strapi.contentType(attribute.target).attributes;
|
|
302
|
+
const cleanedTargetAttributes = cleanSchemaAttributes(targetAttributes, {
|
|
303
|
+
typeMap,
|
|
304
|
+
isRequest,
|
|
305
|
+
didAddStrapiComponentsToSchemas
|
|
306
|
+
});
|
|
307
|
+
relationTargetCache.set(attribute.target, cleanedTargetAttributes);
|
|
308
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanedTargetAttributes);
|
|
309
|
+
} finally{
|
|
310
|
+
typeMap.delete(attribute.target);
|
|
311
|
+
}
|
|
300
312
|
break;
|
|
301
313
|
}
|
|
302
314
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean-schema-attributes.mjs","sources":["../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport getSchemaData from './get-schema-data';\nimport pascalCase from './pascal-case';\n\ninterface Options {\n typeMap?: Map<string, boolean>;\n isRequest?: boolean;\n didAddStrapiComponentsToSchemas: (name: string, schema: object) => boolean;\n}\n\n/**\n * @description - Convert attribute component names to OpenAPI component names\n *\n * @returns OpenAPI component name\n */\nconst convertComponentName = (component: string, isRef = false): string => {\n const cleanComponentName = `${pascalCase(component)}Component`;\n\n if (isRef) {\n return `#/components/schemas/${cleanComponentName}`;\n }\n return cleanComponentName;\n};\n\n/**\n * @description - Converts types found on attributes to OpenAPI acceptable data types\n *\n * @returns Attributes using OpenAPI acceptable data types\n */\nconst cleanSchemaAttributes = (\n attributes: Struct.SchemaAttributes,\n { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas }: Options\n): Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> => {\n const schemaAttributes: Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> = {};\n\n for (const prop of Object.keys(attributes)) {\n const attribute = attributes[prop];\n\n switch (attribute.type) {\n case 'password': {\n if (!isRequest) {\n break;\n }\n\n schemaAttributes[prop] = { type: 'string', format: 'password', example: '*******' };\n break;\n }\n case 'email': {\n schemaAttributes[prop] = { type: 'string', format: 'email' };\n break;\n }\n case 'string':\n case 'text':\n case 'richtext': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'timestamp': {\n schemaAttributes[prop] = { type: 'string', format: 'timestamp', example: Date.now() };\n break;\n }\n case 'time': {\n schemaAttributes[prop] = { type: 'string', format: 'time', example: '12:54.000' };\n break;\n }\n case 'date': {\n schemaAttributes[prop] = { type: 'string', format: 'date' };\n break;\n }\n case 'datetime': {\n schemaAttributes[prop] = { type: 'string', format: 'date-time' };\n break;\n }\n case 'boolean': {\n schemaAttributes[prop] = { type: 'boolean' };\n break;\n }\n case 'enumeration': {\n schemaAttributes[prop] = { type: 'string', enum: [...attribute.enum] };\n break;\n }\n case 'decimal':\n case 'float': {\n schemaAttributes[prop] = { type: 'number', format: 'float' };\n break;\n }\n case 'integer': {\n schemaAttributes[prop] = { type: 'integer' };\n break;\n }\n case 'biginteger': {\n schemaAttributes[prop] = { type: 'string', pattern: '^\\\\d*$', example: '123456789' };\n break;\n }\n case 'json':\n case 'blocks': {\n schemaAttributes[prop] = {};\n break;\n }\n case 'uid': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'component': {\n const componentAttributes = strapi.components[attribute.component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(attribute.component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(attribute.component),\n rawComponentSchema\n );\n\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n if (attribute.repeatable) {\n schemaAttributes[prop] = {\n type: 'array',\n items: finalComponentSchema,\n };\n } else {\n schemaAttributes[prop] = finalComponentSchema;\n }\n break;\n }\n case 'dynamiczone': {\n const components = attribute.components.map((component) => {\n const componentAttributes = strapi.components[component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n __component: { type: 'string', enum: [component] },\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(component),\n rawComponentSchema\n );\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n return finalComponentSchema;\n });\n let discriminator: OpenAPIV3.DiscriminatorObject | undefined;\n if (components.every((component) => Object.hasOwn(component, '$ref'))) {\n discriminator = {\n propertyName: '__component',\n mapping: attribute.components.reduce(\n (acc, component) => {\n acc[component] = convertComponentName(component, true);\n return acc;\n },\n {} as {\n [value: string]: string;\n }\n ),\n };\n }\n\n schemaAttributes[prop] = {\n type: 'array',\n items: {\n anyOf: components,\n },\n discriminator,\n };\n break;\n }\n case 'media': {\n const imageAttributes = strapi.contentType('plugin::upload.file').attributes;\n const isListOfEntities = attribute.multiple ?? false;\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(imageAttributes, { typeMap, didAddStrapiComponentsToSchemas })\n );\n break;\n }\n\n case 'relation': {\n const isListOfEntities = attribute.relation.includes('ToMany');\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, {});\n\n break;\n }\n\n typeMap.set(attribute.target, true);\n const targetAttributes = strapi.contentType(attribute.target).attributes;\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(targetAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n })\n );\n\n break;\n }\n default: {\n // @ts-expect-error - This is a catch all for any other types\n throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);\n }\n }\n }\n\n return schemaAttributes;\n};\n\nexport default cleanSchemaAttributes;\n"],"names":["convertComponentName","component","isRef","cleanComponentName","pascalCase","cleanSchemaAttributes","attributes","typeMap","Map","isRequest","didAddStrapiComponentsToSchemas","schemaAttributes","prop","Object","keys","attribute","type","format","example","Date","now","enum","pattern","componentAttributes","strapi","components","rawComponentSchema","properties","id","oneOf","refComponentSchema","$ref","componentExists","finalComponentSchema","repeatable","items","map","__component","discriminator","every","hasOwn","propertyName","mapping","reduce","acc","anyOf","imageAttributes","contentType","isListOfEntities","multiple","oneOfType","getSchemaData","relation","includes","target","has","set","targetAttributes","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clean-schema-attributes.mjs","sources":["../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport getSchemaData from './get-schema-data';\nimport pascalCase from './pascal-case';\n\ninterface Options {\n typeMap?: Map<string, boolean>;\n isRequest?: boolean;\n didAddStrapiComponentsToSchemas: (name: string, schema: object) => boolean;\n}\n\n/**\n * @description - Convert attribute component names to OpenAPI component names\n *\n * @returns OpenAPI component name\n */\nconst convertComponentName = (component: string, isRef = false): string => {\n const cleanComponentName = `${pascalCase(component)}Component`;\n\n if (isRef) {\n return `#/components/schemas/${cleanComponentName}`;\n }\n return cleanComponentName;\n};\n\n/**\n * @description - Converts types found on attributes to OpenAPI acceptable data types\n *\n * @returns Attributes using OpenAPI acceptable data types\n */\nconst cleanSchemaAttributes = (\n attributes: Struct.SchemaAttributes,\n { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas }: Options\n): Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> => {\n const schemaAttributes: Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> = {};\n const relationTargetCache = new Map<\n string,\n Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject>\n >();\n\n for (const prop of Object.keys(attributes)) {\n const attribute = attributes[prop];\n\n switch (attribute.type) {\n case 'password': {\n if (!isRequest) {\n break;\n }\n\n schemaAttributes[prop] = { type: 'string', format: 'password', example: '*******' };\n break;\n }\n case 'email': {\n schemaAttributes[prop] = { type: 'string', format: 'email' };\n break;\n }\n case 'string':\n case 'text':\n case 'richtext': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'timestamp': {\n schemaAttributes[prop] = { type: 'string', format: 'timestamp', example: Date.now() };\n break;\n }\n case 'time': {\n schemaAttributes[prop] = { type: 'string', format: 'time', example: '12:54.000' };\n break;\n }\n case 'date': {\n schemaAttributes[prop] = { type: 'string', format: 'date' };\n break;\n }\n case 'datetime': {\n schemaAttributes[prop] = { type: 'string', format: 'date-time' };\n break;\n }\n case 'boolean': {\n schemaAttributes[prop] = { type: 'boolean' };\n break;\n }\n case 'enumeration': {\n schemaAttributes[prop] = { type: 'string', enum: [...attribute.enum] };\n break;\n }\n case 'decimal':\n case 'float': {\n schemaAttributes[prop] = { type: 'number', format: 'float' };\n break;\n }\n case 'integer': {\n schemaAttributes[prop] = { type: 'integer' };\n break;\n }\n case 'biginteger': {\n schemaAttributes[prop] = { type: 'string', pattern: '^\\\\d*$', example: '123456789' };\n break;\n }\n case 'json':\n case 'blocks': {\n schemaAttributes[prop] = {};\n break;\n }\n case 'uid': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'component': {\n const componentAttributes = strapi.components[attribute.component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(attribute.component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(attribute.component),\n rawComponentSchema\n );\n\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n if (attribute.repeatable) {\n schemaAttributes[prop] = {\n type: 'array',\n items: finalComponentSchema,\n };\n } else {\n schemaAttributes[prop] = finalComponentSchema;\n }\n break;\n }\n case 'dynamiczone': {\n const components = attribute.components.map((component) => {\n const componentAttributes = strapi.components[component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { oneOf: [{ type: 'string' }, { type: 'number' }] } }),\n __component: { type: 'string', enum: [component] },\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(component),\n rawComponentSchema\n );\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n return finalComponentSchema;\n });\n let discriminator: OpenAPIV3.DiscriminatorObject | undefined;\n if (components.every((component) => Object.hasOwn(component, '$ref'))) {\n discriminator = {\n propertyName: '__component',\n mapping: attribute.components.reduce(\n (acc, component) => {\n acc[component] = convertComponentName(component, true);\n return acc;\n },\n {} as {\n [value: string]: string;\n }\n ),\n };\n }\n\n schemaAttributes[prop] = {\n type: 'array',\n items: {\n anyOf: components,\n },\n discriminator,\n };\n break;\n }\n case 'media': {\n const imageAttributes = strapi.contentType('plugin::upload.file').attributes;\n const isListOfEntities = attribute.multiple ?? false;\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(imageAttributes, { typeMap, didAddStrapiComponentsToSchemas })\n );\n break;\n }\n\n case 'relation': {\n const isListOfEntities = attribute.relation.includes('ToMany');\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, {});\n\n break;\n }\n\n const cachedTargetAttributes = relationTargetCache.get(attribute.target);\n if (cachedTargetAttributes) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, cachedTargetAttributes);\n\n break;\n }\n\n typeMap.set(attribute.target, true);\n try {\n const targetAttributes = strapi.contentType(attribute.target).attributes;\n const cleanedTargetAttributes = cleanSchemaAttributes(targetAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n });\n\n relationTargetCache.set(attribute.target, cleanedTargetAttributes);\n schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanedTargetAttributes);\n } finally {\n typeMap.delete(attribute.target);\n }\n\n break;\n }\n default: {\n // @ts-expect-error - This is a catch all for any other types\n throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);\n }\n }\n }\n\n return schemaAttributes;\n};\n\nexport default cleanSchemaAttributes;\n"],"names":["convertComponentName","component","isRef","cleanComponentName","pascalCase","cleanSchemaAttributes","attributes","typeMap","Map","isRequest","didAddStrapiComponentsToSchemas","schemaAttributes","relationTargetCache","prop","Object","keys","attribute","type","format","example","Date","now","enum","pattern","componentAttributes","strapi","components","rawComponentSchema","properties","id","oneOf","refComponentSchema","$ref","componentExists","finalComponentSchema","repeatable","items","map","__component","discriminator","every","hasOwn","propertyName","mapping","reduce","acc","anyOf","imageAttributes","contentType","isListOfEntities","multiple","oneOfType","getSchemaData","relation","includes","target","has","cachedTargetAttributes","get","set","targetAttributes","cleanedTargetAttributes","delete","Error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean-schema-attributes.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,UAAU,OAAO;IACf,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5E;AAgBD;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GACzB,YAAY,MAAM,CAAC,gBAAgB,EACnC,yDAA6E,OAAO,KACnF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"clean-schema-attributes.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,UAAU,OAAO;IACf,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5E;AAgBD;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GACzB,YAAY,MAAM,CAAC,gBAAgB,EACnC,yDAA6E,OAAO,KACnF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,CA6OnE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/plugin-documentation",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.55.0",
|
|
4
4
|
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -63,10 +63,10 @@
|
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
65
|
"@reduxjs/toolkit": "1.9.7",
|
|
66
|
-
"@strapi/admin": "5.
|
|
66
|
+
"@strapi/admin": "5.55.0",
|
|
67
67
|
"@strapi/design-system": "2.2.4",
|
|
68
68
|
"@strapi/icons": "2.2.4",
|
|
69
|
-
"@strapi/utils": "5.
|
|
69
|
+
"@strapi/utils": "5.55.0",
|
|
70
70
|
"bcryptjs": "2.4.3",
|
|
71
71
|
"cheerio": "^1.2.0",
|
|
72
72
|
"formik": "2.4.9",
|
|
@@ -82,9 +82,9 @@
|
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
85
|
-
"@strapi/admin-test-utils": "5.
|
|
86
|
-
"@strapi/strapi": "5.
|
|
87
|
-
"@strapi/types": "5.
|
|
85
|
+
"@strapi/admin-test-utils": "5.55.0",
|
|
86
|
+
"@strapi/strapi": "5.55.0",
|
|
87
|
+
"@strapi/types": "5.55.0",
|
|
88
88
|
"@testing-library/dom": "10.4.1",
|
|
89
89
|
"@testing-library/jest-dom": "6.9.1",
|
|
90
90
|
"@testing-library/react": "16.3.2",
|