@uss-stargazer/job-queue 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/README.md CHANGED
@@ -22,7 +22,32 @@ job-queue --help
22
22
  jobq --help
23
23
  ```
24
24
 
25
- ## Syncing with gists
25
+ ## Usage
26
+
27
+ ***TLDR***: The CLI tries to be user friendly, so just use it...
28
+
29
+ It's just based on a few files: config.json, jobqueue.json, and projectpool.json. Strives to be
30
+ a bit like Git in the sense that it opens data structures in the user's editor for updating data.
31
+
32
+ ### JSON schemas
33
+
34
+ It's recommended that you use an editor or editor plugin with some sort of intellisense for JSON
35
+ schemas, as it makes it much easier to work with.
36
+
37
+ If this isn't available, the expected structures can be found in the Zod schemas in
38
+ `src/data/$TARGET.ts` (at the top of each).
39
+
40
+ ### Config options
41
+
42
+ - `editor`: string to edit file when filepath is appended. If not specified, is infered from
43
+ environment vars or from your Git configuration, if you have that installed.
44
+ - `confirmGistUpdates`: whether it should check before pushing or pulling gists from GitHub, if you
45
+ have any set up (see [here](#syncing-with-gists)).
46
+ - `confirmOffline`: whether to check before going into offline mode when there are gists configured
47
+ and `github.com` cannot be resolved.
48
+ - `showBanner`: whether to show ASCII art banner on start
49
+
50
+ ### Syncing with gists
26
51
 
27
52
  `job-queue` allows you to sync data files with a gist/gists on your GitHub account. This provides
28
53
  cloud storage and makes the program more portable.
@@ -48,6 +73,7 @@ To link to a gist, provide the gist ID and a GitHub access token in config.json,
48
73
 
49
74
  Your gist ID can be copied easily from the URL; usually something like `https://gist.github.com/USERNAME/GIST_ID`.
50
75
 
76
+
51
77
  ## Sample Workflow
52
78
 
53
79
  - _\[Daemon\]_ Spontaneous, not fleshed out ideas get immediately added to the project pool as "inactive".
package/dist/actions.js CHANGED
@@ -86,6 +86,7 @@ const actions = {
86
86
  });
87
87
  reorder(queue, reorderedQueueIdxs.map(({ value: jobIdx }) => jobIdx));
88
88
  console.log(chalk.green('✔'), 'Queue reordered.');
89
+ // Open checked activities for editing
89
90
  const checkedActivities = reorderedQueueIdxs
90
91
  .map(({ checked }, jobIdx) => ({ checked, jobIdx }))
91
92
  .filter(({ checked }) => checked);
@@ -144,6 +145,7 @@ const actions = {
144
145
  console.log(chalk.red('[e]'), 'No projects in pool.');
145
146
  return;
146
147
  }
