piral-cli 0.15.0-alpha.4311 → 0.15.0-alpha.4345

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 (58) hide show
  1. package/lib/apps/new-pilet.d.ts +2 -2
  2. package/lib/apps/new-pilet.js.map +1 -1
  3. package/lib/apps/new-piral.d.ts +2 -2
  4. package/lib/apps/new-piral.js +3 -2
  5. package/lib/apps/new-piral.js.map +1 -1
  6. package/lib/apps/upgrade-pilet.js +1 -1
  7. package/lib/apps/upgrade-pilet.js.map +1 -1
  8. package/lib/commands.js +4 -4
  9. package/lib/commands.js.map +1 -1
  10. package/lib/common/config.d.ts +1 -2
  11. package/lib/common/config.js +1 -2
  12. package/lib/common/config.js.map +1 -1
  13. package/lib/common/emulator.js +1 -1
  14. package/lib/common/emulator.js.map +1 -1
  15. package/lib/common/enums.d.ts +0 -4
  16. package/lib/common/enums.js +1 -6
  17. package/lib/common/enums.js.map +1 -1
  18. package/lib/common/language.d.ts +3 -13
  19. package/lib/common/language.js +46 -12
  20. package/lib/common/language.js.map +1 -1
  21. package/lib/common/package.d.ts +9 -3
  22. package/lib/common/package.js +11 -25
  23. package/lib/common/package.js.map +1 -1
  24. package/lib/common/scaffold.d.ts +12 -10
  25. package/lib/common/scaffold.js +6 -12
  26. package/lib/common/scaffold.js.map +1 -1
  27. package/lib/common/template.d.ts +1 -3
  28. package/lib/common/template.js +21 -47
  29. package/lib/common/template.js.map +1 -1
  30. package/lib/external/index.js +79 -79
  31. package/lib/helpers.d.ts +3 -5
  32. package/lib/helpers.js +2 -20
  33. package/lib/helpers.js.map +1 -1
  34. package/lib/injectors/pilet-injector.d.ts +1 -0
  35. package/lib/injectors/piral-injector.d.ts +1 -0
  36. package/lib/types/common.d.ts +0 -1
  37. package/lib/types/public.d.ts +1 -0
  38. package/package.json +3 -5
  39. package/src/apps/new-pilet.test.ts +9 -6
  40. package/src/apps/new-pilet.ts +1 -2
  41. package/src/apps/new-piral.test.ts +3 -6
  42. package/src/apps/new-piral.ts +5 -9
  43. package/src/apps/upgrade-pilet.ts +1 -2
  44. package/src/commands.ts +5 -6
  45. package/src/common/config.ts +2 -3
  46. package/src/common/emulator.ts +2 -2
  47. package/src/common/enums.ts +0 -5
  48. package/src/common/language.ts +59 -11
  49. package/src/common/npm.test.ts +14 -58
  50. package/src/common/package.test.ts +11 -3
  51. package/src/common/package.ts +20 -34
  52. package/src/common/scaffold.ts +8 -16
  53. package/src/common/template.ts +19 -40
  54. package/src/helpers.test.ts +2 -22
  55. package/src/helpers.ts +3 -23
  56. package/src/types/common.ts +0 -1
  57. package/src/types/public.ts +2 -0
  58. package/templates/piral-index.js.ejs +0 -16
@@ -1,8 +1,7 @@
1
1
  import { resolve, basename } from 'path';
