nuxt-cf-jobs 0.0.2 → 0.0.3

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/dist/module.d.mts CHANGED
@@ -69,5 +69,8 @@ declare module '@nuxt/schema' {
69
69
  }
70
70
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
71
71
 
72
- export { _default as default };
72
+ declare function generateRegistryTemplate(options: ModuleOptions, rootDir: string, templateDir: string): Promise<string>;
73
+ declare function generateRegistryTypesTemplate(options: ModuleOptions, rootDir: string, templateDir: string): Promise<string>;
74
+
75
+ export { _default as default, generateRegistryTemplate, generateRegistryTypesTemplate };
73
76
  export type { ModuleOptions };
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-cf-jobs",
3
3
  "configKey": "cfJobs",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -170,10 +170,15 @@ const module$1 = defineNuxtModule({
170
170
  { name: "defineJob", from: resolver.resolve("./runtime/server/registry") }
171
171
  ]);
172
172
  const registryTemplate = addTemplate({
173
- filename: "cf-jobs/registry.ts",
173
+ filename: "cf-jobs/registry.mjs",
174
174
  write: true,
175
175
  getContents: async () => generateRegistryTemplate(options, nuxt.options.rootDir, resolve(nuxt.options.buildDir, "cf-jobs"))
176
176
  });
177
+ addTemplate({
178
+ filename: "cf-jobs/registry.d.ts",
179
+ write: true,
180
+ getContents: async () => generateRegistryTypesTemplate(options, nuxt.options.rootDir, resolve(nuxt.options.buildDir, "cf-jobs"))
181
+ });
177
182
  nuxt.options.alias[options.registryAlias ?? "#cf-jobs/app"] = registryTemplate.dst;
