Skip to content

Commit 60044c1

Browse files
authored
Merge pull request #102 from wellwind/codex/determine-current-state
refactor: align builders with feature aliases
2 parents 9c767b0 + dac8c63 commit 60044c1

File tree

75 files changed

+303
-39
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+303
-39
lines changed

builders/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Builders for blog",
55
"builders": "builders.json",
66
"scripts": {
7-
"build": "tsc -p tsconfig.json"
7+
"build": "tsc -p tsconfig.json && node ./scripts/alias-paths.cjs"
88
},
99
"dependencies": {
1010
"@angular-devkit/architect": "~0.1700.0",

builders/scripts/alias-paths.cjs

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
4+
const distRoot = path.resolve(__dirname, '../dist');
5+
const projectRoot = path.resolve(distRoot, '..', '..');
6+
const projectSrcRoot = path.join(projectRoot, 'src');
7+
8+
const aliasPatterns = [
9+
{ match: '@features/', isPrefix: true, target: path.join(distRoot, 'src/features') },
10+
{ match: '@features', isPrefix: false, target: path.join(distRoot, 'src/features/index') },
11+
{ match: '@shared/core/', isPrefix: true, target: path.join(distRoot, 'src/shared/core') },
12+
{ match: '@shared/core', isPrefix: false, target: path.join(distRoot, 'src/shared/core/index') },
13+
];
14+
15+
function resolveAlias(specifier) {
16+
for (const pattern of aliasPatterns) {
17+
if (pattern.isPrefix) {
18+
if (specifier.startsWith(pattern.match)) {
19+
return path.join(pattern.target, specifier.slice(pattern.match.length));
20+
}
21+
} else if (specifier === pattern.match) {
22+
return pattern.target;
23+
}
24+
}
25+
return null;
26+
}
27+
28+
function toRelative(filePath, absolutePath) {
29+
let relative = path.relative(path.dirname(filePath), absolutePath);
30+
if (!relative.startsWith('.')) {
31+
relative = `./${relative}`;
32+
}
33+
return relative.replace(/\\/g, '/');
34+
}
35+
36+
function rewriteFile(filePath) {
37+
const content = fs.readFileSync(filePath, 'utf8');
38+
const updated = content.replace(/require\((['"])([^'"]+)\1\)/g, (match, quote, specifier) => {
39+
const resolved = resolveAlias(specifier);
40+
if (!resolved) {
41+
return match;
42+
}
43+
const relativeSpecifier = toRelative(filePath, resolved);
44+
return `require(${quote}${relativeSpecifier}${quote})`;
45+
});
46+
47+
if (updated !== content) {
48+
fs.writeFileSync(filePath, updated, 'utf8');
49+
}
50+
}
51+
52+
function walk(dir, callback) {
53+
const entries = fs.readdirSync(dir, { withFileTypes: true });
54+
for (const entry of entries) {
55+
const entryPath = path.join(dir, entry.name);
56+
if (entry.isDirectory()) {
57+
walk(entryPath, callback);
58+
} else if (entry.isFile()) {
59+
callback(entryPath);
60+
}
61+
}
62+
}
63+
64+
function rewriteDistRequires() {
65+
if (!fs.existsSync(distRoot)) {
66+
return;
67+
}
68+
69+
walk(distRoot, filePath => {
70+
if (filePath.endsWith('.js')) {
71+
rewriteFile(filePath);
72+
}
73+
});
74+
}
75+
76+
function cleanupProjectArtifacts() {
77+
const targets = [
78+
path.join(projectSrcRoot, 'features'),
79+
path.join(projectSrcRoot, 'shared')
80+
];
81+
82+
for (const target of targets) {
83+
if (!fs.existsSync(target)) {
84+
continue;
85+
}
86+
87+
walk(target, filePath => {
88+
if (filePath.endsWith('.js')) {
89+
const tsPath = filePath.slice(0, -3) + '.ts';
90+
if (fs.existsSync(tsPath)) {
91+
fs.rmSync(filePath);
92+
}
93+
} else if (filePath.endsWith('.js.map')) {
94+
const tsPath = filePath.slice(0, -7) + '.ts';
95+
if (fs.existsSync(tsPath)) {
96+
fs.rmSync(filePath);
97+
}
98+
}
99+
});
100+
}
101+
}
102+
103+
rewriteDistRequires();
104+
cleanupProjectArtifacts();

builders/src/generate-blog-posts-json/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getMarkdownMeta } from './../../../utils/get-markdown-meta';
1+
import { getMarkdownMeta } from '@features/post-detail/domain';
22
import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect';
33
import { JsonObject } from '@angular-devkit/core';
44
import { readdirSync, writeFileSync } from 'fs';

builders/src/generate-prerender-urls/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/ar
22
import { JsonObject } from '@angular-devkit/core';
33
import { readdirSync, writeFileSync } from 'fs';
44
import { range } from 'ramda';
5-
import { slugify } from '../../../utils/slugify';
6-
import { getMarkdownMeta } from '../../../utils/get-markdown-meta';
5+
import { slugify } from '@shared/core';
6+
import { getMarkdownMeta } from '@features/post-detail/domain';
77

88
interface Options extends JsonObject {
99
markdownPostsPath: string;

builders/src/generate-rss/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { JsonObject } from '@angular-devkit/core';
33
import { Feed } from 'feed';
44
import { readdirSync, writeFileSync } from 'fs';
55
import { descend, prop, sortWith, take } from 'ramda';
6-
import { MarkdownMeta } from '../../../utils';
7-
import { getMarkdownMeta } from '../../../utils/get-markdown-meta';
6+
import { MarkdownMeta } from '@shared/core';
7+
import { getMarkdownMeta } from '@features/post-detail/domain';
88

99
interface Options extends JsonObject {
1010
markdownPostsPath: string;

builders/tsconfig.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,25 @@
99
"es5",
1010
"scripthost",
1111
"es2015.collection"
12-
]
13-
}
12+
],
13+
"rootDir": "../",
14+
"baseUrl": "../",
15+
"paths": {
16+
"@features": [
17+
"src/features/index.ts"
18+
],
19+
"@features/*": [
20+
"src/features/*"
21+
],
22+
"@shared/core": [
23+
"src/shared/core/index.ts"
24+
],
25+
"@shared/core/*": [
26+
"src/shared/core/*"
27+
]
28+
}
29+
},
30+
"include": [
31+
"src/**/*.ts"
32+
]
1433
}

