@kosmojs/dev 0.0.8 → 0.0.9
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 +6 -6
- package/pkg/base-plugin/routes.js +359 -196
- package/pkg/base-plugin/routes.js.map +4 -4
- package/pkg/base-plugin/worker.js +272 -208
- package/pkg/base-plugin/worker.js.map +4 -4
- package/pkg/index.js +262 -198
- 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 +23 -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
|
@@ -147,6 +147,11 @@ var api_handler_default = async (options) => {
|
|
|
147
147
|
};
|
|
148
148
|
|
|
149
149
|
// src/base-plugin/routes.ts
|
|
150
|
+
import {
|
|
151
|
+
defaults as defaults3
|
|
152
|
+
} from "@kosmojs/devlib";
|
|
153
|
+
|
|
154
|
+
// src/base-plugin/routes/resolve.ts
|
|
150
155
|
import { dirname as dirname2, join as join2, resolve as resolve4 } from "node:path";
|
|
151
156
|
import crc3 from "crc/crc32";
|
|
152
157
|
import picomatch from "picomatch";
|
|
@@ -428,7 +433,7 @@ var cacheFactory = (route, {
|
|
|
428
433
|
const cacheFile = pathResolver({
|
|
429
434
|
appRoot,
|
|
430
435
|
sourceFolder
|
|
431
|
-
}).resolve("apiLibDir", route.
|
|
436
|
+
}).resolve("apiLibDir", dirname(route.file), "cache.json");
|
|
432
437
|
const getCache = async (opt) => {
|
|
433
438
|
if (await pathExists(cacheFile)) {
|
|
434
439
|
try {
|
|
@@ -509,22 +514,56 @@ var resolved_types_default = "{{#each resolvedTypes}}\nexport type {{name}} = {{
|
|
|
509
514
|
// src/base-plugin/templates/types.hbs
|
|
510
515
|
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
516
|
|
|
512
|
-
// src/base-plugin/routes.ts
|
|
513
|
-
var
|
|
514
|
-
var
|
|
517
|
+
// src/base-plugin/routes/resolve.ts
|
|
518
|
+
var API_INDEX_BASENAME = "index";
|
|
519
|
+
var API_INDEX_PATTERN = `${API_INDEX_BASENAME}.ts`;
|
|
520
|
+
var PAGE_INDEX_BASENAME = "index";
|
|
521
|
+
var PAGE_INDEX_PATTERN = `${PAGE_INDEX_BASENAME}.{tsx,vue}`;
|
|
522
|
+
var PAGE_LAYOUT_BASENAME = "layout";
|
|
523
|
+
var PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue}`;
|
|
515
524
|
var ROUTE_FILE_PATTERNS = [
|
|
525
|
+
// match index files in api dir
|
|
516
526
|
`${defaults2.apiDir}/**/${API_INDEX_PATTERN}`,
|
|
517
|
-
|
|
527
|
+
// match index files in pages dir
|
|
528
|
+
`${defaults2.pagesDir}/**/${PAGE_INDEX_PATTERN}`,
|
|
529
|
+
// match layout files in pages dir
|
|
530
|
+
`${defaults2.pagesDir}/**/${PAGE_LAYOUT_PATTERN}`
|
|
518
531
|
];
|
|
519
|
-
var
|
|
532
|
+
var scanRoutes = async ({
|
|
533
|
+
appRoot,
|
|
534
|
+
sourceFolder
|
|
535
|
+
}) => {
|
|
536
|
+
return glob2(ROUTE_FILE_PATTERNS, {
|
|
537
|
+
cwd: resolve4(appRoot, sourceFolder),
|
|
538
|
+
absolute: true,
|
|
539
|
+
onlyFiles: true,
|
|
540
|
+
followSymbolicLinks: false,
|
|
541
|
+
ignore: [
|
|
542
|
+
// ignore top-level matches, routes resides in folders, even index route
|
|
543
|
+
`${defaults2.apiDir}/${API_INDEX_PATTERN}`,
|
|
544
|
+
`${defaults2.pagesDir}/${PAGE_INDEX_PATTERN}`,
|
|
545
|
+
`${defaults2.pagesDir}/${PAGE_LAYOUT_PATTERN}`
|
|
546
|
+
]
|
|
547
|
+
});
|
|
548
|
+
};
|
|
549
|
+
var isRouteFile = (file, {
|
|
550
|
+
appRoot,
|
|
551
|
+
sourceFolder
|
|
552
|
+
}) => {
|
|
520
553
|
const [_sourceFolder, folder, ...rest] = resolve4(appRoot, file).replace(`${appRoot}/`, "").split("/");
|
|
521
554
|
if (!folder || _sourceFolder !== sourceFolder || rest.length < 2) {
|
|
522
555
|
return;
|
|
523
556
|
}
|
|
524
557
|
return picomatch.isMatch(join2(folder, ...rest), ROUTE_FILE_PATTERNS) ? [folder, rest.join("/")] : void 0;
|
|
525
558
|
};
|
|
526
|
-
var
|
|
527
|
-
|
|
559
|
+
var isPageFile = (file) => {
|
|
560
|
+
return picomatch.matchBase(file, `**/${PAGE_INDEX_PATTERN}`) ? { kind: "index" } : picomatch.matchBase(file, `**/${PAGE_LAYOUT_PATTERN}`) ? { kind: "layout" } : void 0;
|
|
561
|
+
};
|
|
562
|
+
var createRouteEntry = (_file, {
|
|
563
|
+
appRoot,
|
|
564
|
+
sourceFolder
|
|
565
|
+
}) => {
|
|
566
|
+
const resolvedPaths = isRouteFile(_file, { appRoot, sourceFolder });
|
|
528
567
|
if (!resolvedPaths) {
|
|
529
568
|
return;
|
|
530
569
|
}
|
|
@@ -532,22 +571,63 @@ var resolveRouteEntry = (_file, { appRoot, sourceFolder }) => {
|
|
|
532
571
|
const fileFullpath = join2(appRoot, sourceFolder, folder, file);
|
|
533
572
|
const pathTokens = pathTokensFactory(dirname2(file));
|
|
534
573
|
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("_");
|
|
574
|
+
const importFile = file;
|
|
575
|
+
const importName = `${importFile.replace(/\W+/g, "_")}_${crc3(importFile)}`;
|
|
540
576
|
return {
|
|
541
577
|
name,
|
|
542
578
|
folder,
|
|
543
579
|
file,
|
|
544
580
|
fileFullpath,
|
|
545
581
|
pathTokens,
|
|
546
|
-
|
|
582
|
+
importFile,
|
|
547
583
|
importName
|
|
548
584
|
};
|
|
549
585
|
};
|
|
550
|
-
var
|
|
586
|
+
var pageLayoutResolverFactory = () => {
|
|
587
|
+
return (entry) => {
|
|
588
|
+
const { name } = entry;
|
|
589
|
+
const handler = async () => {
|
|
590
|
+
return {
|
|
591
|
+
kind: "pageLayout",
|
|
592
|
+
entry
|
|
593
|
+
};
|
|
594
|
+
};
|
|
595
|
+
return { name, handler };
|
|
596
|
+
};
|
|
597
|
+
};
|
|
598
|
+
var pageRouteResolverFactory = () => {
|
|
599
|
+
return (entry) => {
|
|
600
|
+
const {
|
|
601
|
+
name,
|
|
602
|
+
folder,
|
|
603
|
+
file,
|
|
604
|
+
fileFullpath,
|
|
605
|
+
pathTokens,
|
|
606
|
+
importFile,
|
|
607
|
+
importName
|
|
608
|
+
} = entry;
|
|
609
|
+
const handler = async () => {
|
|
610
|
+
const entry2 = {
|
|
611
|
+
name,
|
|
612
|
+
pathTokens,
|
|
613
|
+
params: {
|
|
614
|
+
schema: pathTokens.flatMap((e) => e.param ? [e.param] : [])
|
|
615
|
+
},
|
|
616
|
+
folder,
|
|
617
|
+
file,
|
|
618
|
+
fileFullpath,
|
|
619
|
+
importFile,
|
|
620
|
+
importName
|
|
621
|
+
};
|
|
622
|
+
return {
|
|
623
|
+
kind: "pageRoute",
|
|
624
|
+
entry: entry2
|
|
625
|
+
};
|
|
626
|
+
};
|
|
627
|
+
return { name, handler };
|
|
628
|
+
};
|
|
629
|
+
};
|
|
630
|
+
var apiRouteResolverFactory = (pluginOptions) => {
|
|
551
631
|
const {
|
|
552
632
|
appRoot,
|
|
553
633
|
sourceFolder,
|
|
@@ -567,198 +647,182 @@ var routes_default = async (pluginOptions) => {
|
|
|
567
647
|
getSourceFile,
|
|
568
648
|
refreshSourceFile
|
|
569
649
|
} = 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
|
-
|
|
650
|
+
return (entry) => {
|
|
651
|
+
const {
|
|
652
|
+
name,
|
|
653
|
+
file,
|
|
654
|
+
folder,
|
|
655
|
+
fileFullpath,
|
|
656
|
+
pathTokens,
|
|
657
|
+
importFile,
|
|
658
|
+
importName
|
|
659
|
+
} = entry;
|
|
660
|
+
const handler = async (updatedFile) => {
|
|
661
|
+
const paramsSchema = pathTokens.flatMap((e) => {
|
|
662
|
+
return e.param ? [e.param] : [];
|
|
663
|
+
});
|
|
664
|
+
const optionalParams = paramsSchema.length ? !paramsSchema.some((e) => e.isRequired) : true;
|
|
665
|
+
const { getCache, persistCache } = cacheFactory(
|
|
666
|
+
{ file, fileFullpath, importName },
|
|
667
|
+
{
|
|
668
|
+
appRoot,
|
|
669
|
+
sourceFolder,
|
|
670
|
+
extraContext: { resolveTypes }
|
|
671
|
+
}
|
|
672
|
+
);
|
|
673
|
+
let cache = await getCache({ validate: true });
|
|
674
|
+
if (!cache) {
|
|
675
|
+
if (updatedFile === fileFullpath) {
|
|
676
|
+
await refreshSourceFile(fileFullpath);
|
|
677
|
+
}
|
|
678
|
+
const {
|
|
679
|
+
typeDeclarations,
|
|
680
|
+
paramsRefinements,
|
|
681
|
+
methods,
|
|
682
|
+
payloadTypes,
|
|
683
|
+
responseTypes,
|
|
684
|
+
referencedFiles = []
|
|
685
|
+
} = await resolveRouteSignature(
|
|
686
|
+
{ importName, fileFullpath, optionalParams },
|
|
593
687
|
{
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
688
|
+
withReferencedFiles: true,
|
|
689
|
+
sourceFile: getSourceFile(fileFullpath),
|
|
690
|
+
relpathResolver(path) {
|
|
691
|
+
return join2(sourceFolder, defaults2.apiDir, dirname2(file), path);
|
|
692
|
+
}
|
|
597
693
|
}
|
|
598
694
|
);
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
695
|
+
const numericParams = paramsRefinements ? paramsRefinements.flatMap(({ text, index }) => {
|
|
696
|
+
if (text === "number") {
|
|
697
|
+
const param = paramsSchema.at(index);
|
|
698
|
+
return param ? [param.name] : [];
|
|
603
699
|
}
|
|
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
|
|
700
|
+
return [];
|
|
701
|
+
}) : [];
|
|
702
|
+
const typesFile = pathResolver2({ appRoot, sourceFolder }).resolve(
|
|
703
|
+
"apiLibDir",
|
|
704
|
+
dirname2(file),
|
|
705
|
+
"types.ts"
|
|
706
|
+
);
|
|
707
|
+
const params = {
|
|
708
|
+
id: ["ParamsT", crc3(name)].join(""),
|
|
709
|
+
schema: paramsSchema,
|
|
710
|
+
resolvedType: void 0
|
|
716
711
|
};
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
712
|
+
const typesFileContent = render(types_default, {
|
|
713
|
+
params,
|
|
714
|
+
paramsSchema: paramsSchema.map((param, index) => {
|
|
715
|
+
return {
|
|
716
|
+
...param,
|
|
717
|
+
refinement: paramsRefinements?.at(index)
|
|
718
|
+
};
|
|
719
|
+
}),
|
|
720
|
+
typeDeclarations,
|
|
721
|
+
payloadTypes,
|
|
722
|
+
responseTypes
|
|
723
|
+
});
|
|
724
|
+
const resolvedTypes = resolveTypes ? literalTypesResolver(typesFileContent, {
|
|
725
|
+
overrides: [...payloadTypes, ...responseTypes].reduce(
|
|
726
|
+
(map, { id, skipValidation }) => {
|
|
727
|
+
if (skipValidation) {
|
|
728
|
+
map[id] = "never";
|
|
729
|
+
}
|
|
730
|
+
return map;
|
|
731
|
+
},
|
|
732
|
+
{ [refineTypeName]: refineTypeName }
|
|
733
|
+
),
|
|
734
|
+
withProperties: [params.id, ...payloadTypes.map((e) => e.id)],
|
|
735
|
+
formatters
|
|
736
|
+
}) : void 0;
|
|
737
|
+
await renderToFile(
|
|
738
|
+
typesFile,
|
|
739
|
+
resolvedTypes ? resolved_types_default : typesFileContent,
|
|
740
|
+
{ resolvedTypes }
|
|
741
|
+
);
|
|
742
|
+
params.resolvedType = resolvedTypes?.find((e) => e.name === params.id);
|
|
743
|
+
cache = await persistCache({
|
|
744
|
+
params,
|
|
745
|
+
methods,
|
|
746
|
+
typeDeclarations,
|
|
747
|
+
numericParams,
|
|
748
|
+
// text was needed at writing types.ts file, dropping from cache
|
|
749
|
+
payloadTypes: payloadTypes.map(({ text, ...rest }) => {
|
|
750
|
+
return {
|
|
751
|
+
...rest,
|
|
752
|
+
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
753
|
+
};
|
|
754
|
+
}),
|
|
755
|
+
responseTypes: responseTypes.map(({ text, ...rest }) => {
|
|
756
|
+
return {
|
|
757
|
+
...rest,
|
|
758
|
+
resolvedType: resolvedTypes?.find((e) => e.name === rest.id)
|
|
759
|
+
};
|
|
760
|
+
}),
|
|
761
|
+
referencedFiles
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
const entry2 = {
|
|
723
765
|
name,
|
|
766
|
+
pathTokens,
|
|
767
|
+
params: cache.params,
|
|
768
|
+
numericParams: cache.numericParams,
|
|
769
|
+
optionalParams,
|
|
770
|
+
importName,
|
|
771
|
+
importFile,
|
|
724
772
|
folder,
|
|
725
773
|
file,
|
|
726
774
|
fileFullpath,
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
schema: pathTokens.flatMap((e) => e.param ? [e.param] : [])
|
|
737
|
-
},
|
|
738
|
-
folder,
|
|
739
|
-
file,
|
|
740
|
-
fileFullpath,
|
|
741
|
-
importPath,
|
|
742
|
-
importName
|
|
743
|
-
};
|
|
744
|
-
return {
|
|
745
|
-
kind: "page",
|
|
746
|
-
route
|
|
747
|
-
};
|
|
775
|
+
methods: cache.methods,
|
|
776
|
+
typeDeclarations: cache.typeDeclarations,
|
|
777
|
+
payloadTypes: cache.payloadTypes,
|
|
778
|
+
responseTypes: cache.responseTypes,
|
|
779
|
+
referencedFiles: Object.keys(cache.referencedFiles).map(
|
|
780
|
+
// expand referenced files path,
|
|
781
|
+
// they are stored as relative in cache
|
|
782
|
+
(e) => resolve4(appRoot, e)
|
|
783
|
+
)
|
|
748
784
|
};
|
|
749
|
-
|
|
785
|
+
return {
|
|
786
|
+
kind: "apiRoute",
|
|
787
|
+
entry: entry2
|
|
788
|
+
};
|
|
789
|
+
};
|
|
790
|
+
return { name, handler };
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
|
|
794
|
+
// src/base-plugin/routes/nesting.ts
|
|
795
|
+
import {
|
|
796
|
+
sortRoutes
|
|
797
|
+
} from "@kosmojs/devlib";
|
|
798
|
+
|
|
799
|
+
// src/base-plugin/routes.ts
|
|
800
|
+
var routes_default = async (pluginOptions) => {
|
|
801
|
+
const { appRoot, sourceFolder } = pluginOptions;
|
|
802
|
+
const apiRouteResolver = apiRouteResolverFactory(pluginOptions);
|
|
803
|
+
const pageRouteResolver = pageRouteResolverFactory(pluginOptions);
|
|
804
|
+
const pageLayoutResolver = pageLayoutResolverFactory(pluginOptions);
|
|
805
|
+
const resolversFactory = (routeFiles2) => {
|
|
806
|
+
const resolvers = /* @__PURE__ */ new Map();
|
|
807
|
+
const entries = routeFiles2.flatMap((file) => {
|
|
808
|
+
const entry = createRouteEntry(file, pluginOptions);
|
|
809
|
+
return entry ? [entry] : [];
|
|
810
|
+
});
|
|
811
|
+
for (const entry of entries) {
|
|
812
|
+
if (entry.folder === defaults3.apiDir) {
|
|
813
|
+
resolvers.set(entry.fileFullpath, apiRouteResolver(entry));
|
|
814
|
+
} else if (entry.folder === defaults3.pagesDir) {
|
|
815
|
+
const pageFile = isPageFile(entry.file);
|
|
816
|
+
if (pageFile?.kind === "index") {
|
|
817
|
+
resolvers.set(entry.fileFullpath, pageRouteResolver(entry));
|
|
818
|
+
} else if (pageFile?.kind === "layout") {
|
|
819
|
+
resolvers.set(entry.fileFullpath, pageLayoutResolver(entry));
|
|
820
|
+
}
|
|
821
|
+
}
|
|
750
822
|
}
|
|
751
823
|
return resolvers;
|
|
752
824
|
};
|
|
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
|
-
});
|
|
825
|
+
const routeFiles = await scanRoutes({ appRoot, sourceFolder });
|
|
762
826
|
return {
|
|
763
827
|
resolvers: resolversFactory(routeFiles),
|
|
764
828
|
resolversFactory
|
|
@@ -934,14 +998,14 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
934
998
|
}
|
|
935
999
|
if (store.config.command === "build") {
|
|
936
1000
|
const { resolvers } = await routes_default(store.resolvedOptions);
|
|
937
|
-
const
|
|
1001
|
+
const resolvedEntries = [];
|
|
938
1002
|
{
|
|
939
1003
|
const spinner = spinnerFactory("Resolving Routes");
|
|
940
1004
|
for (const { name, handler } of resolvers.values()) {
|
|
941
1005
|
spinner.append(
|
|
942
|
-
`[ ${
|
|
1006
|
+
`[ ${resolvedEntries.length + 1} of ${resolvers.size} ] ${name}`
|
|
943
1007
|
);
|
|
944
|
-
|
|
1008
|
+
resolvedEntries.push(await handler());
|
|
945
1009
|
}
|
|
946
1010
|
spinner.succeed();
|
|
947
1011
|
}
|
|
@@ -950,7 +1014,7 @@ var base_plugin_default = (apiurl, pluginOptions) => {
|
|
|
950
1014
|
for (const { name, factory } of store.resolvedOptions.generators) {
|
|
951
1015
|
spinner.append(name);
|
|
952
1016
|
const { watchHandler } = await factory(store.resolvedOptions);
|
|
953
|
-
await watchHandler(
|
|
1017
|
+
await watchHandler(resolvedEntries);
|
|
954
1018
|
}
|
|
955
1019
|
spinner.succeed();
|
|
956
1020
|
}
|