@kosmojs/fetch-generator 0.0.0

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 ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@kosmojs/fetch-generator",
4
+ "version": "0.0.0",
5
+ "author": "Slee Woo",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "pkg/*"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./pkg/src/index.d.ts",
16
+ "default": "./pkg/index.js"
17
+ }
18
+ },
19
+ "dependencies": {
20
+ "@kosmojs/devlib": "^0.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "@kosmojs/config": "^0.0.0"
24
+ },
25
+ "scripts": {
26
+ "build": "esbuilder src/index.ts"
27
+ }
28
+ }
package/pkg/index.js ADDED
@@ -0,0 +1,140 @@
1
+ // src/factory.ts
2
+ import { join } from "node:path";
3
+ import {
4
+ defaults,
5
+ pathResolver,
6
+ renderToFile
7
+ } from "@kosmojs/devlib";
8
+
9
+ // src/templates/fetch.hbs
10
+ var fetch_default = 'import useFetch from "@kosmojs/fetch";\n\nimport { baseurl, apiurl } from "{{importPathmap.config}}";\nimport { validationSchemas } from "./schemas";\n\nimport {\n type MaybeWrapped,\n type HostOpt,\n unwrap,\n join,\n stringify,\n createHost,\n} from "{{importPathmap.fetchLib}}";\n\nexport { ValidationError } from "@kosmojs/api";\n\nexport type ParamsT = [\n {{#each route.params.schema}}\n {{#if isRest}}\n ...{{const}}: Array<string | number>\n {{else}}\n {{const}}{{#unless isRequired}}?{{/unless}}: import("./types").{{../route.params.id}}["{{name}}"],\n {{/if}}\n {{/each}}\n];\n\nexport type PayloadT = {\n {{#each route.payloadTypes}}\n {{method}}: import("./types").{{id}};\n {{/each}}\n}\n\nexport type ResponseT = {\n {{#each route.responseTypes}}\n {{method}}: import("./types").{{id}};\n {{/each}}\n}\n\nconst paramsMapper = (params: ParamsT) => {\n return {\n {{#each paramsMapper}}\n "{{name}}": params[{{idx}}],\n {{/each}}\n }\n}\n\nconst pathTokens: Array<[ path: string, param?: { isRest: boolean } ]> = [\n {{#each route.pathTokens}}\n [\n "{{path}}",{{#if param}}\n { isRest: {{#if param.isRest}}true{{else}}false{{/if}} }{{/if}}\n ],\n {{/each}}\n];\n\nconst parametrize = (params: ParamsT) => {\n const paramsClone = structuredClone(params);\n return pathTokens\n .flatMap(([ path, param ]) => {\n if (param?.isRest) {\n return paramsClone;\n }\n if (param) {\n return paramsClone.splice(0, 1);\n }\n return [path];\n })\n .join("/");\n}\n\nconst fetchApi = useFetch(join(baseurl, apiurl), { stringify });\n\n{{#each routeMethods}}\nexport const {{method}} = (\n _params{{#if ../route.optionalParams}}?{{/if}}: MaybeWrapped<ParamsT>,\n {{#if payloadType}}\n _payload{{#if payloadType.isOptional}}?{{/if}}: MaybeWrapped<\n PayloadT["{{method}}"]\n >,\n {{else}}\n _payload?: unknown,\n {{/if}}\n): Promise<\n {{#if responseType}}\n ResponseT["{{method}}"]\n {{else}}\n unknown\n {{/if}}\n> => {\n const [params, payload] = [unwrap(_params || []), unwrap(_payload || {})];\n if (validationSchemas.params) {\n validationSchemas.params.validate(paramsMapper(params as never));\n }\n if (validationSchemas.payload?.{{method}}) {\n validationSchemas.payload.{{method}}.validate(payload);\n }\n return fetchApi.{{method}}(\n parametrize(params as never),\n payload,\n )\n};\n{{/each}}\n\nexport const path = (\n params: ParamsT,\n query?: Record<string, unknown>,\n) => {\n const path = join(\n baseurl,\n {{#if route.base}}"{{route.base}}"{{else}}apiurl{{/if}},\n parametrize(params)\n );\n return query\n ? [ path, stringify(query) ].join("?")\n : path;\n}\n\nexport const href = (\n host: HostOpt,\n params: ParamsT,\n query?: Record<string, unknown>,\n) => createHost(host) + path(params, query);\n\nexport default {\n {{#each routeMethods}}\n {{method}},\n {{/each}}\n path,\n href,\n validationSchemas,\n};\n';
11
+
12
+ // src/templates/index.hbs
13
+ var templates_default = '{{#each routes}}\nimport {{importName}} from "{{importPathmap.fetchApi}}";\n{{/each}}\n\nexport { ValidationError } from "@kosmojs/api";\n\nexport default {\n{{#each routes}} "{{name}}": {{importName}},\n{{#each alias }} "{{this}}": {{../importName}},\n{{/each}}\n{{/each}}\n}\n';
14
+
15
+ // src/templates/lib.hbs
16
+ var lib_default = 'export { stringify } from "@kosmojs/fetch";\n\nexport * from "./unwrap";\n\nexport type HostOpt =\n | string\n | { hostname: string; port?: number; secure?: boolean };\n\nexport const createHost = (host: HostOpt): string => {\n if (typeof host === "string") {\n return host;\n }\n\n if (typeof host === "object") {\n return [\n host.secure ? "https://" : "http://",\n host.hostname,\n host.port ? `:${host.port}` : "",\n ]\n .join("")\n .replace(/\\/+$/, "");\n }\n\n throw new Error(\n "Expected host to be a string or an object similar to { hostname: string; port?: number; secure?: boolean }",\n );\n};\n\nexport const join = (...args: Array<unknown>): string => {\n for (const a of args) {\n if (typeof a === "string" || typeof a === "number") {\n continue;\n }\n throw new Error(\n `The "path" argument must be of type string or number. Received type ${typeof a} (${JSON.stringify(a)})`,\n );\n }\n return args.join("/").replace(/\\/+/g, "/");\n};\n';
17
+
18
+ // src/templates/types.hbs
19
+ var types_default = 'export type PayloadT = {\n {{#each routes}}\n "{{name}}": import("{{importPathmap.fetchApi}}").PayloadT;\n {{/each}}\n}\n\nexport type ResponseT = {\n {{#each routes}}\n "{{name}}": import("{{importPathmap.fetchApi}}").ResponseT;\n {{/each}}\n}\n';
20
+
21
+ // src/templates/unwrap.hbs
22
+ var unwrap_default = "export type MaybeWrapped<T> = T;\nexport const unwrap = <T>(data: T) => data;\n";
23
+
24
+ // src/factory.ts
25
+ var factory = async ({
26
+ appRoot,
27
+ sourceFolder,
28
+ formatters
29
+ }) => {
30
+ const { resolve } = pathResolver({ appRoot, sourceFolder });
31
+ for (const [file, template] of [
32
+ // These files supposed to be replaced by specialized generators,
33
+ // so write them only during initialization.
34
+ ["unwrap.ts", unwrap_default]
35
+ ]) {
36
+ await renderToFile(
37
+ resolve("fetchLibDir", file),
38
+ template,
39
+ {},
40
+ { formatters }
41
+ );
42
+ }
43
+ const generateLibFiles = async (entries) => {
44
+ for (const { kind, route } of entries) {
45
+ if (kind !== "api") {
46
+ continue;
47
+ }
48
+ await renderToFile(
49
+ resolve("apiLibDir", route.importPath, "fetch.ts"),
50
+ fetch_default,
51
+ {
52
+ route,
53
+ routeMethods: route.methods.map((method) => {
54
+ const payloadType = route.payloadTypes.find(
55
+ (e) => e.method === method
56
+ );
57
+ const responseType = route.responseTypes.find(
58
+ (e) => e.method === method
59
+ );
60
+ return {
61
+ method,
62
+ payloadType,
63
+ responseType
64
+ };
65
+ }),
66
+ paramsMapper: route.params.schema.map(({ name }, idx) => ({
67
+ name,
68
+ idx
69
+ })),
70
+ importPathmap: {
71
+ core: join(defaults.appPrefix, defaults.coreDir),
72
+ config: join(sourceFolder, defaults.configDir),
73
+ fetchLib: join(sourceFolder, defaults.fetchLibDir, "lib")
74
+ }
75
+ },
76
+ { formatters }
77
+ );
78
+ }
79
+ };
80
+ const generateIndexFiles = async (entries) => {
81
+ const routes = entries.flatMap(({ kind, route }) => kind === "api" ? [route] : []).sort((a, b) => a.name.localeCompare(b.name));
82
+ for (const [file, template] of [
83
+ ["index.ts", templates_default],
84
+ ["lib.ts", lib_default],
85
+ ["types.ts", types_default]
86
+ ]) {
87
+ await renderToFile(
88
+ resolve("fetchLibDir", file),
89
+ template,
90
+ {
91
+ routes: routes.map((route) => {
92
+ return {
93
+ ...route,
94
+ importPathmap: {
95
+ fetchApi: join(
96
+ sourceFolder,
97
+ defaults.apiLibDir,
98
+ route.importPath,
99
+ "fetch"
100
+ )
101
+ }
102
+ };
103
+ })
104
+ },
105
+ { formatters }
106
+ );
107
+ }
108
+ };
109
+ return {
110
+ async watchHandler(entries, event) {
111
+ if (event) {
112
+ if (event.kind === "update") {
113
+ await generateLibFiles(
114
+ entries.filter(({ kind, route }) => {
115
+ return kind === "api" ? route.fileFullpath === event.file || route.referencedFiles?.includes(event.file) : false;
116
+ })
117
+ );
118
+ }
119
+ } else {
120
+ await generateLibFiles(entries);
121
+ }
122
+ await generateIndexFiles(entries);
123
+ return void 0;
124
+ }
125
+ };
126
+ };
127
+
128
+ // src/index.ts
129
+ var index_default = () => {
130
+ return {
131
+ name: "Fetch",
132
+ moduleImport: import.meta.filename,
133
+ moduleConfig: void 0,
134
+ factory
135
+ };
136
+ };
137
+ export {
138
+ index_default as default
139
+ };
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/factory.ts", "../src/templates/fetch.hbs", "../src/templates/index.hbs", "../src/templates/lib.hbs", "../src/templates/types.hbs", "../src/templates/unwrap.hbs", "../src/index.ts"],
4
+ "sourcesContent": ["import { join } from \"node:path\";\n\nimport {\n defaults,\n type GeneratorFactory,\n pathResolver,\n type RouteResolverEntry,\n renderToFile,\n} from \"@kosmojs/devlib\";\n\nimport fetchTpl from \"./templates/fetch.hbs\";\nimport indexTpl from \"./templates/index.hbs\";\nimport libTpl from \"./templates/lib.hbs\";\nimport typesTpl from \"./templates/types.hbs\";\nimport unwrapTpl from \"./templates/unwrap.hbs\";\n\nexport const factory: GeneratorFactory = async ({\n appRoot,\n sourceFolder,\n formatters,\n}) => {\n const { resolve } = pathResolver({ appRoot, sourceFolder });\n\n for (const [file, template] of [\n // These files supposed to be replaced by specialized generators,\n // so write them only during initialization.\n [\"unwrap.ts\", unwrapTpl],\n ]) {\n await renderToFile(\n resolve(\"fetchLibDir\", file),\n template,\n {},\n { formatters },\n );\n }\n\n const generateLibFiles = async (entries: Array<RouteResolverEntry>) => {\n for (const { kind, route } of entries) {\n if (kind !== \"api\") {\n continue;\n }\n\n await renderToFile(\n resolve(\"apiLibDir\", route.importPath, \"fetch.ts\"),\n fetchTpl,\n {\n route,\n routeMethods: route.methods.map((method) => {\n const payloadType = route.payloadTypes.find(\n (e) => e.method === method,\n );\n const responseType = route.responseTypes.find(\n (e) => e.method === method,\n );\n return {\n method,\n payloadType,\n responseType,\n };\n }),\n paramsMapper: route.params.schema.map(({ name }, idx) => ({\n name,\n idx,\n })),\n importPathmap: {\n core: join(defaults.appPrefix, defaults.coreDir),\n config: join(sourceFolder, defaults.configDir),\n fetchLib: join(sourceFolder, defaults.fetchLibDir, \"lib\"),\n },\n },\n { formatters },\n );\n }\n };\n\n const generateIndexFiles = async (entries: Array<RouteResolverEntry>) => {\n const routes = entries\n .flatMap(({ kind, route }) => (kind === \"api\" ? [route] : []))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n for (const [file, template] of [\n [\"index.ts\", indexTpl],\n [\"lib.ts\", libTpl],\n [\"types.ts\", typesTpl],\n ]) {\n await renderToFile(\n resolve(\"fetchLibDir\", file),\n template,\n {\n routes: routes.map((route) => {\n return {\n ...route,\n importPathmap: {\n fetchApi: join(\n sourceFolder,\n defaults.apiLibDir,\n route.importPath,\n \"fetch\",\n ),\n },\n };\n }),\n },\n { formatters },\n );\n }\n };\n\n return {\n async watchHandler(entries, event) {\n if (event) {\n if (event.kind === \"update\") {\n await generateLibFiles(\n entries.filter(({ kind, route }) => {\n return kind === \"api\"\n ? route.fileFullpath === event.file ||\n route.referencedFiles?.includes(event.file)\n : false;\n }),\n );\n }\n } else {\n // no event means initial call\n await generateLibFiles(entries);\n }\n\n await generateIndexFiles(entries);\n\n return undefined;\n },\n };\n};\n", "import useFetch from \"@kosmojs/fetch\";\n\nimport { baseurl, apiurl } from \"{{importPathmap.config}}\";\nimport { validationSchemas } from \"./schemas\";\n\nimport {\n type MaybeWrapped,\n type HostOpt,\n unwrap,\n join,\n stringify,\n createHost,\n} from \"{{importPathmap.fetchLib}}\";\n\nexport { ValidationError } from \"@kosmojs/api\";\n\nexport type ParamsT = [\n {{#each route.params.schema}}\n {{#if isRest}}\n ...{{const}}: Array<string | number>\n {{else}}\n {{const}}{{#unless isRequired}}?{{/unless}}: import(\"./types\").{{../route.params.id}}[\"{{name}}\"],\n {{/if}}\n {{/each}}\n];\n\nexport type PayloadT = {\n {{#each route.payloadTypes}}\n {{method}}: import(\"./types\").{{id}};\n {{/each}}\n}\n\nexport type ResponseT = {\n {{#each route.responseTypes}}\n {{method}}: import(\"./types\").{{id}};\n {{/each}}\n}\n\nconst paramsMapper = (params: ParamsT) => {\n return {\n {{#each paramsMapper}}\n \"{{name}}\": params[{{idx}}],\n {{/each}}\n }\n}\n\nconst pathTokens: Array<[ path: string, param?: { isRest: boolean } ]> = [\n {{#each route.pathTokens}}\n [\n \"{{path}}\",{{#if param}}\n { isRest: {{#if param.isRest}}true{{else}}false{{/if}} }{{/if}}\n ],\n {{/each}}\n];\n\nconst parametrize = (params: ParamsT) => {\n const paramsClone = structuredClone(params);\n return pathTokens\n .flatMap(([ path, param ]) => {\n if (param?.isRest) {\n return paramsClone;\n }\n if (param) {\n return paramsClone.splice(0, 1);\n }\n return [path];\n })\n .join(\"/\");\n}\n\nconst fetchApi = useFetch(join(baseurl, apiurl), { stringify });\n\n{{#each routeMethods}}\nexport const {{method}} = (\n _params{{#if ../route.optionalParams}}?{{/if}}: MaybeWrapped<ParamsT>,\n {{#if payloadType}}\n _payload{{#if payloadType.isOptional}}?{{/if}}: MaybeWrapped<\n PayloadT[\"{{method}}\"]\n >,\n {{else}}\n _payload?: unknown,\n {{/if}}\n): Promise<\n {{#if responseType}}\n ResponseT[\"{{method}}\"]\n {{else}}\n unknown\n {{/if}}\n> => {\n const [params, payload] = [unwrap(_params || []), unwrap(_payload || {})];\n if (validationSchemas.params) {\n validationSchemas.params.validate(paramsMapper(params as never));\n }\n if (validationSchemas.payload?.{{method}}) {\n validationSchemas.payload.{{method}}.validate(payload);\n }\n return fetchApi.{{method}}(\n parametrize(params as never),\n payload,\n )\n};\n{{/each}}\n\nexport const path = (\n params: ParamsT,\n query?: Record<string, unknown>,\n) => {\n const path = join(\n baseurl,\n {{#if route.base}}\"{{route.base}}\"{{else}}apiurl{{/if}},\n parametrize(params)\n );\n return query\n ? [ path, stringify(query) ].join(\"?\")\n : path;\n}\n\nexport const href = (\n host: HostOpt,\n params: ParamsT,\n query?: Record<string, unknown>,\n) => createHost(host) + path(params, query);\n\nexport default {\n {{#each routeMethods}}\n {{method}},\n {{/each}}\n path,\n href,\n validationSchemas,\n};\n", "{{#each routes}}\nimport {{importName}} from \"{{importPathmap.fetchApi}}\";\n{{/each}}\n\nexport { ValidationError } from \"@kosmojs/api\";\n\nexport default {\n{{#each routes}} \"{{name}}\": {{importName}},\n{{#each alias }} \"{{this}}\": {{../importName}},\n{{/each}}\n{{/each}}\n}\n", "export { stringify } from \"@kosmojs/fetch\";\n\nexport * from \"./unwrap\";\n\nexport type HostOpt =\n | string\n | { hostname: string; port?: number; secure?: boolean };\n\nexport const createHost = (host: HostOpt): string => {\n if (typeof host === \"string\") {\n return host;\n }\n\n if (typeof host === \"object\") {\n return [\n host.secure ? \"https://\" : \"http://\",\n host.hostname,\n host.port ? `:${host.port}` : \"\",\n ]\n .join(\"\")\n .replace(/\\/+$/, \"\");\n }\n\n throw new Error(\n \"Expected host to be a string or an object similar to { hostname: string; port?: number; secure?: boolean }\",\n );\n};\n\nexport const join = (...args: Array<unknown>): string => {\n for (const a of args) {\n if (typeof a === \"string\" || typeof a === \"number\") {\n continue;\n }\n throw new Error(\n `The \"path\" argument must be of type string or number. Received type ${typeof a} (${JSON.stringify(a)})`,\n );\n }\n return args.join(\"/\").replace(/\\/+/g, \"/\");\n};\n", "export type PayloadT = {\n {{#each routes}}\n \"{{name}}\": import(\"{{importPathmap.fetchApi}}\").PayloadT;\n {{/each}}\n}\n\nexport type ResponseT = {\n {{#each routes}}\n \"{{name}}\": import(\"{{importPathmap.fetchApi}}\").ResponseT;\n {{/each}}\n}\n", "export type MaybeWrapped<T> = T;\nexport const unwrap = <T>(data: T) => data;\n", "import type { GeneratorConstructor } from \"@kosmojs/devlib\";\n\nimport { factory } from \"./factory\";\n\nexport default (): GeneratorConstructor => {\n return {\n name: \"Fetch\",\n moduleImport: import.meta.filename,\n moduleConfig: undefined,\n factory,\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import { type GeneratorFactory } from "@kosmojs/devlib";
2
+ export declare const factory: GeneratorFactory;
@@ -0,0 +1,3 @@
1
+ import type { GeneratorConstructor } from "@kosmojs/devlib";
2
+ declare const _default: () => GeneratorConstructor;
3
+ export default _default;