@goatlab/fluent 0.7.39 → 0.7.41
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/BaseConnector.d.ts +112 -0
- package/dist/BaseConnector.js +347 -0
- package/dist/BaseConnector.js.map +1 -0
- package/dist/Fluent.d.ts +11 -0
- package/dist/Fluent.js +27 -0
- package/dist/Fluent.js.map +1 -0
- package/dist/FluentConnectorInterface.d.ts +17 -0
- package/dist/FluentConnectorInterface.js +3 -0
- package/dist/FluentConnectorInterface.js.map +1 -0
- package/dist/FluentEntity.d.ts +7 -0
- package/dist/FluentEntity.js +34 -0
- package/dist/FluentEntity.js.map +1 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +123 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.js +765 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +12 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +167 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +11 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +52 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.d.ts +4 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js +20 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +7 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +19 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +11 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +173 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +13 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +207 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js.map +1 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +11 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +214 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js.map +1 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +44 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +87 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js.map +1 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +38 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.js +82 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.js.map +1 -0
- package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
- package/dist/TypeOrmConnector/test/flock.js +26 -0
- package/dist/TypeOrmConnector/test/flock.js.map +1 -0
- package/dist/TypeOrmConnector/util/clearEmpties.d.ts +7 -0
- package/dist/TypeOrmConnector/util/clearEmpties.js +33 -0
- package/dist/TypeOrmConnector/util/clearEmpties.js.map +1 -0
- package/dist/TypeOrmConnector/util/extractConditions.d.ts +12 -0
- package/dist/TypeOrmConnector/util/extractConditions.js +89 -0
- package/dist/TypeOrmConnector/util/extractConditions.js.map +1 -0
- package/dist/TypeOrmConnector/util/extractInclude.d.ts +2 -0
- package/dist/TypeOrmConnector/util/extractInclude.js +26 -0
- package/dist/TypeOrmConnector/util/extractInclude.js.map +1 -0
- package/dist/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +12 -0
- package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js +49 -0
- package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js.map +1 -0
- package/dist/TypeOrmConnector/util/extractOrderBy.d.ts +2 -0
- package/dist/TypeOrmConnector/util/extractOrderBy.js +24 -0
- package/dist/TypeOrmConnector/util/extractOrderBy.js.map +1 -0
- package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +19 -0
- package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js +27 -0
- package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js.map +1 -0
- package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +6 -0
- package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +29 -0
- package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js.map +1 -0
- package/dist/TypeOrmConnector/util/isAnyObject.d.ts +1 -0
- package/dist/TypeOrmConnector/util/isAnyObject.js +8 -0
- package/dist/TypeOrmConnector/util/isAnyObject.js.map +1 -0
- package/dist/TypeOrmConnector/util/nestQueryResults.d.ts +2 -0
- package/dist/TypeOrmConnector/util/nestQueryResults.js +38 -0
- package/dist/TypeOrmConnector/util/nestQueryResults.js.map +1 -0
- package/dist/core/Loopback/build-schema.d.ts +148 -0
- package/dist/core/Loopback/build-schema.js +443 -0
- package/dist/core/Loopback/build-schema.js.map +1 -0
- package/dist/core/Loopback/common-types.d.ts +96 -0
- package/dist/core/Loopback/common-types.js +24 -0
- package/dist/core/Loopback/common-types.js.map +1 -0
- package/dist/core/Loopback/json-to-schema.d.ts +41 -0
- package/dist/core/Loopback/json-to-schema.js +113 -0
- package/dist/core/Loopback/json-to-schema.js.map +1 -0
- package/dist/core/Loopback/mapValues.js +2280 -0
- package/dist/core/Loopback/metadata.d.ts +16 -0
- package/dist/core/Loopback/metadata.js +49 -0
- package/dist/core/Loopback/metadata.js.map +1 -0
- package/dist/core/Loopback/model.d.ts +233 -0
- package/dist/core/Loopback/model.js +394 -0
- package/dist/core/Loopback/model.js.map +1 -0
- package/dist/core/Loopback/query.d.ts +394 -0
- package/dist/core/Loopback/query.js +484 -0
- package/dist/core/Loopback/query.js.map +1 -0
- package/dist/core/Loopback/relation.types.d.ts +141 -0
- package/dist/core/Loopback/relation.types.js +18 -0
- package/dist/core/Loopback/relation.types.js.map +1 -0
- package/dist/core/Loopback/type-resolver.d.ts +42 -0
- package/dist/core/Loopback/type-resolver.js +60 -0
- package/dist/core/Loopback/type-resolver.js.map +1 -0
- package/dist/core/Loopback/type.d.ts +38 -0
- package/dist/core/Loopback/type.js +7 -0
- package/dist/core/Loopback/type.js.map +1 -0
- package/dist/core/Nestjs/applyDecorators.d.ts +10 -0
- package/dist/core/Nestjs/applyDecorators.js +26 -0
- package/dist/core/Nestjs/applyDecorators.js.map +1 -0
- package/dist/core/Nestjs/types/common.d.ts +16 -0
- package/dist/core/Nestjs/types/common.js +38 -0
- package/dist/core/Nestjs/types/common.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
- package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +8 -0
- package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
- package/dist/core/Nestjs/types/decorators/api-property.decorator.js +66 -0
- package/dist/core/Nestjs/types/decorators/api-property.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +136 -0
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +4 -0
- package/dist/core/Nestjs/types/decorators/args-type.decorator.js +24 -0
- package/dist/core/Nestjs/types/decorators/args-type.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
- package/dist/core/Nestjs/types/decorators/create-property.decorator.js +55 -0
- package/dist/core/Nestjs/types/decorators/create-property.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +4 -0
- package/dist/core/Nestjs/types/decorators/directive.decorator.js +39 -0
- package/dist/core/Nestjs/types/decorators/directive.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +4 -0
- package/dist/core/Nestjs/types/decorators/extensions.decorator.js +28 -0
- package/dist/core/Nestjs/types/decorators/extensions.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +48 -0
- package/dist/core/Nestjs/types/decorators/field.decorator.js +63 -0
- package/dist/core/Nestjs/types/decorators/field.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +25 -0
- package/dist/core/Nestjs/types/decorators/input-type.decorator.js +29 -0
- package/dist/core/Nestjs/types/decorators/input-type.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +33 -0
- package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +35 -0
- package/dist/core/Nestjs/types/decorators/interface-type.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
- package/dist/core/Nestjs/types/decorators/partial-type.helper.js +46 -0
- package/dist/core/Nestjs/types/decorators/partial-type.helper.js.map +1 -0
- package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +10 -0
- package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js.map +1 -0
- package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/directive-parsing.error.js +10 -0
- package/dist/core/Nestjs/types/errors/directive-parsing.error.js.map +1 -0
- package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +10 -0
- package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js.map +1 -0
- package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/undefined-type.error.js +11 -0
- package/dist/core/Nestjs/types/errors/undefined-type.error.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
- package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +11 -0
- package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +11 -0
- package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
- package/dist/core/Nestjs/types/interfaces/complexity.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/complexity.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
- package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +239 -0
- package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +7 -0
- package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
- package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
- package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js.map +1 -0
- package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/type-options.interface.js +3 -0
- package/dist/core/Nestjs/types/interfaces/type-options.interface.js.map +1 -0
- package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
- package/dist/core/Nestjs/types/lazy-metadata.storage.js +66 -0
- package/dist/core/Nestjs/types/lazy-metadata.storage.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
- package/dist/core/Nestjs/types/metadata/class.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/class.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/directive.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/directive.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
- package/dist/core/Nestjs/types/metadata/enum.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/enum.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/extensions.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/extensions.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/index.js +12 -0
- package/dist/core/Nestjs/types/metadata/index.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
- package/dist/core/Nestjs/types/metadata/interface.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/interface.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
- package/dist/core/Nestjs/types/metadata/object-type.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/object-type.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
- package/dist/core/Nestjs/types/metadata/param.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/param.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
- package/dist/core/Nestjs/types/metadata/property.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/property.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
- package/dist/core/Nestjs/types/metadata/resolver.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/resolver.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
- package/dist/core/Nestjs/types/metadata/union.metadata.js +3 -0
- package/dist/core/Nestjs/types/metadata/union.metadata.js.map +1 -0
- package/dist/core/Nestjs/types/object-type.decorator.d.ts +32 -0
- package/dist/core/Nestjs/types/object-type.decorator.js +33 -0
- package/dist/core/Nestjs/types/object-type.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
- package/dist/core/Nestjs/types/omit-type.js +34 -0
- package/dist/core/Nestjs/types/omit-type.js.map +1 -0
- package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
- package/dist/core/Nestjs/types/reflection.utils.js +65 -0
- package/dist/core/Nestjs/types/reflection.utils.js.map +1 -0
- package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +20 -0
- package/dist/core/Nestjs/types/set-metadata.decorator.js +33 -0
- package/dist/core/Nestjs/types/set-metadata.decorator.js.map +1 -0
- package/dist/core/Nestjs/types/type-metadata.storage.d.ts +73 -0
- package/dist/core/Nestjs/types/type-metadata.storage.js +349 -0
- package/dist/core/Nestjs/types/type-metadata.storage.js.map +1 -0
- package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
- package/dist/core/Nestjs/types/utils/enum.utils.js +31 -0
- package/dist/core/Nestjs/types/utils/enum.utils.js.map +1 -0
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +13 -0
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js.map +1 -0
- package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +2 -0
- package/dist/core/Nestjs/types/utils/mapped-types.utils.js +38 -0
- package/dist/core/Nestjs/types/utils/mapped-types.utils.js.map +1 -0
- package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
- package/dist/core/Nestjs/types/utils/model-properties-accessor.js +37 -0
- package/dist/core/Nestjs/types/utils/model-properties-accessor.js.map +1 -0
- package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
- package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
- package/dist/core/Nestjs/types/utils/type-helpers.utils.js.map +1 -0
- package/dist/core/types.d.ts +23 -0
- package/dist/core/types.js +31 -0
- package/dist/core/types.js.map +1 -0
- package/dist/decorators.d.ts +92 -0
- package/dist/decorators.js +163 -0
- package/dist/decorators.js.map +1 -0
- package/dist/generatorDatasource.d.ts +2 -0
- package/dist/generatorDatasource.js +13 -0
- package/dist/generatorDatasource.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/loadRelations.d.ts +12 -0
- package/dist/loadRelations.js +139 -0
- package/dist/loadRelations.js.map +1 -0
- package/dist/outputKeys.d.ts +2 -0
- package/dist/outputKeys.js +18 -0
- package/dist/outputKeys.js.map +1 -0
- package/dist/testing/genericUnifiedTestSuite.d.ts +21 -0
- package/dist/testing/genericUnifiedTestSuite.js +256 -0
- package/dist/testing/genericUnifiedTestSuite.js.map +1 -0
- package/dist/testing/unifiedTestFactory.d.ts +38 -0
- package/dist/testing/unifiedTestFactory.js +297 -0
- package/dist/testing/unifiedTestFactory.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +104 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -24
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { MetadataAccessor } from '@loopback/metadata';
|
|
2
|
+
import { SchemaObject as JsonSchema } from 'openapi3-ts/oas30';
|
|
3
|
+
export interface SchemaObject extends JsonSchema {
|
|
4
|
+
definitions?: {
|
|
5
|
+
[key: string]: SchemaObject;
|
|
6
|
+
};
|
|
7
|
+
$ref?: string;
|
|
8
|
+
}
|
|
9
|
+
import { RelationMetadata } from './relation.types';
|
|
10
|
+
import { PropertyDefinition, PropertyType } from './model';
|
|
11
|
+
export declare const JSON_SCHEMA_KEY: MetadataAccessor<{
|
|
12
|
+
[key: string]: SchemaObject;
|
|
13
|
+
}, ClassDecorator>;
|
|
14
|
+
export interface JsonSchemaOptions<T extends object> {
|
|
15
|
+
/**
|
|
16
|
+
* The title to use in the generated schema.
|
|
17
|
+
*
|
|
18
|
+
* When using options like `exclude`, the auto-generated title can be
|
|
19
|
+
* difficult to read for humans. Use this option to change the title to
|
|
20
|
+
* a more meaningful value.
|
|
21
|
+
*/
|
|
22
|
+
title?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Set this flag if you want the schema to define navigational properties
|
|
25
|
+
* for model relations.
|
|
26
|
+
*/
|
|
27
|
+
includeRelations?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Set this flag to mark all model properties as optional. This is typically
|
|
30
|
+
* used to describe request body of PATCH endpoints. This option will be
|
|
31
|
+
* overridden by the "optional" option if it is set and non-empty.
|
|
32
|
+
*
|
|
33
|
+
* The flag also applies to nested model instances if its value is set to
|
|
34
|
+
* 'deep', such as:
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* @model()
|
|
39
|
+
* class Address {
|
|
40
|
+
* @property()
|
|
41
|
+
* street: string;
|
|
42
|
+
* @property()
|
|
43
|
+
* city: string;
|
|
44
|
+
* @property()
|
|
45
|
+
* state: string;
|
|
46
|
+
* @property()
|
|
47
|
+
* zipCode: string;
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
* @model()
|
|
51
|
+
* class Customer {
|
|
52
|
+
* @property()
|
|
53
|
+
* address: Address;
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* // The following schema allows properties of `customer` optional, but not
|
|
57
|
+
* // `customer.address`
|
|
58
|
+
* const schemaRef1 = getModelSchemaRef(Customer, {partial: true});
|
|
59
|
+
*
|
|
60
|
+
* // The following schema allows properties of `customer` and
|
|
61
|
+
* // `customer.address` optional
|
|
62
|
+
* const schemaRef2 = getModelSchemaRef(Customer, {partial: 'deep'});
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
partial?: boolean | 'deep';
|
|
66
|
+
/**
|
|
67
|
+
* List of model properties to exclude from the schema.
|
|
68
|
+
*/
|
|
69
|
+
exclude?: (keyof T)[];
|
|
70
|
+
/**
|
|
71
|
+
* List of model properties to mark as optional. Overrides the "partial"
|
|
72
|
+
* option if it is not empty.
|
|
73
|
+
*/
|
|
74
|
+
optional?: (keyof T)[];
|
|
75
|
+
/**
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
visited?: {
|
|
79
|
+
[key: string]: SchemaObject;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildModelCacheKey<T extends object>(options?: JsonSchemaOptions<T>): string;
|
|
86
|
+
/**
|
|
87
|
+
* Gets the JSON Schema of a TypeScript model/class by seeing if one exists
|
|
88
|
+
* in a cache. If not, one is generated and then cached.
|
|
89
|
+
* @param ctor - Constructor of class to get JSON Schema from
|
|
90
|
+
*/
|
|
91
|
+
export declare function getJsonSchema<T extends object>(ctor: Function & {
|
|
92
|
+
prototype: T;
|
|
93
|
+
}, options?: JsonSchemaOptions<T>): SchemaObject;
|
|
94
|
+
/**
|
|
95
|
+
* Describe the provided Model as a reference to a definition shared by multiple
|
|
96
|
+
* endpoints. The definition is included in the returned schema.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
*
|
|
100
|
+
* ```ts
|
|
101
|
+
* const schema = {
|
|
102
|
+
* $ref: '/definitions/Product',
|
|
103
|
+
* definitions: {
|
|
104
|
+
* Product: {
|
|
105
|
+
* title: 'Product',
|
|
106
|
+
* properties: {
|
|
107
|
+
* // etc.
|
|
108
|
+
* }
|
|
109
|
+
* }
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @param modelCtor - The model constructor (e.g. `Product`)
|
|
115
|
+
* @param options - Additional options
|
|
116
|
+
*/
|
|
117
|
+
export declare function getJsonSchemaRef<T extends object>(modelCtor: Function & {
|
|
118
|
+
prototype: T;
|
|
119
|
+
}, options?: JsonSchemaOptions<T>): SchemaObject;
|
|
120
|
+
/**
|
|
121
|
+
* Gets the wrapper function of primitives string, number, and boolean
|
|
122
|
+
* @param type - Name of type
|
|
123
|
+
*/
|
|
124
|
+
export declare function stringTypeToWrapper(type: string | Function): Function;
|
|
125
|
+
/**
|
|
126
|
+
* Determines whether a given string or constructor is array type or not
|
|
127
|
+
* @param type - Type as string or wrapper
|
|
128
|
+
*/
|
|
129
|
+
export declare function isArrayType(type: string | Function | PropertyType): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Converts property metadata into a JSON property definition
|
|
132
|
+
* @param meta
|
|
133
|
+
*/
|
|
134
|
+
export declare function metaToJsonProperty(meta: PropertyDefinition): SchemaObject;
|
|
135
|
+
/**
|
|
136
|
+
* Checks and return navigational property definition for the relation
|
|
137
|
+
* @param relMeta Relation metadata object
|
|
138
|
+
* @param targetRef Schema definition for the target model
|
|
139
|
+
*/
|
|
140
|
+
export declare function getNavigationalPropertyForRelation(relMeta: RelationMetadata, targetRef: SchemaObject): SchemaObject;
|
|
141
|
+
/**
|
|
142
|
+
* Converts a TypeScript class into a JSON Schema using TypeScript's
|
|
143
|
+
* reflection API
|
|
144
|
+
* @param ctor - Constructor of class to convert from
|
|
145
|
+
*/
|
|
146
|
+
export declare function modelToJsonSchema<T extends object>(ctor: Function & {
|
|
147
|
+
prototype: T;
|
|
148
|
+
}, jsonSchemaOptions?: JsonSchemaOptions<T>): SchemaObject;
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JSON_SCHEMA_KEY = void 0;
|
|
4
|
+
exports.buildModelCacheKey = buildModelCacheKey;
|
|
5
|
+
exports.getJsonSchema = getJsonSchema;
|
|
6
|
+
exports.getJsonSchemaRef = getJsonSchemaRef;
|
|
7
|
+
exports.stringTypeToWrapper = stringTypeToWrapper;
|
|
8
|
+
exports.isArrayType = isArrayType;
|
|
9
|
+
exports.metaToJsonProperty = metaToJsonProperty;
|
|
10
|
+
exports.getNavigationalPropertyForRelation = getNavigationalPropertyForRelation;
|
|
11
|
+
exports.modelToJsonSchema = modelToJsonSchema;
|
|
12
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
13
|
+
// Node module: @loopback/repository-json-schema
|
|
14
|
+
// This file is licensed under the MIT License.
|
|
15
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
16
|
+
const metadata_1 = require("@loopback/metadata");
|
|
17
|
+
const util_1 = require("util");
|
|
18
|
+
const type_resolver_1 = require("./type-resolver");
|
|
19
|
+
const metadata_2 = require("./metadata");
|
|
20
|
+
exports.JSON_SCHEMA_KEY = metadata_1.MetadataAccessor.create('loopback:json-schema');
|
|
21
|
+
const debug = console.log;
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
function buildModelCacheKey(options = {}) {
|
|
26
|
+
// Backwards compatibility: preserve cache key "modelOnly"
|
|
27
|
+
if (Object.keys(options).length === 0) {
|
|
28
|
+
return 'modelOnly';
|
|
29
|
+
}
|
|
30
|
+
// New key schema: use the same suffix as we use for schema title
|
|
31
|
+
// For example: "modelPartialWithRelations"
|
|
32
|
+
// Note this new key schema preserves the old key "modelWithRelations"
|
|
33
|
+
return `model${options.title ?? ''}${getTitleSuffix(options)}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gets the JSON Schema of a TypeScript model/class by seeing if one exists
|
|
37
|
+
* in a cache. If not, one is generated and then cached.
|
|
38
|
+
* @param ctor - Constructor of class to get JSON Schema from
|
|
39
|
+
*/
|
|
40
|
+
function getJsonSchema(ctor, options) {
|
|
41
|
+
// In the near future the metadata will be an object with
|
|
42
|
+
// different titles as keys
|
|
43
|
+
const cached = metadata_1.MetadataInspector.getClassMetadata(exports.JSON_SCHEMA_KEY, ctor, {
|
|
44
|
+
ownMetadataOnly: true
|
|
45
|
+
});
|
|
46
|
+
const key = buildModelCacheKey(options);
|
|
47
|
+
let schema = cached?.[key];
|
|
48
|
+
if (!schema) {
|
|
49
|
+
// Create new json schema from model
|
|
50
|
+
// if not found in cache for specific key
|
|
51
|
+
schema = modelToJsonSchema(ctor, options);
|
|
52
|
+
if (cached) {
|
|
53
|
+
// Add a new key to the cached schema of the model
|
|
54
|
+
cached[key] = schema;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Define new metadata and set in cache
|
|
58
|
+
metadata_1.MetadataInspector.defineMetadata(exports.JSON_SCHEMA_KEY.key, { [key]: schema }, ctor);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return schema;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Describe the provided Model as a reference to a definition shared by multiple
|
|
65
|
+
* endpoints. The definition is included in the returned schema.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* const schema = {
|
|
71
|
+
* $ref: '/definitions/Product',
|
|
72
|
+
* definitions: {
|
|
73
|
+
* Product: {
|
|
74
|
+
* title: 'Product',
|
|
75
|
+
* properties: {
|
|
76
|
+
* // etc.
|
|
77
|
+
* }
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @param modelCtor - The model constructor (e.g. `Product`)
|
|
84
|
+
* @param options - Additional options
|
|
85
|
+
*/
|
|
86
|
+
function getJsonSchemaRef(modelCtor, options) {
|
|
87
|
+
const schemaWithDefinitions = getJsonSchema(modelCtor, options);
|
|
88
|
+
const key = schemaWithDefinitions.title;
|
|
89
|
+
// ctor is not a model
|
|
90
|
+
if (!key)
|
|
91
|
+
return schemaWithDefinitions;
|
|
92
|
+
const definitions = { ...schemaWithDefinitions.definitions };
|
|
93
|
+
const schema = { ...schemaWithDefinitions };
|
|
94
|
+
delete schema.definitions;
|
|
95
|
+
definitions[key] = schema;
|
|
96
|
+
return {
|
|
97
|
+
$ref: `#/definitions/${key}`,
|
|
98
|
+
definitions
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gets the wrapper function of primitives string, number, and boolean
|
|
103
|
+
* @param type - Name of type
|
|
104
|
+
*/
|
|
105
|
+
function stringTypeToWrapper(type) {
|
|
106
|
+
if (typeof type === 'function') {
|
|
107
|
+
return type;
|
|
108
|
+
}
|
|
109
|
+
type = type.toLowerCase();
|
|
110
|
+
let wrapper;
|
|
111
|
+
switch (type) {
|
|
112
|
+
case 'number': {
|
|
113
|
+
wrapper = Number;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case 'string': {
|
|
117
|
+
wrapper = String;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case 'boolean': {
|
|
121
|
+
wrapper = Boolean;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'array': {
|
|
125
|
+
wrapper = Array;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case 'object':
|
|
129
|
+
case 'any': {
|
|
130
|
+
wrapper = Object;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 'date': {
|
|
134
|
+
wrapper = Date;
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
case 'buffer': {
|
|
138
|
+
wrapper = Buffer;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case 'null': {
|
|
142
|
+
wrapper = type_resolver_1.Null;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
default: {
|
|
146
|
+
throw new Error(`Unsupported type: ${type}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return wrapper;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Determines whether a given string or constructor is array type or not
|
|
153
|
+
* @param type - Type as string or wrapper
|
|
154
|
+
*/
|
|
155
|
+
function isArrayType(type) {
|
|
156
|
+
return type === Array || type === 'array';
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Converts property metadata into a JSON property definition
|
|
160
|
+
* @param meta
|
|
161
|
+
*/
|
|
162
|
+
function metaToJsonProperty(meta) {
|
|
163
|
+
const propDef = {};
|
|
164
|
+
let result;
|
|
165
|
+
let propertyType = meta.type;
|
|
166
|
+
if (isArrayType(propertyType) && meta.itemType) {
|
|
167
|
+
if (isArrayType(meta.itemType) && !meta.jsonSchema) {
|
|
168
|
+
throw new Error('You must provide the "jsonSchema" field when define ' +
|
|
169
|
+
'a nested array property');
|
|
170
|
+
}
|
|
171
|
+
result = { type: 'array', items: propDef };
|
|
172
|
+
propertyType = meta.itemType;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
result = propDef;
|
|
176
|
+
}
|
|
177
|
+
const wrappedType = stringTypeToWrapper(propertyType);
|
|
178
|
+
const resolvedType = (0, type_resolver_1.resolveType)(wrappedType);
|
|
179
|
+
if (resolvedType === Date) {
|
|
180
|
+
Object.assign(propDef, {
|
|
181
|
+
type: 'string',
|
|
182
|
+
format: 'date-time'
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else if (propertyType === 'any') {
|
|
186
|
+
// no-op, the json schema for any type is {}
|
|
187
|
+
}
|
|
188
|
+
else if ((0, type_resolver_1.isBuiltinType)(resolvedType)) {
|
|
189
|
+
Object.assign(propDef, {
|
|
190
|
+
type: resolvedType.name.toLowerCase()
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
Object.assign(propDef, { $ref: `#/definitions/${resolvedType.name}` });
|
|
195
|
+
}
|
|
196
|
+
if (meta.description) {
|
|
197
|
+
Object.assign(propDef, {
|
|
198
|
+
description: meta.description
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (meta.jsonSchema) {
|
|
202
|
+
Object.assign(propDef, meta.jsonSchema);
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Checks and return navigational property definition for the relation
|
|
208
|
+
* @param relMeta Relation metadata object
|
|
209
|
+
* @param targetRef Schema definition for the target model
|
|
210
|
+
*/
|
|
211
|
+
function getNavigationalPropertyForRelation(relMeta, targetRef) {
|
|
212
|
+
if (relMeta.targetsMany === true) {
|
|
213
|
+
// Targets an array of object, like, hasMany
|
|
214
|
+
return {
|
|
215
|
+
type: 'array',
|
|
216
|
+
items: targetRef
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (relMeta.targetsMany === false) {
|
|
220
|
+
// Targets single object, like, hasOne, belongsTo
|
|
221
|
+
return targetRef;
|
|
222
|
+
}
|
|
223
|
+
// targetsMany is undefined or null
|
|
224
|
+
// not allowed if includeRelations is true
|
|
225
|
+
throw new Error(`targetsMany attribute missing for ${relMeta.name}`);
|
|
226
|
+
}
|
|
227
|
+
function buildSchemaTitle(ctor, meta, options) {
|
|
228
|
+
if (options.title)
|
|
229
|
+
return options.title;
|
|
230
|
+
const title = meta.title || ctor.name;
|
|
231
|
+
return title + getTitleSuffix(options);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Checks the options and generates a descriptive suffix using compatible chars
|
|
235
|
+
* @param options json schema options
|
|
236
|
+
*/
|
|
237
|
+
function getTitleSuffix(options = {}) {
|
|
238
|
+
let suffix = '';
|
|
239
|
+
if (options.optional?.length) {
|
|
240
|
+
suffix += `Optional_${options.optional.join('-')}_`;
|
|
241
|
+
}
|
|
242
|
+
else if (options.partial) {
|
|
243
|
+
suffix += 'Partial';
|
|
244
|
+
}
|
|
245
|
+
if (options.exclude?.length) {
|
|
246
|
+
suffix += `Excluding_${options.exclude.join('-')}_`;
|
|
247
|
+
}
|
|
248
|
+
if (options.includeRelations) {
|
|
249
|
+
suffix += 'WithRelations';
|
|
250
|
+
}
|
|
251
|
+
return suffix;
|
|
252
|
+
}
|
|
253
|
+
function stringifyOptions(modelSettings = {}) {
|
|
254
|
+
return (0, util_1.inspect)(modelSettings, {
|
|
255
|
+
depth: Infinity,
|
|
256
|
+
maxArrayLength: Infinity,
|
|
257
|
+
breakLength: Infinity
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function isEmptyJson(obj) {
|
|
261
|
+
return !(obj && Object.keys(obj).length);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Checks the options and generates a descriptive suffix that contains the
|
|
265
|
+
* TypeScript type and options
|
|
266
|
+
* @param typeName - TypeScript's type name
|
|
267
|
+
* @param options - json schema options
|
|
268
|
+
*/
|
|
269
|
+
function getDescriptionSuffix(typeName, rawOptions = {}) {
|
|
270
|
+
const options = { ...rawOptions };
|
|
271
|
+
delete options.visited;
|
|
272
|
+
if (options.optional && !options.optional.length) {
|
|
273
|
+
delete options.optional;
|
|
274
|
+
}
|
|
275
|
+
const type = typeName;
|
|
276
|
+
let tsType = type;
|
|
277
|
+
if (options.includeRelations) {
|
|
278
|
+
tsType = `${type}WithRelations`;
|
|
279
|
+
}
|
|
280
|
+
if (options.partial) {
|
|
281
|
+
tsType = `Partial<${tsType}>`;
|
|
282
|
+
}
|
|
283
|
+
if (options.exclude) {
|
|
284
|
+
const excludedProps = options.exclude.map(p => `'${String(p)}'`);
|
|
285
|
+
tsType = `Omit<${tsType}, ${excludedProps.join(' | ')}>`;
|
|
286
|
+
}
|
|
287
|
+
if (options.optional) {
|
|
288
|
+
const optionalProps = options.optional.map(p => `'${String(p)}'`);
|
|
289
|
+
tsType = `@loopback/repository-json-schema#Optional<${tsType}, ${optionalProps.join(' | ')}>`;
|
|
290
|
+
}
|
|
291
|
+
return !isEmptyJson(options)
|
|
292
|
+
? `(tsType: ${tsType}, schemaOptions: ${stringifyOptions(options)})`
|
|
293
|
+
: '';
|
|
294
|
+
}
|
|
295
|
+
// NOTE(shimks) no metadata for: union, optional, nested array, any, enum,
|
|
296
|
+
// string literal, anonymous types, and inherited properties
|
|
297
|
+
/**
|
|
298
|
+
* Converts a TypeScript class into a JSON Schema using TypeScript's
|
|
299
|
+
* reflection API
|
|
300
|
+
* @param ctor - Constructor of class to convert from
|
|
301
|
+
*/
|
|
302
|
+
function modelToJsonSchema(ctor, jsonSchemaOptions = {}) {
|
|
303
|
+
const options = { ...jsonSchemaOptions };
|
|
304
|
+
options.visited = options.visited ?? {};
|
|
305
|
+
options.optional = options.optional ?? [];
|
|
306
|
+
const partial = options.partial && !options.optional.length;
|
|
307
|
+
if (options.partial && !partial) {
|
|
308
|
+
debug('Overriding "partial" option with "optional" option');
|
|
309
|
+
delete options.partial;
|
|
310
|
+
}
|
|
311
|
+
debug('Creating schema for model %s', ctor.name);
|
|
312
|
+
debug('JSON schema options: %o', options);
|
|
313
|
+
const modelDef = metadata_2.ModelMetadataHelper.getModelMetadata(ctor);
|
|
314
|
+
// returns an empty object if metadata is an empty object
|
|
315
|
+
if (modelDef == null || Object.keys(modelDef).length === 0) {
|
|
316
|
+
return {};
|
|
317
|
+
}
|
|
318
|
+
const meta = modelDef;
|
|
319
|
+
debug('Model settings', meta.settings);
|
|
320
|
+
const title = buildSchemaTitle(ctor, meta, options);
|
|
321
|
+
if (options.visited[title])
|
|
322
|
+
return options.visited[title];
|
|
323
|
+
const result = { title };
|
|
324
|
+
options.visited[title] = result;
|
|
325
|
+
result.type = 'object';
|
|
326
|
+
const descriptionSuffix = getDescriptionSuffix(ctor.name, options);
|
|
327
|
+
if (meta.description) {
|
|
328
|
+
const formatSuffix = descriptionSuffix ? ` ${descriptionSuffix}` : '';
|
|
329
|
+
result.description = meta.description + formatSuffix;
|
|
330
|
+
}
|
|
331
|
+
else if (descriptionSuffix) {
|
|
332
|
+
result.description = descriptionSuffix;
|
|
333
|
+
}
|
|
334
|
+
for (const p in meta.properties) {
|
|
335
|
+
if (options.exclude?.includes(p)) {
|
|
336
|
+
debug('Property % is excluded by %s', p, options.exclude);
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
if (meta.properties?.[p]?.type == null) {
|
|
340
|
+
// Circular import of model classes can lead to this situation
|
|
341
|
+
throw new Error(`Property ${ctor.name}.${p} does not have "type" in its definition`);
|
|
342
|
+
}
|
|
343
|
+
result.properties = result.properties ?? {};
|
|
344
|
+
result.properties[p] = result.properties[p] || {};
|
|
345
|
+
const metaProperty = { ...meta.properties[p] };
|
|
346
|
+
if (!metaProperty.type) {
|
|
347
|
+
throw new Error(`Property ${p} does not have a type`);
|
|
348
|
+
}
|
|
349
|
+
// populating "properties" key
|
|
350
|
+
result.properties[p] = metaToJsonProperty(metaProperty);
|
|
351
|
+
// handling 'required' metadata
|
|
352
|
+
const optional = options.optional.includes(p);
|
|
353
|
+
if (metaProperty.required && !(partial || optional)) {
|
|
354
|
+
result.required = result.required ?? [];
|
|
355
|
+
result.required.push(p);
|
|
356
|
+
}
|
|
357
|
+
// populating JSON Schema 'definitions'
|
|
358
|
+
// shimks: ugly type casting; this should be replaced by logic to throw
|
|
359
|
+
// error if itemType/type is not a string or a function
|
|
360
|
+
const resolvedType = (0, type_resolver_1.resolveType)(metaProperty.type);
|
|
361
|
+
const referenceType = isArrayType(resolvedType)
|
|
362
|
+
? // shimks: ugly type casting; this should be replaced by logic to throw
|
|
363
|
+
// error if itemType/type is not a string or a function
|
|
364
|
+
(0, type_resolver_1.resolveType)(metaProperty.itemType)
|
|
365
|
+
: resolvedType;
|
|
366
|
+
if (typeof referenceType !== 'function' || (0, type_resolver_1.isBuiltinType)(referenceType)) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
const propOptions = { ...options };
|
|
370
|
+
if (propOptions.partial !== 'deep') {
|
|
371
|
+
// Do not cascade `partial` to nested properties
|
|
372
|
+
delete propOptions.partial;
|
|
373
|
+
}
|
|
374
|
+
if (propOptions.includeRelations === true) {
|
|
375
|
+
// Do not cascade `includeRelations` to nested properties
|
|
376
|
+
delete propOptions.includeRelations;
|
|
377
|
+
}
|
|
378
|
+
// `title` is the unique identity of a schema,
|
|
379
|
+
// it should be removed from the `options`
|
|
380
|
+
// when generating the relation or property schemas
|
|
381
|
+
delete propOptions.title;
|
|
382
|
+
const propSchema = getJsonSchema(referenceType, propOptions);
|
|
383
|
+
// JSONSchema6Definition allows both boolean and JSONSchema6 types
|
|
384
|
+
if (typeof result.properties[p] !== 'boolean') {
|
|
385
|
+
const prop = result.properties[p];
|
|
386
|
+
const propTitle = propSchema.title ?? referenceType.name;
|
|
387
|
+
const targetRef = { $ref: `#/definitions/${propTitle}` };
|
|
388
|
+
if (prop.type === 'array' && prop.items) {
|
|
389
|
+
// Update $ref for array type
|
|
390
|
+
prop.items = targetRef;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
result.properties[p] = targetRef;
|
|
394
|
+
}
|
|
395
|
+
includeReferencedSchema(propTitle, propSchema);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
result.additionalProperties = meta.settings.strict === false;
|
|
399
|
+
debug(' additionalProperties?', result.additionalProperties);
|
|
400
|
+
if (options.includeRelations) {
|
|
401
|
+
for (const r in meta.relations) {
|
|
402
|
+
result.properties = result.properties ?? {};
|
|
403
|
+
const relMeta = meta.relations[r];
|
|
404
|
+
if (!relMeta)
|
|
405
|
+
continue;
|
|
406
|
+
const targetType = (0, type_resolver_1.resolveType)(relMeta.target);
|
|
407
|
+
// `title` is the unique identity of a schema,
|
|
408
|
+
// it should be removed from the `options`
|
|
409
|
+
// when generating the relation or property schemas
|
|
410
|
+
const targetOptions = { ...options };
|
|
411
|
+
delete targetOptions.title;
|
|
412
|
+
const targetSchema = getJsonSchema(targetType, targetOptions);
|
|
413
|
+
const targetRef = { $ref: `#/definitions/${targetSchema.title}` };
|
|
414
|
+
const propDef = getNavigationalPropertyForRelation(relMeta, targetRef);
|
|
415
|
+
result.properties[relMeta.name] =
|
|
416
|
+
result.properties[relMeta.name] || propDef;
|
|
417
|
+
includeReferencedSchema(targetSchema.title, targetSchema);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
function includeReferencedSchema(name, schema) {
|
|
421
|
+
if (!schema || !Object.keys(schema).length)
|
|
422
|
+
return;
|
|
423
|
+
// promote nested definition to the top level
|
|
424
|
+
if (result !== schema?.definitions) {
|
|
425
|
+
for (const key in schema.definitions) {
|
|
426
|
+
if (key === title)
|
|
427
|
+
continue;
|
|
428
|
+
result.definitions = result.definitions ?? {};
|
|
429
|
+
result.definitions[key] = schema.definitions[key];
|
|
430
|
+
}
|
|
431
|
+
delete schema.definitions;
|
|
432
|
+
}
|
|
433
|
+
if (result !== schema) {
|
|
434
|
+
result.definitions = result.definitions ?? {};
|
|
435
|
+
result.definitions[name] = schema;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
if (meta.jsonSchema) {
|
|
439
|
+
Object.assign(result, meta.jsonSchema);
|
|
440
|
+
}
|
|
441
|
+
return result;
|
|
442
|
+
}
|
|
443
|
+
//# sourceMappingURL=build-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-schema.js","sourceRoot":"","sources":["../../../src/core/Loopback/build-schema.ts"],"names":[],"mappings":"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"}
|