@dword-design/base-config-nuxt 3.0.25 → 3.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+
8
+ var babel = _interopRequireWildcard(require("@babel/core"));
9
+
10
+ var _traverse = _interopRequireDefault(require("@babel/traverse"));
11
+
12
+ var _map = _interopRequireDefault(require("@dword-design/functions/dist/map"));
13
+
14
+ var _some = _interopRequireDefault(require("@dword-design/functions/dist/some"));
15
+
16
+ var _uniq = _interopRequireDefault(require("@dword-design/functions/dist/uniq"));
17
+
18
+ var _depcheckPackageName = _interopRequireDefault(require("depcheck-package-name"));
19
+
20
+ var _fsExtra = require("fs-extra");
21
+
22
+ var _globby = _interopRequireDefault(require("globby"));
23
+
24
+ var _path = _interopRequireDefault(require("path"));
25
+
26
+ var _missingNuxtI18nHeadError = _interopRequireDefault(require("./missing-nuxt-i18n-head-error"));
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
34
+ const checkNuxtI18nHead = async () => {
35
+ var _ref, _ref2, _layoutFiles;
36
+
37
+ const layoutFiles = (_ref = (_ref2 = ['default.vue', ...(await (0, _globby.default)('*', {
38
+ cwd: 'layouts',
39
+ ignore: '-*'
40
+ }))], await _ref2), (0, _uniq.default)(_ref));
41
+
42
+ const checkLayoutFile = async layoutFile => {
43
+ var _layout$script;
44
+
45
+ const vueTemplateCompiler = require('vue-template-compiler');
46
+
47
+ const layout = (await (0, _fsExtra.exists)(_path.default.join('layouts', layoutFile))) ? vueTemplateCompiler.parseComponent(await (0, _fsExtra.readFile)(_path.default.join('layouts', layoutFile), 'utf8')) : {};
48
+
49
+ if ((_layout$script = layout.script) !== null && _layout$script !== void 0 && _layout$script.content) {
50
+ var _layout$script2;
51
+
52
+ const ast = await babel.parse((_layout$script2 = layout.script) === null || _layout$script2 === void 0 ? void 0 : _layout$script2.content, {
53
+ filename: 'index.js'
54
+ });
55
+ let valid = false;
56
+ (0, _traverse.default)(ast, {
57
+ ExportDefaultDeclaration: path => {
58
+ var _path$node$declaratio;
59
+
60
+ if (_path$node$declaratio = path.node.declaration.properties, (0, _some.default)(property => {
61
+ var _property$key, _property$body$body$, _property$body$body$2, _property$body$body$3;
62
+
63
+ return property.type === 'ObjectMethod' && ((_property$key = property.key) === null || _property$key === void 0 ? void 0 : _property$key.name) === 'head' && property.body.body.length === 1 && property.body.body[0].type === 'ReturnStatement' && property.body.body[0].argument.type === 'CallExpression' && property.body.body[0].argument.callee.type === 'MemberExpression' && property.body.body[0].argument.callee.object.type === 'ThisExpression' && ((_property$body$body$ = property.body.body[0].argument.callee.property) === null || _property$body$body$ === void 0 ? void 0 : _property$body$body$.name) === '$nuxtI18nHead' && property.body.body[0].argument.arguments.length === 1 && property.body.body[0].argument.arguments[0].type === 'ObjectExpression' && property.body.body[0].argument.arguments[0].properties.length === 1 && ((_property$body$body$2 = property.body.body[0].argument.arguments[0].properties[0].key) === null || _property$body$body$2 === void 0 ? void 0 : _property$body$body$2.name) === 'addSeoAttributes' && ((_property$body$body$3 = property.body.body[0].argument.arguments[0].properties[0].value) === null || _property$body$body$3 === void 0 ? void 0 : _property$body$body$3.value) === true;
64
+ })(_path$node$declaratio)) {
65
+ valid = true;
66
+ }
67
+ }
68
+ });
69
+
70
+ if (valid) {
71
+ return;
72
+ }
73
+ }
74
+
75
+ throw new _missingNuxtI18nHeadError.default(layoutFile);
76
+ };
77
+
78
+ return Promise.all((_layoutFiles = layoutFiles, (0, _map.default)(checkLayoutFile)(_layoutFiles)));
79
+ };
80
+
81
+ async function _default() {
82
+ const localeFiles = await (0, _globby.default)('*.json', {
83
+ cwd: _path.default.join(this.options.srcDir, 'i18n')
84
+ });
85
+
86
+ if (localeFiles.length > 0) {
87
+ var _localeFiles;
88
+
89
+ await checkNuxtI18nHead();
90
+ await this.addModule([(0, _depcheckPackageName.default)`@nuxtjs/i18n`, {
91
+ detectBrowserLanguage: {
92
+ fallbackLocale: 'en',
93
+ redirectOn: 'no prefix',
94
+ useCookie: false
95
+ },
96
+ langDir: 'i18n/',
97
+ lazy: true,
98
+ locales: (_localeFiles = localeFiles, (0, _map.default)(filename => {
99
+ const code = _path.default.basename(filename, '.json');
100
+
101
+ return {
102
+ code,
103
+ file: filename,
104
+ iso: code
105
+ };
106
+ })(_localeFiles)),
107
+ seo: true,
108
+ strategy: 'prefix',
109
+ vueI18n: {
110
+ fallbackLocale: 'en'
111
+ },
112
+ ...(process.env.BASE_URL && {
113
+ baseUrl: process.env.BASE_URL
114
+ })
115
+ }]);
116
+ }
117
+ }
118
+
119
+ module.exports = exports.default;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _endent = _interopRequireDefault(require("@dword-design/functions/dist/endent"));
9
+
10
+ var _path = _interopRequireDefault(require("path"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ class _default extends Error {
15
+ constructor(layoutFile) {
16
+ super((0, _endent.default)`
17
+ You have to implement $nuxtI18nHead in ${_path.default.join('layouts', layoutFile)} like this to make sure that i18n metadata are generated:
18
+
19
+ <script>
20
+ export default {
21
+ head () {
22
+ return this.$nuxtI18nHead({ addSeoAttributes: true })
23
+ }
24
+ }
25
+ </script>
26
+ `);
27
+ }
28
+
29
+ }
30
+
31
+ exports.default = _default;
32
+ module.exports = exports.default;
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = _default;
7
7
 
8
+ var _join = _interopRequireDefault(require("@dword-design/functions/dist/join"));
9
+
8
10
  var _keys = _interopRequireDefault(require("@dword-design/functions/dist/keys"));
9
11
 
10
12
  var _map = _interopRequireDefault(require("@dword-design/functions/dist/map"));
@@ -21,55 +23,8 @@ var _safeRequire = _interopRequireDefault(require("safe-require"));
21
23
 
22
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
25
 
24
- /* istanbul ignore next */
25
- const head = function () {
26
- var _this$$nuxtI18nHead;
27
-
28
- const _require = require;
29
-
30
- const projectConfig = _require('./project/project-config').default;
31
-
32
- const i18nHead = ((_this$$nuxtI18nHead = this.$nuxtI18nHead) === null || _this$$nuxtI18nHead === void 0 ? void 0 : _this$$nuxtI18nHead.call(this, {
33
- addSeoAttributes: true
34
- })) || {
35
- htmlAttrs: {},
36
- link: [],
37
- meta: []
38
- };
39
- return {
40
- bodyAttrs: projectConfig.bodyAttrs,
41
- headAttrs: projectConfig.headAttrs,
42
- htmlAttrs: { ...projectConfig.htmlAttrs,
43
- ...i18nHead.htmlAttrs
44
- },
45
- link: [...(projectConfig.head.link || []), ...(i18nHead.link || [])],
46
- meta: [{
47
- charset: 'utf-8'
48
- }, {
49
- content: ['width=device-width', 'initial-scale=1', ...(projectConfig.userScalable ? [] : ['user-scalable=0'])].join(', '),
50
- name: 'viewport'
51
- }, {
52
- content: projectConfig.name,
53
- hid: 'description',
54
- name: 'description'
55
- }, ...(projectConfig.ogImage ? [{
56
- content: projectConfig.ogImage,
57
- hid: 'og:image',
58
- name: 'og:image'
59
- }] : []), ...(projectConfig.webApp ? [{
60
- content: 'yes',
61
- name: 'apple-mobile-web-app-capable'
62
- }] : []), ...(i18nHead.meta || [])],
63
-
64
- titleTemplate(title) {
65
- return title ? `${title} | ${this.$config.name}` : [this.$config.name, ...(this.$config.title ? [this.$config.title] : [])].join(': ');
66
- }
67
-
68
- };
69
- };
70
-
71
26
  async function _default() {
72
- var _projectConfig$router, _projectConfig, _defaultConfig$this$o, _projectConfig$module;
27
+ var _ref, _projectConfig$router, _projectConfig, _defaultConfig$this$o, _projectConfig$module;
73
28
 
74
29
  const defaultConfig = {
75
30
  bodyAttrs: {},
@@ -91,7 +46,42 @@ async function _default() {
91
46
  this.options.watch.push(_path.default.join(this.options.rootDir, 'nuxt.config.js'));
92
47
  this.options.publicRuntimeConfig.name = projectConfig.name;
93
48
  this.options.publicRuntimeConfig.title = projectConfig.title;
94
- this.options.head = head;
49
+ /* istanbul ignore next */
50
+
51
+ this.options.head.titleTemplate = function (title) {
52
+ return title ? `${title} | ${this.$config.name}` : [this.$config.name, ...(this.$config.title ? [this.$config.title] : [])].join(': ');
53
+ };
54
+
55
+ this.options.head.link.push(...(projectConfig.head.link || []));
56
+ this.options.head.meta.push({
57
+ charset: 'utf-8'
58
+ }, {
59
+ content: (_ref = ['width=device-width', 'initial-scale=1', ...(projectConfig.userScalable ? [] : ['user-scalable=0'])], (0, _join.default)(', ')(_ref)),
60
+ name: 'viewport'
61
+ }, {
62
+ content: projectConfig.name,
63
+ hid: 'description',
64
+ name: 'description'
65
+ });
66
+
67
+ if (projectConfig.ogImage) {
68
+ this.options.head.meta.push({
69
+ content: projectConfig.ogImage,
70
+ hid: 'og:image',
71
+ name: 'og:image'
72
+ });
73
+ }
74
+
75
+ if (projectConfig.webApp) {
76
+ this.options.head.meta.push({
77
+ content: 'yes',
78
+ name: 'apple-mobile-web-app-capable'
79
+ });
80
+ }
81
+
82
+ this.options.head.htmlAttrs = projectConfig.htmlAttrs;
83
+ this.options.head.headAttrs = projectConfig.headAttrs;
84
+ this.options.head.bodyAttrs = projectConfig.bodyAttrs;
95
85
  this.options.css.push(...projectConfig.css);
96
86
  this.options.serverMiddleware.push(...projectConfig.serverMiddleware);
97
87
  this.options.build.postcss.plugins = projectConfig.postcssPlugins;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dword-design/base-config-nuxt",
3
- "version": "3.0.25",
3
+ "version": "3.0.29",
4
4
  "repository": "dword-design/base-config-nuxt",
5
5
  "funding": "https://github.com/sponsors/dword-design",
6
6
  "license": "MIT",
@@ -19,6 +19,8 @@
19
19
  "test": "base test"
20
20
  },
21
21
  "dependencies": {
22
+ "@babel/core": "^7.16.0",
23
+ "@babel/traverse": "^7.16.3",
22
24
  "@dword-design/depcheck-parser-sass": "^2.0.0",
23
25
  "@dword-design/dotenv-json-extended": "^2.0.0",
24
26
  "@dword-design/eslint-config": "^2.0.0",
@@ -47,7 +49,8 @@
47
49
  "sass": "^1.34.0",
48
50
  "sass-loader": "^10.0.0",
49
51
  "stylelint": "^13.6.0",
50
- "vue": "^2.6.11"
52
+ "vue": "^2.6.11",
53
+ "vue-template-compiler": "^2.6.14"
51
54
  },
52
55
  "devDependencies": {
53
56
  "@dword-design/base": "^8.0.0",
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
-
8
- var _map = _interopRequireDefault(require("@dword-design/functions/dist/map"));
9
-
10
- var _depcheckPackageName = _interopRequireDefault(require("depcheck-package-name"));
11
-
12
- var _globby = _interopRequireDefault(require("globby"));
13
-
14
- var _path = _interopRequireDefault(require("path"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- async function _default() {
19
- const localeFiles = await (0, _globby.default)('*.json', {
20
- cwd: _path.default.join(this.options.srcDir, 'i18n')
21
- });
22
-
23
- if (localeFiles.length > 0) {
24
- var _localeFiles;
25
-
26
- await this.addModule([(0, _depcheckPackageName.default)`@nuxtjs/i18n`, {
27
- detectBrowserLanguage: {
28
- fallbackLocale: 'en',
29
- redirectOn: 'no prefix',
30
- useCookie: false
31
- },
32
- langDir: 'i18n/',
33
- lazy: true,
34
- locales: (_localeFiles = localeFiles, (0, _map.default)(filename => {
35
- const code = _path.default.basename(filename, '.json');
36
-
37
- return {
38
- code,
39
- file: filename,
40
- iso: code
41
- };
42
- })(_localeFiles)),
43
- seo: true,
44
- strategy: 'prefix',
45
- vueI18n: {
46
- fallbackLocale: 'en'
47
- },
48
- ...(process.env.BASE_URL && {
49
- baseUrl: process.env.BASE_URL
50
- })
51
- }]);
52
- }
53
- }
54
-
55
- module.exports = exports.default;