Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b00b7468a1 | |||
| 166fa43a55 | |||
| c032870efb | |||
| 26f62830d9 | |||
| 88958232f2 | |||
| 5ddd93afcc | |||
| abe20e7d8c | |||
| 10517cadcd | |||
| d925019c58 | |||
| 1f27e91c94 | |||
| 219a04deec | |||
|
|
09498b6079 |
15
.editorconfig
Normal file
15
.editorconfig
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# EditorConfig is awesome: https://EditorConfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 140
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/.yarn/** linguist-vendored
|
||||||
|
/.yarn/releases/* binary
|
||||||
|
/.yarn/plugins/**/* binary
|
||||||
|
/.pnp.* binary linguist-generated
|
||||||
9
.github/workflows/build-lint-test.yaml
vendored
9
.github/workflows/build-lint-test.yaml
vendored
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
name: Build, Lint, and Test Project
|
name: Build, Lint, and Test Project
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -11,9 +15,6 @@ on:
|
|||||||
default: 'lts/*'
|
default: 'lts/*'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
name: Build, Lint, and Test Project
|
name: Build, Lint, and Test Project
|
||||||
@@ -26,7 +27,7 @@ jobs:
|
|||||||
- name: 🔧 Setup Node.js
|
- name: 🔧 Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ inputs.NODE_VERSION }}
|
node-version: ${{ inputs.node-version }}
|
||||||
|
|
||||||
- name: 🛠️ Setup Node.js Corepack
|
- name: 🛠️ Setup Node.js Corepack
|
||||||
run: corepack enable
|
run: corepack enable
|
||||||
|
|||||||
11
.github/workflows/codeql.yaml
vendored
11
.github/workflows/codeql.yaml
vendored
@@ -2,14 +2,15 @@
|
|||||||
|
|
||||||
name: CodeQL
|
name: CodeQL
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# actions: read
|
||||||
|
# contents: read
|
||||||
|
# security-events: write
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
name: CodeQL Analyze
|
name: CodeQL Analyze
|
||||||
|
|||||||
21
.github/workflows/dependency-review.yaml
vendored
21
.github/workflows/dependency-review.yaml
vendored
@@ -2,11 +2,23 @@
|
|||||||
|
|
||||||
name: Dependency Review
|
name: Dependency Review
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
|
inputs:
|
||||||
permissions:
|
base_ref:
|
||||||
contents: read
|
description: 'The base ref for the dependency review'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'next'
|
||||||
|
head_ref:
|
||||||
|
description: 'The head ref for the dependency review'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'next'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
@@ -19,3 +31,6 @@ jobs:
|
|||||||
|
|
||||||
- name: 🚀 Dependency Review
|
- name: 🚀 Dependency Review
|
||||||
uses: actions/dependency-review-action@v4
|
uses: actions/dependency-review-action@v4
|
||||||
|
with:
|
||||||
|
base-ref: ${{ inputs.base_ref }}
|
||||||
|
head-ref: ${{ inputs.head_ref }}
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
name: Publish NPM
|
name: Publish NPM
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# contents: read
|
||||||
|
# id-token: write
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -10,18 +15,16 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
default: 'lts/*'
|
default: 'lts/*'
|
||||||
type: string
|
type: string
|
||||||
|
npm-registry-url:
|
||||||
|
description: 'NPM registry url'
|
||||||
|
required: false
|
||||||
|
default: 'https://registry.npmjs.org'
|
||||||
|
type: string
|
||||||
secrets:
|
secrets:
|
||||||
NPM_TOKEN:
|
NPM_TOKEN:
|
||||||
required: true
|
required: true
|
||||||
description: 'NPM token'
|
description: 'NPM token'
|
||||||
|
|
||||||
env:
|
|
||||||
NODE_VERSION: lts/*
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
if: github.repository_owner == 'the-nexim'
|
if: github.repository_owner == 'the-nexim'
|
||||||
@@ -36,7 +39,8 @@ jobs:
|
|||||||
- name: 🔧 Setup Node.js
|
- name: 🔧 Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ inputs.NODE_VERSION }}
|
node-version: ${{ inputs.node-version }}
|
||||||
|
registry-url: ${{ inputs.npm-registry-url }}
|
||||||
|
|
||||||
- name: 🛠️ Setup Node.js Corepack
|
- name: 🛠️ Setup Node.js Corepack
|
||||||
run: corepack enable
|
run: corepack enable
|
||||||
@@ -60,11 +64,7 @@ jobs:
|
|||||||
run: yarn build
|
run: yarn build
|
||||||
env:
|
env:
|
||||||
WIREIT_LOGGER: metrics
|
WIREIT_LOGGER: metrics
|
||||||
|
NODE_ENV: production
|
||||||
- name: 🧹 Run ESLint
|
|
||||||
run: yarn lint
|
|
||||||
env:
|
|
||||||
WIREIT_LOGGER: metrics
|
|
||||||
|
|
||||||
- name: 🚀 Publish
|
- name: 🚀 Publish
|
||||||
run: yarn run publish -- --yes
|
run: yarn run publish -- --yes
|
||||||
21
.github/workflows/release.yaml
vendored
21
.github/workflows/release.yaml
vendored
@@ -2,28 +2,29 @@
|
|||||||
|
|
||||||
name: Build & Lint & Test & Release
|
name: Build & Lint & Test & Release
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# contents: write
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
NODE_VERSION:
|
node-version:
|
||||||
description: 'Node.js version'
|
description: 'Node.js version'
|
||||||
required: true
|
required: true
|
||||||
default: 'lts/*'
|
default: 'lts/*'
|
||||||
type: string
|
type: string
|
||||||
secrets:
|
secrets:
|
||||||
|
RELEASER_ACCOUNT_TOKEN:
|
||||||
|
required: true
|
||||||
|
description: 'GitHub token for the releaser account'
|
||||||
GPG_KEY_ID:
|
GPG_KEY_ID:
|
||||||
required: true
|
required: true
|
||||||
description: 'GPG key ID'
|
description: 'GPG key ID'
|
||||||
BOT_TOKEN:
|
|
||||||
required: true
|
|
||||||
description: 'Nexim Bot token'
|
|
||||||
GPG_PRIVATE_KEY:
|
GPG_PRIVATE_KEY:
|
||||||
required: true
|
required: true
|
||||||
description: 'GPG private key'
|
description: 'GPG private key'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
name: Build & Lint & Test & Release
|
name: Build & Lint & Test & Release
|
||||||
@@ -34,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.BOT_TOKEN }}
|
token: ${{ secrets.RELEASER_ACCOUNT_TOKEN }}
|
||||||
|
|
||||||
- name: 🙂↔️ Import GPG key
|
- name: 🙂↔️ Import GPG key
|
||||||
run: |
|
run: |
|
||||||
@@ -56,7 +57,7 @@ jobs:
|
|||||||
- name: 🔧 Setup Node.js
|
- name: 🔧 Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ inputs.NODE_VERSION }}
|
node-version: ${{ inputs.node-version }}
|
||||||
|
|
||||||
- name: 🛠️ Setup Node.js Corepack
|
- name: 🛠️ Setup Node.js Corepack
|
||||||
run: corepack enable
|
run: corepack enable
|
||||||
@@ -94,5 +95,5 @@ jobs:
|
|||||||
- name: 🤖 Get Release
|
- name: 🤖 Get Release
|
||||||
run: yarn lerna version --yes
|
run: yarn lerna version --yes
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.RELEASER_ACCOUNT_TOKEN }}
|
||||||
WIREIT_LOGGER: metrics
|
WIREIT_LOGGER: metrics
|
||||||
|
|||||||
@@ -1,17 +1,13 @@
|
|||||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||||
|
|
||||||
name: Sync labels
|
name: Sync labels
|
||||||
|
|
||||||
|
# Required permission on the caller workflow
|
||||||
|
# permissions:
|
||||||
|
# contents: read
|
||||||
|
# issues: write
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
secrets:
|
|
||||||
GITHUB_TOKEN:
|
|
||||||
description: "GitHub token"
|
|
||||||
required: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
44
.gitignore
vendored
Normal file
44
.gitignore
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Specifies intentionally untracked files to ignore when using Git
|
||||||
|
# http://git-scm.com/docs/gitignore
|
||||||
|
|
||||||
|
# OSX
|
||||||
|
.DS_STORE
|
||||||
|
.DS_Store
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
Thumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log*
|
||||||
|
|
||||||
|
# package managers
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/patches
|
||||||
|
!.yarn/plugins
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/sdks
|
||||||
|
!.yarn/versions
|
||||||
|
#!.yarn/cache
|
||||||
|
.pnp.*
|
||||||
|
node_modules
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
# Build
|
||||||
|
dist
|
||||||
|
*.tsbuildinfo
|
||||||
|
*.map
|
||||||
|
*.d.ts
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
|
||||||
|
.tmp
|
||||||
|
|
||||||
|
.wireit
|
||||||
|
|
||||||
|
.eslintcache
|
||||||
17
.vscode/extensions.json
vendored
Normal file
17
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"cardinal90.multi-cursor-case-preserve",
|
||||||
|
"christian-kohler.path-intellisense",
|
||||||
|
"davidanson.vscode-markdownlint",
|
||||||
|
"editorconfig.editorconfig",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"github.copilot-chat",
|
||||||
|
"github.vscode-github-actions",
|
||||||
|
"github.vscode-pull-request-github",
|
||||||
|
"streetsidesoftware.code-spell-checker-persian",
|
||||||
|
"streetsidesoftware.code-spell-checker",
|
||||||
|
"yzhang.markdown-all-in-one",
|
||||||
|
"gruntfuggly.todo-tree",
|
||||||
|
"arcanis.vscode-zipfs"
|
||||||
|
]
|
||||||
|
}
|
||||||
31
.vscode/settings.json
vendored
31
.vscode/settings.json
vendored
@@ -1,6 +1,35 @@
|
|||||||
{
|
{
|
||||||
"prettier.singleQuote": true,
|
"cSpell.language": "en,fa,fa-IR",
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll": "explicit"
|
||||||
|
},
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.formatOnPaste": false,
|
||||||
|
"editor.formatOnSave": false,
|
||||||
|
"editor.wordWrapColumn": 120,
|
||||||
|
"explorer.fileNesting.enabled": true,
|
||||||
|
"explorer.fileNesting.expand": false,
|
||||||
|
"git.autoStash": true,
|
||||||
|
"git.branchProtection": ["next"],
|
||||||
|
"githubPullRequests.ignoredPullRequestBranches": ["next"],
|
||||||
|
"npm.packageManager": "yarn",
|
||||||
|
"prettier.prettierPath": ".yarn/sdks/prettier/index.cjs",
|
||||||
|
"prettier.useEditorConfig": true,
|
||||||
|
"search.exclude": {
|
||||||
|
"**/.pnp.*": true,
|
||||||
|
"**/.yarn": true,
|
||||||
|
"**/*.lock": true
|
||||||
|
},
|
||||||
|
"typescript.enablePromptUseWorkspaceTsdk": true,
|
||||||
|
"typescript.tsdk": ".yarn/sdks/typescript/lib",
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
|
"nexim",
|
||||||
"wireit"
|
"wireit"
|
||||||
|
],
|
||||||
|
"todo-tree.tree.scanMode": "workspace only",
|
||||||
|
"github.copilot.chat.codeGeneration.instructions": [
|
||||||
|
{
|
||||||
|
"file": ".github/copilot-instruction.md"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
5
.yarn/sdks/integrations.yml
vendored
Normal file
5
.yarn/sdks/integrations.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# This file is automatically generated by @yarnpkg/sdks.
|
||||||
|
# Manual changes might be lost!
|
||||||
|
|
||||||
|
integrations:
|
||||||
|
- vscode
|
||||||
30
.yarn/sdks/prettier/bin/prettier.cjs
vendored
Executable file
30
.yarn/sdks/prettier/bin/prettier.cjs
vendored
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const { existsSync } = require(`fs`);
|
||||||
|
const { createRequire, register } = require(`module`);
|
||||||
|
const { resolve } = require(`path`);
|
||||||
|
const { pathToFileURL } = require(`url`);
|
||||||
|
|
||||||
|
const relPnpApiPath = '../../../../.pnp.cjs';
|
||||||
|
|
||||||
|
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
|
||||||
|
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
|
||||||
|
const absRequire = createRequire(absPnpApiPath);
|
||||||
|
|
||||||
|
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
|
||||||
|
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
|
||||||
|
|
||||||
|
if (existsSync(absPnpApiPath)) {
|
||||||
|
if (!process.versions.pnp) {
|
||||||
|
// Setup the environment to be able to require prettier/bin/prettier.cjs
|
||||||
|
require(absPnpApiPath).setup();
|
||||||
|
if (isPnpLoaderEnabled && register) {
|
||||||
|
register(pathToFileURL(absPnpLoaderPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const wrapWithUserWrapper = existsSync(absUserWrapperPath) ? (exports) => absRequire(absUserWrapperPath)(exports) : (exports) => exports;
|
||||||
|
|
||||||
|
// Defer to the real prettier/bin/prettier.cjs your application uses
|
||||||
|
module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`));
|
||||||
30
.yarn/sdks/prettier/index.cjs
vendored
Normal file
30
.yarn/sdks/prettier/index.cjs
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const { existsSync } = require(`fs`);
|
||||||
|
const { createRequire, register } = require(`module`);
|
||||||
|
const { resolve } = require(`path`);
|
||||||
|
const { pathToFileURL } = require(`url`);
|
||||||
|
|
||||||
|
const relPnpApiPath = '../../../.pnp.cjs';
|
||||||
|
|
||||||
|
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
|
||||||
|
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
|
||||||
|
const absRequire = createRequire(absPnpApiPath);
|
||||||
|
|
||||||
|
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
|
||||||
|
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
|
||||||
|
|
||||||
|
if (existsSync(absPnpApiPath)) {
|
||||||
|
if (!process.versions.pnp) {
|
||||||
|
// Setup the environment to be able to require prettier
|
||||||
|
require(absPnpApiPath).setup();
|
||||||
|
if (isPnpLoaderEnabled && register) {
|
||||||
|
register(pathToFileURL(absPnpLoaderPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const wrapWithUserWrapper = existsSync(absUserWrapperPath) ? (exports) => absRequire(absUserWrapperPath)(exports) : (exports) => exports;
|
||||||
|
|
||||||
|
// Defer to the real prettier your application uses
|
||||||
|
module.exports = wrapWithUserWrapper(absRequire(`prettier`));
|
||||||
7
.yarn/sdks/prettier/package.json
vendored
Normal file
7
.yarn/sdks/prettier/package.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "prettier",
|
||||||
|
"version": "3.4.2-sdk",
|
||||||
|
"main": "./index.cjs",
|
||||||
|
"type": "commonjs",
|
||||||
|
"bin": "./bin/prettier.cjs"
|
||||||
|
}
|
||||||
3
.yarnrc.yml
Normal file
3
.yarnrc.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
enableTelemetry: false
|
||||||
|
|
||||||
|
preferInteractive: true
|
||||||
12
package.json
Normal file
12
package.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "@nexim/actions",
|
||||||
|
"packageManager": "yarn@4.6.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"format": "prettier . --write",
|
||||||
|
"upd": "yarn set version latest && yarn up '*' && yarn up '*' -R && yarn dlx @yarnpkg/sdks vscode && yarn dedupe"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"prettier": "^3.4.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
8
prettier.config.js
Normal file
8
prettier.config.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* @type {import('prettier').Options}
|
||||||
|
*/
|
||||||
|
const config = {
|
||||||
|
singleQuote: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
23
yarn.lock
Normal file
23
yarn.lock
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# This file is generated by running "yarn install" inside your project.
|
||||||
|
# Manual changes might be lost - proceed with caution!
|
||||||
|
|
||||||
|
__metadata:
|
||||||
|
version: 8
|
||||||
|
cacheKey: 10c0
|
||||||
|
|
||||||
|
"@nexim/actions@workspace:.":
|
||||||
|
version: 0.0.0-use.local
|
||||||
|
resolution: "@nexim/actions@workspace:."
|
||||||
|
dependencies:
|
||||||
|
prettier: "npm:^3.4.2"
|
||||||
|
languageName: unknown
|
||||||
|
linkType: soft
|
||||||
|
|
||||||
|
"prettier@npm:^3.4.2":
|
||||||
|
version: 3.4.2
|
||||||
|
resolution: "prettier@npm:3.4.2"
|
||||||
|
bin:
|
||||||
|
prettier: bin/prettier.cjs
|
||||||
|
checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
Reference in New Issue
Block a user