@kosmojs/dev 0.0.10 → 0.0.20
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/package.json +9 -42
- package/pkg/base-plugin/worker.js +252 -102
- package/pkg/base-plugin/worker.js.map +4 -4
- package/pkg/index.js +540 -206
- package/pkg/index.js.map +4 -4
- package/pkg/src/{base-plugin/ast.d.ts → ast.d.ts} +3 -3
- package/pkg/src/base-plugin/api-handler.d.ts +1 -1
- package/pkg/src/base-plugin/index.d.ts +1 -1
- package/pkg/src/base-plugin/worker.d.ts +1 -1
- package/pkg/src/{base-plugin/cache.d.ts → cache.d.ts} +2 -2
- package/pkg/src/defaults.d.ts +13 -0
- package/pkg/src/fs.d.ts +1 -0
- package/pkg/src/index.d.ts +6 -3
- package/pkg/src/paths.d.ts +13 -0
- package/pkg/src/render.d.ts +28 -0
- package/pkg/src/routes-factory/base.d.ts +17 -0
- package/pkg/src/routes-factory/index.d.ts +8 -0
- package/pkg/src/routes-factory/nesting.d.ts +3 -0
- package/pkg/src/{base-plugin/routes → routes-factory}/resolve.d.ts +3 -3
- package/pkg/src/stub-generator/index.d.ts +1 -1
- package/pkg/src/typebox.d.ts +2 -0
- package/pkg/src/types.d.ts +288 -0
- package/pkg/stub-generator/index.js +166 -24
- package/pkg/stub-generator/index.js.map +4 -4
- package/pkg/test/routes/{base.d.ts → index.d.ts} +2 -2
- package/pkg/base-plugin/routes.js +0 -819
- package/pkg/base-plugin/routes.js.map +0 -7
- package/pkg/cli/cli.js +0 -582
- package/pkg/cli/cli.js.map +0 -7
- package/pkg/cli/index.js +0 -422
- package/pkg/cli/index.js.map +0 -7
- package/pkg/cli/templates/.env +0 -1
- package/pkg/cli/templates/@src/api/app.hbs +0 -32
- package/pkg/cli/templates/@src/api/router.hbs +0 -11
- package/pkg/cli/templates/@src/api/server.hbs +0 -4
- package/pkg/cli/templates/@src/api/use.hbs +0 -6
- package/pkg/cli/templates/@src/config/index.hbs +0 -2
- package/pkg/cli/templates/@src/index.html +0 -4
- package/pkg/cli/templates/@src/vite.config.hbs +0 -29
- package/pkg/cli/templates/core/api/app.ts +0 -6
- package/pkg/cli/templates/core/api/env.d.ts +0 -4
- package/pkg/cli/templates/core/api/router.ts +0 -6
- package/pkg/cli/templates/core/api/server.ts +0 -49
- package/pkg/cli/templates/core/api/use.ts +0 -21
- package/pkg/cli/templates/vite.base.hbs +0 -44
- package/pkg/src/base-plugin/routes/nesting.d.ts +0 -5
- package/pkg/src/base-plugin/routes.d.ts +0 -9
- package/pkg/src/cli/base.d.ts +0 -30
- package/pkg/src/cli/cli.d.ts +0 -2
- package/pkg/src/cli/factory.d.ts +0 -12
- package/pkg/src/cli/index.d.ts +0 -2
- package/pkg/src/cli/templates/core/api/app.d.ts +0 -3
- package/pkg/src/cli/templates/core/api/router.d.ts +0 -3
- package/pkg/src/cli/templates/core/api/server.d.ts +0 -3
- package/pkg/src/cli/templates/core/api/use.d.ts +0 -2
- package/pkg/test/setup.d.ts +0 -1
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/articles/[...path]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/books/[category]/[[author]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/books/[category]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/books/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/files/[[folder]]/[[id]].json/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/files/[[folder]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/index/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/pages/[...path].html/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/api/users/[id].json/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/about/careers/[jobId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/about/careers/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/about/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/about/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/about/team/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/account/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/account/profile/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/resources/[[type]]/[...path]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/resources/[[type]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/resources/[[type]]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/resources/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/resources/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/settings/general/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/settings/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/settings/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/settings/permissions/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/users/[userId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/users/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/[tenant]/users/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/admin/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/[[category]]/[[tag]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/[[category]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/post/[slug]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/blog/post/[slug]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/contact/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/contact/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/courses/[courseId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/courses/[courseId]/lessons/[[lessonId]]/assignments/[...assignmentPath]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/[view]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/analytics/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/billing/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/notifications/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/profile/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/security/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/dashboard/settings/security/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/docs/[...path]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/docs/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/docs/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/files/[...filePath]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/files/[...filePath]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/legal/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/legal/privacy/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/legal/terms/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/news/[category]/articles/[...articlePath]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/news/[category]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/[clientId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/[clientId]/reports/[reportType]/data/[dataView]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/[clientId]/reports/[reportType]/data/[dataView]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/[clientId]/reports/[reportType]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/[clientId]/reports/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/portal/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/products/[id]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/products/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/profile/[username]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/profile/[username]/posts/[postId]/comments/[...thread]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/profile/[username]/posts/[postId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/files/[...path]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/files/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/files/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/[taskId]/comments/[commentId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/[taskId]/comments/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/[taskId]/comments/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/[taskId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/[taskId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/tasks/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/team/[userId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/team/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/[projectId]/team/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/projects/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/properties/[[city]]/filters/[...filters]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/properties/filters/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/properties/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/search/[[query]]/[[page]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/search/[[query]]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/search/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/[category]/[productId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/[category]/[productId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/cart/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/checkout/confirm/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/checkout/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/checkout/payment/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/checkout/shipping/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/checkout/shipping/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/orders/[orderId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/orders/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/orders/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/product/[id]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/product/[id]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/product/[id]/reviews/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/products/[[category]]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/products/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/shop/products/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/signup/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/store/[category]/filters/[...filters]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/store/[category]/sort/[sortBy]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/store/[category]/sort/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/store/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/followers/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/following/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/posts/[postId]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/posts/[postId]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/posts/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/[username]/posts/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/users/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/analytics/[range]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/analytics/[range]/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/analytics/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/analytics/layout.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/team/[memberId]/permissions/[...permissionPath]/index.d.ts +0 -0
- /package/pkg/test/@fixtures/app/{@src → src/test}/pages/workspace/[workspaceId]/team/layout.d.ts +0 -0
- /package/pkg/test/{cli/create.test.d.ts → routes/routes.test.d.ts} +0 -0
package/pkg/index.js
CHANGED
|
@@ -1,33 +1,141 @@
|
|
|
1
|
-
// src/index.ts
|
|
2
|
-
import { default as default2 } from "@kosmojs/api-generator";
|
|
3
|
-
import { default as default3 } from "@kosmojs/fetch-generator";
|
|
4
|
-
|
|
5
1
|
// src/alias-plugin/index.ts
|
|
6
2
|
import { glob } from "tinyglobby";
|
|
3
|
+
|
|
4
|
+
// src/paths.ts
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
|
|
7
|
+
// src/defaults.ts
|
|
8
|
+
var defaults = {
|
|
9
|
+
appPrefix: "~",
|
|
10
|
+
srcPrefix: "@",
|
|
11
|
+
libPrefix: "_",
|
|
12
|
+
coreDir: "core",
|
|
13
|
+
srcDir: "src",
|
|
14
|
+
libDir: "lib",
|
|
15
|
+
configDir: "config",
|
|
16
|
+
apiDir: "api",
|
|
17
|
+
pagesDir: "pages",
|
|
18
|
+
entryDir: "entry",
|
|
19
|
+
fetchDir: "fetch"
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// src/paths.ts
|
|
23
|
+
var createTsconfigPaths = (prefix) => {
|
|
24
|
+
return {
|
|
25
|
+
[`${defaults.appPrefix}/*`]: [`${prefix}/*`],
|
|
26
|
+
[`${defaults.srcPrefix}/*`]: [`${prefix}/${defaults.srcDir}/*`],
|
|
27
|
+
[`${defaults.libPrefix}/*`]: [
|
|
28
|
+
`${prefix}/${defaults.libDir}/${defaults.srcDir}/*`
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
var pathResolver = ({
|
|
33
|
+
appRoot,
|
|
34
|
+
sourceFolder
|
|
35
|
+
}) => {
|
|
36
|
+
const createPath = (...a) => {
|
|
37
|
+
return appRoot ? join(appRoot, ...a) : join(...a);
|
|
38
|
+
};
|
|
39
|
+
const createImport = {
|
|
40
|
+
coreApi(...a) {
|
|
41
|
+
return join(defaults.appPrefix, defaults.coreDir, defaults.apiDir, ...a);
|
|
42
|
+
},
|
|
43
|
+
src(...a) {
|
|
44
|
+
return join(defaults.srcPrefix, sourceFolder, ...a);
|
|
45
|
+
},
|
|
46
|
+
config(...a) {
|
|
47
|
+
return this.src(defaults.configDir, ...a);
|
|
48
|
+
},
|
|
49
|
+
api(...a) {
|
|
50
|
+
return this.src(defaults.apiDir, ...a);
|
|
51
|
+
},
|
|
52
|
+
pages(...a) {
|
|
53
|
+
return this.src(defaults.pagesDir, ...a);
|
|
54
|
+
},
|
|
55
|
+
lib(...a) {
|
|
56
|
+
return join(defaults.libPrefix, sourceFolder, ...a);
|
|
57
|
+
},
|
|
58
|
+
libApi(...a) {
|
|
59
|
+
return this.lib(defaults.apiDir, ...a);
|
|
60
|
+
},
|
|
61
|
+
libEntry(...a) {
|
|
62
|
+
return this.lib(defaults.entryDir, ...a);
|
|
63
|
+
},
|
|
64
|
+
fetch(...a) {
|
|
65
|
+
return this.lib(defaults.fetchDir, ...a);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
createPath: {
|
|
70
|
+
coreApi(...a) {
|
|
71
|
+
return createPath(defaults.coreDir, defaults.apiDir, ...a);
|
|
72
|
+
},
|
|
73
|
+
src(...a) {
|
|
74
|
+
return createPath(defaults.srcDir, sourceFolder, ...a);
|
|
75
|
+
},
|
|
76
|
+
api(...a) {
|
|
77
|
+
return this.src(defaults.apiDir, ...a);
|
|
78
|
+
},
|
|
79
|
+
pages(...a) {
|
|
80
|
+
return this.src(defaults.pagesDir, ...a);
|
|
81
|
+
},
|
|
82
|
+
config(...a) {
|
|
83
|
+
return this.src(defaults.configDir, ...a);
|
|
84
|
+
},
|
|
85
|
+
entry(...a) {
|
|
86
|
+
return this.src(defaults.entryDir, ...a);
|
|
87
|
+
},
|
|
88
|
+
lib(...a) {
|
|
89
|
+
return createPath(defaults.libDir, defaults.srcDir, sourceFolder, ...a);
|
|
90
|
+
},
|
|
91
|
+
libApi(...a) {
|
|
92
|
+
return this.lib(defaults.apiDir, ...a);
|
|
93
|
+
},
|
|
94
|
+
libEntry(...a) {
|
|
95
|
+
return this.lib(defaults.entryDir, ...a);
|
|
96
|
+
},
|
|
97
|
+
libPages(...a) {
|
|
98
|
+
return this.lib(defaults.pagesDir, ...a);
|
|
99
|
+
},
|
|
100
|
+
fetch(...a) {
|
|
101
|
+
return this.lib(defaults.fetchDir, ...a);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
createImport,
|
|
105
|
+
createImportHelper: (key, ...a) => {
|
|
106
|
+
return createImport[key](...a.slice(0, -1));
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/alias-plugin/index.ts
|
|
7
112
|
var alias_plugin_default = (appRoot, opt) => {
|
|
8
113
|
return {
|
|
9
114
|
name: "@kosmojs:aliasPlugin",
|
|
10
115
|
async config() {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
116
|
+
const paths = await import(`${appRoot}/tsconfig.json`, { with: { type: "json" } }).then((e) => {
|
|
117
|
+
return {
|
|
118
|
+
...e.default.compilerOptions?.paths,
|
|
119
|
+
...createTsconfigPaths(".")
|
|
120
|
+
};
|
|
121
|
+
});
|
|
14
122
|
const aliasmap = [];
|
|
15
|
-
const pathEntries = Object.entries(
|
|
123
|
+
const pathEntries = Object.entries(paths);
|
|
16
124
|
for (const [aliasPattern, pathPatterns] of pathEntries) {
|
|
17
125
|
const alias = aliasPattern.replace("/*", "");
|
|
18
|
-
const
|
|
19
|
-
if (
|
|
126
|
+
const paths2 = pathPatterns.map((e) => e.replace("/*", "")).sort((a, b) => a.split(/\/+/).length - b.split(/\/+/).length);
|
|
127
|
+
if (paths2.length === 1) {
|
|
20
128
|
aliasmap.push({
|
|
21
129
|
find: new RegExp(`^${alias}/`),
|
|
22
|
-
replacement: `${appRoot}/${
|
|
130
|
+
replacement: `${appRoot}/${paths2[0]}/`
|
|
23
131
|
});
|
|
24
|
-
} else if (
|
|
132
|
+
} else if (paths2.length > 1) {
|
|
25
133
|
aliasmap.push({
|
|
26
134
|
find: new RegExp(`^${alias}/`),
|
|
27
135
|
replacement: "",
|
|
28
136
|
async customResolver(_src) {
|
|
29
137
|
const src = _src.replace(/(\$|\^|\+|\(|\)|\[|\])/g, "\\$1");
|
|
30
|
-
const patterns =
|
|
138
|
+
const patterns = paths2.flatMap((path) => [
|
|
31
139
|
// Case 1: Extension is explicitly provided
|
|
32
140
|
// e.g. import styles from "@admin/{solid}/styles.module.css"
|
|
33
141
|
`${path}/${src}*`,
|
|
@@ -67,105 +175,92 @@ var alias_plugin_default = (appRoot, opt) => {
|
|
|
67
175
|
};
|
|
68
176
|
|
|
69
177
|
// src/base-plugin/index.ts
|
|
70
|
-
import { basename, join as
|
|
178
|
+
import { basename as basename2, join as join5, resolve as resolve5 } from "node:path";
|
|
71
179
|
import { styleText as styleText2 } from "node:util";
|
|
72
180
|
import { Worker } from "node:worker_threads";
|
|
73
|
-
import apiGenerator from "@kosmojs/api-generator";
|
|
74
181
|
import stubGenerator from "@kosmojs/dev/stub-generator";
|
|
75
|
-
import fetchGenerator from "@kosmojs/fetch-generator";
|
|
76
182
|
|
|
77
|
-
// src/
|
|
78
|
-
import { join, resolve } from "node:path";
|
|
79
|
-
import
|
|
80
|
-
import
|
|
81
|
-
import {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
plugins: [rebuildPlugin],
|
|
117
|
-
outdir: outDir
|
|
118
|
-
});
|
|
119
|
-
return {
|
|
120
|
-
async start() {
|
|
121
|
-
await ctx.watch({
|
|
122
|
-
// waits this many milliseconds before rebuilding after a change is detected
|
|
123
|
-
delay: options.watcher.delay
|
|
124
|
-
});
|
|
125
|
-
},
|
|
126
|
-
async stop() {
|
|
127
|
-
await ctx.dispose();
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
const devMiddleware = async (req, res, viteHandler) => {
|
|
132
|
-
const next = () => {
|
|
133
|
-
return viteHandler();
|
|
134
|
-
};
|
|
135
|
-
if (devMiddlewareFactory) {
|
|
136
|
-
const handler = devMiddlewareFactory(app);
|
|
137
|
-
await handler(req, res, next);
|
|
138
|
-
} else {
|
|
139
|
-
!req?.url || !new RegExp(`^${join(baseurl, apiurl)}($|/)`).test(req.url) ? next() : await app?.callback()(req, res);
|
|
183
|
+
// src/routes-factory/resolve.ts
|
|
184
|
+
import { dirname as dirname3, join as join3, resolve as resolve3 } from "node:path";
|
|
185
|
+
import crc5 from "crc/crc32";
|
|
186
|
+
import picomatch from "picomatch";
|
|
187
|
+
import { glob as glob2 } from "tinyglobby";
|
|
188
|
+
|
|
189
|
+
// src/render.ts
|
|
190
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
191
|
+
import { dirname, join as join2 } from "node:path";
|
|
192
|
+
import crc from "crc/crc32";
|
|
193
|
+
import handlebars from "handlebars";
|
|
194
|
+
|
|
195
|
+
// src/fs.ts
|
|
196
|
+
import { access, constants } from "node:fs/promises";
|
|
197
|
+
var pathExists = async (path) => {
|
|
198
|
+
try {
|
|
199
|
+
await access(path, constants.F_OK);
|
|
200
|
+
return true;
|
|
201
|
+
} catch {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// src/render.ts
|
|
207
|
+
var render = (template, context2, options) => {
|
|
208
|
+
const { noEscape = true, renderer = handlebars } = { ...options };
|
|
209
|
+
return renderer.compile(template, { noEscape })(context2);
|
|
210
|
+
};
|
|
211
|
+
var renderAsFile = (file, template, context2, options) => {
|
|
212
|
+
const { formatters, ...renderOpts } = { ...options };
|
|
213
|
+
const content = render(template, context2, renderOpts);
|
|
214
|
+
return Array.isArray(formatters) ? formatters.reduce((c, f) => f(c, file), content) : content;
|
|
215
|
+
};
|
|
216
|
+
var renderToFile = async (file, template, context2, options) => {
|
|
217
|
+
const content = renderAsFile(file, template, context2, options);
|
|
218
|
+
if (await pathExists(file)) {
|
|
219
|
+
const { overwrite = true } = { ...options };
|
|
220
|
+
if (overwrite === false) {
|
|
221
|
+
return;
|
|
140
222
|
}
|
|
141
|
-
|
|
223
|
+
const fileContent = await readFile(file, "utf8");
|
|
224
|
+
if (typeof overwrite === "function" && !overwrite(fileContent)) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (crc(content) === crc(fileContent)) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
await mkdir(dirname(file), { recursive: true });
|
|
232
|
+
await writeFile(file, content, "utf8");
|
|
233
|
+
};
|
|
234
|
+
var renderFactory = (options) => {
|
|
235
|
+
const renderer = handlebars.create();
|
|
236
|
+
if (options?.partials) {
|
|
237
|
+
renderer.registerPartial(options.partials);
|
|
238
|
+
}
|
|
239
|
+
if (options?.helpers) {
|
|
240
|
+
renderer.registerHelper(options.helpers);
|
|
241
|
+
}
|
|
142
242
|
return {
|
|
143
|
-
|
|
144
|
-
|
|
243
|
+
render(template, context2, selfOoptions) {
|
|
244
|
+
return render(template, context2, {
|
|
245
|
+
renderer,
|
|
246
|
+
...options,
|
|
247
|
+
...selfOoptions
|
|
248
|
+
});
|
|
249
|
+
},
|
|
250
|
+
async renderToFile(file, template, context2, selfOoptions) {
|
|
251
|
+
return renderToFile(
|
|
252
|
+
options?.outdir ? join2(options.outdir, file) : file,
|
|
253
|
+
template,
|
|
254
|
+
context2,
|
|
255
|
+
{ renderer, ...options, ...selfOoptions }
|
|
256
|
+
);
|
|
257
|
+
}
|
|
145
258
|
};
|
|
146
259
|
};
|
|
147
260
|
|
|
148
|
-
// src/
|
|
149
|
-
import {
|
|
150
|
-
|
|
151
|
-
} from "@kosmojs/devlib";
|
|
152
|
-
|
|
153
|
-
// src/base-plugin/routes/resolve.ts
|
|
154
|
-
import { dirname as dirname2, join as join2, resolve as resolve4 } from "node:path";
|
|
155
|
-
import crc3 from "crc/crc32";
|
|
156
|
-
import picomatch from "picomatch";
|
|
157
|
-
import { glob as glob2 } from "tinyglobby";
|
|
158
|
-
import {
|
|
159
|
-
defaults as defaults2,
|
|
160
|
-
pathResolver as pathResolver2,
|
|
161
|
-
pathTokensFactory,
|
|
162
|
-
render,
|
|
163
|
-
renderToFile
|
|
164
|
-
} from "@kosmojs/devlib";
|
|
165
|
-
|
|
166
|
-
// src/base-plugin/ast.ts
|
|
167
|
-
import { resolve as resolve2 } from "node:path";
|
|
168
|
-
import crc from "crc/crc32";
|
|
261
|
+
// src/ast.ts
|
|
262
|
+
import { resolve } from "node:path";
|
|
263
|
+
import crc2 from "crc/crc32";
|
|
169
264
|
import { flattener } from "tfusion";
|
|
170
265
|
import {
|
|
171
266
|
Project,
|
|
@@ -252,14 +347,14 @@ var extractRouteMethods = (callExpression, route) => {
|
|
|
252
347
|
const payloadText = payloadGeneric?.node ? payloadGeneric.node.getChildren().length === 0 ? "{}" : payloadGeneric.node.getFullText() : void 0;
|
|
253
348
|
const responseText = responseGeneric?.node.getText();
|
|
254
349
|
const responseType = responseText ? {
|
|
255
|
-
id: ["ResponseT",
|
|
350
|
+
id: ["ResponseT", crc2(route.id + method)].join(""),
|
|
256
351
|
method,
|
|
257
352
|
skipValidation: responseGeneric?.comments ? responseGeneric.comments.some(skipValidationFilter) : false,
|
|
258
353
|
text: ["never", "object"].includes(responseText) ? "{}" : responseText,
|
|
259
354
|
resolvedType: void 0
|
|
260
355
|
} : void 0;
|
|
261
356
|
const payloadType = payloadText ? {
|
|
262
|
-
id: ["PayloadT",
|
|
357
|
+
id: ["PayloadT", crc2(route.id + method)].join(""),
|
|
263
358
|
responseTypeId: responseType?.id,
|
|
264
359
|
method,
|
|
265
360
|
skipValidation: payloadGeneric?.comments ? payloadGeneric.comments.some(skipValidationFilter) : false,
|
|
@@ -388,12 +483,12 @@ var extractGenerics = (callExpression) => {
|
|
|
388
483
|
};
|
|
389
484
|
var typeResolverFactory = ({ appRoot }) => {
|
|
390
485
|
const project = createProject({
|
|
391
|
-
tsConfigFilePath:
|
|
486
|
+
tsConfigFilePath: resolve(appRoot, "tsconfig.json"),
|
|
392
487
|
skipAddingFilesFromTsConfig: true
|
|
393
488
|
});
|
|
394
489
|
const literalTypesResolver = (literalTypes, options) => {
|
|
395
490
|
const sourceFile = project.createSourceFile(
|
|
396
|
-
`${
|
|
491
|
+
`${crc2(literalTypes)}-${Date.now()}.ts`,
|
|
397
492
|
literalTypes,
|
|
398
493
|
{ overwrite: true }
|
|
399
494
|
);
|
|
@@ -418,12 +513,11 @@ var typeResolverFactory = ({ appRoot }) => {
|
|
|
418
513
|
};
|
|
419
514
|
};
|
|
420
515
|
|
|
421
|
-
// src/
|
|
422
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
423
|
-
import { dirname, resolve as
|
|
424
|
-
import
|
|
516
|
+
// src/cache.ts
|
|
517
|
+
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile2 } from "node:fs/promises";
|
|
518
|
+
import { dirname as dirname2, resolve as resolve2 } from "node:path";
|
|
519
|
+
import crc3 from "crc/crc32";
|
|
425
520
|
import self from "@kosmojs/dev/package.json" with { type: "json" };
|
|
426
|
-
import { pathExists, pathResolver } from "@kosmojs/devlib";
|
|
427
521
|
var cacheFactory = (route, {
|
|
428
522
|
appRoot,
|
|
429
523
|
sourceFolder,
|
|
@@ -432,11 +526,11 @@ var cacheFactory = (route, {
|
|
|
432
526
|
const cacheFile = pathResolver({
|
|
433
527
|
appRoot,
|
|
434
528
|
sourceFolder
|
|
435
|
-
}).
|
|
529
|
+
}).createPath.libApi(dirname2(route.file), "cache.json");
|
|
436
530
|
const getCache = async (opt) => {
|
|
437
531
|
if (await pathExists(cacheFile)) {
|
|
438
532
|
try {
|
|
439
|
-
const cache = JSON.parse(await
|
|
533
|
+
const cache = JSON.parse(await readFile2(cacheFile, "utf8"));
|
|
440
534
|
return opt?.validate ? validateCache(cache) : cache;
|
|
441
535
|
} catch (_e) {
|
|
442
536
|
}
|
|
@@ -459,8 +553,8 @@ var cacheFactory = (route, {
|
|
|
459
553
|
] = await generateFileHash(file);
|
|
460
554
|
}
|
|
461
555
|
const cache = { ...rest, hash, referencedFiles };
|
|
462
|
-
await
|
|
463
|
-
await
|
|
556
|
+
await mkdir2(dirname2(cacheFile), { recursive: true });
|
|
557
|
+
await writeFile2(cacheFile, JSON.stringify(cache, null, 2), "utf8");
|
|
464
558
|
return cache;
|
|
465
559
|
};
|
|
466
560
|
const validateCache = async (cache) => {
|
|
@@ -477,7 +571,7 @@ var cacheFactory = (route, {
|
|
|
477
571
|
return;
|
|
478
572
|
}
|
|
479
573
|
for (const [file, hash2] of Object.entries(cache.referencedFiles)) {
|
|
480
|
-
if (!identicalHashSum(hash2, await generateFileHash(
|
|
574
|
+
if (!identicalHashSum(hash2, await generateFileHash(resolve2(appRoot, file)))) {
|
|
481
575
|
return;
|
|
482
576
|
}
|
|
483
577
|
}
|
|
@@ -492,11 +586,11 @@ var cacheFactory = (route, {
|
|
|
492
586
|
var generateFileHash = async (file, extraContext) => {
|
|
493
587
|
let fileContent;
|
|
494
588
|
try {
|
|
495
|
-
fileContent = await
|
|
589
|
+
fileContent = await readFile2(file, "utf8");
|
|
496
590
|
} catch (_e) {
|
|
497
591
|
return 0;
|
|
498
592
|
}
|
|
499
|
-
return fileContent ?
|
|
593
|
+
return fileContent ? crc3(
|
|
500
594
|
JSON.stringify({
|
|
501
595
|
...extraContext,
|
|
502
596
|
[self.cacheVersion]: fileContent
|
|
@@ -507,13 +601,77 @@ var identicalHashSum = (a, b) => {
|
|
|
507
601
|
return a === b;
|
|
508
602
|
};
|
|
509
603
|
|
|
510
|
-
// src/
|
|
604
|
+
// src/routes-factory/base.ts
|
|
605
|
+
import crc4 from "crc/crc32";
|
|
606
|
+
var pathTokensFactory = (path) => {
|
|
607
|
+
const requiredParamRegex = /^\[([^\]]+)\]$/;
|
|
608
|
+
const optionalParamRegex = /^\[\[([^\]]+)\]\]$/;
|
|
609
|
+
const restParamRegex = /^\[\.\.\.([^\]]+)\]$/;
|
|
610
|
+
return path.split("/").map((orig, i) => {
|
|
611
|
+
const [base, ext = ""] = orig.split(/(\.([\w\d-]+)$)/);
|
|
612
|
+
const paramBase = (regex) => {
|
|
613
|
+
const name = base.replace(regex, "$1") || base;
|
|
614
|
+
return {
|
|
615
|
+
name,
|
|
616
|
+
const: /\W/.test(name) ? [name.replace(/\W/g, "_"), crc4(orig)].join("_") : name
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
let param;
|
|
620
|
+
if (base.startsWith("[")) {
|
|
621
|
+
if (restParamRegex.test(base)) {
|
|
622
|
+
param = {
|
|
623
|
+
...paramBase(restParamRegex),
|
|
624
|
+
isRequired: false,
|
|
625
|
+
isOptional: false,
|
|
626
|
+
isRest: true
|
|
627
|
+
};
|
|
628
|
+
} else if (optionalParamRegex.test(base)) {
|
|
629
|
+
param = {
|
|
630
|
+
...paramBase(optionalParamRegex),
|
|
631
|
+
isRequired: false,
|
|
632
|
+
isOptional: true,
|
|
633
|
+
isRest: false
|
|
634
|
+
};
|
|
635
|
+
} else if (requiredParamRegex.test(base)) {
|
|
636
|
+
param = {
|
|
637
|
+
...paramBase(requiredParamRegex),
|
|
638
|
+
isRequired: true,
|
|
639
|
+
isOptional: false,
|
|
640
|
+
isRest: false
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return {
|
|
645
|
+
orig,
|
|
646
|
+
base,
|
|
647
|
+
path: i === 0 ? orig.replace(/^index$/, "/") : orig,
|
|
648
|
+
ext,
|
|
649
|
+
...param ? { param } : {}
|
|
650
|
+
};
|
|
651
|
+
});
|
|
652
|
+
};
|
|
653
|
+
var sortRoutes = (a, b) => {
|
|
654
|
+
const aStaticSegments = staticSegments(a.pathTokens);
|
|
655
|
+
const bStaticSegments = staticSegments(b.pathTokens);
|
|
656
|
+
if (aStaticSegments !== bStaticSegments) {
|
|
657
|
+
return bStaticSegments - aStaticSegments;
|
|
658
|
+
}
|
|
659
|
+
if (a.pathTokens.length !== b.pathTokens.length) {
|
|
660
|
+
return a.pathTokens.length - b.pathTokens.length;
|
|
661
|
+
}
|
|
662
|
+
return a.name.localeCompare(b.name);
|
|
663
|
+
};
|
|
664
|
+
var staticSegments = (pathTokens) => {
|
|
665
|
+
return pathTokens.reduce((a, e) => a + (e.param ? 0 : 1), 0);
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
// src/routes-factory/templates/resolved-types.hbs
|
|
511
669
|
var resolved_types_default = "{{#each resolvedTypes}}\nexport type {{name}} = {{text}};\n{{/each}}\n";
|
|
512
670
|
|
|
513
|
-
// src/
|
|
671
|
+
// src/routes-factory/templates/types.hbs
|
|
514
672
|
var types_default = '{{#each typeDeclarations}}{{text}}\n{{/each}}\n\nexport type {{params.id}} = {\n {{#each paramsSchema}}\n "{{name}}"{{#unless isRequired}}?{{/unless}}:{{#if isRest}} Array<{{/if}}\n {{#if refinement}}{{refinement.text}}{{else}}string{{/if}}\n {{#if isRest}}>{{/if}}\n {{/each}}\n};\n\n{{#each payloadTypes}}\nexport type {{id}} = {{text}};\n{{/each}}\n\n{{#each responseTypes}}\nexport type {{id}} = {{text}};\n{{/each}}\n';
|
|
515
673
|
|
|
516
|
-
// src/
|
|
674
|
+
// src/routes-factory/resolve.ts
|
|
517
675
|
var API_INDEX_BASENAME = "index";
|
|
518
676
|
var API_INDEX_PATTERN = `${API_INDEX_BASENAME}.ts`;
|
|
519
677
|
var API_USE_BASENAME = "use";
|
|
@@ -524,29 +682,30 @@ var PAGE_LAYOUT_BASENAME = "layout";
|
|
|
524
682
|
var PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue}`;
|
|
525
683
|
var ROUTE_FILE_PATTERNS = [
|
|
526
684
|
// match index files in api dir
|
|
527
|
-
`${
|
|
685
|
+
`${defaults.apiDir}/**/${API_INDEX_PATTERN}`,
|
|
528
686
|
// match use files in api dir
|
|
529
|
-
`${
|
|
687
|
+
`${defaults.apiDir}/**/${API_USE_PATTERN}`,
|
|
530
688
|
// match index files in pages dir
|
|
531
|
-
`${
|
|
689
|
+
`${defaults.pagesDir}/**/${PAGE_INDEX_PATTERN}`,
|
|
532
690
|
// match layout files in pages dir
|
|
533
|
-
`${
|
|
691
|
+
`${defaults.pagesDir}/**/${PAGE_LAYOUT_PATTERN}`
|
|
534
692
|
];
|
|
535
693
|
var scanRoutes = async ({
|
|
536
694
|
appRoot,
|
|
537
695
|
sourceFolder
|
|
538
696
|
}) => {
|
|
697
|
+
const { createPath } = pathResolver({ appRoot, sourceFolder });
|
|
539
698
|
return glob2(ROUTE_FILE_PATTERNS, {
|
|
540
|
-
cwd:
|
|
699
|
+
cwd: createPath.src(),
|
|
541
700
|
absolute: true,
|
|
542
701
|
onlyFiles: true,
|
|
543
702
|
followSymbolicLinks: false,
|
|
544
703
|
ignore: [
|
|
545
704
|
// ignore top-level matches, routes resides in folders, even index route
|
|
546
|
-
`${
|
|
547
|
-
`${
|
|
548
|
-
`${
|
|
549
|
-
`${
|
|
705
|
+
`${defaults.apiDir}/${API_INDEX_PATTERN}`,
|
|
706
|
+
`${defaults.apiDir}/${API_USE_PATTERN}`,
|
|
707
|
+
`${defaults.pagesDir}/${PAGE_INDEX_PATTERN}`,
|
|
708
|
+
`${defaults.pagesDir}/${PAGE_LAYOUT_PATTERN}`
|
|
550
709
|
]
|
|
551
710
|
});
|
|
552
711
|
};
|
|
@@ -554,11 +713,11 @@ var isRouteFile = (file, {
|
|
|
554
713
|
appRoot,
|
|
555
714
|
sourceFolder
|
|
556
715
|
}) => {
|
|
557
|
-
const [_sourceFolder, folder, ...rest] =
|
|
716
|
+
const [_sourceFolder, folder, ...rest] = resolve3(appRoot, file).replace(`${appRoot}/${defaults.srcDir}/`, "").split("/");
|
|
558
717
|
if (!folder || _sourceFolder !== sourceFolder || rest.length < 2) {
|
|
559
|
-
return;
|
|
718
|
+
return false;
|
|
560
719
|
}
|
|
561
|
-
return picomatch.isMatch(
|
|
720
|
+
return picomatch.isMatch(join3(folder, ...rest), ROUTE_FILE_PATTERNS) ? [folder, rest.join("/")] : false;
|
|
562
721
|
};
|
|
563
722
|
var isApiRoute = (file) => {
|
|
564
723
|
return picomatch.matchBase(file, `**/${API_INDEX_PATTERN}`);
|
|
@@ -572,28 +731,23 @@ var isPageRoute = (file) => {
|
|
|
572
731
|
var isPageLayout = (file) => {
|
|
573
732
|
return picomatch.matchBase(file, `**/${PAGE_LAYOUT_PATTERN}`);
|
|
574
733
|
};
|
|
575
|
-
var createRouteEntry = (
|
|
734
|
+
var createRouteEntry = (fileFullpath, {
|
|
576
735
|
appRoot,
|
|
577
736
|
sourceFolder
|
|
578
737
|
}) => {
|
|
579
|
-
const resolvedPaths = isRouteFile(
|
|
738
|
+
const resolvedPaths = isRouteFile(fileFullpath, { appRoot, sourceFolder });
|
|
580
739
|
if (!resolvedPaths) {
|
|
581
740
|
return;
|
|
582
741
|
}
|
|
583
742
|
const [folder, file] = resolvedPaths;
|
|
584
|
-
const
|
|
585
|
-
const pathTokens = pathTokensFactory(dirname2(file));
|
|
586
|
-
const name = pathTokens.map((e) => e.orig).join("/");
|
|
587
|
-
const importFile = file;
|
|
588
|
-
const importName = `${importFile.replace(/\W+/g, "_")}_${crc3(importFile)}`;
|
|
743
|
+
const pathTokens = pathTokensFactory(dirname3(file));
|
|
589
744
|
return {
|
|
590
|
-
|
|
745
|
+
id: `${file.replace(/\W+/g, "_")}_${crc5(file)}`,
|
|
746
|
+
name: pathTokens.map((e) => e.orig).join("/"),
|
|
591
747
|
folder,
|
|
592
748
|
file,
|
|
593
749
|
fileFullpath,
|
|
594
|
-
pathTokens
|
|
595
|
-
importFile,
|
|
596
|
-
importName
|
|
750
|
+
pathTokens
|
|
597
751
|
};
|
|
598
752
|
};
|
|
599
753
|
var pageLayoutResolverFactory = () => {
|
|
@@ -610,17 +764,10 @@ var pageLayoutResolverFactory = () => {
|
|
|
610
764
|
};
|
|
611
765
|
var pageRouteResolverFactory = () => {
|
|
612
766
|
return (entry) => {
|
|
613
|
-
const {
|
|
614
|
-
name,
|
|
615
|
-
folder,
|
|
616
|
-
file,
|
|
617
|
-
fileFullpath,
|
|
618
|
-
pathTokens,
|
|
619
|
-
importFile,
|
|
620
|
-
importName
|
|
621
|
-
} = entry;
|
|
767
|
+
const { id, name, folder, file, fileFullpath, pathTokens } = entry;
|
|
622
768
|
const handler = async () => {
|
|
623
769
|
const entry2 = {
|
|
770
|
+
id,
|
|
624
771
|
name,
|
|
625
772
|
pathTokens,
|
|
626
773
|
params: {
|
|
@@ -628,9 +775,7 @@ var pageRouteResolverFactory = () => {
|
|
|
628
775
|
},
|
|
629
776
|
folder,
|
|
630
777
|
file,
|
|
631
|
-
fileFullpath
|
|
632
|
-
importFile,
|
|
633
|
-
importName
|
|
778
|
+
fileFullpath
|
|
634
779
|
};
|
|
635
780
|
return {
|
|
636
781
|
kind: "pageRoute",
|
|
@@ -673,22 +818,14 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
673
818
|
refreshSourceFile
|
|
674
819
|
} = typeResolverFactory(pluginOptions);
|
|
675
820
|
return (entry) => {
|
|
676
|
-
const {
|
|
677
|
-
name,
|
|
678
|
-
file,
|
|
679
|
-
folder,
|
|
680
|
-
fileFullpath,
|
|
681
|
-
pathTokens,
|
|
682
|
-
importFile,
|
|
683
|
-
importName
|
|
684
|
-
} = entry;
|
|
821
|
+
const { id, name, file, folder, fileFullpath, pathTokens } = entry;
|
|
685
822
|
const handler = async (updatedFile) => {
|
|
686
823
|
const paramsSchema = pathTokens.flatMap((e) => {
|
|
687
824
|
return e.param ? [e.param] : [];
|
|
688
825
|
});
|
|
689
826
|
const optionalParams = paramsSchema.length ? !paramsSchema.some((e) => e.isRequired) : true;
|
|
690
827
|
const { getCache, persistCache } = cacheFactory(
|
|
691
|
-
{ file, fileFullpath
|
|
828
|
+
{ id, file, fileFullpath },
|
|
692
829
|
{
|
|
693
830
|
appRoot,
|
|
694
831
|
sourceFolder,
|
|
@@ -708,12 +845,12 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
708
845
|
responseTypes,
|
|
709
846
|
referencedFiles = []
|
|
710
847
|
} = await resolveRouteSignature(
|
|
711
|
-
{
|
|
848
|
+
{ id, fileFullpath, optionalParams },
|
|
712
849
|
{
|
|
713
850
|
withReferencedFiles: true,
|
|
714
851
|
sourceFile: getSourceFile(fileFullpath),
|
|
715
852
|
relpathResolver(path) {
|
|
716
|
-
return
|
|
853
|
+
return join3(sourceFolder, defaults.apiDir, dirname3(file), path);
|
|
717
854
|
}
|
|
718
855
|
}
|
|
719
856
|
);
|
|
@@ -724,13 +861,12 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
724
861
|
}
|
|
725
862
|
return [];
|
|
726
863
|
}) : [];
|
|
727
|
-
const typesFile =
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
);
|
|
864
|
+
const typesFile = pathResolver({
|
|
865
|
+
appRoot,
|
|
866
|
+
sourceFolder
|
|
867
|
+
}).createPath.libApi(dirname3(file), "types.ts");
|
|
732
868
|
const params = {
|
|
733
|
-
id: ["ParamsT",
|
|
869
|
+
id: ["ParamsT", crc5(name)].join(""),
|
|
734
870
|
schema: paramsSchema,
|
|
735
871
|
resolvedType: void 0
|
|
736
872
|
};
|
|
@@ -748,9 +884,9 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
748
884
|
});
|
|
749
885
|
const resolvedTypes = resolveTypes ? literalTypesResolver(typesFileContent, {
|
|
750
886
|
overrides: [...payloadTypes, ...responseTypes].reduce(
|
|
751
|
-
(map, { id, skipValidation }) => {
|
|
887
|
+
(map, { id: id2, skipValidation }) => {
|
|
752
888
|
if (skipValidation) {
|
|
753
|
-
map[
|
|
889
|
+
map[id2] = "never";
|
|
754
890
|
}
|
|
755
891
|
return map;
|
|
756
892
|
},
|
|
@@ -787,13 +923,12 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
787
923
|
});
|
|
788
924
|
}
|
|
789
925
|
const entry2 = {
|
|
926
|
+
id,
|
|
790
927
|
name,
|
|
791
928
|
pathTokens,
|
|
792
929
|
params: cache.params,
|
|
793
930
|
numericParams: cache.numericParams,
|
|
794
931
|
optionalParams,
|
|
795
|
-
importName,
|
|
796
|
-
importFile,
|
|
797
932
|
folder,
|
|
798
933
|
file,
|
|
799
934
|
fileFullpath,
|
|
@@ -804,7 +939,7 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
804
939
|
referencedFiles: Object.keys(cache.referencedFiles).map(
|
|
805
940
|
// expand referenced files path,
|
|
806
941
|
// they are stored as relative in cache
|
|
807
|
-
(e) =>
|
|
942
|
+
(e) => resolve3(appRoot, e)
|
|
808
943
|
)
|
|
809
944
|
};
|
|
810
945
|
return {
|
|
@@ -816,13 +951,93 @@ var apiRouteResolverFactory = (pluginOptions) => {
|
|
|
816
951
|
};
|
|
817
952
|
};
|
|
818
953
|
|
|
819
|
-
// src/
|
|
820
|
-
import {
|
|
821
|
-
|
|
822
|
-
|
|
954
|
+
// src/routes-factory/nesting.ts
|
|
955
|
+
import { basename } from "node:path";
|
|
956
|
+
var nestedRoutesFactory = (routeEntries) => {
|
|
957
|
+
const entryStack = structuredClone(routeEntries).sort(sortRoutes);
|
|
958
|
+
const transformEntries = (entries, parent) => {
|
|
959
|
+
return [...new Set(entries.map((e) => e.name))].flatMap((name) => {
|
|
960
|
+
const nameEntries = entryStack.flatMap(({ fileFullpath, ...entry }) => {
|
|
961
|
+
return entry.name === name ? [entry] : [];
|
|
962
|
+
});
|
|
963
|
+
const index = nameEntries.find(
|
|
964
|
+
(e) => basename(e.file).startsWith(PAGE_INDEX_BASENAME)
|
|
965
|
+
);
|
|
966
|
+
const layout = nameEntries.find(
|
|
967
|
+
(e) => basename(e.file).startsWith(PAGE_LAYOUT_BASENAME)
|
|
968
|
+
);
|
|
969
|
+
if (index || layout) {
|
|
970
|
+
return [
|
|
971
|
+
{
|
|
972
|
+
index: index ? {
|
|
973
|
+
...index,
|
|
974
|
+
pathTokens: index.pathTokens.slice(
|
|
975
|
+
parent?.pathTokens.length || 0
|
|
976
|
+
)
|
|
977
|
+
} : void 0,
|
|
978
|
+
layout: layout ? {
|
|
979
|
+
...layout,
|
|
980
|
+
pathTokens: layout.pathTokens.slice(
|
|
981
|
+
parent?.pathTokens.length || 0
|
|
982
|
+
)
|
|
983
|
+
} : void 0,
|
|
984
|
+
parent: parent?.name,
|
|
985
|
+
children: transformEntries(
|
|
986
|
+
findDescendantEntries(index || layout),
|
|
987
|
+
index || layout
|
|
988
|
+
)
|
|
989
|
+
}
|
|
990
|
+
];
|
|
991
|
+
}
|
|
992
|
+
return [];
|
|
993
|
+
});
|
|
994
|
+
};
|
|
995
|
+
const findDescendantEntries = ({
|
|
996
|
+
name,
|
|
997
|
+
pathTokens
|
|
998
|
+
}) => {
|
|
999
|
+
const potentialChildren = entryStack.filter((entry) => {
|
|
1000
|
+
if (entry.pathTokens.length <= pathTokens.length) {
|
|
1001
|
+
return false;
|
|
1002
|
+
}
|
|
1003
|
+
if (!entry.name.startsWith(`${name}/`)) {
|
|
1004
|
+
return false;
|
|
1005
|
+
}
|
|
1006
|
+
return true;
|
|
1007
|
+
});
|
|
1008
|
+
return potentialChildren.filter((child) => {
|
|
1009
|
+
const hasIntermediateRoute = potentialChildren.some((intermediate) => {
|
|
1010
|
+
if (intermediate === child) {
|
|
1011
|
+
return false;
|
|
1012
|
+
}
|
|
1013
|
+
if (intermediate.pathTokens.length <= pathTokens.length) {
|
|
1014
|
+
return false;
|
|
1015
|
+
}
|
|
1016
|
+
if (intermediate.pathTokens.length >= child.pathTokens.length) {
|
|
1017
|
+
return false;
|
|
1018
|
+
}
|
|
1019
|
+
return child.name.startsWith(`${intermediate.name}/`);
|
|
1020
|
+
});
|
|
1021
|
+
return !hasIntermediateRoute;
|
|
1022
|
+
});
|
|
1023
|
+
};
|
|
1024
|
+
const rootEntries = entryStack.filter((entry) => {
|
|
1025
|
+
const hasParent = entryStack.some((potential) => {
|
|
1026
|
+
if (potential === entry) {
|
|
1027
|
+
return false;
|
|
1028
|
+
}
|
|
1029
|
+
if (potential.pathTokens.length >= entry.pathTokens.length) {
|
|
1030
|
+
return false;
|
|
1031
|
+
}
|
|
1032
|
+
return entry.name.startsWith(`${potential.name}/`);
|
|
1033
|
+
});
|
|
1034
|
+
return !hasParent;
|
|
1035
|
+
});
|
|
1036
|
+
return transformEntries(rootEntries);
|
|
1037
|
+
};
|
|
823
1038
|
|
|
824
|
-
// src/
|
|
825
|
-
var
|
|
1039
|
+
// src/routes-factory/index.ts
|
|
1040
|
+
var routesFactory = async (pluginOptions) => {
|
|
826
1041
|
const { appRoot, sourceFolder } = pluginOptions;
|
|
827
1042
|
const apiRouteResolver = apiRouteResolverFactory(pluginOptions);
|
|
828
1043
|
const apiUseResolver = apiUseResolverFactory(pluginOptions);
|
|
@@ -835,13 +1050,13 @@ var routes_default = async (pluginOptions) => {
|
|
|
835
1050
|
return entry ? [entry] : [];
|
|
836
1051
|
});
|
|
837
1052
|
for (const entry of entries) {
|
|
838
|
-
if (entry.folder ===
|
|
1053
|
+
if (entry.folder === defaults.apiDir) {
|
|
839
1054
|
if (isApiRoute(entry.file)) {
|
|
840
1055
|
resolvers.set(entry.fileFullpath, apiRouteResolver(entry));
|
|
841
1056
|
} else if (isApiUse(entry.file)) {
|
|
842
1057
|
resolvers.set(entry.fileFullpath, apiUseResolver(entry));
|
|
843
1058
|
}
|
|
844
|
-
} else if (entry.folder ===
|
|
1059
|
+
} else if (entry.folder === defaults.pagesDir) {
|
|
845
1060
|
if (isPageRoute(entry.file)) {
|
|
846
1061
|
resolvers.set(entry.fileFullpath, pageRouteResolver(entry));
|
|
847
1062
|
} else if (isPageLayout(entry.file)) {
|
|
@@ -858,6 +1073,76 @@ var routes_default = async (pluginOptions) => {
|
|
|
858
1073
|
};
|
|
859
1074
|
};
|
|
860
1075
|
|
|
1076
|
+
// src/base-plugin/api-handler.ts
|
|
1077
|
+
import { join as join4, resolve as resolve4 } from "node:path";
|
|
1078
|
+
import { styleText } from "node:util";
|
|
1079
|
+
import { context } from "esbuild";
|
|
1080
|
+
var api_handler_default = async (options) => {
|
|
1081
|
+
const { appRoot, sourceFolder, baseurl, apiurl } = options;
|
|
1082
|
+
const { createPath } = pathResolver({ appRoot, sourceFolder });
|
|
1083
|
+
const outDir = join4(options.outDir, defaults.apiDir);
|
|
1084
|
+
const esbuildOptions = await import(resolve4(appRoot, "esbuild.json"), { with: { type: "json" } }).then((e) => e.default);
|
|
1085
|
+
let app;
|
|
1086
|
+
let devMiddlewareFactory;
|
|
1087
|
+
let teardownHandler;
|
|
1088
|
+
const watcher = async () => {
|
|
1089
|
+
const rebuildPlugin = {
|
|
1090
|
+
name: "rebuild",
|
|
1091
|
+
setup(build) {
|
|
1092
|
+
build.onEnd(async () => {
|
|
1093
|
+
if (app) {
|
|
1094
|
+
await teardownHandler?.(app);
|
|
1095
|
+
}
|
|
1096
|
+
try {
|
|
1097
|
+
const exports = await import(`${outDir}/app.js?${Date.now()}`);
|
|
1098
|
+
devMiddlewareFactory = exports.devMiddlewareFactory;
|
|
1099
|
+
teardownHandler = exports.teardownHandler;
|
|
1100
|
+
app = await exports.default();
|
|
1101
|
+
console.debug(`${styleText("green", "\u279C")} Api handler ready`);
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
console.error(`${styleText("red", "\u2717")} Api handler error`);
|
|
1104
|
+
console.error(error);
|
|
1105
|
+
}
|
|
1106
|
+
});
|
|
1107
|
+
}
|
|
1108
|
+
};
|
|
1109
|
+
const ctx = await context({
|
|
1110
|
+
...esbuildOptions,
|
|
1111
|
+
logLevel: "error",
|
|
1112
|
+
bundle: true,
|
|
1113
|
+
entryPoints: [createPath.api("app.ts")],
|
|
1114
|
+
plugins: [rebuildPlugin],
|
|
1115
|
+
outdir: outDir
|
|
1116
|
+
});
|
|
1117
|
+
return {
|
|
1118
|
+
async start() {
|
|
1119
|
+
await ctx.watch({
|
|
1120
|
+
// waits this many milliseconds before rebuilding after a change is detected
|
|
1121
|
+
delay: options.watcher.delay
|
|
1122
|
+
});
|
|
1123
|
+
},
|
|
1124
|
+
async stop() {
|
|
1125
|
+
await ctx.dispose();
|
|
1126
|
+
}
|
|
1127
|
+
};
|
|
1128
|
+
};
|
|
1129
|
+
const devMiddleware = async (req, res, viteHandler) => {
|
|
1130
|
+
const next = () => {
|
|
1131
|
+
return viteHandler();
|
|
1132
|
+
};
|
|
1133
|
+
if (devMiddlewareFactory) {
|
|
1134
|
+
const handler = devMiddlewareFactory(app);
|
|
1135
|
+
await handler(req, res, next);
|
|
1136
|
+
} else {
|
|
1137
|
+
!req?.url || !new RegExp(`^${join4(baseurl, apiurl)}($|/)`).test(req.url) ? next() : await app?.callback()(req, res);
|
|
1138
|
+
}
|
|
1139
|
+
};
|
|
1140
|
+
return {
|
|
1141
|
+
watcher,
|
|
1142
|
+
devMiddleware
|
|
1143
|
+
};
|
|
1144
|
+
};
|
|
1145
|
+
|
|
861
1146
|
// src/base-plugin/spinner.ts
|
|
862
1147
|
import ora from "ora";
|
|
863
1148
|
var spinnerFactory = (startText) => {
|
|
@@ -974,15 +1259,15 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
974
1259
|
}
|
|
975
1260
|
return {
|
|
976
1261
|
build: {
|
|
977
|
-
outDir:
|
|
1262
|
+
outDir: join5(config.build.outDir, outDirSuffix),
|
|
978
1263
|
manifest: true
|
|
979
1264
|
}
|
|
980
1265
|
};
|
|
981
1266
|
},
|
|
982
1267
|
async configResolved(_config) {
|
|
983
1268
|
store.config = _config;
|
|
984
|
-
const appRoot = resolve5(store.config.root, "
|
|
985
|
-
const sourceFolder =
|
|
1269
|
+
const appRoot = resolve5(store.config.root, "../..");
|
|
1270
|
+
const sourceFolder = basename2(store.config.root);
|
|
986
1271
|
const outDir = resolve5(appRoot, resolve5(store.config.build.outDir, ".."));
|
|
987
1272
|
const { stabilityThreshold = 1e3 } = typeof store.config.server.watch?.awaitWriteFinish === "object" ? store.config.server.watch.awaitWriteFinish : {};
|
|
988
1273
|
const watcher = {
|
|
@@ -995,9 +1280,14 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
995
1280
|
formatters = [],
|
|
996
1281
|
refineTypeName = "TRefine"
|
|
997
1282
|
} = { ...pluginOptions };
|
|
998
|
-
const
|
|
999
|
-
const
|
|
1000
|
-
const
|
|
1283
|
+
const apiGenerator = generators.find((e) => e.kind === "api");
|
|
1284
|
+
const fetchGenerator = generators.find((e) => e.kind === "fetch");
|
|
1285
|
+
const ssrGenerator = generators.find((e) => e.kind === "ssr");
|
|
1286
|
+
if (!apiGenerator || !fetchGenerator) {
|
|
1287
|
+
throw new Error(
|
|
1288
|
+
"Some of required generators missing, make sure both `api` and `fetch` generators configured properly"
|
|
1289
|
+
);
|
|
1290
|
+
}
|
|
1001
1291
|
store.resolvedOptions = {
|
|
1002
1292
|
...pluginOptions,
|
|
1003
1293
|
command: store.config.command,
|
|
@@ -1006,15 +1296,15 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
1006
1296
|
// 1. stub generator should run first
|
|
1007
1297
|
stubGenerator(),
|
|
1008
1298
|
// 2. then api generator
|
|
1009
|
-
|
|
1299
|
+
apiGenerator,
|
|
1010
1300
|
// 3. then fetch generator
|
|
1011
|
-
|
|
1301
|
+
fetchGenerator,
|
|
1012
1302
|
// 4. user generators in the order they were added
|
|
1013
1303
|
...generators.filter((e) => {
|
|
1014
1304
|
return e.kind ? !["api", "fetch", "ssr"].includes(e.kind) : true;
|
|
1015
1305
|
}),
|
|
1016
1306
|
// 5. ssr generator should run last
|
|
1017
|
-
...
|
|
1307
|
+
...ssrGenerator ? [ssrGenerator] : []
|
|
1018
1308
|
],
|
|
1019
1309
|
formatters: formatters.map((e) => e.formatter),
|
|
1020
1310
|
refineTypeName,
|
|
@@ -1026,7 +1316,7 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
1026
1316
|
};
|
|
1027
1317
|
}
|
|
1028
1318
|
if (store.config.command === "build") {
|
|
1029
|
-
const { resolvers } = await
|
|
1319
|
+
const { resolvers } = await routesFactory(store.resolvedOptions);
|
|
1030
1320
|
const resolvedEntries = [];
|
|
1031
1321
|
{
|
|
1032
1322
|
const spinner = spinnerFactory("Resolving Routes");
|
|
@@ -1042,8 +1332,8 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
1042
1332
|
const spinner = spinnerFactory("Running Generators");
|
|
1043
1333
|
for (const { name, factory } of store.resolvedOptions.generators) {
|
|
1044
1334
|
spinner.append(name);
|
|
1045
|
-
const {
|
|
1046
|
-
await
|
|
1335
|
+
const { build } = await factory(store.resolvedOptions);
|
|
1336
|
+
await build(resolvedEntries);
|
|
1047
1337
|
}
|
|
1048
1338
|
spinner.succeed();
|
|
1049
1339
|
}
|
|
@@ -1070,9 +1360,8 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
1070
1360
|
};
|
|
1071
1361
|
|
|
1072
1362
|
// src/define-plugin/index.ts
|
|
1073
|
-
import { readFile as
|
|
1363
|
+
import { readFile as readFile3 } from "node:fs/promises";
|
|
1074
1364
|
import { parse as dotenv } from "dotenv";
|
|
1075
|
-
import { pathExists as pathExists2 } from "@kosmojs/devlib";
|
|
1076
1365
|
var define_plugin_default = (entries) => {
|
|
1077
1366
|
return {
|
|
1078
1367
|
name: "@kosmojs:definePlugin",
|
|
@@ -1080,8 +1369,8 @@ var define_plugin_default = (entries) => {
|
|
|
1080
1369
|
const define = {};
|
|
1081
1370
|
for (const { keys, file, defineOn = "process.env", use } of entries) {
|
|
1082
1371
|
define[defineOn] = {};
|
|
1083
|
-
const fileExists = file ? await
|
|
1084
|
-
const env = fileExists ? dotenv(await
|
|
1372
|
+
const fileExists = file ? await pathExists(file) : false;
|
|
1373
|
+
const env = fileExists ? dotenv(await readFile3(file, "utf8")) : process.env;
|
|
1085
1374
|
for (const [key, val] of Object.entries(env)) {
|
|
1086
1375
|
if (keys.includes(key)) {
|
|
1087
1376
|
define[`${defineOn}.${key}`] = JSON.stringify(val);
|
|
@@ -1093,11 +1382,56 @@ var define_plugin_default = (entries) => {
|
|
|
1093
1382
|
}
|
|
1094
1383
|
};
|
|
1095
1384
|
};
|
|
1385
|
+
|
|
1386
|
+
// src/typebox.ts
|
|
1387
|
+
var typeboxLiteralText = (text, options) => {
|
|
1388
|
+
return [
|
|
1389
|
+
// Escape backticks for safe use in template literals
|
|
1390
|
+
[/(?<!\\)`/g, "\\`"],
|
|
1391
|
+
// Escape $ for safe use in template literals
|
|
1392
|
+
[/(?<!\\)\$\{/g, "\\${"],
|
|
1393
|
+
/**
|
|
1394
|
+
* TypeBox's built-in `Options` type is not configurable.
|
|
1395
|
+
* To allow a custom type name, exposing `refineTypeName` option,
|
|
1396
|
+
* defaulted to TRefine, then renaming it to `Options`.
|
|
1397
|
+
* */
|
|
1398
|
+
[new RegExp(`\\b${options.refineTypeName}\\s*<`, "g"), "Options<"]
|
|
1399
|
+
].reduce((text2, [a, b]) => text2.replace(a, b), text);
|
|
1400
|
+
};
|
|
1096
1401
|
export {
|
|
1402
|
+
API_INDEX_BASENAME,
|
|
1403
|
+
API_INDEX_PATTERN,
|
|
1404
|
+
API_USE_BASENAME,
|
|
1405
|
+
API_USE_PATTERN,
|
|
1406
|
+
PAGE_INDEX_BASENAME,
|
|
1407
|
+
PAGE_INDEX_PATTERN,
|
|
1408
|
+
PAGE_LAYOUT_BASENAME,
|
|
1409
|
+
PAGE_LAYOUT_PATTERN,
|
|
1097
1410
|
alias_plugin_default as aliasPlugin,
|
|
1098
|
-
|
|
1411
|
+
apiRouteResolverFactory,
|
|
1412
|
+
apiUseResolverFactory,
|
|
1413
|
+
createRouteEntry,
|
|
1414
|
+
createTsconfigPaths,
|
|
1099
1415
|
base_plugin_default as default,
|
|
1416
|
+
defaults,
|
|
1100
1417
|
define_plugin_default as definePlugin,
|
|
1101
|
-
|
|
1418
|
+
isApiRoute,
|
|
1419
|
+
isApiUse,
|
|
1420
|
+
isPageLayout,
|
|
1421
|
+
isPageRoute,
|
|
1422
|
+
isRouteFile,
|
|
1423
|
+
nestedRoutesFactory,
|
|
1424
|
+
pageLayoutResolverFactory,
|
|
1425
|
+
pageRouteResolverFactory,
|
|
1426
|
+
pathResolver,
|
|
1427
|
+
pathTokensFactory,
|
|
1428
|
+
render,
|
|
1429
|
+
renderAsFile,
|
|
1430
|
+
renderFactory,
|
|
1431
|
+
renderToFile,
|
|
1432
|
+
routesFactory,
|
|
1433
|
+
scanRoutes,
|
|
1434
|
+
sortRoutes,
|
|
1435
|
+
typeboxLiteralText
|
|
1102
1436
|
};
|
|
1103
1437
|
//# sourceMappingURL=index.js.map
|