@uss-stargazer/job-queue 0.0.1 → 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
@@ -1,4 +1,4 @@
1
- # Job Queue
1
+ # job-queue
2
2
 
3
3
  The concept is modeling your todo-list as bite-sized jobs in a First-In, First-Out (FIFO) queue.
4
4
  The goal is to increase productivity.
@@ -8,7 +8,7 @@ The goal is to increase productivity.
8
8
 
9
9
  ## Install
10
10
 
11
- Can be installed system-wide if you have Node/NPM installed:
11
+ Can be installed system-wide if you have NodeJS installed:
12
12
 
13
13
  ```
14
14
  npm install --global @uss-stargazer/job-queue
@@ -22,7 +22,59 @@ job-queue --help
22
22
  jobq --help
23
23
  ```
24
24
 
25
- ## Workflow
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
51
+
52
+ `job-queue` allows you to sync data files with a gist/gists on your GitHub account. This provides
53
+ cloud storage and makes the program more portable.
54
+
55
+ To link to a gist, provide the gist ID and a GitHub access token in config.json, like:
56
+
57
+ ```json
58
+ {
59
+ "$schema": "/job-queue/schemas/config.schema.json",
60
+ "jobqueue": {
61
+ "local": "/job-queue/jobqueue.json",
62
+ "ghGistId": "00000000000000000000000000000000",
63
+ "ghAccessToken": "ghp_000000000000000000000000000000000000"
64
+ },
65
+ "projectpool": {
66
+ "local": "/job-queue/projectpool.json",
67
+ "ghGistId": "00000000000000000000000000000000",
68
+ "ghAccessToken": "ghp_000000000000000000000000000000000000"
69
+ },
70
+ "schemas": "/job-queue/schemas",
71
+ }
72
+ ```
73
+
74
+ Your gist ID can be copied easily from the URL; usually something like `https://gist.github.com/USERNAME/GIST_ID`.
75
+
76
+
77
+ ## Sample Workflow
26
78
 
27
79
  - _\[Daemon\]_ Spontaneous, not fleshed out ideas get immediately added to the project pool as "inactive".
28
80
  - You should generally have an idea of a few projects you want to focus on at a time. For each, push
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') {
@@ -170,7 +173,7 @@ const actions = {
170
173
  await projectpool.sync();
171
174
  }
172
175
  catch (error) {
173
- if (error instanceof AbortError)
176
+ if (!(error instanceof AbortError))
174
177
  throw error;
175
178
  console.log(chalk.red('[e]'), error.message);
176
179
  pool.push(project);
@@ -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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"}
@@ -3,13 +3,14 @@ import envPaths from 'env-paths';
3
3
  import path from 'path';
4
4
  import fs from 'fs/promises';
5
5
  import { existsSync } from 'fs';
6
- import { makeJsonData } from '../utils/jsonData.js';
7
6
  import chalk from 'chalk';
8
7
  import { JobQueueSchema, JobSchema } from './jobqueue.js';
9
- import { ProjectPoolSchema, ProjectSchema, } from './projectpool.js';
8
+ import { ProjectPoolSchema, ProjectSchema } from './projectpool.js';
10
9
  import { confirm } from '@inquirer/prompts';
11
10
  import { fileURLToPath, pathToFileURL } from 'url';
12
11
  import pkg from '../../package.json' with { type: 'json' };
12
+ import { getDataTargetNicely } from '../utils/promptUser.js';
13
+ // Types / Schemas
13
14
  const jsonSchemaNames = [
14
15
  'job',
15
16
  'jobqueue',
@@ -18,12 +19,41 @@ const jsonSchemaNames = [
18
19
  'config',
19
20
  ];
20
21
  const NonemptyString = z.string().nonempty();
22
+ // prettier-ignore
23
+ const GistDataObject = z.object({
24
+ local: NonemptyString.meta({ title: "Local JSON path", description: "Path to local JSON file for data linked to the Gist." }),
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)." }),
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." })
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
21
30
  export const ConfigSchema = z.object({
22
- jobqueue: NonemptyString.optional().meta({ title: "Jobqueue path", description: "Path to jobqueue.json." }),
23
- projectpool: NonemptyString.optional().meta({ title: "Projectpool path", description: "Path to projectpool.json." }),
24
- 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." }),
31
+ jobqueue: z.union([
32
+ NonemptyString.meta({ title: "Jobqueue path", description: "Path to local jobqueue.json." }),
33
+ GistDataObject.meta({ title: "Gist-Linked Jobqueue", description: "Data for jobqueue.json locally and linked to gist on GitHub." })
34
+ ]),
35
+ projectpool: z.union([
36
+ NonemptyString.meta({ title: "Projectpool path", description: "Path to local projectpool.json." }),
37
+ GistDataObject.meta({ title: "Gist-Linked Jobqueue", description: "Data for projectpool.json locally and linked to gist on GitHub." })
38
+ ]),
39
+ // schemas stored as path to schemas dir, but expanded on parse
25
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]))),
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." }),
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.")
26
45
  });