2
- import { LogLevels, NpmClientType } from '../types';
2
+ import { SourceLanguage, LogLevels, NpmClientType } from '../types';
3
3
  import {
4
4
  ForceOverwrite,
5
- SourceLanguage,
6
5
  createDirectory,
7
6
  createFileIfNotExists,
8
7
  installNpmPackage,
@@ -2,7 +2,6 @@ import { mkdtempSync, existsSync } from 'fs';
2
2
  import { tmpdir } from 'os';
3
3
  import { join, resolve } from 'path';
4
4
  import { newPiral } from './new-piral';
5
- import { SourceLanguage } from '../common';
6
5
 
7
6
  function createTempDir() {
8
7
  return mkdtempSync(join(tmpdir(), 'piral-tests-new-piral-'));
@@ -19,9 +18,10 @@ jest.mock('../common/clients/npm', () => {
19
18
  };
20
19
  });
21
20
 
21
+ jest.setTimeout(60000);
22
+
22
23
  describe('New Piral Command', () => {
23
24
  it('scaffolding in an empty directory works', async () => {
24
- jest.setTimeout(60000);
25
25
  const dir = createTempDir();
26
26
  await newPiral(dir, { install: false });
27
27
  expect(existsSync(resolve(dir, 'node_modules/piral/package.json'))).toBeTruthy();
@@ -34,10 +34,9 @@ describe('New Piral Command', () => {
34
34
  });
35
35
 
36
36
  it('scaffolding with language JS works', async () => {
37
- jest.setTimeout(60000);
38
37
  const dir = createTempDir();
39
38
  await newPiral(dir, {
40
- language: SourceLanguage.js,
39
+ language: 'js',
41
40
  install: false,
42
41
  });
43
42
  expect(existsSync(resolve(dir, 'node_modules/piral/package.json'))).toBeTruthy();
@@ -50,7 +49,6 @@ describe('New Piral Command', () => {
50
49
  });
51
50
 
52
51
  it('scaffolding for piral-core works', async () => {
53
- jest.setTimeout(60000);
54
52
  const dir = createTempDir();
55
53
  await newPiral(dir, {
56
54
  framework: 'piral-core',
@@ -68,7 +66,6 @@ describe('New Piral Command', () => {
68
66
  });
69
67
 
70
68
  it('scaffolding for piral-base works', async () => {
71
- jest.setTimeout(60000);
72
69
  const dir = createTempDir();
73
70
  await newPiral(dir, {
74
71
  framework: 'piral-base',
@@ -1,9 +1,8 @@
1
1
  import { resolve, basename } from 'path';
2
2
  import { frameworkKeys } from '../helpers';
3
- import { LogLevels, Framework, NpmClientType } from '../types';
3
+ import { SourceLanguage, LogLevels, Framework, NpmClientType } from '../types';
4
4
  import {
5
5
  ForceOverwrite,
6
- SourceLanguage,
7
6
  installNpmPackage,
8
7
  updateExistingJson,
9
8
  getPiralPackage,
@@ -177,14 +176,11 @@ always-auth=true`,
177
176
 
178
177
  progress(`Taking care of templating ...`);
179
178
 
180
- await updateExistingJson(root, 'package.json', getPiralPackage(app, language, version, framework, bundlerName));
179
+ const data = getPiralScaffoldData(language, root, app, framework, variables);
181
180
 
182
- await scaffoldPiralSourceFiles(
183
- template,
184
- registry,
185
- getPiralScaffoldData(language, root, app, framework, variables),
186
- forceOverwrite,
187
- );
181
+ await updateExistingJson(root, 'package.json', getPiralPackage(app, data, version, bundlerName));
182
+
183
+ await scaffoldPiralSourceFiles(template, registry, data, forceOverwrite);
188
184
 
189
185
  if (install) {
190
186
  progress(`Installing dependencies ...`);
@@ -24,7 +24,6 @@ import {
24
24
  getPiralPath,
25
25
  isMonorepoPackageRef,
26
26
  getPiletScaffoldData,
27
- SourceLanguage,
28
27
  } from '../common';
29
28
 
30
29
  export interface UpgradePiletOptions {
@@ -105,7 +104,7 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
105
104
 
106
105
  if (piral && typeof piral === 'object') {
107
106
  const sourceName = piral.name;
108
- const language = /\.jsx?$/.test(source) ? SourceLanguage.js : SourceLanguage.ts;
107
+ const language = /\.jsx?$/.test(source) ? 'js' : 'ts';
109
108
 
110
109
  if (!sourceName || typeof sourceName !== 'string') {
111
110
  fail('invalidPiletPackage_0042');
package/src/commands.ts CHANGED
@@ -6,9 +6,7 @@ import {
6
6
  forceOverwriteKeys,
7
7
  keyOfForceOverwrite,
8
8
  valueOfForceOverwrite,
9
- keyOfSourceLanguage,
10
9
  sourceLanguageKeys,
11
- valueOfSourceLanguage,
12
10
  frameworkKeys,
13
11
  clientTypeKeys,
14
12
  schemaKeys,
@@ -27,6 +25,7 @@ import {
27
25
  PiletSchemaVersion,
28
26
  PiletBuildType,
29
27
  PiletPublishScheme,
28
+ SourceLanguage,
30
29
  } from './types';
31
30
 
32
31
  function specializeCommand(commands: Array<ToolCommand<any>>, command: ToolCommand<any>, suffix: string) {
@@ -299,7 +298,7 @@ const allCommands: Array<ToolCommand<any>> = [
299
298
  .default('force-overwrite', keyOfForceOverwrite(apps.newPiralDefaults.forceOverwrite))
300
299
  .choices('language', sourceLanguageKeys)
301
300
  .describe('language', 'Determines the programming language for the new Piral instance.')
302
- .default('language', keyOfSourceLanguage(apps.newPiralDefaults.language))
301
+ .default('language', apps.newPiralDefaults.language)
303
302
  .string('template')
304
303
  .describe('template', 'Sets the boilerplate template package to be used when scaffolding.')
305
304
  .default('template', apps.newPiralDefaults.template)
@@ -324,7 +323,7 @@ const allCommands: Array<ToolCommand<any>> = [
324
323
  version: args.tag as string,
325
324
  registry: args.registry as string,
326
325
  forceOverwrite: valueOfForceOverwrite(args['force-overwrite'] as string),
327
- language: valueOfSourceLanguage(args.language as string),
326
+ language: args.language as SourceLanguage,
328
327
  install: args.install as boolean,
329
328
  template: args.template as string,
330
329
  logLevel: args['log-level'] as LogLevels,
@@ -684,7 +683,7 @@ const allCommands: Array<ToolCommand<any>> = [
684
683
  .default('log-level', apps.newPiletDefaults.logLevel)
685
684
  .choices('language', sourceLanguageKeys)
686
685
  .describe('language', 'Determines the programming language for the new pilet.')
687
- .default('language', keyOfSourceLanguage(apps.newPiletDefaults.language))
686
+ .default('language', apps.newPiletDefaults.language)
688
687
  .string('template')
689
688
  .describe('template', 'Sets the boilerplate template package to be used when scaffolding.')
690
689
  .default('template', apps.newPiletDefaults.template)
@@ -707,7 +706,7 @@ const allCommands: Array<ToolCommand<any>> = [
707
706
  source: args.source as string,
708
707
  registry: args.registry as string,
709
708
  forceOverwrite: valueOfForceOverwrite(args['force-overwrite'] as string),
710
- language: valueOfSourceLanguage(args.language as string),
709
+ language: args.language as SourceLanguage,
711
710
  logLevel: args['log-level'] as LogLevels,
712
711
  install: args.install as boolean,
713
712
  template: args.template as string,
@@ -1,7 +1,6 @@
1
- import { SourceLanguage } from './enums';
2
1
  import { defaultRegistry } from './constants';
3
2
  import { rc } from '../external';
4
- import { NpmClientType, PiletSchemaVersion } from '../types';
3
+ import { SourceLanguage, NpmClientType, PiletSchemaVersion } from '../types';
5
4
 
6
5
  export interface PiralCliConfig {
7
6
  /**
@@ -79,7 +78,7 @@ export const config: PiralCliConfig = rc(
79
78
  schemaVersion: 'v2' as const,
80
79
  openBrowser: false,
81
80
  port: 1234,
82
- language: SourceLanguage.ts,
81
+ language: 'ts' as const,
83
82
  host: 'localhost',
84
83
  registry: defaultRegistry,
85
84
  },
@@ -1,6 +1,6 @@
1
1
  import { join, resolve, relative } from 'path';
2
2
  import { findDependencyVersion, copyScaffoldingFiles, isValidDependency } from './package';
3
- import { createFileFromTemplateIfNotExists } from './template';
3
+ import { createPiralStubIndexIfNotExists } from './template';
4
4
  import { filesTar, filesOnceTar } from './constants';
5
5
  import { cliVersion } from './info';
6
6
  import { createNpmPackage, makeExternals } from './npm';
@@ -116,7 +116,7 @@ export async function createEmulatorSources(
116
116
  await copyScaffoldingFiles(sourceDir, rootDir, piralPkg.files ?? []);
117
117
 
118
118
  // actually including this one hints that the app shell should have been included - which is forbidden
119
- await createFileFromTemplateIfNotExists('piral', targetDir, 'index.js', ForceOverwrite.yes, {
119
+ await createPiralStubIndexIfNotExists(targetDir, 'index.js', ForceOverwrite.yes, {
120
120
  name: piralPkg.name,
121
121
  outFile: targetFile,
122
122
  });
@@ -3,8 +3,3 @@ export enum ForceOverwrite {
3
3
  prompt,
4
4
  yes,
5
5
  }
6
-
7
- export enum SourceLanguage {
8
- ts,
9
- js,
10
- }
@@ -1,45 +1,93 @@
1
1
  import { log } from './log';
2
- import { SourceLanguage } from './enums';
2
+ import { Framework, SourceLanguage } from '../types';
3
3
 
4
- export const reactDeps = {
4
+ const react17Deps = {
5
5
  react: '^17',
6
6
  'react-dom': '^17',
7
+ };
8
+
9
+ const react18Deps = {
10
+ react: '^18',
11
+ 'react-dom': '^18',
12
+ };
13
+
14
+ const reactRouter5Deps = {
7
15
  'react-router': '^5',
8
16
  'react-router-dom': '^5',
9
17
  };
10
18
 
11
- export const reactTypings = {
19
+ const reactRouter6Deps = {
20
+ 'react-router': '^6',
21
+ 'react-router-dom': '^6',
22
+ };
23
+
24
+ const react17Typings = {
12
25
  '@types/react': '^17',
13
26
  '@types/react-dom': '^17',
27
+ };
28
+
29
+ const react18Typings = {
30
+ '@types/react': '^18',
31
+ '@types/react-dom': '^18',
32
+ };
33
+
34
+ const reactRouter5Typings = {
14
35
  '@types/react-router': '^5',
15
36
  '@types/react-router-dom': '^5',
16
37
  };
17
38
 
18
- export function getDependencies(language: SourceLanguage, packages: Record<string, string> = reactDeps) {
39
+ const defaultDeps = {};
40
+
41
+ const defaultTypings = {
42
+ '@types/react': '*',
43
+ '@types/react-dom': '*',
44
+ };
45
+
46
+ export function getDependencyPackages(framework: Framework, reactVersion: number, reactRouterVersion: number) {
47
+ // take default packages only if piral-core
48
+ return framework !== 'piral-core'
49
+ ? {}
50
+ : {
51
+ ...(reactVersion < 18 ? react17Deps : react18Deps),
52
+ ...(reactRouterVersion < 6 ? reactRouter5Deps : reactRouter6Deps),
53
+ };
54
+ }
55
+
56
+ export function getDevDependencyPackages(framework: Framework, reactVersion: number, reactRouterVersion: number) {
57
+ // take default dev packages only if not piral-base
58
+ return framework === 'piral-base'
59
+ ? {}
60
+ : {
61
+ ...(reactVersion < 18 ? react17Typings : react18Typings),
62
+ ...(reactRouterVersion < 6 ? reactRouter5Typings : {}),
63
+ };
64
+ }
65
+
66
+ export function getDependencies(language: SourceLanguage, packages: Record<string, string> = defaultDeps) {
19
67
  switch (language) {
20
- case SourceLanguage.js:
21
- case SourceLanguage.ts:
68
+ case 'js':
69
+ case 'ts':
22
70
  return {
23
71
  ...packages,
24
72
  };
25
73
  default:
26
- log('generalDebug_0003', 'Did not find a valid language. Just skipping devDependencies.');
74
+ log('generalDebug_0003', 'Did not find a valid language. Skipping "dependencies".');
27
75
  return {};
28
76
  }
29
77
  }
30
78
 
31
- export function getDevDependencies(language: SourceLanguage, typings: Record<string, string> = reactTypings) {
79
+ export function getDevDependencies(language: SourceLanguage, typings: Record<string, string> = defaultTypings) {
32
80
  switch (language) {
33
- case SourceLanguage.ts:
81
+ case 'ts':
34
82
  return {
35
83
  ...typings,
36
84
  '@types/node': 'latest',
37
85
  typescript: 'latest',
38
86
  };
39
- case SourceLanguage.js:
87
+ case 'js':
40
88
  return {};
41
89
  default:
42
- log('generalDebug_0003', 'Did not find a valid language. Just skipping devDependencies.');
90
+ log('generalDebug_0003', 'Did not find a valid language. Skipping "devDependencies".');
43
91
  return {};
44
92
  }
45
93
  }
@@ -66,7 +66,7 @@ jest.mock('fs', () => ({
66
66
  existsSync: (file: string) => {
67
67
  return true;
68
68
  },
69
- readFile: (file: string, type: string, callback: (err: NodeJS.ErrnoException, data: string) => void) => {
69
+ readFile: (file: string, type: string, callback: (err: NodeJS.ErrnoException | undefined, data: string) => void) => {
70
70
  return callback(undefined, '');
71
71
  },
72
72
  realpathSync: () => ({}),
@@ -320,7 +320,7 @@ describe('npm Module', () => {
320
320
  });
321
321
 
322
322
  it('check if package from nothing is not local', () => {
323
- const result = isLocalPackage('./', null);
323
+ const result = isLocalPackage('./', '');
324
324
  expect(result).toBeFalsy();
325
325
  });
326
326
 
@@ -364,7 +364,7 @@ describe('npm Module', () => {
364
364
  expect(result).toBeTruthy();
365
365
  result = isGitPackage('git+');
366
366
  expect(result).toBeTruthy();
367
- result = isGitPackage(null);
367
+ result = isGitPackage('');
368
368
  expect(result).toBeFalsy();
369
369
  });
370
370
 
@@ -395,11 +395,11 @@ describe('npm Module', () => {
395
395
  it('combine package refernce', () => {
396
396
  let result = combinePackageRef('foo', '1.0.0', 'registry');
397
397
  expect(result).toBe('foo@1.0.0');
398
- result = combinePackageRef('foo', null, 'registry');
398
+ result = combinePackageRef('foo', '', 'registry');
399
399
  expect(result).toBe('foo@latest');
400
- result = combinePackageRef('foo', null, 'file');
400
+ result = combinePackageRef('foo', '', 'file');
401
401
  expect(result).toBe('foo');
402
- result = combinePackageRef('foo', null, 'git');
402
+ result = combinePackageRef('foo', '', 'git');
403
403
  expect(result).toBe('foo');
404
404
  });
405
405
 
@@ -430,18 +430,18 @@ describe('npm Module', () => {
430
430
  expect(result).toEqual('1.0.0');
431
431
  result = getPackageVersion(false, 'foo', '1.0.0', 'registry', './');
432
432
  expect(result).toBeFalsy();
433
- result = getPackageVersion(true, './foo.tgz', null, 'file', './');
433
+ result = getPackageVersion(true, './foo.tgz', '', 'file', './');
434
434
  expect(result).toEqual('file:foo.tgz');
435
- result = getPackageVersion(true, 'git+https://.foo.git', null, 'git', null);
435
+ result = getPackageVersion(true, 'git+https://.foo.git', '', 'git', '');
436
436
  expect(result).toEqual('git+https://.foo.git');
437
437
  });
438
438
 
439
439
  it('gets path to git package', () => {
440
- const result = getCurrentPackageDetails('./', './foo.tgz', null, 'file://foo.tgz', './');
440
+ const result = getCurrentPackageDetails('./', './foo.tgz', '', 'file://foo.tgz', './');
441
441
  result.then(([path, version]) => {
442
442
  expect(path).not.toBeUndefined();
443
443
  });
444
- const result2 = getCurrentPackageDetails('./', './foo.tgz', null, 'git+https://.foo.git', './');
444
+ const result2 = getCurrentPackageDetails('./', './foo.tgz', '', 'git+https://.foo.git', './');
445
445
  result2.then(([path, version]) => {
446
446
  expect(path).not.toBeUndefined();
447
447
  });
@@ -454,32 +454,12 @@ describe('npm Module', () => {
454
454
 
455
455
  it('makeExternals without externals returns coreExternals', () => {
456
456
  const externals = makeExternals(process.cwd(), { piral: '*' });
457
- expect(externals).toEqual([
458
- 'react',
459
- 'react-dom',
460
- 'react-router',
461
- 'react-router-dom',
462
- 'history',
463
- 'tslib',
464
- 'path-to-regexp',
465
- '@libre/atom',
466
- '@dbeining/react-atom',
467
- ]);
457
+ expect(externals).toEqual(['react', 'react-dom', 'react-router', 'react-router-dom', 'history', 'tslib']);
468
458
  });
469
459
 
470
460
  it('makeExternals with no externals returns coreExternals', () => {
471
461
  const externals = makeExternals(process.cwd(), { piral: '*' }, []);
472
- expect(externals).toEqual([
473
- 'react',
474
- 'react-dom',
475
- 'react-router',
476
- 'react-router-dom',
477
- 'history',
478
- 'tslib',
479
- 'path-to-regexp',
480
- '@libre/atom',
481
- '@dbeining/react-atom',
482
- ]);
462
+ expect(externals).toEqual(['react', 'react-dom', 'react-router', 'react-router-dom', 'history', 'tslib']);
483
463
  });
484
464
 
485
465
  it('makeExternals with exclude coreExternals returns empty set', () => {
@@ -498,41 +478,17 @@ describe('npm Module', () => {
498
478
  'react-router-dom',
499
479
  'history',
500
480
  'tslib',
501
- 'path-to-regexp',
502
- '@libre/atom',
503
- '@dbeining/react-atom',
504
481
  ]);
505
482
  });
506
483
 
507
484
  it('makeExternals with external duplicate only reflects coreExternals', () => {
508
485
  const externals = makeExternals(process.cwd(), { piral: '*' }, ['react', 'foo']);
509
- expect(externals).toEqual([
510
- 'react',
511
- 'foo',
512
- 'react-dom',
513
- 'react-router',
514
- 'react-router-dom',
515
- 'history',
516
- 'tslib',
517
- 'path-to-regexp',
518
- '@libre/atom',
519
- '@dbeining/react-atom',
520
- ]);
486
+ expect(externals).toEqual(['react', 'foo', 'react-dom', 'react-router', 'react-router-dom', 'history', 'tslib']);
521
487
  });
522
488
 
523
489
  it('makeExternals with explicit include and exclude', () => {
524
490
  const externals = makeExternals(process.cwd(), { piral: '*' }, ['react', 'react-calendar', '!history']);
525
- expect(externals).toEqual([
526
- 'react',
527
- 'react-calendar',
528
- 'react-dom',
529
- 'react-router',
530
- 'react-router-dom',
531
- 'tslib',
532
- 'path-to-regexp',
533
- '@libre/atom',
534
- '@dbeining/react-atom',
535
- ]);
491
+ expect(externals).toEqual(['react', 'react-calendar', 'react-dom', 'react-router', 'react-router-dom', 'tslib']);
536
492
  });
537
493
 
538
494
  it('makeExternals with all exclude and explicit include', () => {
@@ -1,6 +1,5 @@
1
1
  import { findPackageVersion, getPiralPackage, getPiletsInfo, retrievePiletData } from './package';
2
2
  import { cliVersion } from './info';
3
- import { SourceLanguage } from './enums';
4
3
 
5
4
  describe('CLI package module', () => {
6
5
  it('findPackageVersion finds the current package version', async () => {
@@ -48,9 +47,18 @@ describe('CLI package module', () => {
48
47
  });
49
48
 
50
49
  it('getPiralPackage returns piral package', () => {
51
- let result = getPiralPackage('app', SourceLanguage.ts, '1.0.0', 'piral-base', 'webpack');
50
+ let result = getPiralPackage(
51
+ 'app',
52
+ { language: 'ts', packageName: 'piral-base', reactRouterVersion: 5, reactVersion: 17 },
53
+ '1.0.0',
54
+ 'webpack',
55
+ );
52
56
  expect(result.devDependencies['piral-cli-webpack']).toEqual('1.0.0');
53
- result = getPiralPackage('app', SourceLanguage.ts, '1.0.0', 'piral-base');
57
+ result = getPiralPackage(
58
+ 'app',
59
+ { language: 'ts', packageName: 'piral-base', reactRouterVersion: 5, reactVersion: 17 },
60
+ '1.0.0',
61
+ );
54
62
  expect(result.devDependencies).not.toContain('piral-cli-webpack');
55
63
  });
56
64
 
@@ -2,18 +2,17 @@ import { resolve, join, extname, basename, dirname, relative } from 'path';
2
2
  import { log, fail } from './log';
3
3
  import { cliVersion } from './info';
4
4
  import { unpackTarball } from './archive';
5
- import { getDependencies, getDevDependencies } from './language';
6
- import { SourceLanguage, ForceOverwrite } from './enums';
5
+ import { getDependencies, getDependencyPackages, getDevDependencies, getDevDependencyPackages } from './language';
6
+ import { ForceOverwrite } from './enums';
7
7
  import { checkAppShellCompatibility } from './compatibility';
8
8
  import { deepMerge } from './merge';
9
- import { applyTemplate } from './template';
10
9
  import { readImportmap } from './importmap';
11
10
  import { filesTar, filesOnceTar, declarationEntryExtensions, bundlerNames } from './constants';
12
11
  import { getHash, checkIsDirectory, matchFiles } from './io';
13
12
  import { readJson, copy, updateExistingJson, findFile, checkExists } from './io';
14
13
  import { isGitPackage, isLocalPackage, makeGitUrl, makeFilePath } from './npm';
15
14
  import { makePiletExternals, makeExternals, findPackageRoot } from './npm';
16
- import { Framework, FileInfo, PiletsInfo, TemplateFileLocation, PackageData } from '../types';
15
+ import { SourceLanguage, Framework, FileInfo, PiletsInfo, TemplateFileLocation, PackageData } from '../types';
17
16
 
18
17
  function appendBundler(devDependencies: Record<string, string>, bundler: string, version: string) {
19
18
  if (bundler && bundler !== 'none') {
@@ -49,7 +48,6 @@ function getDependencyVersion(
49
48
  interface FileDescriptor {
50
49
  sourcePath: string;
51
50
  targetPath: string;
52
- template: boolean;
53
51
  }
54
52
 
55
53
  const globPatternStartIndicators = ['*', '?', '[', '!(', '?(', '+(', '@('];
@@ -59,12 +57,7 @@ async function getMatchingFiles(
59
57
  target: string,
60
58
  file: string | TemplateFileLocation,
61
59
  ): Promise<Array<FileDescriptor>> {
62
- const {
63
- from,
64
- to,
65
- deep = true,
66
- template = false,
67
- } = typeof file === 'string' ? { from: file, to: file, deep: true } : file;
60
+ const { from, to, deep = true } = typeof file === 'string' ? { from: file, to: file, deep: true } : file;
68
61
  const sourcePath = resolve(source, from);
69
62
  const targetPath = resolve(target, to);
70
63
  const isDirectory = await checkIsDirectory(sourcePath);
@@ -76,7 +69,6 @@ async function getMatchingFiles(
76
69
  return files.map((file) => ({
77
70
  sourcePath: file,
78
71
  targetPath: resolve(targetPath, relative(sourcePath, file)),
79
- template,
80
72
  }));
81
73
  } else if (globPatternStartIndicators.some((m) => from.indexOf(m) !== -1)) {
82
74
  log('generalDebug_0003', `Matching using glob "${sourcePath}".`);
@@ -98,7 +90,6 @@ async function getMatchingFiles(
98
90
  return files.map((file) => ({
99
91
  sourcePath: file,
100
92
  targetPath: resolve(tarRoot, relative(relRoot, file)),
101
- template,
102
93
  }));
103
94
  }
104
95
 
@@ -108,7 +99,6 @@ async function getMatchingFiles(
108
99
  {
109
100
  sourcePath,
110
101
  targetPath,
111
- template,
112
102
  },
113
103
  ];
114
104
  }
@@ -155,23 +145,24 @@ export function readPiralPackage(root: string, name: string): Promise<PackageDat
155
145
  return readJson(path, 'package.json');
156
146
  }
157
147
 
158
- export function getPiralPackage(
159
- app: string,
160
- language: SourceLanguage,
161
- version: string,
162
- framework: Framework,
163
- bundler?: string,
164
- ) {
165
- // take default packages only if piral-core
166
- const packages = framework !== 'piral-core' ? {} : undefined;
167
- // take default dev packages only if not piral-base
168
- const typings = framework === 'piral-base' ? {} : undefined;
148
+ export interface PiralPackageData {
149
+ packageName: Framework;
150
+ language: SourceLanguage;
151
+ reactVersion: number;
152
+ reactRouterVersion: number;
153
+ }
154
+
155
+ export function getPiralPackage(app: string, data: PiralPackageData, version: string, bundler?: string) {
156
+ const framework = data.packageName;
169
157
  const devDependencies = {
170
- ...getDevDependencies(language, typings),
158
+ ...getDevDependencies(
159
+ data.language,
160
+ getDevDependencyPackages(framework, data.reactVersion, data.reactRouterVersion),
161
+ ),
171
162
  'piral-cli': `${version}`,
172
163
  };
173
164
  const dependencies = {
174
- ...getDependencies(language, packages),
165
+ ...getDependencies(data.language, getDependencyPackages(framework, data.reactVersion, data.reactRouterVersion)),
175
166
  };
176
167
 
177
168
  appendBundler(devDependencies, bundler, version);
@@ -219,7 +210,6 @@ async function getAvailableFiles(
219
210
  return files.map((file) => ({
220
211
  sourcePath: file,
221
212
  targetPath: resolve(root, relative(base, file)),
222
- template: fileMap.find((m) => resolve(source, m.from) === file)?.template || false,
223
213
  }));
224
214
  }
225
215
 
@@ -249,17 +239,13 @@ async function copyFiles(
249
239
  variables?: Record<string, string>,
250
240
  ) {
251
241
  for (const subfile of subfiles) {
252
- const { sourcePath, targetPath, template } = subfile;
242
+ const { sourcePath, targetPath } = subfile;
253
243
  const exists = await checkExists(sourcePath);
254
244
 
255
245
  if (exists) {
256
246
  const overwrite = originalFiles.some((m) => m.path === targetPath && !m.changed);
257
247
  const force = overwrite ? ForceOverwrite.yes : forceOverwrite;
258
- const written = await copy(sourcePath, targetPath, force);
259
-
260
- if (written && template && variables) {
261
- await applyTemplate(targetPath, variables);
262
- }
248
+ await copy(sourcePath, targetPath, force);
263
249
  } else {
264
250
  fail('cannotFindFile_0046', sourcePath);
265
251
  }
@@ -1,10 +1,10 @@
1
1
  import { join, dirname, resolve, basename, isAbsolute } from 'path';
2
2
  import { installNpmPackage } from './npm';
3
- import { ForceOverwrite, SourceLanguage } from './enums';
3
+ import { ForceOverwrite } from './enums';
4
4
  import { createDirectory, createFileIfNotExists, updateExistingJson } from './io';
5
5
  import { cliVersion, isWindows } from './info';
6
6
  import { log, fail, getLogLevel } from './log';
7
- import { Framework } from '../types';
7
+ import { Framework, SourceLanguage } from '../types';
8
8
 
9
9
  interface TemplateFile {
10
10
  path: string;
@@ -103,16 +103,6 @@ function getTemplatePackageName(type: 'piral' | 'pilet', template: string) {
103
103
  return template;
104
104
  }
105
105
 
106
- function getLanguageName(language: SourceLanguage) {
107
- switch (language) {
108
- case SourceLanguage.js:
109
- return 'js';
110
- case SourceLanguage.ts:
111
- default:
112
- return 'ts';
113
- }
114
- }
115
-
116
106
  export function getPiralScaffoldData(
117
107
  language: SourceLanguage,
118
108
  root: string,
@@ -125,9 +115,11 @@ export function getPiralScaffoldData(
125
115
  ...variables,
126
116
  root,
127
117
  src,
128
- language: getLanguageName(language),
118
+ language,
129
119
  packageName,
130
- };
120
+ reactVersion: parseInt(variables.reactVersion) || 18,
121
+ reactRouterVersion: parseInt(variables.reactRouterVersion) || 5,
122
+ } as const;
131
123
  }
132
124
 
133
125
  export async function scaffoldPiralSourceFiles(
@@ -157,9 +149,9 @@ export function getPiletScaffoldData(
157
149
  ...variables,
158
150
  root,
159
151
  src,
160
- language: getLanguageName(language),
152
+ language,
161
153
  sourceName,
162
- };
154
+ } as const;
163
155
  }
164
156
 
165
157
  export async function scaffoldPiletSourceFiles(