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.
- package/lib/apps/new-pilet.d.ts +2 -2
- package/lib/apps/new-pilet.js.map +1 -1
- package/lib/apps/new-piral.d.ts +2 -2
- package/lib/apps/new-piral.js +3 -2
- package/lib/apps/new-piral.js.map +1 -1
- package/lib/apps/upgrade-pilet.js +1 -1
- package/lib/apps/upgrade-pilet.js.map +1 -1
- package/lib/commands.js +4 -4
- package/lib/commands.js.map +1 -1
- package/lib/common/config.d.ts +1 -2
- package/lib/common/config.js +1 -2
- package/lib/common/config.js.map +1 -1
- package/lib/common/emulator.js +1 -1
- package/lib/common/emulator.js.map +1 -1
- package/lib/common/enums.d.ts +0 -4
- package/lib/common/enums.js +1 -6
- package/lib/common/enums.js.map +1 -1
- package/lib/common/language.d.ts +3 -13
- package/lib/common/language.js +46 -12
- package/lib/common/language.js.map +1 -1
- package/lib/common/package.d.ts +9 -3
- package/lib/common/package.js +11 -25
- package/lib/common/package.js.map +1 -1
- package/lib/common/scaffold.d.ts +12 -10
- package/lib/common/scaffold.js +6 -12
- package/lib/common/scaffold.js.map +1 -1
- package/lib/common/template.d.ts +1 -3
- package/lib/common/template.js +21 -47
- package/lib/common/template.js.map +1 -1
- package/lib/external/index.js +79 -79
- package/lib/helpers.d.ts +3 -5
- package/lib/helpers.js +2 -20
- package/lib/helpers.js.map +1 -1
- package/lib/injectors/pilet-injector.d.ts +1 -0
- package/lib/injectors/piral-injector.d.ts +1 -0
- package/lib/types/common.d.ts +0 -1
- package/lib/types/public.d.ts +1 -0
- package/package.json +3 -5
- package/src/apps/new-pilet.test.ts +9 -6
- package/src/apps/new-pilet.ts +1 -2
- package/src/apps/new-piral.test.ts +3 -6
- package/src/apps/new-piral.ts +5 -9
- package/src/apps/upgrade-pilet.ts +1 -2
- package/src/commands.ts +5 -6
- package/src/common/config.ts +2 -3
- package/src/common/emulator.ts +2 -2
- package/src/common/enums.ts +0 -5
- package/src/common/language.ts +59 -11
- package/src/common/npm.test.ts +14 -58
- package/src/common/package.test.ts +11 -3
- package/src/common/package.ts +20 -34
- package/src/common/scaffold.ts +8 -16
- package/src/common/template.ts +19 -40
- package/src/helpers.test.ts +2 -22
- package/src/helpers.ts +3 -23
- package/src/types/common.ts +0 -1
- package/src/types/public.ts +2 -0
- package/templates/piral-index.js.ejs +0 -16
package/src/apps/new-pilet.ts
CHANGED
|
@@ -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:
|
|
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',
|
package/src/apps/new-piral.ts
CHANGED
|
@@ -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
|
-
|
|
179
|
+
const data = getPiralScaffoldData(language, root, app, framework, variables);
|
|
181
180
|
|
|
182
|
-
await
|
|
183
|
-
|
|
184
|
-
|
|
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) ?
|
|
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',
|
|
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:
|
|
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',
|
|
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:
|
|
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,
|
package/src/common/config.ts
CHANGED
|
@@ -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:
|
|
81
|
+
language: 'ts' as const,
|
|
83
82
|
host: 'localhost',
|
|
84
83
|
registry: defaultRegistry,
|
|
85
84
|
},
|
package/src/common/emulator.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { join, resolve, relative } from 'path';
|
|
2
2
|
import { findDependencyVersion, copyScaffoldingFiles, isValidDependency } from './package';
|
|
3
|
-
import {
|
|
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
|
|
119
|
+
await createPiralStubIndexIfNotExists(targetDir, 'index.js', ForceOverwrite.yes, {
|
|
120
120
|
name: piralPkg.name,
|
|
121
121
|
outFile: targetFile,
|
|
122
122
|
});
|
package/src/common/enums.ts
CHANGED
package/src/common/language.ts
CHANGED
|
@@ -1,45 +1,93 @@
|
|
|
1
1
|
import { log } from './log';
|
|
2
|
-
import { SourceLanguage } from '
|
|
2
|
+
import { Framework, SourceLanguage } from '../types';
|
|
3
3
|
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
21
|
-
case
|
|
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.
|
|
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> =
|
|
79
|
+
export function getDevDependencies(language: SourceLanguage, typings: Record<string, string> = defaultTypings) {
|
|
32
80
|
switch (language) {
|
|
33
|
-
case
|
|
81
|
+
case 'ts':
|
|
34
82
|
return {
|
|
35
83
|
...typings,
|
|
36
84
|
'@types/node': 'latest',
|
|
37
85
|
typescript: 'latest',
|
|
38
86
|
};
|
|
39
|
-
case
|
|
87
|
+
case 'js':
|
|
40
88
|
return {};
|
|
41
89
|
default:
|
|
42
|
-
log('generalDebug_0003', 'Did not find a valid language.
|
|
90
|
+
log('generalDebug_0003', 'Did not find a valid language. Skipping "devDependencies".');
|
|
43
91
|
return {};
|
|
44
92
|
}
|
|
45
93
|
}
|
package/src/common/npm.test.ts
CHANGED
|
@@ -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('./',
|
|
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(
|
|
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',
|
|
398
|
+
result = combinePackageRef('foo', '', 'registry');
|
|
399
399
|
expect(result).toBe('foo@latest');
|
|
400
|
-
result = combinePackageRef('foo',
|
|
400
|
+
result = combinePackageRef('foo', '', 'file');
|
|
401
401
|
expect(result).toBe('foo');
|
|
402
|
-
result = combinePackageRef('foo',
|
|
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',
|
|
433
|
+
result = getPackageVersion(true, './foo.tgz', '', 'file', './');
|
|
434
434
|
expect(result).toEqual('file:foo.tgz');
|
|
435
|
-
result = getPackageVersion(true, 'git+https://.foo.git',
|
|
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',
|
|
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',
|
|
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(
|
|
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(
|
|
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
|
|
package/src/common/package.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
159
|
-
|
|
160
|
-
language: SourceLanguage
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const
|
|
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(
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
}
|
package/src/common/scaffold.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { join, dirname, resolve, basename, isAbsolute } from 'path';
|
|
2
2
|
import { installNpmPackage } from './npm';
|
|
3
|
-
import { ForceOverwrite
|
|
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
|
|
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
|
|
152
|
+
language,
|
|
161
153
|
sourceName,
|
|
162
|
-
};
|
|
154
|
+
} as const;
|
|
163
155
|
}
|
|
164
156
|
|
|
165
157
|
export async function scaffoldPiletSourceFiles(
|