@base44-preview/cli 0.0.1-pr.10.3ef6431
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/README.md +49 -0
- package/dist/cli/commands/auth/login.d.ts +3 -0
- package/dist/cli/commands/auth/login.d.ts.map +1 -0
- package/dist/cli/commands/auth/login.js +71 -0
- package/dist/cli/commands/auth/login.js.map +1 -0
- package/dist/cli/commands/auth/logout.d.ts +3 -0
- package/dist/cli/commands/auth/logout.d.ts.map +1 -0
- package/dist/cli/commands/auth/logout.js +14 -0
- package/dist/cli/commands/auth/logout.js.map +1 -0
- package/dist/cli/commands/auth/whoami.d.ts +3 -0
- package/dist/cli/commands/auth/whoami.d.ts.map +1 -0
- package/dist/cli/commands/auth/whoami.js +14 -0
- package/dist/cli/commands/auth/whoami.js.map +1 -0
- package/dist/cli/commands/project/show-project.d.ts +3 -0
- package/dist/cli/commands/project/show-project.d.ts.map +1 -0
- package/dist/cli/commands/project/show-project.js +20 -0
- package/dist/cli/commands/project/show-project.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/index.d.ts +4 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +4 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/packageVersion.d.ts +2 -0
- package/dist/cli/utils/packageVersion.d.ts.map +1 -0
- package/dist/cli/utils/packageVersion.js +12 -0
- package/dist/cli/utils/packageVersion.js.map +1 -0
- package/dist/cli/utils/runCommand.d.ts +8 -0
- package/dist/cli/utils/runCommand.d.ts.map +1 -0
- package/dist/cli/utils/runCommand.js +25 -0
- package/dist/cli/utils/runCommand.js.map +1 -0
- package/dist/cli/utils/runTask.d.ts +14 -0
- package/dist/cli/utils/runTask.d.ts.map +1 -0
- package/dist/cli/utils/runTask.js +24 -0
- package/dist/cli/utils/runTask.js.map +1 -0
- package/dist/core/auth/api.d.ts +5 -0
- package/dist/core/auth/api.d.ts.map +1 -0
- package/dist/core/auth/api.js +81 -0
- package/dist/core/auth/api.js.map +1 -0
- package/dist/core/auth/authClient.d.ts +7 -0
- package/dist/core/auth/authClient.d.ts.map +1 -0
- package/dist/core/auth/authClient.js +14 -0
- package/dist/core/auth/authClient.js.map +1 -0
- package/dist/core/auth/config.d.ts +15 -0
- package/dist/core/auth/config.d.ts.map +1 -0
- package/dist/core/auth/config.js +91 -0
- package/dist/core/auth/config.js.map +1 -0
- package/dist/core/auth/index.d.ts +4 -0
- package/dist/core/auth/index.d.ts.map +1 -0
- package/dist/core/auth/index.js +4 -0
- package/dist/core/auth/index.js.map +1 -0
- package/dist/core/auth/schema.d.ts +58 -0
- package/dist/core/auth/schema.d.ts.map +1 -0
- package/dist/core/auth/schema.js +57 -0
- package/dist/core/auth/schema.js.map +1 -0
- package/dist/core/config/app.d.ts +22 -0
- package/dist/core/config/app.d.ts.map +1 -0
- package/dist/core/config/app.js +14 -0
- package/dist/core/config/app.js.map +1 -0
- package/dist/core/config/index.d.ts +4 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/config/project.d.ts +25 -0
- package/dist/core/config/project.d.ts.map +1 -0
- package/dist/core/config/project.js +62 -0
- package/dist/core/config/project.js.map +1 -0
- package/dist/core/config/resource.d.ts +4 -0
- package/dist/core/config/resource.d.ts.map +1 -0
- package/dist/core/config/resource.js +2 -0
- package/dist/core/config/resource.js.map +1 -0
- package/dist/core/consts.d.ts +8 -0
- package/dist/core/consts.d.ts.map +1 -0
- package/dist/core/consts.js +24 -0
- package/dist/core/consts.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +15 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/resources/entity/config.d.ts +3 -0
- package/dist/core/resources/entity/config.d.ts.map +1 -0
- package/dist/core/resources/entity/config.js +25 -0
- package/dist/core/resources/entity/config.js.map +1 -0
- package/dist/core/resources/entity/index.d.ts +4 -0
- package/dist/core/resources/entity/index.d.ts.map +1 -0
- package/dist/core/resources/entity/index.js +4 -0
- package/dist/core/resources/entity/index.js.map +1 -0
- package/dist/core/resources/entity/resource.d.ts +4 -0
- package/dist/core/resources/entity/resource.d.ts.map +1 -0
- package/dist/core/resources/entity/resource.js +5 -0
- package/dist/core/resources/entity/resource.js.map +1 -0
- package/dist/core/resources/entity/schema.d.ts +47 -0
- package/dist/core/resources/entity/schema.d.ts.map +1 -0
- package/dist/core/resources/entity/schema.js +29 -0
- package/dist/core/resources/entity/schema.js.map +1 -0
- package/dist/core/resources/function/config.d.ts +4 -0
- package/dist/core/resources/function/config.d.ts.map +1 -0
- package/dist/core/resources/function/config.js +26 -0
- package/dist/core/resources/function/config.js.map +1 -0
- package/dist/core/resources/function/index.d.ts +4 -0
- package/dist/core/resources/function/index.d.ts.map +1 -0
- package/dist/core/resources/function/index.js +4 -0
- package/dist/core/resources/function/index.js.map +1 -0
- package/dist/core/resources/function/resource.d.ts +4 -0
- package/dist/core/resources/function/resource.d.ts.map +1 -0
- package/dist/core/resources/function/resource.js +5 -0
- package/dist/core/resources/function/resource.js.map +1 -0
- package/dist/core/resources/function/schema.d.ts +91 -0
- package/dist/core/resources/function/schema.d.ts.map +1 -0
- package/dist/core/resources/function/schema.js +36 -0
- package/dist/core/resources/function/schema.js.map +1 -0
- package/dist/core/resources/index.d.ts +3 -0
- package/dist/core/resources/index.d.ts.map +1 -0
- package/dist/core/resources/index.js +3 -0
- package/dist/core/resources/index.js.map +1 -0
- package/dist/core/utils/fs.d.ts +5 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +56 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/httpClient.d.ts +3 -0
- package/dist/core/utils/httpClient.d.ts.map +1 -0
- package/dist/core/utils/httpClient.js +57 -0
- package/dist/core/utils/httpClient.js.map +1 -0
- package/dist/core/utils/index.d.ts +3 -0
- package/dist/core/utils/index.d.ts.map +1 -0
- package/dist/core/utils/index.js +3 -0
- package/dist/core/utils/index.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { getAuthFilePath } from "../consts.js";
|
|
2
|
+
import { readJsonFile, writeJsonFile, deleteFile } from "../utils/fs.js";
|
|
3
|
+
import { renewAccessToken } from "./api.js";
|
|
4
|
+
import { AuthDataSchema } from "./schema.js";
|
|
5
|
+
// Buffer time before expiration to trigger proactive refresh (60 seconds)
|
|
6
|
+
const TOKEN_REFRESH_BUFFER_MS = 60 * 1000;
|
|
7
|
+
// Lock to prevent concurrent token refreshes
|
|
8
|
+
let refreshPromise = null;
|
|
9
|
+
export async function readAuth() {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = await readJsonFile(getAuthFilePath());
|
|
12
|
+
const result = AuthDataSchema.safeParse(parsed);
|
|
13
|
+
if (!result.success) {
|
|
14
|
+
throw new Error(`Invalid authentication data: ${result.error.issues
|
|
15
|
+
.map((e) => e.message)
|
|
16
|
+
.join(", ")}`);
|
|
17
|
+
}
|
|
18
|
+
return result.data;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error instanceof Error && error.message.includes("Authentication")) {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
if (error instanceof Error && error.message.includes("File not found")) {
|
|
25
|
+
throw new Error("Authentication file not found. Please login first.");
|
|
26
|
+
}
|
|
27
|
+
throw new Error(`Failed to read authentication file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export async function writeAuth(authData) {
|
|
31
|
+
const result = AuthDataSchema.safeParse(authData);
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
throw new Error(`Invalid authentication data: ${result.error.issues
|
|
34
|
+
.map((e) => e.message)
|
|
35
|
+
.join(", ")}`);
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
await writeJsonFile(getAuthFilePath(), result.data);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new Error(`Failed to write authentication file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export async function deleteAuth() {
|
|
45
|
+
try {
|
|
46
|
+
await deleteFile(getAuthFilePath());
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`Failed to delete authentication file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Checks if the access token is expired or about to expire.
|
|
54
|
+
*/
|
|
55
|
+
export function isTokenExpired(auth) {
|
|
56
|
+
return Date.now() >= auth.expiresAt - TOKEN_REFRESH_BUFFER_MS;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Refreshes the access token and saves the new tokens.
|
|
60
|
+
* Returns the new access token, or null if refresh failed.
|
|
61
|
+
* Uses a lock to prevent concurrent refresh requests.
|
|
62
|
+
*/
|
|
63
|
+
export async function refreshAndSaveTokens() {
|
|
64
|
+
// If a refresh is already in progress, wait for it
|
|
65
|
+
if (refreshPromise) {
|
|
66
|
+
return refreshPromise;
|
|
67
|
+
}
|
|
68
|
+
refreshPromise = (async () => {
|
|
69
|
+
try {
|
|
70
|
+
const auth = await readAuth();
|
|
71
|
+
const tokenResponse = await renewAccessToken(auth.refreshToken);
|
|
72
|
+
await writeAuth({
|
|
73
|
+
...auth,
|
|
74
|
+
accessToken: tokenResponse.accessToken,
|
|
75
|
+
refreshToken: tokenResponse.refreshToken,
|
|
76
|
+
expiresAt: Date.now() + tokenResponse.expiresIn * 1000,
|
|
77
|
+
});
|
|
78
|
+
return tokenResponse.accessToken;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Refresh failed - delete auth, user needs to login again
|
|
82
|
+
await deleteAuth();
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
refreshPromise = null;
|
|
87
|
+
}
|
|
88
|
+
})();
|
|
89
|
+
return refreshPromise;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/auth/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const AuthDataSchema: z.ZodObject<{
|
|
3
|
+
accessToken: z.ZodString;
|
|
4
|
+
refreshToken: z.ZodString;
|
|
5
|
+
expiresAt: z.ZodNumber;
|
|
6
|
+
email: z.ZodEmail;
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export type AuthData = z.infer<typeof AuthDataSchema>;
|
|
10
|
+
export declare const DeviceCodeResponseSchema: z.ZodPipe<z.ZodObject<{
|
|
11
|
+
device_code: z.ZodString;
|
|
12
|
+
user_code: z.ZodString;
|
|
13
|
+
verification_uri: z.ZodURL;
|
|
14
|
+
verification_uri_complete: z.ZodURL;
|
|
15
|
+
expires_in: z.ZodNumber;
|
|
16
|
+
interval: z.ZodNumber;
|
|
17
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
18
|
+
deviceCode: string;
|
|
19
|
+
userCode: string;
|
|
20
|
+
verificationUri: string;
|
|
21
|
+
verificationUriComplete: string;
|
|
22
|
+
expiresIn: number;
|
|
23
|
+
interval: number;
|
|
24
|
+
}, {
|
|
25
|
+
device_code: string;
|
|
26
|
+
user_code: string;
|
|
27
|
+
verification_uri: string;
|
|
28
|
+
verification_uri_complete: string;
|
|
29
|
+
expires_in: number;
|
|
30
|
+
interval: number;
|
|
31
|
+
}>>;
|
|
32
|
+
export type DeviceCodeResponse = z.infer<typeof DeviceCodeResponseSchema>;
|
|
33
|
+
export declare const TokenResponseSchema: z.ZodPipe<z.ZodObject<{
|
|
34
|
+
access_token: z.ZodString;
|
|
35
|
+
token_type: z.ZodString;
|
|
36
|
+
expires_in: z.ZodNumber;
|
|
37
|
+
refresh_token: z.ZodString;
|
|
38
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
39
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
40
|
+
accessToken: string;
|
|
41
|
+
tokenType: string;
|
|
42
|
+
expiresIn: number;
|
|
43
|
+
refreshToken: string;
|
|
44
|
+
scope: string | undefined;
|
|
45
|
+
}, {
|
|
46
|
+
access_token: string;
|
|
47
|
+
token_type: string;
|
|
48
|
+
expires_in: number;
|
|
49
|
+
refresh_token: string;
|
|
50
|
+
scope?: string | undefined;
|
|
51
|
+
}>>;
|
|
52
|
+
export type TokenResponse = z.infer<typeof TokenResponseSchema>;
|
|
53
|
+
export declare const OAuthErrorSchema: z.ZodObject<{
|
|
54
|
+
error: z.ZodString;
|
|
55
|
+
error_description: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type OAuthError = z.infer<typeof OAuthErrorSchema>;
|
|
58
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/auth/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc;;;;;;iBAMzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;GAsBhC,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;GAiB3B,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Auth data schema (stored locally)
|
|
3
|
+
export const AuthDataSchema = z.object({
|
|
4
|
+
accessToken: z.string().min(1, "Token cannot be empty"),
|
|
5
|
+
refreshToken: z.string().min(1, "Refresh token cannot be empty"),
|
|
6
|
+
expiresAt: z.number().int().positive("Expires at must be a positive integer"),
|
|
7
|
+
email: z.email(),
|
|
8
|
+
name: z.string().min(1, "Name cannot be empty"),
|
|
9
|
+
});
|
|
10
|
+
// API response schemas
|
|
11
|
+
export const DeviceCodeResponseSchema = z
|
|
12
|
+
.object({
|
|
13
|
+
device_code: z.string().min(1, "Device code cannot be empty"),
|
|
14
|
+
user_code: z.string().min(1, "User code cannot be empty"),
|
|
15
|
+
verification_uri: z.url("Invalid verification URL"),
|
|
16
|
+
verification_uri_complete: z.url("Invalid complete verification URL"),
|
|
17
|
+
expires_in: z
|
|
18
|
+
.number()
|
|
19
|
+
.int()
|
|
20
|
+
.positive("Expires in must be a positive integer"),
|
|
21
|
+
interval: z
|
|
22
|
+
.number()
|
|
23
|
+
.int()
|
|
24
|
+
.positive("Interval in must be a positive integer"),
|
|
25
|
+
})
|
|
26
|
+
.transform((data) => ({
|
|
27
|
+
deviceCode: data.device_code,
|
|
28
|
+
userCode: data.user_code,
|
|
29
|
+
verificationUri: data.verification_uri,
|
|
30
|
+
verificationUriComplete: data.verification_uri_complete,
|
|
31
|
+
expiresIn: data.expires_in,
|
|
32
|
+
interval: data.interval,
|
|
33
|
+
}));
|
|
34
|
+
export const TokenResponseSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
access_token: z.string().min(1, "Token cannot be empty"),
|
|
37
|
+
token_type: z.string().min(1, "Token type cannot be empty"),
|
|
38
|
+
expires_in: z
|
|
39
|
+
.number()
|
|
40
|
+
.int()
|
|
41
|
+
.positive("Expires in must be a positive integer"),
|
|
42
|
+
refresh_token: z.string().min(1, "Refresh token cannot be empty"),
|
|
43
|
+
scope: z.string().optional(),
|
|
44
|
+
})
|
|
45
|
+
.transform((data) => ({
|
|
46
|
+
accessToken: data.access_token,
|
|
47
|
+
tokenType: data.token_type,
|
|
48
|
+
expiresIn: data.expires_in,
|
|
49
|
+
refreshToken: data.refresh_token,
|
|
50
|
+
scope: data.scope,
|
|
51
|
+
}));
|
|
52
|
+
// OAuth error response schema
|
|
53
|
+
export const OAuthErrorSchema = z.object({
|
|
54
|
+
error: z.string(),
|
|
55
|
+
error_description: z.string().optional(),
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/auth/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oCAAoC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACvD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC7E,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;CAChD,CAAC,CAAC;AAIH,uBAAuB;AACvB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IACzD,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,yBAAyB,EAAE,CAAC,CAAC,GAAG,CAAC,mCAAmC,CAAC;IACrE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,CAAC,uCAAuC,CAAC;IACpD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,CAAC,wCAAwC,CAAC;CACtD,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC,WAAW;IAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;IACxB,eAAe,EAAE,IAAI,CAAC,gBAAgB;IACtC,uBAAuB,EAAE,IAAI,CAAC,yBAAyB;IACvD,SAAS,EAAE,IAAI,CAAC,UAAU;IAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;CACxB,CAAC,CAAC,CAAC;AAIN,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;IAC3D,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,CAAC,uCAAuC,CAAC;IACpD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,WAAW,EAAE,IAAI,CAAC,YAAY;IAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;IAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;IAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;IAChC,KAAK,EAAE,IAAI,CAAC,KAAK;CAClB,CAAC,CAAC,CAAC;AAIN,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const SiteConfigSchema: z.ZodObject<{
|
|
3
|
+
buildCommand: z.ZodOptional<z.ZodString>;
|
|
4
|
+
serveCommand: z.ZodOptional<z.ZodString>;
|
|
5
|
+
outputDirectory: z.ZodOptional<z.ZodString>;
|
|
6
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export declare const AppConfigSchema: z.ZodObject<{
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
description: z.ZodOptional<z.ZodString>;
|
|
11
|
+
site: z.ZodOptional<z.ZodObject<{
|
|
12
|
+
buildCommand: z.ZodOptional<z.ZodString>;
|
|
13
|
+
serveCommand: z.ZodOptional<z.ZodString>;
|
|
14
|
+
outputDirectory: z.ZodOptional<z.ZodString>;
|
|
15
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
domains: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type SiteConfig = z.infer<typeof SiteConfigSchema>;
|
|
20
|
+
export type AppConfig = z.infer<typeof AppConfigSchema>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/core/config/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,gBAAgB;;;;;iBAKpB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;iBAK1B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const SiteConfigSchema = z.object({
|
|
3
|
+
buildCommand: z.string().optional(),
|
|
4
|
+
serveCommand: z.string().optional(),
|
|
5
|
+
outputDirectory: z.string().optional(),
|
|
6
|
+
installCommand: z.string().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const AppConfigSchema = z.object({
|
|
9
|
+
name: z.string().min(1, "App name cannot be empty"),
|
|
10
|
+
description: z.string().optional(),
|
|
11
|
+
site: SiteConfigSchema.optional(),
|
|
12
|
+
domains: z.array(z.string()).optional(),
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/core/config/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,eAAe,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Entity } from "../resources/entity/index.js";
|
|
3
|
+
import type { FunctionConfig } from "../resources/function/index.js";
|
|
4
|
+
export declare const ProjectConfigSchema: z.ZodObject<{
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
entitySrc: z.ZodDefault<z.ZodString>;
|
|
7
|
+
functionSrc: z.ZodDefault<z.ZodString>;
|
|
8
|
+
}, z.core.$loose>;
|
|
9
|
+
export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
|
|
10
|
+
export interface ProjectWithPaths extends ProjectConfig {
|
|
11
|
+
root: string;
|
|
12
|
+
configPath: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ProjectRoot {
|
|
15
|
+
root: string;
|
|
16
|
+
configPath: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ProjectData {
|
|
19
|
+
project: ProjectWithPaths;
|
|
20
|
+
entities: Entity[];
|
|
21
|
+
functions: FunctionConfig[];
|
|
22
|
+
}
|
|
23
|
+
export declare function findProjectRoot(startPath?: string): Promise<ProjectRoot | null>;
|
|
24
|
+
export declare function readProjectConfig(projectRoot?: string): Promise<ProjectData>;
|
|
25
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/core/config/project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAUD,wBAAsB,eAAe,CACnC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAY7B;AAED,wBAAsB,iBAAiB,CACrC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAuCtB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { join, dirname } from "node:path";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { globby } from "globby";
|
|
4
|
+
import { getProjectConfigPatterns, PROJECT_SUBDIR } from "../consts.js";
|
|
5
|
+
import { readJsonFile } from "../utils/fs.js";
|
|
6
|
+
import { entityResource } from "../resources/entity/index.js";
|
|
7
|
+
import { functionResource } from "../resources/function/index.js";
|
|
8
|
+
export const ProjectConfigSchema = z.looseObject({
|
|
9
|
+
name: z.string().min(1, "Project name cannot be empty"),
|
|
10
|
+
entitySrc: z.string().default("./entities"),
|
|
11
|
+
functionSrc: z.string().default("./functions"),
|
|
12
|
+
});
|
|
13
|
+
async function findConfigInDir(dir) {
|
|
14
|
+
const files = await globby(getProjectConfigPatterns(), {
|
|
15
|
+
cwd: dir,
|
|
16
|
+
absolute: true,
|
|
17
|
+
});
|
|
18
|
+
return files[0] ?? null;
|
|
19
|
+
}
|
|
20
|
+
export async function findProjectRoot(startPath) {
|
|
21
|
+
let current = startPath || process.cwd();
|
|
22
|
+
while (current !== dirname(current)) {
|
|
23
|
+
const configPath = await findConfigInDir(current);
|
|
24
|
+
if (configPath) {
|
|
25
|
+
return { root: current, configPath };
|
|
26
|
+
}
|
|
27
|
+
current = dirname(current);
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
export async function readProjectConfig(projectRoot) {
|
|
32
|
+
let found;
|
|
33
|
+
if (projectRoot) {
|
|
34
|
+
const configPath = await findConfigInDir(projectRoot);
|
|
35
|
+
found = configPath ? { root: projectRoot, configPath } : null;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
found = await findProjectRoot();
|
|
39
|
+
}
|
|
40
|
+
if (!found) {
|
|
41
|
+
throw new Error(`Project root not found. Please ensure config.jsonc or config.json exists in the project directory or ${PROJECT_SUBDIR}/ subdirectory.`);
|
|
42
|
+
}
|
|
43
|
+
const { root, configPath } = found;
|
|
44
|
+
const parsed = await readJsonFile(configPath);
|
|
45
|
+
const result = ProjectConfigSchema.safeParse(parsed);
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
const errors = result.error.issues.map((e) => e.message).join(", ");
|
|
48
|
+
throw new Error(`Invalid project configuration: ${errors}`);
|
|
49
|
+
}
|
|
50
|
+
const project = result.data;
|
|
51
|
+
const configDir = dirname(configPath);
|
|
52
|
+
const [entities, functions] = await Promise.all([
|
|
53
|
+
entityResource.readAll(join(configDir, project.entitySrc)),
|
|
54
|
+
functionResource.readAll(join(configDir, project.functionSrc)),
|
|
55
|
+
]);
|
|
56
|
+
return {
|
|
57
|
+
project: { ...project, root, configPath },
|
|
58
|
+
entities,
|
|
59
|
+
functions,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/core/config/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/core/config/resource.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/core/config/resource.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const PROJECT_SUBDIR = "base44";
|
|
2
|
+
export declare const FUNCTION_CONFIG_FILE = "function.jsonc";
|
|
3
|
+
export declare function getBase44Dir(): string;
|
|
4
|
+
export declare function getAuthFilePath(): string;
|
|
5
|
+
export declare function getProjectConfigPatterns(): string[];
|
|
6
|
+
export declare const AUTH_CLIENT_ID = "base44_cli";
|
|
7
|
+
export declare function getBase44ApiUrl(): string;
|
|
8
|
+
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/core/consts.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,wBAAgB,YAAY,WAE3B;AAED,wBAAgB,eAAe,WAE9B;AAED,wBAAgB,wBAAwB,aAOvC;AAED,eAAO,MAAM,cAAc,eAAe,CAAC;AAI3C,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
export const PROJECT_SUBDIR = "base44";
|
|
4
|
+
export const FUNCTION_CONFIG_FILE = "function.jsonc";
|
|
5
|
+
export function getBase44Dir() {
|
|
6
|
+
return join(homedir(), ".base44");
|
|
7
|
+
}
|
|
8
|
+
export function getAuthFilePath() {
|
|
9
|
+
return join(getBase44Dir(), "auth", "auth.json");
|
|
10
|
+
}
|
|
11
|
+
export function getProjectConfigPatterns() {
|
|
12
|
+
return [
|
|
13
|
+
`${PROJECT_SUBDIR}/config.jsonc`,
|
|
14
|
+
`${PROJECT_SUBDIR}/config.json`,
|
|
15
|
+
"config.jsonc",
|
|
16
|
+
"config.json",
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
export const AUTH_CLIENT_ID = "base44_cli";
|
|
20
|
+
const DEFAULT_API_URL = "https://app.base44.com";
|
|
21
|
+
export function getBase44ApiUrl() {
|
|
22
|
+
return process.env.BASE44_API_URL || DEFAULT_API_URL;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/core/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,GAAG,cAAc,eAAe;QAChC,GAAG,cAAc,cAAc;QAC/B,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,eAAe,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class AuthApiError extends Error {
|
|
2
|
+
readonly cause?: unknown | undefined;
|
|
3
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
4
|
+
}
|
|
5
|
+
export declare class AuthValidationError extends Error {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;aACQ,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAI7D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class AuthApiError extends Error {
|
|
2
|
+
cause;
|
|
3
|
+
constructor(message, cause) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.cause = cause;
|
|
6
|
+
this.name = "AuthApiError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class AuthValidationError extends Error {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "AuthValidationError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACQ;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/core/resources/entity/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiB1C,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { globby } from "globby";
|
|
2
|
+
import { readJsonFile, pathExists } from "../../utils/fs.js";
|
|
3
|
+
import { EntitySchema } from "./schema.js";
|
|
4
|
+
async function readEntityFile(entityPath) {
|
|
5
|
+
const parsed = await readJsonFile(entityPath);
|
|
6
|
+
const result = EntitySchema.safeParse(parsed);
|
|
7
|
+
if (!result.success) {
|
|
8
|
+
throw new Error(`Invalid entity configuration in ${entityPath}: ${result.error.issues
|
|
9
|
+
.map((e) => e.message)
|
|
10
|
+
.join(", ")}`);
|
|
11
|
+
}
|
|
12
|
+
return result.data;
|
|
13
|
+
}
|
|
14
|
+
export async function readAllEntities(entitiesDir) {
|
|
15
|
+
if (!(await pathExists(entitiesDir))) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const files = await globby("*.{json,jsonc}", {
|
|
19
|
+
cwd: entitiesDir,
|
|
20
|
+
absolute: true,
|
|
21
|
+
});
|
|
22
|
+
const entities = await Promise.all(files.map((filePath) => readEntityFile(filePath)));
|
|
23
|
+
return entities;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/core/resources/entity/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,mCAAmC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE;QAC3C,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAClD,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/resources/entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/resources/entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../../src/core/resources/entity/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAE3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../src/core/resources/entity/resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,eAAe;CACzB,CAAC"}
|