@eik/cli 3.0.0-next.2 → 3.0.2

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.
Files changed (95) hide show
  1. package/CHANGELOG.md +145 -9
  2. package/classes/alias.js +49 -22
  3. package/classes/index.js +47 -23
  4. package/classes/integrity.js +27 -16
  5. package/classes/login.js +21 -7
  6. package/classes/meta.js +20 -12
  7. package/classes/ping.js +20 -9
  8. package/classes/publish/map.js +33 -10
  9. package/classes/publish/package/index.js +54 -17
  10. package/classes/publish/package/tasks/check-bundle-sizes.js +7 -11
  11. package/classes/publish/package/tasks/check-if-already-published.js +8 -11
  12. package/classes/publish/package/tasks/cleanup.js +7 -9
  13. package/classes/publish/package/tasks/create-temp-directory.js +5 -9
  14. package/classes/publish/package/tasks/create-zip-file.js +6 -11
  15. package/classes/publish/package/tasks/dry-run.js +4 -8
  16. package/classes/publish/package/tasks/save-metafile.js +5 -7
  17. package/classes/publish/package/tasks/task.js +3 -5
  18. package/classes/publish/package/tasks/upload-files.js +16 -17
  19. package/classes/publish/package/tasks/validate-input.js +4 -8
  20. package/classes/version.js +38 -21
  21. package/commands/alias.js +51 -71
  22. package/commands/index.js +27 -0
  23. package/commands/init.js +69 -52
  24. package/commands/integrity.js +15 -32
  25. package/commands/login.js +23 -35
  26. package/commands/map-alias.js +95 -0
  27. package/commands/map.js +90 -0
  28. package/commands/meta.js +12 -29
  29. package/commands/npm-alias.js +90 -0
  30. package/commands/package-alias.js +102 -0
  31. package/commands/ping.js +11 -21
  32. package/commands/publish.js +82 -138
  33. package/commands/version.js +16 -33
  34. package/formatters/alias.js +4 -14
  35. package/formatters/artifact.js +4 -8
  36. package/formatters/file.js +3 -10
  37. package/formatters/index.js +5 -5
  38. package/formatters/version.js +5 -12
  39. package/index.js +53 -12
  40. package/package.json +49 -52
  41. package/readme.md +16 -4
  42. package/types/classes/alias.d.ts +60 -0
  43. package/types/classes/index.d.ts +37 -0
  44. package/types/classes/integrity.d.ts +35 -0
  45. package/types/classes/login.d.ts +25 -0
  46. package/types/classes/meta.d.ts +28 -0
  47. package/types/classes/ping.d.ts +23 -0
  48. package/types/classes/publish/map.d.ts +51 -0
  49. package/types/classes/publish/package/index.d.ts +94 -0
  50. package/types/classes/publish/package/tasks/check-bundle-sizes.d.ts +4 -0
  51. package/types/classes/publish/package/tasks/check-if-already-published.d.ts +4 -0
  52. package/types/classes/publish/package/tasks/cleanup.d.ts +4 -0
  53. package/types/classes/publish/package/tasks/create-temp-directory.d.ts +4 -0
  54. package/types/classes/publish/package/tasks/create-zip-file.d.ts +4 -0
  55. package/types/classes/publish/package/tasks/dry-run.d.ts +7 -0
  56. package/types/classes/publish/package/tasks/save-metafile.d.ts +4 -0
  57. package/types/classes/publish/package/tasks/task.d.ts +8 -0
  58. package/types/classes/publish/package/tasks/upload-files.d.ts +4 -0
  59. package/types/classes/publish/package/tasks/validate-input.d.ts +4 -0
  60. package/types/classes/version.d.ts +43 -0
  61. package/types/utils/hash/compare.d.ts +2 -0
  62. package/types/utils/hash/file.d.ts +2 -0
  63. package/types/utils/hash/files.d.ts +2 -0
  64. package/types/utils/hash/index.d.ts +9 -0
  65. package/types/utils/http/index.d.ts +12 -0
  66. package/types/utils/http/integrity.d.ts +2 -0
  67. package/types/utils/http/latest-version.d.ts +2 -0
  68. package/types/utils/http/request.d.ts +33 -0
  69. package/types/utils/http/versions.d.ts +5 -0
  70. package/types/utils/index.d.ts +6 -0
  71. package/types/utils/json/index.d.ts +9 -0
  72. package/types/utils/json/read.d.ts +5 -0
  73. package/types/utils/json/write-eik.d.ts +5 -0
  74. package/types/utils/json/write.d.ts +5 -0
  75. package/types/utils/logger.d.ts +33 -0
  76. package/types/utils/type-slug.d.ts +2 -0
  77. package/types/utils/type-title.d.ts +2 -0
  78. package/utils/hash/compare.js +1 -3
  79. package/utils/hash/file.js +3 -5
  80. package/utils/hash/files.js +4 -6
  81. package/utils/hash/index.js +4 -4
  82. package/utils/http/index.js +6 -5
  83. package/utils/http/integrity.js +2 -5
  84. package/utils/http/latest-version.js +2 -5
  85. package/utils/http/request.js +25 -19
  86. package/utils/http/versions.js +2 -5
  87. package/utils/index.js +6 -4
  88. package/utils/json/index.js +4 -4
  89. package/utils/json/read.js +5 -7
  90. package/utils/json/write-eik.js +4 -6
  91. package/utils/json/write.js +4 -6
  92. package/utils/logger.js +2 -5
  93. package/utils/type-slug.js +1 -1
  94. package/utils/type-title.js +1 -1
  95. package/utils/get-cwd.js +0 -14
