Skip to content

Commit

Permalink
Merge pull request #241 from jaredwray/moving-to-an-ESM-module
Browse files Browse the repository at this point in the history
moving to an ESM module
  • Loading branch information
jaredwray authored Feb 1, 2024
2 parents 104c4e4 + 717bddb commit 5cdbb4c
Show file tree
Hide file tree
Showing 27 changed files with 239 additions and 206 deletions.
8 changes: 0 additions & 8 deletions bin/writr.js

This file was deleted.

8 changes: 8 additions & 0 deletions bin/writr.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env ts-node

import * as process from 'node:process';
import Writr from '../dist/writr.js';

const writr = new Writr();

await writr.execute(process);
2 changes: 1 addition & 1 deletion init/writr.config.js → init/writr.config.cjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const writrOptions = {
module.exports.options = {
templatePath: './template',
outputPath: './dist',
sitePath: './site',
Expand Down
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "writr",
"version": "2.0.0",
"description": "Beautiful Website for Your Projects",
"type": "module",
"exports": "./dist/index.js",
"types": "./dist/index.d.ts",
"repository": "https://github.com/jaredwray/writr.git",
Expand All @@ -28,12 +29,12 @@
],
"scripts": {
"clean": "rimraf ./dist ./coverage ./node_modules ./package-lock.json ./yarn.lock",
"build": "rimraf ./dist && tsc --project ./tsconfig.build.json",
"build": "rimraf ./dist && tsc",
"test": "xo --fix && vitest run --coverage",
"prepare": "yarn run build"
},
"bin": {
"writr": "./bin/writr.js"
"writr": "./bin/writr.mjs"
},
"dependencies": {
"axios": "^1.6.2",
Expand Down Expand Up @@ -63,7 +64,8 @@
"xo": {
"ignores": [
"writr.config.*",
"vitest.config.mjs"
"vitest.config.mjs",
"bin/writr.js"
]
},
"files": [
Expand Down
Binary file added site/favicon.ico
Binary file not shown.
58 changes: 29 additions & 29 deletions site/variables.css
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
:root {
--font-family: 'Open Sans', sans-serif;
--color-primary: #322d3c;
--color-secondary: #8cdc00;
--color-secondary-dark: #8cdc00;
--color-text: #322d3c;
--background: #ffffff;
--home-background: #ffffff;
--header-background: #ffffff;
--sidebar-background: #ffffff;
--sidebar-text: #322d3c;
--sidebar-text-active: #7d7887;
--border: rgba(238,238,245,1);
--background-search-highlight: var(--color-secondary-dark);
--color-search-highlight: #ffffff;
--search-input-background: var(--header-background);
--code: rgba(238,238,245,1);
--pagefind-ui-text: var(--color-text) !important;
--pagefind-ui-font: var(--font-family) !important;
--pagefind-ui-background: var(--background) !important;
--pagefind-ui-border: var(--border) !important;
--pagefind-ui-scale: .9 !important;
}
--font-family: 'Open Sans', sans-serif;

--color-primary: #08c2ff;
--color-secondary: #bd72d1;
--color-secondary-dark: #af34d0;
--color-text: #322d3c;

--background: #ffffff;
--home-background: #F0F2FA;
--header-background: #fbfbfb;

--sidebar-background: #ffffff;
--sidebar-text: #322d3c;
--sidebar-text-active: #08c2ff;

--border: rgba(238,238,245,1);

--background-search-highlight: var(--color-secondary-dark);
--color-search-highlight: #ffffff;
--search-input-background: var(--header-background);

--code: rgba(238,238,245,1);

--pagefind-ui-text: var(--color-text) !important;
--pagefind-ui-font: var(--font-family) !important;
--pagefind-ui-background: var(--background) !important;
--pagefind-ui-border: var(--border) !important;
--pagefind-ui-scale: .9 !important;
}
7 changes: 7 additions & 0 deletions site/writr.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports.options = {
templatePath: './template',
githubPath: 'jaredwray/writr',
siteTitle: 'Writr',
siteDescription: 'Beautiful Website for Your Projects',
siteUrl: 'https://writr.org',
};
22 changes: 22 additions & 0 deletions src/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,28 @@ export class WritrBuilder {
// Build the robots.txt (/robots.txt)
await this.buildRobotsPage(this.options);

const siteRelativePath = this.options.sitePath;

// Copy over favicon
if (await fs.pathExists(`${siteRelativePath}/favicon.ico`)) {
await fs.copy(`${siteRelativePath}/favicon.ico`, `${this.options.outputPath}/favicon.ico`);
}

// Copy over logo
if (await fs.pathExists(`${siteRelativePath}/logo.png`)) {
await fs.copy(`${siteRelativePath}/logo.png`, `${this.options.outputPath}/logo.png`);
}

// Copy over css
if (await fs.pathExists(`${this.options.templatePath}/css`)) {
await fs.copy(`${this.options.templatePath}/css`, `${this.options.outputPath}/css`);
}

// Copy over variables
if (await fs.pathExists(`${siteRelativePath}/variables.css`)) {
await fs.copy(`${siteRelativePath}/variables.css`, `${this.options.outputPath}/css/variables.css`);
}

const endTime = Date.now();

const executionTime = endTime - startTime;
Expand Down
6 changes: 6 additions & 0 deletions src/console.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import path from 'node:path';
import process from 'node:process';

export class WritrConsole {
log(message: string): void {
console.log(message);
Expand Down Expand Up @@ -103,6 +106,7 @@ export class WritrConsole {
case '-o':
case '--output': {
args.output = argv[i + 1];
args.output = path.join(process.cwd(), args.output);
break;
}

Expand All @@ -115,12 +119,14 @@ export class WritrConsole {
case '-s':
case '--site': {
args.sitePath = argv[i + 1];
args.sitePath = path.join(process.cwd(), args.sitePath);
break;
}

case '-t':
case '--templatePath': {
args.templatePath = argv[i + 1];
args.templatePath = path.join(process.cwd(), args.templatePath);
break;
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/options.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import path from 'node:path';
import process from 'node:process';

export class WritrOptions {
public templatePath = './template';
Expand All @@ -18,14 +20,17 @@ export class WritrOptions {
public parseOptions(options: Record<string, any>) {
if (options.templatePath) {
this.templatePath = options.templatePath as string;
this.templatePath = path.join(process.cwd(), this.templatePath);
}

if (options.outputPath) {
this.outputPath = options.outputPath as string;
this.githubPath = path.join(process.cwd(), this.outputPath);
}

if (options.sitePath) {
this.sitePath = options.sitePath as string;
this.sitePath = path.join(process.cwd(), this.sitePath);
}

if (options.githubPath) {
Expand Down
56 changes: 30 additions & 26 deletions src/writr.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type http from 'node:http';
import path from 'node:path';
import process from 'node:process';
import fs from 'fs-extra';
import updateNotifier from 'update-notifier';
import express from 'express';
import {register} from 'ts-node';
import packageJson from '../package.json';
import {WritrOptions} from './options.js';
import {WritrConsole} from './console.js';
import {WritrBuilder} from './builder.js';
Expand Down Expand Up @@ -37,9 +38,26 @@ export default class Writr {
return this._configFileModule;
}

public checkForUpdates(): void {
const packageJsonPath = path.join(process.cwd(), 'package.json');
if (fs.existsSync(packageJsonPath)) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
updateNotifier({pkg: packageJson}).notify();
}
}

public async execute(process: NodeJS.Process): Promise<void> {
// Check for updates
updateNotifier({pkg: packageJson}).notify();
this.checkForUpdates();

const consoleProcess = this._console.parseProcessArgv(process.argv);

// Update options
if (consoleProcess.args.sitePath) {
this.options.sitePath = consoleProcess.args.sitePath;
}

// Load the Config File
await this.loadConfigFile(this.options.sitePath);
Expand All @@ -50,20 +68,13 @@ export default class Writr {
}

// Run the onPrepare function
try {
if (this._configFileModule.onPrepare) {
if (this._configFileModule.onPrepare) {
try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
await this._configFileModule.onPrepare(this.options);
} catch (error) {
this._console.error((error as Error).message);
}
} catch (error) {
this._console.error((error as Error).message);
}

const consoleProcess = this._console.parseProcessArgv(process.argv);

// Update options
if (consoleProcess.args.sitePath) {
this.options.sitePath = consoleProcess.args.sitePath;
}

if (consoleProcess.args.output) {
Expand All @@ -73,7 +84,7 @@ export default class Writr {
switch (consoleProcess.command) {
case 'init': {
const isTypescript = fs.existsSync('./tsconfig.json') ?? false;
this.generateInit(this.options.sitePath, isTypescript);
this.generateInit(this.options.sitePath);
break;
}

Expand Down Expand Up @@ -112,15 +123,15 @@ export default class Writr {
return files.length === 0;
}

public generateInit(sitePath: string, isTypescript: boolean): void {
public generateInit(sitePath: string): void {
// Check if the site path exists
if (!fs.existsSync(sitePath)) {
fs.mkdirSync(sitePath);
}

// Add the writr.config file based on js or ts
const writrConfigFile = isTypescript ? './init/writr.config.ts' : './init/writr.config.js';
fs.copyFileSync(writrConfigFile, `${sitePath}/writr.config.${isTypescript ? 'ts' : 'js'}`);
const writrConfigFile = './init/writr.config.cjs';
fs.copyFileSync(writrConfigFile, `${sitePath}/writr.config.cjs`);

// Add in the image and favicon
fs.copyFileSync('./init/logo.png', `${sitePath}/logo.png`);
Expand All @@ -141,15 +152,8 @@ export default class Writr {

public async loadConfigFile(sitePath: string): Promise<void> {
if (fs.existsSync(sitePath)) {
const isTypescript = fs.existsSync(`${sitePath}/writr.config.ts`);
const configFile = isTypescript ? `${sitePath}/writr.config.ts` : `${sitePath}/writr.config.js`;
if (isTypescript) {
// Typescript
register({transpileOnly: true});
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
this._configFileModule = await import(configFile);
} else {
// Javascript
const configFile = `${sitePath}/writr.config.cjs`;
if (fs.existsSync(configFile)) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
this._configFileModule = await import(configFile);
}
Expand Down
61 changes: 0 additions & 61 deletions test/build.test.ts

This file was deleted.

3 changes: 2 additions & 1 deletion test/builder.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import {afterEach, beforeEach, expect, it, describe, vi} from 'vitest';
import * as fs from 'fs-extra';
import axios from 'axios';
Expand Down Expand Up @@ -61,7 +62,7 @@ describe('WritrBuilder', () => {
try {
await builder.build();
} finally {
await fs.remove(builder.options.outputPath);
await fs.rm(builder.options.outputPath, {recursive: true});
}

expect(consoleMessage).toContain('Build');
Expand Down
Loading

0 comments on commit 5cdbb4c

Please sign in to comment.