123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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 = '*';
|