package/commands/alias.js CHANGED
@@ -1,60 +1,51 @@
1
- /* eslint-disable no-nested-ternary */
2
- const ora = require('ora');
3
- const { configStore, getDefaults } = require('@eik/common-config-loader');
4
- const { getCWD, logger } = require('../utils');
1
+ import ora from 'ora';
2
+ import semver from 'semver';
3
+ import Alias from '../classes/alias.js';
4
+ import { logger, getDefaults } from '../utils/index.js';
5
+ import { Alias as AliasFormatter } from '../formatters/index.js';
5
6
 
6
- const Alias = require('../classes/alias');
7
- const { Alias: AliasFormatter } = require('../formatters');
7
+ export const command = 'alias [name] [version] [alias]';
8
8
 
9
- exports.command = 'alias <name> <version> <alias>';
9
+ export const aliases = ['a'];
10
10
 
11
- exports.aliases = [
12
- 'ma',
13
- 'pa',
14
- 'pkg-alias',
15
- 'na',
16
- 'dep-alias',
17
- 'dependency-alias',
18
- ];
11
+ export const describe = `Create or update a semver major alias for a package, NPM package or import map as identified by its name and version. A package with the given name and version must already exist on the Eik server. The alias should be the semver major part of the package version. Eg. for a package of version 5.4.3, you should use 5 as the alias. The alias type (npm, map, package) is detected from eik.json in the current working directory.`;
19
12
 
