vovk-cli 0.0.1-draft.99 → 0.0.1
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/LICENSE +1 -1
- package/README.md +24 -16
- package/client-templates/jsBase/index.d.ts.ejs +21 -0
- package/client-templates/jsBase/index.js.ejs +18 -0
- package/client-templates/mixins/mixins.d.ts.ejs +64 -0
- package/client-templates/mixins/mixins.json.ejs +1 -0
- package/client-templates/openapiJs/openapi.d.ts.ejs +4 -0
- package/client-templates/openapiJs/openapi.js.ejs +4 -0
- package/client-templates/openapiJson/openapi.json.ejs +1 -0
- package/client-templates/openapiTs/openapi.ts.ejs +4 -0
- package/client-templates/packageJson/package.json.ejs +1 -0
- package/client-templates/readme/README.md.ejs +39 -0
- package/client-templates/schemaJs/schema.d.ts.ejs +10 -0
- package/client-templates/schemaJs/schema.js.ejs +29 -0
- package/client-templates/schemaJson/schema.json.ejs +1 -0
- package/client-templates/schemaTs/schema.ts.ejs +28 -0
- package/client-templates/tsBase/index.ts.ejs +27 -0
- package/dist/bundle/index.d.mts +8 -0
- package/dist/bundle/index.mjs +76 -0
- package/dist/dev/{diffSchema.d.mts → diffSegmentSchema.d.mts} +3 -3
- package/dist/dev/{diffSchema.mjs → diffSegmentSchema.mjs} +1 -1
- package/dist/dev/ensureSchemaFiles.d.mts +1 -1
- package/dist/dev/ensureSchemaFiles.mjs +16 -47
- package/dist/dev/index.d.mts +2 -0
- package/dist/dev/index.mjs +113 -64
- package/dist/dev/logDiffResult.d.mts +2 -2
- package/dist/dev/logDiffResult.mjs +6 -6
- package/dist/dev/writeMetaJson.d.mts +2 -0
- package/dist/dev/writeMetaJson.mjs +19 -0
- package/dist/dev/writeOneSegmentSchemaFile.d.mts +12 -0
- package/dist/dev/{writeOneSchemaFile.mjs → writeOneSegmentSchemaFile.mjs} +11 -8
- package/dist/generate/ensureClient.d.mts +2 -4
- package/dist/generate/ensureClient.mjs +26 -28
- package/dist/generate/generate.d.mts +13 -0
- package/dist/generate/generate.mjs +306 -0
- package/dist/generate/getClientTemplateFiles.d.mts +20 -0
- package/dist/generate/getClientTemplateFiles.mjs +85 -0
- package/dist/generate/getProjectFullSchema.d.mts +9 -0
- package/dist/generate/getProjectFullSchema.mjs +64 -0
- package/dist/generate/getTemplateClientImports.d.mts +18 -0
- package/dist/generate/getTemplateClientImports.mjs +36 -0
- package/dist/generate/index.d.mts +32 -12
- package/dist/generate/index.mjs +177 -85
- package/dist/generate/writeOneClientFile.d.mts +43 -0
- package/dist/generate/writeOneClientFile.mjs +150 -0
- package/dist/getProjectInfo/getConfig/getConfigAbsolutePaths.d.mts +5 -0
- package/dist/getProjectInfo/{getConfigAbsolutePaths.mjs → getConfig/getConfigAbsolutePaths.mjs} +4 -1
- package/dist/getProjectInfo/getConfig/getRelativeSrcRoot.d.mts +3 -0
- package/dist/getProjectInfo/{getRelativeSrcRoot.mjs → getConfig/getRelativeSrcRoot.mjs} +3 -3
- package/dist/getProjectInfo/getConfig/getTemplateDefs.d.mts +25 -0
- package/dist/getProjectInfo/getConfig/getTemplateDefs.mjs +168 -0
- package/dist/getProjectInfo/getConfig/getUserConfig.d.mts +9 -0
- package/dist/getProjectInfo/getConfig/getUserConfig.mjs +143 -0
- package/dist/getProjectInfo/getConfig/index.d.mts +15 -0
- package/dist/getProjectInfo/getConfig/index.mjs +92 -0
- package/dist/getProjectInfo/getMetaSchema.d.mts +4 -0
- package/dist/getProjectInfo/getMetaSchema.mjs +12 -0
- package/dist/getProjectInfo/index.d.mts +12 -16
- package/dist/getProjectInfo/index.mjs +23 -29
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +119 -40
- package/dist/init/checkTSConfigForExperimentalDecorators.d.mts +1 -1
- package/dist/init/checkTSConfigForExperimentalDecorators.mjs +2 -2
- package/dist/init/createConfig.d.mts +5 -3
- package/dist/init/createConfig.mjs +77 -27
- package/dist/init/index.d.mts +2 -2
- package/dist/init/index.mjs +117 -102
- package/dist/init/installDependencies.d.mts +8 -6
- package/dist/init/installDependencies.mjs +7 -5
- package/dist/init/logUpdateDependenciesError.d.mts +6 -6
- package/dist/init/logUpdateDependenciesError.mjs +8 -4
- package/dist/init/updateDependenciesWithoutInstalling.d.mts +2 -2
- package/dist/init/updateDependenciesWithoutInstalling.mjs +41 -11
- package/dist/init/updateNPMScripts.d.mts +6 -1
- package/dist/init/updateNPMScripts.mjs +9 -5
- package/dist/init/updateTypeScriptConfig.d.mts +4 -1
- package/dist/init/updateTypeScriptConfig.mjs +12 -8
- package/dist/new/addClassToSegmentCode.d.mts +1 -1
- package/dist/new/addClassToSegmentCode.mjs +3 -3
- package/dist/new/addCommonTerms.d.mts +1 -1
- package/dist/new/addCommonTerms.mjs +1 -1
- package/dist/new/index.d.mts +2 -1
- package/dist/new/index.mjs +6 -5
- package/dist/new/newModule.d.mts +5 -3
- package/dist/new/newModule.mjs +31 -25
- package/dist/new/newSegment.d.mts +5 -2
- package/dist/new/newSegment.mjs +23 -16
- package/dist/new/render.d.mts +6 -3
- package/dist/new/render.mjs +15 -14
- package/dist/types.d.mts +64 -61
- package/dist/utils/chalkHighlightThing.d.mts +1 -1
- package/dist/utils/chalkHighlightThing.mjs +1 -1
- package/dist/utils/compileJSONSchemaToTypeScriptType.d.mts +5 -0
- package/dist/utils/compileJSONSchemaToTypeScriptType.mjs +9 -0
- package/dist/utils/compileTs.d.mts +12 -0
- package/dist/utils/compileTs.mjs +261 -0
- package/dist/utils/debounceWithArgs.d.mts +1 -2
- package/dist/utils/debounceWithArgs.mjs +2 -1
- package/dist/utils/formatLoggedSegmentName.d.mts +3 -1
- package/dist/utils/formatLoggedSegmentName.mjs +4 -3
- package/dist/utils/generateFnName.d.mts +23 -0
- package/dist/utils/generateFnName.mjs +76 -0
- package/dist/utils/getAvailablePort.d.mts +1 -2
- package/dist/utils/getAvailablePort.mjs +1 -2
- package/dist/utils/getFileSystemEntryType.d.mts +1 -1
- package/dist/utils/getFileSystemEntryType.mjs +1 -1
- package/dist/utils/getLogger.d.mts +1 -1
- package/dist/utils/getLogger.mjs +1 -1
- package/dist/utils/getNPMPackageMetadata.d.mts +1 -1
- package/dist/utils/getNPMPackageMetadata.mjs +1 -1
- package/dist/utils/getPackageJson.d.mts +3 -0
- package/dist/utils/getPackageJson.mjs +23 -0
- package/dist/utils/getPublicModuleNameFromPath.d.mts +4 -0
- package/dist/utils/getPublicModuleNameFromPath.mjs +9 -0
- package/dist/utils/locateSegments.d.mts +12 -0
- package/dist/{locateSegments.mjs → utils/locateSegments.mjs} +14 -7
- package/dist/utils/normalizeOpenAPIMixin.d.mts +15 -0
- package/dist/utils/normalizeOpenAPIMixin.mjs +96 -0
- package/dist/utils/pickSegmentFullSchema.d.mts +3 -0
- package/dist/utils/pickSegmentFullSchema.mjs +15 -0
- package/dist/utils/prettify.d.mts +1 -1
- package/dist/utils/prettify.mjs +1 -1
- package/dist/utils/removeUnlistedDirectories.d.mts +9 -0
- package/dist/utils/removeUnlistedDirectories.mjs +60 -0
- package/dist/utils/resolveAbsoluteModulePath.d.mts +2 -0
- package/dist/utils/resolveAbsoluteModulePath.mjs +32 -0
- package/dist/utils/updateConfigProperty.d.mts +2 -0
- package/dist/utils/updateConfigProperty.mjs +132 -0
- package/module-templates/arktype/controller.ts.ejs +90 -0
- package/module-templates/type/controller.ts.ejs +80 -0
- package/module-templates/type/service.ts.ejs +43 -0
- package/module-templates/valibot/controller.ts.ejs +91 -0
- package/module-templates/zod/controller.ts.ejs +98 -0
- package/package.json +50 -25
- package/client-templates/main/main.cjs.ejs +0 -15
- package/client-templates/main/main.d.cts.ejs +0 -14
- package/client-templates/module/module.d.mts.ejs +0 -14
- package/client-templates/module/module.mjs.ejs +0 -24
- package/client-templates/python/__init__.py +0 -276
- package/client-templates/ts/index.ts.ejs +0 -25
- package/dist/dev/isSchemaEmpty.d.mts +0 -2
- package/dist/dev/isSchemaEmpty.mjs +0 -4
- package/dist/dev/writeOneSchemaFile.d.mts +0 -12
- package/dist/generate/getClientTemplates.d.mts +0 -16
- package/dist/generate/getClientTemplates.mjs +0 -42
- package/dist/getProjectInfo/getConfig.d.mts +0 -11
- package/dist/getProjectInfo/getConfig.mjs +0 -35
- package/dist/getProjectInfo/getConfigAbsolutePaths.d.mts +0 -4
- package/dist/getProjectInfo/getRelativeSrcRoot.d.mts +0 -3
- package/dist/getProjectInfo/getUserConfig.d.mts +0 -9
- package/dist/getProjectInfo/getUserConfig.mjs +0 -27
- package/dist/getProjectInfo/importUncachedModule.d.mts +0 -3
- package/dist/getProjectInfo/importUncachedModule.mjs +0 -40
- package/dist/getProjectInfo/importUncachedModuleWorker.d.mts +0 -1
- package/dist/getProjectInfo/importUncachedModuleWorker.mjs +0 -25
- package/dist/init/getTemplateFilesFromPackage.d.mts +0 -7
- package/dist/init/getTemplateFilesFromPackage.mjs +0 -59
- package/dist/initProgram.d.mts +0 -2
- package/dist/initProgram.mjs +0 -22
- package/dist/locateSegments.d.mts +0 -11
- package/dist/postinstall.d.mts +0 -1
- package/dist/postinstall.mjs +0 -21
- package/templates/controller.ejs +0 -50
- package/templates/service.ejs +0 -27
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { VovkSchema } from 'vovk';
|
|
2
|
-
import { type DiffResult } from './diffSchema.mjs';
|
|
3
|
-
export declare const ROOT_SEGMENT_SCHEMA_NAME = "_root";
|
|
4
|
-
export declare const JSON_DIR_NAME = "json";
|
|
5
|
-
export default function writeOneSchemaFile({ schemaJsonOutAbsolutePath, schema, skipIfExists, }: {
|
|
6
|
-
schemaJsonOutAbsolutePath: string;
|
|
7
|
-
schema: VovkSchema;
|
|
8
|
-
skipIfExists?: boolean;
|
|
9
|
-
}): Promise<{
|
|
10
|
-
isCreated: boolean;
|
|
11
|
-
diffResult: DiffResult | null;
|
|
12
|
-
}>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { VovkStrictConfig } from '../types.mjs';
|
|
2
|
-
interface ClientTemplate {
|
|
3
|
-
templateName: string;
|
|
4
|
-
templatePath: string;
|
|
5
|
-
outPath: string;
|
|
6
|
-
fullSchema?: string | boolean;
|
|
7
|
-
}
|
|
8
|
-
export default function getClientTemplates({ config, cwd, generateFrom, }: {
|
|
9
|
-
config: VovkStrictConfig;
|
|
10
|
-
cwd: string;
|
|
11
|
-
generateFrom?: VovkStrictConfig['generateFrom'];
|
|
12
|
-
}): {
|
|
13
|
-
clientOutDirAbsolutePath: string;
|
|
14
|
-
templateFiles: ClientTemplate[];
|
|
15
|
-
};
|
|
16
|
-
export {};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
export default function getClientTemplates({ config, cwd, generateFrom = [], }) {
|
|
3
|
-
const templatesDir = path.join(import.meta.dirname, '../..', 'client-templates');
|
|
4
|
-
const clientOutDirAbsolutePath = path.resolve(cwd, config.clientOutDir);
|
|
5
|
-
const mapper = (dir) => (name) => ({
|
|
6
|
-
templateName: dir,
|
|
7
|
-
templatePath: path.resolve(templatesDir, dir, name),
|
|
8
|
-
outPath: path.join(clientOutDirAbsolutePath, name.replace('.ejs', '')),
|
|
9
|
-
});
|
|
10
|
-
const builtInTemplatesMap = {
|
|
11
|
-
ts: ['index.ts.ejs'].map(mapper('ts')),
|
|
12
|
-
main: ['main.cjs.ejs', 'main.d.cts.ejs'].map(mapper('main')),
|
|
13
|
-
module: ['module.mjs.ejs', 'module.d.mts.ejs'].map(mapper('module')),
|
|
14
|
-
python: ['__init__.py'].map(mapper('python')),
|
|
15
|
-
};
|
|
16
|
-
const templateFiles = (generateFrom ?? config.generateFrom).reduce((acc, template) => {
|
|
17
|
-
if (typeof template === 'string') {
|
|
18
|
-
if (template in builtInTemplatesMap) {
|
|
19
|
-
return [...acc, ...builtInTemplatesMap[template]];
|
|
20
|
-
}
|
|
21
|
-
return [
|
|
22
|
-
...acc,
|
|
23
|
-
{
|
|
24
|
-
templateName: template,
|
|
25
|
-
templatePath: path.resolve(cwd, template),
|
|
26
|
-
outPath: path.join(clientOutDirAbsolutePath, path.basename(template).replace('.ejs', '')),
|
|
27
|
-
},
|
|
28
|
-
];
|
|
29
|
-
}
|
|
30
|
-
const outDirAbsolutePath = template.outDir ? path.resolve(cwd, template.outDir) : clientOutDirAbsolutePath;
|
|
31
|
-
return [
|
|
32
|
-
...acc,
|
|
33
|
-
{
|
|
34
|
-
templateName: template.templateName ?? template.templatePath,
|
|
35
|
-
templatePath: path.resolve(cwd, template.templatePath),
|
|
36
|
-
outPath: path.join(outDirAbsolutePath, path.basename(template.templatePath).replace('.ejs', '')),
|
|
37
|
-
fullSchema: template.fullSchema,
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
}, []);
|
|
41
|
-
return { clientOutDirAbsolutePath, templateFiles };
|
|
42
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { VovkStrictConfig } from '../types.mjs';
|
|
2
|
-
export default function getConfig({ clientOutDir, cwd }: {
|
|
3
|
-
clientOutDir?: string;
|
|
4
|
-
cwd: string;
|
|
5
|
-
}): Promise<{
|
|
6
|
-
config: VovkStrictConfig;
|
|
7
|
-
srcRoot: string;
|
|
8
|
-
configAbsolutePaths: string[];
|
|
9
|
-
userConfig: import("../types.mjs").VovkConfig | null;
|
|
10
|
-
error: Error | undefined;
|
|
11
|
-
}>;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import getUserConfig from './getUserConfig.mjs';
|
|
2
|
-
import getRelativeSrcRoot from './getRelativeSrcRoot.mjs';
|
|
3
|
-
export default async function getConfig({ clientOutDir, cwd }) {
|
|
4
|
-
const env = process.env;
|
|
5
|
-
const { configAbsolutePaths, error, userConfig } = await getUserConfig({ cwd });
|
|
6
|
-
const conf = userConfig ?? {};
|
|
7
|
-
const srcRoot = await getRelativeSrcRoot({ cwd });
|
|
8
|
-
const validateOnClientImport = env.VOVK_VALIDATE_ON_CLIENT_PATH ?? conf.validateOnClientImport ?? null;
|
|
9
|
-
const fetcherImport = env.VOVK_FETCHER_PATH ?? conf.fetcherImport ?? 'vovk/dist/client/defaultFetcher.js';
|
|
10
|
-
const createRPCImport = env.VOVK_CREATE_RPC_PATH ?? conf.createRPCImport ?? 'vovk/dist/client/createRPC.js';
|
|
11
|
-
const defaultClientTemplates = ['ts', 'module', 'main'];
|
|
12
|
-
const config = {
|
|
13
|
-
modulesDir: env.VOVK_MODULES_DIR ?? conf.modulesDir ?? './' + [srcRoot, 'modules'].filter(Boolean).join('/'),
|
|
14
|
-
validateOnClientImport: typeof validateOnClientImport === 'string' ? [validateOnClientImport] : validateOnClientImport,
|
|
15
|
-
fetcherImport: typeof fetcherImport === 'string' ? [fetcherImport] : fetcherImport,
|
|
16
|
-
createRPCImport: typeof createRPCImport === 'string' ? [createRPCImport] : createRPCImport,
|
|
17
|
-
schemaOutDir: env.VOVK_SCHEMA_OUT_DIR ?? conf.schemaOutDir ?? './.vovk-schema',
|
|
18
|
-
clientOutDir: clientOutDir ?? env.VOVK_CLIENT_OUT_DIR ?? conf.clientOutDir ?? './node_modules/.vovk-client',
|
|
19
|
-
origin: (env.VOVK_ORIGIN ?? conf.origin ?? '').replace(/\/$/, ''), // Remove trailing slash
|
|
20
|
-
rootEntry: env.VOVK_ROOT_ENTRY ?? conf.rootEntry ?? 'api',
|
|
21
|
-
rootSegmentModulesDirName: env.VOVK_ROOT_SEGMENT_MODULES_DIR_NAME ?? conf.rootSegmentModulesDirName ?? '',
|
|
22
|
-
logLevel: env.VOVK_LOG_LEVEL ?? conf.logLevel ?? 'info',
|
|
23
|
-
prettifyClient: (env.VOVK_PRETTIFY_CLIENT ? !!env.VOVK_PRETTIFY_CLIENT : null) ?? conf.prettifyClient ?? false,
|
|
24
|
-
devHttps: (env.VOVK_DEV_HTTPS ? !!env.VOVK_DEV_HTTPS : null) ?? conf.devHttps ?? false,
|
|
25
|
-
generateFrom: typeof conf.generateFrom === 'function'
|
|
26
|
-
? conf.generateFrom(defaultClientTemplates)
|
|
27
|
-
: (conf.generateFrom ?? ['ts', 'module', 'main']),
|
|
28
|
-
templates: {
|
|
29
|
-
service: 'vovk-cli/templates/service.ejs',
|
|
30
|
-
controller: 'vovk-cli/templates/controller.ejs',
|
|
31
|
-
...conf.templates,
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
return { config, srcRoot, configAbsolutePaths, userConfig, error };
|
|
35
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { pathToFileURL } from 'node:url';
|
|
2
|
-
import getConfigAbsolutePaths from './getConfigAbsolutePaths.mjs';
|
|
3
|
-
import importUncachedModule from './importUncachedModule.mjs';
|
|
4
|
-
async function getUserConfig({ cwd, }) {
|
|
5
|
-
const configAbsolutePaths = await getConfigAbsolutePaths({ cwd });
|
|
6
|
-
let userConfig;
|
|
7
|
-
if (!configAbsolutePaths.length) {
|
|
8
|
-
return { userConfig: null, configAbsolutePaths, error: new Error('No config file found') };
|
|
9
|
-
}
|
|
10
|
-
const configPath = configAbsolutePaths[0];
|
|
11
|
-
// TODO explain
|
|
12
|
-
try {
|
|
13
|
-
userConfig = await importUncachedModule(configPath);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
try {
|
|
17
|
-
const cacheBuster = Date.now();
|
|
18
|
-
const configPathUrl = pathToFileURL(configPath).href;
|
|
19
|
-
({ default: userConfig } = (await import(`${configPathUrl}?cache=${cacheBuster}`)));
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
return { userConfig: null, configAbsolutePaths, error: e };
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return { userConfig, configAbsolutePaths };
|
|
26
|
-
}
|
|
27
|
-
export default getUserConfig;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// importUncachedModule.js
|
|
2
|
-
import { Worker } from 'node:worker_threads';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import './importUncachedModuleWorker.mjs'; // required for TS compilation
|
|
6
|
-
function importUncachedModule(modulePath) {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
-
const __dirname = path.dirname(__filename);
|
|
10
|
-
// Resolve the path to the worker script
|
|
11
|
-
const workerPath = path.resolve(__dirname, 'importUncachedModuleWorker.mjs');
|
|
12
|
-
// Initialize the worker thread
|
|
13
|
-
const worker = new Worker(workerPath, {
|
|
14
|
-
workerData: { modulePath },
|
|
15
|
-
});
|
|
16
|
-
// Listen for messages from the worker
|
|
17
|
-
worker.on('message', (d) => {
|
|
18
|
-
const data = d;
|
|
19
|
-
if (data.success) {
|
|
20
|
-
resolve(data.exportDefault);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
reject(new Error(data.error));
|
|
24
|
-
}
|
|
25
|
-
void worker.terminate();
|
|
26
|
-
});
|
|
27
|
-
// Handle errors from the worker
|
|
28
|
-
worker.on('error', (err) => {
|
|
29
|
-
reject(err);
|
|
30
|
-
void worker.terminate();
|
|
31
|
-
});
|
|
32
|
-
// Handle worker exit
|
|
33
|
-
worker.on('exit', (code) => {
|
|
34
|
-
if (code !== 0) {
|
|
35
|
-
reject(new Error(`Worker stopped with exit code ${code}`));
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
export default importUncachedModule;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { parentPort, workerData as wData } from 'node:worker_threads';
|
|
2
|
-
import { pathToFileURL } from 'node:url';
|
|
3
|
-
void (async () => {
|
|
4
|
-
if (!parentPort)
|
|
5
|
-
return;
|
|
6
|
-
const workerData = wData;
|
|
7
|
-
try {
|
|
8
|
-
// Convert the module path to a file URL
|
|
9
|
-
const moduleUrl = pathToFileURL(workerData.modulePath).href;
|
|
10
|
-
// Dynamically import the module
|
|
11
|
-
const importedModule = (await import(moduleUrl));
|
|
12
|
-
// Send the module's exports back to the main thread
|
|
13
|
-
parentPort?.postMessage({
|
|
14
|
-
success: true,
|
|
15
|
-
exportDefault: importedModule.default,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
// Send the error back to the main thread
|
|
20
|
-
parentPort?.postMessage({
|
|
21
|
-
success: false,
|
|
22
|
-
error: error.message,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
})();
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InitOptions } from '../types.mjs';
|
|
2
|
-
/**
|
|
3
|
-
* Retrieves a list of files in the 'templates' folder of an NPM package.
|
|
4
|
-
* @param packageName - The name of the NPM package.
|
|
5
|
-
* @returns A promise that resolves to an array of file paths.
|
|
6
|
-
*/
|
|
7
|
-
export default function getTemplateFilesFromPackage(packageName: string, channel?: InitOptions['channel']): Promise<Record<string, string>>;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'node:stream';
|
|
2
|
-
import { createGunzip } from 'node:zlib';
|
|
3
|
-
import tar from 'tar-stream';
|
|
4
|
-
import getNPMPackageMetadata from '../utils/getNPMPackageMetadata.mjs';
|
|
5
|
-
// Crereated with AI
|
|
6
|
-
/**
|
|
7
|
-
* Retrieves a list of files in the 'templates' folder of an NPM package.
|
|
8
|
-
* @param packageName - The name of the NPM package.
|
|
9
|
-
* @returns A promise that resolves to an array of file paths.
|
|
10
|
-
*/
|
|
11
|
-
export default async function getTemplateFilesFromPackage(packageName, channel = 'latest') {
|
|
12
|
-
const metadata = await getNPMPackageMetadata(packageName);
|
|
13
|
-
const latestVersion = metadata['dist-tags'][channel];
|
|
14
|
-
const tarballUrl = metadata.versions[latestVersion].dist.tarball;
|
|
15
|
-
// Fetch the tarball
|
|
16
|
-
const tarballResponse = await fetch(tarballUrl);
|
|
17
|
-
if (!tarballResponse.ok) {
|
|
18
|
-
throw new Error(`Failed to fetch tarball: ${tarballResponse.statusText}`);
|
|
19
|
-
}
|
|
20
|
-
const tarballArrayBuffer = await tarballResponse.arrayBuffer();
|
|
21
|
-
const tarballBuffer = Buffer.from(tarballArrayBuffer);
|
|
22
|
-
// Extract the tarball in memory and collect template files
|
|
23
|
-
const templateFiles = await extractTemplatesFromTarball(tarballBuffer);
|
|
24
|
-
const entries = templateFiles
|
|
25
|
-
.filter((fileName) => fileName.startsWith('templates/') && !fileName.endsWith('/') && fileName.endsWith('.ejs'))
|
|
26
|
-
.map((fileName) => [fileName.substring('templates/'.length).replace(/\.ejs$/, ''), `${packageName}/${fileName}`]);
|
|
27
|
-
return Object.fromEntries(entries);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Extracts the templates from the tarball buffer.
|
|
31
|
-
* @param tarballBuffer - The tarball data as a Buffer.
|
|
32
|
-
* @returns A promise that resolves to an array of template file paths.
|
|
33
|
-
*/
|
|
34
|
-
function extractTemplatesFromTarball(tarballBuffer) {
|
|
35
|
-
return new Promise((resolve, reject) => {
|
|
36
|
-
const extract = tar.extract();
|
|
37
|
-
const files = [];
|
|
38
|
-
extract.on('entry', (header, stream, next) => {
|
|
39
|
-
const filePath = header.name;
|
|
40
|
-
// Check if the file is in the 'templates' folder
|
|
41
|
-
if (filePath.startsWith('package/templates/')) {
|
|
42
|
-
files.push(filePath.replace('package/', ''));
|
|
43
|
-
}
|
|
44
|
-
stream.on('end', () => next());
|
|
45
|
-
stream.resume();
|
|
46
|
-
});
|
|
47
|
-
extract.on('finish', () => {
|
|
48
|
-
resolve(files);
|
|
49
|
-
});
|
|
50
|
-
extract.on('error', (err) => {
|
|
51
|
-
reject(err);
|
|
52
|
-
});
|
|
53
|
-
// Decompress and extract the tarball buffer
|
|
54
|
-
const gunzip = createGunzip();
|
|
55
|
-
gunzip.on('error', reject);
|
|
56
|
-
const tarballStream = Readable.from(tarballBuffer);
|
|
57
|
-
tarballStream.pipe(gunzip).pipe(extract);
|
|
58
|
-
});
|
|
59
|
-
}
|
package/dist/initProgram.d.mts
DELETED
package/dist/initProgram.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Init } from './init/index.mjs';
|
|
2
|
-
// reused at vovk-init
|
|
3
|
-
export default function initProgram(program) {
|
|
4
|
-
return program
|
|
5
|
-
.argument('[prefix]', 'directory to initialize project in', '.')
|
|
6
|
-
.description('Initialize Vovk.ts project')
|
|
7
|
-
.option('-y, --yes', 'skip all prompts and use default values')
|
|
8
|
-
.option('--log-level <level>', 'set log level', 'info')
|
|
9
|
-
.option('--use-npm', 'use npm as package manager')
|
|
10
|
-
.option('--use-yarn', 'use yarn as package manager')
|
|
11
|
-
.option('--use-pnpm', 'use pnpm as package manager')
|
|
12
|
-
.option('--use-bun', 'use bun as package manager')
|
|
13
|
-
.option('--skip-install', 'skip installing dependencies')
|
|
14
|
-
.option('--update-ts-config', 'update tsconfig.json')
|
|
15
|
-
.option('--update-scripts <mode>', 'update package.json scripts ("implicit" or "explicit")')
|
|
16
|
-
.option('--validation-library <library>', 'validation library to use ("vovk-zod", "vovk-yup", "vovk-dto" or another); set to "none" to skip')
|
|
17
|
-
.option('--validate-on-client', 'path to validateOnClient file')
|
|
18
|
-
.option('--react-query', 'use @tanstack/react-query for data fetching inside components')
|
|
19
|
-
.option('--channel <channel>', 'channel to use for fetching packages', 'latest')
|
|
20
|
-
.option('--dry-run', 'do not write files to disk')
|
|
21
|
-
.action((prefix = '.', options) => new Init().main(prefix, options));
|
|
22
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { VovkConfig } from './types.mjs';
|
|
2
|
-
export type Segment = {
|
|
3
|
-
routeFilePath: string;
|
|
4
|
-
segmentName: string;
|
|
5
|
-
segmentImportPath: string;
|
|
6
|
-
};
|
|
7
|
-
export default function locateSegments({ dir, rootDir, config, }: {
|
|
8
|
-
dir: string;
|
|
9
|
-
rootDir?: string;
|
|
10
|
-
config: Required<VovkConfig> | null;
|
|
11
|
-
}): Promise<Segment[]>;
|
package/dist/postinstall.d.mts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/postinstall.mjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import getFileSystemEntryType from './utils/getFileSystemEntryType.mjs';
|
|
4
|
-
async function postinstall() {
|
|
5
|
-
// TODO: The function doesn't consider client templates, how to do that?
|
|
6
|
-
const vovk = path.join(import.meta.dirname, '../../.vovk-client');
|
|
7
|
-
const js = path.join(vovk, 'compiled.js');
|
|
8
|
-
const ts = path.join(vovk, 'compiled.d.ts');
|
|
9
|
-
const index = path.join(vovk, 'index.ts');
|
|
10
|
-
await fs.mkdir(vovk, { recursive: true });
|
|
11
|
-
if (!(await getFileSystemEntryType(js))) {
|
|
12
|
-
await fs.writeFile(js, '/* postinstall */');
|
|
13
|
-
}
|
|
14
|
-
if (!(await getFileSystemEntryType(ts))) {
|
|
15
|
-
await fs.writeFile(ts, '/* postinstall */');
|
|
16
|
-
}
|
|
17
|
-
if (!(await getFileSystemEntryType(index))) {
|
|
18
|
-
await fs.writeFile(index, '/* postinstall */');
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
void postinstall();
|
package/templates/controller.ejs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
<% const vars = {
|
|
2
|
-
ControllerName: t.TheThing + 'Controller',
|
|
3
|
-
ServiceName: t.TheThing + 'Service',
|
|
4
|
-
}; %>
|
|
5
|
-
---
|
|
6
|
-
dir: <%= t.defaultDir %>
|
|
7
|
-
fileName: <%= vars.ControllerName + '.ts' %>
|
|
8
|
-
sourceName: <%= vars.ControllerName %>
|
|
9
|
-
compiledName: <%= t.TheThing + 'RPC' %>
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
import { prefix, get, put, post, del, type VovkRequest } from 'vovk';
|
|
13
|
-
<% if(t.withService) { %>
|
|
14
|
-
import <%= vars.ServiceName %> from './<%= vars.ServiceName %>';
|
|
15
|
-
<% } %>
|
|
16
|
-
|
|
17
|
-
@prefix('<%= t['the-things'] %>')
|
|
18
|
-
export default class <%= vars.ControllerName %> {
|
|
19
|
-
@get()
|
|
20
|
-
static get<%= t.TheThings %> = async (req: VovkRequest<null, { search: string }>) => {
|
|
21
|
-
const search = req.nextUrl.searchParams.get('search');
|
|
22
|
-
<% if(t.withService) { %>
|
|
23
|
-
return <%= vars.ServiceName %>.get<%= t.TheThings %>(search);
|
|
24
|
-
<% } else { %>
|
|
25
|
-
return { results: [], search };
|
|
26
|
-
<% } %>
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@put(':id')
|
|
30
|
-
static update<%= t.TheThing %> = async (req: VovkRequest<{ foo: 'bar' | 'baz' }, { q: string }>, params: { id: string }) => {
|
|
31
|
-
const { id } = params;
|
|
32
|
-
const body = await req.json();
|
|
33
|
-
const q = req.nextUrl.searchParams.get('q');
|
|
34
|
-
<% if(t.withService) { %>
|
|
35
|
-
return <%= vars.ServiceName %>.update<%= t.TheThing %>(id, q, body);
|
|
36
|
-
<% } else { %>
|
|
37
|
-
return { id, body, q };
|
|
38
|
-
<% } %>
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
@post()
|
|
42
|
-
static create<%= t.TheThing %> = () => {
|
|
43
|
-
// ...
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
@del(':id')
|
|
47
|
-
static delete<%= t.TheThing %> = () => {
|
|
48
|
-
// ...
|
|
49
|
-
};
|
|
50
|
-
}
|
package/templates/service.ejs
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<% const vars = {
|
|
2
|
-
ControllerName: t.TheThing + 'Controller',
|
|
3
|
-
ServiceName: t.TheThing + 'Service',
|
|
4
|
-
}; %>
|
|
5
|
-
---
|
|
6
|
-
dir: <%= t.defaultDir %>
|
|
7
|
-
fileName: <%= vars.ServiceName + '.ts' %>
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
import type { VovkControllerBody, VovkControllerQuery } from 'vovk';
|
|
11
|
-
import type <%= vars.ControllerName %> from './<%= vars.ControllerName %>';
|
|
12
|
-
|
|
13
|
-
export default class <%= vars.ServiceName %> {
|
|
14
|
-
static get<%= t.TheThings %> = (search: VovkControllerQuery<typeof <%= vars.ControllerName %>.get<%= t.TheThings %>>['search']) => {
|
|
15
|
-
return { results: [], search };
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
static update<%= t.TheThing %> = (
|
|
19
|
-
id: string,
|
|
20
|
-
q: VovkControllerQuery<typeof <%= vars.ControllerName %>.update<%= t.TheThing %>>['q'],
|
|
21
|
-
body: VovkControllerBody<typeof <%= vars.ControllerName %>.update<%= t.TheThing %>>
|
|
22
|
-
) => {
|
|
23
|
-
return { id, q, body };
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
// ...
|
|
27
|
-
}
|