extension-create 0.5.1 → 1.0.0

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.
Files changed (63) hide show
  1. package/README.md +29 -30
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.js +252 -0
  4. package/package.json +51 -36
  5. package/LICENSE +0 -21
  6. package/cli.js +0 -40
  7. package/create/CONTRIBUTING.md +0 -47
  8. package/create/README.md +0 -55
  9. package/create/cli.js +0 -58
  10. package/create/cli.test.js +0 -37
  11. package/create/createExtension.js +0 -35
  12. package/create/messages/directoryHasConflicts.js +0 -38
  13. package/create/messages/index.js +0 -16
  14. package/create/messages/programHelp.js +0 -26
  15. package/create/messages/successfullInstall.js +0 -24
  16. package/create/package.json +0 -38
  17. package/create/steps/abortProjectAndClean.js +0 -40
  18. package/create/steps/cleanTemplateFolder.js +0 -26
  19. package/create/steps/createDirectory.js +0 -45
  20. package/create/steps/getTemplatePath.js +0 -23
  21. package/create/steps/importExternalTemplate.js +0 -41
  22. package/create/steps/importLocalTemplate.js +0 -33
  23. package/create/steps/installDependencies.js +0 -61
  24. package/create/steps/writePackageJson.js +0 -64
  25. package/create/templates/standard/.gitignore +0 -21
  26. package/create/templates/standard/README.md +0 -14
  27. package/create/templates/standard/package.json +0 -26
  28. package/create/templates/standard/template/.gitignore +0 -21
  29. package/create/templates/standard/template/README.md +0 -0
  30. package/create/templates/standard/template/manifest.json +0 -31
  31. package/create/templates/standard/template/newtab/newtab.html +0 -24
  32. package/create/templates/standard/template/newtab/newtab.js +0 -1
  33. package/create/templates/standard/template/newtab/styles.css +0 -43
  34. package/create/templates/standard/template/popup/popup.css +0 -26
  35. package/create/templates/standard/template/popup/popup.html +0 -15
  36. package/create/templates/standard/template/popup/popup.js +0 -1
  37. package/create/templates/standard/template/public/icon/test_16.png +0 -0
  38. package/create/templates/standard/template/public/icon/test_32.png +0 -0
  39. package/create/templates/standard/template/public/icon/test_48.png +0 -0
  40. package/create/templates/standard/template/public/icon/test_64.png +0 -0
  41. package/create/templates/standard/template/public/puzzle.png +0 -0
  42. package/create/templates/standard/template.json +0 -6
  43. package/create/yarn.lock +0 -4462
  44. package/develop/CONTRIBUTING.md +0 -47
  45. package/develop/README.md +0 -55
  46. package/develop/module.js +0 -16
  47. package/develop/package.json +0 -44
  48. package/develop/start/cli.js +0 -47
  49. package/develop/start/cli.test.js +0 -45
  50. package/develop/start/config/browserSwitch.js +0 -31
  51. package/develop/start/config/compiler.js +0 -47
  52. package/develop/start/config/server.js +0 -17
  53. package/develop/start/messages/index.js +0 -14
  54. package/develop/start/messages/manifestNotFound.js +0 -22
  55. package/develop/start/messages/programHelp.js +0 -49
  56. package/develop/start/resolve/resolveExtensionPath.js +0 -45
  57. package/develop/start/startExtension.js +0 -69
  58. package/develop/start/steps/resolveManifest.js +0 -44
  59. package/develop/start/steps/startWebpack.js +0 -46
  60. package/develop/yarn.lock +0 -7165
  61. package/messages.js +0 -57
  62. package/preinstall.sh +0 -2
  63. package/reservedKeywords.js +0 -17
