Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
630d4f1
chore: setup verdaccio
mdjastrzebski Nov 28, 2024
df2d8ce
fix typecheck
mdjastrzebski Dec 2, 2024
408a242
debug
mdjastrzebski Dec 2, 2024
da90f32
fix
mdjastrzebski Dec 2, 2024
3087bd7
fix
mdjastrzebski Dec 2, 2024
4a8eb1a
disable tests
mdjastrzebski Dec 2, 2024
06bb1c3
debug
mdjastrzebski Dec 2, 2024
6d38792
publish template package
mdjastrzebski Dec 9, 2024
12b5b07
fix merging of NPM-based templates
mdjastrzebski Dec 9, 2024
6be43f4
cleanup
mdjastrzebski Dec 9, 2024
b7466f1
remove `publishConfig`
mdjastrzebski Dec 9, 2024
3dcb1e4
fix
mdjastrzebski Dec 9, 2024
af0ea29
move verdaccio config
mdjastrzebski Dec 9, 2024
d2ea83f
remove sleep
mdjastrzebski Dec 9, 2024
c1779bf
fix
mdjastrzebski Dec 9, 2024
783cf0c
restore sleep
mdjastrzebski Dec 9, 2024
13ef307
tweaks
mdjastrzebski Dec 9, 2024
53b4503
more tweaks
mdjastrzebski Dec 9, 2024
9988b96
code review changes
mdjastrzebski Dec 10, 2024
faca3bf
code review: limit create app steps
mdjastrzebski Dec 10, 2024
9a314c1
replaceAll
mdjastrzebski Dec 10, 2024
d6a169b
packageJson field removal
mdjastrzebski Dec 10, 2024
0b5cf38
improve verdaccio startup script
mdjastrzebski Dec 10, 2024
494e4c2
chore tweaks
mdjastrzebski Dec 10, 2024
5b13a75
improve verdaccio init script
mdjastrzebski Dec 10, 2024
812e100
simplify verdaccio config
mdjastrzebski Dec 10, 2024
e21033f
pnpm lock
mdjastrzebski Dec 10, 2024
8d6f9b1
swap execa for nano-spawn
mdjastrzebski Dec 10, 2024
6721846
handle also sigterm
mdjastrzebski Dec 10, 2024
a860acf
backup file
mdjastrzebski Dec 10, 2024
0eb6f0c
more tweaks
mdjastrzebski Dec 10, 2024
3e757cb
run verdaccio in bg on ci
mdjastrzebski Dec 10, 2024
53aeeb1
fix help
mdjastrzebski Dec 11, 2024
aa964d5
use npm publish instead of pnpm publish
mdjastrzebski Dec 11, 2024
7c46343
fix issue with removed +x flag on gradlew
mdjastrzebski Dec 12, 2024
d4fe2b0
fix
mdjastrzebski Dec 12, 2024
f5ea026
fix pnpm install
mdjastrzebski Dec 12, 2024
e3cf3dc
improve ci stability
mdjastrzebski Dec 12, 2024
76c8e82
docs
mdjastrzebski Dec 12, 2024
d084842
fix typo
thymikee Dec 12, 2024
d69d232
refactor: cleanup template handling in packages (#47)
mdjastrzebski Dec 12, 2024
ecefea0
fix package.json resolution in cli
mdjastrzebski Dec 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions packages/create-app/e2e/e2e.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ describe('create-app command', { timeout: 30_000 }, () => {

const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
// TODO: fix template application
//expect(packageJson.name).toBe(projectName);
//expect(packageJson.version).toBe('1.0.0');
//expect(packageJson.private).toBe(true);
expect(packageJson.name).toBe(projectName);
expect(packageJson.version).toBe('1.0.0');
expect(packageJson.private).toBe(true);
expect(packageJson.description).not.toBeDefined();
expect(packageJson.author).not.toBeDefined();
expect(packageJson.license).not.toBeDefined();
Expand All @@ -59,6 +59,7 @@ describe('create-app command', { timeout: 30_000 }, () => {
expect(packageJson.homepage).not.toBeDefined();
expect(packageJson.keywords).not.toBeDefined();
expect(packageJson.packageManager).not.toBeDefined();
expect(packageJson.publishConfig).not.toBeDefined();
}
);

Expand All @@ -80,9 +81,9 @@ describe('create-app command', { timeout: 30_000 }, () => {

const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
// TODO: fix template application
//expect(packageJson.name).toBe(projectName);
//expect(packageJson.version).toBe('1.0.0');
//expect(packageJson.private).toBe(true);
expect(packageJson.name).toBe(projectName);
expect(packageJson.version).toBe('1.0.0');
expect(packageJson.private).toBe(true);
expect(packageJson.description).not.toBeDefined();
expect(packageJson.author).not.toBeDefined();
expect(packageJson.license).not.toBeDefined();
Expand All @@ -91,6 +92,7 @@ describe('create-app command', { timeout: 30_000 }, () => {
expect(packageJson.homepage).not.toBeDefined();
expect(packageJson.keywords).not.toBeDefined();
expect(packageJson.packageManager).not.toBeDefined();
expect(packageJson.publishConfig).not.toBeDefined();
});

it(
Expand All @@ -115,9 +117,9 @@ describe('create-app command', { timeout: 30_000 }, () => {

const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
// TODO: fix template application
//expect(packageJson.name).toBe(projectName);
//expect(packageJson.version).toBe('1.0.0');
//expect(packageJson.private).toBe(true);
expect(packageJson.name).toBe(projectName);
expect(packageJson.version).toBe('1.0.0');
expect(packageJson.private).toBe(true);
expect(packageJson.description).not.toBeDefined();
expect(packageJson.author).not.toBeDefined();
expect(packageJson.license).not.toBeDefined();
Expand All @@ -126,6 +128,7 @@ describe('create-app command', { timeout: 30_000 }, () => {
expect(packageJson.homepage).not.toBeDefined();
expect(packageJson.keywords).not.toBeDefined();
expect(packageJson.packageManager).not.toBeDefined();
expect(packageJson.publishConfig).not.toBeDefined();
}
);
});
13 changes: 9 additions & 4 deletions packages/create-app/src/lib/bin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
import {
renameCommonFiles,
renamePlaceholder,
sortDevDepsInPackageJson,
rewritePackageJson,
} from './edit-template.js';
import { copyDirSync, isEmptyDirSync, removeDir } from './fs.js';
import { printLogo } from './logo.js';
Expand All @@ -27,7 +27,7 @@ import {
} from './prompts.js';
import {
downloadTarballFromNpm,
extractTarballFile,
extractTarball,
TemplateInfo,
PLATFORMS,
resolveTemplate as resolveTemplate,
Expand Down Expand Up @@ -92,7 +92,7 @@ export async function run() {

const loader = spinner();
loader.start('Updating template...');
sortDevDepsInPackageJson(absoluteTargetDir);
rewritePackageJson(absoluteTargetDir, projectName);
renameCommonFiles(absoluteTargetDir);
renamePlaceholder(absoluteTargetDir, projectName);
createConfig(absoluteTargetDir, platforms, plugins);
Expand Down Expand Up @@ -131,7 +131,7 @@ async function extractPackage(absoluteTargetDir: string, pkg: TemplateInfo) {
loader.start(`Extracting package ${pkg.name}...`);
}

await extractTarballFile(tarballPath, absoluteTargetDir);
const localPath = await extractTarball(tarballPath, absoluteTargetDir);

if (pkg.packageName) {
fs.unlinkSync(tarballPath);
Expand All @@ -140,6 +140,11 @@ async function extractPackage(absoluteTargetDir: string, pkg: TemplateInfo) {
loader.stop(`Extracted package ${pkg.name}.`);
}

loader.start(`Copying extracted directory ${localPath}...`);
copyDirSync(path.join(localPath, pkg.directory ?? ''), absoluteTargetDir);
loader.stop(`Copied extracted directory ${localPath}.`);

//removeDir(localPath);
return;
}

Expand Down
79 changes: 75 additions & 4 deletions packages/create-app/src/lib/edit-template.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,90 @@
import * as fs from 'node:fs';
import * as path from 'node:path';

export function sortDevDepsInPackageJson(projectPath: string) {
export function rewritePackageJson(projectPath: string, packageName: string) {
const packageJsonPath = path.join(projectPath, 'package.json');
if (!fs.existsSync(packageJsonPath)) {
return;
}

const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));

packageJson.devDependencies = Object.fromEntries(
Object.entries(packageJson.devDependencies).sort()
// Override fields from template
packageJson.name = packageName;
packageJson.version = '1.0.0';
packageJson.private = true;

// Remove fields from template
delete packageJson.description;
delete packageJson.keywords;
delete packageJson.homepage;
delete packageJson.bugs;
delete packageJson.license;
delete packageJson.author;
delete packageJson.contributors;
delete packageJson.funding;
delete packageJson.repository;
delete packageJson.packageManager;
delete packageJson.publishConfig;

if (packageJson.dependencies) {
packageJson.dependencies = Object.fromEntries(
Object.entries(packageJson.dependencies).sort()
);
}

if (packageJson.devDependencies) {
packageJson.devDependencies = Object.fromEntries(
Object.entries(packageJson.devDependencies).sort()
);
}
if (packageJson.peerDependencies) {
packageJson.peerDependencies = Object.fromEntries(
Object.entries(packageJson.peerDependencies).sort()
);
}

fs.writeFileSync(
packageJsonPath,
JSON.stringify(reorderFields(packageJson), null, 2)
);
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
function reorderFields(packageJson: any) {
const {
name,
version,
private: privateValue,
scripts,
dependencies,
devDependencies,
peerDependencies,
...rest
} = packageJson;

const result: Record<string, unknown> = {
name,
version,
private: privateValue,
scripts,
};

if (dependencies) {
result['dependencies'] = dependencies;
}
if (devDependencies) {
result['devDependencies'] = devDependencies;
}
if (peerDependencies) {
result['peerDependencies'] = peerDependencies;
}

for (const key in rest) {
result[key] = rest[key];
}

fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
return result;
}

export function renameCommonFiles(projectPath: string) {
Expand Down
21 changes: 17 additions & 4 deletions packages/create-app/src/lib/templates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,23 @@ export async function downloadTarballFromNpm(
}

// This automatically handles both .tgz and .tar files
export function extractTarballFile(tarballPath: string, targetDir: string) {
return tar.extract({
export async function extractTarball(
tarballPath: string,
targetDir: string
): Promise<string> {
const archiveName = path.basename(tarballPath, path.extname(tarballPath));
const tempFolder = path.join(
targetDir,
'.tmp',
`${archiveName}-${Date.now()}`
);
fs.mkdirSync(tempFolder, { recursive: true });

await tar.extract({
file: tarballPath,
cwd: targetDir,
strip: 1, // Remove the top-level directory
cwd: tempFolder,
strip: 1, // Remove top-level directory
});

return tempFolder;
}
Loading