Skip to content

Commit 161ecf0

Browse files
committed
barely working version :)
1 parent 64387e6 commit 161ecf0

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

src/index.js

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,57 @@
11
'use strict';
22

33
import './guard';
4-
import fs from 'fs';
54
import hook from './hook';
65
import postcss from 'postcss';
6+
import { basename, dirname, join, resolve } from 'path';
7+
import { readFileSync } from 'fs';
78

89
import extractImports from 'postcss-modules-extract-imports';
910
import localByDefault from 'postcss-modules-local-by-default';
1011
import scope from 'postcss-modules-scope';
12+
import parser from './parser';
1113

1214
let plugins = [localByDefault, extractImports, scope];
1315

14-
hook(filename => postcss(plugins).process(fs.readFileSync(filename, 'utf8')).css);
16+
const load = (sourceString, sourcePath, trace, pathFetcher) => {
17+
let exportTokens = {};
18+
let result = postcss(plugins.concat(new parser({ exportTokens, pathFetcher, trace })))
19+
.process(sourceString, {from: '/' + sourcePath})
20+
.stringify();
21+
22+
return { injectableSource: result.css, exportTokens: exportTokens };
23+
}
24+
25+
hook(filename => {
26+
const root = dirname(filename);
27+
const sources = {};
28+
const tokensByFile = {};
29+
let importNr = 0;
30+
31+
const fetch = (_newPath, _relativeTo, _trace) => {
32+
let newPath = _newPath.replace(/^["']|["']$/g, '');
33+
let trace = _trace || String.fromCharCode(importNr++);
34+
35+
let relativeDir = dirname(_relativeTo);
36+
let rootRelativePath = resolve(relativeDir, newPath);
37+
let fileRelativePath = resolve(join(root, relativeDir), newPath);
38+
39+
const tokens = tokensByFile[fileRelativePath];
40+
if (tokens) {
41+
return tokens;
42+
}
43+
44+
let source = readFileSync(fileRelativePath, 'utf-8');
45+
let { injectableSource, exportTokens } = load(source, rootRelativePath, trace, fetch);
46+
47+
sources[trace] = injectableSource;
48+
tokensByFile[fileRelativePath] = exportTokens;
49+
50+
return exportTokens;
51+
}
52+
53+
return fetch(basename(filename), '/');
54+
});
1555

1656
/**
1757
* @param {object} opts

0 commit comments

Comments
 (0)