46
+ export const toInputConfig = (outputData) => {
47
+ const schemaDir = Object.values(outputData.schemas).reduce((schemaDir, schemaPath) => {
48
+ const thisSchemaDir = path.dirname(fileURLToPath(schemaPath));
49
+ return schemaDir === null || schemaDir === thisSchemaDir
50
+ ? thisSchemaDir
51
+ : (() => {
52
+ throw new Error('Decoded invidual schemas are not in the same directory.');
53
+ })();
54
+ }, null);
55
+ return { ...outputData, schemas: schemaDir };
56
+ };
27
57
  const jsonSchemas = {
28
58
  job: JobSchema,
29
59
  jobqueue: JobQueueSchema,
@@ -31,7 +61,9 @@ const jsonSchemas = {
31
61
  projectpool: ProjectPoolSchema,
32
62
  config: ConfigSchema,
33
63
  };
34
- const updateNestedObject = async (base, update) => {
64
+ // Methods
65
+ const updateNestedObject = async (// eslint-disable-line @typescript-eslint/no-explicit-any
66
+ base, update) => {
35
67
  const keys = [...Object.keys(update)];
36
68
  for (const key of keys) {
37
69
  if (typeof base[key] === 'object' &&
@@ -48,11 +80,14 @@ const updateNestedObject = async (base, update) => {
48
80
  }
49
81
  }
50
82
  };
83
+ // JSON schema methods
51
84
  const getJsonSchemaId = (schemaFileUrl) => path.posix.join(pkg.version, path.basename(fileURLToPath(schemaFileUrl)));
52
85
  const versionFromJsonSchemaId = (id) => path.dirname(id);
53
86
  const updateJsonSchema = async (schemaSchema, schemaFileUrl) => {
54
87
  const schemaPath = fileURLToPath(schemaFileUrl);
55
- await fs.mkdir(path.dirname(schemaPath), { recursive: true });
88
+ const schemaDir = path.dirname(schemaPath);
89
+ if (!existsSync(schemaDir))
90
+ await fs.mkdir(schemaDir, { recursive: true });
56
91
  return await fs.writeFile(schemaPath, JSON.stringify({
57
92
  $id: getJsonSchemaId(schemaFileUrl),
58
93
  ...schemaSchema.toJSONSchema({
@@ -61,10 +96,8 @@ const updateJsonSchema = async (schemaSchema, schemaFileUrl) => {
61
96
  }),
62
97
  }, undefined, ' '));
63
98
  };
64
- const defaultData = {
65
- jobqueue: { queue: [] },
66
- projectpool: { pool: [] },
67
- };
99
+ // Config methods
100
+ export const getDataPathFromConfig = (data) => (typeof data === 'string' ? data : data.local);
68
101
  const createConfig = async (configDir, override) => {
69
102
  const config = {
70
103
  jobqueue: path.resolve(configDir, 'jobqueue.json'),
@@ -73,39 +106,20 @@ const createConfig = async (configDir, override) => {
73
106
  ...override,
74
107
  };
75
108
  const decodedConfig = ConfigSchema.decode(config);
76
- for (const key of ['jobqueue', 'projectpool']) {
77
- if (!existsSync(config[key])) {
78
- console.log(chalk.blue('[i]'), `Creating ${path.join('{config}', path.relative(configDir, config[key]))}...`);
79
- await fs.writeFile(config[key], JSON.stringify({
80
- $schema: decodedConfig.schemas[key],
81
- ...defaultData[key],
82
- }, undefined, ' '));
83
- }
84
- }
85
- await fs.mkdir(config.schemas);
109
+ // schemas
110
+ if (!existsSync(config.schemas))
111
+ await fs.mkdir(config.schemas);
86
112
  for (const schema of jsonSchemaNames) {
87
113
  if (!existsSync(decodedConfig.schemas[schema])) {
88
114
  console.log(chalk.blue('[i]'), `Creating ${path.join('{config}', path.relative(configDir, fileURLToPath(decodedConfig.schemas[schema])))}...`);
89
115
  await updateJsonSchema(jsonSchemas[schema], decodedConfig.schemas[schema]);
90
116
  }
91
117
  }
92
- return { encoded: config, decoded: decodedConfig };
118
+ return { encoded: config, jsonSchemaUrl: decodedConfig.schemas.config };
93
119
  };
94
- const checkConfig = async (config, configPath) => {
120
+ const checkConfigSchemas = async (config, configPath) => {
95
121
  try {
96
- for (const key of ['jobqueue', 'projectpool']) {
97
- if (!existsSync(config[key]))
98
- if (['jobqueue', 'projectpool'].includes(key) &&
99
- (await confirm({
100
- message: `File at config.${key} does not exist. Want to create it?`,
101
- })))
102
- await fs.writeFile(config[key], JSON.stringify({
103
- $schema: config.schemas[key],
104
- ...defaultData[key],
105
- }, undefined, ' '));
106
- else
107
- throw new Error(`File '${config[key]}' in config does not exist`);
108
- }
122
+ // Make sure each schema exists and is the correct version
109
123
  const outdatedSchemas = [];
110
124
  for (const schema of Object.keys(config.schemas)) {
111
125
  const schemaPath = fileURLToPath(config.schemas[schema]);
@@ -115,7 +129,7 @@ const checkConfig = async (config, configPath) => {
115
129
  }));
116
130
  const version = schemaJson.$id && versionFromJsonSchemaId(schemaJson.$id);
117
131
  if (!version || !/^\d+\.\d+\.\d+$/.test(version)) {
118
- console.log(chalk.yellow('[w]'), `${path.join('{config}', path.basename(config.schemas[schema]))} is malformed. Overwriting...`);
132
+ console.log(chalk.yellow('[w]'), `${path.join('{schemas}', path.basename(config.schemas[schema]))} is malformed. Overwriting...`);
119
133
  await updateJsonSchema(jsonSchemas[schema], config.schemas[schema]);
120
134
  }
121
135
  else if (version !== pkg.version) {
@@ -123,7 +137,7 @@ const checkConfig = async (config, configPath) => {
123
137
  }
124
138
  }
125
139
  else {
126
- console.log(chalk.blue('[i]'), `${path.join('{config}', path.basename(config.schemas[schema]))} does not exist. Creating...`);
140
+ console.log(chalk.blue('[i]'), `${path.join('{schemas}', path.basename(config.schemas[schema]))} does not exist. Creating...`);
127
141
  await updateJsonSchema(jsonSchemas[schema], config.schemas[schema]);
128
142
  }
129
143
  }
@@ -142,17 +156,17 @@ const checkConfig = async (config, configPath) => {
142
156
  export const getConfig = async (overrideConfigDir, overrideConfig) => {
143
157
  const configDir = overrideConfigDir ?? path.resolve(envPaths('job-queue').config);
144
158
  const configPath = path.resolve(configDir, 'config.json');
145
- await fs.mkdir(configDir, { recursive: true });
146
- if (!existsSync(configPath)) {
147
- console.log(chalk.blue('[i]'), `Creating config at '${configPath}'...`);
148
- const { encoded: config, decoded: decodedConfig } = await createConfig(configDir, overrideConfig);
149
- await fs.writeFile(configPath, JSON.stringify({
150
- $schema: decodedConfig.schemas['config'],
151
- ...config,
152
- }, undefined, ' '));
153
- }
154
- const configData = await makeJsonData(configPath, ConfigSchema);
155
- await checkConfig(configData.data, configPath);
159
+ if (!existsSync(configDir))
160
+ await fs.mkdir(configDir, { recursive: true });
161
+ // Get config data
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
156
164
  await updateNestedObject(configData.data, ConfigSchema.partial().decode(overrideConfig));
157
- return configData;
165
+ await checkConfigSchemas(configData.data, configPath);
166
+ return {
167
+ config: configData,
168
+ path: configPath,
169
+ hadToCreate,
170
+ };
158
171
  };
172
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/data/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,kBAAkB;AAElB,MAAM,eAAe,GAAG;IACtB,KAAK;IACL,UAAU;IACV,SAAS;IACT,aAAa;IACb,QAAQ;CACA,CAAC;AAGX,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC7C,kBAAkB;AAClB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sDAAsD,EAAC,CAAC;IAC3H,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAC,KAAK,EAAE,6BAA6B,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gEAAgE,EAAC,CAAC;IACnM,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,uEAAuE,EAAE,EAAC,KAAK,EAAE,kCAAkC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,yDAAyD,EAAC,CAAC;CACrQ,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,6DAA6D,EAAC,CAAC,CAAA;AAEhH,oIAAoI;AACpI,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;QAChB,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,8BAA8B,EAAC,CAAC;QAC1F,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,8DAA8D,EAAC,CAAC;KAClI,CAAC;IACF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC;QACnB,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,iCAAiC,EAAC,CAAC;QAChG,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,iEAAiE,EAAC,CAAC;KACrI,CAAC;IAEF,+DAA+D;IAC/D,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,iCAAiC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,SAAS,CAClL,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAChC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACxE,CACrC;IAED,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,2FAA2F,EAAC,CAAC;IAC3K,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAE,iEAAiE,CAAC;IACvH,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;IAC1H,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC/E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAY,EAAE;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CACxD,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,aAAa;YACtD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,CAAC,GAAU,EAAE;gBACX,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;IACX,CAAC,EACD,IAAI,CACL,CAAC;IACF,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAyC;IACxD,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,iBAAiB;IAC9B,MAAM,EAAE,YAAY;CACZ,CAAC;AAEX,UAAU;AAEV,MAAM,kBAAkB,GAAG,KAAK,EAAqC,yDAAyD;AAC5H,IAAO,EACP,MAAkB,EACH,EAAE;IACjB,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAA4B,CAAC;IACjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IACE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ;YAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI;YAClB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACzB,CAAC;YACD,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBACjC,OAAO,EAAE,aAAa,GAAG,CAAC,QAAQ,EAAE,uDAAuD;aAC5F,CAAC,CAAC;YACH,IAAI,YAAY;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,sBAAsB;AAEtB,MAAM,eAAe,GAAG,CAAC,aAAa,EAAU,EAAE,CAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAE5E,MAAM,uBAAuB,GAAG,CAAC,EAAE,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEjE,MAAM,gBAAgB,GAAG,KAAK,EAC5B,YAAuB,EACvB,aAAqB,EACN,EAAE;IACjB,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,OAAO,MAAM,EAAE,CAAC,SAAS,CACvB,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;QACE,GAAG,EAAE,eAAe,CAAC,aAAa,CAAC;QACnC,GAAG,YAAY,CAAC,YAAY,CAAC;YAC3B,EAAE,EAAE,OAAO;YACX,eAAe,EAAE,OAAO;SACzB,CAAC;KACH,EACD,SAAS,EACT,IAAI,CACL,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB;AAEjB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAgD,EACxC,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE5D,MAAM,YAAY,GAAG,KAAK,EACxB,SAAiB,EACjB,QAA4B,EAC2B,EAAE;IACzD,MAAM,MAAM,GAAa;QACvB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;QAClD,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACxD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAC3C,GAAG,QAAQ;KACZ,CAAC;IACF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElD,UAAU;IACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EACjB,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAC/G,CAAC;YACF,MAAM,gBAAgB,CACpB,WAAW,CAAC,MAAM,CAAC,EACnB,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,MAAc,EACd,UAAkB,EACH,EAAE;IACjB,IAAI,CAAC;QACH,0DAA0D;QAC1D,MAAM,eAAe,GAAqB,EAAE,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAC9B,MAAM,CAAC,OAAO,CACoB,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC3B,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAC5B,QAAQ,EAAE,MAAM;iBACjB,CAAC,CACH,CAAC;gBAEF,MAAM,OAAO,GACX,UAAU,CAAC,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACnB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAChG,CAAC;oBACF,MAAM,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtE,CAAC;qBAAM,IAAI,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;oBACnC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EACjB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAC/F,CAAC;gBACF,MAAM,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBACjC,OAAO,EACL,2EAA2E;aAC9E,CAAC,CAAC;YACH,IAAI,YAAY;gBACd,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,UAAU,IAAI,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,iBAA0B,EAC1B,cAAkC,EAKjC,EAAE;IACH,MAAM,SAAS,GACb,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,kBAAkB;IAClB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,mBAAmB,CACjE,YAAY,EACZ,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,EACjD,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,EAC7C,KAAK,EACL,aAAa,CACd,CAAC;IAEF,0CAA0C;IAC1C,MAAM,kBAAkB,CACtB,UAAU,CAAC,IAAI,EACf,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAC9C,CAAC;IACF,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEtD,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,UAAU;QAChB,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC"}
@@ -1,9 +1,51 @@
1
1
  import { JobQueueSchema } from './jobqueue.js';
2
2
  import { ProjectPoolSchema } from './projectpool.js';
3
- import { ConfigSchema } from './config.js';
3
+ import { ConfigSchema, getDataPathFromConfig, toInputConfig, } from './config.js';
4
+ import { select } from '@inquirer/prompts';
5
+ import { ExitPromptError } from '@inquirer/core';
6
+ import { AbortError } from '../utils/index.js';
7
+ import chalk from 'chalk';
8
+ import { haveUserUpdateData } from '../utils/promptUser.js';
4
9
  export const dataNames = ['jobqueue', 'projectpool', 'config'];
5
10
  export const dataSchemas = {
6
11
  jobqueue: JobQueueSchema,
7
12
  projectpool: ProjectPoolSchema,
8
13
  config: ConfigSchema,
9
14
  };
15
+ export async function editData(data, configPath) {
16
+ try {
17
+ const target = await select({
18
+ message: 'Select data to edit',
19
+ choices: [
20
+ { name: 'jobqueue.json', value: 'jobqueue' },
21
+ { name: 'projectpool.json', value: 'projectpool' },
22
+ { name: 'config.json', value: 'config' },
23
+ ],
24
+ });
25
+ const targetSchema = dataSchemas[target];
26
+ const targetPath = target === 'config'
27
+ ? configPath
28
+ : getDataPathFromConfig(data.config.data[target]);
29
+ await haveUserUpdateData(targetSchema, target === 'config'
30
+ ? toInputConfig(data[target].data)
31
+ : data[target].data, {
32
+ editor: data.config.data.editor,
33
+ errorHead: 'Edit data failed',
34
+ jsonSchemaUrl: data.config.data.schemas[target],
35
+ file: { type: 'abs', path: targetPath },
36
+ }, {
37
+ preparse(raw) {
38
+ return raw.trim().length === 0
39
+ ? { errMessage: 'Cannot delete data file.' }
40
+ : 'continue';
41
+ },
42
+ });
43
+ }
44
+ catch (error) {
45
+ if (error instanceof AbortError || error instanceof ExitPromptError)
46
+ console.log(chalk.red('[e]'), error.message);
47
+ else
48
+ throw error;
49
+ }
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"}
@@ -1,17 +1,25 @@
1
1
  import * as z from 'zod';
2
- import { makeJsonData } from '../utils/jsonData.js';
3
2
  import { checkProjectName } from './projectpool.js';
4
- import { haveUserUpdateData } from '../utils/index.js';
3
+ import { makeGistData } from '../utils/gistData.js';
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
- export const getJobQueue = async (jsonPath) => await makeJsonData(jsonPath, JobQueueSchema);
17
+ const defaultJobQueue = { queue: [] };
18
+ // Methods
19
+ export const getJobQueue = async (jsonPath, jsonSchemaUrl, autoCreateFiles = false, editor) => {
20
+ const { data } = await getDataTargetNicely(JobQueueSchema, { name: 'jobqueue.json', expectedPath: jsonPath, jsonSchemaUrl }, async () => ({ encoded: defaultJobQueue }), autoCreateFiles);
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).");
22
+ };
15
23
  export const updateJob = async (job, projectPool, config) => {
16
24
  const pool = projectPool.data.pool;
17
25
  let userDeletedJob = false;
@@ -26,6 +34,7 @@ export const updateJob = async (job, projectPool, config) => {
26
34
  jsonSchemaUrl: config.schemas.job,
27
35
  }, {
28
36
  preparse(rawContents) {
37
+ // Check if user deleted the job
29
38
  if (rawContents.trim().length === 0) {
30
39
  userDeletedJob = true;
31
40
  return 'pass';
@@ -41,6 +50,7 @@ export const updateJob = async (job, projectPool, config) => {
41
50
  },
42
51
  });
43
52
  if (!userDeletedJob) {
53
+ // Make sure corresponding project is set to active
44
54
  const jobProject = pool.find((project) => project.name === updatedJob.project);
45
55
  if (jobProject.status !== 'active') {
46
56
  jobProject.status = 'active';
@@ -49,3 +59,4 @@ export const updateJob = async (job, projectPool, config) => {
49
59
  }
50
60
  return userDeletedJob ? 'deleted' : updatedJob;
51
61
  };
62
+ //# sourceMappingURL=jobqueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobqueue.js","sourceRoot":"","sources":["../../src/data/jobqueue.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,25 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import * as z from 'zod';
3
- import { makeJsonData } from '../utils/jsonData.js';
4
- import { haveUserUpdateData } from '../utils/index.js';
3
+ import { makeGistData } from '../utils/gistData.js';
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
- export const getProjectPool = async (jsonPath) => await makeJsonData(jsonPath, ProjectPoolSchema);
17
+ const defaultProjectPool = { pool: [] };
18
+ // Methods
19
+ export const getProjectPool = async (jsonPath, jsonSchemaUrl, autoCreateFiles = false, editor) => {
20
+ const { data } = await getDataTargetNicely(ProjectPoolSchema, { name: 'projectpool.json', expectedPath: jsonPath, jsonSchemaUrl }, async () => ({ encoded: defaultProjectPool }), autoCreateFiles);
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).");
22
+ };
15
23
  export const checkProjectName = (name, projects) => projects.some((project) => project.name === name);
16
24
  export const updateProject = async (project, projectPool, jobQueue, config) => {
17
25
  const pool = projectPool.data.pool;
@@ -28,6 +36,7 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
28
36
  jsonSchemaUrl: config.schemas.project,
29
37
  }, {
30
38
  preparse(rawContents) {
39
+ // Check if user deleted the project
31
40
  if (rawContents.trim().length === 0) {
32
41
  userDeletedProject = true;
33
42
  return 'pass';
@@ -48,6 +57,7 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
48
57
  return 'continue';
49
58
  },
50
59
  });
60
+ // Check if user wants to rename referencing jobs
51
61
  if (!userDeletedProject &&
52
62
  updatedProject.name !== project.name &&
53
63
  jobsReferencingProject.length > 0) {
@@ -61,5 +71,16 @@ export const updateProject = async (project, projectPool, jobQueue, config) => {
61
71
  await jobQueue.sync();
62
72
  }
63
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
+ }
64
84
  return userDeletedProject ? 'deleted' : updatedProject;
65
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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"}