148
+ // Get project name to edit
147
149
  const projectName = await search({
148
150
  message: 'Enter the name of the project to edit',
149
151
  source: (partialProjectName) => {
@@ -158,6 +160,7 @@ const actions = {
158
160
  if (projectIdx < 0)
159
161
  throw new Error('Invalid project name');
160
162
  const [project] = pool.splice(projectIdx, 1);
163
+ // Do the editing
161
164
  try {
162
165
  const updatedProject = await updateProject(project, projectpool, jobqueue, config.data);
163
166
  if (updatedProject !== 'deleted') {
@@ -178,3 +181,4 @@ const actions = {
178
181
  },
179
182
  };
180
183
  export default actions;
184
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { confirm } from '@inquirer/prompts';
10
10
  import { fileURLToPath, pathToFileURL } from 'url';
11
11
  import pkg from '../../package.json' with { type: 'json' };
12
12
  import { getDataTargetNicely } from '../utils/promptUser.js';
13
+ // Types / Schemas
13
14
  const jsonSchemaNames = [
14
15
  'job',
15
16
  'jobqueue',
@@ -18,11 +19,14 @@ const jsonSchemaNames = [
18
19
  'config',
19
20
  ];
20
21
  const NonemptyString = z.string().nonempty();
22
+ // prettier-ignore
21
23
  const GistDataObject = z.object({
22
24
  local: NonemptyString.meta({ title: "Local JSON path", description: "Path to local JSON file for data linked to the Gist." }),
23
25
  ghGistId: NonemptyString.regex(/^[A-Fa-f0-9]{32}$/, { error: "Is not valid GitHub gist ID" }).meta({ title: "Gist ID", description: "ID of gist to link (can get from URL of the gist you created)." }),
24
26
  ghAccessToken: NonemptyString.regex(/^(gh[ps]_[a-zA-Z0-9]{36}|github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59})$/, { error: "Is not valid GitHub access token" }).meta({ title: "Gist Access Token", description: "GitHub access token for read/write access to your gist." })
25
27
  }).meta({ title: "Gist-Linked JSON", description: "Data for a configuration/data file linked to a GitHub gist." });
28
+ // !!! NOTE !!! Whenever you change this schema, PLEASE update package.json version (so JSON schemas will get updated automatically)
29
+ // prettier-ignore
26
30
  export const ConfigSchema = z.object({
27
31
  jobqueue: z.union([
28
32
  NonemptyString.meta({ title: "Jobqueue path", description: "Path to local jobqueue.json." }),
@@ -32,10 +36,12 @@ export const ConfigSchema = z.object({
32
36
  NonemptyString.meta({ title: "Projectpool path", description: "Path to local projectpool.json." }),
33
37
  GistDataObject.meta({ title: "Gist-Linked Jobqueue", description: "Data for projectpool.json locally and linked to gist on GitHub." })
34
38
  ]),
39
+ // schemas stored as path to schemas dir, but expanded on parse
35
40
  schemas: NonemptyString.meta({ title: "Schemas directory", description: `Path to directory containing: ${jsonSchemaNames.map(base => `${base}.schema.json`).join(", ")}.` }).transform((schemasDir) => Object.fromEntries(jsonSchemaNames.map((base) => [base, pathToFileURL(path.resolve(schemasDir, `${base}.schema.json`)).href]))),
36
41
  editor: NonemptyString.optional().meta({ title: "Editor command", description: "Command to run editor. Will be run like `<editor> /some/data.json` so make sure it waits." }),
37
- confirmGistUpdates: z.boolean().optional().meta({ description: "Whether to prompt before pushing or pulling a gist from GitHub." }),
38
- confirmOffline: z.boolean().optional().meta({ description: "Whether to confirm before using offline (if there are gists in config)." })
42
+ confirmGistUpdates: z.boolean().optional().describe("Whether to prompt before pushing or pulling a gist from GitHub."),
43
+ confirmOffline: z.boolean().optional().describe("Whether to confirm before using offline (if there are gists in config)."),
44
+ showBanner: z.boolean().optional().describe("Show ASCII art banner on start.")
39
45
  });
40
46
  export const toInputConfig = (outputData) => {
41
47
  const schemaDir = Object.values(outputData.schemas).reduce((schemaDir, schemaPath) => {
@@ -55,7 +61,9 @@ const jsonSchemas = {
55
61
  projectpool: ProjectPoolSchema,
56
62
  config: ConfigSchema,
57
63
  };
58
- const updateNestedObject = async (base, update) => {
64
+ // Methods
65
+ const updateNestedObject = async (// eslint-disable-line @typescript-eslint/no-explicit-any
66
+ base, update) => {
59
67
  const keys = [...Object.keys(update)];
60
68
  for (const key of keys) {
61
69
  if (typeof base[key] === 'object' &&
@@ -72,6 +80,7 @@ const updateNestedObject = async (base, update) => {
72
80
  }
73
81
  }
74
82
  };
83
+ // JSON schema methods
75
84
  const getJsonSchemaId = (schemaFileUrl) => path.posix.join(pkg.version, path.basename(fileURLToPath(schemaFileUrl)));
76
85
  const versionFromJsonSchemaId = (id) => path.dirname(id);
77
86
  const updateJsonSchema = async (schemaSchema, schemaFileUrl) => {
@@ -87,6 +96,7 @@ const updateJsonSchema = async (schemaSchema, schemaFileUrl) => {
87
96
  }),
88
97
  }, undefined, ' '));
89
98
  };
99
+ // Config methods
90
100
  export const getDataPathFromConfig = (data) => (typeof data === 'string' ? data : data.local);
91
101
  const createConfig = async (configDir, override) => {
92
102
  const config = {
@@ -96,6 +106,7 @@ const createConfig = async (configDir, override) => {
96
106
  ...override,
97
107
  };
98
108
  const decodedConfig = ConfigSchema.decode(config);
109
+ // schemas
99
110
  if (!existsSync(config.schemas))
100
111
  await fs.mkdir(config.schemas);
101
112
  for (const schema of jsonSchemaNames) {
@@ -108,6 +119,7 @@ const createConfig = async (configDir, override) => {
108
119
  };
109
120
  const checkConfigSchemas = async (config, configPath) => {
110
121
  try {
122
+ // Make sure each schema exists and is the correct version
111
123
  const outdatedSchemas = [];
112
124
  for (const schema of Object.keys(config.schemas)) {
113
125
  const schemaPath = fileURLToPath(config.schemas[schema]);
@@ -146,7 +158,9 @@ export const getConfig = async (overrideConfigDir, overrideConfig) => {
146
158
  const configPath = path.resolve(configDir, 'config.json');
147
159
  if (!existsSync(configDir))
148
160
  await fs.mkdir(configDir, { recursive: true });
161
+ // Get config data
149
162
  const { data: configData, hadToCreate } = await getDataTargetNicely(ConfigSchema, { name: 'config.json', expectedPath: configPath }, () => createConfig(configDir, overrideConfig), false, toInputConfig);
163
+ // Validate and apply config data contents
150
164
  await updateNestedObject(configData.data, ConfigSchema.partial().decode(overrideConfig));
151
165
  await checkConfigSchemas(configData.data, configPath);
152
166
  return {
@@ -155,3 +169,4 @@ export const getConfig = async (overrideConfigDir, overrideConfig) => {
155
169
  hadToCreate,
156
170
  };
157
171
  };
172
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/data/config.ts"],"names":[],"mappings":"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"}
@@ -48,3 +48,4 @@ export async function editData(data, configPath) {
48
48
  throw error;
49
49
  }
50
50
  }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAU,CAAC;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,iBAAiB;IAC9B,MAAM,EAAE,YAAY;CAC6B,CAAC;AAWpD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAiB,EACjB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,EAAE;gBAClD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;aAChC;SACX,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,UAAU,GACd,MAAM,KAAK,QAAQ;YACjB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,kBAAkB,CACtB,YAAY,EACZ,MAAM,KAAK,QAAQ;YACjB,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EACrB;YACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YAC/B,SAAS,EAAE,kBAAkB;YAC7B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;SACxC,EACD;YACE,QAAQ,CAAC,GAAG;gBACV,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;oBAC5B,CAAC,CAAC,EAAE,UAAU,EAAE,0BAA0B,EAAE;oBAC5C,CAAC,CAAC,UAAU,CAAC;YACjB,CAAC;SACF,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,eAAe;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;;YAC1C,MAAM,KAAK,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -2,16 +2,20 @@ import * as z from 'zod';
2
2
  import { checkProjectName } from './projectpool.js';
3
3
  import { makeGistData } from '../utils/gistData.js';
4
4
  import { getDataTargetNicely, handleInvalidGist, haveUserUpdateData, makeGistConflictHandler, } from '../utils/promptUser.js';
5
+ // Types / Schemas
6
+ // prettier-ignore
5
7
  export const JobSchema = z.object({
6
8
  name: z.string().trim().nonempty().meta({ title: 'Job name', description: 'Short name of the job (think a single commit message). Used as job identifier.' }),
7
9
  objectivies: z.array(z.string().trim().nonempty()).meta({ title: 'Job objectivies', description: 'A list of objectives to complete for this job. Purely for your benefit.' }),
8
10
  updates: z.string().optional().meta({ title: 'Job updates', description: "Put any notes/updates to the job here while you're working. Optional." }),
9
11
  project: z.string().trim().nonempty().meta({ title: 'Associated project', description: 'Corresponding project ID in projectpool.json.' }),
10
12
  }).meta({ title: 'Job', description: 'A single job entry for JobQueue.' });
13
+ // prettier-ignore
11
14
  export const JobQueueSchema = z.object({
12
15
  queue: z.array(JobSchema).meta({ title: 'Job queue' }),
13
16
  }).meta({ title: 'Job queue root', description: 'Root object for jobs/tasks FIFO queue model.' });
14
17
  const defaultJobQueue = { queue: [] };
18
+ // Methods
15
19
  export const getJobQueue = async (jsonPath, jsonSchemaUrl, autoCreateFiles = false, editor) => {
16
20
  const { data } = await getDataTargetNicely(JobQueueSchema, { name: 'jobqueue.json', expectedPath: jsonPath, jsonSchemaUrl }, async () => ({ encoded: defaultJobQueue }), autoCreateFiles);
17
21
  return await makeGistData(JobQueueSchema, data, 'jobqueue.json', makeGistConflictHandler(JobQueueSchema, editor), handleInvalidGist, "JSON to keep track of `jobqueue` data for this user's job-queue implementation (this is probably autogenerated).");
@@ -30,6 +34,7 @@ export const updateJob = async (job, projectPool, config) => {
30
34
  jsonSchemaUrl: config.schemas.job,
31
35
  }, {
32
36
  preparse(rawContents) {
37
+ // Check if user deleted the job
33
38
  if (rawContents.trim().length === 0) {
34
39
  userDeletedJob = true;
35
40
  return 'pass';
@@ -45,6 +50,7 @@ export const updateJob = async (job, projectPool, config) => {
45
50
  },
46
51
  });
47
52
  if (!userDeletedJob) {
53
+ // Make sure corresponding project is set to active
48
54
  const jobProject = pool.find((project) => project.name === updatedJob.project);
49
55
  if (jobProject.status !== 'active') {
50
56
  jobProject.status = 'active';
@@ -53,3 +59,4 @@ export const updateJob = async (job, projectPool, config) => {
53
59
  }
54
60
  return userDeletedJob ? 'deleted' : updatedJob;
55
61
  };
62
+ //# sourceMappingURL=jobqueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobqueue.js","sourceRoot":"","sources":["../../src/data/jobqueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAe,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAY,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,kBAAkB;AAElB,kBAAkB;AAClB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gFAAgF,EAAC,CAAC;IAC3J,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,yEAAyE,EAAC,CAAC;IAC3K,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,uEAAuE,EAAC,CAAC;IACjJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,+CAA+C,EAAC,CAAC;CACxI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;AAE3E,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;CACvD,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,8CAA8C,EAAC,CAAC,CAAC;AAGhG,MAAM,eAAe,GAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEhD,UAAU;AAEV,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,QAAgB,EAChB,aAAqB,EACrB,kBAA2B,KAAK,EAChC,MAAe,EACc,EAAE;IAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,CACxC,cAAc,EACd,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,EAChE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAC1C,eAAe,CAChB,CAAC;IACF,OAAO,MAAM,YAAY,CACvB,cAAc,EACd,IAAI,EACJ,eAAe,EACf,uBAAuB,CAAC,cAAc,EAAE,MAAM,CAAC,EAC/C,iBAAiB,EACjB,kHAAkH,CACnH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,GAAQ,EACR,WAAkC,EAClC,MAAc,EACY,EAAE;IAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAEnC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,kBAAkB,CACzC,SAAS,EACT,GAAG,EACH;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;QAC7C,QAAQ,EAAE;YACR,yCAAyC;YACzC,yCAAyC;SAC1C;QACD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;KAClC,EACD;QACE,QAAQ,CAAC,WAAW;YAClB,gCAAgC;YAChC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,cAAc,GAAG,IAAI,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,SAAS,CAAC,GAAG;YACX,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;gBACxC,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC;oBACE,UAAU,EAAE,0BAA0B,GAAG,CAAC,OAAO,uBAAuB;iBACzE,CAAC;QACR,CAAC;KACF,CACF,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,mDAAmD;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,CACjD,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC7B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACjD,CAAC,CAAC"}
@@ -2,16 +2,20 @@ import { confirm } from '@inquirer/prompts';
2
2
  import * as z from 'zod';
3
3
  import { makeGistData } from '../utils/gistData.js';
4
4
  import { getDataTargetNicely, handleInvalidGist, haveUserUpdateData, makeGistConflictHandler, } from '../utils/promptUser.js';
5
+ // Types / Schemas
6
+ // prettier-ignore
5
7
  export const ProjectSchema = z.object({
6
8
  name: z.string().trim().nonempty().meta({ title: 'Project name', description: 'Name of the project. Used as identifier.' }),
7
9
  description: z.string().optional().meta({ title: 'Project description', description: 'Longer description of the project. For your benefit, optional.' }),
8
10
  repo: z.url().optional().meta({ title: 'Project repository', description: 'URL to project repository. For your benefit, optional.' }),
9
11
  status: z.enum(['active', 'inactive', 'complete']).meta({ title: 'Project status', description: "Status of this project. 'active': they are referenced in jobqueue.json, 'inactive': they aren't referenced anywhere and aren't done, 'complete': they're done." }),
10
12
  }).meta({ title: 'Project', description: 'A single project entry for JobQueue (usually matches up with a GitHub repo, if you use that).' });
13
+ // prettier-ignore
11
14
  export const ProjectPoolSchema = z.object({
12
15
  pool: z.array(ProjectSchema).meta({ description: 'Set of projects, works in progress or just ideas.' }),
13
16
  }).meta({ title: 'Root project pool', description: 'Root object for pool of projects.' });
14
17
  const defaultProjectPool = { pool: [] };
18
+ // Methods
15
19
  export const getProjectPool = async (jsonPath, jsonSchemaUrl, autoCreateFiles = false, editor) => {
16
20
  const { data } = await getDataTargetNicely(ProjectPoolSchema, { name: 'projectpool.json', expectedPath: jsonPath, jsonSchemaUrl }, async () => ({ encoded: defaultProjectPool }), autoCreateFiles);
17
21
  return await makeGistData(ProjectPoolSchema, data, 'projectpool.json', makeGistConflictHandler(ProjectPoolSchema, editor), handleInvalidGist, "JSON to keep track of `projectpool` data for this user's job-queue implementation (this is probably autogenerated).");
@@ -32,6 +36,7 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
32
36
  jsonSchemaUrl: config.schemas.project,
33
37
  }, {
34
38
  preparse(rawContents) {
39
+ // Check if user deleted the project
35
40
  if (rawContents.trim().length === 0) {
36
41
  userDeletedProject = true;
37
42
  return 'pass';
@@ -52,6 +57,7 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
52
57
  return 'continue';
53
58
  },
54
59
  });
60
+ // Check if user wants to rename referencing jobs
55
61
  if (!userDeletedProject &&
56
62
  updatedProject.name !== project.name &&
57
63
  jobsReferencingProject.length > 0) {
@@ -65,5 +71,16 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
65
71
  await jobQueue.sync();
66
72
  }
67
73
  }
74
+ // Check if user wants to delete referencing jobs
75
+ if (userDeletedProject && jobsReferencingProject.length > 0) {
76
+ const deleteJobReferences = await confirm({
77
+ message: `You are deleting this project. Would you like to delete all referencing jobs, too?`,
78
+ });
79
+ if (deleteJobReferences) {
80
+ jobQueue.data.queue = jobQueue.data.queue.filter((job) => job.project !== project.name);
81
+ await jobQueue.sync();
82
+ }
83
+ }
68
84
  return userDeletedProject ? 'deleted' : updatedProject;
69
85
  };
86
+ //# sourceMappingURL=projectpool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectpool.js","sourceRoot":"","sources":["../../src/data/projectpool.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,16 +1,17 @@
1
1
  import chalk from 'chalk';
2
2
  import clear from 'clear';
3
3
  import figlet from 'figlet';
4
- import { select } from '@inquirer/prompts';
4
+ import { search } from '@inquirer/prompts';
5
5
  import { ExitPromptError, Separator } from '@inquirer/core';
6
6
  import actions, { actionNames, actionsDependentOnJobs, actionsDependentOnProjects, } from './actions.js';
7
7
  import { getConfig, getDataPathFromConfig } from './data/config.js';
8
8
  import { getJobQueue } from './data/jobqueue.js';
9
9
  import { getProjectPool } from './data/projectpool.js';
10
- import { editData } from './data/index.js';
10
+ import { dataNames, editData } from './data/index.js';
11
11
  import { simpleDeepCompare } from './utils/index.js';
12
12
  import dns from 'dns/promises';
13
13
  import { inquirerConfirm } from './utils/promptUser.js';
14
+ import { isGistData } from './utils/gistData.js';
14
15
  async function loadData(overrideConfigDir, overrideConfig, previousData) {
15
16
  const { config, path: configPath, hadToCreate: autoCreateOtherFiles, } = await getConfig(overrideConfigDir, overrideConfig);
16
17
  const data = {
@@ -30,6 +31,7 @@ async function loadData(overrideConfigDir, overrideConfig, previousData) {
30
31
  data['projectpool'] = previousData['projectpool'];
31
32
  }
32
33
  else {
34
+ // Online check connection if its required for a gist and it hasn't already been checked
33
35
  if (connectionError === undefined) {
34
36
  const resolved = await dns
35
37
  .resolve('github.com')
@@ -42,9 +44,10 @@ async function loadData(overrideConfigDir, overrideConfig, previousData) {
42
44
  id: config.data[key].ghGistId,
43
45
  accessToken: config.data[key].ghAccessToken,
44
46
  });
47
+ // Initial pull only if its changed (and user oks it if that's set in config)
45
48
  if (!config.data.confirmGistUpdates ||
46
49
  (await inquirerConfirm(`Pull gist for ${key}?`))) {
47
- console.log(chalk.blue('[i]'), 'initial pull of gist for', key);
50
+ console.log(chalk.blue('[i]'), 'pulling', key);
48
51
  await data[key].pull();
49
52
  }
50
53
  }
@@ -60,60 +63,75 @@ async function loadData(overrideConfigDir, overrideConfig, previousData) {
60
63
  return data;
61
64
  }
62
65
  async function syncData(data) {
63
- for (const key of ['jobqueue', 'projectpool']) {
66
+ for (const key of dataNames) {
64
67
  await data[key].sync();
65
- if (data[key].isLinked &&
68
+ if (isGistData(data[key]) &&
69
+ data[key].isLinked &&
66
70
  (!data.config.data.confirmGistUpdates ||
67
71
  (await inquirerConfirm(`Push gist for ${key}?`)))) {
68
- console.log(chalk.blue('[i]'), 'sync push of gist for', key);
72
+ console.log(chalk.blue('[i]'), 'pushing', key);
69
73
  await data[key].push();
70
74
  }
71
75
  }
72
76
  }
73
77
  export default async function main(overrideConfigDir, overrideConfig) {
74
- clear();
75
- console.log(chalk.yellow(figlet.textSync('JobQueue', { horizontalLayout: 'full' })));
76
78
  let data = await loadData(overrideConfigDir, overrideConfig);
77
- console.log();
79
+ if (data.config.data.showBanner ?? true) {
80
+ if (data.config.data.showBanner === undefined) {
81
+ clear();
82
+ data.config.data.showBanner = false; // Don't show banner after first usage
83
+ }
84
+ console.log(chalk.yellow(figlet.textSync('JobQueue', { horizontalLayout: 'full' })));
85
+ }
78
86
  try {
79
87
  while (true) {
80
- const action = await select({
88
+ // Get the desired action
89
+ console.log(); // New line for action seperation
90
+ const actionChoices = actionNames.map((action) => {
91
+ if (actionsDependentOnJobs.includes(action) &&
92
+ data.jobqueue.data.queue.length === 0)
93
+ return {
94
+ name: action,
95
+ value: action,
96
+ disabled: '(Empty job queue)',
97
+ };
98
+ else if (actionsDependentOnProjects.includes(action) &&
99
+ data.projectpool.data.pool.length === 0)
100
+ return {
101
+ name: action,
102
+ value: action,
103
+ disabled: '(Empty project pool)',
104
+ };
105
+ else
106
+ return { name: action, value: action };
107
+ });
108
+ const action = await search({
81
109
  message: 'Select action',
82
- choices: [
83
- ...actionNames.map((action) => {
84
- if (actionsDependentOnJobs.includes(action) &&
85
- data.jobqueue.data.queue.length === 0)
86
- return {
87
- name: action,
88
- value: action,
89
- disabled: '(Empty job queue)',
90
- };
91
- else if (actionsDependentOnProjects.includes(action) &&
92
- data.projectpool.data.pool.length === 0)
93
- return {
94
- name: action,
95
- value: action,
96
- disabled: '(Empty project pool)',
97
- };
98
- else
99
- return { name: action, value: action };
100
- }),
101
- new Separator(),
102
- { name: 'editData', value: 'editData' },
103
- { name: 'sync', value: 'sync' },
104
- ],
110
+ source: (partialAction) => {
111
+ const partialSet = new Set([...(partialAction?.toLowerCase() ?? [])]);
112
+ const filteredActions = partialSet.size === 0
113
+ ? actionChoices
114
+ : actionChoices.filter((action) => partialSet.isSubsetOf(new Set([...action.name.toLowerCase()])));
115
+ const otherActions = [
116
+ { name: 'editData', value: 'editData' },
117
+ { name: 'syncData', value: 'syncData' },
118
+ ];
119
+ return filteredActions.length > 0
120
+ ? [...filteredActions, new Separator(), ...otherActions]
121
+ : otherActions.filter((action) => partialSet.isSubsetOf(new Set([...action.name.toLowerCase()])));
122
+ },
105
123
  pageSize: actionNames.length + 3,
106
124
  });
125
+ // Do the action
107
126
  if (action === 'editData') {
108
127
  await editData(data, data.configPath);
109
128
  data = await loadData(overrideConfigDir, overrideConfig, data);
110
129
  }
111
- else if (action === 'sync') {
130
+ else if (action === 'syncData') {
112
131
  await syncData(data);
113
132
  }
114
133
  else
115
134
  await actions[action](data);
116
- console.log();
117
135
  }
118
136
  }
119
137
  catch (error) {
@@ -122,3 +140,4 @@ export default async function main(overrideConfigDir, overrideConfig) {
122
140
  }
123
141
  await syncData(data);
124
142
  }
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as z from 'zod';
2
2
  import { Octokit } from '@octokit/rest';
3
3
  import { simpleDeepCompare } from './index.js';
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
5
  export const isGistData = (obj) => typeof obj === 'object' &&
5
6
  obj !== null &&
6
7
  'isLinked' in obj &&
@@ -42,7 +43,13 @@ const pushGist = async (octokit, filename, gistId, gist) => {
42
43
  },
43
44
  });
44
45
  };
45
- export const makeGistData = async (schema, jsonData, filename, handleConflict, handleInvalidGist, overwriteDescription) => {
46
+ /**
47
+ * Create GistData object this UNLINKED BY DEFAULT. You must call `linkGist()` to actually
48
+ * link it to a real gist.
49
+ */
50
+ export const makeGistData = async (schema, jsonData, filename, // Just in case the name is different than the path.basename(jsonPath)
51
+ handleConflict, handleInvalidGist, // Return null to ignore invalid gist
52
+ overwriteDescription) => {
46
53
  let octokit = null;
47
54
  let gist = null;
48
55
  let lastGistData = null;
@@ -52,6 +59,7 @@ export const makeGistData = async (schema, jsonData, filename, handleConflict, h
52
59
  const unlinkedPush = async () => {
53
60
  throw new Error('Cannot push unlinked gist');
54
61
  };
62
+ // Errors might occur here if the types for GistData change, since we're kinda ignoring typescript here
55
63
  const gistData = jsonData;
56
64
  gistData.isLinked = false;
57
65
  gistData.pull = unlinkedPull;
@@ -106,3 +114,4 @@ export const makeGistData = async (schema, jsonData, filename, handleConflict, h
106
114
  };
107
115
  return gistData;
108
116
  };
117
+ //# sourceMappingURL=gistData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gistData.js","sourceRoot":"","sources":["../../src/utils/gistData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAW/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAgB,GAAQ,EAAsB,EAAE,CACxE,OAAO,GAAG,KAAK,QAAQ;IACvB,GAAG,KAAK,IAAI;IACZ,UAAU,IAAI,GAAG;IACjB,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS;IACjC,MAAM,IAAI,GAAG;IACb,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;IAC9B,MAAM,IAAI,GAAG;IACb,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;IAC9B,UAAU,IAAI,GAAG;IACjB,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC;AAErC,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAID,MAAM,QAAQ,GAAG,KAAK,EACpB,OAAgB,EAChB,QAAgB,EAChB,MAAc,EACM,EAAE;IACtB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QACzC,MAAM,IAAI,aAAa,CACrB,4BAA4B,QAAQ,WAAW,IAAI,CAAC,MAAM,EAAE,CAC7D,CAAC;IAEJ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/B,MAAM,IAAI,aAAa,CACrB,4BAA4B,QAAQ,OAAO,QAAQ,wBAAwB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnG,CAAC;IACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE3C,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,OAAO;QAC1B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,OAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAe,EACA,EAAE;IACjB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;QACrC,MAAM,IAAI,SAAS,CACjB,gDAAgD,QAAQ,IAAI,CAC7D,CAAC;IAEJ,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE;YACL,CAAC,QAAQ,CAAC,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,MAAS,EACT,QAA8B,EAC9B,QAAgB,EAAE,sEAAsE;AACxF,cAA6E,EAC7E,iBAG+B,EAAE,qCAAqC;AACtE,oBAA6B,EACE,EAAE;IACjC,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,IAAI,IAAI,GAAyC,IAAI,CAAC;IACtD,IAAI,YAAY,GAAe,IAAI,CAAC;IAEpC,MAAM,YAAY,GAAiC,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,YAAY,GAAiC,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,uGAAuG;IACvG,MAAM,QAAQ,GAAG,QAAgC,CAAC;IAClD,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;IAC7B,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,GAAG,KAAK,EAAE,aAAa,EAAiB,EAAE;QACzD,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;aAAM,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;YAC7B,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;YAC7B,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;YAClD,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAE7C,QAAQ,CAAC,IAAI,GAAG,KAAK,IAAmB,EAAE;gBACxC,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrD,IAAI,UAAsB,CAAC;oBAC3B,IAAI,CAAC;wBACH,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACvD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,QAAQ,IAAI,KAAK,YAAY,WAAW,CAAC;4BAChE,MAAM,KAAK,CAAC;wBACd,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBAC9D,IAAI,OAAO,KAAK,IAAI;4BAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;oBAChD,CAAC;oBACD,YAAY,GAAG,UAAU,CAAC;oBAE1B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;wBAC/C,QAAQ,CAAC,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAElE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC;YAEF,QAAQ,CAAC,IAAI,GAAG,KAAK,IAAmB,EAAE;gBACxC,IAAI,CAAC,IAAI;oBACP,OAAO,CAAC,IAAI,CACV,wDAAwD,CACzD,CAAC;gBAEJ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACjD,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;wBACxC,WAAW,EACT,oBAAoB;4BACpB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,oBAAoB,CAAC;4BAClD,CAAC,CAAC,oBAAoB;4BACtB,CAAC,CAAC,SAAS;wBACf,QAAQ,EAAE,IAAI,CAAC,SAAS,CACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC5B,SAAS,EACT,IAAI,CACL;qBACF,CAAC,CAAC;YACP,CAAC,CAAC;YAEF,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,188 @@
1
+ import path from 'path';
2
+ import { dataNames, dataSchemas } from '../data/index.js';
3
+ import { makeGistData } from './gistData.js';
4
+ import { readFileSync } from 'fs';
5
+ import { Octokit } from '@octokit/rest';
6
+ import dns from 'dns/promises';
7
+ import { makeJsonData } from './jsonData.js';
8
+ dns.resolve('github.com').catch((error) => {
9
+ throw new Error(`Connection to github.com required for test suite: ${error}`);
10
+ });
11
+ const { TEST_GIST_ID, TEST_GIST_TOKEN } = process.env;
12
+ if (!TEST_GIST_ID || !TEST_GIST_TOKEN)
13
+ throw new Error('Need gist env vars to run test suite');
14
+ // Test gists
15
+ const testGist = { id: TEST_GIST_ID, accessToken: TEST_GIST_TOKEN };
16
+ const testOctokit = new Octokit({ auth: testGist.accessToken });
17
+ const invalidGist = {
18
+ id: 'this is not a valid gist id',
19
+ accessToken: 'this is not a valid access token',
20
+ };
21
+ // Test data targets
22
+ const targetNames = dataNames.filter((name) => name !== 'config');
23
+ const defaultData = {
24
+ jobqueue: { queue: [] },
25
+ projectpool: { pool: [] },
26
+ };
27
+ const changedData = {
28
+ jobqueue: {
29
+ queue: [{ name: 'test', objectivies: ['test'], project: 'test' }],
30
+ },
31
+ projectpool: {
32
+ pool: [{ name: 'test', status: 'inactive' }],
33
+ },
34
+ };
35
+ const dataTargets = targetNames.map((name) => ({
36
+ schema: dataSchemas[name],
37
+ filename: `${name}.json`,
38
+ filepath: path.join(process.cwd(), `sample/${name}.json`),
39
+ defaultData: defaultData[name],
40
+ changedData: changedData[name],
41
+ }));
42
+ const testTargets = async (func, handleConflict = async (_, theirs) => theirs, handleInvalidGist = async () => undefined) => {
43
+ for (const target of dataTargets) {
44
+ const jsonData = await makeJsonData(target.filepath, target.schema);
45
+ const gistData = await makeGistData(target.schema, jsonData, target.filename, handleConflict, handleInvalidGist);
46
+ await func(gistData, target);
47
+ }
48
+ };
49
+ // The actual tests
50
+ describe('gistData', () => {
51
+ describe('linkGist', () => {
52
+ it('should initialize isLinked to false', () => testTargets(async (gistData) => {
53
+ expect(gistData.isLinked).toBe(false);
54
+ }));
55
+ it('should set isLinked to after linking then unlinking', () => testTargets(async (gistData) => {
56
+ await gistData.linkGist(testGist);
57
+ await gistData.linkGist(null);
58
+ expect(gistData.isLinked).toBe(false);
59
+ }));
60
+ it('should not pull when initially linked', () => testTargets(async (gistData, target) => {
61
+ await testOctokit.gists.update({
62
+ gist_id: testGist.id,
63
+ files: {
64
+ [target.filename]: { content: JSON.stringify(target.changedData) },
65
+ },
66
+ });
67
+ gistData.data = target.defaultData;
68
+ await gistData.linkGist(testGist);
69
+ expect(gistData.data).toStrictEqual(target.defaultData);
70
+ }));
71
+ });
72
+ describe('pull', () => {
73
+ it('should throw when initially unlinked', () => testTargets(async (gistData) => {
74
+ await expect(gistData.pull).rejects.toThrow();
75
+ }));
76
+ it('should throw when linked then unlinked', () => testTargets(async (gistData) => {
77
+ await gistData.linkGist(testGist);
78
+ await gistData.linkGist(null);
79
+ await expect(gistData.pull).rejects.toThrow();
80
+ }));
81
+ it('should throw on invalid gist params', () => testTargets(async (gistData) => {
82
+ await gistData.linkGist(invalidGist);
83
+ await expect(gistData.pull).rejects.toThrow();
84
+ }));
85
+ it('should pull and parse the correct data', () => testTargets(async (gistData, target) => {
86
+ await gistData.linkGist(testGist);
87
+ for (const data of [target.defaultData, target.changedData]) {
88
+ await testOctokit.gists.update({
89
+ gist_id: testGist.id,
90
+ files: {
91
+ [target.filename]: {
92
+ content: JSON.stringify(data),
93
+ },
94
+ },
95
+ });
96
+ await gistData.pull();
97
+ expect(gistData.data).toStrictEqual(data);
98
+ }
99
+ }), 10000);
100
+ it('should recognize invalid pulled data', () => testTargets(async (gistData, target) => {
101
+ await testOctokit.gists.update({
102
+ gist_id: testGist.id,
103
+ files: {
104
+ [target.filename]: {
105
+ content: 'some invalid contents',
106
+ },
107
+ },
108
+ });
109
+ gistData.data = target.defaultData;
110
+ await gistData.linkGist(testGist);
111
+ await expect(gistData.pull).rejects.toThrow('INVALID CONTENTS');
112
+ }, undefined, async () => {
113
+ throw new Error('INVALID CONTENTS');
114
+ }), 10000);
115
+ it('should recognize conflict when pulling', () => testTargets(async (gistData, target) => {
116
+ await testOctokit.gists.update({
117
+ gist_id: testGist.id,
118
+ files: {
119
+ [target.filename]: {
120
+ content: JSON.stringify(target.changedData),
121
+ },
122
+ },
123
+ });
124
+ gistData.data = target.defaultData;
125
+ await gistData.linkGist(testGist);
126
+ await expect(gistData.pull).rejects.toThrow('PULL CONFLICT');
127
+ }, async () => {
128
+ throw new Error('PULL CONFLICT');
129
+ }));
130
+ });
131
+ describe('push', () => {
132
+ it('should throw when initially unlinked', () => testTargets(async (gistData) => {
133
+ await expect(gistData.push).rejects.toThrow();
134
+ }));
135
+ it('should throw when linked then unlinked', () => testTargets(async (gistData) => {
136
+ await gistData.linkGist(testGist);
137
+ await gistData.linkGist(null);
138
+ await expect(gistData.push).rejects.toThrow();
139
+ }));
140
+ it('should throw on invalid gist params', () => testTargets(async (gistData) => {
141
+ await gistData.linkGist(invalidGist);
142
+ await expect(gistData.push).rejects.toThrow();
143
+ }));
144
+ it('should throw when pushing invalid data', () => testTargets(async (gistData) => {
145
+ gistData.data = null;
146
+ await expect(gistData.push).rejects.toThrow();
147
+ }));
148
+ it('should push the same data stored locally', () => testTargets(async (gistData, target) => {
149
+ await gistData.linkGist(testGist);
150
+ gistData.data = target.defaultData;
151
+ await gistData.sync();
152
+ await gistData.push();
153
+ const gistContent = (await testOctokit.gists.get({
154
+ gist_id: testGist.id,
155
+ })).data.files[target.filename].content;
156
+ const json = JSON.parse(readFileSync(target.filepath, { encoding: 'utf8' }));
157
+ delete json.$schema;
158
+ expect(JSON.parse(gistContent)).toStrictEqual(json);
159
+ }));
160
+ it('should sync with local file before pushing', () => testTargets(async (gistData, target) => {
161
+ await gistData.linkGist(testGist);
162
+ gistData.data = target.defaultData;
163
+ await gistData.sync();
164
+ gistData.data = target.changedData;
165
+ await gistData.push();
166
+ expect(target.schema.parse(JSON.parse(readFileSync(target.filepath, { encoding: 'utf8' })))).toStrictEqual(target.changedData);
167
+ }));
168
+ it("should check if data's changed before pushing", () => testTargets(async (gistData, target) => {
169
+ await testOctokit.gists.update({
170
+ gist_id: testGist.id,
171
+ files: {
172
+ [target.filename]: {
173
+ content: JSON.stringify(target.defaultData, undefined, ' '),
174
+ },
175
+ },
176
+ });
177
+ await gistData.linkGist(testGist);
178
+ await gistData.pull();
179
+ await new Promise((resolve) => setTimeout(resolve, 2000));
180
+ gistData.data = target.defaultData;
181
+ const pushDate = new Date();
182
+ await gistData.push();
183
+ expect(new Date((await testOctokit.gists.get({ gist_id: testGist.id })).data
184
+ .updated_at) < pushDate).toBe(true);
185
+ }), 5000 + 2000 * targetNames.length);
186
+ });
187
+ });
188
+ //# sourceMappingURL=gistData.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gistData.test.js","sourceRoot":"","sources":["../../src/utils/gistData.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export class AbortError extends Error {
3
3
  super(message);
4
4
  }
5
5
  }
6
+ /** Reorders in place */
6
7
  export function reorder(array, newIndecies) {
7
8
  if (array.length !== newIndecies.length)
8
9
  throw new RangeError('Indecies array must be same length as target array');
@@ -18,4 +19,10 @@ export const clearNLines = (n) => {
18
19
  }
19
20
  process.stdout.cursorTo(0);
20
21
  };
21
- export const simpleDeepCompare = (a, b, replacer) => JSON.stringify(a, replacer) === JSON.stringify(b, replacer);
22
+ /**
23
+ * For noncomplex deep compare, simply stringifies the two values and compares the strings.
24
+ */
25
+ export const simpleDeepCompare = (
26
+ /* eslint-disable @typescript-eslint/no-explicit-any */
27
+ a, b, replacer) => JSON.stringify(a, replacer) === JSON.stringify(b, replacer);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO;QACjB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,wBAAwB;AACxB,MAAM,UAAU,OAAO,CAAI,KAAU,EAAE,WAAqB;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QACrC,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;IAE7E,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACjC,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;QACvC,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAQ,EAAE;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;AAC/B,uDAAuD;AACvD,CAAM,EACN,CAAM,EACN,QAA2C,EAElC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC"}
@@ -1,9 +1,14 @@
1
1
  import fs from 'fs/promises';
2
- export const makeJsonData = async (jsonPath, schema, overrideJsonSchemaUrl, ...[toInput]) => {
2
+ /**
3
+ * @throws SyntaxError (file doesn't contain JSON), ZodError (couldn't parse), Error (generic; e.g. couldn't open file)
4
+ */
5
+ export const makeJsonData = async (jsonPath, schema, overrideJsonSchemaUrl,
6
+ // If z.input is not equal to z.output, we need a conversion function
7
+ ...[toInput]) => {
3
8
  const json = JSON.parse(await fs.readFile(jsonPath, 'utf8').catch((error) => {
4
9
  throw new Error(`Couldn't open '${jsonPath}': ${error}`);
5
10
  }));
6
- const schemaUrl = overrideJsonSchemaUrl ?? json['$schema'];
11
+ const schemaUrl = overrideJsonSchemaUrl ?? json['$schema']; // save $schema (if it exists) for writing on sync()
7
12
  const data = schema.parse(json);
8
13
  const jsonData = {
9
14
  data,
@@ -12,10 +17,11 @@ export const makeJsonData = async (jsonPath, schema, overrideJsonSchemaUrl, ...[
12
17
  return fs.writeFile(jsonPath, JSON.stringify(typeof schemaUrl === 'string'
13
18
  ? {
14
19
  $schema: schemaUrl,
15
- ...encoded,
20
+ ...encoded /* Must be object if schemaUrl is defined */,
16
21
  }
17
22
  : encoded, undefined, ' '), 'utf8');
18
23
  },
19
24
  };
20
25
  return jsonData;
21
26
  };
27
+ //# sourceMappingURL=jsonData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonData.js","sourceRoot":"","sources":["../../src/utils/jsonData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAS7B;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,QAAgB,EAChB,MAAS,EACT,qBAA8B;AAE9B,qEAAqE;AACrE,GAAG,CAAC,OAAO,CAEL,EACyB,EAAE;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,MAAM,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,qBAAqB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD;IAEhH,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAyB;QACrC,IAAI;QACJ,IAAI;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjE,OAAO,EAAE,CAAC,SAAS,CACjB,QAAQ,EACR,IAAI,CAAC,SAAS,CACZ,OAAO,SAAS,KAAK,QAAQ;gBAC3B,CAAC,CAAC;oBACE,OAAO,EAAE,SAAS;oBAClB,GAAI,OAAkB,CAAC,4CAA4C;iBACpE;gBACH,CAAC,CAAC,OAAO,EACX,SAAS,EACT,IAAI,CACL,EACD,MAAM,CACP,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import path from 'path';
2
+ import { dataNames, dataSchemas } from '../data/index.js';
3
+ import { makeJsonData } from './jsonData.js';
4
+ import { readFileSync, writeFileSync } from 'fs';
5
+ // Test data targets
6
+ const targetNames = dataNames.filter((name) => name !== 'config');
7
+ const defaultData = {
8
+ jobqueue: { queue: [] },
9
+ projectpool: { pool: [] },
10
+ };
11
+ const changedData = {
12
+ jobqueue: {
13
+ queue: [{ name: 'test', objectivies: ['test'], project: 'test' }],
14
+ },
15
+ projectpool: {
16
+ pool: [{ name: 'test', status: 'inactive' }],
17
+ },
18
+ };
19
+ const dataTargets = targetNames.map((name) => ({
20
+ schema: dataSchemas[name],
21
+ filepath: path.join(process.cwd(), `sample/${name}.json`),
22
+ defaultData: defaultData[name],
23
+ changedData: changedData[name],
24
+ }));
25
+ const testTargets = async (func) => {
26
+ for (const target of dataTargets)
27
+ await func(target);
28
+ };
29
+ // The actual tests
30
+ describe('jsonData', () => {
31
+ it('should load the correct data initially', () => testTargets(async (target) => {
32
+ for (const data of [target.defaultData, target.changedData]) {
33
+ writeFileSync(target.filepath, JSON.stringify(data), {
34
+ encoding: 'utf8',
35
+ });
36
+ const jsonData = await makeJsonData(target.filepath, target.schema);
37
+ expect(jsonData.data).toStrictEqual(data);
38
+ }
39
+ }));
40
+ it('should throw on invalid data initially', () => testTargets(async (target) => {
41
+ writeFileSync(target.filepath, JSON.stringify('some invalid data'), {
42
+ encoding: 'utf8',
43
+ });
44
+ await expect(() => makeJsonData(target.filepath, target.schema)).rejects.toThrow();
45
+ }));
46
+ describe('sync', () => {
47
+ it('should write the same contents as data', () => testTargets(async (target) => {
48
+ writeFileSync(target.filepath, JSON.stringify(target.defaultData));
49
+ const jsonData = await makeJsonData(target.filepath, target.schema);
50
+ for (const data of [target.defaultData, target.changedData]) {
51
+ jsonData.data = data;
52
+ await jsonData.sync();
53
+ expect(JSON.parse(readFileSync(target.filepath, { encoding: 'utf8' }))).toStrictEqual(data);
54
+ }
55
+ }));
56
+ });
57
+ });
58
+ //# sourceMappingURL=jsonData.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonData.test.js","sourceRoot":"","sources":["../../src/utils/jsonData.test.ts"],"names":[],"mappings":"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"}
@@ -18,28 +18,7 @@ export const haveUserUpdateContents = async (contents, options, check) => {
18
18
  });
19
19
  const originalContents = await fs.readFile(file.path, { encoding: 'utf8' });
20
20
  while (true) {
21
- const controller = new AbortController();
22
- const signal = controller.signal;
23
- const editorPromise = editInteractively(file.path, contents, options?.editor, options?.tooltips);
24
- await new Promise((resolve) => setTimeout(resolve, 1000));
25
- const abortPromise = confirm({ message: 'Type `y` to abort...' }, { signal })
26
- .finally(() => clearNLines(1))
27
- .then(async (shouldAbort) => {
28
- if (shouldAbort) {
29
- if (file.cleanup)
30
- await file.cleanup();
31
- else
32
- await fs.writeFile(file.path, originalContents, {
33
- encoding: 'utf8',
34
- });
35
- throw new AbortError('User aborted action');
36
- }
37
- return undefined;
38
- });
39
- contents = await Promise.race([editorPromise, abortPromise]);
40
- controller.abort();
41
- if (typeof contents !== 'string')
42
- return undefined;
21
+ contents = await editInteractively(file.path, contents, options?.editor, options?.tooltips);
43
22
  if (check) {
44
23
  const error = check(contents);
45
24
  if (error === 'pass') {
@@ -47,7 +26,15 @@ export const haveUserUpdateContents = async (contents, options, check) => {
47
26
  }
48
27
  else if (typeof error === 'object') {
49
28
  console.log(chalk.red(`${options?.errorHead}:`), error.errMessage);
50
- continue;
29
+ if (!(await inquirerConfirm('Try again?'))) {
30
+ if (file.cleanup)
31
+ await file.cleanup();
32
+ else
33
+ await fs.writeFile(file.path, originalContents, {
34
+ encoding: 'utf8',
35
+ });
36
+ throw new AbortError('User aborted action');
37
+ }
51
38
  }
52
39
  }
53
40
  }
@@ -61,6 +48,7 @@ export const haveUserUpdateData = async (schema, data, options, checks) => {
61
48
  : data, undefined, ' ');
62
49
  let updatedData = undefined;
63
50
  await haveUserUpdateContents(contents, options, (contents) => {
51
+ // Load back editor contents and validate them
64
52
  if (checks?.preparse) {
65
53
  const preparseError = checks.preparse(contents);
66
54
  if (preparseError !== 'continue') {
@@ -90,12 +78,18 @@ export const haveUserUpdateData = async (schema, data, options, checks) => {
90
78
  });
91
79
  return updatedData;
92
80
  };
81
+ /**
82
+ * Tries to get data following a Zod `schema` from the `expectedPath` while being nice to the user.
83
+ * Otherwise, call `recreateData` and write JSON to `expectedPath` and then try to parse the file
84
+ * again into JsonData.
85
+ */
93
86
  export async function getDataTargetNicely(schema, target, recreateData, autoCreateFiles = false, ...conversionArg) {
94
87
  let jsonData = undefined;
95
88
  let hadToCreate = false;
96
89
  try {
97
90
  if (!existsSync(target.expectedPath))
98
- throw new AbortError(`File '${target.expectedPath}' for ${target.name} does not exist`);
91
+ throw new AbortError(// Hacky hack; just using AbortError so I can check for it during catch
92
+ `File '${target.expectedPath}' for ${target.name} does not exist`);
99
93
  jsonData = await makeJsonData(target.expectedPath, schema, target.jsonSchemaUrl, ...conversionArg);
100
94
  }
101
95
  catch (error) {
@@ -115,7 +109,7 @@ export async function getDataTargetNicely(schema, target, recreateData, autoCrea
115
109
  message: `Want to regenerate ${target.name}?`,
116
110
  }).finally(() => clearNLines(1)));
117
111
  if (shouldRegenerate) {
118
- clearNLines(1);
112
+ clearNLines(1); // Clear error line
119
113
  console.log(chalk.blue('[i]'), `Creating ${target.name} at '${target.expectedPath}'...`);
120
114
  hadToCreate = true;
121
115
  const { encoded, newJsonPath, newJsonSchemaUrl } = await recreateData();
@@ -160,6 +154,7 @@ export const resolveConflictLikeGit = async (schema, ours, theirs, editor) => {
160
154
  changeGroup = ['', ''];
161
155
  changeGroup[change.added ? 1 : 0] += change.value;
162
156
  }
157
+ // Write change group if its the end
163
158
  if (changeGroup && idx === diff.length - 1)
164
159
  diffString += formatGitChange(...changeGroup, true);
165
160
  return diffString;
@@ -213,3 +208,4 @@ export const handleInvalidGist = async (_, error) => {
213
208
  if (!shouldContinue)
214
209
  throw new Error(`Invalid gist for '${filename}' and user aborted`);
215
210
  };
211
+ //# sourceMappingURL=promptUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptUser.js","sourceRoot":"","sources":["../../src/utils/promptUser.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ // Credit: https://github.com/th0r/inquirer-sortable-checkbox/
2
+ // Is inquirer-sortable-checkbox but it has a better return type for sorting and uses shift instead of ctrl for sorting
1
3
  import { createPrompt, useState, useKeypress, usePrefix, usePagination, useRef, useMemo, makeTheme, isUpKey, isDownKey, isSpaceKey, isNumberKey, isEnterKey, ValidationError, } from '@inquirer/core';
2
4
  import chalk from 'chalk';
3
5
  import figures from '@inquirer/figures';
@@ -73,6 +75,7 @@ export default createPrompt((config, done) => {
73
75
  setItems(items.map(toggle));
74
76
  }
75
77
  else if (isNumberKey(key)) {
78
+ // Adjust index to start at 1
76
79
  const position = Number(key.name) - 1;
77
80
  const item = items[position];
78
81
  if (item != null && isSelectable(item)) {
@@ -195,3 +198,4 @@ function isMoveItemUpKey(key) {
195
198
  function isMoveItemDownKey(key) {
196
199
  return key.shift && isDownKey(key);
197
200
  }
201
+ //# sourceMappingURL=sortableCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortableCheckbox.js","sourceRoot":"","sources":["../../src/utils/sortableCheckbox.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -1,17 +1,17 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { Command } from 'commander';
4
4
  import chalk from 'chalk';
5
+
6
+ import pkg from './package.json' with { type: 'json' };
5
7
  import main from './dist/index.js';
6
8
 
7
9
  const program = new Command();
8
10
 
9
11
  program
10
12
  .name('job-queue')
11
- .description(
12
- 'A CLI app to keep track of jobs/tasks built around a couple of JSON files.',
13
- )
14
- .version('0.0.0')
13
+ .description(pkg.description)
14
+ .version(pkg.version)
15
15
  .option(
16
16
  '-c, --config <path>',
17
17
  'path to directory containing config.json (uses new system app dir by default)',
@@ -36,6 +36,7 @@ program
36
36
  });
37
37
 
38
38
  await main(configDir, { ...options })
39
+ .finally(() => console.log()) // Seperation line
39
40
  .then(() => {
40
41
  console.log(chalk.cyanBright('🖖 Live long and prosper...'));
41
42
  process.exit();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uss-stargazer/job-queue",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "A CLI app to keep track of jobs/tasks built around a couple of JSON files.",
5
5
  "author": "uss-stargazer",
6
6
  "license": "Apache-2.0",