@jujulego/jill 2.0.0-alpha.2 → 2.0.0-alpha.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.
Files changed (48) hide show
  1. package/dist/commands/list.d.ts.map +1 -1
  2. package/dist/commands/list.js +2 -1
  3. package/dist/commands/list.js.map +1 -1
  4. package/dist/commands/tree.d.ts +3 -0
  5. package/dist/commands/tree.d.ts.map +1 -0
  6. package/dist/commands/tree.js +35 -0
  7. package/dist/commands/tree.js.map +1 -0
  8. package/dist/middlewares/global-config.d.ts.map +1 -1
  9. package/dist/middlewares/global-config.js +4 -1
  10. package/dist/middlewares/global-config.js.map +1 -1
  11. package/dist/middlewares/index.d.ts +2 -1
  12. package/dist/middlewares/index.d.ts.map +1 -1
  13. package/dist/middlewares/index.js +2 -1
  14. package/dist/middlewares/index.js.map +1 -1
  15. package/dist/middlewares/load-project.d.ts.map +1 -1
  16. package/dist/middlewares/load-project.js +2 -2
  17. package/dist/middlewares/load-project.js.map +1 -1
  18. package/dist/middlewares/load-workspace.d.ts +3 -0
  19. package/dist/middlewares/load-workspace.d.ts.map +1 -0
  20. package/dist/middlewares/load-workspace.js +42 -0
  21. package/dist/middlewares/load-workspace.js.map +1 -0
  22. package/dist/services/inversify.config.d.ts +1 -1
  23. package/dist/services/inversify.config.d.ts.map +1 -1
  24. package/dist/services/inversify.config.js +2 -2
  25. package/dist/services/inversify.config.js.map +1 -1
  26. package/dist/services/spinner.service.d.ts +6 -2
  27. package/dist/services/spinner.service.d.ts.map +1 -1
  28. package/dist/services/spinner.service.js +22 -9
  29. package/dist/services/spinner.service.js.map +1 -1
  30. package/dist/ui/global-spinner.d.ts.map +1 -1
  31. package/dist/ui/global-spinner.js +31 -9
  32. package/dist/ui/global-spinner.js.map +1 -1
  33. package/dist/ui/index.d.ts +1 -1
  34. package/dist/ui/index.d.ts.map +1 -1
  35. package/dist/ui/index.js +1 -1
  36. package/dist/ui/index.js.map +1 -1
  37. package/dist/ui/static-logs.d.ts.map +1 -1
  38. package/dist/ui/static-logs.js +15 -8
  39. package/dist/ui/static-logs.js.map +1 -1
  40. package/dist/ui/workspace-tree.d.ts +8 -0
  41. package/dist/ui/workspace-tree.d.ts.map +1 -0
  42. package/dist/ui/workspace-tree.js +87 -0
  43. package/dist/ui/workspace-tree.js.map +1 -0
  44. package/package.json +2 -1
  45. package/dist/ui/cli-list.d.ts +0 -15
  46. package/dist/ui/cli-list.d.ts.map +0 -1
  47. package/dist/ui/cli-list.js +0 -66
  48. package/dist/ui/cli-list.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["commands/list.tsx"],"names":[],"mappings":";AAaA,oBAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,oBAAY,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AA8BtD,wBAiIG","file":"list.d.ts","sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT_PROJECT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) => applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.get<Project>(CURRENT_PROJECT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"]}
1
+ {"version":3,"sources":["commands/list.tsx"],"names":[],"mappings":";AAaA,oBAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,oBAAY,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AA8BtD,wBAkIG","file":"list.d.ts","sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"]}
@@ -13,6 +13,7 @@ const _nodePath = /*#__PURE__*/ _interopRequireDefault(require("node:path"));
13
13
  const _slugify = /*#__PURE__*/ _interopRequireDefault(require("slugify"));
14
14
  const _filters = require("../filters");
15
15
  const _middlewares = require("../middlewares");
16
+ const _project = require("../project");
16
17
  const _services = require("../services");
17
18
  const _ui = require("../ui");
18
19
  const _utils = require("../utils");
@@ -125,7 +126,7 @@ const _default = (0, _utils.defineCommand)({
125
126
  pipeline.add(new _filters.AffectedFilter(args.affected, args.affectedRevFallback, args.affectedRevSort));
126
127
  }
127
128
  // Load workspaces
128
- const project = _services.container.get(_services.CURRENT_PROJECT);
129
+ const project = _services.container.getNamed(_project.Project, _services.CURRENT);
129
130
  const workspaces = [];
130
131
  for await (const wks of pipeline.filter(project.workspaces())){
131
132
  workspaces.push(wks);
@@ -1 +1 @@
1
- {"version":3,"sources":["commands/list.js"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT_PROJECT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) => applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.get<Project>(CURRENT_PROJECT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"],"names":["LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","name","wks","version","json","manifest","undefined","chalk","grey","root","cwd","slug","slugify","buildExtractor","attrs","data","attr","defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","option","type","group","desc","string","alias","coerce","rev","default","choices","handler","args","pipeline","Pipeline","private","add","PrivateFilter","withScript","ScriptsFilter","affected","AffectedFilter","affectedRevFallback","affectedRevSort","project","container","get","CURRENT_PROJECT","workspaces","filter","push","length","long","map","process","stdout","isTTY","console","log","JSON","stringify","app","INK_APP","d","path","relative","rerender","Layout","List","items","headers"],"mappings":"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","file":"list.js"}
1
+ {"version":3,"sources":["commands/list.js"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"],"names":["LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","name","wks","version","json","manifest","undefined","chalk","grey","root","cwd","slug","slugify","buildExtractor","attrs","data","attr","defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","option","type","group","desc","string","alias","coerce","rev","default","choices","handler","args","pipeline","Pipeline","private","add","PrivateFilter","withScript","ScriptsFilter","affected","AffectedFilter","affectedRevFallback","affectedRevSort","project","container","getNamed","Project","CURRENT","workspaces","filter","push","length","long","map","process","stdout","isTTY","console","log","JSON","stringify","app","get","INK_APP","d","path","relative","rerender","Layout","List","items","headers"],"mappings":"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","file":"list.js"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="yargs" />
2
+ declare const _default: import("yargs").CommandModule<unknown, unknown>;
3
+ export default _default;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["commands/tree.tsx"],"names":[],"mappings":";;AASA,wBAmBG","file":"tree.d.ts","sourcesContent":["import ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, WorkspaceTree } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n"]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, // Command
6
+ "default", {
7
+ enumerable: true,
8
+ get: ()=>_default
9
+ });
10
+ const _jsxRuntime = require("react/jsx-runtime");
11
+ const _middlewares = require("../middlewares");
12
+ const _project = require("../project");
13
+ const _services = require("../services");
14
+ const _ui = require("../ui");
15
+ const _utils = require("../utils");
16
+ const _default = (0, _utils.defineCommand)({
17
+ command: 'tree',
18
+ describe: 'Print workspace dependency tree',
19
+ builder: (yargs)=>(0, _utils.applyMiddlewares)(yargs, [
20
+ _middlewares.setupInk,
21
+ _middlewares.loadProject,
22
+ _middlewares.loadWorkspace
23
+ ]),
24
+ handler: ()=>{
25
+ const app = _services.container.get(_services.INK_APP);
26
+ const workspace = _services.container.getNamed(_project.Workspace, _services.CURRENT);
27
+ app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
28
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.WorkspaceTree, {
29
+ workspace: workspace
30
+ })
31
+ }));
32
+ }
33
+ });
34
+
35
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["commands/tree.js"],"sourcesContent":["import ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, WorkspaceTree } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n"],"names":["defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","loadWorkspace","handler","app","container","get","INK_APP","workspace","getNamed","Workspace","CURRENT","rerender","Layout","WorkspaceTree"],"mappings":"AAAA;;;;+BAQA,UAAU;AACV;;aAAA;;;6BAPqD;yBAC3B;0BACkB;oBACN;uBACU;MAGhD,WAAeA,IAAAA,oBAAa,EAAC;IAC3BC,SAAS;IACTC,UAAU;IACVC,SAAS,CAACC,QACRC,IAAAA,uBAAgB,EAACD,OAAO;YACtBE,qBAAQ;YACRC,wBAAW;YACXC,0BAAa;SACd;IACHC,SAAS,IAAM;QACb,MAAMC,MAAMC,mBAAS,CAACC,GAAG,CAAeC,iBAAO;QAC/C,MAAMC,YAAYH,mBAAS,CAACI,QAAQ,CAACC,kBAAS,EAAEC,iBAAO;QAEvDP,IAAIQ,QAAQ,eACV,qBAACC,UAAM;sBACL,cAAA,qBAACC,iBAAa;gBAACN,WAAWA;;;IAGhC;AACF","file":"tree.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/global-config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;;;EAevB,CAAC","file":"global-config.d.ts","sourcesContent":["import { container, GLOBAL_CONFIG } from '../services';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const globalConfig = defineMiddleware({\n builder: (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n container.bind(GLOBAL_CONFIG).toConstantValue(args);\n }\n});\n"]}
1
+ {"version":3,"sources":["middlewares/global-config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;;;EAkBvB,CAAC","file":"global-config.d.ts","sourcesContent":["import { container, GLOBAL_CONFIG } from '../services';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const globalConfig = defineMiddleware({\n builder: (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n container.bind(GLOBAL_CONFIG).toConstantValue({\n verbose: args.verbose,\n jobs: args.jobs,\n });\n }\n});\n"]}
@@ -19,7 +19,10 @@ const globalConfig = (0, _utils.defineMiddleware)({
19
19
  description: 'Set maximum parallel job number'
20
20
  }),
21
21
  handler (args) {
22
- _services.container.bind(_services.GLOBAL_CONFIG).toConstantValue(args);
22
+ _services.container.bind(_services.GLOBAL_CONFIG).toConstantValue({
23
+ verbose: args.verbose,
24
+ jobs: args.jobs
25
+ });
23
26
  }
24
27
  });
