svelte-reflector 1.0.8 → 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 +86 -65
- package/dist/module.d.ts +8 -1
- package/dist/module.js +91 -25
- 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;
|
|
21
|
+
build(): string;
|
|
16
22
|
private buildDescription;
|
|
17
|
-
build(): string | undefined;
|
|
18
23
|
}
|
package/dist/method.js
CHANGED
|
@@ -1,147 +1,168 @@
|
|
|
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
|
|
62
|
-
|
|
63
|
-
${afterResponse.join(";")}
|
|
77
|
+
beforeResponse.push(`const {data: { data, ...params }} = response`, "\n\n", `this.list = data`, "repo.intercept.rebuild(this.querys, params)");
|
|
78
|
+
const inside = `
|
|
64
79
|
const response = await repo.api.get<{data: ${this.request.responseType}}, unknown>({
|
|
65
|
-
endpoint,
|
|
66
|
-
${
|
|
80
|
+
endpoint,
|
|
81
|
+
queryData: { ${this.gee(this.querys)} }
|
|
67
82
|
})
|
|
68
83
|
${beforeResponse.join(";")}
|
|
69
84
|
`;
|
|
85
|
+
return { inside, outside: "" };
|
|
70
86
|
}
|
|
71
87
|
else if (this.request.attributeType === "entity") {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
88
|
+
const entityName = treatByUppercase(this.request.responseType);
|
|
89
|
+
beforeResponse.push(`this.${entityName} = response`);
|
|
90
|
+
const inside = `
|
|
75
91
|
const response = await repo.api.get<${this.request.responseType}, unknown>({
|
|
76
|
-
endpoint,
|
|
77
|
-
${query}
|
|
92
|
+
endpoint,
|
|
78
93
|
})
|
|
79
94
|
${beforeResponse.join(";")}
|
|
80
95
|
`;
|
|
96
|
+
return { inside, outside: "" };
|
|
81
97
|
}
|
|
82
98
|
}
|
|
83
99
|
else if (this.request.apiType === "post" || this.request.apiType === "put" || this.request.apiType === "patch") {
|
|
84
|
-
let data
|
|
100
|
+
let data;
|
|
101
|
+
let headers;
|
|
85
102
|
if (this.request.bodyType) {
|
|
86
103
|
data = `const data = repo.intercept.bundle(this.forms.${this.name})`;
|
|
87
104
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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");
|
|
111
|
+
const inside = `
|
|
112
|
+
const response = await repo.api.${this.request.apiType}<${this.request.responseType}>({
|
|
92
113
|
endpoint,
|
|
93
|
-
${
|
|
114
|
+
${hasData ? "data," : ""}
|
|
115
|
+
${hasHeaders ? "headers," : ""}
|
|
94
116
|
})
|
|
95
117
|
`;
|
|
118
|
+
return { outside, inside };
|
|
96
119
|
}
|
|
97
120
|
else if (this.request.apiType === "delete") {
|
|
98
|
-
const props = this.zodProperties.map((x) => x.name).join(",");
|
|
99
|
-
const propsString = props.length > 0 ? `const {${props}} = this.parameters` : "";
|
|
100
|
-
|
|
101
|
-
${propsString}
|
|
102
|
-
|
|
121
|
+
// const props = this.zodProperties.map((x) => x.name).join(",");
|
|
122
|
+
// const propsString = props.length > 0 ? `const {${props}} = this.parameters` : "";
|
|
123
|
+
const inside = `
|
|
103
124
|
const response = await repo.api.delete<${this.request.responseType ?? "null"}, unknown>({
|
|
104
|
-
endpoint,
|
|
105
|
-
${query}
|
|
125
|
+
endpoint,
|
|
106
126
|
})
|
|
107
|
-
|
|
108
|
-
this.clearEntity()
|
|
109
127
|
`;
|
|
128
|
+
const outside = "";
|
|
129
|
+
return { inside, outside };
|
|
110
130
|
}
|
|
111
|
-
return "";
|
|
112
|
-
}
|
|
113
|
-
buildDescription() {
|
|
114
|
-
return `/** ${this.description ?? ""} */`;
|
|
131
|
+
return { inside: "", outside: "" };
|
|
115
132
|
}
|
|
116
133
|
build() {
|
|
117
|
-
const
|
|
118
|
-
if (!content) {
|
|
119
|
-
createDangerMessage(`Método ${this.name} (${this.request.apiType}) não foi gerado: buildCallMethod vazio`);
|
|
120
|
-
return;
|
|
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}
|
|
149
|
+
|
|
150
|
+
${outside}
|
|
134
151
|
|
|
135
152
|
try{
|
|
136
|
-
${
|
|
153
|
+
${inside}
|
|
137
154
|
onSuccess?.()
|
|
138
155
|
|
|
139
156
|
return response
|
|
140
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
141
157
|
} catch(e) {
|
|
142
|
-
onError?.()
|
|
158
|
+
onError?.(e)
|
|
159
|
+
} finally {
|
|
160
|
+
this.loading = false
|
|
143
161
|
}
|
|
144
162
|
}
|
|
145
163
|
`;
|
|
146
164
|
}
|
|
165
|
+
buildDescription() {
|
|
166
|
+
return `/** ${this.description ?? ""} */`;
|
|
167
|
+
}
|
|
147
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
|
-
const moduleAttributes = new Set();
|
|
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,16 +215,38 @@ 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")}
|
|
177
223
|
|
|
178
|
-
|
|
224
|
+
reset() {
|
|
179
225
|
${moduleInit.join(";")}
|
|
180
226
|
}
|
|
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 `
|