This commit is contained in:
darenhsu
2022-07-17 13:16:16 +08:00
parent 84759556ff
commit befd344ab0
28070 changed files with 4008428 additions and 1 deletions
+3
View File
@@ -0,0 +1,3 @@
import { ModuleThis } from '@nuxt/types/config/module';
import { Options } from './options';
export default function setupBuild(this: ModuleThis, options: Options): void;
+42
View File
@@ -0,0 +1,42 @@
import path from 'path';
import fs from 'fs';
export default function setupBuild(options) {
if (!options.treeShake) {
this.options.css.push('vuetify/dist/vuetify.css');
}
// Enable tree-shaking with VuetifyLoader (https://github.com/vuetifyjs/vuetify-loader)
if (options.treeShake) {
const VuetifyLoaderPlugin = this.nuxt.resolver.requireModule('vuetify-loader/lib/plugin');
this.options.build.transpile.push('vuetify/lib');
this.extendBuild((config) => {
config.plugins.push(new VuetifyLoaderPlugin(typeof options.treeShake === 'object' ? options.treeShake.loaderOptions : {}));
});
}
// Remove module options
const vuetifyOptions = { ...options };
delete vuetifyOptions.customVariables;
delete vuetifyOptions.defaultAssets;
delete vuetifyOptions.optionsPath;
delete vuetifyOptions.preset;
delete vuetifyOptions.treeShake;
let optionsPath = this.nuxt.resolver.resolveAlias(options.optionsPath ||
path.join(this.options.dir.app || 'app', 'vuetify', 'options.js'));
optionsPath = fs.existsSync(optionsPath) ? optionsPath : null;
// Register options template
this.addTemplate({
fileName: `vuetify/options.${optionsPath && optionsPath.endsWith('ts') ? 'ts' : 'js'}`,
src: optionsPath || path.resolve(__dirname, '../templates', 'options.js'),
options: vuetifyOptions
});
// Register plugin
this.addPlugin({
fileName: 'vuetify/plugin.js',
src: path.resolve(__dirname, '../templates', 'plugin.js'),
options: {
defaultIconPreset: options.defaultAssets && options.defaultAssets.icons,
preset: options.preset,
treeShake: options.treeShake
}
});
}
//# sourceMappingURL=build.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAInB,MAAM,CAAC,OAAO,UAAU,UAAU,CAAoB,OAAgB;IACpE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,GAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;KACnD;IAED,uFAAuF;IACvF,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAExF;QAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAEjE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7H,CAAC,CAAC,CAAA;KACH;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;IACrC,OAAO,cAAc,CAAC,eAAe,CAAA;IACrC,OAAO,cAAc,CAAC,aAAa,CAAA;IACnC,OAAO,cAAc,CAAC,WAAW,CAAA;IACjC,OAAO,cAAc,CAAC,MAAM,CAAA;IAC5B,OAAO,cAAc,CAAC,SAAS,CAAA;IAE/B,IAAI,WAAW,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW;QAChF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAI,CAAC,GAAG,IAAI,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAEvE,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA;IAE9D,4BAA4B;IAC5B,IAAI,CAAC,WAAW,CAAC;QACf,QAAQ,EAAE,mBAAmB,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QACtF,GAAG,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC;QACzE,OAAO,EAAE,cAAc;KACxB,CAAC,CAAA;IAEF,kBAAkB;IAClB,IAAI,CAAC,SAAS,CAAC;QACb,QAAQ,EAAE,mBAAmB;QAC7B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC;QACzD,OAAO,EAAE;YACP,iBAAiB,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK;YACvE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B;KACF,CAAC,CAAA;AACJ,CAAC"}
+6
View File
@@ -0,0 +1,6 @@
import { ModuleThis } from '@nuxt/types/config/module';
export interface FontOptions {
family?: string | string[];
size?: number;
}
export default function setupFont(this: ModuleThis, options: FontOptions): void;
+28
View File
@@ -0,0 +1,28 @@
export default function setupFont(options) {
const family = `${options.family}:100,300,400,500,700,900&display=swap`;
if (this.options.modules.some(mod => mod === 'nuxt-webfontloader')) {
this.options.webfontloader = this.options.webfontloader || {};
this.options.webfontloader.google = this.options.webfontloader.google || {};
this.options.webfontloader.google.families = [...this.options.webfontloader.google.families || [], family];
}
else {
this.options.head.link.push({
rel: 'stylesheet',
type: 'text/css',
href: `https://fonts.googleapis.com/css?family=${family}`
});
}
const sass = this.options.build.loaders.sass;
// Add font-family custom variable (only if not Roboto, cause already default in Vuetify styles)
if (options.family !== 'Roboto') {
const userFontFamily = Array.isArray(options.family)
? options.family.map(x => `'${x}'`).join(', ')
: `'${options.family}'`;
sass.prependData = [`$body-font-family: ${userFontFamily}, sans-serif`, sass.prependData].join('\n');
}
// Add font-size custom variable
if (options.size) {
sass.prependData = [`$font-size-root: ${options.size}px`, sass.prependData].join('\n');
}
}
//# sourceMappingURL=font.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"font.js","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAoB,OAAoB;IACvE,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,uCAAuC,CAAA;IAEvE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,oBAAoB,CAAC,EAAE;QACnE,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAA;QAC7D,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAA;QAC3E,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;KAC3G;SAAM;QACL,IAAI,CAAC,OAAO,CAAC,IAAK,CAAC,IAAK,CAAC,IAAI,CAAC;YAC5B,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,2CAA2C,MAAM,EAAE;SAC1D,CAAC,CAAA;KACH;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,OAAQ,CAAC,IAAK,CAAA;IAE/C,gGAAgG;IAChG,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC/B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,CAAC,sBAAsB,cAAc,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACrG;IAED,gCAAgC;IAChC,IAAI,OAAO,CAAC,IAAI,EAAE;QAChB,IAAI,CAAC,WAAW,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACvF;AACH,CAAC"}
+10
View File
@@ -0,0 +1,10 @@
import { ModuleThis } from '@nuxt/types/config/module';
declare const presetsCDN: {
mdi: string;
md: string;
fa: string;
fa4: string;
};
export declare type IconPreset = keyof typeof presetsCDN;
export default function setupIcons(this: ModuleThis, preset: IconPreset): void;
export {};
+17
View File
@@ -0,0 +1,17 @@
const presetsCDN = {
mdi: 'https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css',
md: 'https://fonts.googleapis.com/css?family=Material+Icons',
fa: 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css',
fa4: 'https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css'
};
export default function setupIcons(preset) {
// istanbul ignore else
if (presetsCDN[preset]) {
this.options.head.link.push({
rel: 'stylesheet',
type: 'text/css',
href: presetsCDN[preset]
});
}
}
//# sourceMappingURL=icons.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,+EAA+E;IACpF,EAAE,EAAE,wDAAwD;IAC5D,EAAE,EAAE,mFAAmF;IACvF,GAAG,EAAE,0EAA0E;CAChF,CAAA;AAID,MAAM,CAAC,OAAO,UAAU,UAAU,CAAoB,MAAkB;IACtE,uBAAuB;IACvB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,IAAK,CAAC,IAAK,CAAC,IAAI,CAAC;YAC5B,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;SACzB,CAAC,CAAA;KACH;AACH,CAAC"}
+14
View File
@@ -0,0 +1,14 @@
import { Module } from '@nuxt/types';
import { Framework } from 'vuetify';
import { Options, TreeShakeOptions, VuetifyLoaderOptions } from './options';
declare module '@nuxt/types' {
interface Configuration {
vuetify?: Options;
}
interface Context {
$vuetify: Framework;
}
}
declare const vuetifyModule: Module<Options>;
export { Options, TreeShakeOptions, VuetifyLoaderOptions };
export default vuetifyModule;
+18
View File
@@ -0,0 +1,18 @@
import initOptions from './options';
import setupBuild from './build';
import setupFont from './font';
import setupIcons from './icons';
import setupSass from './sass';
const vuetifyModule = function (moduleOptions) {
this.nuxt.hook('build:before', () => {
const options = initOptions.call(this, moduleOptions);
if (typeof options.defaultAssets === 'object') {
options.defaultAssets.font && setupFont.call(this, options.defaultAssets.font);
options.defaultAssets.icons && setupIcons.call(this, options.defaultAssets.icons);
}
setupSass.call(this, options.customVariables);
setupBuild.call(this, options);
});
};
export default vuetifyModule;
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,WAAgE,MAAM,WAAW,CAAA;AACxF,OAAO,UAAU,MAAM,SAAS,CAAA;AAChC,OAAO,SAAS,MAAM,QAAQ,CAAA;AAC9B,OAAO,UAAU,MAAM,SAAS,CAAA;AAChC,OAAO,SAAS,MAAM,QAAQ,CAAA;AAY9B,MAAM,aAAa,GAAoB,UAAU,aAAa;IAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QAClC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;QAErD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE;YAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAC9E,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SAClF;QAED,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;QAC7C,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAQD,eAAe,aAAa,CAAA"}
+41
View File
@@ -0,0 +1,41 @@
import { SFCDescriptor } from 'vue-template-compiler';
import { VuetifyPreset } from 'vuetify/types/services/presets';
import { ModuleThis } from '@nuxt/types/config/module';
import { FontOptions } from './font';
import { IconPreset } from './icons';
export interface TreeShakeOptions {
components?: string[];
directives?: string[];
loaderOptions?: VuetifyLoaderOptions;
transitions?: string[];
}
export interface VuetifyLoaderOptions {
match?(originalTag: string, context: {
kebabTag: string;
camelTag: string;
path: string;
component: SFCDescriptor;
}): [string, string] | undefined;
}
export interface Options extends Partial<VuetifyPreset> {
customVariables?: string[];
defaultAssets?: {
font?: FontOptions;
icons?: IconPreset | false;
} | false;
optionsPath?: string;
preset?: string;
treeShake?: boolean | TreeShakeOptions;
}
export declare const defaults: {
customVariables: never[];
defaultAssets: {
font: {
family: string;
};
icons: "mdi" | "md" | "fa" | "fa4";
};
optionsPath: undefined;
treeShake: boolean;
};
export default function initOptions(this: ModuleThis, moduleOptions?: Options): Required<Options>;
+21
View File
@@ -0,0 +1,21 @@
import merge from 'deepmerge';
export const defaults = {
customVariables: [],
defaultAssets: {
font: {
family: 'Roboto'
},
icons: 'mdi'
},
optionsPath: undefined,
treeShake: process.env.NODE_ENV === 'production'
};
export default function initOptions(moduleOptions) {
const options = merge.all([
defaults,
this.options.vuetify || {},
moduleOptions || {}
]);
return options;
}
//# sourceMappingURL=options.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,WAAW,CAAA;AAoC7B,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE;QACb,IAAI,EAAE;YACJ,MAAM,EAAE,QAAQ;SACjB;QACD,KAAK,EAAE,KAAmB;KAC3B;IACD,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;CACjD,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAoB,aAAuB;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;QACxB,QAAQ;QACR,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;QAC1B,aAAa,IAAI,EAAE;KACpB,CAAsB,CAAA;IAEvB,OAAO,OAAO,CAAA;AAChB,CAAC"}
+3
View File
@@ -0,0 +1,3 @@
import { ModuleThis } from '@nuxt/types/config/module';
import { Options } from './options';
export default function setupSass(this: ModuleThis, customVariables: Options['customVariables']): void;
+21
View File
@@ -0,0 +1,21 @@
import dartSass from 'sass';
export default function setupSass(customVariables) {
const { sass, scss } = this.options.build.loaders;
// Use Dart Sass
sass.implementation = scss.implementation = dartSass;
// Ensure compatibility with Nuxt < 2.10 (i.e. before https://github.com/nuxt/nuxt.js/pull/6460)
if (!sass.sassOptions) {
delete sass.indentedSyntax;
sass.sassOptions = {
indentedSyntax: true
};
}
// Custom variables
if (customVariables && customVariables.length > 0) {
const sassImports = customVariables.map(path => `@import '${path}'`).join('\n');
sass.prependData = [sass.prependData, sassImports].join('\n');
const scssImports = customVariables.map(path => `@import '${path}';`).join('\n');
scss.prependData = [scss.prependData, scssImports].join('\n');
}
}
//# sourceMappingURL=sass.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sass.js","sourceRoot":"","sources":["../src/sass.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,MAAM,CAAA;AAG3B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAoB,eAA2C;IAC9F,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,OAAoE,CAAA;IAE/G,gBAAgB;IAChB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;IAEpD,gGAAgG;IAChG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACrB,OAAO,IAAI,CAAC,cAAc,CAAA;QAC1B,IAAI,CAAC,WAAW,GAAG;YACjB,cAAc,EAAE,IAAI;SACrB,CAAA;KACF;IAED,mBAAmB;IACnB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;QACjD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChF,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC9D;AACH,CAAC"}