extension-create 2.0.0-alpha.8 → 2.0.0-beta.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.
package/README.md CHANGED
@@ -7,7 +7,7 @@ This package stores all logic needed by Extension.js to create new projects.
7
7
  ## Installation
8
8
 
9
9
  ```
10
- yarn add extension-create
10
+ pnpm add extension-create
11
11
  ```
12
12
 
13
13
  ## Usage
package/dist/module.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  interface CreateOptions {
2
2
  template: string;
3
- noInstall?: boolean;
3
+ install?: boolean;
4
4
  }
5
- declare function extensionCreate(projectNameInput: string | undefined, { template, noInstall }: CreateOptions): Promise<void>;
5
+ declare function extensionCreate(projectNameInput: string | undefined, { template, install }: CreateOptions): Promise<void>;
6
6
 
7
7
  export { type CreateOptions, extensionCreate };
package/dist/module.js CHANGED
@@ -1,26 +1,39 @@
1
- "use strict";var Ve=Object.create;var k=Object.defineProperty;var Xe=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var qe=(e,t)=>{for(var r in t)k(e,r,{get:t[r],enumerable:!0})},j=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Le(t))!Ye.call(e,n)&&n!==r&&k(e,n,{get:()=>t[n],enumerable:!(i=Xe(t,n))||i.enumerable});return e};var a=(e,t,r)=>(r=e!=null?Ve(Ue(e)):{},j(t||!e||!e.__esModule?k(r,"default",{value:e,enumerable:!0}):r,e)),He=e=>j(k({},"__esModule",{value:!0}),e);var ct={};qe(ct,{extensionCreate:()=>lt});module.exports=He(ct);var C=a(require("path"));var x=a(require("path")),o=require("@colors/colors/safe"),G=a(require("fs/promises")),A=require("detect-package-manager");function O(e){let t=x.default.basename(e);return`Failed to write in the destination directory. Path for \`${t}\` is not writable.
2
- Ensure you have write permissions for this folder.
3
- Path: ${t}`}async function W(e,t){let r=x.default.basename(e),i=`
4
- Conflict! Path to ${(0,o.cyan)(r)} includes conflicting files:
1
+ "use strict";var ze=Object.create;var b=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ue=Object.prototype.hasOwnProperty;var Ye=(e,t)=>{for(var r in t)b(e,r,{get:t[r],enumerable:!0})},j=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ve(t))!Ue.call(e,i)&&i!==r&&b(e,i,{get:()=>t[i],enumerable:!(s=Le(t,i))||s.enumerable});return e};var a=(e,t,r)=>(r=e!=null?ze(Xe(e)):{},j(t||!e||!e.__esModule?b(r,"default",{value:e,enumerable:!0}):r,e)),Be=e=>j(b({},"__esModule",{value:!0}),e);var ct={};Ye(ct,{extensionCreate:()=>at});module.exports=Be(ct);var C=a(require("path"));var y=a(require("path")),n=require("@colors/colors/safe"),A=a(require("fs/promises")),G=require("package-manager-detector");function W(e){let t=y.default.basename(e);return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Failed to write in the destination directory
5
2
 
6
- `;for(let n of t){let s=await G.default.lstat(x.default.join(e,n));i+=s.isDirectory()?`${(0,o.gray)("-")} ${(0,o.brightYellow)(n)}
7
- `:`${(0,o.gray)("-")} ${(0,o.brightYellow)(n)}
8
- `}return i+=`
3
+ Path is not writable. Ensure you have write permissions for this folder.
4
+ ${(0,n.red)("NOT WRITEABLE")}: ${(0,n.underline)(t)}`}async function O(e,t){let r=y.default.basename(e),s=`
5
+ Conflict! Path to ${(0,n.cyan)(r)} includes conflicting files:
6
+
7
+ `;for(let i of t){let o=await A.default.lstat(y.default.join(e,i));s+=o.isDirectory()?`${(0,n.gray)("-")} ${(0,n.brightYellow)(i)}
8
+ `:`${(0,n.gray)("-")} ${(0,n.brightYellow)(i)}
9
+ `}return s+=`
9
10
  You need to either rename/remove the files listed above, or choose a new directory name for your extension.
10
11
 
11
- Path to conflicting directory: ${(0,o.underline)(e)}`,i}function z(){return"You need to provide an extension name to create one. \nSee `--help` for command info."}function V(){return"URLs are not allowed as a project path. Either write a name or a path to a local folder."}async function X(e,t){let r=x.default.relative(process.cwd(),e),i=await(0,A.detect)(),n="npm run";switch(i){case"yarn":n="yarn dev";break;case"pnpm":n="pnpm run dev";break;default:n="npm run dev"}return`\u{1F9E9} - ${(0,o.brightGreen)("Success!")} Extension ${(0,o.cyan)(t)} created.
12
+ Path to conflicting directory: ${(0,n.underline)(e)}`,s}function z(){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} You need to provide an extension name to create one. See ${(0,n.brightYellow)("--help")} for command info.`}function L(){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} URLs are not allowed as a project path. Either write a name or a path to a local folder.`}async function V(e,t){let r=y.default.relative(process.cwd(),e),s=await(0,G.detect)(),i="npm run";switch(s?.name){case"yarn":i="yarn dev";break;case"pnpm":i="pnpm dev";break;default:i="npm run dev"}return process.env.npm_config_user_agent&&process.env.npm_config_user_agent.includes("pnpm")&&(i="pnpm dev"),`\u{1F9E9} - ${(0,n.brightGreen)("Success!")} Extension ${(0,n.cyan)(t)} created.
12
13
 
13
- Now ${(0,o.brightBlue)(`cd ${(0,o.underline)(r)}`)} and ${(0,o.brightBlue)(`${n}`)} to open a new browser instance
14
+ Now ${(0,n.magenta)(`cd ${(0,n.underline)(r)}`)} and ${(0,n.magenta)(`${i}`)} to open a new browser instance
14
15
  with your extension installed, loaded, and enabled for development.
15
16
 
16
- ${(0,o.brightGreen)("You are ready")}. Time to hack on your extension!`}function L(e){return`\u{1F423} - Starting a new browser extension named ${(0,o.cyan)(e)}...`}function U(){return"\u{1F91E} - Checking if destination path is writeable..."}function Y(){return"\u{1F50E} - Scanning for potential conflicting files..."}function q(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't create directory ${(0,o.cyan)(e)}. ${t}`}function H(e){return`\u{1F537} - Writing ${(0,o.cyan)(e)} type definitions...`}function B(e){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Failed to write the extension type definition. ${e}`}function h(e,t){return t==="init"?`\u{1F9F0} - Installing ${(0,o.cyan)(e)}...`:`\u{1F9F0} - Installing ${(0,o.cyan)(e)} from template ${(0,o.brightBlue)(t)}...`}function b(e,t,r){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't find template ${(0,o.brightBlue)(t)} for ${(0,o.cyan)(e)}. ${r}`}function K(e){return`\u{1F332} - Initializing git repository for ${(0,o.cyan)(e)}...`}function Q(e,t,r){return`Command ${e} ${t.join(" ")} failed with exit code ${r}`}function Z(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Child process error: Can't initialize ${(0,o.brightYellow)("git")} for ${(0,o.cyan)(e)}. ${t.message}`}function ee(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't initialize ${(0,o.brightYellow)("git")} for ${(0,o.cyan)(e)}. ${t.message||t.toString()}`}function te(){return"\u{1F6E0} - Installing dependencies... (takes a moment)"}function ne(e,t,r){return`Command ${e} ${t.join(" ")} failed with exit code ${r}`}function ie(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Child process error: Can't install dependencies for ${(0,o.cyan)(e)}. ${t}`}function re(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't install dependencies for ${(0,o.cyan)(e)}. ${t.message||t.toString()}`}function oe(){return"Symlink created successfully."}function se(e,t){return`Failed to create symlink: ${e} ${t.join(" ")}`}function ae(){return`\u{1F4DD} - Writing ${(0,o.brightYellow)("package.json")} metadata...`}function le(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write ${(0,o.brightYellow)("package.json")} for ${(0,o.cyan)(e)}. ${t}`}function ce(){return`\u{1F4DC} - Writing ${(0,o.brightYellow)("manifest.json")} metadata...`}function me(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write ${(0,o.brightYellow)("manifest.json")} for ${(0,o.cyan)(e)}. ${t}`}function pe(){return`\u{1F4C4} - Writing ${(0,o.brightYellow)("README.md")} metadata...`}function ge(){return`\u{1F648} - Writing ${(0,o.brightYellow)(".gitignore")} lines...`}function de(e,t){return`${(0,o.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write the ${(0,o.brightYellow)("README.md")} file for ${(0,o.cyan)(e)}. ${t}`}function fe(e){return`\u{1F91D} - Ensuring ${(0,o.cyan)(e)} folder exists...`}function ue(e){return"Error while checking directory writability: "+e}var E=a(require("fs/promises")),$=a(require("path")),we=require("detect-package-manager");async function S(e,t){let r=await E.default.readdir(e,{withFileTypes:!0});return await E.default.mkdir(t,{recursive:!0}),await Promise.all(r.map(async i=>{let n=$.default.join(e,i.name),s=$.default.join(t,i.name);i.isDirectory()?await S(n,s):await E.default.copyFile(n,s)}))}async function y(){let e=await(0,we.detect)(),t="npm run";switch(e){case"yarn":t="yarn";break;case"pnpm":t="pnpm run";break;default:t="npm run"}return t}function ye(e){let t=$.default.resolve(__dirname,"template");return $.default.resolve(e,t)}async function xe(e,t){try{return console.log(fe(t)),await E.default.mkdir(e,{recursive:!0}),!0}catch(r){return console.log(ue(r)),!1}}function he(e){return e!=="init"}function Ee(e){return e.includes("typescript")||e.includes("react")||e.includes("preact")||e.includes("svelte")||e.includes("solid")}var $e=a(require("path")),P=a(require("fs/promises"));var Be=["LICENSE","node_modules"];async function ve(e,t){console.log(L(t));try{let r=await xe(e,t);console.log(U()),r||(console.error(O(e)),process.exit(1));let i=await P.default.readdir(e);console.log(Y());let n=await Promise.all(i.filter(s=>!s.startsWith(".")).filter(s=>!s.endsWith(".log")).filter(s=>!Be.includes(s)).map(async s=>(await P.default.lstat($e.default.join(e,s))).isDirectory()?`${s}/`:`${s}`));if(n.length>0){let s=await W(e,n);throw new Error(s)}}catch(r){console.error(q(t,r)),process.exit(1)}}var ke=a(require("path"));async function be(e,t,r){let i=ke.default.resolve(__dirname,"template");try{console.log(h(t,r)),await S(i,e)}catch(n){console.error(b(t,r,n)),process.exit(1)}}var p=a(require("path")),f=a(require("fs/promises")),De=a(require("go-git-it"));async function Fe(e,t,r){let i=p.default.dirname(e),n=p.default.basename(r),l=`https://github.com/extension-js/extension.js/tree/main/examples/${r}`;try{await f.default.mkdir(e,{recursive:!0});let c="";if(process.env.EXTENSION_ENV==="development"?(console.log(h(t,r)),c=p.default.join(e,n),await f.default.cp(p.default.join(__dirname,"..","..","..","examples",n),c,{recursive:!0})):(await(0,De.default)(l,i,h(t,n)),c=p.default.join(i,n)),t!==n){let m=p.default.join(i,t);await f.default.mkdir(m,{recursive:!0});let g=await f.default.readdir(c);for(let u of g)await f.default.rename(p.default.join(c,u),p.default.join(m,u));await f.default.rm(c,{recursive:!0,force:!0})}else{let m=p.default.join(i,t+"-temp");await f.default.rename(c,m);let g=p.default.join(m,n),u=p.default.join(i,t);await f.default.mkdir(u,{recursive:!0});let ze=await f.default.readdir(g);for(let N of ze)await f.default.rename(p.default.join(g,N),p.default.join(u,N));await f.default.rm(m,{recursive:!0,force:!0})}}catch(c){console.error(b(t,n,c)),process.exit(1)}}var v=a(require("path")),I=a(require("fs/promises"));var Ke={dev:process.env.EXTENSION_ENV==="development"?"node node_modules/extension dev":"extension dev",start:process.env.EXTENSION_ENV==="development"?"node node_modules/extension start":"extension start",build:process.env.EXTENSION_ENV==="development"?"node node_modules/extension build":"extension build"};async function Te(e,t,r){let i=ye(process.cwd()),n=he(r)?v.default.join(e,"package.json"):v.default.join(i,"package.json"),s=await I.default.readFile(n),l=JSON.parse(s.toString());l.scripts=l.scripts||{},l.dependencies=l.dependencies||{},l.devDependencies={...l.devDependencies||{},extension:process.env.EXTENSION_ENV==="development"?"*":"latest"};let c={...l,name:v.default.basename(e),private:!0,scripts:{...l.scripts,...Ke},dependencies:l.dependencies,devDependencies:l.devDependencies,author:{name:"Your Name",email:"your@email.com",url:"https://yourwebsite.com"}};try{console.log(ae()),await I.default.writeFile(v.default.join(e,"package.json"),JSON.stringify(c,null,2))}catch(m){console.error(le(t,m)),process.exit(1)}}var Pe=a(require("path")),Ie=require("cross-spawn"),Je=a(require("fs"));var Ce=a(require("path")),J=require("cross-spawn");async function Se(e){let t=Ce.default.join(__dirname,"../../cli"),r=await y(),i=["link"];await new Promise((n,s)=>{(0,J.spawn)(r,i,{cwd:t}).on("close",()=>{(0,J.spawn)(r,[...i,"extension"],{stdio:"inherit",cwd:e}).on("close",m=>{m===0?(console.log(oe()),n()):s(new Error(se(r,i)))})})}),console.log("Symlink creation completed.")}function Qe(){return["install","--silent"]}async function Me(e,t){let r=Pe.default.join(e,"node_modules"),i=await y(),n=Qe();console.log(te()),process.env.EXTENSION_ENV==="development"&&await Se(e);try{let s=process.cwd();process.chdir(e),await Je.default.promises.mkdir(r,{recursive:!0});let l=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",c=(0,Ie.spawn)(i,n,{stdio:l});await new Promise((m,g)=>{c.on("close",u=>{process.chdir(s),u!==0?g(new Error(ne(i,n,u))):m()}),c.on("error",u=>{process.chdir(s),console.error(ie(t,u)),g(u)})})}catch(s){console.error(re(t,s)),process.exit(1)}}var D=a(require("path")),F=a(require("fs/promises"));async function _e(e,t){let r=await F.default.readFile(D.default.join(__dirname,"template","README.md"),"utf-8"),i=await y(),n=require(D.default.join(e,"manifest.json")),s=r.replaceAll("[projectName]",t).replaceAll("[templateDescription]",n.description).replaceAll("[runCommand]",i);try{console.log(pe()),await F.default.mkdir(e,{recursive:!0}),await F.default.writeFile(D.default.join(e,"README.md"),s)}catch(l){console.error(de(t,l)),process.exit(1)}}var T=a(require("path")),M=a(require("fs/promises"));async function Re(e,t){let r=T.default.join(e,"manifest.json"),i=await M.default.readFile(r),s={...JSON.parse(i.toString()),name:T.default.basename(e),author:"Your Name"};try{console.log(ce()),await M.default.writeFile(T.default.join(e,"manifest.json"),JSON.stringify(s,null,2))}catch(l){console.error(me(t,l)),process.exit(1)}}var _=a(require("path")),R=a(require("fs/promises"));async function Ne(e,t){let r=_.default.join(e,"extension-env.d.ts"),i=process.env.EXTENSION_ENV==="development"?_.default.resolve(process.cwd(),"programs/cli/types"):"extension/dist/types",n=`// Required Extension.js types for TypeScript projects.
17
+ ${(0,n.brightGreen)("You are ready")}. Time to hack on your extension!`}function X(e){return`\u{1F423} - Starting a new browser extension named ${(0,n.cyan)(e)}...`}function U(){return"\u{1F91E} - Checking if destination path is writeable..."}function Y(){return"\u{1F50E} - Scanning for potential conflicting files..."}function B(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't create directory ${(0,n.cyan)(e)}:
18
+ ${(0,n.red)(t)}`}function q(e){return`\u{1F537} - Writing type definitions for ${(0,n.cyan)(e)}...`}function H(e){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Failed to write the extension type definition.
19
+ ${(0,n.red)(e)}`}function x(e,t){return t==="init"?`\u{1F9F0} - Installing ${(0,n.cyan)(e)}...`:`\u{1F9F0} - Installing ${(0,n.cyan)(e)} from template ${(0,n.magenta)(t)}...`}function D(e,t,r){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't find template ${(0,n.magenta)(t)} for ${(0,n.cyan)(e)}:
20
+ ${(0,n.red)(r)}`}function K(e){return`\u{1F332} - Initializing git repository for ${(0,n.cyan)(e)}...`}function Q(e,t,r){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Command ${(0,n.brightYellow)(e)} ${(0,n.brightYellow)(t.join(" "))} failed with exit code ${r}`}function Z(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Child process error: Can't initialize ${(0,n.brightYellow)("git")} for ${(0,n.cyan)(e)}:
21
+ ${(0,n.red)(t.message)}`}function ee(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't initialize ${(0,n.brightYellow)("git")} for ${(0,n.cyan)(e)}:
22
+ ${(0,n.red)(t.message||t.toString())}`}function te(){return"\u{1F6E0} - Installing dependencies... (takes a moment)"}function ne(e,t,r){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Command ${e} ${t.join(" ")} failed with exit code ${r}`}function ie(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Child process error: Can't install dependencies for ${(0,n.cyan)(e)}:
23
+ ${(0,n.red)(t)}`}function re(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't install dependencies for ${(0,n.cyan)(e)}:
24
+ ${(0,n.red)(t.message||t.toString())}`}function se(){return`\u{1F4DD} - Writing ${(0,n.brightYellow)("package.json")} metadata...`}function oe(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write ${(0,n.brightYellow)("package.json")} for ${(0,n.cyan)(e)}:
25
+ ${(0,n.red)(t)}`}function ae(){return`\u{1F4DC} - Writing ${(0,n.brightYellow)("manifest.json")} metadata...`}function ce(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write ${(0,n.brightYellow)("manifest.json")} for ${(0,n.cyan)(e)}:
26
+ ${(0,n.red)(t)}`}function le(){return`\u{1F4C4} - Writing ${(0,n.brightYellow)("README.md")} metadata...`}function me(){return`\u{1F648} - Writing ${(0,n.brightYellow)(".gitignore")} lines...`}function pe(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't write the ${(0,n.brightYellow)("README.md")} file for ${(0,n.cyan)(e)}:
27
+ ${(0,n.red)(t)}`}function ge(e){return`\u{1F91D} - Ensuring ${(0,n.cyan)(e)} folder exists...`}function fe(e){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Error while checking directory writability:
28
+ `+(0,n.red)(e)}function de(e,t){return`${(0,n.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")} Can't setup built-in tests for ${(0,n.cyan)(e)}:
29
+ ${(0,n.red)(t)}`}var h=a(require("fs/promises")),E=a(require("path")),ue=require("package-manager-detector");async function $(e,t){let r=await h.default.readdir(e,{withFileTypes:!0});return await h.default.mkdir(t,{recursive:!0}),await Promise.all(r.map(async s=>{let i=E.default.join(e,s.name),o=E.default.join(t,s.name);s.isDirectory()?await $(i,o):await h.default.copyFile(i,o)}))}async function T(){let e=await(0,ue.detect)(),t="npm";if(process.env.npm_config_user_agent&&process.env.npm_config_user_agent.includes("pnpm"))return"pnpm";switch(e?.name){case"yarn":t="yarn";break;case"pnpm":t="pnpm";break;default:t="npm"}return t}function we(e){let t=E.default.resolve(__dirname,"template");return E.default.resolve(e,t)}async function ye(e,t){try{return console.log(ge(t)),await h.default.mkdir(e,{recursive:!0}),!0}catch(r){return console.log(fe(r)),!1}}function xe(e){return e!=="init"}function he(e){return e.includes("typescript")||e.includes("react")||e.includes("preact")||e.includes("svelte")||e.includes("solid")}var Ee=a(require("path")),_=a(require("fs/promises"));var qe=["LICENSE","node_modules"];async function $e(e,t){console.log(X(t));try{let r=await ye(e,t);console.log(U()),r||(console.error(W(e)),process.exit(1));let s=await _.default.readdir(e);console.log(Y());let i=await Promise.all(s.filter(o=>!o.startsWith(".")).filter(o=>!o.endsWith(".log")).filter(o=>!qe.includes(o)).map(async o=>(await _.default.lstat(Ee.default.join(e,o))).isDirectory()?`${o}/`:`${o}`));if(i.length>0){let o=await O(e,i);throw new Error(o)}}catch(r){console.error(B(t,r)),process.exit(1)}}var ve=a(require("path"));async function be(e,t,r){let s=ve.default.resolve(__dirname,"template");try{console.log(x(t,r)),await $(s,e)}catch(i){console.error(D(t,r,i)),process.exit(1)}}var p=a(require("path")),u=a(require("fs/promises")),De=a(require("go-git-it"));async function Te(e,t,r){let s=p.default.dirname(e),i=p.default.basename(r),c=`https://github.com/extension-js/extension.js/tree/main/examples/${r}`;try{await u.default.mkdir(e,{recursive:!0});let l="";if(process.env.EXTENSION_ENV==="development"){console.log(x(t,r)),l=p.default.join(e,i);let m=p.default.join(__dirname,"..","..","..","examples",i);await $(m,l)}else await(0,De.default)(c,s,x(t,i)),l=p.default.join(s,i);if(t!==i){let m=p.default.join(s,t);await u.default.mkdir(m,{recursive:!0});let g=await u.default.readdir(l);for(let d of g)await u.default.rename(p.default.join(l,d),p.default.join(m,d));await u.default.rm(l,{recursive:!0,force:!0})}else{let m=p.default.join(s,t+"-temp");await u.default.rename(l,m);let g=p.default.join(m,i),d=p.default.join(s,t);await u.default.mkdir(d,{recursive:!0});let Oe=await u.default.readdir(g);for(let N of Oe)await u.default.rename(p.default.join(g,N),p.default.join(d,N));await u.default.rm(m,{recursive:!0,force:!0})}}catch(l){console.error(D(t,i,l)),process.exit(1)}}var v=a(require("path")),I=a(require("fs/promises"));var He={dev:process.env.EXTENSION_ENV==="development"?"node node_modules/extension dev":"extension dev",start:process.env.EXTENSION_ENV==="development"?"node node_modules/extension start":"extension start",build:process.env.EXTENSION_ENV==="development"?"node node_modules/extension build":"extension build"};async function Fe(e,t,r){let s=we(process.cwd()),i=xe(r)?v.default.join(e,"package.json"):v.default.join(s,"package.json"),o=await I.default.readFile(i),c=JSON.parse(o.toString());c.scripts=c.scripts||{},c.dependencies=c.dependencies||{},c.devDependencies={...c.devDependencies||{},extension:process.env.EXTENSION_ENV==="development"?"*":"latest"};let l={...c,name:v.default.basename(e),private:!0,scripts:{...c.scripts,...He},dependencies:c.dependencies,devDependencies:c.devDependencies,author:{name:"Your Name",email:"your@email.com",url:"https://yourwebsite.com"}};try{console.log(se()),await I.default.writeFile(v.default.join(e,"package.json"),JSON.stringify(l,null,2))}catch(m){console.error(oe(t,m)),process.exit(1)}}var ke=a(require("path")),Se=require("cross-spawn"),Ce=a(require("fs"));function Ke(){return["install","--silent"]}async function _e(e,t){let r=ke.default.join(e,"node_modules"),s=await T(),i=Ke();console.log(te());try{let o=process.cwd();process.chdir(e),await Ce.default.promises.mkdir(r,{recursive:!0});let c=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",l=(0,Se.spawn)(s,i,{stdio:c});await new Promise((m,g)=>{l.on("close",d=>{process.chdir(o),d!==0?g(new Error(ne(s,i,d))):m()}),l.on("error",d=>{process.chdir(o),console.error(ie(t,d)),g(d)})})}catch(o){console.error(re(t,o)),process.exit(1)}}var F=a(require("path")),k=a(require("fs/promises"));async function Ie(e,t){let r=await k.default.readFile(F.default.join(__dirname,"template","README.md"),"utf-8"),s=await T(),i=require(F.default.join(e,"manifest.json")),o=r.replaceAll("[projectName]",t).replaceAll("[templateDescription]",i.description).replaceAll("[runCommand]",s);try{console.log(le()),await k.default.mkdir(e,{recursive:!0}),await k.default.writeFile(F.default.join(e,"README.md"),o)}catch(c){console.error(pe(t,c)),process.exit(1)}}var S=a(require("path")),P=a(require("fs/promises"));async function Pe(e,t){let r=S.default.join(e,"manifest.json"),s=await P.default.readFile(r),o={...JSON.parse(s.toString()),name:S.default.basename(e),author:"Your Name"};try{console.log(ae()),await P.default.writeFile(S.default.join(e,"manifest.json"),JSON.stringify(o,null,2))}catch(c){console.error(ce(t,c)),process.exit(1)}}var J=a(require("path")),M=a(require("fs/promises"));async function Je(e,t){let r=J.default.join(e,"extension-env.d.ts"),s=process.env.EXTENSION_ENV==="development"?J.default.resolve(process.cwd(),"programs/cli/types"):"extension/dist/types",i=`// Required Extension.js types for TypeScript projects.
17
30
  // This file is auto-generated and should not be excluded.
18
31
  // If you need additional types, consider creating a new *.d.ts file and
19
32
  // referencing it in the "include" array of your tsconfig.json file.
20
33
  // See https://www.typescriptlang.org/tsconfig#include for more information.
21
- /// <reference types="${i}/index.d.ts" />
34
+ /// <reference types="${s}/index.d.ts" />
22
35
 
23
36
  // Polyfill types for browser.* APIs.
24
- /// <reference types="${i}/polyfill.d.ts" />
25
- `;try{await R.default.mkdir(e,{recursive:!0}),console.log(H(t)),await R.default.writeFile(r,n)}catch(s){console.error(B(s)),process.exit(1)}}var je=a(require("fs/promises")),Ge=a(require("path"));var Ze=["","# dependencies","node_modules"],et=["","# testing","coverage"],tt=["","# production","dist"],nt=["","# misc",".DS_Store"],it=["","# local env files",".env.local",".env.development.local",".env.test.local",".env.production.local"],rt=["","# debug files","npm-debug.log*","yarn-debug.log*","yarn-error.log*"],ot=["","# lock files","yarn.lock","package-lock.json"],st=["","# extension.js","extension-env.d.ts"],at=["# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.",...Ze,...et,...tt,...nt,...it,...ot,...rt,...st];async function Ae(e){let t=Ge.default.join(e,".gitignore"),r=await je.default.open(t,"a+").catch(s=>{console.error(s),process.exit(1)}),i=new Set;for await(let s of r.readLines({autoClose:!1}))s=s.trim(),s.length!==0&&i.add(s);let n=at.filter(s=>!i.has(s));for(;n[n.length-1]==="";)n.pop();console.log(ge()),await r.appendFile(n.join(`
26
- `),{flush:!0}).catch(s=>{console.error(s),process.exit(1)})}var Oe=require("cross-spawn");async function We(e,t){let r="git",i=["init","--quiet"];console.log(K(t));try{let n=process.cwd();process.chdir(e);let s=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",l=(0,Oe.spawn)(r,i,{stdio:s});await new Promise((c,m)=>{l.on("close",g=>{process.chdir(n),g!==0?m(new Error(Q(r,i,g))):c()}),l.on("error",g=>{process.chdir(n),console.error(Z(t,g)),m(g)})})}catch(n){console.error(ee(t,n)),process.exit(1)}}async function lt(e,{template:t="init",noInstall:r=!1}){if(!e)throw new Error(z());if(e.startsWith("http"))throw new Error(V());let i=C.default.isAbsolute(e)?e:C.default.join(process.cwd(),e),n=C.default.basename(i);try{await ve(i,n),t==="init"?await be(i,n,t):await Fe(i,n,t),await Te(i,n,t),r||await Me(i,n),await _e(i,n),await Re(i,n),await We(i,n),await Ae(i),Ee(t)&&await Ne(i,n);let s=await X(i,n);console.log(s)}catch(s){throw console.error(s),s}}0&&(module.exports={extensionCreate});
37
+ /// <reference types="${s}/polyfill.d.ts" />
38
+ `;try{await M.default.mkdir(e,{recursive:!0}),console.log(q(t)),await M.default.writeFile(r,i)}catch(o){console.error(H(o)),process.exit(1)}}var Me=a(require("fs/promises")),Re=a(require("path"));var Qe=["","# dependencies","node_modules"],Ze=["","# testing","coverage"],et=["","# production","dist"],tt=["","# misc",".DS_Store"],nt=["","# local env files",".env.local",".env.development.local",".env.test.local",".env.production.local"],it=["","# debug files","npm-debug.log*","yarn-debug.log*","yarn-error.log*"],rt=["","# lock files","yarn.lock","package-lock.json"],st=["","# extension.js","extension-env.d.ts"],ot=["# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.",...Qe,...Ze,...et,...tt,...nt,...rt,...it,...st];async function Ne(e){let t=Re.default.join(e,".gitignore"),r=await Me.default.open(t,"a+").catch(o=>{console.error(o),process.exit(1)}),s=new Set;for await(let o of r.readLines({autoClose:!1}))o=o.trim(),o.length!==0&&s.add(o);let i=ot.filter(o=>!s.has(o));for(;i[i.length-1]==="";)i.pop();console.log(me()),await r.appendFile(i.join(`
39
+ `),{flush:!0}).catch(o=>{console.error(o),process.exit(1)})}var je=require("cross-spawn");async function Ae(e,t){let r="git",s=["init","--quiet"];console.log(K(t));try{let i=process.cwd();process.chdir(e);let o=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",c=(0,je.spawn)(r,s,{stdio:o});await new Promise((l,m)=>{c.on("close",g=>{process.chdir(i),g!==0?m(new Error(Q(r,s,g))):l()}),c.on("error",g=>{process.chdir(i),console.error(Z(t,g)),m(g)})})}catch(i){console.error(ee(t,i)),process.exit(1)}}var Ge=a(require("path")),R=a(require("fs"));async function We(e,t){try{let r=Ge.default.join(e,"tests","templates.spec.ts");R.default.existsSync(r)&&R.default.unlinkSync(r)}catch(r){console.error(de(t,r)),process.exit(1)}}async function at(e,{template:t="init",install:r=!0}){if(!e)throw new Error(z());if(e.startsWith("http"))throw new Error(L());let s=C.default.isAbsolute(e)?e:C.default.join(process.cwd(),e),i=C.default.basename(s);try{await $e(s,i),t==="init"?await be(s,i,t):await Te(s,i,t),await Fe(s,i,t),r&&await _e(s,i),await Ie(s,i),await Pe(s,i),await Ae(s,i),await Ne(s),await We(s,i),he(t)&&await Je(s,i);let o=await V(s,i);console.log(o)}catch(o){throw console.error(o),o}}0&&(module.exports={extensionCreate});
@@ -2,36 +2,34 @@
2
2
 
3
3
  > [templateDescription]
4
4
 
5
- ## Scripts Available
5
+ ## Available Scripts
6
6
 
7
- In the project directory, you can run:
7
+ In the project directory, you can run the following scripts:
8
8
 
9
9
  ### [runCommand] dev
10
10
 
11
- ```
12
- // Runs the app in the development mode.
13
- // Will open a new browser instance with your extension loaded.
14
- // The page will reload when you make changes.
11
+ **Development Mode**: This command runs your extension in development mode. It will launch a new browser instance with your extension loaded. The page will automatically reload whenever you make changes to your code, allowing for a smooth development experience.
12
+
13
+ ```bash
15
14
  [runCommand] dev
16
15
  ```
17
16
 
18
17
  ### [runCommand] start
19
18
 
20
- ```
21
- // Runs the app in the production mode.
22
- // Will open a new browser instance with your extension loaded.
23
- // This is how your browser extension will work once published.
19
+ **Production Preview**: This command runs your extension in production mode. It will launch a new browser instance with your extension loaded, simulating the environment and behavior of your extension as it will appear once published.
20
+
21
+ ```bash
24
22
  [runCommand] start
25
23
  ```
26
24
 
27
25
  ### [runCommand] build
28
26
 
29
- ```
30
- // Builds the app for production.
31
- // Bundles your browser extension in production mode for the target browser.
27
+ **Build for Production**: This command builds your extension for production. It optimizes and bundles your extension, preparing it for deployment to the target browser's store.
28
+
29
+ ```bash
32
30
  [runCommand] build
33
31
  ```
34
32
 
35
33
  ## Learn More
36
34
 
37
- Learn more about creating cross-browser extensions in the [Extension.js](https://extension.js.org) documentation.
35
+ To learn more about creating cross-browser extensions with Extension.js, visit the [official documentation](https://extension.js.org).
@@ -1,4 +1,5 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/chrome-manifest.json",
2
3
  "manifest_version": 3,
3
4
  "version": "1.0",
4
5
  "name": "Default Extension",
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "node": ">=18"
10
10
  },
11
11
  "name": "extension-create",
12
- "version": "2.0.0-alpha.8",
12
+ "version": "2.0.0-beta.0",
13
13
  "description": "The Extension.js create step",
14
14
  "main": "./dist/module.js",
15
15
  "types": "./dist/module.d.ts",
@@ -21,21 +21,16 @@
21
21
  "email": "boss@cezaraugusto.net",
22
22
  "url": "https://cezaraugusto.com"
23
23
  },
24
- "scripts": {
25
- "clean": "rm -rf dist",
26
- "watch": "yarn compile --watch",
27
- "compile": "tsup-node ./module.ts --format cjs --dts --target=node18 --minify && bash install_scripts.sh",
28
- "test": "echo \"Note: no test specified\" && exit 0",
29
- "test:create": "jest ./create.spec.ts --no-cache"
30
- },
31
24
  "dependencies": {
32
25
  "@colors/colors": "^1.6.0",
26
+ "@types/firefox-webext-browser": "^120.0.4",
33
27
  "cross-spawn": "^7.0.3",
34
- "detect-package-manager": "^3.0.2",
35
- "go-git-it": "2.0.4"
28
+ "go-git-it": "2.0.4",
29
+ "package-manager-detector": "^0.2.0"
36
30
  },
37
31
  "devDependencies": {
38
32
  "@types/cross-spawn": "^6.0.6",
33
+ "@types/node": "^22.5.3",
39
34
  "@types/react-dom": "^18.2.18",
40
35
  "globals": "^15.9.0",
41
36
  "jest": "^29.7.0",
@@ -43,5 +38,12 @@
43
38
  "tsconfig": "*",
44
39
  "tsup": "^8.0.1",
45
40
  "typescript": "5.3.3"
41
+ },
42
+ "scripts": {
43
+ "clean": "rm -rf dist",
44
+ "watch": "tsup-node ./module.ts --format cjs --dts --target=node18 --watch",
45
+ "compile": "tsup-node ./module.ts --format cjs --dts --target=node18 --minify && bash install_scripts.sh",
46
+ "test": "echo \"Note: no test specified\" && exit 0",
47
+ "test:create": "jest ./create.spec.ts --no-cache"
46
48
  }
47
- }
49
+ }