25
28
 
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/global-config.js"],"sourcesContent":["import { container, GLOBAL_CONFIG } from '../services';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const globalConfig = defineMiddleware({\n builder: (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n container.bind(GLOBAL_CONFIG).toConstantValue(args);\n }\n});\n"],"names":["globalConfig","defineMiddleware","builder","yargs","option","alias","type","description","handler","args","container","bind","GLOBAL_CONFIG","toConstantValue"],"mappings":"AAAA;;;;+BAIaA;;aAAAA;;0BAJ4B;uBACR;AAG1B,MAAMA,eAAeC,IAAAA,uBAAgB,EAAC;IAC3CC,SAAS,CAACC,QAAUA,MACjBC,MAAM,CAAC,WAAW;YACjBC,OAAO;YACPC,MAAM;YACNC,aAAa;QACf,GACCH,MAAM,CAAC,QAAQ;YACdC,OAAO;YACPC,MAAM;YACNC,aAAa;QACf;IACFC,SAAQC,IAAI,EAAE;QACZC,mBAAS,CAACC,IAAI,CAACC,uBAAa,EAAEC,eAAe,CAACJ;IAChD;AACF","file":"global-config.js"}
1
+ {"version":3,"sources":["middlewares/global-config.js"],"sourcesContent":["import { container, GLOBAL_CONFIG } from '../services';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const globalConfig = defineMiddleware({\n builder: (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n container.bind(GLOBAL_CONFIG).toConstantValue({\n verbose: args.verbose,\n jobs: args.jobs,\n });\n }\n});\n"],"names":["globalConfig","defineMiddleware","builder","yargs","option","alias","type","description","handler","args","container","bind","GLOBAL_CONFIG","toConstantValue","verbose","jobs"],"mappings":"AAAA;;;;+BAIaA;;aAAAA;;0BAJ4B;uBACR;AAG1B,MAAMA,eAAeC,IAAAA,uBAAgB,EAAC;IAC3CC,SAAS,CAACC,QAAUA,MACjBC,MAAM,CAAC,WAAW;YACjBC,OAAO;YACPC,MAAM;YACNC,aAAa;QACf,GACCH,MAAM,CAAC,QAAQ;YACdC,OAAO;YACPC,MAAM;YACNC,aAAa;QACf;IACFC,SAAQC,IAAI,EAAE;QACZC,mBAAS,CAACC,IAAI,CAACC,uBAAa,EAAEC,eAAe,CAAC;YAC5CC,SAASL,KAAKK,OAAO;YACrBC,MAAMN,KAAKM,IAAI;QACjB;IACF;AACF","file":"global-config.js"}
@@ -1,3 +1,4 @@
1
- export * from './load-project';
2
1
  export * from './global-config';
