mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 19:21:34 +08:00
chore(): begin adding ionic components to mono-repo.
This commit is contained in:
115
packages/ionic-angular/scripts/gulp/tasks/theme.ts
Normal file
115
packages/ionic-angular/scripts/gulp/tasks/theme.ts
Normal file
@ -0,0 +1,115 @@
|
||||
import { task } from 'gulp';
|
||||
import { SRC_ROOT, SRC_COMPONENTS_ROOT } from '../constants';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
|
||||
task('theme', (done: () => void) => {
|
||||
let opts: GenerateThemeOptions = {
|
||||
src: path.join(SRC_COMPONENTS_ROOT),
|
||||
dest: path.join(SRC_ROOT, 'ionic-generate.scss')
|
||||
};
|
||||
generateThemeSource(opts);
|
||||
});
|
||||
|
||||
|
||||
export function generateThemeSource(opts: GenerateThemeOptions) {
|
||||
console.log(`[theme] src: ${opts.src}`);
|
||||
console.log(`[theme] desc: ${opts.dest}`);
|
||||
|
||||
let components = getSourceComponents(opts);
|
||||
generateManifest(opts, components);
|
||||
}
|
||||
|
||||
|
||||
function generateManifest(opts: GenerateThemeOptions, components: Component[]) {
|
||||
|
||||
components.forEach(c => {
|
||||
console.log(c.name);
|
||||
|
||||
c.modes.forEach(m => {
|
||||
console.log(` ${m.mode} ${m.src}`);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getSourceComponents(opts: GenerateThemeOptions) {
|
||||
let components: Component[] = [];
|
||||
|
||||
function readFiles(src: string, fillFiles: string[]) {
|
||||
fs.readdirSync(src).forEach((file, index) => {
|
||||
var filePath = path.join(src, file);
|
||||
var fsStats = fs.statSync(filePath);
|
||||
if (fsStats.isDirectory()) {
|
||||
readFiles(filePath, fillFiles);
|
||||
} else if (fsStats.isFile()) {
|
||||
fillFiles.push(filePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let files: string[] = [];
|
||||
readFiles(opts.src, files);
|
||||
|
||||
files = files.filter(f => f.slice(-5) === '.scss');
|
||||
files.sort();
|
||||
|
||||
files.forEach(f => {
|
||||
var componentRoot = f.replace(opts.src + '/', '');
|
||||
var fileSplit = componentRoot.split('/');
|
||||
var componentName = fileSplit[0];
|
||||
var fileName = fileSplit[1];
|
||||
|
||||
var component = components.find(c => c.name === componentName);
|
||||
if (!component) {
|
||||
component = {
|
||||
name: componentName,
|
||||
modes: []
|
||||
};
|
||||
components.push(component);
|
||||
}
|
||||
|
||||
fileSplit = fileName.split('.');
|
||||
if (fileSplit.length === 3) {
|
||||
component.modes.push({
|
||||
src: f,
|
||||
mode: fileSplit[1]
|
||||
});
|
||||
|
||||
} else {
|
||||
component.modes.unshift({
|
||||
src: f,
|
||||
mode: DEFAULT_MODE
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
console.log(`[theme] components: ${components.length}`);
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
|
||||
export interface GenerateThemeOptions {
|
||||
src: string;
|
||||
dest: string;
|
||||
includeModes?: string[];
|
||||
excludeModes?: string[];
|
||||
includeComponents?: string[];
|
||||
excludeComponents?: string[];
|
||||
}
|
||||
|
||||
export interface Component {
|
||||
name: string;
|
||||
modes: FileDetails[];
|
||||
}
|
||||
|
||||
export interface FileDetails {
|
||||
src: string;
|
||||
mode: string;
|
||||
}
|
||||
|
||||
const DEFAULT_MODE = '*';
|
Reference in New Issue
Block a user