svelte-reflector 1.0.9 → 1.0.11
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/generate-doc.js +3 -0
- package/dist/helpers/helpers.d.ts +3 -0
- package/dist/helpers/helpers.js +34 -2
- package/dist/main.js +12 -6
- package/dist/method.d.ts +8 -3
- package/dist/method.js +69 -52
- package/dist/module.d.ts +8 -1
- package/dist/module.js +89 -23
- package/dist/property.d.ts +6 -1
- package/dist/property.js +31 -18
- package/dist/reflector/controllers/admin/account/admin-account.module.svelte.d.ts +7 -0
- package/dist/reflector/controllers/admin/account/admin-account.module.svelte.js +28 -0
- package/dist/reflector/controllers/admin/account/owner/account-owner.module.svelte.d.ts +15 -0
- package/dist/reflector/controllers/admin/account/owner/account-owner.module.svelte.js +79 -0
- package/dist/reflector/controllers/admin/kyc/config/kyc-config.module.svelte.d.ts +49 -0
- package/dist/reflector/controllers/admin/kyc/config/kyc-config.module.svelte.js +303 -0
- package/dist/reflector/controllers/admin/policy/system/policy-system.module.svelte.d.ts +9 -0
- package/dist/reflector/controllers/admin/policy/system/policy-system.module.svelte.js +36 -0
- package/dist/reflector/controllers/admin/smtp/config/smtp-config.module.svelte.d.ts +19 -0
- package/dist/reflector/controllers/admin/smtp/config/smtp-config.module.svelte.js +82 -0
- package/dist/reflector/controllers/customer/kyc/file-upload/kyc-file-upload.module.svelte.d.ts +37 -0
- package/dist/reflector/controllers/customer/kyc/file-upload/kyc-file-upload.module.svelte.js +228 -0
- package/dist/reflector/controllers/member/account/member-account.module.svelte.d.ts +11 -0
- package/dist/reflector/controllers/member/account/member-account.module.svelte.js +54 -0
- package/dist/reflector/controllers/owner/account/owner-account.module.svelte.d.ts +11 -0
- package/dist/reflector/controllers/owner/account/owner-account.module.svelte.js +54 -0
- package/dist/reflector/controllers/owner/kyc/config/kyc-config.module.svelte.d.ts +49 -0
- package/dist/reflector/controllers/owner/kyc/config/kyc-config.module.svelte.js +303 -0
- package/dist/reflector/controllers/owner/kyc/self/create-or-update/self-create-or-update.module.svelte.d.ts +33 -0
- package/dist/reflector/controllers/owner/kyc/self/create-or-update/self-create-or-update.module.svelte.js +197 -0
- package/dist/reflector/controllers/owner/policy/owner-policy.module.svelte.d.ts +9 -0
- package/dist/reflector/controllers/owner/policy/owner-policy.module.svelte.js +36 -0
- package/dist/reflector/controllers/owner/smtp/config/smtp-config.module.svelte.d.ts +19 -0
- package/dist/reflector/controllers/owner/smtp/config/smtp-config.module.svelte.js +82 -0
- package/dist/reflector/controllers/public/auth/sign-in-firebase/auth-sign-in-firebase.module.svelte.d.ts +29 -0
- package/dist/reflector/controllers/public/auth/sign-in-firebase/auth-sign-in-firebase.module.svelte.js +223 -0
- package/dist/reflector/controllers/public/reset-password/tenant/send-recovery-email/tenant-send-recovery-email.module.svelte.d.ts +13 -0
- package/dist/reflector/controllers/public/reset-password/tenant/send-recovery-email/tenant-send-recovery-email.module.svelte.js +49 -0
- package/dist/reflector/controllers/restricted/account/avatar-file-upload/account-avatar-file-upload.module.svelte.d.ts +19 -0
- package/dist/reflector/controllers/restricted/account/avatar-file-upload/account-avatar-file-upload.module.svelte.js +114 -0
- package/dist/reflector/controllers/restricted/bank/restricted-bank.module.svelte.d.ts +15 -0
- package/dist/reflector/controllers/restricted/bank/restricted-bank.module.svelte.js +78 -0
- package/dist/reflector/controllers/restricted/files/presigned-url/files-presigned-url.module.svelte.d.ts +11 -0
- package/dist/reflector/controllers/restricted/files/presigned-url/files-presigned-url.module.svelte.js +56 -0
- package/dist/reflector/controllers/restricted/notification/restricted-notification.module.svelte.d.ts +9 -0
- package/dist/reflector/controllers/restricted/notification/restricted-notification.module.svelte.js +36 -0
- package/dist/reflector/controllers/restricted/two-factor-auth/status/two-factor-auth-status.module.svelte.d.ts +15 -0
- package/dist/reflector/controllers/restricted/two-factor-auth/status/two-factor-auth-status.module.svelte.js +68 -0
- package/dist/reflector/reflector.types.d.ts +4 -0
- package/dist/reflector/reflector.types.js +4 -0
- package/dist/reflector/schemas.d.ts +357 -0
- package/dist/reflector/schemas.js +1709 -0
- package/dist/request.d.ts +2 -0
- package/dist/request.js +8 -0
- package/dist/schema.d.ts +1 -0
- package/dist/schema.js +9 -5
- package/package.json +1 -1
package/dist/generate-doc.js
CHANGED
|
@@ -4,6 +4,7 @@ import axios from "axios";
|
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import { Reflector } from "./main.js";
|
|
7
|
+
import { Source } from "./file.js";
|
|
7
8
|
/** ajuda a pegar a 1ª env definida dentre várias chaves possíveis */
|
|
8
9
|
function pickEnv(...keys) {
|
|
9
10
|
for (const k of keys) {
|
|
@@ -44,6 +45,8 @@ export async function reflector(manual = false) {
|
|
|
44
45
|
try {
|
|
45
46
|
const documentation = await axios.get(DOC_URL, { timeout: 15000 });
|
|
46
47
|
data = documentation.data;
|
|
48
|
+
const backup = new Source({ path: "src/reflector/backup.json", data: JSON.stringify(data) });
|
|
49
|
+
backup.save();
|
|
47
50
|
}
|
|
48
51
|
catch (e) {
|
|
49
52
|
console.warn(`[reflector] Não foi possível obter a documentação em ${DOC_URL}. Carregando cópia local...`);
|
|
@@ -3,9 +3,12 @@ export declare function sanitizeKey(name: string): string;
|
|
|
3
3
|
export declare function sanitizeNumber(texto: string): string;
|
|
4
4
|
export declare function capitalizeFirstLetter(text: string): string;
|
|
5
5
|
export declare function splitByUppercase(text: string): string[];
|
|
6
|
+
export declare function treatByUppercase(text?: string): string;
|
|
6
7
|
export declare function createDangerMessage(text: string): void;
|
|
8
|
+
export declare function getFilteredEntities(rawEndpoint: string): string[];
|
|
7
9
|
export declare function getEndpointAndModuleName(rawEndpoint: string): {
|
|
8
10
|
baseEndpoint: string;
|
|
9
11
|
moduleName: string;
|
|
10
12
|
};
|
|
11
13
|
export declare function getEndpoint(rawEndpoint: string): string;
|
|
14
|
+
export declare function testeEndpoint(rawEndpoint: string): string;
|
package/dist/helpers/helpers.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// if (!lhs) return "";
|
|
8
8
|
// return `${lhs.trim()} = ${cleaned}`;
|
|
9
9
|
// }
|
|
10
|
+
const trashWords = new Set(["Kyc", "Get", "Customer", "Response", "Res", "Self", "Admin"]);
|
|
10
11
|
export function toCamelCase(str) {
|
|
11
12
|
return str
|
|
12
13
|
.split("-")
|
|
@@ -34,16 +35,38 @@ export function capitalizeFirstLetter(text) {
|
|
|
34
35
|
export function splitByUppercase(text) {
|
|
35
36
|
return text.split(/(?=[A-Z])/);
|
|
36
37
|
}
|
|
38
|
+
export function treatByUppercase(text) {
|
|
39
|
+
const base = (text ?? "").trim();
|
|
40
|
+
const raw = base.length > 0 ? base : "entity";
|
|
41
|
+
// Se splitByUppercase tiver tipagem "string[] | undefined", isso resolve.
|
|
42
|
+
const parts = (splitByUppercase(raw) ?? [])
|
|
43
|
+
.map((p) => p.trim())
|
|
44
|
+
.filter((p) => p.length > 0)
|
|
45
|
+
.filter((p) => !trashWords.has(p));
|
|
46
|
+
if (parts.length === 0)
|
|
47
|
+
return "entity";
|
|
48
|
+
const words = parts.length === 1 ? [parts[0], "Entity"] : parts;
|
|
49
|
+
const first = words[0];
|
|
50
|
+
if (!first)
|
|
51
|
+
return "entity"; // deixa o TS 100% feliz
|
|
52
|
+
let out = first.charAt(0).toLowerCase() + first.slice(1);
|
|
53
|
+
for (let i = 1; i < words.length; i++) {
|
|
54
|
+
const w = words[i];
|
|
55
|
+
if (!w)
|
|
56
|
+
continue;
|
|
57
|
+
out += w.charAt(0).toUpperCase() + w.slice(1);
|
|
58
|
+
}
|
|
59
|
+
return out.length > 0 ? out : "entity";
|
|
60
|
+
}
|
|
37
61
|
export function createDangerMessage(text) {
|
|
38
62
|
console.log("\x1b[31m%s\x1b[0m", `[!] ${text}`);
|
|
39
63
|
}
|
|
40
|
-
function getFilteredEntities(rawEndpoint) {
|
|
64
|
+
export function getFilteredEntities(rawEndpoint) {
|
|
41
65
|
const splittedEntitys = rawEndpoint.split("/");
|
|
42
66
|
return splittedEntitys.filter((item) => item !== "" && !item.includes("{"));
|
|
43
67
|
}
|
|
44
68
|
export function getEndpointAndModuleName(rawEndpoint) {
|
|
45
69
|
const filteredEntitys = getFilteredEntities(rawEndpoint);
|
|
46
|
-
// console.log(filteredEntitys);
|
|
47
70
|
const moduleName = filteredEntitys.map((x) => sanitizeKey(capitalizeFirstLetter(x))).join("");
|
|
48
71
|
const baseEndpoint = filteredEntitys.join("/");
|
|
49
72
|
return { baseEndpoint: getEndpoint(baseEndpoint), moduleName };
|
|
@@ -52,3 +75,12 @@ export function getEndpoint(rawEndpoint) {
|
|
|
52
75
|
const filteredEntitys = getFilteredEntities(rawEndpoint);
|
|
53
76
|
return filteredEntitys.join("/");
|
|
54
77
|
}
|
|
78
|
+
export function testeEndpoint(rawEndpoint) {
|
|
79
|
+
const teste = rawEndpoint.split("/");
|
|
80
|
+
const a = teste
|
|
81
|
+
.filter((t) => t !== "")
|
|
82
|
+
.map((str) => {
|
|
83
|
+
return str.includes("}") ? `$${str}` : str;
|
|
84
|
+
});
|
|
85
|
+
return a.join("/");
|
|
86
|
+
}
|
package/dist/main.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import { Source } from "./file.js";
|
|
4
|
-
import { getEndpoint,
|
|
4
|
+
import { getEndpoint, splitByUppercase, testeEndpoint } from "./helpers/helpers.js";
|
|
5
5
|
import { Schema } from "./schema.js";
|
|
6
6
|
import { Module } from "./module.js";
|
|
7
|
-
// const defaultMethods = ["get", "patch", "post", "put", "delete"] as const;
|
|
8
7
|
export class Reflector {
|
|
9
8
|
components;
|
|
10
9
|
paths;
|
|
11
10
|
dir = "src";
|
|
12
11
|
generatedDir = `${this.dir}/reflector`;
|
|
13
12
|
localDoc = new Source({ path: path.resolve(process.cwd(), `${this.dir}/backup.json`) });
|
|
14
|
-
src = new Source({ path: path.resolve(process.cwd(), this.generatedDir) });
|
|
13
|
+
src = new Source({ path: path.resolve(process.cwd(), `${this.generatedDir}/controllers`) });
|
|
15
14
|
typesSrc = new Source({ path: path.resolve(process.cwd(), `${this.generatedDir}/reflector.types.ts`) });
|
|
16
15
|
schemaFile = new Source({ path: path.resolve(process.cwd(), `${this.generatedDir}/schemas.ts`) });
|
|
17
16
|
files;
|
|
@@ -35,10 +34,17 @@ export class Reflector {
|
|
|
35
34
|
if ("$ref" in object || !object.properties)
|
|
36
35
|
continue;
|
|
37
36
|
const properties = object.properties;
|
|
38
|
-
|
|
37
|
+
const schema = {
|
|
39
38
|
properties,
|
|
40
39
|
name: key,
|
|
41
40
|
requireds: object.required || [],
|
|
41
|
+
};
|
|
42
|
+
schemas.push(new Schema({
|
|
43
|
+
...schema,
|
|
44
|
+
isEmpty: false,
|
|
45
|
+
}), new Schema({
|
|
46
|
+
...schema,
|
|
47
|
+
isEmpty: true,
|
|
42
48
|
}));
|
|
43
49
|
}
|
|
44
50
|
console.log(`${schemas.length} schemas gerados com sucesso.`);
|
|
@@ -74,7 +80,7 @@ export class Reflector {
|
|
|
74
80
|
return new Module({
|
|
75
81
|
name,
|
|
76
82
|
...info,
|
|
77
|
-
dir: this.generatedDir
|
|
83
|
+
dir: `${this.generatedDir}/controllers`,
|
|
78
84
|
});
|
|
79
85
|
});
|
|
80
86
|
return modules;
|
|
@@ -82,7 +88,7 @@ export class Reflector {
|
|
|
82
88
|
build() {
|
|
83
89
|
this.schemaFile.changeData([`import z from 'zod';`, ...this.schemas.map((s) => `${s.schema} ${s.type}`)].join("\n\n"));
|
|
84
90
|
this.schemaFile.save();
|
|
85
|
-
this.typesSrc.changeData("export class Behavior { onError?: () => void; onSuccess?: () => void }");
|
|
91
|
+
this.typesSrc.changeData("export class Behavior { onError?: (e) => void; onSuccess?: () => void }");
|
|
86
92
|
this.typesSrc.save();
|
|
87
93
|
for (const module of this.modules) {
|
|
88
94
|
if (module.methods.length === 0)
|
package/dist/method.d.ts
CHANGED
|
@@ -3,16 +3,21 @@ import { ZodProperty } from "./property.js";
|
|
|
3
3
|
import type { ReflectorOperation } from "./types/types.js";
|
|
4
4
|
export declare class Method {
|
|
5
5
|
name: string;
|
|
6
|
-
zodProperties: ZodProperty[];
|
|
7
6
|
description: string | undefined;
|
|
8
7
|
endpoint: string;
|
|
9
8
|
request: Request;
|
|
9
|
+
paths: ZodProperty[];
|
|
10
|
+
headers: ZodProperty[];
|
|
11
|
+
querys: ZodProperty[];
|
|
12
|
+
cookies: ZodProperty[];
|
|
10
13
|
constructor(params: {
|
|
11
14
|
operation: ReflectorOperation;
|
|
12
15
|
moduleName: string;
|
|
13
16
|
});
|
|
14
|
-
private
|
|
17
|
+
private buildZodProperties;
|
|
18
|
+
private readonly gee;
|
|
19
|
+
private getProps;
|
|
15
20
|
private buildCallMethod;
|
|
16
|
-
private buildDescription;
|
|
17
21
|
build(): string;
|
|
22
|
+
private buildDescription;
|
|
18
23
|
}
|
package/dist/method.js
CHANGED
|
@@ -1,81 +1,95 @@
|
|
|
1
1
|
import { Request } from "./request.js";
|
|
2
2
|
import { ZodProperty } from "./property.js";
|
|
3
|
-
import { createDangerMessage, getEndpoint } from "./helpers/helpers.js";
|
|
3
|
+
import { createDangerMessage, getEndpoint, testeEndpoint, treatByUppercase } from "./helpers/helpers.js";
|
|
4
4
|
export class Method {
|
|
5
5
|
name;
|
|
6
|
-
zodProperties;
|
|
6
|
+
// zodProperties: ZodProperty[];
|
|
7
7
|
description;
|
|
8
8
|
endpoint;
|
|
9
9
|
request;
|
|
10
|
+
paths = [];
|
|
11
|
+
headers = [];
|
|
12
|
+
querys = [];
|
|
13
|
+
cookies = [];
|
|
10
14
|
constructor(params) {
|
|
11
15
|
const { operation } = params;
|
|
12
16
|
this.request = new Request(operation);
|
|
13
17
|
this.description = operation.description ?? operation.summary;
|
|
14
18
|
this.endpoint = operation.endpoint;
|
|
15
19
|
this.name = operation.operationId?.split("_")[1] ?? this.request.apiType;
|
|
16
|
-
|
|
17
|
-
this.zodProperties = parameters;
|
|
20
|
+
this.buildZodProperties(params);
|
|
18
21
|
}
|
|
19
|
-
|
|
22
|
+
buildZodProperties(params) {
|
|
20
23
|
const { operation } = params;
|
|
21
|
-
if (!operation.parameters || operation.parameters?.length === 0)
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
const parameters = [];
|
|
24
|
+
if (!operation.parameters || operation.parameters?.length === 0)
|
|
25
|
+
return;
|
|
25
26
|
for (const object of operation.parameters) {
|
|
26
27
|
if ("$ref" in object)
|
|
27
28
|
continue;
|
|
28
29
|
if (!object.schema)
|
|
29
30
|
continue;
|
|
30
|
-
const { required, name, description, schema } = object;
|
|
31
|
+
const { required, name, description, schema, in: inParam } = object;
|
|
31
32
|
if ("$ref" in schema)
|
|
32
33
|
continue;
|
|
33
|
-
|
|
34
|
+
const zodPropertie = {
|
|
34
35
|
name,
|
|
35
36
|
example: schema.default,
|
|
36
37
|
schemaObject: schema,
|
|
37
38
|
type: schema.type,
|
|
38
39
|
description: description ?? "",
|
|
39
40
|
required: required || true,
|
|
40
|
-
|
|
41
|
+
isEmpty: false,
|
|
42
|
+
inParam,
|
|
43
|
+
};
|
|
44
|
+
if (inParam === "query") {
|
|
45
|
+
this.querys.push(new ZodProperty(zodPropertie));
|
|
46
|
+
}
|
|
47
|
+
else if (inParam === "header") {
|
|
48
|
+
this.headers.push(new ZodProperty(zodPropertie));
|
|
49
|
+
}
|
|
50
|
+
else if (inParam === "path") {
|
|
51
|
+
this.paths.push(new ZodProperty(zodPropertie));
|
|
52
|
+
}
|
|
53
|
+
else if (inParam === "cookie") {
|
|
54
|
+
this.paths.push(new ZodProperty(zodPropertie));
|
|
55
|
+
}
|
|
41
56
|
}
|
|
42
|
-
|
|
57
|
+
}
|
|
58
|
+
gee = (props) => {
|
|
59
|
+
return props.map((x) => x.name).join(",");
|
|
60
|
+
};
|
|
61
|
+
getProps() {
|
|
62
|
+
const headers = this.gee(this.headers);
|
|
63
|
+
const querys = this.gee(this.querys);
|
|
64
|
+
const paths = this.gee(this.paths);
|
|
65
|
+
const cookies = this.gee(this.cookies);
|
|
66
|
+
return `
|
|
67
|
+
${querys.length > 0 ? `const {${querys}} = repo.intercept.bundle(this.querys)` : ""};
|
|
68
|
+
${paths.length > 0 ? `const {${paths}} = repo.intercept.bundle(this.paths)` : ""};
|
|
69
|
+
${cookies.length > 0 ? `const {${cookies}} = repo.intercept.bundle(this.cookies)` : ""};
|
|
70
|
+
`;
|
|
43
71
|
}
|
|
44
72
|
buildCallMethod() {
|
|
45
|
-
const afterResponse = [];
|
|
46
73
|
const beforeResponse = [];
|
|
47
|
-
const props = this.
|
|
48
|
-
const parameters = `
|
|
49
|
-
const bundle = repo.intercept.bundle(this.parameters)
|
|
50
|
-
const {${props}} = bundle
|
|
51
|
-
`;
|
|
52
|
-
const query = `
|
|
53
|
-
queryData: {${props}}
|
|
54
|
-
`;
|
|
74
|
+
// const props = this.getProps();
|
|
55
75
|
if (this.request.apiType === "get") {
|
|
56
|
-
if (this.zodProperties.length > 0) {
|
|
57
|
-
afterResponse.push(parameters);
|
|
58
|
-
beforeResponse.push(`\n`);
|
|
59
|
-
}
|
|
60
76
|
if (this.request.attributeType === "list") {
|
|
61
|
-
beforeResponse.push(`const {data: { data
|
|
77
|
+
beforeResponse.push(`const {data: { data, ...params }} = response`, "\n\n", `this.list = data`, "repo.intercept.rebuild(this.querys, params)");
|
|
62
78
|
const inside = `
|
|
63
|
-
${afterResponse.join(";")}
|
|
64
79
|
const response = await repo.api.get<{data: ${this.request.responseType}}, unknown>({
|
|
65
80
|
endpoint,
|
|
66
|
-
${
|
|
81
|
+
queryData: { ${this.gee(this.querys)} }
|
|
67
82
|
})
|
|
68
83
|
${beforeResponse.join(";")}
|
|
69
84
|
`;
|
|
70
85
|
return { inside, outside: "" };
|
|
71
86
|
}
|
|
72
87
|
else if (this.request.attributeType === "entity") {
|
|
73
|
-
|
|
88
|
+
const entityName = treatByUppercase(this.request.responseType);
|
|
89
|
+
beforeResponse.push(`this.${entityName} = response`);
|
|
74
90
|
const inside = `
|
|
75
|
-
${afterResponse.join(";")}
|
|
76
91
|
const response = await repo.api.get<${this.request.responseType}, unknown>({
|
|
77
92
|
endpoint,
|
|
78
|
-
${query}
|
|
79
93
|
})
|
|
80
94
|
${beforeResponse.join(";")}
|
|
81
95
|
`;
|
|
@@ -83,54 +97,55 @@ export class Method {
|
|
|
83
97
|
}
|
|
84
98
|
}
|
|
85
99
|
else if (this.request.apiType === "post" || this.request.apiType === "put" || this.request.apiType === "patch") {
|
|
86
|
-
let data
|
|
100
|
+
let data;
|
|
101
|
+
let headers;
|
|
87
102
|
if (this.request.bodyType) {
|
|
88
103
|
data = `const data = repo.intercept.bundle(this.forms.${this.name})`;
|
|
89
104
|
}
|
|
90
|
-
const
|
|
105
|
+
const hasHeaders = this.request.parameters.some((p) => p.in === "header");
|
|
106
|
+
const hasData = this.request.bodyType;
|
|
107
|
+
if (hasHeaders) {
|
|
108
|
+
headers = `const headers = repo.intercept.bundle(this.headers)`;
|
|
109
|
+
}
|
|
110
|
+
const outside = ["this.loading = true", data, headers].join("\n");
|
|
91
111
|
const inside = `
|
|
92
|
-
const response = await repo.api.
|
|
112
|
+
const response = await repo.api.${this.request.apiType}<${this.request.responseType}>({
|
|
93
113
|
endpoint,
|
|
94
|
-
data
|
|
114
|
+
${hasData ? "data," : ""}
|
|
115
|
+
${hasHeaders ? "headers," : ""}
|
|
95
116
|
})
|
|
96
117
|
`;
|
|
97
118
|
return { outside, inside };
|
|
98
119
|
}
|
|
99
120
|
else if (this.request.apiType === "delete") {
|
|
100
|
-
const props = this.zodProperties.map((x) => x.name).join(",");
|
|
101
|
-
const propsString = props.length > 0 ? `const {${props}} = this.parameters` : "";
|
|
121
|
+
// const props = this.zodProperties.map((x) => x.name).join(",");
|
|
122
|
+
// const propsString = props.length > 0 ? `const {${props}} = this.parameters` : "";
|
|
102
123
|
const inside = `
|
|
103
|
-
${propsString}
|
|
104
|
-
|
|
105
124
|
const response = await repo.api.delete<${this.request.responseType ?? "null"}, unknown>({
|
|
106
125
|
endpoint,
|
|
107
|
-
${query}
|
|
108
126
|
})
|
|
109
|
-
|
|
110
|
-
this.clearEntity()
|
|
111
127
|
`;
|
|
112
128
|
const outside = "";
|
|
113
129
|
return { inside, outside };
|
|
114
130
|
}
|
|
115
131
|
return { inside: "", outside: "" };
|
|
116
132
|
}
|
|
117
|
-
buildDescription() {
|
|
118
|
-
return `/** ${this.description ?? ""} */`;
|
|
119
|
-
}
|
|
120
133
|
build() {
|
|
121
134
|
const { inside, outside } = this.buildCallMethod();
|
|
122
135
|
if (this.name === "list")
|
|
123
136
|
this.name = "listAll";
|
|
124
|
-
const hasProprierties = this.
|
|
137
|
+
const hasProprierties = this.querys.length > 0;
|
|
125
138
|
if (!hasProprierties && this.request.apiType === "delete") {
|
|
126
139
|
createDangerMessage(`${this.name} não vai funcionar, pois não aceita parâmetros na requisição.`);
|
|
127
140
|
}
|
|
128
141
|
const description = this.buildDescription();
|
|
142
|
+
const a = "`";
|
|
129
143
|
return `
|
|
130
144
|
${description}
|
|
131
145
|
async ${this.name}(behavior: Behavior = new Behavior()) {
|
|
132
146
|
const {onError, onSuccess} = behavior
|
|
133
|
-
|
|
147
|
+
${this.getProps()}
|
|
148
|
+
const endpoint = ${a}${testeEndpoint(this.endpoint)}${a}
|
|
134
149
|
|
|
135
150
|
${outside}
|
|
136
151
|
|
|
@@ -139,13 +154,15 @@ export class Method {
|
|
|
139
154
|
onSuccess?.()
|
|
140
155
|
|
|
141
156
|
return response
|
|
142
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
143
157
|
} catch(e) {
|
|
144
|
-
onError?.()
|
|
158
|
+
onError?.(e)
|
|
159
|
+
} finally {
|
|
160
|
+
this.loading = false
|
|
145
161
|
}
|
|
146
|
-
|
|
147
|
-
this.loading = false
|
|
148
162
|
}
|
|
149
163
|
`;
|
|
150
164
|
}
|
|
165
|
+
buildDescription() {
|
|
166
|
+
return `/** ${this.description ?? ""} */`;
|
|
167
|
+
}
|
|
151
168
|
}
|
package/dist/module.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { Source } from "./file.js";
|
|
2
2
|
import { Method } from "./method.js";
|
|
3
3
|
import type { ReflectorOperation } from "./types/types.js";
|
|
4
|
+
import { ZodProperty } from "./property.js";
|
|
4
5
|
export declare class Module {
|
|
5
6
|
readonly name: string;
|
|
6
7
|
readonly path: string;
|
|
7
8
|
readonly moduleName: string;
|
|
8
9
|
readonly src: Source;
|
|
9
10
|
imports: Set<string>;
|
|
10
|
-
parameters: string[];
|
|
11
11
|
methods: Method[];
|
|
12
|
+
querys: ZodProperty[];
|
|
13
|
+
paths: ZodProperty[];
|
|
14
|
+
headers: ZodProperty[];
|
|
15
|
+
cookies: ZodProperty[];
|
|
16
|
+
moduleConstructor: string;
|
|
12
17
|
constructor(params: {
|
|
13
18
|
name: string;
|
|
14
19
|
moduleName: string;
|
|
@@ -16,6 +21,7 @@ export declare class Module {
|
|
|
16
21
|
path: string;
|
|
17
22
|
dir: string;
|
|
18
23
|
});
|
|
24
|
+
private buildZObject;
|
|
19
25
|
private creator;
|
|
20
26
|
private getPath;
|
|
21
27
|
private getAdditionalMethod;
|
|
@@ -23,6 +29,7 @@ export declare class Module {
|
|
|
23
29
|
private getParameters;
|
|
24
30
|
private buildImports;
|
|
25
31
|
private buildClass;
|
|
32
|
+
private buildConstructor;
|
|
26
33
|
buildFile(params: {
|
|
27
34
|
moduleAttributes: string[];
|
|
28
35
|
moduleTypes: string[];
|
package/dist/module.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import { Source } from "./file.js";
|
|
4
|
-
import { capitalizeFirstLetter, createDangerMessage } from "./helpers/helpers.js";
|
|
4
|
+
import { capitalizeFirstLetter, createDangerMessage, treatByUppercase } from "./helpers/helpers.js";
|
|
5
5
|
import { Method } from "./method.js";
|
|
6
|
+
import { ZodProperty } from "./property.js";
|
|
6
7
|
export class Module {
|
|
7
8
|
name;
|
|
8
9
|
path;
|
|
9
10
|
moduleName;
|
|
10
11
|
src;
|
|
11
12
|
imports;
|
|
12
|
-
parameters;
|
|
13
13
|
methods;
|
|
14
|
+
querys = [];
|
|
15
|
+
paths = [];
|
|
16
|
+
headers = [];
|
|
17
|
+
cookies = [];
|
|
18
|
+
moduleConstructor;
|
|
14
19
|
constructor(params) {
|
|
15
20
|
const { name, operations, path, dir, moduleName } = params;
|
|
16
21
|
this.moduleName = moduleName;
|
|
@@ -18,6 +23,8 @@ export class Module {
|
|
|
18
23
|
"// AUTO GERADO. QUEM ALTERAR GOSTA DE RAPAZES!\n",
|
|
19
24
|
'import repo from "$repository/main"',
|
|
20
25
|
'import { Behavior } from "$reflector/reflector.types";',
|
|
26
|
+
'import { PUBLIC_ENVIRONMENT } from "$env/static/public";',
|
|
27
|
+
'import z from "zod";',
|
|
21
28
|
]);
|
|
22
29
|
this.name = capitalizeFirstLetter(name);
|
|
23
30
|
this.path = path;
|
|
@@ -30,7 +37,6 @@ export class Module {
|
|
|
30
37
|
// não vão entrar metodos que não tiverem uma resposta tipada
|
|
31
38
|
this.methods = methods.filter((op) => {
|
|
32
39
|
const responseTypeOk = op.request.responseType;
|
|
33
|
-
const propertiesOk = op.zodProperties.length > 0;
|
|
34
40
|
if (op.request.apiType === "delete")
|
|
35
41
|
return true;
|
|
36
42
|
if (!responseTypeOk) {
|
|
@@ -38,24 +44,47 @@ export class Module {
|
|
|
38
44
|
}
|
|
39
45
|
return responseTypeOk;
|
|
40
46
|
});
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
const { cookies, headers, paths, querys } = this.getParameters();
|
|
48
|
+
this.querys.push(...querys);
|
|
49
|
+
this.headers.push(...headers);
|
|
50
|
+
this.paths.push(...paths);
|
|
51
|
+
this.cookies.push(...cookies);
|
|
52
|
+
const { moduleAttributes, moduleTypes, moduleInit, moduleClear, form } = this.creator();
|
|
53
|
+
this.moduleConstructor = this.buildConstructor(form);
|
|
43
54
|
//sempre por último
|
|
44
55
|
this.src = new Source({
|
|
45
56
|
path: this.getPath(dir),
|
|
46
57
|
data: this.buildFile({ moduleAttributes, moduleTypes, moduleInit, moduleClear }),
|
|
47
58
|
});
|
|
48
59
|
}
|
|
60
|
+
buildZObject(props) {
|
|
61
|
+
const teste = `z.object({${props.map((p) => p.buildedProp)}})`;
|
|
62
|
+
return teste;
|
|
63
|
+
}
|
|
49
64
|
creator() {
|
|
50
65
|
const buildedModuleTypes = [];
|
|
51
66
|
const moduleAttributes = new Set().add("loading = $state<boolean>(false)");
|
|
52
67
|
const moduleInit = new Set([]);
|
|
53
68
|
const moduleClear = new Set([]);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
const getXablau = (params) => {
|
|
70
|
+
const { name, objets } = params;
|
|
71
|
+
const capitalizedName = capitalizeFirstLetter(name);
|
|
72
|
+
buildedModuleTypes.push(`const ${capitalizedName}Schema = ${this.buildZObject(objets)}`);
|
|
73
|
+
moduleAttributes.add(`${name} = $state(repo.newForm(${capitalizedName}Schema))`);
|
|
74
|
+
moduleInit.add(`this.clear${capitalizedName}()`);
|
|
75
|
+
moduleClear.add(`clear${capitalizedName}() { this.${name} = repo.newForm(${capitalizedName}Schema) }`);
|
|
76
|
+
};
|
|
77
|
+
if (this.querys.length > 0) {
|
|
78
|
+
getXablau({ name: "querys", objets: this.querys });
|
|
79
|
+
}
|
|
80
|
+
if (this.headers.length > 0) {
|
|
81
|
+
getXablau({ name: "headers", objets: this.headers });
|
|
82
|
+
}
|
|
83
|
+
if (this.paths.length > 0) {
|
|
84
|
+
getXablau({ name: "paths", objets: this.paths });
|
|
85
|
+
}
|
|
86
|
+
if (this.cookies.length > 0) {
|
|
87
|
+
getXablau({ name: "cookies", objets: this.cookies });
|
|
59
88
|
}
|
|
60
89
|
const form = [];
|
|
61
90
|
for (const method of this.methods) {
|
|
@@ -67,22 +96,23 @@ export class Module {
|
|
|
67
96
|
});
|
|
68
97
|
}
|
|
69
98
|
if (attributeType === "entity") {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
99
|
+
const entityName = treatByUppercase(method.request.responseType);
|
|
100
|
+
moduleAttributes.add(`${entityName} = $state<${responseType} | undefined>()`);
|
|
101
|
+
moduleInit.add(`this.clear${entityName}()`);
|
|
102
|
+
moduleClear.add(`clear${entityName}() { this.${entityName} = undefined }`);
|
|
73
103
|
}
|
|
74
104
|
else if (attributeType === "list") {
|
|
75
105
|
moduleAttributes.add(`list = $state<${responseType}['data']>([])`);
|
|
76
106
|
moduleInit.add("this.clearList()");
|
|
77
107
|
moduleClear.add(`clearList() { this.list = [] }`);
|
|
78
108
|
}
|
|
79
|
-
if (attributeType === "list" || this.
|
|
109
|
+
if (attributeType === "list" || this.querys.length > 0 || this.headers.length > 0) {
|
|
80
110
|
this.imports.add(`import z from "zod";`);
|
|
81
111
|
}
|
|
82
112
|
}
|
|
83
113
|
const formSet = new Set();
|
|
84
114
|
for (const f of form) {
|
|
85
|
-
formSet.add(`${f.name}: repo.newForm(${f.type}Schema)`);
|
|
115
|
+
formSet.add(`${f.name}: repo.newForm(Empty${f.type}Schema)`);
|
|
86
116
|
}
|
|
87
117
|
if (formSet.size > 0) {
|
|
88
118
|
moduleAttributes.add(`
|
|
@@ -94,7 +124,7 @@ export class Module {
|
|
|
94
124
|
this.clearForms()
|
|
95
125
|
`);
|
|
96
126
|
moduleClear.add(`
|
|
97
|
-
clearForms() { this.forms =
|
|
127
|
+
clearForms() { this.forms = this.buildForms(true) };
|
|
98
128
|
`);
|
|
99
129
|
}
|
|
100
130
|
return {
|
|
@@ -102,6 +132,7 @@ export class Module {
|
|
|
102
132
|
moduleTypes: buildedModuleTypes,
|
|
103
133
|
moduleInit: Array.from(moduleInit),
|
|
104
134
|
moduleClear: Array.from(moduleClear),
|
|
135
|
+
form,
|
|
105
136
|
};
|
|
106
137
|
}
|
|
107
138
|
getPath(dir) {
|
|
@@ -140,23 +171,36 @@ export class Module {
|
|
|
140
171
|
});
|
|
141
172
|
}
|
|
142
173
|
getParameters() {
|
|
143
|
-
const
|
|
174
|
+
const queryMap = new Map();
|
|
175
|
+
const headerMap = new Map();
|
|
176
|
+
const pathMap = new Map();
|
|
177
|
+
const cookieMap = new Map();
|
|
144
178
|
for (const method of this.methods) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
179
|
+
const { headers, cookies, paths, querys } = method;
|
|
180
|
+
headers.forEach((h) => headerMap.set(h.name, h));
|
|
181
|
+
cookies.forEach((c) => cookieMap.set(c.name, c));
|
|
182
|
+
paths.forEach((p) => pathMap.set(p.name, p));
|
|
183
|
+
querys.forEach((q) => queryMap.set(q.name, q));
|
|
148
184
|
}
|
|
149
|
-
return
|
|
185
|
+
return {
|
|
186
|
+
headers: Array.from(headerMap.values()),
|
|
187
|
+
cookies: Array.from(cookieMap.values()),
|
|
188
|
+
paths: Array.from(pathMap.values()),
|
|
189
|
+
querys: Array.from(queryMap.values()),
|
|
190
|
+
};
|
|
150
191
|
}
|
|
151
192
|
buildImports() {
|
|
152
193
|
const entries = new Set();
|
|
153
194
|
for (const method of this.methods) {
|
|
154
195
|
const { bodyType, responseType, apiType } = method.request;
|
|
155
|
-
if (bodyType)
|
|
196
|
+
if (bodyType) {
|
|
156
197
|
entries.add(`${bodyType}Schema`);
|
|
198
|
+
entries.add(`Empty${bodyType}Schema`);
|
|
199
|
+
}
|
|
157
200
|
if (responseType) {
|
|
158
|
-
if (apiType === "delete")
|
|
201
|
+
if (apiType === "delete") {
|
|
159
202
|
entries.add(`${responseType}Schema`);
|
|
203
|
+
}
|
|
160
204
|
entries.add(`type ${responseType}`);
|
|
161
205
|
}
|
|
162
206
|
}
|
|
@@ -171,6 +215,8 @@ export class Module {
|
|
|
171
215
|
export class ${this.moduleName}Module {
|
|
172
216
|
${moduleAttributes.join(";")}
|
|
173
217
|
|
|
218
|
+
${this.moduleConstructor}
|
|
219
|
+
|
|
174
220
|
${this.buildMethods().join("\n")}
|
|
175
221
|
|
|
176
222
|
${moduleClear.join("\n\n")}
|
|
@@ -181,6 +227,26 @@ export class Module {
|
|
|
181
227
|
}
|
|
182
228
|
`;
|
|
183
229
|
}
|
|
230
|
+
buildConstructor(form) {
|
|
231
|
+
if (form.length === 0)
|
|
232
|
+
return "";
|
|
233
|
+
const teste = `
|
|
234
|
+
constructor(params?: { empty: boolean }) {
|
|
235
|
+
const isEmpty = params?.empty || PUBLIC_ENVIRONMENT != 'DEV'
|
|
236
|
+
|
|
237
|
+
this.forms = this.buildForms(isEmpty);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private buildForms(isEmpty: boolean) {
|
|
241
|
+
if(isEmpty) return this.forms
|
|
242
|
+
|
|
243
|
+
return {
|
|
244
|
+
${form.map((f) => `${f.name}: repo.newForm(${f.type}Schema)`)}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
`;
|
|
248
|
+
return teste;
|
|
249
|
+
}
|
|
184
250
|
buildFile(params) {
|
|
185
251
|
const { moduleInit, moduleTypes, moduleAttributes, moduleClear } = params;
|
|
186
252
|
return `
|
package/dist/property.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SchemaObject } from "./types/open-api-spec.interface.js";
|
|
1
|
+
import { type ParameterLocation, type SchemaObject } from "./types/open-api-spec.interface.js";
|
|
2
2
|
import { type Example, type ReflectorParamType } from "./types/types.js";
|
|
3
3
|
export declare class ZodProperty {
|
|
4
4
|
name: string;
|
|
@@ -7,6 +7,7 @@ export declare class ZodProperty {
|
|
|
7
7
|
buildedProp: string;
|
|
8
8
|
description?: string;
|
|
9
9
|
required: boolean;
|
|
10
|
+
inParam: ParameterLocation;
|
|
10
11
|
constructor(params: {
|
|
11
12
|
name: string;
|
|
12
13
|
schemaObject: SchemaObject;
|
|
@@ -14,10 +15,14 @@ export declare class ZodProperty {
|
|
|
14
15
|
example: Example | undefined;
|
|
15
16
|
required: boolean;
|
|
16
17
|
description?: string;
|
|
18
|
+
isEmpty: boolean;
|
|
19
|
+
inParam: ParameterLocation;
|
|
17
20
|
});
|
|
18
21
|
private getDtoName;
|
|
22
|
+
private getEmptyExample;
|
|
19
23
|
private getExample;
|
|
20
24
|
private deepValidator;
|
|
21
25
|
private isNullable;
|
|
26
|
+
private treatName;
|
|
22
27
|
private build;
|
|
23
28
|
}
|