2
+ export * from './load-project';
3
+ export * from './load-workspace';
3
4
  export * from './setup-ink';
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC","file":"index.d.ts","sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"]}
1
+ {"version":3,"sources":["middlewares/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC","file":"index.d.ts","sourcesContent":["export * from './global-config';\nexport * from './load-project';\nexport * from './load-workspace';\nexport * from './setup-ink';\n"]}
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- _exportStar(require("./load-project"), exports);
6
5
  _exportStar(require("./global-config"), exports);
6
+ _exportStar(require("./load-project"), exports);
7
+ _exportStar(require("./load-workspace"), exports);
7
8
  _exportStar(require("./setup-ink"), exports);
8
9
  function _exportStar(from, to) {
9
10
  Object.keys(from).forEach(function(k) {
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/index.js"],"sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA","file":"index.js"}
1
+ {"version":3,"sources":["middlewares/index.js"],"sourcesContent":["export * from './global-config';\nexport * from './load-project';\nexport * from './load-workspace';\nexport * from './setup-ink';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA;oBACA","file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/load-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,WAAW;;;;EA6BtB,CAAC","file":"load-project.d.ts","sourcesContent":["import { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadProject = defineMiddleware({\n builder: (yargs) => yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n }),\n async handler(args) {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n }\n});\n"]}
1
+ {"version":3,"sources":["middlewares/load-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,WAAW;;;;EA8BtB,CAAC","file":"load-project.d.ts","sourcesContent":["import { container, CURRENT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadProject = defineMiddleware({\n builder: (yargs) => yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n }),\n async handler(args) {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(Project)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }))\n .whenTargetNamed(CURRENT);\n } finally {\n spinner.stop();\n }\n }\n});\n"]}
@@ -29,9 +29,9 @@ const loadProject = (0, _utils.defineMiddleware)({
29
29
  try {
30
30
  spinner.spin('Loading project ...');
31
31
  const root = args.project = await _project.Project.searchProjectRoot(args.project);
32
- _services.container.bind(_services.CURRENT_PROJECT).toDynamicValue(()=>new _project.Project(root, {
32
+ _services.container.bind(_project.Project).toDynamicValue(()=>new _project.Project(root, {
33
33
  packageManager: args['package-manager']
34
- }));
34
+ })).whenTargetNamed(_services.CURRENT);
35
35
  } finally{
36
36
  spinner.stop();
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["middlewares/load-project.js"],"sourcesContent":["import { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadProject = defineMiddleware({\n builder: (yargs) => yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n }),\n async handler(args) {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n }\n});\n"],"names":["loadProject","defineMiddleware","builder","yargs","option","alias","type","default","process","cwd","description","choices","undefined","handler","args","spinner","container","get","SpinnerService","spin","root","project","Project","searchProjectRoot","bind","CURRENT_PROJECT","toDynamicValue","packageManager","stop"],"mappings":"AAAA;;;;+BAKaA;;aAAAA;;0BAL8C;yBACnB;uBACP;AAG1B,MAAMA,cAAcC,IAAAA,uBAAgB,EAAC;IAC1CC,SAAS,CAACC,QAAUA,MACjBC,MAAM,CAAC,WAAW;YACjBC,OAAO;YACPC,MAAM;YACNC,SAASC,QAAQC,GAAG;YACpBC,aAAa;QACf,GACCN,MAAM,CAAC,mBAAmB;YACzBO,SAAS;gBAAC;gBAAQ;aAAM;YACxBJ,SAASK;YACTN,MAAM;YACNI,aAAa;QACf;IACF,MAAMG,SAAQC,IAAI,EAAE;QAClB,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAE5C,IAAI;YACFH,QAAQI,IAAI,CAAC;YACb,MAAMC,OAAON,KAAKO,OAAO,GAAG,MAAMC,gBAAO,CAACC,iBAAiB,CAACT,KAAKO,OAAO;YAExEL,mBAAS,CAACQ,IAAI,CAACC,yBAAe,EAC3BC,cAAc,CAAC,IAAM,IAAIJ,gBAAO,CAACF,MAAM;oBACtCO,gBAAgBb,IAAI,CAAC,kBAAkB;gBACzC;QACJ,SAAU;YACRC,QAAQa,IAAI;QACd;IACF;AACF","file":"load-project.js"}
1
+ {"version":3,"sources":["middlewares/load-project.js"],"sourcesContent":["import { container, CURRENT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadProject = defineMiddleware({\n builder: (yargs) => yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n }),\n async handler(args) {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(Project)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }))\n .whenTargetNamed(CURRENT);\n } finally {\n spinner.stop();\n }\n }\n});\n"],"names":["loadProject","defineMiddleware","builder","yargs","option","alias","type","default","process","cwd","description","choices","undefined","handler","args","spinner","container","get","SpinnerService","spin","root","project","Project","searchProjectRoot","bind","toDynamicValue","packageManager","whenTargetNamed","CURRENT","stop"],"mappings":"AAAA;;;;+BAKaA;;aAAAA;;0BALsC;yBACX;uBACP;AAG1B,MAAMA,cAAcC,IAAAA,uBAAgB,EAAC;IAC1CC,SAAS,CAACC,QAAUA,MACjBC,MAAM,CAAC,WAAW;YACjBC,OAAO;YACPC,MAAM;YACNC,SAASC,QAAQC,GAAG;YACpBC,aAAa;QACf,GACCN,MAAM,CAAC,mBAAmB;YACzBO,SAAS;gBAAC;gBAAQ;aAAM;YACxBJ,SAASK;YACTN,MAAM;YACNI,aAAa;QACf;IACF,MAAMG,SAAQC,IAAI,EAAE;QAClB,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAE5C,IAAI;YACFH,QAAQI,IAAI,CAAC;YACb,MAAMC,OAAON,KAAKO,OAAO,GAAG,MAAMC,gBAAO,CAACC,iBAAiB,CAACT,KAAKO,OAAO;YAExEL,mBAAS,CAACQ,IAAI,CAACF,gBAAO,EACnBG,cAAc,CAAC,IAAM,IAAIH,gBAAO,CAACF,MAAM;oBACtCM,gBAAgBZ,IAAI,CAAC,kBAAkB;gBACzC,IACCa,eAAe,CAACC,iBAAO;QAC5B,SAAU;YACRb,QAAQc,IAAI;QACd;IACF;AACF","file":"load-project.js"}
@@ -0,0 +1,3 @@
1
+ export declare const loadWorkspace: import("../utils").Middleware<unknown, {
2
+ workspace: string | undefined;
3
+ }>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["middlewares/load-workspace.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa;;EA2BxB,CAAC","file":"load-workspace.d.ts","sourcesContent":["import yargs from 'yargs';\n\nimport { container, CURRENT, SpinnerService } from '../services';\nimport { Project, Workspace } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadWorkspace = defineMiddleware({\n builder: (yargs) => yargs\n .option('workspace', {\n alias: 'w',\n type: 'string',\n desc: 'Workspace to use'\n }),\n async handler(args): Promise<void> {\n const spinner = container.get(SpinnerService);\n const project = container.getNamed(Project, CURRENT);\n\n try {\n spinner.spin(`Loading \"${args.workspace || '.'}\" workspace ...`);\n const workspace = await project.workspace(args.workspace);\n\n if (!workspace) {\n spinner.failed(`Workspace \"${args.workspace || '.'}\" not found`);\n yargs.exit(1, new Error('Workspace not found'));\n } else {\n container.bind(Workspace)\n .toConstantValue(workspace)\n .whenTargetNamed(CURRENT);\n }\n } finally {\n spinner.stop();\n }\n }\n});\n"]}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "loadWorkspace", {
6
+ enumerable: true,
7
+ get: ()=>loadWorkspace
8
+ });
9
+ const _yargs = /*#__PURE__*/ _interopRequireDefault(require("yargs"));
10
+ const _services = require("../services");
11
+ const _project = require("../project");
12
+ const _utils = require("../utils");
13
+ function _interopRequireDefault(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ const loadWorkspace = (0, _utils.defineMiddleware)({
19
+ builder: (yargs)=>yargs.option('workspace', {
20
+ alias: 'w',
21
+ type: 'string',
22
+ desc: 'Workspace to use'
23
+ }),
24
+ async handler (args) {
25
+ const spinner = _services.container.get(_services.SpinnerService);
26
+ const project = _services.container.getNamed(_project.Project, _services.CURRENT);
27
+ try {
28
+ spinner.spin(`Loading "${args.workspace || '.'}" workspace ...`);
29
+ const workspace = await project.workspace(args.workspace);
30
+ if (!workspace) {
31
+ spinner.failed(`Workspace "${args.workspace || '.'}" not found`);
32
+ _yargs.default.exit(1, new Error('Workspace not found'));
33
+ } else {
34
+ _services.container.bind(_project.Workspace).toConstantValue(workspace).whenTargetNamed(_services.CURRENT);
35
+ }
36
+ } finally{
37
+ spinner.stop();
38
+ }
39
+ }
40
+ });
41
+
42
+ //# sourceMappingURL=load-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["middlewares/load-workspace.js"],"sourcesContent":["import yargs from 'yargs';\n\nimport { container, CURRENT, SpinnerService } from '../services';\nimport { Project, Workspace } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadWorkspace = defineMiddleware({\n builder: (yargs) => yargs\n .option('workspace', {\n alias: 'w',\n type: 'string',\n desc: 'Workspace to use'\n }),\n async handler(args): Promise<void> {\n const spinner = container.get(SpinnerService);\n const project = container.getNamed(Project, CURRENT);\n\n try {\n spinner.spin(`Loading \"${args.workspace || '.'}\" workspace ...`);\n const workspace = await project.workspace(args.workspace);\n\n if (!workspace) {\n spinner.failed(`Workspace \"${args.workspace || '.'}\" not found`);\n yargs.exit(1, new Error('Workspace not found'));\n } else {\n container.bind(Workspace)\n .toConstantValue(workspace)\n .whenTargetNamed(CURRENT);\n }\n } finally {\n spinner.stop();\n }\n }\n});\n"],"names":["loadWorkspace","defineMiddleware","builder","yargs","option","alias","type","desc","handler","args","spinner","container","get","SpinnerService","project","getNamed","Project","CURRENT","spin","workspace","failed","exit","Error","bind","Workspace","toConstantValue","whenTargetNamed","stop"],"mappings":"AAAA;;;;+BAOaA;;aAAAA;;4DAPK;0BAEiC;yBAChB;uBACF;;;;;;AAG1B,MAAMA,gBAAgBC,IAAAA,uBAAgB,EAAC;IAC5CC,SAAS,CAACC,QAAUA,MACjBC,MAAM,CAAC,aAAa;YACnBC,OAAO;YACPC,MAAM;YACNC,MAAM;QACR;IACF,MAAMC,SAAQC,IAAI,EAAiB;QACjC,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAC5C,MAAMC,UAAUH,mBAAS,CAACI,QAAQ,CAACC,gBAAO,EAAEC,iBAAO;QAEnD,IAAI;YACFP,QAAQQ,IAAI,CAAC,CAAC,SAAS,EAAET,KAAKU,SAAS,IAAI,IAAI,eAAe,CAAC;YAC/D,MAAMA,YAAY,MAAML,QAAQK,SAAS,CAACV,KAAKU,SAAS;YAExD,IAAI,CAACA,WAAW;gBACdT,QAAQU,MAAM,CAAC,CAAC,WAAW,EAAEX,KAAKU,SAAS,IAAI,IAAI,WAAW,CAAC;gBAC/DhB,cAAK,CAACkB,IAAI,CAAC,GAAG,IAAIC,MAAM;YAC1B,OAAO;gBACLX,mBAAS,CAACY,IAAI,CAACC,kBAAS,EACrBC,eAAe,CAACN,WAChBO,eAAe,CAACT,iBAAO;YAC5B,CAAC;QACH,SAAU;YACRP,QAAQiB,IAAI;QACd;IACF;AACF","file":"load-workspace.js"}
@@ -2,7 +2,7 @@ import { Container } from 'inversify';
2
2
  import 'reflect-metadata';
3
3
  export declare const INK_APP: unique symbol;
4
4
  export declare const GLOBAL_CONFIG: unique symbol;
5
- export declare const CURRENT_PROJECT: unique symbol;
5
+ export declare const CURRENT: unique symbol;
6
6
  export interface GlobalConfig {
7
7
  jobs?: number;
8
8
  verbose: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["services/inversify.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,kBAAkB,CAAC;AAG1B,eAAO,MAAM,OAAO,eAAuB,CAAC;AAC5C,eAAO,MAAM,aAAa,eAA6B,CAAC;AACxD,eAAO,MAAM,eAAe,eAA+B,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,eAAO,MAAM,SAAS,WAEpB,CAAC;AAGH,eAAO,MAAQ,UAAU,4NAA6B,CAAC","file":"inversify.config.d.ts","sourcesContent":["import { Container } from 'inversify';\nimport getDecorators from 'inversify-inject-decorators';\n\nimport 'reflect-metadata';\n\n// Constants\nexport const INK_APP = Symbol.for('InkApp');\nexport const GLOBAL_CONFIG = Symbol.for('GlobalConfig');\nexport const CURRENT_PROJECT = Symbol.for('CurrentProject');\n\n// Types\nexport interface GlobalConfig {\n jobs?: number;\n verbose: number;\n}\n\n// Container\nexport const container = new Container({\n skipBaseClassChecks: true,\n});\n\n// Utilities\nexport const { lazyInject } = getDecorators(container);\n"]}
1
+ {"version":3,"sources":["services/inversify.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,kBAAkB,CAAC;AAG1B,eAAO,MAAM,OAAO,eAAuB,CAAC;AAC5C,eAAO,MAAM,aAAa,eAA6B,CAAC;AACxD,eAAO,MAAM,OAAO,eAAwB,CAAC;AAG7C,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,eAAO,MAAM,SAAS,WAEpB,CAAC;AAGH,eAAO,MAAQ,UAAU,4NAA6B,CAAC","file":"inversify.config.d.ts","sourcesContent":["import { Container } from 'inversify';\nimport getDecorators from 'inversify-inject-decorators';\n\nimport 'reflect-metadata';\n\n// Constants\nexport const INK_APP = Symbol.for('InkApp');\nexport const GLOBAL_CONFIG = Symbol.for('GlobalConfig');\nexport const CURRENT = Symbol.for('Current');\n\n// Types\nexport interface GlobalConfig {\n jobs?: number;\n verbose: number;\n}\n\n// Container\nexport const container = new Container({\n skipBaseClassChecks: true,\n});\n\n// Utilities\nexport const { lazyInject } = getDecorators(container);\n"]}
@@ -11,7 +11,7 @@ function _export(target, all) {
11
11
  _export(exports, {
12
12
  INK_APP: ()=>INK_APP,
13
13
  GLOBAL_CONFIG: ()=>GLOBAL_CONFIG,
14
- CURRENT_PROJECT: ()=>CURRENT_PROJECT,
14
+ CURRENT: ()=>CURRENT,
15
15
  container: ()=>container,
16
16
  lazyInject: ()=>lazyInject
17
17
  });
@@ -25,7 +25,7 @@ function _interopRequireDefault(obj) {
25
25
  }
26
26
  const INK_APP = Symbol.for('InkApp');
27
27
  const GLOBAL_CONFIG = Symbol.for('GlobalConfig');
28
- const CURRENT_PROJECT = Symbol.for('CurrentProject');
28
+ const CURRENT = Symbol.for('Current');
29
29
  const container = new _inversify.Container({
30
30
  skipBaseClassChecks: true
31
31
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["services/inversify.config.js"],"sourcesContent":["import { Container } from 'inversify';\nimport getDecorators from 'inversify-inject-decorators';\n\nimport 'reflect-metadata';\n\n// Constants\nexport const INK_APP = Symbol.for('InkApp');\nexport const GLOBAL_CONFIG = Symbol.for('GlobalConfig');\nexport const CURRENT_PROJECT = Symbol.for('CurrentProject');\n\n// Types\nexport interface GlobalConfig {\n jobs?: number;\n verbose: number;\n}\n\n// Container\nexport const container = new Container({\n skipBaseClassChecks: true,\n});\n\n// Utilities\nexport const { lazyInject } = getDecorators(container);\n"],"names":["INK_APP","GLOBAL_CONFIG","CURRENT_PROJECT","container","lazyInject","Symbol","for","Container","skipBaseClassChecks","getDecorators"],"mappings":"AAAA;;;;;;;;;;;IAMaA,OAAO,MAAPA;IACAC,aAAa,MAAbA;IACAC,eAAe,MAAfA;IASAC,SAAS,MAATA;IAKEC,UAAU,MAAVA;;2BAtBW;gFACA;QAEnB;;;;;;AAGA,MAAMJ,UAAUK,OAAOC,GAAG,CAAC;AAC3B,MAAML,gBAAgBI,OAAOC,GAAG,CAAC;AACjC,MAAMJ,kBAAkBG,OAAOC,GAAG,CAAC;AASnC,MAAMH,YAAY,IAAII,oBAAS,CAAC;IACrCC,qBAAqB,IAAI;AAC3B;AAGO,MAAM,EAAEJ,WAAU,EAAE,GAAGK,IAAAA,kCAAa,EAACN","file":"inversify.config.js"}
1
+ {"version":3,"sources":["services/inversify.config.js"],"sourcesContent":["import { Container } from 'inversify';\nimport getDecorators from 'inversify-inject-decorators';\n\nimport 'reflect-metadata';\n\n// Constants\nexport const INK_APP = Symbol.for('InkApp');\nexport const GLOBAL_CONFIG = Symbol.for('GlobalConfig');\nexport const CURRENT = Symbol.for('Current');\n\n// Types\nexport interface GlobalConfig {\n jobs?: number;\n verbose: number;\n}\n\n// Container\nexport const container = new Container({\n skipBaseClassChecks: true,\n});\n\n// Utilities\nexport const { lazyInject } = getDecorators(container);\n"],"names":["INK_APP","GLOBAL_CONFIG","CURRENT","container","lazyInject","Symbol","for","Container","skipBaseClassChecks","getDecorators"],"mappings":"AAAA;;;;;;;;;;;IAMaA,OAAO,MAAPA;IACAC,aAAa,MAAbA;IACAC,OAAO,MAAPA;IASAC,SAAS,MAATA;IAKEC,UAAU,MAAVA;;2BAtBW;gFACA;QAEnB;;;;;;AAGA,MAAMJ,UAAUK,OAAOC,GAAG,CAAC;AAC3B,MAAML,gBAAgBI,OAAOC,GAAG,CAAC;AACjC,MAAMJ,UAAUG,OAAOC,GAAG,CAAC;AAS3B,MAAMH,YAAY,IAAII,oBAAS,CAAC;IACrCC,qBAAqB,IAAI;AAC3B;AAGO,MAAM,EAAEJ,WAAU,EAAE,GAAGK,IAAAA,kCAAa,EAACN","file":"inversify.config.js"}
@@ -1,14 +1,18 @@
1
+ export declare type SpinnerStatus = 'spin' | 'stop' | 'success' | 'failed';
1
2
  export interface SpinnerState {
2
- spin: boolean;
3
+ status: SpinnerStatus;
3
4
  label: string;
4
5
  }
5
6
  export declare type SpinnerStateListener = (state: SpinnerState) => void;
6
7
  export declare class SpinnerService {
7
- private _spin;
8
+ private _status;
8
9
  private _label;
9
10
  private readonly _listeners;
11
+ private _propagate;
10
12
  subscribe(listener: SpinnerStateListener): () => void;
11
13
  spin(label: string): void;
14
+ success(label: string): void;
15
+ failed(label: string): void;
12
16
  stop(): void;
13
17
  get state(): SpinnerState;
14
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["services/spinner.service.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAGjE,qBACa,cAAc;IAEzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;IAG9D,SAAS,CAAC,QAAQ,EAAE,oBAAoB;IAQxC,IAAI,CAAC,KAAK,EAAE,MAAM;IASlB,IAAI;IASJ,IAAI,KAAK,IAAI,YAAY,CAKxB;CACF","file":"spinner.service.d.ts","sourcesContent":["import { injectable } from 'inversify';\nimport { container } from './inversify.config';\n\n// Interface\nexport interface SpinnerState {\n spin: boolean;\n label: string;\n}\n\nexport type SpinnerStateListener = (state: SpinnerState) => void;\n\n// Service\n@injectable()\nexport class SpinnerService {\n // Attributes\n private _spin = false;\n private _label = '';\n\n private readonly _listeners = new Set<SpinnerStateListener>();\n\n // Methods\n subscribe(listener: SpinnerStateListener) {\n this._listeners.add(listener);\n\n return () => {\n this._listeners.delete(listener);\n };\n }\n\n spin(label: string) {\n this._spin = true;\n this._label = label;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n stop() {\n this._spin = false;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n spin: this._spin,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n"]}
1
+ {"version":3,"sources":["services/spinner.service.ts"],"names":[],"mappings":"AAKA,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AACnE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAGjE,qBACa,cAAc;IAEzB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;IAG9D,OAAO,CAAC,UAAU;IAMlB,SAAS,CAAC,QAAQ,EAAE,oBAAoB;IAQxC,IAAI,CAAC,KAAK,EAAE,MAAM;IAOlB,OAAO,CAAC,KAAK,EAAE,MAAM;IAOrB,MAAM,CAAC,KAAK,EAAE,MAAM;IAOpB,IAAI;IASJ,IAAI,KAAK,IAAI,YAAY,CAKxB;CACF","file":"spinner.service.d.ts","sourcesContent":["import { injectable } from 'inversify';\n\nimport { container } from './inversify.config';\n\n// Interface\nexport type SpinnerStatus = 'spin' | 'stop' | 'success' | 'failed';\nexport interface SpinnerState {\n status: SpinnerStatus;\n label: string;\n}\n\nexport type SpinnerStateListener = (state: SpinnerState) => void;\n\n// Service\n@injectable()\nexport class SpinnerService {\n // Attributes\n private _status: SpinnerStatus = 'stop';\n private _label = '';\n\n private readonly _listeners = new Set<SpinnerStateListener>();\n\n // Methods\n private _propagate() {\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n subscribe(listener: SpinnerStateListener) {\n this._listeners.add(listener);\n\n return () => {\n this._listeners.delete(listener);\n };\n }\n\n spin(label: string) {\n this._status = 'spin';\n this._label = label;\n\n this._propagate();\n }\n\n success(label: string) {\n this._status = 'success';\n this._label = label;\n\n this._propagate();\n }\n\n failed(label: string) {\n this._status = 'failed';\n this._label = label;\n\n this._propagate();\n }\n\n stop() {\n if (this._status === 'spin') {\n this._status = 'stop';\n\n this._propagate();\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n status: this._status,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n"]}
@@ -16,10 +16,15 @@ var __decorate = (void 0) && (void 0).__decorate || function(decorators, target,
16
16
  };
17
17
  let SpinnerService = class SpinnerService {
18
18
  // Attributes
19
- _spin = false;
19
+ _status = 'stop';
20
20
  _label = '';
21
21
  _listeners = new Set();
22
22
  // Methods
23
+ _propagate() {
24
+ for (const listener of this._listeners){
25
+ listener(this.state);
26
+ }
27
+ }
23
28
  subscribe(listener) {
24
29
  this._listeners.add(listener);
25
30
  return ()=>{
@@ -27,22 +32,30 @@ let SpinnerService = class SpinnerService {
27
32
  };
28
33
  }
29
34
  spin(label) {
30
- this._spin = true;
35
+ this._status = 'spin';
31
36
  this._label = label;
32
- for (const listener of this._listeners){
33
- listener(this.state);
34
- }
37
+ this._propagate();
38
+ }
39
+ success(label) {
40
+ this._status = 'success';
41
+ this._label = label;
42
+ this._propagate();
43
+ }
44
+ failed(label) {
45
+ this._status = 'failed';
46
+ this._label = label;
47
+ this._propagate();
35
48
  }
36
49
  stop() {
37
- this._spin = false;
38
- for (const listener of this._listeners){
39
- listener(this.state);
50
+ if (this._status === 'spin') {
51
+ this._status = 'stop';
52
+ this._propagate();
40
53
  }
41
54
  }
42
55
  // Properties
43
56
  get state() {
44
57
  return {
45
- spin: this._spin,
58
+ status: this._status,
46
59
  label: this._label
47
60
  };
48
61
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["services/spinner.service.js"],"sourcesContent":["import { injectable } from 'inversify';\nimport { container } from './inversify.config';\n\n// Interface\nexport interface SpinnerState {\n spin: boolean;\n label: string;\n}\n\nexport type SpinnerStateListener = (state: SpinnerState) => void;\n\n// Service\n@injectable()\nexport class SpinnerService {\n // Attributes\n private _spin = false;\n private _label = '';\n\n private readonly _listeners = new Set<SpinnerStateListener>();\n\n // Methods\n subscribe(listener: SpinnerStateListener) {\n this._listeners.add(listener);\n\n return () => {\n this._listeners.delete(listener);\n };\n }\n\n spin(label: string) {\n this._spin = true;\n this._label = label;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n stop() {\n this._spin = false;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n spin: this._spin,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n"],"names":["SpinnerService","_spin","_label","_listeners","Set","subscribe","listener","add","delete","spin","label","state","stop","injectable","container","bind","toSelf","inSingletonScope"],"mappings":"AAAA;;;;+BAaaA;;aAAAA;;2BAbc;iCACD;;;;;;;IAYbA,iBAAN;IACL,aAAa;IACLC,QAAQ,KAAK,CAAC;IACdC,SAAS,GAAG;IAEHC,aAAa,IAAIC,MAA4B;IAE9D,UAAU;IACVC,UAAUC,QAA8B,EAAE;QACxC,IAAI,CAACH,UAAU,CAACI,GAAG,CAACD;QAEpB,OAAO,IAAM;YACX,IAAI,CAACH,UAAU,CAACK,MAAM,CAACF;QACzB;IACF;IAEAG,KAAKC,KAAa,EAAE;QAClB,IAAI,CAACT,KAAK,GAAG,IAAI;QACjB,IAAI,CAACC,MAAM,GAAGQ;QAEd,KAAK,MAAMJ,YAAY,IAAI,CAACH,UAAU,CAAE;YACtCG,SAAS,IAAI,CAACK,KAAK;QACrB;IACF;IAEAC,OAAO;QACL,IAAI,CAACX,KAAK,GAAG,KAAK;QAElB,KAAK,MAAMK,YAAY,IAAI,CAACH,UAAU,CAAE;YACtCG,SAAS,IAAI,CAACK,KAAK;QACrB;IACF;IAEA,aAAa;IACb,IAAIA,QAAsB;QACxB,OAAO;YACLF,MAAM,IAAI,CAACR,KAAK;YAChBS,OAAO,IAAI,CAACR,MAAM;QACpB;IACF;AACF;AAxCaF;IADZa,IAAAA,qBAAU;GACEb;AA0Cbc,0BAAS,CAACC,IAAI,CAACf,gBACZgB,MAAM,GACNC,gBAAgB","file":"spinner.service.js"}
1
+ {"version":3,"sources":["services/spinner.service.js"],"sourcesContent":["import { injectable } from 'inversify';\n\nimport { container } from './inversify.config';\n\n// Interface\nexport type SpinnerStatus = 'spin' | 'stop' | 'success' | 'failed';\nexport interface SpinnerState {\n status: SpinnerStatus;\n label: string;\n}\n\nexport type SpinnerStateListener = (state: SpinnerState) => void;\n\n// Service\n@injectable()\nexport class SpinnerService {\n // Attributes\n private _status: SpinnerStatus = 'stop';\n private _label = '';\n\n private readonly _listeners = new Set<SpinnerStateListener>();\n\n // Methods\n private _propagate() {\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n subscribe(listener: SpinnerStateListener) {\n this._listeners.add(listener);\n\n return () => {\n this._listeners.delete(listener);\n };\n }\n\n spin(label: string) {\n this._status = 'spin';\n this._label = label;\n\n this._propagate();\n }\n\n success(label: string) {\n this._status = 'success';\n this._label = label;\n\n this._propagate();\n }\n\n failed(label: string) {\n this._status = 'failed';\n this._label = label;\n\n this._propagate();\n }\n\n stop() {\n if (this._status === 'spin') {\n this._status = 'stop';\n\n this._propagate();\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n status: this._status,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n"],"names":["SpinnerService","_status","_label","_listeners","Set","_propagate","listener","state","subscribe","add","delete","spin","label","success","failed","stop","status","injectable","container","bind","toSelf","inSingletonScope"],"mappings":"AAAA;;;;+BAeaA;;aAAAA;;2BAfc;iCAED;;;;;;;IAabA,iBAAN;IACL,aAAa;IACLC,UAAyB,OAAO;IAChCC,SAAS,GAAG;IAEHC,aAAa,IAAIC,MAA4B;IAE9D,UAAU;IACFC,aAAa;QACnB,KAAK,MAAMC,YAAY,IAAI,CAACH,UAAU,CAAE;YACtCG,SAAS,IAAI,CAACC,KAAK;QACrB;IACF;IAEAC,UAAUF,QAA8B,EAAE;QACxC,IAAI,CAACH,UAAU,CAACM,GAAG,CAACH;QAEpB,OAAO,IAAM;YACX,IAAI,CAACH,UAAU,CAACO,MAAM,CAACJ;QACzB;IACF;IAEAK,KAAKC,KAAa,EAAE;QAClB,IAAI,CAACX,OAAO,GAAG;QACf,IAAI,CAACC,MAAM,GAAGU;QAEd,IAAI,CAACP,UAAU;IACjB;IAEAQ,QAAQD,KAAa,EAAE;QACrB,IAAI,CAACX,OAAO,GAAG;QACf,IAAI,CAACC,MAAM,GAAGU;QAEd,IAAI,CAACP,UAAU;IACjB;IAEAS,OAAOF,KAAa,EAAE;QACpB,IAAI,CAACX,OAAO,GAAG;QACf,IAAI,CAACC,MAAM,GAAGU;QAEd,IAAI,CAACP,UAAU;IACjB;IAEAU,OAAO;QACL,IAAI,IAAI,CAACd,OAAO,KAAK,QAAQ;YAC3B,IAAI,CAACA,OAAO,GAAG;YAEf,IAAI,CAACI,UAAU;QACjB,CAAC;IACH;IAEA,aAAa;IACb,IAAIE,QAAsB;QACxB,OAAO;YACLS,QAAQ,IAAI,CAACf,OAAO;YACpBW,OAAO,IAAI,CAACV,MAAM;QACpB;IACF;AACF;AA1DaF;IADZiB,IAAAA,qBAAU;GACEjB;AA4DbkB,0BAAS,CAACC,IAAI,CAACnB,gBACZoB,MAAM,GACNC,gBAAgB","file":"spinner.service.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/global-spinner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAKtD,eAAO,MAAM,aAAa,EAAE,EAsB3B,CAAC","file":"global-spinner.d.ts","sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ spin: false, label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n if (state.spin) {\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n }\n\n return <></>;\n};\n"]}
1
+ {"version":3,"sources":["ui/global-spinner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAKtD,eAAO,MAAM,aAAa,EAAE,EAuC3B,CAAC","file":"global-spinner.d.ts","sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ status: 'stop', label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n switch (state.status) {\n case 'spin':\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n\n case 'success':\n return (\n <Text color=\"green\">\n {symbols.success} {state.label}\n </Text>\n );\n\n case 'failed':\n return (\n <Text color=\"red\">\n {symbols.error} {state.label}\n </Text>\n );\n\n case 'stop':\n default:\n return null;\n }\n};\n"]}
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "GlobalSpinner", {
9
9
  const _jsxRuntime = require("react/jsx-runtime");
10
10
  const _ink = require("ink");
11
11
  const _inkSpinner = /*#__PURE__*/ _interopRequireDefault(require("ink-spinner"));
12
+ const _logSymbols = /*#__PURE__*/ _interopRequireDefault(require("log-symbols"));
12
13
  const _react = require("react");
13
14
  const _services = require("../services");
14
15
  function _interopRequireDefault(obj) {
@@ -19,7 +20,7 @@ function _interopRequireDefault(obj) {
19
20
  const GlobalSpinner = ()=>{
20
21
  // State
21
22
  const [state, setState] = (0, _react.useState)({
22
- spin: false,
23
+ status: 'stop',
23
24
  label: ''
24
25
  });
25
26
  // Effect
@@ -29,15 +30,36 @@ const GlobalSpinner = ()=>{
29
30
  return spinner.subscribe(setState);
30
31
  }, []);
31
32
  // Render
32
- if (state.spin) {
33
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
34
- children: [
35
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_inkSpinner.default, {}),
36
- ' ' + state.label
37
- ]
38
- });
33
+ switch(state.status){
34
+ case 'spin':
35
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
36
+ children: [
37
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_inkSpinner.default, {}),
38
+ ' ' + state.label
39
+ ]
40
+ });
41
+ case 'success':
42
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
43
+ color: "green",
44
+ children: [
45
+ _logSymbols.default.success,
46
+ " ",
47
+ state.label
48
+ ]
49
+ });
50
+ case 'failed':
51
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
52
+ color: "red",
53
+ children: [
54
+ _logSymbols.default.error,
55
+ " ",
56
+ state.label
57
+ ]
58
+ });
59
+ case 'stop':
60
+ default:
61
+ return null;
39
62
  }
40
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
41
63
  };
42
64
 
43
65
  //# sourceMappingURL=global-spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/global-spinner.js"],"sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ spin: false, label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n if (state.spin) {\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n }\n\n return <></>;\n};\n"],"names":["GlobalSpinner","state","setState","useState","spin","label","useLayoutEffect","spinner","container","get","SpinnerService","subscribe","Text","Spinner"],"mappings":"AAAA;;;;+BAOaA;;aAAAA;;;qBAPQ;iEACD;uBAC0B;0BAEU;;;;;;AAGjD,MAAMA,gBAAoB,IAAM;IACrC,QAAQ;IACR,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAAe;QAAEC,MAAM,KAAK;QAAEC,OAAO;IAAG;IAE1E,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAC5CR,SAASK,QAAQN,KAAK;QAEtB,OAAOM,QAAQI,SAAS,CAACT;IAC3B,GAAG,EAAE;IAEL,SAAS;IACT,IAAID,MAAMG,IAAI,EAAE;QACd,qBACE,sBAACQ,SAAI;;8BACH,qBAACC,mBAAO;gBAAI,MAAMZ,MAAMI,KAAK;;;IAGnC,CAAC;IAED,qBAAO;AACT","file":"global-spinner.js"}
1
+ {"version":3,"sources":["ui/global-spinner.js"],"sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ status: 'stop', label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n switch (state.status) {\n case 'spin':\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n\n case 'success':\n return (\n <Text color=\"green\">\n {symbols.success} {state.label}\n </Text>\n );\n\n case 'failed':\n return (\n <Text color=\"red\">\n {symbols.error} {state.label}\n </Text>\n );\n\n case 'stop':\n default:\n return null;\n }\n};\n"],"names":["GlobalSpinner","state","setState","useState","status","label","useLayoutEffect","spinner","container","get","SpinnerService","subscribe","Text","Spinner","color","symbols","success","error"],"mappings":"AAAA;;;;+BAQaA;;aAAAA;;;qBARQ;iEACD;iEACA;uBAC0B;0BAEU;;;;;;AAGjD,MAAMA,gBAAoB,IAAM;IACrC,QAAQ;IACR,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAAe;QAAEC,QAAQ;QAAQC,OAAO;IAAG;IAE7E,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAC5CR,SAASK,QAAQN,KAAK;QAEtB,OAAOM,QAAQI,SAAS,CAACT;IAC3B,GAAG,EAAE;IAEL,SAAS;IACT,OAAQD,MAAMG,MAAM;QAClB,KAAK;YACH,qBACE,sBAACQ,SAAI;;kCACH,qBAACC,mBAAO;oBAAI,MAAMZ,MAAMI,KAAK;;;QAInC,KAAK;YACH,qBACE,sBAACO,SAAI;gBAACE,OAAM;;oBACTC,mBAAO,CAACC,OAAO;oBAAC;oBAAEf,MAAMI,KAAK;;;QAIpC,KAAK;YACH,qBACE,sBAACO,SAAI;gBAACE,OAAM;;oBACTC,mBAAO,CAACE,KAAK;oBAAC;oBAAEhB,MAAMI,KAAK;;;QAIlC,KAAK;QACL;YACE,OAAO,IAAI;IACf;AACF","file":"global-spinner.js"}
@@ -1,5 +1,5 @@
1
- export * from './cli-list';
2
1
  export * from './global-spinner';
3
2
  export * from './layout';
4
3
  export * from './list';
5
4
  export * from './static-logs';
5
+ export * from './workspace-tree';
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC","file":"index.d.ts","sourcesContent":["export * from './cli-list';\nexport * from './global-spinner';\nexport * from './layout';\nexport * from './list';\nexport * from './static-logs';\n"]}
1
+ {"version":3,"sources":["ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC","file":"index.d.ts","sourcesContent":["export * from './global-spinner';\nexport * from './layout';\nexport * from './list';\nexport * from './static-logs';\nexport * from './workspace-tree';\n"]}
package/dist/ui/index.js CHANGED
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- _exportStar(require("./cli-list"), exports);
6
5
  _exportStar(require("./global-spinner"), exports);
7
6
  _exportStar(require("./layout"), exports);
8
7
  _exportStar(require("./list"), exports);
9
8
  _exportStar(require("./static-logs"), exports);
9
+ _exportStar(require("./workspace-tree"), exports);
10
10
  function _exportStar(from, to) {
11
11
  Object.keys(from).forEach(function(k) {
12
12
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/index.js"],"sourcesContent":["export * from './cli-list';\nexport * from './global-spinner';\nexport * from './layout';\nexport * from './list';\nexport * from './static-logs';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA;oBACA;oBACA","file":"index.js"}
1
+ {"version":3,"sources":["ui/index.js"],"sourcesContent":["export * from './global-spinner';\nexport * from './layout';\nexport * from './list';\nexport * from './static-logs';\nexport * from './workspace-tree';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA;oBACA;oBACA","file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/static-logs.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAoB,MAAM,OAAO,CAAC;AAc7C,eAAO,MAAM,UAAU,EAAE,EAwCxB,CAAC","file":"static-logs.d.ts","sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n const olds = logger.transports;\n\n logger.clear();\n logger.add(new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n });\n\n return () => {\n logger.clear();\n\n for (const transport of olds) {\n logger.add(transport);\n }\n };\n }, [write]);\n\n return null;\n};\n"]}
1
+ {"version":3,"sources":["ui/static-logs.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAoB,MAAM,OAAO,CAAC;AAe7C,eAAO,MAAM,UAAU,EAAE,EA+CxB,CAAC","file":"static-logs.d.ts","sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\nimport winston from 'winston';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n\n // Remove Console transport\n for (const transport of logger.transports) {\n if (transport instanceof winston.transports.Console) {\n logger.remove(transport);\n }\n }\n\n // Add custom transport\n const transport = new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n };\n\n logger.add(transport);\n\n return () => {\n logger.remove(transport);\n logger.add(new winston.transports.Console({\n format: consoleFormat\n }));\n };\n }, [write]);\n\n return null;\n};\n"]}
@@ -10,6 +10,7 @@ const _ink = require("ink");
10
10
  const _react = require("react");
11
11
  const _winstonTransport = /*#__PURE__*/ _interopRequireDefault(require("winston-transport"));
12
12
  const _services = require("../services");
13
+ const _winston = /*#__PURE__*/ _interopRequireDefault(require("winston"));
13
14
  function _interopRequireDefault(obj) {
14
15
  return obj && obj.__esModule ? obj : {
15
16
  default: obj
@@ -23,9 +24,14 @@ const StaticLogs = ()=>{
23
24
  // Effect
24
25
  (0, _react.useLayoutEffect)(()=>{
25
26
  const logger = _services.container.get(_services.Logger);
26
- const olds = logger.transports;
27
- logger.clear();
28
- logger.add(new class extends _winstonTransport.default {
27
+ // Remove Console transport
28
+ for (const transport of logger.transports){
29
+ if (transport instanceof _winston.default.transports.Console) {
30
+ logger.remove(transport);
31
+ }
32
+ }
33
+ // Add custom transport
34
+ const transport1 = new class extends _winstonTransport.default {
29
35
  // Constructor
30
36
  constructor(){
31
37
  super({
@@ -40,12 +46,13 @@ const StaticLogs = ()=>{
40
46
  write(info[MESSAGE] + '\n');
41
47
  next();
42
48
  }
43
- });
49
+ };
50
+ logger.add(transport1);
44
51
  return ()=>{
45
- logger.clear();
46
- for (const transport of olds){
47
- logger.add(transport);
48
- }
52
+ logger.remove(transport1);
53
+ logger.add(new _winston.default.transports.Console({
54
+ format: _services.consoleFormat
55
+ }));
49
56
  };
50
57
  }, [
51
58
  write
@@ -1 +1 @@
1
- {"version":3,"sources":["ui/static-logs.js"],"sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n const olds = logger.transports;\n\n logger.clear();\n logger.add(new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n });\n\n return () => {\n logger.clear();\n\n for (const transport of olds) {\n logger.add(transport);\n }\n };\n }, [write]);\n\n return null;\n};\n"],"names":["StaticLogs","MESSAGE","Symbol","for","write","useStderr","useLayoutEffect","logger","container","get","Logger","olds","transports","clear","add","Transport","constructor","format","consoleFormat","log","info","next","setTimeout","emit","transport"],"mappings":"AAAA;;;;+BAeaA;;aAAAA;;qBAfa;uBACW;uEACf;0BAE2B;;;;;;AAEjD,YAAY;AACZ,MAAMC,UAAUC,OAAOC,GAAG,CAAC;AAQpB,MAAMH,aAAiB,IAAM;IAClC,QAAQ;IACR,MAAM,EAAEI,MAAK,EAAE,GAAGC,IAAAA,cAAS;IAE3B,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,SAASC,mBAAS,CAACC,GAAG,CAACC,gBAAM;QACnC,MAAMC,OAAOJ,OAAOK,UAAU;QAE9BL,OAAOM,KAAK;QACZN,OAAOO,GAAG,CAAC,IAAI,cAAcC,yBAAS;YACpC,cAAc;YACdC,aAAc;gBACZ,KAAK,CAAC;oBACJC,QAAQC,uBAAa;gBACvB;YACF;YAEA,UAAU;YACVC,IAAIC,IAAU,EAAEC,IAAgB,EAAQ;gBACtCC,WAAW,IAAM;oBACf,IAAI,CAACC,IAAI,CAAC,UAAUH;gBACtB,GAAG;gBAEHhB,MAAMgB,IAAI,CAACnB,QAAQ,GAAG;gBAEtBoB;YACF;QACF;QAEA,OAAO,IAAM;YACXd,OAAOM,KAAK;YAEZ,KAAK,MAAMW,aAAab,KAAM;gBAC5BJ,OAAOO,GAAG,CAACU;YACb;QACF;IACF,GAAG;QAACpB;KAAM;IAEV,OAAO,IAAI;AACb","file":"static-logs.js"}
1
+ {"version":3,"sources":["ui/static-logs.js"],"sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\nimport winston from 'winston';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n\n // Remove Console transport\n for (const transport of logger.transports) {\n if (transport instanceof winston.transports.Console) {\n logger.remove(transport);\n }\n }\n\n // Add custom transport\n const transport = new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n };\n\n logger.add(transport);\n\n return () => {\n logger.remove(transport);\n logger.add(new winston.transports.Console({\n format: consoleFormat\n }));\n };\n }, [write]);\n\n return null;\n};\n"],"names":["StaticLogs","MESSAGE","Symbol","for","write","useStderr","useLayoutEffect","logger","container","get","Logger","transport","transports","winston","Console","remove","Transport","constructor","format","consoleFormat","log","info","next","setTimeout","emit","add"],"mappings":"AAAA;;;;+BAgBaA;;aAAAA;;qBAhBa;uBACW;uEACf;0BAE2B;8DAC7B;;;;;;AAEpB,YAAY;AACZ,MAAMC,UAAUC,OAAOC,GAAG,CAAC;AAQpB,MAAMH,aAAiB,IAAM;IAClC,QAAQ;IACR,MAAM,EAAEI,MAAK,EAAE,GAAGC,IAAAA,cAAS;IAE3B,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,SAASC,mBAAS,CAACC,GAAG,CAACC,gBAAM;QAEnC,2BAA2B;QAC3B,KAAK,MAAMC,aAAaJ,OAAOK,UAAU,CAAE;YACzC,IAAID,qBAAqBE,gBAAO,CAACD,UAAU,CAACE,OAAO,EAAE;gBACnDP,OAAOQ,MAAM,CAACJ;YAChB,CAAC;QACH;QAEA,uBAAuB;QACvB,MAAMA,aAAY,IAAI,cAAcK,yBAAS;YAC3C,cAAc;YACdC,aAAc;gBACZ,KAAK,CAAC;oBACJC,QAAQC,uBAAa;gBACvB;YACF;YAEA,UAAU;YACVC,IAAIC,IAAU,EAAEC,IAAgB,EAAQ;gBACtCC,WAAW,IAAM;oBACf,IAAI,CAACC,IAAI,CAAC,UAAUH;gBACtB,GAAG;gBAEHjB,MAAMiB,IAAI,CAACpB,QAAQ,GAAG;gBAEtBqB;YACF;QACF;QAEAf,OAAOkB,GAAG,CAACd;QAEX,OAAO,IAAM;YACXJ,OAAOQ,MAAM,CAACJ;YACdJ,OAAOkB,GAAG,CAAC,IAAIZ,gBAAO,CAACD,UAAU,CAACE,OAAO,CAAC;gBACxCI,QAAQC,uBAAa;YACvB;QACF;IACF,GAAG;QAACf;KAAM;IAEV,OAAO,IAAI;AACb","file":"static-logs.js"}
@@ -0,0 +1,8 @@
1
+ import { FC, ReactElement } from 'react';
2
+ import { Workspace } from '../project';
3
+ export interface WorkspaceTreeProps {
4
+ workspace: Workspace;
5
+ dev?: boolean;
6
+ level?: ReactElement;
7
+ }
8
+ export declare const WorkspaceTree: FC<WorkspaceTreeProps>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/workspace-tree.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,YAAY,EAAuB,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAMD,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAwChD,CAAC","file":"workspace-tree.d.ts","sourcesContent":["import { Newline, Text, TextProps } from 'ink';\nimport { FC, ReactElement, useEffect, useState } from 'react';\n\nimport { Workspace } from '../project';\n\n// Types\nexport interface WorkspaceTreeProps {\n workspace: Workspace;\n dev?: boolean;\n level?: ReactElement;\n}\n\n// Utils\nconst style = (dev: boolean): TextProps => ({ color: dev ? 'blue' : '' });\n\n// Component\nexport const WorkspaceTree: FC<WorkspaceTreeProps> = (props) => {\n const { workspace: wks, dev = false, level = '' } = props;\n\n // State\n const [deps, setDeps] = useState<[Workspace, boolean | null][]>([]);\n\n // Effects\n useEffect(() => void (async () => {\n const deps: [Workspace, boolean | null][] = [];\n\n for await (const dep of wks.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of wks.devDependencies()) {\n deps.push([dep, true]);\n }\n\n setDeps(deps);\n })(), [wks]);\n\n // Render\n return (\n <Text>\n <Text {...style(dev)}>{ wks.name }</Text>\n { wks.version && (<Text color=\"grey\">@{ wks.version }</Text>) }\n <Newline />\n\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n { level }<Text {...style(dev)}>{ idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{ level }<Text {...style(dev)}>{ idx === deps.length - 1 ? ' ' : '│' }{' '}</Text></>}\n />\n </Text>\n )) }\n </Text>\n );\n};\n"]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WorkspaceTree", {
6
+ enumerable: true,
7
+ get: ()=>WorkspaceTree
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _ink = require("ink");
11
+ const _react = require("react");
12
+ // Utils
13
+ const style = (dev)=>({
14
+ color: dev ? 'blue' : ''
15
+ });
16
+ const WorkspaceTree = (props)=>{
17
+ const { workspace: wks , dev =false , level ='' } = props;
18
+ // State
19
+ const [deps, setDeps] = (0, _react.useState)([]);
20
+ // Effects
21
+ (0, _react.useEffect)(()=>void (async ()=>{
22
+ const deps = [];
23
+ for await (const dep of wks.dependencies()){
24
+ deps.push([
25
+ dep,
26
+ null
27
+ ]);
28
+ }
29
+ for await (const dep1 of wks.devDependencies()){
30
+ deps.push([
31
+ dep1,
32
+ true
33
+ ]);
34
+ }
35
+ setDeps(deps);
36
+ })(), [
37
+ wks
38
+ ]);
39
+ // Render
40
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
41
+ children: [
42
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
43
+ ...style(dev),
44
+ children: wks.name
45
+ }),
46
+ wks.version && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
47
+ color: "grey",
48
+ children: [
49
+ "@",
50
+ wks.version
51
+ ]
52
+ }),
53
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Newline, {}),
54
+ deps.map(([dep, isDev], idx)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
55
+ children: [
56
+ level,
57
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
58
+ ...style(dev),
59
+ children: [
60
+ idx === deps.length - 1 ? '└' : '├',
61
+ "─",
62
+ ' '
63
+ ]
64
+ }),
65
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(WorkspaceTree, {
66
+ workspace: dep,
67
+ dev: isDev ?? dev,
68
+ level: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
69
+ children: [
70
+ level,
71
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
72
+ ...style(dev),
73
+ children: [
74
+ idx === deps.length - 1 ? ' ' : '│',
75
+ ' '
76
+ ]
77
+ })
78
+ ]
79
+ })
80
+ })
81
+ ]
82
+ }, dep.name))
83
+ ]
84
+ });
85
+ };
86
+
87
+ //# sourceMappingURL=workspace-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/workspace-tree.js"],"sourcesContent":["import { Newline, Text, TextProps } from 'ink';\nimport { FC, ReactElement, useEffect, useState } from 'react';\n\nimport { Workspace } from '../project';\n\n// Types\nexport interface WorkspaceTreeProps {\n workspace: Workspace;\n dev?: boolean;\n level?: ReactElement;\n}\n\n// Utils\nconst style = (dev: boolean): TextProps => ({ color: dev ? 'blue' : '' });\n\n// Component\nexport const WorkspaceTree: FC<WorkspaceTreeProps> = (props) => {\n const { workspace: wks, dev = false, level = '' } = props;\n\n // State\n const [deps, setDeps] = useState<[Workspace, boolean | null][]>([]);\n\n // Effects\n useEffect(() => void (async () => {\n const deps: [Workspace, boolean | null][] = [];\n\n for await (const dep of wks.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of wks.devDependencies()) {\n deps.push([dep, true]);\n }\n\n setDeps(deps);\n })(), [wks]);\n\n // Render\n return (\n <Text>\n <Text {...style(dev)}>{ wks.name }</Text>\n { wks.version && (<Text color=\"grey\">@{ wks.version }</Text>) }\n <Newline />\n\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n { level }<Text {...style(dev)}>{ idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{ level }<Text {...style(dev)}>{ idx === deps.length - 1 ? ' ' : '│' }{' '}</Text></>}\n />\n </Text>\n )) }\n </Text>\n );\n};\n"],"names":["WorkspaceTree","style","dev","color","props","workspace","wks","level","deps","setDeps","useState","useEffect","dep","dependencies","push","devDependencies","Text","name","version","Newline","map","isDev","idx","length"],"mappings":"AAAA;;;;+BAgBaA;;aAAAA;;;qBAhB4B;uBACa;AAWtD,QAAQ;AACR,MAAMC,QAAQ,CAACC,MAA6B,CAAA;QAAEC,OAAOD,MAAM,SAAS,EAAE;IAAC,CAAA;AAGhE,MAAMF,gBAAwC,CAACI,QAAU;IAC9D,MAAM,EAAEC,WAAWC,IAAG,EAAEJ,KAAM,KAAK,CAAA,EAAEK,OAAQ,GAAE,EAAE,GAAGH;IAEpD,QAAQ;IACR,MAAM,CAACI,MAAMC,QAAQ,GAAGC,IAAAA,eAAQ,EAAgC,EAAE;IAElE,UAAU;IACVC,IAAAA,gBAAS,EAAC,IAAM,KAAK,AAAC,CAAA,UAAY;YAChC,MAAMH,OAAsC,EAAE;YAE9C,WAAW,MAAMI,OAAON,IAAIO,YAAY,GAAI;gBAC1CL,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEA,WAAW,MAAMA,QAAON,IAAIS,eAAe,GAAI;gBAC7CP,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEAH,QAAQD;QACV,CAAA,KAAM;QAACF;KAAI;IAEX,SAAS;IACT,qBACE,sBAACU,SAAI;;0BACH,qBAACA,SAAI;gBAAE,GAAGf,MAAMC,IAAI;0BAAII,IAAIW,IAAI;;YAC9BX,IAAIY,OAAO,kBAAK,sBAACF,SAAI;gBAACb,OAAM;;oBAAO;oBAAGG,IAAIY,OAAO;;;0BACnD,qBAACC,YAAO;YAENX,KAAKY,GAAG,CAAC,CAAC,CAACR,KAAKS,MAAM,EAAEC,oBACxB,sBAACN,SAAI;;wBACDT;sCAAO,sBAACS,SAAI;4BAAE,GAAGf,MAAMC,IAAI;;gCAAIoB,QAAQd,KAAKe,MAAM,GAAG,IAAI,MAAM,GAAG;gCAAC;gCAAE;;;sCACvE,qBAACvB;4BACCK,WAAWO;4BACXV,KAAKmB,SAASnB;4BACdK,qBAAO;;oCAAIA;kDAAO,sBAACS,SAAI;wCAAE,GAAGf,MAAMC,IAAI;;4CAAIoB,QAAQd,KAAKe,MAAM,GAAG,IAAI,MAAM,GAAG;4CAAG;;;;;;;mBALzEX,IAAIK,IAAI;;;AAW3B","file":"workspace-tree.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jujulego/jill",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-alpha.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,6 +37,7 @@
37
37
  "ink-spinner": "^4.0.3",
38
38
  "inversify": "^6.0.1",
39
39
  "inversify-inject-decorators": "^3.1.0",
40
+ "log-symbols": "^4.1.0",
40
41
  "normalize-package-data": "^4.0.0",
41
42
  "react": "^17.0.2",
42
43
  "reflect-metadata": "^0.1.13",
@@ -1,15 +0,0 @@
1
- export declare class CliList {
2
- private _headers?;
3
- private readonly _data;
4
- private readonly _columns;
5
- private static _capitalize;
6
- private static _length;
7
- private _updateColumns;
8
- private _formatValue;
9
- setHeaders(headers: string[]): void;
10
- add(data: string[]): void;
11
- lines(): Generator<string, void>;
12
- get columns(): number[];
13
- get headers(): string[];
14
- get data(): string[][];
15
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["ui/cli-list.ts"],"names":[],"mappings":"AAGA,qBAAa,OAAO;IAElB,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IAGzC,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAIpB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKxB,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAajC,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,CAErB;CACF","file":"cli-list.d.ts","sourcesContent":["import chalk from 'chalk';\n\n// Class\nexport class CliList {\n // Attributes\n private _headers?: string[];\n private readonly _data: string[][] = [];\n private readonly _columns: number[] = [];\n\n // Methods\n private static _capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n }\n\n private static _length(txt: string): number {\n return txt.replace(/\\033\\[[^m]*m/g, '').length;\n }\n\n private _updateColumns(data: string[]): void {\n // Add missing columns\n while (data.length > this._columns.length) {\n this._columns.push(0);\n }\n\n // Update columns\n for (let i = 0; i < data.length; ++i) {\n this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));\n }\n }\n\n private _formatValue(value: string, idx: number): string {\n return value + ' '.repeat(this._columns[idx] - CliList._length(value));\n }\n \n setHeaders(headers: string[]): void {\n this._updateColumns(headers);\n this._headers = headers.map(CliList._capitalize);\n }\n \n add(data: string[]): void {\n this._updateColumns(data);\n this._data.push(data);\n }\n\n *lines(): Generator<string, void> {\n if (this._headers) {\n yield this._headers.map((v, i) => chalk.bold(this._formatValue(v, i)))\n .join(' ');\n }\n\n for (const data of this._data) {\n yield data.map((v, i) => this._formatValue(v, i))\n .join(' ');\n }\n }\n\n // Properties\n get columns(): number[] {\n return this._columns;\n }\n\n get headers(): string[] {\n return this._headers || [];\n }\n\n get data(): string[][] {\n return this._data;\n }\n}"]}
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "CliList", {
6
- enumerable: true,
7
- get: ()=>CliList
8
- });
9
- const _chalk = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
10
- function _interopRequireDefault(obj) {
11
- return obj && obj.__esModule ? obj : {
12
- default: obj
13
- };
14
- }
15
- class CliList {
16
- _data = [];
17
- _columns = [];
18
- // Methods
19
- static _capitalize(txt) {
20
- return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
21
- }
22
- static _length(txt) {
23
- return txt.replace(/\033\[[^m]*m/g, '').length;
24
- }
25
- _updateColumns(data) {
26
- // Add missing columns
27
- while(data.length > this._columns.length){
28
- this._columns.push(0);
29
- }
30
- // Update columns
31
- for(let i = 0; i < data.length; ++i){
32
- this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));
33
- }
34
- }
35
- _formatValue(value, idx) {
36
- return value + ' '.repeat(this._columns[idx] - CliList._length(value));
37
- }
38
- setHeaders(headers) {
39
- this._updateColumns(headers);
40
- this._headers = headers.map(CliList._capitalize);
41
- }
42
- add(data) {
43
- this._updateColumns(data);
44
- this._data.push(data);
45
- }
46
- *lines() {
47
- if (this._headers) {
48
- yield this._headers.map((v, i)=>_chalk.default.bold(this._formatValue(v, i))).join(' ');
49
- }
50
- for (const data of this._data){
51
- yield data.map((v, i)=>this._formatValue(v, i)).join(' ');
52
- }
53
- }
54
- // Properties
55
- get columns() {
56
- return this._columns;
57
- }
58
- get headers() {
59
- return this._headers || [];
60
- }
61
- get data() {
62
- return this._data;
63
- }
64
- }
65
-
66
- //# sourceMappingURL=cli-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["ui/cli-list.js"],"sourcesContent":["import chalk from 'chalk';\n\n// Class\nexport class CliList {\n // Attributes\n private _headers?: string[];\n private readonly _data: string[][] = [];\n private readonly _columns: number[] = [];\n\n // Methods\n private static _capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n }\n\n private static _length(txt: string): number {\n return txt.replace(/\\033\\[[^m]*m/g, '').length;\n }\n\n private _updateColumns(data: string[]): void {\n // Add missing columns\n while (data.length > this._columns.length) {\n this._columns.push(0);\n }\n\n // Update columns\n for (let i = 0; i < data.length; ++i) {\n this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));\n }\n }\n\n private _formatValue(value: string, idx: number): string {\n return value + ' '.repeat(this._columns[idx] - CliList._length(value));\n }\n \n setHeaders(headers: string[]): void {\n this._updateColumns(headers);\n this._headers = headers.map(CliList._capitalize);\n }\n \n add(data: string[]): void {\n this._updateColumns(data);\n this._data.push(data);\n }\n\n *lines(): Generator<string, void> {\n if (this._headers) {\n yield this._headers.map((v, i) => chalk.bold(this._formatValue(v, i)))\n .join(' ');\n }\n\n for (const data of this._data) {\n yield data.map((v, i) => this._formatValue(v, i))\n .join(' ');\n }\n }\n\n // Properties\n get columns(): number[] {\n return this._columns;\n }\n\n get headers(): string[] {\n return this._headers || [];\n }\n\n get data(): string[][] {\n return this._data;\n }\n}"],"names":["CliList","_data","_columns","_capitalize","txt","charAt","toUpperCase","substring","toLowerCase","_length","replace","length","_updateColumns","data","push","i","Math","max","_formatValue","value","idx","repeat","setHeaders","headers","_headers","map","add","lines","v","chalk","bold","join","columns"],"mappings":"AAAA;;;;+BAGaA;;aAAAA;;4DAHK;;;;;;AAGX,MAAMA;IAGMC,QAAoB,EAAE,CAAC;IACvBC,WAAqB,EAAE,CAAC;IAEzC,UAAU;IACV,OAAeC,YAAYC,GAAW,EAAU;QAC9C,OAAOA,IAAIC,MAAM,CAAC,GAAGC,WAAW,KAAKF,IAAIG,SAAS,CAAC,GAAGC,WAAW;IACnE;IAEA,OAAeC,QAAQL,GAAW,EAAU;QAC1C,OAAOA,IAAIM,OAAO,CAAC,iBAAiB,IAAIC,MAAM;IAChD;IAEQC,eAAeC,IAAc,EAAQ;QAC3C,sBAAsB;QACtB,MAAOA,KAAKF,MAAM,GAAG,IAAI,CAACT,QAAQ,CAACS,MAAM,CAAE;YACzC,IAAI,CAACT,QAAQ,CAACY,IAAI,CAAC;QACrB;QAEA,iBAAiB;QACjB,IAAK,IAAIC,IAAI,GAAGA,IAAIF,KAAKF,MAAM,EAAE,EAAEI,EAAG;YACpC,IAAI,CAACb,QAAQ,CAACa,EAAE,GAAGC,KAAKC,GAAG,CAAC,IAAI,CAACf,QAAQ,CAACa,EAAE,EAAEf,QAAQS,OAAO,CAACI,IAAI,CAACE,EAAE;QACvE;IACF;IAEQG,aAAaC,KAAa,EAAEC,GAAW,EAAU;QACvD,OAAOD,QAAQ,IAAIE,MAAM,CAAC,IAAI,CAACnB,QAAQ,CAACkB,IAAI,GAAGpB,QAAQS,OAAO,CAACU;IACjE;IAEAG,WAAWC,OAAiB,EAAQ;QAClC,IAAI,CAACX,cAAc,CAACW;QACpB,IAAI,CAACC,QAAQ,GAAGD,QAAQE,GAAG,CAACzB,QAAQG,WAAW;IACjD;IAEAuB,IAAIb,IAAc,EAAQ;QACxB,IAAI,CAACD,cAAc,CAACC;QACpB,IAAI,CAACZ,KAAK,CAACa,IAAI,CAACD;IAClB;IAEA,CAACc,QAAiC;QAChC,IAAI,IAAI,CAACH,QAAQ,EAAE;YACjB,MAAM,IAAI,CAACA,QAAQ,CAACC,GAAG,CAAC,CAACG,GAAGb,IAAMc,cAAK,CAACC,IAAI,CAAC,IAAI,CAACZ,YAAY,CAACU,GAAGb,KAC7DgB,IAAI,CAAC;QACZ,CAAC;QAED,KAAK,MAAMlB,QAAQ,IAAI,CAACZ,KAAK,CAAE;YAC7B,MAAMY,KAAKY,GAAG,CAAC,CAACG,GAAGb,IAAM,IAAI,CAACG,YAAY,CAACU,GAAGb,IAC3CgB,IAAI,CAAC;QACV;IACF;IAEA,aAAa;IACb,IAAIC,UAAoB;QACtB,OAAO,IAAI,CAAC9B,QAAQ;IACtB;IAEA,IAAIqB,UAAoB;QACtB,OAAO,IAAI,CAACC,QAAQ,IAAI,EAAE;IAC5B;IAEA,IAAIX,OAAmB;QACrB,OAAO,IAAI,CAACZ,KAAK;IACnB;AACF","file":"cli-list.js"}