20
- exports.describe = `Create a semver major alias for a package or an import map as identified by its name and version.
21
- A package or import map with the given name and version must already exist on the Eik server
22
- Alias should be the semver major part of the version.
23
- Eg. For a package or import map of version 5.4.3, you should use 5 as the alias`;
24
-
25
- exports.builder = (yargs) => {
26
- const cwd = getCWD();
27
- const defaults = getDefaults(cwd);
13
+ export const builder = (yargs) => {
14
+ const defaults = getDefaults(yargs.argv.config || yargs.argv.cwd);
28
15
 
29
16
  yargs
30
17
  .positional('name', {
31
- describe: `Name of package or map that is to be aliased`,
18
+ describe: 'Name matching a package or import map on the Eik server',
32
19
  type: 'string',
20
+ // @ts-expect-error
21
+ default: defaults.name,
33
22
  })
34
23
  .positional('version', {
35
- describe: `Version for package or map that is to be aliased`,
24
+ describe: 'The version the alias should redirect to',
36
25
  type: 'string',
26
+ // @ts-expect-error
27
+ default: defaults.version,
37
28
  })
38
29
  .positional('alias', {
39
- describe: `Alias for a semver version. Should be the semver major component of version.`,
30
+ describe:
31
+ 'Alias, should be the semver major component of version. Eg. 1.0.0 should be given the alias 1',
40
32
  type: 'string',
33
+ // @ts-expect-error
34
+ default: defaults.version ? semver.major(defaults.version) : null,
41
35
  });
42
36
 
43
37
  yargs.options({
44
38
  server: {
45
39
  alias: 's',
46
- describe: 'Specify location of Eik server.',
40
+ describe: 'Specify location of Eik asset server.',
41
+ // @ts-expect-error
47
42
  default: defaults.server,
48
43
  },
49
- cwd: {
50
- alias: 'c',
51
- describe: 'Alter current working directory.',
52
- default: defaults.cwd,
53
- },
54
- debug: {
55
- describe: 'Log additional messages',
56
- default: false,
57
- type: 'boolean',
44
+ type: {
45
+ describe:
46
+ 'Alter the alias type. Default is detected from eik.json. Valid values are `package`, `npm`, or `map` Eg. --type npm',
47
+ // @ts-expect-error
48
+ default: defaults.type,
58
49
  },
59
50
  token: {
60
51
  describe:
@@ -64,62 +55,51 @@ exports.builder = (yargs) => {
64
55
  },
65
56
  });
66
57
 
58
+ // @ts-expect-error
67
59
  yargs.default('token', defaults.token, defaults.token ? '######' : '');
68
60
 
69
- yargs.example(`eik alias my-app 1.6.2 1`);
70
- yargs.example(`eik alias my-map 1.0.1 1`);
71
- yargs.example(`eik alias lodash 4.17.19 4`);
61
+ yargs.example(`eik alias my-app 1.0.0 1`);
62
+ yargs.example(`eik alias my-app 1.7.3 1`);
63
+ yargs.example(`eik alias my-app 6.3.1 6`);
72
64
  yargs.example(
73
- `eik alias my-map 6.3.1 6 --server https://assets.myeikserver.com`,
65
+ `eik alias my-app 6.3.1 6 --server https://assets.myeikserver.com`,
74
66
  );
75
- yargs.example(`eik alias my-map 4.2.2 4 --debug`);
67
+ yargs.example(`eik alias my-app 4.2.2 4 --debug`);
68
+ yargs.example(`eik alias my-app 4.2.2 4 --type package`);
76
69
  };
77
70
 
78
- exports.handler = async (argv) => {
71
+ export const handler = async (argv) => {
79
72
  const spinner = ora({ stream: process.stdout }).start('working...');
80
73
  let success = false;
81
- const { cwd, type: typeFromArgs, debug } = argv;
82
- const config = configStore.findInDirectory(cwd);
83
- const { server, type } = config;
84
-
85
- const typeOverride = typeFromArgs || type;
74
+ const { debug, server, type } = argv;
86
75
  const log = logger(spinner, debug);
87
-
88
- const isPackage = ['package', 'npm'].includes(typeOverride);
76
+ let af;
89
77
 
90
78
  try {
91
79
  const data = await new Alias({
92
- type:
93
- typeOverride === 'package'
94
- ? 'pkg'
95
- : typeOverride === 'npm'
96
- ? 'npm'
97
- : typeOverride === 'map'
98
- ? 'map'
99
- : 'pkg',
80
+ type,
100
81
  logger: log,
101
82
  ...argv,
102
83
  }).run();
103
84
 
85
+ // TODO: get rid of this rediculous formatter class idea that past me put here to irk present and future me.
86
+ // Smells like DRY silliness
87
+ af = new AliasFormatter(data);
88
+
104
89
  const createdOrUpdated = data.update ? 'Updated' : 'Created';
105
90
  log.info(
106
- `${createdOrUpdated} alias for ${isPackage ? 'package' : 'map'} "${
107
- data.name
108
- }". ("${data.version}" => "v${data.alias}")`,
91
+ `${createdOrUpdated} alias for "${type}" "${data.name}". ("${data.version}" => "v${data.alias}")`,
109
92
  );
110
93
  success = true;
111
-
112
- spinner.text = '';
113
- spinner.stopAndPersist();
114
- if (success) {
115
- new AliasFormatter(data).format(server);
116
- } else {
117
- process.exit(1);
118
- }
119
94
  } catch (err) {
120
- spinner.warn(err.message);
121
- spinner.text = '';
122
- spinner.stopAndPersist();
95
+ log.warn(err.message);
96
+ }
97
+
98
+ spinner.text = '';
99
+ spinner.stopAndPersist();
100
+ if (success) {
101
+ af?.format(server);
102
+ } else {
123
103
  process.exit(1);
124
104
  }
125
105
  };
@@ -0,0 +1,27 @@
1
+ import * as init from './init.js';
2
+ import * as integrity from './integrity.js';
3
+ import * as login from './login.js';
4
+ import * as mapAlias from './map-alias.js';
5
+ import * as map from './map.js';
6
+ import * as meta from './meta.js';
7
+ import * as npmAlias from './npm-alias.js';
8
+ import * as packageAlias from './package-alias.js';
9
+ import * as ping from './ping.js';
10
+ import * as publish from './publish.js';
11
+ import * as version from './version.js';
12
+ import * as alias from './alias.js';
13
+
14
+ export const commands = [
15
+ init,
16
+ integrity,
17
+ login,
18
+ mapAlias,
19
+ map,
20
+ meta,
21
+ npmAlias,
22
+ packageAlias,
23
+ ping,
24
+ publish,
25
+ version,
26
+ alias,
27
+ ];
package/commands/init.js CHANGED
@@ -1,41 +1,28 @@
1
- 'use strict';
1
+ import { join } from 'path';
2
+ import fs from 'fs';
3
+ import ora from 'ora';
4
+ import { logger } from '../utils/index.js';
2
5
 
3
- const { join } = require('path');
4
- const fs = require('fs');
5
- const ora = require('ora');
6
- const { logger } = require('../utils');
6
+ const command = 'init';
7
7
 
8
- exports.command = 'init';
8
+ const aliases = ['i'];
9
9
 
10
- exports.aliases = ['i'];
10
+ const describe = `Creates an eik.json file and saves it to the current working directory. If package.json exists in the directory its name and version will be used as the default. Override defaults using command line flags.`;
11
11
 
12
- exports.describe = `Creates a new default "eik.json" file and saves it to the current working directory
13
- Override default "eik.json" fields using command line flags --server, --name, --major, --js and --css`;
14
-
15
- exports.builder = (yargs) => {
12
+ const builder = (yargs) => {
16
13
  yargs.example('eik init');
17
14
  yargs.example('eik init --cwd /path/to/dir');
18
15
  yargs.example(
19
- 'eik init --server https://assets.myserver.com --major 2 --name my-app --js ./scripts.js --css ./styles.css',
16
+ 'eik init --server https://assets.myserver.com --version 2.0.0 --name my-app --files "./public"',
20
17
  );
21
18
  yargs.example('eik init --debug');
22
19
 
23
20
  yargs.options({
24
21
  server: {
25
22
  alias: 's',
26
- describe: `Specify asset server field in "eik.json".
27
- This the URL to an Eik asset server
28
- Eg. --server https://assets.myeikserver.com`,
23
+ describe: `Specify asset server field in "eik.json". This the URL to an Eik asset server Eg. --server https://assets.myeikserver.com`,
29
24
  default: '',
30
25
  },
31
- cwd: {
32
- alias: 'c',
33
- describe: `Alter the current working directory
34
- Defaults to the directory where the command is being run.
35
- This affects where the generated "eik.json" file will be saved.
36
- Eg. --cwd /path/to/save/to`,
37
- default: process.cwd(),
38
- },
39
26
  version: {
40
27
  alias: 'v',
41
28
  describe: `Specify the semver version field in "eik.json". Eg. --version 1.0.0`,
@@ -47,59 +34,89 @@ exports.builder = (yargs) => {
47
34
  Eg. --name my-great-app`,
48
35
  default: '',
49
36
  },
50
- debug: {
51
- describe: 'Logs additional messages during command run',
52
- default: false,
53
- type: 'boolean',
54
- },
55
37
  });
56
38
  };
57
39
 
58
- exports.handler = async (argv) => {
59
- const spinner = ora({ stream: process.stdout }).start('working...');
60
- const { name, version, server, cwd, debug } = argv;
40
+ const handler = async (argv) => {
41
+ let { name, version } = argv;
42
+ const { server, cwd, debug } = argv;
61
43
  const pathname = join(cwd, './eik.json');
44
+
45
+ const spinner = ora({ stream: process.stdout }).start('working...');
62
46
  const log = logger(spinner, debug);
63
- let assetFileExists = false;
64
47
 
65
48
  try {
66
- log.debug(
67
- `Checking for existing "eik.json" file in directory (${cwd})`,
68
- );
49
+ log.debug(`Checking for existing ${pathname}`);
50
+
51
+ let eikJsonExists = false;
69
52
  try {
70
53
  const st = fs.statSync(pathname);
71
54
  if (st.isFile()) {
72
- assetFileExists = true;
55
+ eikJsonExists = true;
73
56
  }
74
57
  } catch (err) {
75
58
  // noop
76
59
  }
77
-
78
- if (assetFileExists) {
60
+ if (eikJsonExists) {
79
61
  throw new Error(
80
62
  `An "eik.json" file already exists in directory. File will not be written`,
81
63
  );
82
64
  }
83
65
 
84
- log.debug(`Writing "eik.json" to directory (${cwd})`);
85
- fs.writeFileSync(
86
- pathname,
87
- JSON.stringify(
88
- {
89
- name,
90
- version,
91
- server,
92
- files: {},
93
- },
94
- null,
95
- 2,
96
- ),
66
+ if (!name || !version || version === '1.0.0') {
67
+ log.debug('Looking for default from package.json');
68
+ try {
69
+ let packageJson = fs.readFileSync(
70
+ join(cwd, 'package.json'),
71
+ 'utf-8',
72
+ );
73
+ packageJson = JSON.parse(packageJson);
74
+ if (!name) {
75
+ name = packageJson.name;
76
+ log.debug(
77
+ `Using ${name} from package.json as default name`,
78
+ );
79
+ }
80
+ if (!version || version === '1.0.0') {
81
+ version = packageJson.version;
82
+ log.debug(
83
+ `Using ${version} from package.json as default version`,
84
+ );
85
+ }
86
+ } catch (e) {
87
+ // noop
88
+ }
89
+ } else {
90
+ log.debug(`Got ${name} and ${version}, skipping package.json`);
91
+ }
92
+
93
+ log.debug(`Writing to ${pathname}`);
94
+
95
+ const output = JSON.stringify(
96
+ {
97
+ $schema:
98
+ 'https://raw.githubusercontent.com/eik-lib/common/main/lib/schemas/eikjson.schema.json',
99
+ name,
100
+ version,
101
+ server,
102
+ files: './public',
103
+ 'import-map': [],
104
+ },
105
+ null,
106
+ 2,
97
107
  );
108
+ fs.writeFileSync(pathname, output);
109
+
110
+ log.info(`Wrote to ${pathname}
98
111
 
99
- log.info(`"eik.json" successfully written to directory`);
112
+ ${output}
113
+
114
+ Read more about configuring Eik on https://eik.dev/docs/reference/eik-json`);
100
115
  } catch (err) {
101
116
  log.warn(err.message);
102
117
  }
103
118
  spinner.text = '';
104
119
  spinner.stopAndPersist();
105
120
  };
121
+
122
+ export { command, aliases, describe, builder, handler };
@@ -1,55 +1,38 @@
1
- /* eslint-disable prefer-template */
2
- /* eslint-disable no-restricted-properties */
3
- /* eslint-disable one-var */
1
+ import { join } from 'path';
2
+ import ora from 'ora';
3
+ import Integrity from '../classes/integrity.js';
4
+ import { logger, getDefaults } from '../utils/index.js';
5
+ import json from '../utils/json/index.js';
4
6
 
5
- 'use strict';
7
+ export const command = 'integrity [name] [version]';
6
8
 
7
- const { join } = require('path');
8
- const ora = require('ora');
9
- const { configStore, getDefaults } = require('@eik/common-config-loader');
10
- const Integrity = require('../classes/integrity');
11
- const { logger, getCWD } = require('../utils');
12
- const json = require('../utils/json');
9
+ export const aliases = ['int'];
13
10
 
14
- exports.command = 'integrity [name] [version]';
11
+ export const describe = `Retrieve file integrity information for package name and version defined in eik.json, then populate integrity.json file with this information`;
15
12
 
16
- exports.aliases = ['int'];
17
-
18
- exports.describe = `Retrieve file integrity information for package name and version defined in eik.json, then populate integrity.json file with this information`;
19
-
20
- exports.builder = (yargs) => {
21
- const cwd = getCWD();
22
- const defaults = getDefaults(cwd);
13
+ export const builder = (yargs) => {
14
+ const defaults = getDefaults(yargs.argv.config || yargs.argv.cwd);
23
15
 
24
16
  yargs.options({
25
17
  server: {
26
18
  alias: 's',
27
19
  describe: 'Specify location of asset server.',
20
+ // @ts-expect-error
28
21
  default: defaults.server,
29
22
  },
30
- debug: {
31
- describe: 'Logs additional messages',
32
- default: false,
33
- type: 'boolean',
34
- },
35
- cwd: {
36
- alias: 'c',
37
- describe: 'Alter current working directory.',
38
- default: defaults.cwd,
39
- },
40
23
  });
41
24
 
42
25
  yargs.example(`eik integrity`);
43
26
  yargs.example(`eik integrity --debug`);
44
27
  };
45
28
 
46
- exports.handler = async (argv) => {
29
+ export const handler = async (argv) => {
47
30
  const spinner = ora({ stream: process.stdout }).start('working...');
48
31
  let integrity = false;
49
- const { debug, cwd } = argv;
32
+ const { debug, cwd, config } = argv;
50
33
  const l = logger(spinner, debug);
51
- const config = configStore.findInDirectory(cwd);
52
- const { name, server, version, type, out } = config;
34
+ // @ts-expect-error
35
+ const { name, version, server, out, type } = getDefaults(config || cwd);
53
36
 
54
37
  try {
55
38
  integrity = await new Integrity({
package/commands/login.js CHANGED
@@ -1,60 +1,44 @@
1
- 'use strict';
1
+ import os from 'os';
2
+ import readline from 'readline';
3
+ import ora from 'ora';
4
+ import Login from '../classes/login.js';
5
+ import { logger, getDefaults } from '../utils/index.js';
6
+ import json from '../utils/json/index.js';
2
7
 
3
- const homedir = require('os').homedir();
4
- const { getDefaults } = require('@eik/common-config-loader');
5
- const readline = require('readline');
6
- const ora = require('ora');
7
- const Login = require('../classes/login');
8
- const { logger, getCWD } = require('../utils');
9
- const json = require('../utils/json');
8
+ const homedir = os.homedir();
10
9
 
11
- exports.command = 'login';
10
+ export const command = 'login';
12
11
 
13
- exports.aliases = [];
12
+ export const aliases = [];
14
13
 
15
- exports.describe = `Authenticate against an Eik server and save the returned token to an .eikrc file in the users home directory.
16
- You can specify key and server values to authenticate against using the --key and --server flags which will then bypass login prompts
17
- It is possible to be authenticated against multiple asset servers simultaneously. Simply call "eik login" multiple times.`;
14
+ export const describe = `Authenticate against an Eik server and save the returned token to an .eikrc file in the users home directory. You can specify key and server values to authenticate against using the --key and --server flags which will then bypass login prompts. It is possible to be authenticated against multiple asset servers simultaneously. Simply call "eik login" multiple times.`;
18
15
 
19
- exports.builder = (yargs) => {
16
+ export const builder = (yargs) => {
20
17
  yargs.example('eik login --server https://assets.myserver.com');
21
18
  yargs.example(
22
19
  'eik login --server https://assets.myserver.com --key ######',
23
20
  );
24
21
  yargs.example('eik login --server https://assets.myserver.com --debug');
25
22
 
26
- const cwd = getCWD();
27
- const defaults = getDefaults(cwd);
23
+ const defaults = getDefaults(yargs.argv.config || yargs.argv.cwd);
28
24
 
29
25
  yargs.options({
30
26
  server: {
31
27
  alias: 's',
32
- describe: `Eik server address
33
- Specify location of the Eik asset server to authenticate against.
34
- If an eik.json file is present in the current working directory, the files server value will be used as default.
35
- If no eik.json file is present in the current working directory and this flag is not specified, a prompt will be presented to ask for the server address to be input
36
- Eg. --server https://assets.myeikserver.com`,
28
+ describe: `Eik server address. Specify location of the Eik asset server to authenticate against. If an eik.json file is present in the current working directory, the files server value will be used as default. If no eik.json file is present in the current working directory and this flag is not specified, a prompt will be presented to ask for the server address to be input. Eg. --server https://assets.myeikserver.com`,
37
29
  type: 'string',
38
30
  default: defaults.server,
39
31
  },
40
32
  key: {
41
33
  alias: 'k',
42
- describe: `Login access key.
43
- This is a passkey for a given user account and needs to be configured on the server.
44
- If this flag is not specifed, a prompt will be used to ask for the key to be input.
45
- Eg. --key ########`,
34
+ describe: `Login access key. This is a passkey for a given user account and needs to be configured on the server. If this flag is not specifed, a prompt will be used to ask for the key to be input. Eg. --key ########`,
46
35
  type: 'string',
47
36
  default: '',
48
37
  },
49
- debug: {
50
- describe: 'Logs additional messages',
51
- default: false,
52
- type: 'boolean',
53
- },
54
38
  });
55
39
  };
56
40
 
57
- exports.handler = async (argv) => {
41
+ export const handler = async (argv) => {
58
42
  let success = false;
59
43
  const { debug, key, server } = argv;
60
44
  let k = key;
@@ -70,8 +54,9 @@ exports.handler = async (argv) => {
70
54
 
71
55
  if (!s) {
72
56
  await new Promise((resolve) => {
73
- rl.question('Enter Eik server address > ', (input) => {
57
+ rl?.question('Enter Eik server address > ', (input) => {
74
58
  s = input;
59
+ // @ts-expect-error
75
60
  resolve();
76
61
  });
77
62
  });
@@ -79,8 +64,9 @@ exports.handler = async (argv) => {
79
64
 
80
65
  if (!k) {
81
66
  await new Promise((resolve) => {
82
- rl.question('Enter login key > ', (input) => {
67
+ rl?.question(`Enter login key for ${s} > `, (input) => {
83
68
  k = input;
69
+ // @ts-expect-error
84
70
  resolve();
85
71
  });
86
72
  });
@@ -93,13 +79,14 @@ exports.handler = async (argv) => {
93
79
  try {
94
80
  const token = await new Login({
95
81
  logger: logger(spinner, debug),
96
- debug,
97
82
  key: k,
98
83
  server: s,
99
84
  }).run();
100
85
 
101
86
  if (token) {
102
- const meta = await json.read({ cwd: homedir, filename: '.eikrc' });
87
+ const meta = /** @type {{ tokens: any }} */ (
88
+ await json.read({ cwd: homedir, filename: '.eikrc' })
89
+ );
103
90
 
104
91
  const tokens = new Map(meta.tokens);
105
92
  tokens.set(s, token);
@@ -109,6 +96,7 @@ exports.handler = async (argv) => {
109
96
  success = true;
110
97
  }
111
98
  } catch (err) {
99
+ // @ts-expect-error
112
100
  logger.warn(err.message);
113
101
  }
114
102
 
@@ -0,0 +1,95 @@
1
+ // @deprecated in favor of `alias` command
2
+
3
+ import ora from 'ora';
4
+ import Alias from '../classes/alias.js';
5
+ import { logger, getDefaults } from '../utils/index.js';
6
+ import { Alias as AliasFormatter } from '../formatters/index.js';
7
+
8
+ export const command = 'map-alias <name> <version> <alias>';
9
+
10
+ export const aliases = ['ma'];
11
+
12
+ export const describe = `DEPRECATED: This command has been replaced by the alias command and will be removed in a future version. Create a semver major alias for an import map as identified by its name and version. An import map with the given name and version must already exist on asset server. Alias should be the semver major part of the import map version. Eg. For an import map of version 5.4.3, you should use 5 as the alias`;
13
+
14
+ export const builder = (yargs) => {
15
+ const defaults = getDefaults(yargs.argv.config || yargs.argv.cwd);
16
+
17
+ yargs
18
+ .positional('name', {
19
+ describe: `Import map name for import map that is to be aliased`,
20
+ type: 'string',
21
+ })
22
+ .positional('version', {
23
+ describe: `Import map version for import map that is to be aliased`,
24
+ type: 'string',
25
+ })
26
+ .positional('alias', {
27
+ describe: `Alias for a semver version. Should be the semver major component of version.`,
28
+ type: 'string',
29
+ });
30
+
31
+ yargs.options({
32
+ server: {
33
+ alias: 's',
34
+ describe: 'Specify location of asset server.',
35
+ // @ts-expect-error
36
+ default: defaults.server,
37
+ },
38
+ token: {
39
+ describe:
40
+ 'Provide a jwt token to be used to authenticate with the Eik server.',
41
+ default: '',
42
+ alias: 't',
43
+ },
44
+ });
45
+
46
+ // @ts-expect-error
47
+ yargs.default('token', defaults.token, defaults.token ? '######' : '');
48
+
49
+ yargs.example(`eik map-alias my-map 1.0.0 1`);
50
+ yargs.example(`eik map-alias my-map 1.7.3 1`);
51
+ yargs.example(`eik map-alias my-map 6.3.1 6`);
52
+ yargs.example(
53
+ `eik map-alias my-map 6.3.1 6 --server https://assets.myeikserver.com`,
54
+ );
55
+ yargs.example(`eik map-alias my-map 4.2.2 4 --debug`);
56
+ };
57
+
58
+ export const handler = async (argv) => {
59
+ const spinner = ora({ stream: process.stdout }).start('working...');
60
+ let success = false;
61
+ const { debug, name, version, server } = argv;
62
+ const log = logger(spinner, debug);
63
+ let data = {};
64
+
65
+ try {
66
+ data = await new Alias({
67
+ type: 'map',
68
+ logger: log,
69
+ ...argv,
70
+ }).run();
71
+
72
+ data.name = name;
73
+ data.version = version;
74
+ data.files = [];
75
+
76
+ const createdOrUpdated = data.update ? 'Updated' : 'Created';
77
+ log.info(
78
+ `${createdOrUpdated} alias for package "${data.name}". ("${data.version}" => "v${data.alias}")`,
79
+ );
80
+ success = true;
81
+ } catch (err) {
82
+ log.warn(err.message);
83
+ }
84
+
85
+ spinner.text = '';
86
+ spinner.stopAndPersist();
87
+ if (success) {
88
+ new AliasFormatter(data).format(server);
89
+ } else {
90
+ process.exit(1);
91
+ }
92
+ };
93
+
94
+ export const deprecated =
95
+ '"map-alias" will be removed in a future version. Please use "alias" instead';