@adbayb/stack 1.16.1 → 2.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 (111) hide show
  1. package/README.md +36 -41
  2. package/bin/index.js +8 -0
  3. package/configs/eslint/README.md +39 -0
  4. package/configs/eslint/constants.js +10 -0
  5. package/configs/eslint/helpers.js +6 -0
  6. package/configs/eslint/index.js +29 -0
  7. package/configs/eslint/presets/base.js +26 -0
  8. package/configs/eslint/presets/eslint.js +105 -0
  9. package/configs/eslint/presets/import.js +71 -0
  10. package/configs/eslint/presets/jsdoc.js +79 -0
  11. package/configs/eslint/presets/node.js +51 -0
  12. package/configs/eslint/presets/overridable.js +33 -0
  13. package/configs/eslint/presets/react.js +75 -0
  14. package/configs/eslint/presets/sonar.js +225 -0
  15. package/configs/eslint/presets/stylistic.js +69 -0
  16. package/configs/eslint/presets/test.js +59 -0
  17. package/configs/eslint/presets/typescript.js +172 -0
  18. package/configs/eslint/presets/uncategorized.js +34 -0
  19. package/configs/prettier/README.md +65 -0
  20. package/configs/prettier/index.js +25 -0
  21. package/configs/typescript/README.md +46 -0
  22. package/configs/typescript/index.json +35 -0
  23. package/dist/index.js +770 -0
  24. package/package.json +48 -18
  25. package/{template → templates/multi-projects}/.editorconfig +1 -1
  26. package/templates/multi-projects/.github/ISSUE_TEMPLATE/config.yml +4 -0
  27. package/templates/multi-projects/.github/workflows/continuous_delivery.yml +61 -0
  28. package/templates/multi-projects/.github/workflows/continuous_integration.yml +9 -0
  29. package/templates/multi-projects/.github/workflows/conventional_commit.yml +48 -0
  30. package/templates/multi-projects/.github/workflows/dependency_changelog.yml +117 -0
  31. package/templates/multi-projects/.github/workflows/workflow.yml +39 -0
  32. package/{template → templates/multi-projects}/.npmrc.tmpl +1 -0
  33. package/templates/multi-projects/applications/README.md +6 -0
  34. package/templates/multi-projects/eslint.config.js.tmpl +1 -0
  35. package/templates/multi-projects/examples/README.md +6 -0
  36. package/{template → templates/multi-projects}/examples/default/package.json.tmpl +2 -2
  37. package/templates/multi-projects/libraries/README.md +3 -0
  38. package/templates/multi-projects/libraries/{{projectName}}/package.json.tmpl +39 -0
  39. package/templates/multi-projects/libraries/{{projectName}}/tsconfig.json +5 -0
  40. package/{template → templates/multi-projects}/package.json.tmpl +4 -3
  41. package/{template → templates/multi-projects}/pnpm-workspace.yaml.tmpl +0 -1
  42. package/{template → templates/multi-projects}/tools/README.md +1 -1
  43. package/templates/multi-projects/tsconfig.json +4 -0
  44. package/{template → templates/multi-projects}/turbo.json +2 -1
  45. package/templates/single-project/.changeset/README.md +8 -0
  46. package/templates/single-project/.changeset/config.json.tmpl +13 -0
  47. package/templates/single-project/.changeset/welcome.md.tmpl +5 -0
  48. package/templates/single-project/.editorconfig +4 -0
  49. package/templates/single-project/.github/ISSUE_TEMPLATE/bug_report.md +34 -0
  50. package/templates/single-project/.github/ISSUE_TEMPLATE/config.yml +4 -0
  51. package/templates/single-project/.github/PULL_REQUEST_TEMPLATE.md.tmpl +29 -0
  52. package/templates/single-project/.github/renovate.json +69 -0
  53. package/templates/single-project/.github/workflows/continuous_delivery.yml +61 -0
  54. package/templates/single-project/.github/workflows/continuous_integration.yml +9 -0
  55. package/templates/single-project/.github/workflows/conventional_commit.yml +48 -0
  56. package/templates/single-project/.github/workflows/dependency_changelog.yml +117 -0
  57. package/templates/single-project/.github/workflows/workflow.yml +39 -0
  58. package/templates/single-project/.gitignore.tmpl +134 -0
  59. package/templates/single-project/.npmrc.tmpl +8 -0
  60. package/templates/single-project/.nvmrc.tmpl +1 -0
  61. package/templates/single-project/.vscode/extensions.json +8 -0
  62. package/templates/single-project/.vscode/settings.json +27 -0
  63. package/templates/single-project/CONTRIBUTING.md.tmpl +21 -0
  64. package/templates/single-project/LICENSE.tmpl +21 -0
  65. package/templates/single-project/eslint.config.js.tmpl +1 -0
  66. package/templates/single-project/examples/README.md +6 -0
  67. package/templates/single-project/examples/default/package.json.tmpl +14 -0
  68. package/templates/single-project/examples/default/src/index.ts.tmpl +3 -0
  69. package/templates/single-project/examples/default/tsconfig.json +5 -0
  70. package/templates/single-project/package.json.tmpl +27 -0
  71. package/templates/single-project/pnpm-workspace.yaml.tmpl +4 -0
  72. package/templates/single-project/tools/README.md +6 -0
  73. package/templates/single-project/tsconfig.json +4 -0
  74. package/templates/single-project/turbo.json +25 -0
  75. package/templates/single-project/{{projectName}}/README.md.tmpl +42 -0
  76. package/{template → templates/single-project}/{{projectName}}/package.json.tmpl +3 -5
  77. package/templates/single-project/{{projectName}}/src/index.test.ts.tmpl +5 -0
  78. package/templates/single-project/{{projectName}}/src/index.ts +1 -0
  79. package/bin/index.cjs +0 -7
  80. package/dist/index.cjs +0 -15
  81. package/dist/index.cjs.map +0 -7
  82. package/template/.commitlintrc.json +0 -3
  83. package/template/.eslintrc.json.tmpl +0 -3
  84. package/template/.github/ISSUE_TEMPLATE/config.yml +0 -4
  85. package/template/.github/workflows/continuous_delivery.yml +0 -49
  86. package/template/.github/workflows/continuous_integration.yml +0 -9
  87. package/template/.github/workflows/conventional_commit.yml +0 -48
  88. package/template/.github/workflows/dependency_changelog.yml +0 -117
  89. package/template/.github/workflows/workflow.yml +0 -96
  90. package/template/applications/README.md +0 -9
  91. package/template/examples/README.md +0 -6
  92. package/template/libraries/README.md +0 -9
  93. package/template/tsconfig.json +0 -3
  94. /package/{template → templates/multi-projects}/.changeset/README.md +0 -0
  95. /package/{template → templates/multi-projects}/.changeset/config.json.tmpl +0 -0
  96. /package/{template → templates/multi-projects}/.changeset/welcome.md.tmpl +0 -0
  97. /package/{template → templates/multi-projects}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  98. /package/{template → templates/multi-projects}/.github/PULL_REQUEST_TEMPLATE.md.tmpl +0 -0
  99. /package/{template → templates/multi-projects}/.github/renovate.json +0 -0
  100. /package/{template → templates/multi-projects}/.gitignore.tmpl +0 -0
  101. /package/{template → templates/multi-projects}/.nvmrc.tmpl +0 -0
  102. /package/{template → templates/multi-projects}/.vscode/extensions.json +0 -0
  103. /package/{template → templates/multi-projects}/.vscode/settings.json +0 -0
  104. /package/{template → templates/multi-projects}/CONTRIBUTING.md.tmpl +0 -0
  105. /package/{template → templates/multi-projects}/LICENSE.tmpl +0 -0
  106. /package/{template → templates/multi-projects}/examples/default/src/index.ts.tmpl +0 -0
  107. /package/{template → templates/multi-projects}/examples/default/tsconfig.json +0 -0
  108. /package/{template → templates/multi-projects/libraries}/{{projectName}}/README.md.tmpl +0 -0
  109. /package/{template → templates/multi-projects/libraries}/{{projectName}}/src/index.test.ts.tmpl +0 -0
  110. /package/{template → templates/multi-projects/libraries}/{{projectName}}/src/index.ts +0 -0
  111. /package/{template → templates/single-project}/{{projectName}}/tsconfig.json +0 -0
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ ":automergeAll",
5
+ ":automergePr",
6
+ ":automergeRequireAllStatusChecks",
7
+ ":enableVulnerabilityAlerts",
8
+ ":label(dependencies)",
9
+ ":maintainLockFilesMonthly",
10
+ ":prConcurrentLimit10",
11
+ ":rebaseStalePrs",
12
+ ":semanticCommits",
13
+ ":semanticCommitScopeDisabled",
14
+ ":semanticPrefixFixDepsChoreOthers",
15
+ ":timezone(Europe/Paris)",
16
+ "npm:unpublishSafe",
17
+ "replacements:all",
18
+ "schedule:monthly",
19
+ "workarounds:all"
20
+ ],
21
+ "commitBodyTable": true,
22
+ "platformAutomerge": false,
23
+ "ignoreDeps": [],
24
+ "packageRules": [
25
+ {
26
+ "matchPackagePatterns": ["*"],
27
+ "rangeStrategy": "auto"
28
+ },
29
+ {
30
+ "matchDepTypes": ["devDependencies"],
31
+ "rangeStrategy": "pin"
32
+ },
33
+ {
34
+ "matchDepTypes": ["dependencies"],
35
+ "rangeStrategy": "bump"
36
+ },
37
+ {
38
+ "description": "Synchronize CircleCI Docker image version with the Node.js one",
39
+ "matchPackageNames": ["cimg/node"],
40
+ "versioning": "node"
41
+ },
42
+ {
43
+ "groupName": "package dependencies",
44
+ "matchManagers": ["npm"],
45
+ "matchDepTypes": [
46
+ "dependencies",
47
+ "devDependencies",
48
+ "optionalDependencies",
49
+ "peerDependencies"
50
+ ]
51
+ },
52
+ {
53
+ "groupName": "infrastructure dependencies",
54
+ "matchManagers": [
55
+ "circleci",
56
+ "github-actions",
57
+ "dockerfile",
58
+ "terraform",
59
+ "terraform-version",
60
+ "docker-compose",
61
+ "kubernetes"
62
+ ]
63
+ },
64
+ {
65
+ "groupName": "engine dependencies",
66
+ "matchPackagePatterns": ["node", "pnpm"]
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,61 @@
1
+ name: Continous delivery
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ concurrency: ${{ github.workflow }}-${{ github.ref }}
9
+
10
+ jobs:
11
+ integrate:
12
+ uses: ./.github/workflows/workflow.yml
13
+ release:
14
+ timeout-minutes: 5
15
+ needs: integrate
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+ pull-requests: write
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: pnpm/action-setup@v4
23
+ - name: Get node version
24
+ run: echo "version=$(cat .nvmrc)" >> $GITHUB_OUTPUT
25
+ id: node
26
+ - name: Setup node ${{ steps.node.outputs.version }}
27
+ uses: actions/setup-node@v4
28
+ with:
29
+ node-version: ${{ steps.node.outputs.version }}
30
+ cache: pnpm
31
+ - name: Setup .npmrc
32
+ run: |
33
+ cat << EOF > "$HOME/.npmrc"
34
+ //registry.npmjs.org/:_authToken=$NPM_TOKEN
35
+ EOF
36
+ env:
37
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
38
+ - name: Install dependencies
39
+ run: pnpm install --frozen-lockfile
40
+ - name: Publish pre-release version(s)
41
+ if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
42
+ run: |
43
+ pnpm --filter=\!@examples/\* --recursive exec pnpm version "$(pnpm show ./ version)-next-${GITHUB_SHA::7}"
44
+ pnpm --filter=\!@examples/\* --recursive exec pnpm publish --tag next --no-git-checks
45
+ - name: Create release pull request
46
+ if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
47
+ uses: changesets/action@v1
48
+ with:
49
+ commit: "chore: release package(s)"
50
+ title: "chore: release package(s)"
51
+ env:
52
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
53
+ - name: Publish stable version(s)
54
+ if: "contains(github.event.head_commit.message, 'chore: release package(s)')"
55
+ uses: changesets/action@v1
56
+ with:
57
+ version: pnpm release:version
58
+ publish: pnpm release:publish
59
+ env:
60
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
61
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,9 @@
1
+ name: Continuous integration
2
+
3
+ on:
4
+ push:
5
+ branches-ignore: main
6
+
7
+ jobs:
8
+ main:
9
+ uses: ./.github/workflows/workflow.yml
@@ -0,0 +1,48 @@
1
+ name: Conventional commit
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, edited]
6
+
7
+ jobs:
8
+ main:
9
+ timeout-minutes: 5
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: amannn/action-semantic-pull-request@v5
13
+ id: check_pr_rule
14
+ env:
15
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16
+ with:
17
+ types: |
18
+ build
19
+ chore
20
+ ci
21
+ docs
22
+ feat
23
+ fix
24
+ perf
25
+ refactor
26
+ revert
27
+ style
28
+ test
29
+ requireScope: false
30
+ subjectPattern: ^(?![A-Z]).+$
31
+ subjectPatternError: The subject must start with a lowercase character
32
+ # Create a sticky comment to display the detailed error
33
+ - uses: marocchino/sticky-pull-request-comment@v2
34
+ if: always() && (steps.check_pr_rule.outputs.error_message != null)
35
+ with:
36
+ header: check_pr_comment
37
+ message: |
38
+ Pull request titles must follow the [Conventional Commits specification](https://www.conventionalcommits.org/).
39
+ Please adjust your title following:
40
+ ```
41
+ ${{ steps.check_pr_rule.outputs.error_message }}
42
+ ```
43
+ # Delete a previous comment when the issue has been resolved
44
+ - if: ${{ steps.check_pr_rule.outputs.error_message == null }}
45
+ uses: marocchino/sticky-pull-request-comment@v2
46
+ with:
47
+ header: check_pr_comment
48
+ delete: true
@@ -0,0 +1,117 @@
1
+ name: Dependency changelog
2
+
3
+ on:
4
+ pull_request_target:
5
+ paths:
6
+ - "**/pnpm-lock.yaml"
7
+
8
+ jobs:
9
+ main:
10
+ timeout-minutes: 5
11
+ runs-on: ubuntu-latest
12
+ if: github.actor == 'renovate[bot]'
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 2
18
+ ref: ${{ github.head_ref }}
19
+ - name: Configure Git
20
+ run: |
21
+ git config --global user.email adbayb@gmail.com
22
+ git config --global user.name 'Ayoub Adib'
23
+ - name: Create changelog entry
24
+ uses: actions/github-script@v7
25
+ # Credits to https://github.com/backstage/backstage/blob/bcc11651add5a2589898dfb9d665ebb9d412201b/.github/workflows/sync_renovate-changesets.yml
26
+ with:
27
+ script: |
28
+ const { promises: fs } = require("fs");
29
+
30
+ async function getPackagesNames(files) {
31
+ const names = [];
32
+
33
+ for (const file of files) {
34
+ const data = JSON.parse(await fs.readFile(file, "utf8"));
35
+
36
+ if (!data.private) {
37
+ names.push(data.name);
38
+ }
39
+ }
40
+
41
+ return names;
42
+ }
43
+
44
+ async function createChangeset(fileName, packageBumps, packages) {
45
+ let message = "";
46
+
47
+ for (const [pkg, bump] of packageBumps) {
48
+ message = message + `Updated dependency \`${pkg}\` to \`${bump}\`.\n`;
49
+ }
50
+
51
+ const pkgs = packages.map((pkg) => `"${pkg}": minor`).join("\n");
52
+ const body = `---\n${pkgs}\n---\n\n${message.trim()}\n`;
53
+
54
+ await fs.writeFile(fileName, body);
55
+ }
56
+
57
+ async function getBumps(files) {
58
+ const bumps = new Map();
59
+
60
+ for (const file of files) {
61
+ const { stdout: changes } = await exec.getExecOutput("git", [
62
+ "show",
63
+ file,
64
+ ]);
65
+
66
+ for (const change of changes.split("\n")) {
67
+ if (!change.match(/^\+\s/)) {
68
+ continue;
69
+ }
70
+
71
+ const match = change.match(/"(.*?)"/g);
72
+
73
+ bumps.set(match[0].replace(/"/g, ""), match[1].replace(/"/g, ""));
74
+ }
75
+ }
76
+
77
+ return bumps;
78
+ }
79
+
80
+ const branch = await exec.getExecOutput("git branch --show-current");
81
+
82
+ if (!branch.stdout.startsWith("renovate/")) {
83
+ console.log("Not a renovate branch, skipping");
84
+
85
+ return;
86
+ }
87
+
88
+ const diffOutput = await exec.getExecOutput("git diff --name-only HEAD~1");
89
+ const diffFiles = diffOutput.stdout.split("\n");
90
+
91
+ if (diffFiles.find((f) => f.startsWith(".changeset"))) {
92
+ console.log("Changeset already exists, skipping");
93
+
94
+ return;
95
+ }
96
+
97
+ const files = diffFiles
98
+ .filter((file) => file !== "package.json") // skip root package.json
99
+ .filter((file) => file.includes("package.json"));
100
+ const packageNames = await getPackagesNames(files);
101
+
102
+ if (!packageNames.length) {
103
+ console.log("No package.json changes to published packages, skipping");
104
+
105
+ return;
106
+ }
107
+
108
+ const { stdout: shortHash } = await exec.getExecOutput(
109
+ "git rev-parse --short HEAD"
110
+ );
111
+ const fileName = `.changeset/renovate-${shortHash.trim()}.md`;
112
+ const packageBumps = await getBumps(files);
113
+
114
+ await createChangeset(fileName, packageBumps, packageNames);
115
+ await exec.exec("git", ["add", fileName]);
116
+ await exec.exec("git commit -C HEAD --amend --no-edit");
117
+ await exec.exec("git push --force");
@@ -0,0 +1,39 @@
1
+ name: Main shareable workflow
2
+
3
+ on:
4
+ workflow_call:
5
+
6
+ jobs:
7
+ main:
8
+ timeout-minutes: 5
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout the code
12
+ uses: actions/checkout@v4
13
+ - uses: pnpm/action-setup@v4
14
+ - name: Get node version
15
+ run: echo "version=$(cat .nvmrc)" >> $GITHUB_OUTPUT
16
+ id: node
17
+ - name: Setup node ${{ steps.node.outputs.version }}
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: ${{ steps.node.outputs.version }}
21
+ cache: pnpm
22
+ - name: Setup cache
23
+ id: cache
24
+ uses: actions/cache@v4
25
+ with:
26
+ path: |
27
+ ./node_modules
28
+ ./turbo
29
+ key: ${{ runner.os }}-cache-${{ github.sha }}
30
+ restore-keys: |
31
+ ${{ runner.os }}-cache-
32
+ - name: Install dependencies
33
+ run: pnpm install --frozen-lockfile
34
+ - name: Build
35
+ run: pnpm build
36
+ - name: Check (static analysis including linters, types, and commit message)
37
+ run: pnpm check
38
+ - name: Test
39
+ run: pnpm test
@@ -0,0 +1,134 @@
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ lerna-debug.log*
8
+ .pnpm-debug.log*
9
+
10
+ # Diagnostic reports (https://nodejs.org/api/report.html)
11
+ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12
+
13
+ # Runtime data
14
+ pids
15
+ *.pid
16
+ *.seed
17
+ *.pid.lock
18
+
19
+ # Directory for instrumented libs generated by jscoverage/JSCover
20
+ lib-cov
21
+
22
+ # Coverage directory used by tools like istanbul
23
+ coverage
24
+ *.lcov
25
+
26
+ # nyc test coverage
27
+ .nyc_output
28
+
29
+ # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30
+ .grunt
31
+
32
+ # Bower dependency directory (https://bower.io/)
33
+ bower_components
34
+
35
+ # node-waf configuration
36
+ .lock-wscript
37
+
38
+ # Compiled binary addons (https://nodejs.org/api/addons.html)
39
+ build/Release
40
+
41
+ # Dependency directories
42
+ node_modules/
43
+ jspm_packages/
44
+
45
+ # Snowpack dependency directory (https://snowpack.dev/)
46
+ web_modules/
47
+
48
+ # TypeScript cache
49
+ *.tsbuildinfo
50
+
51
+ # Optional npm cache directory
52
+ .npm
53
+
54
+ # Optional eslint cache
55
+ .eslintcache
56
+
57
+ # Optional stylelint cache
58
+ .stylelintcache
59
+
60
+ # Microbundle cache
61
+ .rpt2_cache/
62
+ .rts2_cache_cjs/
63
+ .rts2_cache_es/
64
+ .rts2_cache_umd/
65
+
66
+ # Optional REPL history
67
+ .node_repl_history
68
+
69
+ # Output of 'npm pack'
70
+ *.tgz
71
+
72
+ # Yarn Integrity file
73
+ .yarn-integrity
74
+
75
+ # dotenv environment variable files
76
+ .env
77
+ .env.development.local
78
+ .env.test.local
79
+ .env.production.local
80
+ .env.local
81
+
82
+ # parcel-bundler cache (https://parceljs.org/)
83
+ .cache
84
+ .parcel-cache
85
+
86
+ # Next.js build output
87
+ .next
88
+ out
89
+
90
+ # Nuxt.js build / generate output
91
+ .nuxt
92
+ dist
93
+
94
+ # Gatsby files
95
+ .cache/
96
+ # Comment in the public line in if your project uses Gatsby and not Next.js
97
+ # https://nextjs.org/blog/next-9-1#public-directory-support
98
+ # public
99
+
100
+ # vuepress build output
101
+ .vuepress/dist
102
+
103
+ # vuepress v2.x temp and cache directory
104
+ .temp
105
+ .cache
106
+
107
+ # Docusaurus cache and generated files
108
+ .docusaurus
109
+
110
+ # Serverless directories
111
+ .serverless/
112
+
113
+ # FuseBox cache
114
+ .fusebox/
115
+
116
+ # DynamoDB Local files
117
+ .dynamodb/
118
+
119
+ # TernJS port file
120
+ .tern-port
121
+
122
+ # Stores VSCode versions used for testing VSCode extensions
123
+ .vscode-test
124
+
125
+ # yarn v2
126
+ .yarn/cache
127
+ .yarn/unplugged
128
+ .yarn/build-state.yml
129
+ .yarn/install-state.gz
130
+ .pnp.*
131
+
132
+ # Others
133
+ .DS_Store
134
+ .turbo
@@ -0,0 +1,8 @@
1
+ save-exact=true
2
+ public-hoist-pattern[]=*changesets*
3
+ public-hoist-pattern[]=*commitlint*
4
+ public-hoist-pattern[]=*eslint*
5
+ public-hoist-pattern[]=*prettier*
6
+ public-hoist-pattern[]=*turbo*
7
+ public-hoist-pattern[]=*typescript*
8
+ public-hoist-pattern[]=*types*
@@ -0,0 +1 @@
1
+ {{nodeVersion}}
@@ -0,0 +1,8 @@
1
+ {
2
+ "recommendations": [
3
+ "dbaeumer.vscode-eslint",
4
+ "unifiedjs.vscode-mdx",
5
+ "yoavbls.pretty-ts-errors",
6
+ "znck.grammarly"
7
+ ]
8
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "eslint.validate": [
3
+ "javascript",
4
+ "javascriptreact",
5
+ "typescript",
6
+ "typescriptreact",
7
+ "markdown",
8
+ "mdx",
9
+ "astro"
10
+ ],
11
+ "editor.codeActionsOnSave": {
12
+ "source.fixAll.eslint": "explicit"
13
+ },
14
+ "workbench.editor.labelFormat": "short",
15
+ "typescript.tsdk": "node_modules/typescript/lib",
16
+ "typescript.enablePromptUseWorkspaceTsdk": true,
17
+ "grammarly.selectors": [
18
+ {
19
+ "language": "mdx",
20
+ "scheme": "file"
21
+ },
22
+ {
23
+ "language": "md",
24
+ "scheme": "file"
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,21 @@
1
+ # Contributing
2
+
3
+ Thanks for showing interest to contribute to `{{projectName}}` 🥳.
4
+ We are open to contributions, we look forward to improving it with your help!
5
+
6
+ Here you will find guidelines that will help you to know how to contribute to this repository.
7
+ It can be about reporting an issue, proposing a bug fix, adding some features, and even more...
8
+
9
+ ## 🥇 Your first contribution
10
+
11
+ TODO
12
+
13
+ ## 🗂️ Conventions
14
+
15
+ TODO
16
+
17
+ ## 👨‍🍳 Recipes
18
+
19
+ ### How to XXX?
20
+
21
+ TODO
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) {{licenseYear}} Ayoub Adib
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ export { default } from "@adbayb/stack/eslint";
@@ -0,0 +1,6 @@
1
+ # Examples
2
+
3
+ A collection of examples to:
4
+
5
+ - Showcase the artifacts' usage (mainly for libraries)
6
+ - Source some scenarios for testing purposes (test cases)
@@ -0,0 +1,14 @@
1
+ {
2
+ "private": true,
3
+ "name": "@examples/default",
4
+ "version": "0.0.0",
5
+ "scripts": {
6
+ "start": "tsx ./src/index.ts"
7
+ },
8
+ "dependencies": {
9
+ "{{projectName}}": "workspace:^"
10
+ },
11
+ "devDependencies": {
12
+ "tsx": "4.19.1"
13
+ }
14
+ }
@@ -0,0 +1,3 @@
1
+ import { HELLO_WORLD } from "{{projectName}}";
2
+
3
+ console.log(HELLO_WORLD);
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": ["src"],
4
+ "exclude": ["node_modules", "dist"]
5
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "root",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "prepare": "stack install",
8
+ "clean": "stack clean",
9
+ "check": "stack check",
10
+ "fix": "stack fix",
11
+ "start": "stack start",
12
+ "build": "stack build",
13
+ "watch": "stack watch",
14
+ "test": "stack test",
15
+ "release:log": "stack release --log",
16
+ "release:version": "stack release --tag",
17
+ "release:publish": "stack release --publish"
18
+ },
19
+ "prettier": "@adbayb/stack/prettier",
20
+ "packageManager": "pnpm@{{npmVersion}}",
21
+ "engines": {
22
+ "node": ">=22.0.0",
23
+ "pnpm": ">=9.0.0",
24
+ "npm": "please-use-pnpm",
25
+ "yarn": "please-use-pnpm"
26
+ }
27
+ }
@@ -0,0 +1,4 @@
1
+ packages:
2
+ - "examples/*"
3
+ - "tools/*"
4
+ - "{{projectName}}"
@@ -0,0 +1,6 @@
1
+ # Tools
2
+
3
+ > [!note]
4
+ > Optional folder that can be removed if no internal scripts or packages for development purposes.
5
+
6
+ A collection of internal packages and scripts that act locally on the repository codebase.
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "@adbayb/stack/typescript",
3
+ "exclude": ["node_modules", "**/node_modules", "**/dist"]
4
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://turborepo.org/schema.json",
3
+ "tasks": {
4
+ "build": {
5
+ "dependsOn": ["^build"],
6
+ "cache": true,
7
+ "outputs": ["dist/**"]
8
+ },
9
+ "start": {
10
+ "dependsOn": ["build"],
11
+ "cache": false,
12
+ "persistent": true
13
+ },
14
+ "watch": {
15
+ "dependsOn": ["^build"],
16
+ "cache": false,
17
+ "persistent": true
18
+ },
19
+ "test": {
20
+ "dependsOn": ["build"],
21
+ "cache": false,
22
+ "persistent": true
23
+ }
24
+ }
25
+ }