@portosaur/cli 0.1.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 (40) hide show
  1. package/README.md +52 -0
  2. package/bin/porto.mjs +71 -0
  3. package/package.json +36 -0
  4. package/src/commands/build.mjs +85 -0
  5. package/src/commands/dev.mjs +61 -0
  6. package/src/commands/init.mjs +523 -0
  7. package/src/commands/initCi.mjs +227 -0
  8. package/src/commands/providers.mjs +170 -0
  9. package/src/commands/schema.mjs +208 -0
  10. package/src/commands/serve.mjs +29 -0
  11. package/src/index.d.ts +49 -0
  12. package/src/index.mjs +8 -0
  13. package/src/templates/README.md +58 -0
  14. package/src/templates/blog/authors.yml +4 -0
  15. package/src/templates/blog/welcome.md +11 -0
  16. package/src/templates/config.yml +150 -0
  17. package/src/templates/gitignore +9 -0
  18. package/src/templates/notes/index.mdx +9 -0
  19. package/src/templates/notes/welcome.mdx +9 -0
  20. package/src/templates/package.json +14 -0
  21. package/src/templates/registry.yml +107 -0
  22. package/src/templates/static/.nojekyll +0 -0
  23. package/src/templates/static/README.md +1 -0
  24. package/src/templates/workflows/codeberg/.forgejo/workflows/deploy.yml +39 -0
  25. package/src/templates/workflows/github/.github/workflows/deploy.yml +55 -0
  26. package/src/templates/workflows/gitlab/.gitlab-ci.yml +13 -0
  27. package/src/templates/workflows/netlify/netlify.toml +6 -0
  28. package/src/templates/workflows/surge/codeberg/.forgejo/workflows/deploy.yml +23 -0
  29. package/src/templates/workflows/surge/github/.github/workflows/deploy.yml +23 -0
  30. package/src/templates/workflows/surge/gitlab/.gitlab-ci.yml +16 -0
  31. package/src/templates/workflows/surge/sourcehut/.build.yml +26 -0
  32. package/src/templates/workflows/woodpecker/.woodpecker/deploy.yml +21 -0
  33. package/src/utils/git.mjs +52 -0
  34. package/src/utils/index.mjs +7 -0
  35. package/src/utils/interaction.mjs +24 -0
  36. package/src/utils/packageManager.mjs +85 -0
  37. package/src/utils/paths.mjs +33 -0
  38. package/src/utils/platforms.mjs +130 -0
  39. package/src/utils/projectName.mjs +20 -0
  40. package/src/utils/runner.mjs +192 -0
