@goast/core 0.4.2 → 0.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/esm/mod.d.ts +2 -0
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +2 -0
- package/esm/src/codegen/config.d.ts +11 -0
- package/esm/src/codegen/config.d.ts.map +1 -1
- package/esm/src/codegen/config.js +1 -0
- package/esm/src/parse/parser.js +1 -1
- package/esm/src/transform/api-types.d.ts +2 -1
- package/esm/src/transform/api-types.d.ts.map +1 -1
- package/esm/src/transform/transformer.d.ts.map +1 -1
- package/esm/src/transform/transformer.js +1 -0
- package/esm/src/transform/types.d.ts +3 -3
- package/esm/src/transform/types.d.ts.map +1 -1
- package/esm/src/utils/api-data.utils.d.ts +3 -0
- package/esm/src/utils/api-data.utils.d.ts.map +1 -0
- package/esm/src/utils/api-data.utils.js +38 -0
- package/esm/src/utils/file-system.utils.d.ts +2 -0
- package/esm/src/utils/file-system.utils.d.ts.map +1 -1
- package/esm/src/utils/file-system.utils.js +12 -2
- package/esm/src/utils/schema.utils.d.ts +1 -0
- package/esm/src/utils/schema.utils.d.ts.map +1 -1
- package/esm/src/utils/schema.utils.js +5 -0
- package/package.json +2 -2
- package/script/mod.d.ts +2 -0
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +2 -0
- package/script/src/codegen/config.d.ts +11 -0
- package/script/src/codegen/config.d.ts.map +1 -1
- package/script/src/codegen/config.js +1 -0
- package/script/src/parse/parser.js +1 -1
- package/script/src/transform/api-types.d.ts +2 -1
- package/script/src/transform/api-types.d.ts.map +1 -1
- package/script/src/transform/transformer.d.ts.map +1 -1
- package/script/src/transform/transformer.js +1 -0
- package/script/src/transform/types.d.ts +3 -3
- package/script/src/transform/types.d.ts.map +1 -1
- package/script/src/utils/api-data.utils.d.ts +3 -0
- package/script/src/utils/api-data.utils.d.ts.map +1 -0
- package/script/src/utils/api-data.utils.js +42 -0
- package/script/src/utils/file-system.utils.d.ts +2 -0
- package/script/src/utils/file-system.utils.d.ts.map +1 -1
- package/script/src/utils/file-system.utils.js +12 -1
- package/script/src/utils/schema.utils.d.ts +1 -0
- package/script/src/utils/schema.utils.d.ts.map +1 -1
- package/script/src/utils/schema.utils.js +6 -0
- package/src/_dnt.shims.ts +0 -69
- package/src/mod.ts +0 -33
- package/src/src/ast/node.ts +0 -46
- package/src/src/codegen/config.ts +0 -28
- package/src/src/codegen/endpoints-generator.ts +0 -72
- package/src/src/codegen/generator.ts +0 -181
- package/src/src/codegen/internal-utils.ts +0 -6
- package/src/src/codegen/schemas-generator.ts +0 -87
- package/src/src/codegen/services-generator.ts +0 -77
- package/src/src/codegen/types.ts +0 -37
- package/src/src/collect/collector.ts +0 -142
- package/src/src/collect/helpers.ts +0 -36
- package/src/src/collect/types.ts +0 -21
- package/src/src/internal-utils.ts +0 -5
- package/src/src/parse/deref-proxy.ts +0 -64
- package/src/src/parse/openapi-types.ts +0 -949
- package/src/src/parse/parser.ts +0 -220
- package/src/src/parse/types.ts +0 -27
- package/src/src/transform/api-types.ts +0 -243
- package/src/src/transform/helpers.ts +0 -216
- package/src/src/transform/transform-document.ts +0 -35
- package/src/src/transform/transform-endpoint.ts +0 -331
- package/src/src/transform/transform-schema.ts +0 -217
- package/src/src/transform/transformer.ts +0 -52
- package/src/src/transform/types.ts +0 -52
- package/src/src/utils/action-provider.ts +0 -58
- package/src/src/utils/array.utils.ts +0 -7
- package/src/src/utils/asset-manager.ts +0 -51
- package/src/src/utils/class.utils.ts +0 -40
- package/src/src/utils/common.utils.ts +0 -86
- package/src/src/utils/condition.ts +0 -7
- package/src/src/utils/endpoint.utils.ts +0 -10
- package/src/src/utils/error.utils.ts +0 -3
- package/src/src/utils/factory.ts +0 -42
- package/src/src/utils/file-system.utils.ts +0 -48
- package/src/src/utils/generator.utils.ts +0 -6
- package/src/src/utils/object.utils.ts +0 -32
- package/src/src/utils/schema.utils.ts +0 -142
- package/src/src/utils/source-builder.ts +0 -597
- package/src/src/utils/string-builder/options.ts +0 -19
- package/src/src/utils/string-builder/string-builder.ts +0 -165
- package/src/src/utils/string-builder/utils.ts +0 -69
- package/src/src/utils/string.utils.ts +0 -369
- package/src/src/utils/string.utils.types.ts +0 -179
- package/src/src/utils/type.utils.ts +0 -93
package/src/src/codegen/types.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { ApiData } from '../transform/api-types.js';
|
|
2
|
-
import type { MaybePromise } from '../utils/type.utils.js';
|
|
3
|
-
import type { OpenApiGeneratorConfig } from './config.js';
|
|
4
|
-
|
|
5
|
-
export type AnyConfig = Readonly<Record<string, unknown>>;
|
|
6
|
-
export type OpenApiGeneratorInput = Record<string, unknown>;
|
|
7
|
-
export type OpenApiGeneratorOutput = Record<string, unknown> | undefined;
|
|
8
|
-
export type OpenApiGeneratorContext<TInput extends OpenApiGeneratorInput = OpenApiGeneratorInput> = {
|
|
9
|
-
data: ApiData;
|
|
10
|
-
input: TInput;
|
|
11
|
-
config: OpenApiGeneratorConfig;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type OpenApiGenerationProviderContext<TInput extends OpenApiGeneratorInput, TConfig extends AnyConfig> =
|
|
15
|
-
& Omit<
|
|
16
|
-
OpenApiGeneratorContext<TInput>,
|
|
17
|
-
'config'
|
|
18
|
-
>
|
|
19
|
-
& {
|
|
20
|
-
config: OpenApiGeneratorConfig & TConfig;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export interface OpenApiGenerationProvider<
|
|
24
|
-
TInput extends OpenApiGeneratorInput = OpenApiGeneratorInput,
|
|
25
|
-
TOutput extends OpenApiGeneratorOutput = OpenApiGeneratorOutput,
|
|
26
|
-
TConfig extends AnyConfig = AnyConfig,
|
|
27
|
-
> {
|
|
28
|
-
generate(
|
|
29
|
-
...args: Parameters<OpenApiGenerationProviderFn<TInput, TOutput, TConfig>>
|
|
30
|
-
): ReturnType<OpenApiGenerationProviderFn<TInput, TOutput, TConfig>>;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export type OpenApiGenerationProviderFn<
|
|
34
|
-
TInput extends OpenApiGeneratorInput = OpenApiGeneratorInput,
|
|
35
|
-
TOutput extends OpenApiGeneratorOutput = OpenApiGeneratorOutput,
|
|
36
|
-
TConfig extends AnyConfig = AnyConfig,
|
|
37
|
-
> = (context: OpenApiGeneratorContext<TInput>, config?: Partial<TConfig>) => MaybePromise<TOutput>;
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
OpenApiDocument,
|
|
3
|
-
OpenApiHeader,
|
|
4
|
-
OpenApiMediaType,
|
|
5
|
-
OpenApiParameter,
|
|
6
|
-
OpenApiPathItem,
|
|
7
|
-
OpenApiRequestBody,
|
|
8
|
-
OpenApiResponse,
|
|
9
|
-
OpenApiSchema,
|
|
10
|
-
} from '../parse/openapi-types.js';
|
|
11
|
-
import type { Deref } from '../parse/types.js';
|
|
12
|
-
import { collect, collectRecord } from './helpers.js';
|
|
13
|
-
import type { OpenApiCollectorData } from './types.js';
|
|
14
|
-
|
|
15
|
-
type Collect<T> = Deref<T> | Deref<T>[] | undefined;
|
|
16
|
-
|
|
17
|
-
export function collectOpenApi(apis: Deref<OpenApiDocument>[]): OpenApiCollectorData {
|
|
18
|
-
const data: OpenApiCollectorData = {
|
|
19
|
-
documents: [],
|
|
20
|
-
schemas: new Map(),
|
|
21
|
-
endpoints: new Map(),
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
collectDocument(data, apis);
|
|
25
|
-
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const jsonSchemaProperties = ['$id', 'allOf', 'anyOf', 'oneOf', 'enum', 'not', 'properties', 'title', 'type'];
|
|
30
|
-
|
|
31
|
-
function collectDocument(data: OpenApiCollectorData, documents: Collect<OpenApiDocument>) {
|
|
32
|
-
collect(data, documents, (data, document) => {
|
|
33
|
-
data.documents.push(document);
|
|
34
|
-
collectPaths(data, document.paths);
|
|
35
|
-
collectRecord<Deref<OpenApiSchema>>(data, document.components?.schemas, collectSchema);
|
|
36
|
-
collectRecord<Deref<OpenApiSchema>>(data, document.definitions, collectSchema);
|
|
37
|
-
collectRecord<Deref<OpenApiParameter>>(data, document.components?.parameters, collectParameter);
|
|
38
|
-
collectRecord<Deref<OpenApiParameter>>(data, document.parameters, collectParameter);
|
|
39
|
-
collectRecord<Deref<OpenApiRequestBody>>(data, document.components?.requestBodies, collectRequestBody);
|
|
40
|
-
collectRecord<Deref<OpenApiResponse>>(data, document.components?.responses, collectResponse);
|
|
41
|
-
collectRecord<Deref<OpenApiResponse>>(data, document.responses, collectResponse);
|
|
42
|
-
collectRecord<Deref<OpenApiHeader>>(data, document.components?.headers, collectHeader);
|
|
43
|
-
|
|
44
|
-
if (Object.keys(document).some((key) => jsonSchemaProperties.includes(key))) {
|
|
45
|
-
collectSchema(data, document as Deref<OpenApiSchema>);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function collectPaths(data: OpenApiCollectorData, paths: Collect<Record<string, OpenApiPathItem>>) {
|
|
51
|
-
collect(data, paths, (data, path) => {
|
|
52
|
-
collectRecord<Deref<OpenApiPathItem>>(data, path, collectPathItem);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function collectPathItem(data: OpenApiCollectorData, pathItems: Collect<OpenApiPathItem>, path: string) {
|
|
57
|
-
collect(data, pathItems, (data, pathItem) => {
|
|
58
|
-
collectParameter(data, pathItem.parameters);
|
|
59
|
-
for (const m of ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const) {
|
|
60
|
-
const operation = pathItem[m];
|
|
61
|
-
if (!operation) continue;
|
|
62
|
-
const key = `${operation.$src.file}#${operation.$src.path}`;
|
|
63
|
-
if (data.endpoints.has(key)) continue;
|
|
64
|
-
data.endpoints.set(key, {
|
|
65
|
-
path,
|
|
66
|
-
method: m,
|
|
67
|
-
pathItem,
|
|
68
|
-
operation,
|
|
69
|
-
});
|
|
70
|
-
collectParameter(data, operation.parameters);
|
|
71
|
-
collectRequestBody(data, operation.requestBody);
|
|
72
|
-
collectRecord<Deref<OpenApiResponse>>(data, operation.responses, collectResponse);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function collectSchema(data: OpenApiCollectorData, schemas: Collect<OpenApiSchema>) {
|
|
78
|
-
collect(data, schemas, (data, schema) => {
|
|
79
|
-
const key = `${schema.$src.file}#${schema.$src.path}`;
|
|
80
|
-
if (data.schemas.has(key)) return;
|
|
81
|
-
data.schemas.set(key, schema);
|
|
82
|
-
collectSchema(data, schema.allOf);
|
|
83
|
-
collectSchema(data, schema.anyOf);
|
|
84
|
-
collectSchema(data, schema.oneOf);
|
|
85
|
-
collectSchema(data, schema.items);
|
|
86
|
-
collectSchema(data, schema.not);
|
|
87
|
-
collectRecord<Deref<OpenApiSchema>>(data, schema.properties, collectSchema);
|
|
88
|
-
collectRecord<Deref<OpenApiSchema>>(data, schema.patternProperties, collectSchema);
|
|
89
|
-
collectRecord<Deref<OpenApiSchema>>(data, schema.dependencies, collectSchema);
|
|
90
|
-
collectRecord<Deref<OpenApiSchema>>(data, schema.definitions, collectSchema);
|
|
91
|
-
if (typeof schema.additionalProperties === 'object') {
|
|
92
|
-
collectSchema(data, schema.additionalProperties);
|
|
93
|
-
}
|
|
94
|
-
if (typeof schema.additionalItems === 'object') {
|
|
95
|
-
collectSchema(data, schema.additionalItems);
|
|
96
|
-
}
|
|
97
|
-
if (typeof schema.discriminator === 'object') {
|
|
98
|
-
collectRecord<Deref<OpenApiSchema>>(data, schema.discriminator?.mapping, collectSchema);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function collectParameter(data: OpenApiCollectorData, parameters: Collect<OpenApiParameter>) {
|
|
104
|
-
collect(data, parameters, (data, parameter) => {
|
|
105
|
-
collectSchema(data, parameter.schema);
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function collectMediaType(data: OpenApiCollectorData, mediaTypes: Collect<OpenApiMediaType>) {
|
|
110
|
-
collect(data, mediaTypes, (data, mediaType) => {
|
|
111
|
-
collectSchema(data, mediaType.schema);
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function collectRequestBody(data: OpenApiCollectorData, requestBody: Collect<OpenApiRequestBody>) {
|
|
116
|
-
collect(data, requestBody, (data, requestBody) => {
|
|
117
|
-
collectRecord<Deref<OpenApiMediaType>>(data, requestBody.content, collectMediaType);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function isSchema(obj: Record<string, unknown>): obj is Deref<OpenApiSchema> {
|
|
122
|
-
return obj && typeof obj === 'object' && obj['type'] !== undefined;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
function collectResponse(data: OpenApiCollectorData, responses: Collect<OpenApiResponse>) {
|
|
126
|
-
collect(data, responses, (data, responses) => {
|
|
127
|
-
collectRecord<Deref<OpenApiMediaType>>(data, responses.content, collectMediaType);
|
|
128
|
-
collect(data, responses.headers, (data, header) => {
|
|
129
|
-
if (isSchema(header)) {
|
|
130
|
-
collectSchema(data, header);
|
|
131
|
-
} else {
|
|
132
|
-
collectHeader(data, header);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function collectHeader(data: OpenApiCollectorData, headers: Collect<OpenApiHeader>) {
|
|
139
|
-
collect(data, headers, (data, headers) => {
|
|
140
|
-
collectSchema(data, headers.schema);
|
|
141
|
-
});
|
|
142
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { isOpenApiObjectProperty } from '../internal-utils.js';
|
|
2
|
-
import type { Nullable } from '../utils/type.utils.js';
|
|
3
|
-
import type { OpenApiCollectorData } from './types.js';
|
|
4
|
-
|
|
5
|
-
export function collect<T extends Record<`x-${string}`, unknown>>(
|
|
6
|
-
data: OpenApiCollectorData,
|
|
7
|
-
obj: Nullable<T | Nullable<T>[]>,
|
|
8
|
-
func: (data: OpenApiCollectorData, obj: NonNullable<T>) => void,
|
|
9
|
-
) {
|
|
10
|
-
if (!obj) return;
|
|
11
|
-
if (Array.isArray(obj)) {
|
|
12
|
-
for (const o of obj) {
|
|
13
|
-
if (!o) continue;
|
|
14
|
-
if (o['x-ignore']) continue;
|
|
15
|
-
func(data, o);
|
|
16
|
-
}
|
|
17
|
-
} else {
|
|
18
|
-
if (obj['x-ignore']) return;
|
|
19
|
-
func(data, obj);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function collectRecord<T extends Record<`x-${string}`, unknown>>(
|
|
24
|
-
data: OpenApiCollectorData,
|
|
25
|
-
obj: Nullable<Record<string, Nullable<T>>>,
|
|
26
|
-
func: (data: OpenApiCollectorData, obj: NonNullable<T>, key: string) => void,
|
|
27
|
-
) {
|
|
28
|
-
if (!obj) return;
|
|
29
|
-
for (const key in obj) {
|
|
30
|
-
if (!isOpenApiObjectProperty(key)) continue;
|
|
31
|
-
const value = obj[key];
|
|
32
|
-
if (!value) continue;
|
|
33
|
-
if (value['x-ignore']) continue;
|
|
34
|
-
func(data, value, key);
|
|
35
|
-
}
|
|
36
|
-
}
|
package/src/src/collect/types.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
OpenApiDocument,
|
|
3
|
-
OpenApiHttpMethod,
|
|
4
|
-
OpenApiOperation,
|
|
5
|
-
OpenApiPathItem,
|
|
6
|
-
OpenApiSchema,
|
|
7
|
-
} from '../parse/openapi-types.js';
|
|
8
|
-
import type { Deref } from '../parse/types.js';
|
|
9
|
-
|
|
10
|
-
export type OpenApiCollectorEndpointInfo = {
|
|
11
|
-
path: string;
|
|
12
|
-
method: OpenApiHttpMethod;
|
|
13
|
-
pathItem: Deref<OpenApiPathItem>;
|
|
14
|
-
operation: Deref<OpenApiOperation>;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export type OpenApiCollectorData = {
|
|
18
|
-
documents: Deref<OpenApiDocument>[];
|
|
19
|
-
schemas: Map<string, Deref<OpenApiSchema>>;
|
|
20
|
-
endpoints: Map<string, OpenApiCollectorEndpointInfo>;
|
|
21
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { isNullish } from '../utils/common.utils.js';
|
|
2
|
-
import type { OpenApiObject } from './openapi-types.js';
|
|
3
|
-
import type { Deref, DerefSource } from './types.js';
|
|
4
|
-
|
|
5
|
-
export function createDerefProxy<T extends OpenApiObject<string>>(
|
|
6
|
-
obj: T,
|
|
7
|
-
source: DerefSource<T>,
|
|
8
|
-
ref?: Deref<T>,
|
|
9
|
-
): Deref<T> {
|
|
10
|
-
return new Proxy(obj, new DerefProxyHandler(source, ref)) as Deref<T>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const propertiesNotDerivedFromRef: PropertyKey[] = ['title'];
|
|
14
|
-
|
|
15
|
-
class DerefProxyHandler<T extends OpenApiObject<string>> implements ProxyHandler<T> {
|
|
16
|
-
private readonly _overwrittenValues: Record<PropertyKey, unknown> = {};
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
private readonly _source: DerefSource<T>,
|
|
20
|
-
private _ref?: Deref<T>,
|
|
21
|
-
) {}
|
|
22
|
-
|
|
23
|
-
public get(target: T, prop: PropertyKey): unknown {
|
|
24
|
-
if (prop === '$ref') {
|
|
25
|
-
return this._ref;
|
|
26
|
-
} else if (prop === '$src') {
|
|
27
|
-
return this._source;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (this._overwrittenValues[prop] !== undefined) {
|
|
31
|
-
return this._overwrittenValues[prop];
|
|
32
|
-
}
|
|
33
|
-
if ((target as Record<PropertyKey, unknown>)[prop] !== undefined) {
|
|
34
|
-
return (target as Record<PropertyKey, unknown>)[prop];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return propertiesNotDerivedFromRef.includes(prop)
|
|
38
|
-
? undefined
|
|
39
|
-
: (this._ref as Record<PropertyKey, unknown> | undefined)?.[prop];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public set(_target: T, prop: PropertyKey, value: unknown): boolean {
|
|
43
|
-
if (prop === '$ref' && (typeof value === 'object' || typeof value === 'undefined')) {
|
|
44
|
-
this._ref = !value ? undefined : (value as Deref<T>);
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
if (prop === '$src') {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
this._overwrittenValues[prop] = value;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public has(target: T, prop: PropertyKey): boolean {
|
|
56
|
-
return prop in target || (!isNullish(this._ref) && prop in this._ref);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public ownKeys(target: T): ArrayLike<string | symbol> {
|
|
60
|
-
return Array.from(
|
|
61
|
-
new Set([...Object.keys(target), ...(!isNullish(this._ref) ? Object.keys(this._ref) : []), '$ref', '$src']),
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|