@kosmojs/dev 0.0.8 → 0.0.10
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 +16 -19
- package/pkg/base-plugin/routes.js +391 -196
- package/pkg/base-plugin/routes.js.map +4 -4
- package/pkg/base-plugin/worker.js +302 -208
- package/pkg/base-plugin/worker.js.map +4 -4
- package/pkg/cli/cli.js +1 -4
- package/pkg/cli/cli.js.map +2 -2
- package/pkg/cli/index.js +1 -6
- package/pkg/cli/index.js.map +2 -2
- package/pkg/cli/templates/@src/api/router.hbs +2 -2
- package/pkg/index.js +294 -201
- package/pkg/index.js.map +4 -4
- package/pkg/src/base-plugin/cache.d.ts +1 -1
- package/pkg/src/base-plugin/routes/nesting.d.ts +5 -0
- package/pkg/src/base-plugin/routes/resolve.d.ts +26 -0
- package/pkg/src/base-plugin/routes.d.ts +6 -12
- package/pkg/stub-generator/index.js +5 -4
- package/pkg/stub-generator/index.js.map +2 -2
- package/pkg/test/@fixtures/app/@src/pages/about/careers/[jobId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/about/careers/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/about/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/about/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/about/team/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/account/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/account/profile/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/resources/[[type]]/[...path]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/resources/[[type]]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/resources/[[type]]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/resources/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/resources/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/settings/general/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/settings/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/settings/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/settings/permissions/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/users/[userId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/users/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/[tenant]/users/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/admin/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/[[category]]/[[tag]]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/[[category]]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/post/[slug]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/blog/post/[slug]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/contact/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/contact/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/courses/[courseId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/courses/[courseId]/lessons/[[lessonId]]/assignments/[...assignmentPath]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/[view]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/analytics/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/billing/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/notifications/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/profile/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/security/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/dashboard/settings/security/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/docs/[...path]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/docs/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/docs/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/files/[...filePath]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/files/[...filePath]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/legal/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/legal/privacy/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/legal/terms/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/news/[category]/articles/[...articlePath]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/news/[category]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/[clientId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/[clientId]/reports/[reportType]/data/[dataView]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/[clientId]/reports/[reportType]/data/[dataView]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/[clientId]/reports/[reportType]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/[clientId]/reports/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/portal/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/products/[id]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/products/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/profile/[username]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/profile/[username]/posts/[postId]/comments/[...thread]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/profile/[username]/posts/[postId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/files/[...path]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/files/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/files/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/[taskId]/comments/[commentId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/[taskId]/comments/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/[taskId]/comments/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/[taskId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/[taskId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/tasks/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/team/[userId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/team/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/[projectId]/team/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/projects/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/properties/[[city]]/filters/[...filters]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/properties/filters/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/properties/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/search/[[query]]/[[page]]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/search/[[query]]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/search/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/[category]/[productId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/[category]/[productId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/cart/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/checkout/confirm/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/checkout/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/checkout/payment/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/checkout/shipping/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/checkout/shipping/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/orders/[orderId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/orders/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/orders/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/product/[id]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/product/[id]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/product/[id]/reviews/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/products/[[category]]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/products/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/shop/products/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/signup/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/store/[category]/filters/[...filters]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/store/[category]/sort/[sortBy]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/store/[category]/sort/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/store/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/followers/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/following/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/posts/[postId]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/posts/[postId]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/posts/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/[username]/posts/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/users/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/analytics/[range]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/analytics/[range]/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/analytics/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/analytics/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/team/[memberId]/permissions/[...permissionPath]/index.d.ts +0 -0
- package/pkg/test/@fixtures/app/@src/pages/workspace/[workspaceId]/team/layout.d.ts +0 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/articles/[...path]/index.ts/types.d.ts +3 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/books/[category]/[[author]]/index.ts/types.d.ts +4 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/books/[category]/index.ts/types.d.ts +3 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/books/index.ts/types.d.ts +1 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/files/[[folder]]/[[id]].json/index.ts/types.d.ts +4 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/files/[[folder]]/index.ts/types.d.ts +3 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/index/index.ts/types.d.ts +1 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/pages/[...path].html/index.ts/types.d.ts +3 -0
- package/pkg/test/@fixtures/app/lib/@src/{api}/users/[id].json/index.ts/types.d.ts +3 -0
- package/pkg/test/routes/base.d.ts +4 -0
- package/pkg/test/routes/nesting.test.d.ts +1 -0
package/pkg/index.js
CHANGED
|
@@ -88,7 +88,6 @@ var api_handler_default = async (options) => {
|
|
|
88
88
|
let devMiddlewareFactory;
|
|
89
89
|
let teardownHandler;
|
|
90
90
|
const watcher = async () => {
|
|
91
|
-
const outfile = join(outDir, "dev.js");
|
|
92
91
|
const rebuildPlugin = {
|
|
93
92
|
name: "rebuild",
|
|
94
93
|
setup(build) {
|
|
@@ -97,7 +96,7 @@ var api_handler_default = async (options) => {
|
|
|
97
96
|
await teardownHandler?.(app);
|
|
98
97
|
}
|
|
99
98
|
try {
|
|
100
|
-
const exports = await import(
|
|
99
|
+
const exports = await import(`${outDir}/app.js?${Date.now()}`);
|
|
101
100
|
devMiddlewareFactory = exports.devMiddlewareFactory;
|
|
102
101
|
teardownHandler = exports.teardownHandler;
|
|
103
102
|
app = await exports.default();
|
|
@@ -115,7 +114,7 @@ var api_handler_default = async (options) => {
|
|
|
115
114
|
bundle: true,
|
|
116
115
|
entryPoints: [join(apiDir, "app.ts")],
|
|
117
116
|
plugins: [rebuildPlugin],
|
|
118
|
-
|
|
117
|
+
outdir: outDir
|
|
119
118
|
});
|
|
120
119
|
return {
|
|
121
120
|
async start() {
|
|
@@ -147,6 +146,11 @@ var api_handler_default = async (options) => {
|
|
|
147
146
|
};
|
|
148
147
|
|
|
149
148
|
// src/base-plugin/routes.ts
|
|
149
|
+
import {
|
|
150
|
+
defaults as defaults3
|
|
151
|
+
} from "@kosmojs/devlib";
|
|
152
|
+
|
|
153
|
+
// src/base-plugin/routes/resolve.ts
|
|
150
154
|
import { dirname as dirname2, join as join2, resolve as resolve4 } from "node:path";
|
|
151
155
|
import crc3 from "crc/crc32";
|
|
152
156
|
import picomatch from "picomatch";
|
|
@@ -428,7 +432,7 @@ var cacheFactory = (route, {
|
|
|
428
432
|
const cacheFile = pathResolver({
|
|
429
433
|
appRoot,
|
|
430
434
|
sourceFolder
|
|
431
|
-
}).resolve("apiLibDir", route.
|
|
435
|
+
}).resolve("apiLibDir", dirname(route.file), "cache.json");
|
|
432
436
|
const getCache = async (opt) => {
|
|
433
437
|
if (await pathExists(cacheFile)) {
|
|
434
438
|
try {
|
|
@@ -509,22 +513,70 @@ var resolved_types_default = "{{#each resolvedTypes}}\nexport type {{name}} = {{
|
|
|
509
513
|
// src/base-plugin/templates/types.hbs
|
|
510
514
|
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';
|
|
511
515
|
|
|
512
|
-
// src/base-plugin/routes.ts
|
|
513
|
-
var
|
|
514
|
-
var
|
|
516
|
+
// src/base-plugin/routes/resolve.ts
|
|
517
|
+
var API_INDEX_BASENAME = "index";
|
|
518
|
+
var API_INDEX_PATTERN = `${API_INDEX_BASENAME}.ts`;
|
|
519
|
+
var API_USE_BASENAME = "use";
|
|
520
|
+
var API_USE_PATTERN = `${API_USE_BASENAME}.ts`;
|
|
521
|
+
var PAGE_INDEX_BASENAME = "index";
|
|
522
|
+
var PAGE_INDEX_PATTERN = `${PAGE_INDEX_BASENAME}.{tsx,vue}`;
|
|
523
|
+
var PAGE_LAYOUT_BASENAME = "layout";
|
|
524
|
+
var PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue}`;
|
|
515
525
|
var ROUTE_FILE_PATTERNS = [
|
|
526
|
+
// match index files in api dir
|
|
516
527
|
`${defaults2.apiDir}/**/${API_INDEX_PATTERN}`,
|
|
517
|
-
|
|
528
|
+
// match use files in api dir
|
|
529
|
+
`${defaults2.apiDir}/**/${API_USE_PATTERN}`,
|
|
530
|
+
// match index files in pages dir
|
|
531
|
+
`${defaults2.pagesDir}/**/${PAGE_INDEX_PATTERN}`,
|
|
532
|
+
// match layout files in pages dir
|
|
533
|
+
`${defaults2.pagesDir}/**/${PAGE_LAYOUT_PATTERN}`
|
|
518
534
|
];
|
|
519
|
-
var
|
|
535
|
+
var scanRoutes = async ({
|
|
536
|
+
appRoot,
|
|
537
|
+
sourceFolder
|
|
538
|
+
}) => {
|
|
539
|
+
return glob2(ROUTE_FILE_PATTERNS, {
|
|
540
|
+
cwd: resolve4(appRoot, sourceFolder),
|
|
541
|
+
absolute: true,
|
|
542
|
+
onlyFiles: true,
|
|
543
|
+
followSymbolicLinks: false,
|
|
544
|
+
ignore: [
|
|
545
|
+
// ignore top-level matches, routes resides in folders, even index route
|
|
546
|
+
`${defaults2.apiDir}/${API_INDEX_PATTERN}`,
|
|
547
|
+
`${defaults2.apiDir}/${API_USE_PATTERN}`,
|
|
548
|
+
`${defaults2.pagesDir}/${PAGE_INDEX_PATTERN}`,
|
|
549
|
+
`${defaults2.pagesDir}/${PAGE_LAYOUT_PATTERN}`
|
|
550
|
+
]
|
|
551
|
+
});
|
|
552
|
+
};
|
|
553
|
+
var isRouteFile = (file, {
|
|
554
|
+
appRoot,
|
|
555
|
+
sourceFolder
|
|
556
|
+
}) => {
|
|
520
557
|
const [_sourceFolder, folder, ...rest] = resolve4(appRoot, file).replace(`${appRoot}/`, "").split("/");
|
|
521
558
|
if (!folder || _sourceFolder !== sourceFolder || rest.length < 2) {
|
|
522
559
|
return;
|
|
523
560
|
}
|
|
524
561
|
return picomatch.isMatch(join2(folder, ...rest), ROUTE_FILE_PATTERNS) ? [folder, rest.join("/")] : void 0;
|
|
525
562
|
};
|
|
526
|
-
var
|
|
527
|
-
|
|
563
|
+
var isApiRoute = (file) => {
|
|
564
|
+
return picomatch.matchBase(file, `**/${API_INDEX_PATTERN}`);
|
|
565
|
+
};
|
|
566
|
+
var isApiUse = (file) => {
|
|
567
|
+
return picomatch.matchBase(file, `**/${API_USE_PATTERN}`);
|
|
568
|
+
};
|
|
569
|
+
var isPageRoute = (file) => {
|
|
570
|
+
return picomatch.matchBase(file, `**/${PAGE_INDEX_PATTERN}`);
|
|
571
|
+
};
|
|
572
|
+
var isPageLayout = (file) => {
|
|
573
|
+
return picomatch.matchBase(file, `**/${PAGE_LAYOUT_PATTERN}`);
|
|
574
|
+
};
|
|
575
|
+
var createRouteEntry = (_file, {
|
|
576
|
+
appRoot,
|
|
577
|
+
sourceFolder
|
|
578
|
+
}) => {
|
|
579
|
+
const resolvedPaths = isRouteFile(_file, { appRoot, sourceFolder });
|
|
528
580
|
if (!resolvedPaths) {
|
|
529
581
|
return;
|
|
530
582
|
}
|
|
@@ -532,22 +584,75 @@ var resolveRouteEntry = (_file, { appRoot, sourceFolder }) => {
|
|
|
532
584
|
const fileFullpath = join2(appRoot, sourceFolder, folder, file);
|
|
533
585
|
const pathTokens = pathTokensFactory(dirname2(file));
|
|
534
586
|
const name = pathTokens.map((e) => e.orig).join("/");
|
|
535
|
-
const
|
|
536
|
-
const importName =
|
|
537
|
-
importPath.split(/\[/)[0].replace(/^\W+|\W+$/g, "").replace(/\W+/g, "_"),
|
|
538
|
-
crc3(importPath)
|
|
539
|
-
].join("_");
|
|
587
|
+
const importFile = file;
|
|
588
|
+
const importName = `${importFile.replace(/\W+/g, "_")}_${crc3(importFile)}`;
|
|
540
589
|
return {
|
|
541
590
|
name,
|
|
542
591
|
folder,
|
|
543
592
|
file,
|
|
544
593
|
fileFullpath,
|
|
545
594
|
pathTokens,
|
|
546
|
-
|
|
595
|
+
importFile,
|
|
547
596
|
importName
|
|
548
597
|
};
|
|
549
598
|
};
|
|
550
|
-
var
|
|
599
|
+
var pageLayoutResolverFactory = () => {
|
|
600
|
+
return (entry) => {
|
|
601
|
+
const { name } = entry;
|
|
602
|
+
const handler = async () => {
|
|
603
|
+
return {
|
|
604
|
+
kind: "pageLayout",
|
|
605
|
+
entry
|
|
606
|
+
};
|
|
607
|
+
};
|
|
608
|
+
return { name, handler };
|
|
609
|
+
};
|
|
610
|
+
};
|
|
611
|
+
var pageRouteResolverFactory = () => {
|
|
612
|
+
return (entry) => {
|
|
613
|
+
const {
|
|
614
|
+
name,
|
|
615
|
+
folder,
|
|
616
|
+
file,
|
|
617
|
+
fileFullpath,
|
|
618
|
+
pathTokens,
|
|
619
|
+
importFile,
|
|
620
|
+
importName
|
|
621
|
+
} = entry;
|
|
622
|
+
const handler = async () => {
|
|
623
|
+
const entry2 = {
|
|
624
|
+
name,
|
|
625
|
+
pathTokens,
|
|
626
|
+
params: {
|
|
627
|
+
schema: pathTokens.flatMap((e) => e.param ? [e.param] : [])
|
|
628
|
+
},
|
|
629
|
+
folder,
|
|
630
|
+
file,
|
|
631
|
+
fileFullpath,
|
|
632
|
+
importFile,
|
|
633
|
+
importName
|
|
634
|
+
};
|
|
635
|
+
return {
|
|
636
|
+
kind: "pageRoute",
|
|
637
|
+
entry: entry2
|
|
638
|
+
};
|
|
639
|
+
};
|
|
640
|
+
return { name, handler };
|
|
641
|
+
};
|
|
642
|
+
};
|
|
643
|
+
var apiUseResolverFactory = () => {
|
|
644
|
+
return (entry) => {
|
|
645
|
+
const { name } = entry;
|
|
646
|
+
const handler = async () => {
|
|
647
|
+
return {
|
|
648
|
+
kind: "apiUse",
|
|
649
|
+
entry
|
|
650
|
+
};
|
|
651
|
+
};
|
|
652
|
+
return { name, handler };
|
|
653
|
+
};
|
|
654
|
+
};
|
|
655
|
+
var apiRouteResolverFactory = (pluginOptions) => {
|
|
551
656
|
const {
|
|
552
657
|
appRoot,
|
|
553
658
|
sourceFolder,
|
|
@@ -567,198 +672,186 @@ var routes_default = async (pluginOptions) => {
|
|
|
567
672
|
getSourceFile,
|
|
568
673
|
refreshSourceFile
|
|
569
674
|
} = typeResolverFactory(pluginOptions);
|
|
570
|
-
|
|
571
|
-
const
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
} =
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
675
|
+
return (entry) => {
|
|
676
|
+
const {
|
|
677
|
+
name,
|
|
678
|
+
file,
|
|
679
|
+
folder,
|
|
680
|
+
fileFullpath,
|
|
681
|
+
pathTokens,
|
|
682
|
+
importFile,
|
|
683
|
+
importName
|
|
684
|
+
} = entry;
|
|
685
|
+
const handler = async (updatedFile) => {
|
|
686
|
+
const paramsSchema = pathTokens.flatMap((e) => {
|
|
687
|
+
return e.param ? [e.param] : [];
|
|
688
|
+
});
|
|
689
|
+
const optionalParams = paramsSchema.length ? !paramsSchema.some((e) => e.isRequired) : true;
|
|
690
|
+
const { getCache, persistCache } = cacheFactory(
|
|
691
|
+
{ file, fileFullpath, importName },
|
|
692
|
+
{
|
|
693
|
+
appRoot,
|
|
694
|
+
sourceFolder,
|
|
695
|
+
extraContext: { resolveTypes }
|
|
696
|
+
}
|
|
697
|
+
);
|
|
698
|
+
let cache = await getCache({ validate: true });
|
|
699
|
+
if (!cache) {
|
|
700
|
+
if (updatedFile === fileFullpath) {
|
|
701
|
+
await refreshSourceFile(fileFullpath);
|
|
702
|
+
}
|
|
703
|
+
const {
|
|
704
|
+
typeDeclarations,
|
|
705
|
+
paramsRefinements,
|
|
706
|
+
methods,
|
|
707
|
+
payloadTypes,
|
|
708
|
+
responseTypes,
|
|
709
|
+
referencedFiles = []
|
|
710
|
+
} = await resolveRouteSignature(
|
|
711
|
+
{ importName, fileFullpath, optionalParams },
|
|
593
712
|
{
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
713
|
+
withReferencedFiles: true,
|
|
714
|
+
sourceFile: getSourceFile(fileFullpath),
|
|
715
|
+
relpathResolver(path) {
|
|
716
|
+
return join2(sourceFolder, defaults2.apiDir, dirname2(file), path);
|
|
717
|
+
}
|
|
597
718
|
}
|
|
598
719
|
);
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
720
|
+
const numericParams = paramsRefinements ? paramsRefinements.flatMap(({ text, index }) => {
|
|
721
|
+
if (text === "number") {
|
|
722
|
+
const param = paramsSchema.at(index);
|
|
723
|
+
return param ? [param.name] : [];
|
|
603
724
|
}
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
sourceFile: getSourceFile(fileFullpath),
|
|
616
|
-
relpathResolver(path) {
|
|
617
|
-
return join2(sourceFolder, defaults2.apiDir, dirname2(file), path);
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
);
|
|
621
|
-
const numericParams = paramsRefinements ? paramsRefinements.flatMap(({ text, index }) => {
|
|
622
|
-
if (text === "number") {
|
|
623
|
-
const param = paramsSchema.at(index);
|
|
624
|
-
return param ? [param.name] : [];
|
|
625
|
-
}
|
|
626
|
-
return [];
|
|
627
|
-
}) : [];
|
|
628
|
-
const typesFile = pathResolver2({ appRoot, sourceFolder }).resolve(
|
|
629
|
-
"apiLibDir",
|
|
630
|
-
importPath,
|
|
631
|
-
"types.ts"
|
|
632
|
-
);
|
|
633
|
-
const params = {
|
|
634
|
-
id: ["ParamsT", crc3(name)].join(""),
|
|
635
|
-
schema: paramsSchema,
|
|
636
|
-
resolvedType: void 0
|
|
637
|
-
};
|
|
638
|
-
const typesFileContent = render(types_default, {
|
|
639
|
-
params,
|
|
640
|
-
paramsSchema: paramsSchema.map((param, index) => {
|
|
641
|
-
return {
|
|
642
|
-
...param,
|
|
643
|
-
refinement: paramsRefinements?.at(index)
|
|
644
|
-
};
|
|
645
|
-
}),
|
|
646
|
-
typeDeclarations,
|
|
647
|
-
payloadTypes,
|
|
648
|
-
responseTypes
|
|
649
|
-
});
|
|
650
|
-
const resolvedTypes = resolveTypes ? literalTypesResolver(typesFileContent, {
|
|
651
|
-
overrides: [...payloadTypes, ...responseTypes].reduce(
|
|
652
|
-
(map, { id, skipValidation }) => {
|
|
653
|
-
if (skipValidation) {
|
|
654
|
-
map[id] = "never";
|
|
655
|
-
}
|
|
656
|
-
return map;
|
|
657
|
-
},
|
|
658
|
-
{ [refineTypeName]: refineTypeName }
|
|
659
|
-
),
|
|
660
|
-
withProperties: [params.id, ...payloadTypes.map((e) => e.id)],
|
|
661
|
-
formatters
|
|
662
|
-
}) : void 0;
|
|
663
|
-
await renderToFile(
|
|
664
|
-
typesFile,
|
|
665
|
-
resolvedTypes ? resolved_types_default : typesFileContent,
|
|
666
|
-
{ resolvedTypes }
|
|
667
|
-
);
|
|
668
|
-
params.resolvedType = resolvedTypes?.find(
|
|
669
|
-
(e) => e.name === params.id
|
|
670
|
-
);
|
|
671
|
-
cache = await persistCache({
|
|
672
|
-
params,
|
|
673
|
-
methods,
|
|
674
|
-
typeDeclarations,
|
|
675
|
-
numericParams,
|
|
676
|
-
// text was needed at writing types.ts file, dropping from cache
|
|
677
|
-
payloadTypes: payloadTypes.map(({ text, ...rest }) => {
|
|
678
|
-
return {
|
|
679
|
-
...rest,
|
|
680
|
-
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
681
|
-
};
|
|
682
|
-
}),
|
|
683
|
-
responseTypes: responseTypes.map(({ text, ...rest }) => {
|
|
684
|
-
return {
|
|
685
|
-
...rest,
|
|
686
|
-
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
687
|
-
};
|
|
688
|
-
}),
|
|
689
|
-
referencedFiles
|
|
690
|
-
});
|
|
691
|
-
}
|
|
692
|
-
const route = {
|
|
693
|
-
name,
|
|
694
|
-
pathTokens,
|
|
695
|
-
params: cache.params,
|
|
696
|
-
numericParams: cache.numericParams,
|
|
697
|
-
optionalParams,
|
|
698
|
-
importName,
|
|
699
|
-
importPath,
|
|
700
|
-
folder,
|
|
701
|
-
file,
|
|
702
|
-
fileFullpath,
|
|
703
|
-
methods: cache.methods,
|
|
704
|
-
typeDeclarations: cache.typeDeclarations,
|
|
705
|
-
payloadTypes: cache.payloadTypes,
|
|
706
|
-
responseTypes: cache.responseTypes,
|
|
707
|
-
referencedFiles: Object.keys(cache.referencedFiles).map(
|
|
708
|
-
// expand referenced files path,
|
|
709
|
-
// they are stored as relative in cache
|
|
710
|
-
(e) => resolve4(appRoot, e)
|
|
711
|
-
)
|
|
712
|
-
};
|
|
713
|
-
return {
|
|
714
|
-
kind: "api",
|
|
715
|
-
route
|
|
725
|
+
return [];
|
|
726
|
+
}) : [];
|
|
727
|
+
const typesFile = pathResolver2({ appRoot, sourceFolder }).resolve(
|
|
728
|
+
"apiLibDir",
|
|
729
|
+
dirname2(file),
|
|
730
|
+
"types.ts"
|
|
731
|
+
);
|
|
732
|
+
const params = {
|
|
733
|
+
id: ["ParamsT", crc3(name)].join(""),
|
|
734
|
+
schema: paramsSchema,
|
|
735
|
+
resolvedType: void 0
|
|
716
736
|
};
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
737
|
+
const typesFileContent = render(types_default, {
|
|
738
|
+
params,
|
|
739
|
+
paramsSchema: paramsSchema.map((param, index) => {
|
|
740
|
+
return {
|
|
741
|
+
...param,
|
|
742
|
+
refinement: paramsRefinements?.at(index)
|
|
743
|
+
};
|
|
744
|
+
}),
|
|
745
|
+
typeDeclarations,
|
|
746
|
+
payloadTypes,
|
|
747
|
+
responseTypes
|
|
748
|
+
});
|
|
749
|
+
const resolvedTypes = resolveTypes ? literalTypesResolver(typesFileContent, {
|
|
750
|
+
overrides: [...payloadTypes, ...responseTypes].reduce(
|
|
751
|
+
(map, { id, skipValidation }) => {
|
|
752
|
+
if (skipValidation) {
|
|
753
|
+
map[id] = "never";
|
|
754
|
+
}
|
|
755
|
+
return map;
|
|
756
|
+
},
|
|
757
|
+
{ [refineTypeName]: refineTypeName }
|
|
758
|
+
),
|
|
759
|
+
withProperties: [params.id, ...payloadTypes.map((e) => e.id)],
|
|
760
|
+
formatters
|
|
761
|
+
}) : void 0;
|
|
762
|
+
await renderToFile(
|
|
763
|
+
typesFile,
|
|
764
|
+
resolvedTypes ? resolved_types_default : typesFileContent,
|
|
765
|
+
{ resolvedTypes }
|
|
766
|
+
);
|
|
767
|
+
params.resolvedType = resolvedTypes?.find((e) => e.name === params.id);
|
|
768
|
+
cache = await persistCache({
|
|
769
|
+
params,
|
|
770
|
+
methods,
|
|
771
|
+
typeDeclarations,
|
|
772
|
+
numericParams,
|
|
773
|
+
// text was needed at writing types.ts file, dropping from cache
|
|
774
|
+
payloadTypes: payloadTypes.map(({ text, ...rest }) => {
|
|
775
|
+
return {
|
|
776
|
+
...rest,
|
|
777
|
+
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
778
|
+
};
|
|
779
|
+
}),
|
|
780
|
+
responseTypes: responseTypes.map(({ text, ...rest }) => {
|
|
781
|
+
return {
|
|
782
|
+
...rest,
|
|
783
|
+
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
784
|
+
};
|
|
785
|
+
}),
|
|
786
|
+
referencedFiles
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
const entry2 = {
|
|
723
790
|
name,
|
|
791
|
+
pathTokens,
|
|
792
|
+
params: cache.params,
|
|
793
|
+
numericParams: cache.numericParams,
|
|
794
|
+
optionalParams,
|
|
795
|
+
importName,
|
|
796
|
+
importFile,
|
|
724
797
|
folder,
|
|
725
798
|
file,
|
|
726
799
|
fileFullpath,
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
fileFullpath,
|
|
741
|
-
importPath,
|
|
742
|
-
importName
|
|
743
|
-
};
|
|
744
|
-
return {
|
|
745
|
-
kind: "page",
|
|
746
|
-
route
|
|
747
|
-
};
|
|
800
|
+
methods: cache.methods,
|
|
801
|
+
typeDeclarations: cache.typeDeclarations,
|
|
802
|
+
payloadTypes: cache.payloadTypes,
|
|
803
|
+
responseTypes: cache.responseTypes,
|
|
804
|
+
referencedFiles: Object.keys(cache.referencedFiles).map(
|
|
805
|
+
// expand referenced files path,
|
|
806
|
+
// they are stored as relative in cache
|
|
807
|
+
(e) => resolve4(appRoot, e)
|
|
808
|
+
)
|
|
809
|
+
};
|
|
810
|
+
return {
|
|
811
|
+
kind: "apiRoute",
|
|
812
|
+
entry: entry2
|
|
748
813
|
};
|
|
749
|
-
|
|
814
|
+
};
|
|
815
|
+
return { name, handler };
|
|
816
|
+
};
|
|
817
|
+
};
|
|
818
|
+
|
|
819
|
+
// src/base-plugin/routes/nesting.ts
|
|
820
|
+
import {
|
|
821
|
+
sortRoutes
|
|
822
|
+
} from "@kosmojs/devlib";
|
|
823
|
+
|
|
824
|
+
// src/base-plugin/routes.ts
|
|
825
|
+
var routes_default = async (pluginOptions) => {
|
|
826
|
+
const { appRoot, sourceFolder } = pluginOptions;
|
|
827
|
+
const apiRouteResolver = apiRouteResolverFactory(pluginOptions);
|
|
828
|
+
const apiUseResolver = apiUseResolverFactory(pluginOptions);
|
|
829
|
+
const pageRouteResolver = pageRouteResolverFactory(pluginOptions);
|
|
830
|
+
const pageLayoutResolver = pageLayoutResolverFactory(pluginOptions);
|
|
831
|
+
const resolversFactory = (routeFiles2) => {
|
|
832
|
+
const resolvers = /* @__PURE__ */ new Map();
|
|
833
|
+
const entries = routeFiles2.flatMap((file) => {
|
|
834
|
+
const entry = createRouteEntry(file, pluginOptions);
|
|
835
|
+
return entry ? [entry] : [];
|
|
836
|
+
});
|
|
837
|
+
for (const entry of entries) {
|
|
838
|
+
if (entry.folder === defaults3.apiDir) {
|
|
839
|
+
if (isApiRoute(entry.file)) {
|
|
840
|
+
resolvers.set(entry.fileFullpath, apiRouteResolver(entry));
|
|
841
|
+
} else if (isApiUse(entry.file)) {
|
|
842
|
+
resolvers.set(entry.fileFullpath, apiUseResolver(entry));
|
|
843
|
+
}
|
|
844
|
+
} else if (entry.folder === defaults3.pagesDir) {
|
|
845
|
+
if (isPageRoute(entry.file)) {
|
|
846
|
+
resolvers.set(entry.fileFullpath, pageRouteResolver(entry));
|
|
847
|
+
} else if (isPageLayout(entry.file)) {
|
|
848
|
+
resolvers.set(entry.fileFullpath, pageLayoutResolver(entry));
|
|
849
|
+
}
|
|
850
|
+
}
|
|
750
851
|
}
|
|
751
852
|
return resolvers;
|
|
752
853
|
};
|
|
753
|
-
const routeFiles = await
|
|
754
|
-
cwd: resolve4(appRoot, sourceFolder),
|
|
755
|
-
absolute: true,
|
|
756
|
-
onlyFiles: true,
|
|
757
|
-
ignore: [
|
|
758
|
-
`${defaults2.apiDir}/${API_INDEX_PATTERN}`,
|
|
759
|
-
`${defaults2.pagesDir}/${PAGE_INDEX_PATTERN}`
|
|
760
|
-
]
|
|
761
|
-
});
|
|
854
|
+
const routeFiles = await scanRoutes({ appRoot, sourceFolder });
|
|
762
855
|
return {
|
|
763
856
|
resolvers: resolversFactory(routeFiles),
|
|
764
857
|
resolversFactory
|
|
@@ -934,14 +1027,14 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
934
1027
|
}
|
|
935
1028
|
if (store.config.command === "build") {
|
|
936
1029
|
const { resolvers } = await routes_default(store.resolvedOptions);
|
|
937
|
-
const
|
|
1030
|
+
const resolvedEntries = [];
|
|
938
1031
|
{
|
|
939
1032
|
const spinner = spinnerFactory("Resolving Routes");
|
|
940
1033
|
for (const { name, handler } of resolvers.values()) {
|
|
941
1034
|
spinner.append(
|
|
942
|
-
`[ ${
|
|
1035
|
+
`[ ${resolvedEntries.length + 1} of ${resolvers.size} ] ${name}`
|
|
943
1036
|
);
|
|
944
|
-
|
|
1037
|
+
resolvedEntries.push(await handler());
|
|
945
1038
|
}
|
|
946
1039
|
spinner.succeed();
|
|
947
1040
|
}
|
|
@@ -950,7 +1043,7 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
950
1043
|
for (const { name, factory } of store.resolvedOptions.generators) {
|
|
951
1044
|
spinner.append(name);
|
|
952
1045
|
const { watchHandler } = await factory(store.resolvedOptions);
|
|
953
|
-
await watchHandler(
|
|
1046
|
+
await watchHandler(resolvedEntries);
|
|
954
1047
|
}
|
|
955
1048
|
spinner.succeed();
|
|
956
1049
|
}
|