@tasenor/common-node 1.9.137 → 1.9.139

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.
@@ -1,6 +1,7 @@
1
1
  import { TasenorPlugin, PluginCatalog, FilePath, DirectoryPath } from '@tasenor/common';
2
2
  interface PluginConfig {
3
3
  PLUGIN_PATH?: string;
4
+ INITIAL_PLUGIN_REPOS?: string;
4
5
  }
5
6
  type ConfigVariable = keyof PluginConfig;
6
7
  interface PluginState {
@@ -81,7 +82,15 @@ declare function pluginLocalPath(indexFilePath: FilePath): string | undefined;
81
82
  /**
82
83
  * Go through repository URLs and install all missing plugin repositories.
83
84
  */
84
- declare function updateRepositories(repos: string[], src: DirectoryPath, dst: DirectoryPath): Promise<boolean>;
85
+ declare function fetchRepositories(srcRoot: DirectoryPath): Promise<boolean>;
86
+ /**
87
+ * Go through repository URLs and install all missing plugin repositories.
88
+ */
89
+ declare function upgradeRepositories(srcRoot: DirectoryPath): Promise<boolean>;
90
+ /**
91
+ * Check that plugin directory does not have any extra files or that there are no missing plugin repositories.
92
+ */
93
+ declare function verifyPluginDir(): boolean;
85
94
  /**
86
95
  * Collection of file system and API related plugin handling functions for fetching, building and scanning.
87
96
  */
@@ -101,6 +110,8 @@ export declare const plugins: {
101
110
  sortPlugins: typeof sortPlugins;
102
111
  updatePluginIndex: typeof updatePluginIndex;
103
112
  updatePluginList: typeof updatePluginList;
104
- updateRepositories: typeof updateRepositories;
113
+ upgradeRepositories: typeof upgradeRepositories;
114
+ fetchRepositories: typeof fetchRepositories;
115
+ verifyPluginDir: typeof verifyPluginDir;
105
116
  };
106
117
  export {};
@@ -1,14 +1,16 @@
1
1
  import fs from 'fs';
2
- import glob from 'fast-glob';
2
+ import glob, { globSync } from 'fast-glob';
3
3
  import path from 'path';
4
- import { note, log, error, GET } from '@tasenor/common';
4
+ import { note, log, error, GET, warning } from '@tasenor/common';
5
5
  import { create } from 'ts-opaque';
6
6
  import { vault } from '../net';
7
7
  import { systemPiped } from '..';
8
8
  const PLUGIN_FIELDS = ['code', 'title', 'version', 'icon', 'releaseDate', 'use', 'type', 'description'];
9
+ const SAFE_PLUGIN_FILES = ['.gitkeep', 'index.json', 'index.jsx', 'workspace', '.keep'];
9
10
  // Internal configuration for the module.
10
11
  const config = {
11
- PLUGIN_PATH: undefined
12
+ PLUGIN_PATH: undefined,
13
+ INITIAL_PLUGIN_REPOS: undefined
12
14
  };
13
15
  /**
14
16
  * Get the configuration variable or throw an error.
@@ -274,18 +276,46 @@ function pluginLocalPath(indexFilePath) {
274
276
  return match[0].substring(1);
275
277
  }
276
278
  }
279
+ /**
280
+ * Calculate target directory for the repository.
281
+ */
282
+ function targetDir(repo) {
283
+ if (!config.PLUGIN_PATH)
284
+ throw new Error('config.PLUGIN_PATH not set.');
285
+ if (repo.startsWith('file://')) {
286
+ return path.join(config.PLUGIN_PATH, path.basename(repo));
287
+ }
288
+ else if (repo.startsWith('npm://')) {
289
+ const npm = repo.substring(6);
290
+ return path.join(config.PLUGIN_PATH, npm.replace(/@/g, '').replace(/[^a-zA-Z0-9]/g, '-'));
291
+ }
292
+ else {
293
+ return path.join(config.PLUGIN_PATH, repo.replace(/.*\//, '').replace('.git', ''));
294
+ }
295
+ }
277
296
  /**
278
297
  * Go through repository URLs and install all missing plugin repositories.
279
298
  */
280
- async function updateRepositories(repos, src, dst) {
299
+ async function fetchRepositories(srcRoot) {
281
300
  let changes = false;
282
- for (const repo of repos) {
283
- log(`Checking plugin repo ${repo}.`);
301
+ if (!config.INITIAL_PLUGIN_REPOS) {
302
+ warning('Cannot fetch plugin repos, since none defined in INITIAL_PLUGIN_REPOS.');
303
+ return false;
304
+ }
305
+ if (!config.PLUGIN_PATH) {
306
+ warning('Cannot fetch plugin repos, since PLUGIN_PATH not defined.');
307
+ return false;
308
+ }
309
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
310
+ const target = targetDir(repo);
311
+ if (fs.existsSync(target)) {
312
+ continue;
313
+ }
314
+ log(`Fetching plugin repo ${repo}.`);
284
315
  if (repo.startsWith('file://')) {
285
316
  // Handle local file.
286
- const source = path.join(src, repo.substring(7));
287
- const target = path.join(dst, path.basename(repo));
288
- if (fs.existsSync(src)) {
317
+ const source = path.join(srcRoot, repo.substring(7));
318
+ if (fs.existsSync(srcRoot)) {
289
319
  if (!fs.existsSync(target)) {
290
320
  log(` Linking repo ${source} => ${target}.`);
291
321
  const cmd = `ln -sf "${source}" "${target}"`;
@@ -299,28 +329,97 @@ async function updateRepositories(repos, src, dst) {
299
329
  }
300
330
  else if (repo.startsWith('npm://')) {
301
331
  const npm = repo.substring(6);
302
- const source = path.join(dst, 'package');
303
- const target = path.join(dst, npm.replace(/@/g, '').replace(/[^a-zA-Z0-9]/g, '-'));
304
- if (!fs.existsSync(target)) {
305
- log(` Downloading NPM ${npm}.`);
306
- const cmd = `cd "${dst}" && rm -fr "${source}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`;
307
- await systemPiped(cmd);
308
- changes = true;
309
- }
332
+ const source = path.join(config.PLUGIN_PATH, 'package');
333
+ log(` Downloading NPM ${npm}.`);
334
+ const cmd = `cd "${config.PLUGIN_PATH}" && rm -fr "${source}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`;
335
+ await systemPiped(cmd);
336
+ changes = true;
310
337
  }
311
338
  else {
312
339
  // By default, assume git repo.
313
- const target = path.join(dst, repo.replace(/.*\//, '').replace('.git', ''));
314
- if (!fs.existsSync(target)) {
315
- log(` Fetching plugin repo ${repo} to ${target}.`);
316
- const cmd = `cd "${dst}" && git clone "${repo}"`;
340
+ log(` Fetching plugin repo ${repo} to ${target}.`);
341
+ const cmd = `cd "${config.PLUGIN_PATH}" && git clone "${repo}"`;
342
+ await systemPiped(cmd);
343
+ changes = true;
344
+ }
345
+ }
346
+ return changes;
347
+ }
348
+ /**
349
+ * Go through repository URLs and install all missing plugin repositories.
350
+ */
351
+ async function upgradeRepositories(srcRoot) {
352
+ let changes = false;
353
+ if (!config.INITIAL_PLUGIN_REPOS) {
354
+ warning('Cannot fetch plugin repos, since none defined in INITIAL_PLUGIN_REPOS.');
355
+ return false;
356
+ }
357
+ if (!config.PLUGIN_PATH) {
358
+ warning('Cannot fetch plugin repos, since PLUGIN_PATH not defined.');
359
+ return false;
360
+ }
361
+ changes = await fetchRepositories(srcRoot);
362
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
363
+ log(`Upgrading plugin repo '${repo}'...`);
364
+ const target = targetDir(repo);
365
+ if (repo.startsWith('file://')) {
366
+ log(' Nothing to do for symlink.');
367
+ }
368
+ else if (repo.startsWith('npm://')) {
369
+ const npm = repo.substring(6);
370
+ const cmd = `npm view ${npm} version`;
371
+ const newVersion = (await systemPiped(cmd, true))?.trim();
372
+ const oldVersion = JSON.parse(fs.readFileSync(path.join(target, 'package.json')).toString('utf-8')).version;
373
+ if (newVersion === oldVersion) {
374
+ log(` The latest version ${newVersion} already installed.`);
375
+ }
376
+ else {
377
+ log(` Upgrading ${npm} from version ${oldVersion} to ${newVersion}.`);
378
+ const source = path.join(config.PLUGIN_PATH, 'package');
379
+ const cmd = `cd "${config.PLUGIN_PATH}" && rm -fr "${source}" "${target}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`;
317
380
  await systemPiped(cmd);
318
381
  changes = true;
319
382
  }
320
383
  }
384
+ else {
385
+ const cmd = `cd "${config.PLUGIN_PATH}" && git pull`;
386
+ await systemPiped(cmd);
387
+ // Note, too lazy to detect changes. Is the return value even used?
388
+ }
321
389
  }
322
390
  return changes;
323
391
  }
392
+ /**
393
+ * Check that plugin directory does not have any extra files or that there are no missing plugin repositories.
394
+ */
395
+ function verifyPluginDir() {
396
+ if (!config.INITIAL_PLUGIN_REPOS) {
397
+ warning('No plugin repositories to verify.');
398
+ return true;
399
+ }
400
+ let fail = false;
401
+ const okayFiles = new Set(SAFE_PLUGIN_FILES);
402
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
403
+ const dir = targetDir(repo);
404
+ okayFiles.add(path.basename(dir));
405
+ if (!fs.existsSync(dir)) {
406
+ error(`Requiered repository ${repo} does not exist.`);
407
+ fail = true;
408
+ }
409
+ }
410
+ if (config.PLUGIN_PATH) {
411
+ for (const fullPath of globSync(config.PLUGIN_PATH + '/**', { dot: true, deep: 2 })) {
412
+ const localPath = fullPath.replace(config.PLUGIN_PATH + '/', '');
413
+ const file = localPath.indexOf('/') < 0 ? localPath : path.dirname(localPath);
414
+ if (!okayFiles.has(file)) {
415
+ error(`Plugin directory has unrecognized file/dir '${fullPath}'.`);
416
+ }
417
+ }
418
+ }
419
+ if (!fail)
420
+ log('Plugin directory verified as correct.');
421
+ return fail;
422
+ }
324
423
  /**
325
424
  * Collection of file system and API related plugin handling functions for fetching, building and scanning.
326
425
  */
@@ -340,6 +439,8 @@ export const plugins = {
340
439
  sortPlugins,
341
440
  updatePluginIndex,
342
441
  updatePluginList,
343
- updateRepositories
442
+ upgradeRepositories,
443
+ fetchRepositories,
444
+ verifyPluginDir,
344
445
  };
345
446
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/plugins/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/plugins/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAA+C,IAAI,EAAE,GAAG,EAAiB,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC5H,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AAEhC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;AACvG,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;AAQvF,yCAAyC;AACzC,MAAM,MAAM,GAAiB;IAC3B,WAAW,EAAE,SAAS;IACtB,oBAAoB,EAAE,SAAS;CAChC,CAAA;AAMD;;;GAGG;AACH,SAAS,SAAS,CAAC,QAAwB;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,iCAAiC,CAAC,CAAA;KACrF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,QAAwB,EAAE,KAAa;IACxD,IAAI,QAAQ,IAAI,MAAM,EAAE;QACtB,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;KACzB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,GAAG,CAAC,CAAA;KAClE;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,OAAwB;IAC3C,IAAI,CAAC,OAAO,EAAE;QACZ,KAAK,CAAC,qCAAqC,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;KACV;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAsB,EAAE,KAAsB;IACjE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;QACjC,OAAO,KAAK,CAAA;KACb;IACD,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC1B,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/B,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACvD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAC/B;YACA,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,CAAA;IACnE,IAAI,CAAC,8BAA8B,SAAS,IAAI,CAAC,CAAA;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;KAChE;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAO;IAC9B,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,CAAA;IACnE,IAAI,CAAC,2BAA2B,SAAS,IAAI,CAAC,CAAA;IAC9C,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACtE,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAqB,EAAE,UAAuC,SAAS;IAChG,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACrD,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;KACrE;IACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1B,eAAe,CAAC,OAAO,CAAC,CAAA;IAExB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,UAAuC,SAAS;IACzF,MAAM,KAAK,GAAG,OAAO,IAAI,eAAe,EAAE,CAAA;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACzD,OAAO,MAAM,IAAI,IAAI,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,uBAAuB;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAC5C,IAAI,GAAG,EAAE;QACP,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,UAAiB,CAAC,CAAA;QAClD,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,OAAO,CAAC,IAAkC,CAAA;SAClD;KACF;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IACvD,GAAG,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAA;IACzC,IAAI,OAAO,GAAe,EAAE,CAAA;IAC5B,IAAI,YAAY,GAAe,EAAE,CAAA;IAEjC,0CAA0C;IAC1C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAClD,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAa,CAClE,CACF,CAAA;QAED,YAAY,GAAG,YAAY,CAAC,MAAM,CAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CACxD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAa,CACtE,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAW,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IAEjE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,UAAoB;IACtC,MAAM,MAAM,GAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAa,CAAA;IAC7E,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9D,MAAM,WAAW,GAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAa,CAAA;IACtF,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAClF,IAAI,EAAE,IAAI,OAAO,EAAE;QACjB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;YACjC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,+BAA+B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,qBAAqB,MAAM,UAAU,WAAW,IAAI,CAAC,CAAA;aACrL;SACF;KACF;IACD,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,IAAI,CAAC,CAAA;KAC/D;IAED,OAAO,EAAE,IAAI,OAAwB,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,SAAmB;IACvC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,mBAAmB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAEvG,MAAM,IAAI,GAAkB;QAC1B,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;QACvB,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;QACpB,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gBAAgB;KAC9B,CAAA;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrE,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAC1B;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAmB;IAC5C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,gBAAgB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAEpG,MAAM,IAAI,GAAkB;QAC1B,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;QACvB,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;QACpB,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gBAAgB;KAC9B,CAAA;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrE,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAC1B;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAqB;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjE,IAAI,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;KAChE;IACD,OAAO;QACL,SAAS,EAAE,KAAK;KACjB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAqB,EAAE,KAAkB;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAClD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACpE,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,MAAqB;IACxC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAA;AAC1C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB;IAC7B,IAAI,OAAO,GAAoB,EAAE,CAAA;IAEjC,gCAAgC;IAChC,KAAK,MAAM,MAAM,IAAI,MAAM,uBAAuB,EAAE,EAAE;QACpD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;KAC9B;IAED,iCAAiC;IACjC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAA;IAEhB,KAAK,MAAM,MAAM,IAAI,MAAM,WAAW,EAAE,EAAE;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;YAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAA;SACpC;QACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAA;QACtD,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;YACvB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAA;SACvD;KACF;IAED,wCAAwC;IACxC,MAAM,GAAG,GAAG,eAAe,EAAE,CAAA;IAC7B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;QAC9B,eAAe,CAAC,OAAO,CAAC,CAAA;KACzB;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,aAAuB;IAC9C,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACtE,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KAC7B;AACH,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACvE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAkB,CAAA;KAC3E;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAkB,CAAA;KAC3G;SAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAkB,CAAA;KACpG;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,OAAsB;IACrD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAChC,OAAO,CAAC,wEAAwE,CAAC,CAAA;QACjF,OAAO,KAAK,CAAA;KACb;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,2DAA2D,CAAC,CAAA;QACpE,OAAO,KAAK,CAAA;KACb;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACzB,SAAQ;SACT;QACD,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAA;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC9B,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACpD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;oBAC1B,GAAG,CAAC,kBAAkB,MAAM,OAAO,MAAM,GAAG,CAAC,CAAA;oBAC7C,MAAM,GAAG,GAAG,WAAW,MAAM,MAAM,MAAM,GAAG,CAAA;oBAC5C,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;oBACtB,OAAO,GAAG,IAAI,CAAA;iBACf;aACF;iBAAM;gBACL,KAAK,CAAC,uBAAuB,IAAI,aAAa,CAAC,CAAA;aAChD;SACF;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACvD,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC,CAAA;YAChC,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,WAAW,gBAAgB,MAAM,iBAAiB,GAAG,iDAAiD,MAAM,MAAM,MAAM,GAAG,CAAA;YACrJ,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,GAAG,IAAI,CAAA;SACf;aAAM;YACL,+BAA+B;YAC/B,GAAG,CAAC,0BAA0B,IAAI,OAAO,MAAM,GAAG,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,WAAW,mBAAmB,IAAI,GAAG,CAAA;YAC/D,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,GAAG,IAAI,CAAA;SACf;KACF;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAAsB;IACvD,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAChC,OAAO,CAAC,wEAAwE,CAAC,CAAA;QACjF,OAAO,KAAK,CAAA;KACb;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,2DAA2D,CAAC,CAAA;QACpE,OAAO,KAAK,CAAA;KACb;IAED,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QAC1D,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC9B,GAAG,CAAC,8BAA8B,CAAC,CAAA;SACpC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC7B,MAAM,GAAG,GAAG,YAAY,GAAG,UAAU,CAAA;YACrC,MAAM,UAAU,GAAG,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;YAC3G,IAAI,UAAU,KAAK,UAAU,EAAE;gBAC7B,GAAG,CAAC,wBAAwB,UAAU,qBAAqB,CAAC,CAAA;aAC7D;iBAAM;gBACL,GAAG,CAAC,eAAe,GAAG,iBAAiB,UAAU,OAAO,UAAU,GAAG,CAAC,CAAA;gBACtE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;gBACvD,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,WAAW,gBAAgB,MAAM,MAAM,MAAM,iBAAiB,GAAG,iDAAiD,MAAM,MAAM,MAAM,GAAG,CAAA;gBACjK,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;gBACtB,OAAO,GAAG,IAAI,CAAA;aACf;SACF;aAAM;YACL,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,WAAW,eAAe,CAAA;YACpD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;YACtB,mEAAmE;SACpE;KACF;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAChC,OAAO,CAAC,mCAAmC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;KACZ;IACD,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC3B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,KAAK,CAAC,wBAAwB,IAAI,kBAAkB,CAAC,CAAA;YACrD,IAAI,GAAG,IAAI,CAAA;SACZ;KACF;IACD,IAAI,MAAM,CAAC,WAAW,EAAE;QACtB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;YACnF,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,EAAE,CAAC,CAAA;YAChE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC7E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACxB,KAAK,CAAC,+CAA+C,QAAQ,IAAI,CAAC,CAAA;aACnE;SACF;KACF;IAED,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,uCAAuC,CAAC,CAAA;IAEvD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,SAAS;IACT,WAAW;IACX,eAAe;IACf,eAAe;IACf,eAAe;IACf,WAAW;IACX,eAAe;IACf,eAAe;IACf,WAAW;IACX,SAAS;IACT,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;CAChB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tasenor/common-node",
3
- "version": "1.9.137",
3
+ "version": "1.9.139",
4
4
  "description": "Common Node-parts of Tasenor project",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -36,7 +36,7 @@
36
36
  "sqlite3": "^5.1.6",
37
37
  "tar": "^6.1.15",
38
38
  "ts-opaque": "^3.0.1",
39
- "@tasenor/common": "1.9.137"
39
+ "@tasenor/common": "1.9.139"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@jest/globals": "^29.6.1",
@@ -45,7 +45,7 @@
45
45
  "jest": "^29.6.1",
46
46
  "ts-jest": "^29.1.1",
47
47
  "typescript": "^5.1.6",
48
- "@tasenor/config": "1.9.137",
48
+ "@tasenor/config": "1.9.139",
49
49
  "eslint-config-tasenor": "0.0.0"
50
50
  },
51
51
  "scripts": {
@@ -1,21 +1,24 @@
1
1
  import fs from 'fs'
2
- import glob from 'fast-glob'
2
+ import glob, { globSync } from 'fast-glob'
3
3
  import path from 'path'
4
- import { TasenorPlugin, PluginCatalog, FilePath, Url, note, log, DirectoryPath, error, GET } from '@tasenor/common'
4
+ import { TasenorPlugin, PluginCatalog, FilePath, Url, note, log, DirectoryPath, error, GET, warning } from '@tasenor/common'
5
5
  import { create } from 'ts-opaque'
6
6
  import { vault } from '../net'
7
7
  import { systemPiped } from '..'
8
8
 
9
9
  const PLUGIN_FIELDS = ['code', 'title', 'version', 'icon', 'releaseDate', 'use', 'type', 'description']
10
+ const SAFE_PLUGIN_FILES = ['.gitkeep', 'index.json', 'index.jsx', 'workspace', '.keep']
10
11
 
11
12
  interface PluginConfig {
12
13
  PLUGIN_PATH?: string
14
+ INITIAL_PLUGIN_REPOS?: string
13
15
  }
14
16
  type ConfigVariable = keyof PluginConfig
15
17
 
16
18
  // Internal configuration for the module.
17
19
  const config: PluginConfig = {
18
- PLUGIN_PATH: undefined
20
+ PLUGIN_PATH: undefined,
21
+ INITIAL_PLUGIN_REPOS: undefined
19
22
  }
20
23
 
21
24
  interface PluginState {
@@ -328,18 +331,44 @@ function pluginLocalPath(indexFilePath: FilePath): string | undefined {
328
331
  }
329
332
  }
330
333
 
334
+ /**
335
+ * Calculate target directory for the repository.
336
+ */
337
+ function targetDir(repo: string): DirectoryPath {
338
+ if (!config.PLUGIN_PATH) throw new Error('config.PLUGIN_PATH not set.')
339
+ if (repo.startsWith('file://')) {
340
+ return path.join(config.PLUGIN_PATH, path.basename(repo)) as DirectoryPath
341
+ } else if (repo.startsWith('npm://')) {
342
+ const npm = repo.substring(6)
343
+ return path.join(config.PLUGIN_PATH, npm.replace(/@/g, '').replace(/[^a-zA-Z0-9]/g, '-')) as DirectoryPath
344
+ } else {
345
+ return path.join(config.PLUGIN_PATH, repo.replace(/.*\//, '').replace('.git', '')) as DirectoryPath
346
+ }
347
+ }
348
+
331
349
  /**
332
350
  * Go through repository URLs and install all missing plugin repositories.
333
351
  */
334
- async function updateRepositories(repos: string[], src: DirectoryPath, dst: DirectoryPath): Promise<boolean> {
352
+ async function fetchRepositories(srcRoot: DirectoryPath): Promise<boolean> {
335
353
  let changes = false
336
- for (const repo of repos) {
337
- log(`Checking plugin repo ${repo}.`)
354
+ if (!config.INITIAL_PLUGIN_REPOS) {
355
+ warning('Cannot fetch plugin repos, since none defined in INITIAL_PLUGIN_REPOS.')
356
+ return false
357
+ }
358
+ if (!config.PLUGIN_PATH) {
359
+ warning('Cannot fetch plugin repos, since PLUGIN_PATH not defined.')
360
+ return false
361
+ }
362
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
363
+ const target = targetDir(repo)
364
+ if (fs.existsSync(target)) {
365
+ continue
366
+ }
367
+ log(`Fetching plugin repo ${repo}.`)
338
368
  if (repo.startsWith('file://')) {
339
369
  // Handle local file.
340
- const source = path.join(src, repo.substring(7))
341
- const target = path.join(dst, path.basename(repo))
342
- if (fs.existsSync(src)) {
370
+ const source = path.join(srcRoot, repo.substring(7))
371
+ if (fs.existsSync(srcRoot)) {
343
372
  if (!fs.existsSync(target)) {
344
373
  log(` Linking repo ${source} => ${target}.`)
345
374
  const cmd = `ln -sf "${source}" "${target}"`
@@ -351,29 +380,101 @@ async function updateRepositories(repos: string[], src: DirectoryPath, dst: Dire
351
380
  }
352
381
  } else if (repo.startsWith('npm://')) {
353
382
  const npm = repo.substring(6)
354
- const source = path.join(dst, 'package')
355
- const target = path.join(dst, npm.replace(/@/g, '').replace(/[^a-zA-Z0-9]/g, '-'))
356
- if (!fs.existsSync(target)) {
357
- log(` Downloading NPM ${npm}.`)
358
- const cmd = `cd "${dst}" && rm -fr "${source}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`
359
- await systemPiped(cmd)
360
- changes = true
361
- }
383
+ const source = path.join(config.PLUGIN_PATH, 'package')
384
+ log(` Downloading NPM ${npm}.`)
385
+ const cmd = `cd "${config.PLUGIN_PATH}" && rm -fr "${source}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`
386
+ await systemPiped(cmd)
387
+ changes = true
362
388
  } else {
363
389
  // By default, assume git repo.
364
- const target = path.join(dst, repo.replace(/.*\//, '').replace('.git', ''))
365
- if (!fs.existsSync(target)) {
366
- log(` Fetching plugin repo ${repo} to ${target}.`)
367
- const cmd = `cd "${dst}" && git clone "${repo}"`
390
+ log(` Fetching plugin repo ${repo} to ${target}.`)
391
+ const cmd = `cd "${config.PLUGIN_PATH}" && git clone "${repo}"`
392
+ await systemPiped(cmd)
393
+ changes = true
394
+ }
395
+ }
396
+
397
+ return changes
398
+ }
399
+
400
+ /**
401
+ * Go through repository URLs and install all missing plugin repositories.
402
+ */
403
+ async function upgradeRepositories(srcRoot: DirectoryPath): Promise<boolean> {
404
+ let changes = false
405
+ if (!config.INITIAL_PLUGIN_REPOS) {
406
+ warning('Cannot fetch plugin repos, since none defined in INITIAL_PLUGIN_REPOS.')
407
+ return false
408
+ }
409
+ if (!config.PLUGIN_PATH) {
410
+ warning('Cannot fetch plugin repos, since PLUGIN_PATH not defined.')
411
+ return false
412
+ }
413
+
414
+ changes = await fetchRepositories(srcRoot)
415
+
416
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
417
+ log(`Upgrading plugin repo '${repo}'...`)
418
+ const target = targetDir(repo)
419
+ if (repo.startsWith('file://')) {
420
+ log(' Nothing to do for symlink.')
421
+ } else if (repo.startsWith('npm://')) {
422
+ const npm = repo.substring(6)
423
+ const cmd = `npm view ${npm} version`
424
+ const newVersion = (await systemPiped(cmd, true))?.trim()
425
+ const oldVersion = JSON.parse(fs.readFileSync(path.join(target, 'package.json')).toString('utf-8')).version
426
+ if (newVersion === oldVersion) {
427
+ log(` The latest version ${newVersion} already installed.`)
428
+ } else {
429
+ log(` Upgrading ${npm} from version ${oldVersion} to ${newVersion}.`)
430
+ const source = path.join(config.PLUGIN_PATH, 'package')
431
+ const cmd = `cd "${config.PLUGIN_PATH}" && rm -fr "${source}" "${target}" && npm view ${npm} dist.tarball | xargs curl -s | tar xz && mv "${source}" "${target}"`
368
432
  await systemPiped(cmd)
369
433
  changes = true
370
434
  }
435
+ } else {
436
+ const cmd = `cd "${config.PLUGIN_PATH}" && git pull`
437
+ await systemPiped(cmd)
438
+ // Note, too lazy to detect changes. Is the return value even used?
371
439
  }
372
440
  }
373
441
 
374
442
  return changes
375
443
  }
376
444
 
445
+ /**
446
+ * Check that plugin directory does not have any extra files or that there are no missing plugin repositories.
447
+ */
448
+ function verifyPluginDir(): boolean {
449
+ if (!config.INITIAL_PLUGIN_REPOS) {
450
+ warning('No plugin repositories to verify.')
451
+ return true
452
+ }
453
+ let fail = false
454
+ const okayFiles = new Set(SAFE_PLUGIN_FILES)
455
+ for (const repo of config.INITIAL_PLUGIN_REPOS?.split(' ')) {
456
+ const dir = targetDir(repo)
457
+ okayFiles.add(path.basename(dir))
458
+ if (!fs.existsSync(dir)) {
459
+ error(`Requiered repository ${repo} does not exist.`)
460
+ fail = true
461
+ }
462
+ }
463
+ if (config.PLUGIN_PATH) {
464
+ for (const fullPath of globSync(config.PLUGIN_PATH + '/**', { dot: true, deep: 2 })) {
465
+ const localPath = fullPath.replace(config.PLUGIN_PATH + '/', '')
466
+ const file = localPath.indexOf('/') < 0 ? localPath : path.dirname(localPath)
467
+ if (!okayFiles.has(file)) {
468
+ error(`Plugin directory has unrecognized file/dir '${fullPath}'.`)
469
+ }
470
+ }
471
+ }
472
+
473
+ if (!fail) log('Plugin directory verified as correct.')
474
+
475
+ return fail
476
+ }
477
+
377
478
  /**
378
479
  * Collection of file system and API related plugin handling functions for fetching, building and scanning.
379
480
  */
@@ -393,5 +494,7 @@ export const plugins = {
393
494
  sortPlugins,
394
495
  updatePluginIndex,
395
496
  updatePluginList,
396
- updateRepositories
497
+ upgradeRepositories,
498
+ fetchRepositories,
499
+ verifyPluginDir,
397
500
  }