@@ -0,0 +1,58 @@
1
+ # {{projectName}}
2
+
3
+ Welcome to my digital personality and portfolio! 👋
4
+
5
+ This is my personal space on the web to express myself, share my thoughts, and showcase my work to the world.
6
+
7
+ ## About This Repository
8
+
9
+ This repository contains the source code for my personal website, built with [Portosaur]({{portoHome}}).
10
+
11
+ It serves as my:
12
+
13
+ - **Portfolio**: Highlighting my projects, skills, and professional experience.
14
+ - **Digital Notebook**: A collection of notes, snippets, and ongoing learnings.
15
+ - **Blog**: Long-form articles and deep dives.
16
+
17
+ ## Local Development
18
+
19
+ If you'd like to explore the code or run this site locally:
20
+
21
+ 1. **Clone the repository:**
22
+
23
+ ```bash
24
+ git clone https://github.com/<MyUserName>/{{projectName}}.git
25
+ cd {{projectName}}
26
+ ```
27
+
28
+ 2. **Install dependencies:**
29
+
30
+ ```bash
31
+ bun install
32
+ ```
33
+
34
+ _(npm, yarn, or pnpm work too!)_
35
+
36
+ 3. **Start the development server:**
37
+
38
+ ```bash
39
+ bun run dev
40
+ ```
41
+
42
+ 4. **Build for production:**
43
+ ```bash
44
+ bun run build
45
+ ```
46
+
47
+ ## Structure
48
+
49
+ - `config.js` — The configuration for my site.
50
+ - `notes/` — Markdown/MDX files for my digital Notebook.
51
+ - `blog/` — Articles and blog posts.
52
+ - `static/` — Static assets like images and my resume.
53
+
54
+ ---
55
+
56
+ <br/>
57
+
58
+ _Powered by [Portosaur]({{portoHome}})_
@@ -0,0 +1,4 @@
1
+ you:
2
+ name: Your Name
3
+ title: Author
4
+ url: https://github.com/yourprofile
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: Welcome to the Blog
3
+ authors: [you]
4
+ tags: [welcome]
5
+ ---
6
+
7
+ Your first blog post! Edit or delete this file to get started.
8
+
9
+ <!-- truncate -->
10
+
11
+ This is a blog powered by [Portosaur](https://github.com/soymadip/portosaur).
@@ -0,0 +1,150 @@
1
+ # yaml-language-server: $schema=https://soymadip.github.io/portosaur/conf-schema.json
2
+ # Portosaur Project Configuration
3
+ # This file is filled with example values
4
+ # Check Config Docs: https://soymadip.is-a.dev/portosaur/guide/config
5
+
6
+ # Site Metadata & SEO
7
+ site:
8
+ title: "{{fullName}}"
9
+ tagline: "Short description about you, your passion, your goals etc."
10
+
11
+ favicon: "{{portoRoot}}/src/assets/img/svg/icon.svg"
12
+ social_card: "{{portoRoot}}/src/assets/img/social-card.jpeg"
13
+
14
+ # Auto set if deploying in Github/GitLab Pages
15
+ url: "auto"
16
+ path: "auto"
17
+
18
+ # UI/UX & Theme Behavior
19
+ theme:
20
+ appearance:
21
+ dark_mode: true
22
+ disable_switch: false
23
+
24
+ navigation:
25
+ collapsable_sidebar: true
26
+ hide_navbar_on_scroll: true
27
+
28
+ # Page Content & Sections
29
+ home_page:
30
+ hero:
31
+ title: null # Fallback to {{site.title}}
32
+ profession: "Your Profession"
33
+ desc: null # Fallback to {{site.tagline}}
34
+ profile_pic: null # Fallback to {{site.favicon}}
35
+
36
+ social:
37
+ - name: "LinkedIn"
38
+ url: "https://www.linked.com/in/{{userName}}"
39
+
40
+ - name: "GitHub"
41
+ icon: "githubalt"
42
+ url: "https://github.com/{{userName}}"
43
+
44
+ - name: "Telegram"
45
+ url: "https://t.me/{{userName}}"
46
+
47
+ about:
48
+ enable: true
49
+ image: null # Fallback to {{home_page.hero.profile_pic}}
50
+ bio:
51
+ - "I'm a {{home_page.hero.profession}} who loves turning ideas into reality."
52
+ - "With a background in computer science and a passion for design, I bridge the gap between aesthetics and functionality."
53
+ - "Also I am interested in Your interest1, interest2 etc etc......"
54
+ skills:
55
+ - "skill 1"
56
+ - "skill 2"
57
+ - "skill 3"
58
+ resume: "{{portoRoot}}/src/assets/sample-resume.pdf"
59
+
60
+ project_shelf:
61
+ enable: true
62
+ projects:
63
+ - title: "Your Awesome Project"
64
+ icon: null
65
+ state: "active" # options: active, completed, maintenance, paused, archived, planned
66
+ desc: "A brief description of what this project does and the tech used."
67
+ tags: ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6", "tag7"]
68
+ website: "https://example.com"
69
+ repo: "https://github.com/yourname/project1"
70
+
71
+ - title: "Your Awesome Project 2"
72
+ icon: "{{portoRoot}}/src/assets/img/svg/icon.svg"
73
+ bg: "#5c8f2d"
74
+ tags: ["tag1", "tag2", "tag3", "tag4", "tag5", "tag6", "tag7"]
75
+ featured: true
76
+ state: "completed"
77
+ desc: "A brief description of what this project does and the tech used."
78
+ website: "https://example.com"
79
+ repo: "https://github.com/yourname/project2"
80
+ demo: "https://example.com/demo"
81
+
82
+ - title: "Your Awesome Project 3"
83
+ icon: "https://github.com/soymadip/KireiSakura-Kit/blob/main/Assets/icon.png?raw=true"
84
+ bg: "#aa47be"
85
+ state: "completed"
86
+ desc: "A brief description of what this project does and the tech used."
87
+ website: "https://example.com"
88
+ repo: "https://github.com/yourname/project2"
89
+ demo: "https://example.com/demo"
90
+
91
+ experience:
92
+ enable: false
93
+ list:
94
+ - company: "Tech Solutions Inc."
95
+ role: "Senior Developer"
96
+ duration: "2022 - Present"
97
+ desc: "Leading the frontend team in building a high-performance dashboard."
98
+
99
+ # Reach me out section
100
+ social:
101
+ enable: true
102
+ links:
103
+ - name: "Email"
104
+ desc: "Send me an email"
105
+ url: "mailto:yourname@example.com"
106
+
107
+ - name: "LinkedIn"
108
+ desc: "Connect on LinkedIn"
109
+ url: "https://linkedin.com/in/{{userName}}"
110
+
111
+ - name: "Telegram"
112
+ desc: "Reach me on Telegram"
113
+ url: "https://t.me/{{userName}}"
114
+
115
+ - name: "Discord"
116
+ desc: "Become my friend"
117
+ url: "https://discord.com/users/yourid"
118
+
119
+ - name: "Twitter"
120
+ desc: "Find me on Twitter"
121
+ url: "https://twitter.com/{{userName}}"
122
+
123
+ - name: "GitLab"
124
+ desc: "View my GitLab profile"
125
+ url: "https://gitlab.com/{{userName}}"
126
+
127
+ - name: "Anilist"
128
+ desc: "If you are otaku, check out!"
129
+ url: "https://anilist.co/user/{{userName}}"
130
+
131
+ tasks:
132
+ enable: true
133
+ list:
134
+ - title: "Build the future"
135
+ status: "done"
136
+ desc: "Implementing the core framework."
137
+
138
+ # Functional Tools
139
+ tools:
140
+ link_shortener:
141
+ enable: false
142
+ deploy_path: "/l"
143
+ short_links:
144
+ "example": "https://example.com"
145
+
146
+ # Custom variables for use in your content as {{custom.key}}
147
+ custom:
148
+ twitter: "@{{userName}}"
149
+ github: "{{userName}}"
150
+ linkedin: "{{userName}}"
@@ -0,0 +1,9 @@
1
+ # gitignore, init time renamed
2
+
3
+ node_modules/
4
+ .docusaurus/
5
+ .portosaur/
6
+ .cache-loader/
7
+ build/
8
+ notes/index.md*
9
+ test*
@@ -0,0 +1,9 @@
1
+ ---
2
+ hide_table_of_contents: true
3
+ ---
4
+
5
+ import NoteCards from "portosaur/src/theme/components/NoteIndex/index.js";
6
+
7
+ # Notes
8
+
9
+ <NoteCards />
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: "welcome-to-notes"
3
+ author: "Portosaur"
4
+ description: "Welcome to the notes section"
5
+ ---
6
+
7
+ # Welcome
8
+
9
+ Welcome to your notes! Add markdown or MDX files in this `notes/` directory.
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "{{projectName}}",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "$npm_execpath install && porto dev",
7
+ "start": "$npm_execpath install && porto start",
8
+ "build": "$npm_execpath install && porto build",
9
+ "serve": "porto serve"
10
+ },
11
+ "dependencies": {
12
+ "@portosaur/cli": "^{{portoVer}}"
13
+ }
14
+ }
@@ -0,0 +1,107 @@
1
+ vcs_providers:
2
+ github:
3
+ name: GitHub
4
+ domain: github.com
5
+ default_hosting: github-pages
6
+ url: "https://{{domain}}/{{user}}/{{projectName}}.git"
7
+ new_url: "https://{{domain}}/new?name={{projectName}}"
8
+
9
+ gitlab:
10
+ name: GitLab
11
+ domain: gitlab.com
12
+ default_hosting: gitlab-pages
13
+ url: "https://{{domain}}/{{user}}/{{projectName}}.git"
14
+ new_url: "https://{{domain}}/projects/new#blank_project"
15
+
16
+ codeberg:
17
+ name: Codeberg
18
+ domain: codeberg.org
19
+ default_hosting: codeberg-pages
20
+ url: "https://{{domain}}/{{user}}/{{projectName}}.git"
21
+ new_url: "https://codeberg.org/repo/create"
22
+
23
+ sourcehut:
24
+ name: SourceHut
25
+ domain: git.sr.ht
26
+ url: "https://{{domain}}/~{{user}}/{{projectName}}.git"
27
+ new_url: "https://{{domain}}/create"
28
+
29
+ # --------------------------------------------------------------------------------------
30
+
31
+ hosting_platforms:
32
+ github-pages:
33
+ name: GitHub Pages
34
+ domain: "github.io"
35
+ supported_providers: [github] # should be from "vcs_providers" list
36
+ template_dir: github
37
+ repo:
38
+ ideal_name: "{{user}}.github.io"
39
+ mismatch_msg: |-
40
+ For automatic GitHub Pages hosting,
41
+ your repository should be named '{{idealName}}' (exactly your username + .github.io)."
42
+
43
+ gitlab-pages:
44
+ name: GitLab Pages
45
+ domain: "gitlab.io"
46
+ supported_providers: [gitlab]
47
+ template_dir: gitlab
48
+ repo:
49
+ ideal_name: "{{user}}.gitlab.io"
50
+ mismatch_msg: |-
51
+ As Your project name is not '{{idealName}}',
52
+ Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
53
+ Instead of: https://{{user}}.{{domain}}/
54
+ post_setup_tips:
55
+ - Site will be available once the CI pipeline finishes.
56
+
57
+ codeberg-pages:
58
+ name: Codeberg Pages (Forgejo CI)
59
+ domain: "codeberg.page"
60
+ supported_providers: [codeberg]
61
+ template_dir: codeberg
62
+ repo:
63
+ ideal_name: pages
64
+ mismatch_msg: |-
65
+ As Your project name is not 'pages',
66
+ Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
67
+ Instead of: https://{{user}}.{{domain}}/
68
+ post_setup_tips:
69
+ - Ensure Codeberg Actions are enabled for your repository.
70
+ - "Check: Settings > Actions > General > Enable Actions."
71
+
72
+ woodpecker:
73
+ name: Codeberg Pages (Woodpecker CI / Old)
74
+ domain: "codeberg.page"
75
+ supported_providers: [codeberg]
76
+ template_dir: woodpecker
77
+ repo:
78
+ ideal_name: pages
79
+ mismatch_msg: |-
80
+ As Your project name is not 'pages',
81
+ Your site will be available at: https://{{user}}.{{domain}}/{{projectName}}/
82
+ Instead of: https://{{user}}.{{domain}}/
83
+ post_setup_tips:
84
+ - Ensure Woodpecker is enabled for your repository.
85
+ - "Go to https://ci.codeberg.org to enable."
86
+
87
+ surge:
88
+ name: Surge.sh
89
+ supported_providers: all
90
+ template_dir:
91
+ github: surge/github
92
+ gitlab: surge/gitlab
93
+ sourcehut: surge/sourcehut
94
+ codeberg: surge/codeberg
95
+ repo:
96
+ ideal_name: "{{user}}.surge.sh"
97
+ post_setup_tips:
98
+ - "You must set SURGE_LOGIN and SURGE_TOKEN in your CI/CD Secrets!"
99
+ - "Your site will be deployed to https://{{user}}.surge.sh"
100
+
101
+ netlify:
102
+ name: Netlify
103
+ supported_providers: all
104
+ template_dir: netlify
105
+ post_setup_tips:
106
+ - Connect your repository in the Netlify dashboard to deploy automatically.
107
+ - Then your site will be up once CI finishes.
File without changes
@@ -0,0 +1 @@
1
+ Place your static assets (images, files, CNAME) in this directory.
@@ -0,0 +1,39 @@
1
+ name: Deploy Portfolio
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ build-and-deploy:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout
13
+ uses: actions/checkout@v6
14
+
15
+ - name: Setup Bun
16
+ uses: oven-sh/setup-bun@v2
17
+ with:
18
+ bun-version: latest
19
+
20
+ - name: Cache Bun dependencies
21
+ uses: actions/cache@v5
22
+ with:
23
+ path: ~/.bun/install/cache
24
+ key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
25
+ restore-keys: |
26
+ ${{ runner.os }}-bun-
27
+
28
+ - name: Install dependencies
29
+ run: bun install
30
+
31
+ - name: Build site
32
+ run: bunx portosaur build
33
+
34
+ - name: Deploy to Codeberg Pages
35
+ uses: https://codeberg.org/git-pages/action@v2
36
+ with:
37
+ site: "https://${{ forge.repository_owner }}.codeberg.page/${{ forge.repository_name }}/"
38
+ token: ${{ forge.token }}
39
+ source: build/
@@ -0,0 +1,55 @@
1
+ name: Deploy to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths-ignore:
8
+ - "README.md"
9
+ - ".gitignore"
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ jobs:
17
+ deploy:
18
+ name: Deploy
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v6
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Setup Bun
27
+ uses: oven-sh/setup-bun@v2
28
+ with:
29
+ bun-version: latest
30
+
31
+ - name: Setup Pages
32
+ uses: actions/configure-pages@v6
33
+
34
+ - name: Cache Bun dependencies
35
+ uses: actions/cache@v5
36
+ with:
37
+ path: ~/.bun/install/cache
38
+ key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
39
+ restore-keys: |
40
+ ${{ runner.os }}-bun-
41
+
42
+ - name: Install dependencies
43
+ run: bun install --frozen-lockfile
44
+
45
+ - name: Build site
46
+ run: bun run build
47
+
48
+ - name: Upload artifact
49
+ uses: actions/upload-pages-artifact@v5
50
+ with:
51
+ path: build
52
+
53
+ - name: Deploy to GitHub Pages
54
+ id: deployment
55
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,13 @@
1
+ image: oven/bun:latest
2
+
3
+ pages:
4
+ stage: deploy
5
+ script:
6
+ - bun install
7
+ - bunx portosaur build
8
+ - mv build public
9
+ artifacts:
10
+ paths:
11
+ - public
12
+ only:
13
+ - main
@@ -0,0 +1,6 @@
1
+ [build]
2
+ command = "bun run build"
3
+ publish = "build"
4
+
5
+ [build.environment]
6
+ BUN_VERSION = "latest"
@@ -0,0 +1,23 @@
1
+ name: Deploy to Surge
2
+ on:
3
+ push:
4
+ branches: [main]
5
+
6
+ jobs:
7
+ deploy:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v6
11
+ - uses: oven-sh/setup-bun@v2
12
+
13
+ - name: Install dependencies
14
+ run: bun install
15
+
16
+ - name: Build Docusaurus
17
+ run: bun run build
18
+
19
+ - name: Deploy to Surge
20
+ run: bunx surge ./build --domain {{projectName}}.surge.sh
21
+ env:
22
+ SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }}
23
+ SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
@@ -0,0 +1,23 @@
1
+ name: Deploy to Surge
2
+ on:
3
+ push:
4
+ branches: [main]
5
+
6
+ jobs:
7
+ deploy:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v6
11
+ - uses: oven-sh/setup-bun@v2
12
+
13
+ - name: Install dependencies
14
+ run: bun install
15
+
16
+ - name: Build Docusaurus
17
+ run: bun run build
18
+
19
+ - name: Deploy to Surge
20
+ run: bunx surge ./build --domain {{projectName}}.surge.sh
21
+ env:
22
+ SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }}
23
+ SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
@@ -0,0 +1,16 @@
1
+ image: oven/bun:latest
2
+
3
+ stages:
4
+ - deploy
5
+
6
+ deploy:
7
+ stage: deploy
8
+ only:
9
+ - main
10
+ script:
11
+ - bun install
12
+ - bun run build
13
+ - bunx surge ./build --domain {{projectName}}.surge.sh
14
+ variables:
15
+ SURGE_LOGIN: $SURGE_LOGIN
16
+ SURGE_TOKEN: $SURGE_TOKEN
@@ -0,0 +1,26 @@
1
+ image: debian/latest
2
+ packages:
3
+ - curl
4
+ - git
5
+ sources:
6
+ - https://git.sr.ht/~{{userName}}/{{projectName}}
7
+ tasks:
8
+ - setup: |
9
+ curl -fsSL https://bun.sh/install | bash
10
+ export PATH=$HOME/.bun/bin:$PATH
11
+ - install: |
12
+ export PATH=$HOME/.bun/bin:$PATH
13
+ cd {{projectName}}
14
+ bun install
15
+ - build: |
16
+ export PATH=$HOME/.bun/bin:$PATH
17
+ cd {{projectName}}
18
+ bun run build
19
+ - deploy: |
20
+ export PATH=$HOME/.bun/bin:$PATH
21
+ cd {{projectName}}
22
+ # Note: SURGE_LOGIN and SURGE_TOKEN must be added to your SourceHut build secrets
23
+ bunx surge ./build --domain {{projectName}}.surge.sh
24
+ environment:
25
+ SURGE_LOGIN: ""
26
+ SURGE_TOKEN: ""
@@ -0,0 +1,21 @@
1
+ kind: pipeline
2
+ name: deploy
3
+
4
+ steps:
5
+ - name: build
6
+ image: oven/bun:latest
7
+ commands:
8
+ - bun install
9
+ - bunx portosaur build
10
+
11
+ - name: deploy
12
+ image: appleboy/drone-git-push
13
+ settings:
14
+ branch: pages
15
+ remote: git@codeberg.org:${DRONE_REPO}.git
16
+ force: true
17
+ commit: true
18
+ path: build
19
+ when:
20
+ event: push
21
+ branch: main
@@ -0,0 +1,52 @@
1
+ import { execSync } from "child_process";
2
+
3
+ /**
4
+ * Attempts to detect the VCS provider by inspecting the current git repository's remotes.
5
+ * Matches against the domains defined in the provided registry.
6
+ *
7
+ * @param {Object} registry - The Portosaur registry containing vcs_providers.
8
+ * @returns {string|null} The canonical ID of the detected provider, or null if not found.
9
+ */
10
+ export function detectVcsProvider(registry) {
11
+ try {
12
+ const remotes = execSync("git remote -v", {
13
+ stdio: "pipe",
14
+ encoding: "utf8",
15
+ });
16
+
17
+ for (const [id, cfg] of Object.entries(registry.vcs_providers)) {
18
+ if (remotes.includes(cfg.domain)) {
19
+ return id;
20
+ }
21
+ }
22
+ } catch {}
23
+
24
+ return null;
25
+ }
26
+
27
+ /**
28
+ * Retrieves the current git configuration (local and global) as a key-value object.
29
+ *
30
+ * @returns {Object} A map of git configuration keys and their values.
31
+ */
32
+ export function getGitConfig() {
33
+ const config = {};
34
+
35
+ try {
36
+ const output = execSync("git config --list", {
37
+ stdio: "pipe",
38
+ encoding: "utf8",
39
+ });
40
+
41
+ const lines = output.split("\n");
42
+
43
+ for (const line of lines) {
44
+ const [key, ...values] = line.split("=");
45
+ if (key && values.length > 0) {
46
+ config[key] = values.join("=");
47
+ }
48
+ }
49
+ } catch {}
50
+
51
+ return config;
52
+ }
@@ -0,0 +1,7 @@
1
+ export * from "./platforms.mjs";
2
+ export * from "./git.mjs";
3
+ export * from "./runner.mjs";
4
+ export * from "./packageManager.mjs";
5
+ export * from "./interaction.mjs";
6
+ export * from "./paths.mjs";
7
+ export * from "./projectName.mjs";