178
183
  nuxt.hooks.hook("builder:watch", (async (_event, path) => {
179
184
  if (!isWatchedJobPath(path, options, nuxt.options.rootDir))
@@ -293,27 +298,15 @@ async function generateRegistryTemplate(options, rootDir, templateDir) {
293
298
  "/* This file is generated by nuxt-cf-jobs. Do not edit directly. */",
294
299
  `import { createCfJobsApp } from '#cf-jobs/server'`,
295
300
  `import { useRuntimeConfig } from '#imports'`,
296
- `import type { JobDefinitionsByNameOfLoaders, JobMessageByName, JobMessageByQueue, JobNameOf, JobPayloadByName, JobPayloadOf, JobQueueByName, QueueNameOf } from '#cf-jobs/server'`,
297
- `export type { QueueConsumerOptions } from '#cf-jobs/server'`,
298
301
  ...imports,
299
302
  "",
300
303
  "export const jobLoaders = {",
301
304
  ...loaders,
302
- "} as const",
303
- `export const jobs = [${jobItems}] as const`,
304
- `export const app = createCfJobsApp(jobs, useRuntimeConfig as never, { defaultQueue: ${options.defaultQueue ? JSON.stringify(options.defaultQueue) : "undefined"} })`,
305
+ "}",
306
+ `export const jobs = [${jobItems}]`,
307
+ `export const app = createCfJobsApp(jobs, useRuntimeConfig, { defaultQueue: ${options.defaultQueue ? JSON.stringify(options.defaultQueue) : "undefined"} })`,
305
308
  "export const jobRegistry = app.jobRegistry",
306
309
  "",
307
- "export type Jobs = typeof jobs",
308
- "export type JobsByName = JobDefinitionsByNameOfLoaders<typeof jobLoaders>",
309
- "export type JobName = keyof JobsByName & JobNameOf<Jobs>",
310
- "export type JobDefinitionOf<Name extends JobName> = JobsByName[Name]",
311
- "export type QueueName = QueueNameOf<Jobs>",
312
- "export type JobPayload<Name extends JobName> = JobPayloadOf<JobDefinitionOf<Name>>",
313
- "export type JobQueue<Name extends JobName> = JobQueueByName<Jobs, Name>",
314
- "export type JobMessage<Name extends JobName> = JobMessageByName<Jobs, Name>",
315
- "export type QueueMessage<Queue extends QueueName> = JobMessageByQueue<Jobs, Queue>",
316
- "",
317
310
  "export const {",
318
311
  " getHandler,",
319
312
  " getJobDefinition,",
@@ -330,6 +323,48 @@ async function generateRegistryTemplate(options, rootDir, templateDir) {
330
323
  ""
331
324
  ].join("\n");
332
325
  }
326
+ async function generateRegistryTypesTemplate(options, rootDir, templateDir) {
327
+ const files = await resolveJobFiles(options, rootDir);
328
+ assertUniqueGeneratedJobNames(files, options, rootDir);
329
+ const loaderTypeLines = files.map((file) => {
330
+ return ` ${JSON.stringify(toJobName(file, options, rootDir))}: () => Promise<typeof import(${JSON.stringify(toImportPath(templateDir, file).replace(/\.ts$/, ""))})['default']>,`;
331
+ });
332
+ return [
333
+ "/* This file is generated by nuxt-cf-jobs. Do not edit directly. */",
334
+ `import type { JobDefinitionsByNameOfLoaders, JobMessageByName, JobMessageByQueue, JobNameOf, JobPayloadByName, JobPayloadOf, JobQueueByName, QueueNameOf, QueueConsumerOptions } from '#cf-jobs/server'`,
335
+ `export type { QueueConsumerOptions }`,
336
+ "",
337
+ "export declare const jobLoaders: {",
338
+ ...loaderTypeLines,
339
+ "}",
340
+ "export declare const jobs: readonly unknown[]",
341
+ "export declare const app: ReturnType<typeof import('#cf-jobs/server').createCfJobsApp>",
342
+ "export declare const jobRegistry: typeof app.jobRegistry",
343
+ "",
344
+ "export type Jobs = typeof jobs",
345
+ "export type JobsByName = JobDefinitionsByNameOfLoaders<typeof jobLoaders>",
346
+ "export type JobName = keyof JobsByName & JobNameOf<Jobs>",
347
+ "export type JobDefinitionOf<Name extends JobName> = JobsByName[Name]",
348
+ "export type QueueName = QueueNameOf<Jobs>",
349
+ "export type JobPayload<Name extends JobName> = JobPayloadOf<JobDefinitionOf<Name>>",
350
+ "export type JobQueue<Name extends JobName> = JobQueueByName<Jobs, Name>",
351
+ "export type JobMessage<Name extends JobName> = JobMessageByName<Jobs, Name>",
352
+ "export type QueueMessage<Queue extends QueueName> = JobMessageByQueue<Jobs, Queue>",
353
+ "",
354
+ "export declare const getHandler: typeof app.getHandler",
355
+ "export declare const getJobDefinition: typeof app.getJobDefinition",
356
+ "export declare const getJobQueue: typeof app.getJobQueue",
357
+ "export declare const getJobRoute: typeof app.getJobRoute",
358
+ "export declare const validateRegistry: typeof app.validateRegistry",
359
+ "export declare const validateQueueBindings: typeof app.validateQueueBindings",
360
+ "export declare const assertQueueBindings: typeof app.assertQueueBindings",
361
+ "export declare const getQueue: typeof app.getQueue",
362
+ "export declare const buildJobPayload: typeof app.buildJobPayload",
363
+ "export declare const prepareJob: typeof app.prepareJob",
364
+ "export declare const registerQueueConsumer: typeof app.registerQueueConsumer",
365
+ ""
366
+ ].join("\n");
367
+ }
333
368
  async function resolveJobFiles(options, rootDir) {
334
369
  const dirs = toArray(options.jobsDir ?? "server/jobs");
335
370
  const pattern = options.jobsPattern ?? "**/*.ts";
@@ -377,4 +412,4 @@ function toJobName(file, options, rootDir) {
377
412
  return path.replace(/\/index$/, "");
378
413
  }
379
414
 
380
- export { module$1 as default };
415
+ export { module$1 as default, generateRegistryTemplate, generateRegistryTypesTemplate };
package/dist/types.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- export { default } from './module.mjs'
1
+ export { default, type generateRegistryTemplate, type generateRegistryTypesTemplate } from './module.mjs'
2
2
 
3
3
  export { type ModuleOptions } from './module.mjs'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-cf-jobs",
3
3
  "type": "module",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "description": "Nuxt module for typed Cloudflare queue jobs.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",