package/create/cli.js DELETED
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
4
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
5
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
6
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
7
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
8
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
9
-
10
- const {program} = require('commander')
11
- const {log} = require('log-md')
12
-
13
- const createExtension = require('./createExtension')
14
- const messages = require('./messages')
15
- const packageJson = require('./package.json')
16
-
17
- let projectName
18
- let templateName
19
-
20
- function createExtensionCLI (clientProgram = program) {
21
- clientProgram
22
- .version(packageJson.version)
23
- .command('create', {isDefault: true})
24
- .usage('create <project-directory> [options]')
25
- .action((cmd) => {
26
- const {args, template} = cmd
27
-
28
- projectName = args[0]
29
- templateName = template
30
- })
31
- .description('create a new cross-browser extension')
32
- .option(
33
- '-t, --template <template-name>',
34
- 'specify a template for the created project'
35
- )
36
- .on('--help', () => messages.programHelp())
37
- .parse(process.argv)
38
-
39
- if (!projectName) {
40
- log(`
41
- You need to provide an extension name to create one.
42
- See \`--help\` for command info.
43
- `)
44
- process.exit(1)
45
- }
46
-
47
- const workingDir = process.cwd()
48
-
49
- createExtension(workingDir, projectName, templateName)
50
- }
51
-
52
- // If the module was called from the cmd line, execute it
53
- if (require.main === module) {
54
- createExtensionCLI()
55
- }
56
-
57
- // Export as a module so it can be reused
58
- module.exports = createExtensionCLI
@@ -1,37 +0,0 @@
1
- /* global describe, afterEach, it, expect */
2
- const path = require('path')
3
-
4
- const spawn = require('cross-spawn')
5
- const fs = require('fs-extra')
6
-
7
- describe('`create` command line interface', () => {
8
- const createExtensionCLI = path.resolve(__dirname, './cli.js')
9
- const projectName = 'my-extension-home'
10
- const outputpath = path.resolve(process.cwd(), projectName)
11
-
12
- afterEach(async () => {
13
- // Clear filesystem after running tests
14
- await fs.remove(outputpath)
15
- })
16
-
17
- it('creates an extension with specified project name', async () => {
18
- expect.assertions(1)
19
- spawn.sync(
20
- 'node',
21
- [createExtensionCLI, 'my-extension-home'],
22
- {stdio: 'inherit'}
23
- )
24
-
25
- const pathStat = await fs.stat(outputpath)
26
- const isDirectory = pathStat.isDirectory()
27
-
28
- expect(isDirectory).toBe(true)
29
- })
30
-
31
- it.todo('warns users if destination folder is not empty')
32
-
33
- describe('-t, --template', () => {
34
- it.todo('creates an extension by consuming a template')
35
- it.todo('warns users if template flag is empty')
36
- })
37
- })
@@ -1,35 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const createDirectory = require('./steps/createDirectory')
9
- const importExternalTemplate = require('./steps/importExternalTemplate')
10
- const importLocalTemplate = require('./steps/importLocalTemplate')
11
- const writePackageJson = require('./steps/writePackageJson')
12
- const installDependencies = require('./steps/installDependencies')
13
- const messages = require('./messages')
14
- const abortAndClean = require('./steps/abortProjectAndClean')
15
- const cleanTemplateFolder = require('./steps/cleanTemplateFolder')
16
-
17
- process.on('unhandledRejection', (error) => { throw error })
18
-
19
- module.exports = async function (workingDir, projectName, template) {
20
- try {
21
- await createDirectory(workingDir, projectName)
22
-
23
- template
24
- ? await importExternalTemplate(workingDir, projectName, template)
25
- : await importLocalTemplate(workingDir, projectName)
26
-
27
- await writePackageJson(workingDir, projectName, template)
28
- await installDependencies(workingDir, projectName)
29
- await cleanTemplateFolder(template)
30
- messages.successfullInstall(workingDir, projectName)
31
- } catch (error) {
32
- await abortAndClean(error, workingDir, projectName)
33
- await cleanTemplateFolder(template)
34
- }
35
- }
@@ -1,38 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const {log} = require('log-md')
12
-
13
- module.exports = async function (projectPath, conflictingFiles) {
14
- const projectName = path.basename(projectPath)
15
-
16
- log(
17
- `Conflict! Directory \`${(projectName)}/\` includes conflicting files:`,
18
- {gutter: true}
19
- )
20
-
21
- for (const file of conflictingFiles) {
22
- const stats = await fs.lstat(path.join(projectPath, file))
23
-
24
- log(
25
- stats.isDirectory()
26
- ? ` 📁 - ${file}/`
27
- : ` 📄 - ${file}`
28
- )
29
- }
30
-
31
- log(
32
- 'You need to either rename/remove the files listed above,\n' +
33
- 'or choose a new directory name for your extension.',
34
- {gutter: true}
35
- )
36
-
37
- log(`Path to conflicting directory: \`${projectPath}\``)
38
- }
@@ -1,16 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const directoryHasConflicts = require('./directoryHasConflicts')
9
- const programHelp = require('./programHelp')
10
- const successfullInstall = require('./successfullInstall')
11
-
12
- module.exports = {
13
- successfullInstall,
14
- programHelp,
15
- directoryHasConflicts
16
- }
@@ -1,26 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const {log} = require('log-md')
9
-
10
- module.exports = function () {
11
- log(`
12
- # Help center for the \`create\` command
13
-
14
- ## The \`<project-directory>\` argument (required).
15
-
16
- The project's directory where your extension will be installed.
17
- \`extension-create\` can't install files without this information.
18
-
19
- ## The \`--template\` _<template-name>_ flag
20
-
21
- A template name can be provided if your project needs a special config.
22
-
23
- Feels something is wrong? Help by reporting a bug:
24
- https://github.com/cezaraugusto/extension-create/issues/new
25
- `)
26
- }
@@ -1,24 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const {log} = require('log-md')
11
-
12
- module.exports = function (workingDir, projectName) {
13
- const projectPath = path.join(workingDir, projectName)
14
- const relativePath = path.relative(workingDir, projectPath)
15
-
16
- log(` 🧩 Success! Extension ${projectName} created.`)
17
-
18
- log(`
19
- Now \`cd ${relativePath}\` and *npm start* to open a new browser instance
20
- with your extension installed, loaded, and ready for development.
21
-
22
- You are done. Time to hack on your extension!
23
- `)
24
- }
@@ -1,38 +0,0 @@
1
- {
2
- "license": "MIT",
3
- "repository": {
4
- "type": "git",
5
- "url": "https://github.com/cezaraugusto/extension-create.git",
6
- "directory": "create"
7
- },
8
- "engines": {
9
- "node": ">=10"
10
- },
11
- "name": "@extension-create/create",
12
- "version": "0.0.0",
13
- "description": "The create step of extension-create",
14
- "main": "./cli.js",
15
- "bin": "./cli.js",
16
- "author": "Cezar Augusto <boss@cezaraugusto.net> (https://twitter.com/cezaraugusto)",
17
- "scripts": {
18
- "dev:create": "node ./cli.js",
19
- "test": "jest"
20
- },
21
- "dependencies": {
22
- "chalk": "^4.1.0",
23
- "commander": "^6.2.0",
24
- "cross-spawn": "^7.0.3",
25
- "dedent": "^0.7.0",
26
- "degit": "^2.8.0",
27
- "fancy-json-stringify": "^1.0.0",
28
- "fs-extra": "^9.0.1",
29
- "jest": "^26.6.3",
30
- "log-md": "^0.1.0",
31
- "marked": "^1.2.3",
32
- "marked-terminal": "^4.1.0",
33
- "pacote": "^11.1.13",
34
- "semver": "^7.3.2",
35
- "symlink-dir": "^4.1.0",
36
- "yarn": "^1.22.10"
37
- }
38
- }
@@ -1,40 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const {log} = require('log-md')
12
-
13
- module.exports = async function (error, workingDir, projectName) {
14
- const projectPath = path.resolve(workingDir, projectName)
15
-
16
- log('😑👎 Aborting installation.')
17
-
18
- if (error.command) {
19
- log(`
20
- 😕❓ ${error.command} has failed.
21
- `)
22
- } else {
23
- log(`
24
- 🚨 Unexpected creation error. This is a bug.
25
- `)
26
- log(`Please report: "${error}"`)
27
- log(
28
- 'https://github.com/cezaraugusto/extension-create/issues/',
29
- {gutter: true}
30
- )
31
- }
32
-
33
- log('🧹 - Removing files generated from project in:')
34
- log(`\`${projectPath}\``)
35
- await fs.ensureDir(projectPath)
36
- await fs.remove(projectPath)
37
-
38
- log('Done.')
39
- process.exit(1)
40
- }
@@ -1,26 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const fs = require('fs-extra')
9
- const {log} = require('log-md')
10
-
11
- const getTemplatePath = require('./getTemplatePath')
12
-
13
- module.exports = async function (template) {
14
- // We don't want to delete local templates
15
- if (!template) {
16
- return
17
- }
18
-
19
- log('🧹 - Cleaning up everything...')
20
-
21
- try {
22
- await fs.remove(getTemplatePath(template))
23
- } catch (error) {
24
- log(`😕❓ Removing \`${template}\` failed: ${error}`)
25
- }
26
- }
@@ -1,45 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const {log} = require('log-md')
12
-
13
- const messages = require('../messages')
14
-
15
- const allowlist = [
16
- 'LICENSE',
17
- 'node_modules'
18
- ]
19
-
20
- module.exports = async function (workingDir, projectName) {
21
- log(
22
- `👍 Starting a new browser extension named **${projectName}**`,
23
- {gutter: true}
24
- )
25
- const projectPath = path.resolve(workingDir, projectName)
26
-
27
- log(`🤞 - Checking if \`${workingDir}\` exists...`)
28
- await fs.ensureDir(projectName)
29
-
30
- log('🔎 - Scanning for potential conflicting files...')
31
- const currentDir = await fs.readdir(projectPath)
32
- const conflictingFiles = currentDir
33
- // .gitignore, .DS_Store, etc
34
- .filter(file => !file.startsWith('.'))
35
- // Logs of yarn/npm
36
- .filter(file => !file.endsWith('.log'))
37
- // Whatever we think is appropriate
38
- .filter(file => !allowlist.includes(file))
39
-
40
- // If directory has conflicting files, abort
41
- if (conflictingFiles.length) {
42
- await messages.directoryHasConflicts(projectPath, conflictingFiles)
43
- process.exit(1)
44
- }
45
- }
@@ -1,23 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const templatesDir = path.resolve(__dirname, '../templates')
11
- const templateTempDir = (template) => `__temp__${template}`
12
-
13
- module.exports = function (template) {
14
- let thisTemplate
15
-
16
- if (template) {
17
- thisTemplate = templateTempDir(template)
18
- } else {
19
- thisTemplate = 'standard'
20
- }
21
-
22
- return path.resolve(templatesDir, thisTemplate)
23
- }
@@ -1,41 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const pacote = require('pacote')
12
- const {log} = require('log-md')
13
-
14
- const templatesDir = path.resolve(__dirname, '../templates')
15
-
16
- module.exports = async function (workingDir, projectName, template) {
17
- const projectPath = path.resolve(workingDir, projectName)
18
- const templateName = template
19
-
20
- try {
21
- const tempTemplatePath = path
22
- .join(templatesDir, `__temp__${templateName}`)
23
-
24
- log(`⚙️ - Importing template \`${template}\` as requested...`)
25
- const {name, version} = await pacote.manifest(templateName)
26
-
27
- await pacote
28
- .extract(`${name}@${version}`, tempTemplatePath)
29
-
30
- log((`🧰 - Installing **${projectName}** from template \`${templateName}\``))
31
- const templateDirPath = path.join(tempTemplatePath, 'template')
32
-
33
- await fs.copy(templateDirPath, projectPath)
34
- } catch (error) {
35
- log(
36
- `😕❓ Can't find template __${templateName}__. ${error}`,
37
- {gutter: true}
38
- )
39
- process.exit(1)
40
- }
41
- }
@@ -1,33 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const {log} = require('log-md')
12
-
13
- const templatesDir = path.resolve(__dirname, '../templates')
14
- const defaultTemplate = 'standard'
15
-
16
- module.exports = async function (workingDir, projectName) {
17
- const projectPath = path.resolve(workingDir, projectName)
18
- const templateDirPath = path
19
- .join(templatesDir, defaultTemplate, 'template')
20
-
21
- const templateName = path.basename(templateDirPath)
22
-
23
- try {
24
- log(`🧰 - Installing **${projectName}** from standard template...`)
25
- await fs.copy(templateDirPath, projectPath)
26
- } catch (error) {
27
- log(
28
- `😕❓ Can't copy template __${templateName}__: ${error}`,
29
- {gutter: true}
30
- )
31
- process.exit(1)
32
- }
33
- }
@@ -1,61 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const spawn = require('cross-spawn')
12
- const {log} = require('log-md')
13
-
14
- const abortProjectAndClean = require('./abortProjectAndClean')
15
-
16
- module.exports = async function (workingDir, projectName) {
17
- const projectPath = path.resolve(workingDir, projectName)
18
- const projectPackageJson = path.join(projectPath, 'package.json')
19
- const packageMetadata = require(projectPackageJson)
20
-
21
- const dependencies = packageMetadata.dependencies || []
22
- const devDependencies = packageMetadata.devDependencies || []
23
-
24
- if (
25
- dependencies.length === 0 &&
26
- devDependencies.length === 0
27
- ) {
28
- log('⏭ - No dependencies. Skipping install step...')
29
-
30
- return
31
- }
32
-
33
- const command = 'npm'
34
- const commonArgs = ['--prefix', projectPath]
35
-
36
- try {
37
- log('🛠 - Installing extension-create as devDependency...')
38
- // Link instead of download in local env
39
- if (process.env.NODE_ENV === 'development') {
40
- await fs.ensureSymlink(`${projectPath}/node_modules`, workingDir)
41
- } else {
42
- const installSelfArgs = [
43
- ...commonArgs,
44
- 'install',
45
- '-D',
46
- 'extension-create',
47
- '--silent'
48
- ]
49
-
50
- spawn.sync(command, installSelfArgs, {stdio: 'inherit'})
51
- }
52
-
53
- log('⚙️ - Installing package dependencies...')
54
- const installArgs = [...commonArgs, 'install', '--exact', '--silent']
55
-
56
- spawn.sync(command, installArgs, {stdio: 'inherit'})
57
- await Promise.resolve()
58
- } catch (error) {
59
- abortProjectAndClean(error, workingDir, projectName)
60
- }
61
- }
@@ -1,64 +0,0 @@
1
- // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗
2
- // ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝
3
- // ██║ ██████╔╝█████╗ ███████║ ██║ █████╗
4
- // ██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝
5
- // ╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗
6
- // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝
7
-
8
- const path = require('path')
9
-
10
- const fs = require('fs-extra')
11
- const fancyJsonStringify = require('fancy-json-stringify')
12
- const {log} = require('log-md')
13
-
14
- const getTemplatePath = require('./getTemplatePath')
15
- const abortProjectAndClean = require('./abortProjectAndClean')
16
-
17
- const templatesDir = path.resolve(__dirname, '../templates')
18
-
19
- const packageJsonScripts = {
20
- start: 'extension-create start'
21
- }
22
-
23
- module.exports = async function (workingDir, projectName, template) {
24
- const projectPath = path.resolve(workingDir, projectName)
25
-
26
- const templatePath = path.resolve(
27
- templatesDir,
28
- getTemplatePath(template)
29
- )
30
-
31
- const templateJsonPath = path
32
- .resolve(templatePath, 'template.json')
33
-
34
- const templateJson = require(templateJsonPath)
35
-
36
- const templateMetadata = templateJson.package || {}
37
-
38
- templateMetadata.scripts = templateMetadata.scripts || {}
39
- templateMetadata.dependencies = templateMetadata.dependencies || {}
40
- templateMetadata.devDependencies = templateMetadata.devDependencies || {}
41
-
42
- const packageMetadata = {
43
- name: path.basename(projectPath),
44
- private: true,
45
- version: '0.0.0',
46
- dependencies: templateMetadata.dependencies,
47
- devDependencies: templateMetadata.devDependencies,
48
- scripts: {
49
- ...templateMetadata.scripts,
50
- ...packageJsonScripts
51
- }
52
- }
53
-
54
- try {
55
- log('📝 - Writing `package.json` metadata...')
56
- await fs.writeFile(
57
- path.join(projectPath, 'package.json'),
58
- fancyJsonStringify(packageMetadata)
59
- )
60
- } catch (error) {
61
- await abortProjectAndClean(error, workingDir, projectName)
62
- process.exit(1)
63
- }
64
- }
@@ -1,21 +0,0 @@
1
- # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
-
3
- # dependencies
4
- /node_modules
5
-
6
- # testing
7
- /coverage
8
-
9
- # production
10
- /dist
11
-
12
- # misc
13
- .DS_Store
14
- .env.local
15
- .env.development.local
16
- .env.test.local
17
- .env.production.local
18
-
19
- npm-debug.log*
20
- yarn-debug.log*
21
- yarn-error.log*
@@ -1,14 +0,0 @@
1
- # extension-create Standard Template
2
-
3
- > Standard template for [extension-create](https://github.com/cezaraugusto/extension-create).
4
-
5
- Directory Structure:
6
-
7
- ```
8
- ./template
9
- ├── manifest.json
10
- ├── src
11
- │ ├── background.js
12
- │ └── content.js (next)
13
- ├── .gitignore
14
- ```