Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dependencies #1

Draft
wants to merge 9 commits into
base: master
Choose a base branch
from
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add support for Vue3/Inkline3 as generator default
  • Loading branch information
mtancoigne committed Jan 15, 2022

Verified

This commit was signed with the committer’s verified signature. The key has expired.
mtancoigne Manuel Tancoigne
commit b29771492f52c8494209bc5ffaaa4916e8eb5db6
3 changes: 3 additions & 0 deletions generator/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const vue2 = require('./vue2.js')
const vue3 = require('./vue3.js')

module.exports = (api, options, rootOptions) => {
if (options.vue2) {
vue2(api, options, rootOptions)
} else {
vue3(api, options, rootOptions)
}
}
108 changes: 108 additions & 0 deletions generator/vue3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
const fs = require('fs');

const configContentTranspileDependencies = ` transpileDependencies: [
'@inkline/inkline'
]`;

const configContent = `module.exports = {
${configContentTranspileDependencies}
};`;

/**
* Add inkline to package.json dependencies
*
* @param api
*/
const addDependencies = (api) => {
api.extendPackage({
dependencies: {
'@inkline/inkline': '^3.0.0'
}
});
};

/**
* Add inkline dependencies to package.json dev dependencies
*
* @param api
*/
const addDevDependencies = (api) => {
api.extendPackage({
devDependencies: {
'sass': '^1.26.0',
'sass-loader': '^8.0.0',
}
});
};

/**
* Add inkline default imports to the entry file
*
* @param api
*/
const addDefaultImports = (api) => {
api.injectImports(api.entryFile, "import { Inkline, components } from '@inkline/inkline';");
api.injectImports(api.entryFile, "import '@inkline/inkline/inkline.scss';");
};

/**
* Add inkline to the transpiled dependencies field in vue.config.js.
*
* @param api
*/
const addVueConfig = (api) => {
const configPath = api.resolve('vue.config.js');

if (!fs.existsSync(configPath)) {
fs.writeFileSync(configPath, configContent, { encoding: 'utf-8' });
} else {
let contents = fs.readFileSync(configPath, { encoding: 'utf-8' });

if (contents.indexOf('transpileDependencies') !== -1) {
contents = contents
.replace(/( *)(transpileDependencies:\s*\[)/, `$1$2\n$1$1'@inkline/inkline',\n`);
} else {
contents = contents
.replace(/(module\.exports\s*=\s*{)/, `$1\n${configContentTranspileDependencies},\n`);
}

fs.writeFileSync(configPath, contents, { encoding: 'utf-8' });
}
};

/**
* Add inkline to Vue after importing
*
* @param api
* @param options
*/
const addIntegration = (api, options) => {
// Read and get content
let content = fs.readFileSync(api.resolve(api.entryFile), { encoding: 'utf-8' });
const lines = content.split(/\r?\n/g).reverse();

// Inject imports
let appInitialization = lines.findIndex(line => line.match(/^createApp\(App\)/));

if (appInitialization === -1) {
appInitialization = 0;
}

lines[appInitialization] = lines[appInitialization].replace('createApp(App)', 'createApp(App).use(Inkline, { components })');

// Write back
content = lines.reverse().join(`\n`);
fs.writeFileSync(api.resolve(api.entryFile), content, { encoding: 'utf-8' });
};

module.exports = (api, options, rootOptions) => {
addDependencies(api);
addDevDependencies(api);

addVueConfig(api);
addDefaultImports(api);

api.onCreateComplete(() => {
addIntegration(api, options)
})
};