docs/phase-2-plan.md

Lines changed: 41 additions & 0 deletions

src/app/blog/blog-archives/blog-archives.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { getRouteData, getRouteParam } from 'src/app/site-common/route-utils';
99
import { BlogPostSubtitleComponent } from '../../site-common/blog-post-subtitle.component';
1010
import { PaginationComponent } from '../../site-common/pagination.component';
1111
import { PostDateAsPathPipe } from '../../site-common/post-date-as-path.pipe';
12-
import { getPagePosts } from '../get-page-posts';
12+
import { getPagePosts } from '@features/blog/domain';
1313

1414
const PAGE_SIZE = 10;
1515

src/app/blog/blog-categories/blog-categories-posts-resolve.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { descend, prop, sortWith } from 'ramda';
44
import { PostMetaWithSlug } from '@shared/core';
55
import { Observable, map } from 'rxjs';
66
import { SitePostService } from '../../site-common/site-post.service';
7-
import { findPosts } from '../find-posts';
7+
import { findPosts } from '@features/blog/domain';
88

99
@Injectable({
1010
providedIn: 'root'

src/app/blog/blog-categories/blog-categories-posts.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { PaginationComponent } from '../../site-common/pagination.component';
1717
import { PostDateAsPathPipe } from '../../site-common/post-date-as-path.pipe';
1818
import { SiteMetaService } from '../../site-common/site-meta.service';
1919
import { UnslugifyPipe } from '../../site-common/unslugify.pipe';
20-
import { getPagePosts } from '../get-page-posts';
20+
import { getPagePosts } from '@features/blog/domain';
2121

2222
const PAGE_SIZE = 10;
2323

0 commit comments

Comments
 (0)