zotero-plugin 7.0.7 → 7.0.8
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/dist/cjs/bin/branches.cjs +1 -0
- package/dist/cjs/bin/branches.cjs.map +1 -1
- package/dist/cjs/bin/fetch-log.cjs +1 -0
- package/dist/cjs/bin/fetch-log.cjs.map +1 -1
- package/dist/cjs/bin/find-root.cjs +1 -0
- package/dist/cjs/bin/find-root.cjs.map +1 -1
- package/dist/cjs/bin/link.cjs +1 -0
- package/dist/cjs/bin/link.cjs.map +1 -1
- package/dist/cjs/bin/make-dirs.cjs +1 -0
- package/dist/cjs/bin/make-dirs.cjs.map +1 -1
- package/dist/cjs/bin/make-manifest.cjs +7 -5
- package/dist/cjs/bin/make-manifest.cjs.map +1 -1
- package/dist/cjs/bin/release.cjs +7 -5
- package/dist/cjs/bin/release.cjs.map +1 -1
- package/dist/cjs/bin/version.cjs +7 -5
- package/dist/cjs/bin/version.cjs.map +1 -1
- package/dist/cjs/bin/zipup.cjs +7 -5
- package/dist/cjs/bin/zipup.cjs.map +1 -1
- package/dist/cjs/debug-log.cjs +1 -1
- package/dist/cjs/debug-log.cjs.map +1 -1
- package/dist/esm/bin/branches.js +1 -0
- package/dist/esm/bin/branches.js.map +1 -1
- package/dist/esm/bin/fetch-log.js +1 -0
- package/dist/esm/bin/fetch-log.js.map +1 -1
- package/dist/esm/bin/find-root.js +1 -0
- package/dist/esm/bin/find-root.js.map +1 -1
- package/dist/esm/bin/link.js +1 -0
- package/dist/esm/bin/link.js.map +1 -1
- package/dist/esm/bin/make-dirs.js +1 -0
- package/dist/esm/bin/make-dirs.js.map +1 -1
- package/dist/esm/bin/make-manifest.js +7 -5
- package/dist/esm/bin/make-manifest.js.map +1 -1
- package/dist/esm/bin/release.js +7 -5
- package/dist/esm/bin/release.js.map +1 -1
- package/dist/esm/bin/version.js +7 -5
- package/dist/esm/bin/version.js.map +1 -1
- package/dist/esm/bin/zipup.js +7 -5
- package/dist/esm/bin/zipup.js.map +1 -1
- package/dist/esm/debug-log.js +1 -1
- package/dist/esm/debug-log.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,6 +32,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
32
32
|
var folders = process.cwd().split(import_path.default.sep);
|
|
33
33
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
34
34
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
35
|
+
console.log("project directory:", root);
|
|
35
36
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
36
37
|
|
|
37
38
|
// bin/branches.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/branches.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable no-console, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nprocess.on('unhandledRejection', up => {\n throw up\n})\n\nimport 'dotenv/config'\nimport * as path from 'path'\n\nimport { Octokit } from '@octokit/rest'\nconst octokit = new Octokit({ auth: `token ${process.env.GITHUB_TOKEN}` })\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nconst [, owner, repo] = pkg.repository.url.match(/:\\/\\/github.com\\/([^/]+)\\/([^.]+)\\.git$/)\n\nasync function main() {\n const branches = await octokit.repos.listBranches({ owner, repo })\n\n for (const branch of branches.data) {\n if (/^[0-9]+$/.exec(branch.name)) {\n const issue = await octokit.issues.get({ owner, repo, issue_number: parseInt(branch.name) })\n if (issue.data.state !== 'open') console.log(branch.name, issue.data.state) // eslint-disable-line no-console\n }\n else if (!['master', 'main', 'gh-pages'].includes(branch.name)) {\n console.log(branch.name)\n }\n }\n}\n\nmain().catch(err => console.log(err))\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oBAAO;AAGP,kBAAwB;;;ACXxB,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAA,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/branches.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable no-console, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nprocess.on('unhandledRejection', up => {\n throw up\n})\n\nimport 'dotenv/config'\nimport * as path from 'path'\n\nimport { Octokit } from '@octokit/rest'\nconst octokit = new Octokit({ auth: `token ${process.env.GITHUB_TOKEN}` })\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nconst [, owner, repo] = pkg.repository.url.match(/:\\/\\/github.com\\/([^/]+)\\/([^.]+)\\.git$/)\n\nasync function main() {\n const branches = await octokit.repos.listBranches({ owner, repo })\n\n for (const branch of branches.data) {\n if (/^[0-9]+$/.exec(branch.name)) {\n const issue = await octokit.issues.get({ owner, repo, issue_number: parseInt(branch.name) })\n if (issue.data.state !== 'open') console.log(branch.name, issue.data.state) // eslint-disable-line no-console\n }\n else if (!['master', 'main', 'gh-pages'].includes(branch.name)) {\n console.log(branch.name)\n }\n }\n}\n\nmain().catch(err => console.log(err))\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oBAAO;AAGP,kBAAwB;;;ACXxB,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAA,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;AAC7F,QAAQ,IAAI,sBAAsB,IAAI;AAE/B,IAAM,MAAM,KAAK,MAAM,UAAAC,QAAG,aAAa,YAAAD,QAAK,KAAK,MAAM,cAAc,GAAG,OAAO,CAAC;;;ADJvF,QAAQ,GAAG,sBAAsB,QAAM;AACrC,QAAM;AACR,CAAC;AAMD,IAAM,UAAU,IAAI,oBAAQ,EAAE,MAAM,SAAS,QAAQ,IAAI,YAAY,GAAG,CAAC;AAKzE,IAAM,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,WAAW,IAAI,MAAM,yCAAyC;AAE1F,eAAe,OAAO;AACpB,QAAM,WAAW,MAAM,QAAQ,MAAM,aAAa,EAAE,OAAO,KAAK,CAAC;AAEjE,aAAW,UAAU,SAAS,MAAM;AAClC,QAAI,WAAW,KAAK,OAAO,IAAI,GAAG;AAChC,YAAM,QAAQ,MAAM,QAAQ,OAAO,IAAI,EAAE,OAAO,MAAM,cAAc,SAAS,OAAO,IAAI,EAAE,CAAC;AAC3F,UAAI,MAAM,KAAK,UAAU,OAAQ,SAAQ,IAAI,OAAO,MAAM,MAAM,KAAK,KAAK;AAAA,IAC5E,WACS,CAAC,CAAC,UAAU,QAAQ,UAAU,EAAE,SAAS,OAAO,IAAI,GAAG;AAC9D,cAAQ,IAAI,OAAO,IAAI;AAAA,IACzB;AAAA,EACF;AACF;AAEA,KAAK,EAAE,MAAM,SAAO,QAAQ,IAAI,GAAG,CAAC;","names":["path","fs"]}
|
|
@@ -39,6 +39,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
39
39
|
var folders = process.cwd().split(import_path.default.sep);
|
|
40
40
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
41
41
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
42
|
+
console.log("project directory:", root);
|
|
42
43
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
43
44
|
|
|
44
45
|
// bin/crypto.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/fetch-log.ts","../../../bin/find-root.ts","../../../bin/crypto.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport crypto from 'crypto'\nimport fs from 'fs'\nimport StreamZip from 'node-stream-zip'\nimport { Readable } from 'node:stream'\nimport { finished } from 'node:stream/promises'\nimport path from 'path'\n\nimport { Entry as KeyRingEntry } from '@napi-rs/keyring'\nimport prompts from 'prompts'\n\n// @ts-expect-error TS2835\nimport { pkg } from './find-root'\n// @ts-expect-error TS2835\nimport { decrypt } from './crypto'\n\nasync function getPassphrase(service, account): Promise<string> {\n const entry = new KeyRingEntry(service, account)\n let passphrase = entry.getPassword()\n if (!passphrase) {\n const response = await prompts({\n type: 'password',\n name: 'passphrase',\n message: `Enter a passphrase to decrypt your private key for ${service} ${account}:`,\n })\n entry.setPassword(passphrase = response.passphrase)\n }\n return passphrase\n}\n\nconst oops = (...args) => {\n console.error(...args)\n process.exit(1)\n}\n\nconst program = new Command()\nprogram\n .description('A script to generate and store an RSA key pair in an encrypted file.')\n .option('-p, --private <path>', 'Path for the encrypted private key .pem.json file', 'private.pem.json')\n .argument('<debug log id>', 'debug log ID to fetch')\n .parse(process.argv)\nconst options = program.opts()\nconst args = program.args\n\nif (!args.length) oops('No log ID')\n\nlet m = args[0].match(/^(?<key>[a-z0-9]+)-(?<host>[^-]+)-(?<remote>[^.]+)(?<tags>.*)$/i)\nif (!m) oops(args[0], 'is not a valid log ID')\n\nif (m.groups.host !== '0x0') oops('Unexpected debug log host', m.groups.host)\n\noptions.encrypted = m.groups.tags.split('.').includes('enc')\noptions.zip = path.join('logs', `${m.groups.key}.zip`)\noptions.url = `https://0x0.st/${m.groups.remote}.zip`\n\nif (options.encrypted) {\n if (!options.private) oops('No private key provided')\n if (!fs.existsSync(options.private)) oops('Private key', options.private, 'does not exist')\n if (!fs.existsSync('package.json')) oops('package.json does not exist in the current directory')\n}\n\nconst logs = path.join('logs', m.groups!.key)\nconsole.log(options.url, '=>', logs)\nif (!fs.existsSync(logs)) {\n fs.mkdirSync(logs, { recursive: true })\n}\n\nasync function main() {\n try {\n const response = await fetch(options.url, {\n method: 'GET',\n headers: {\n 'User-Agent': `Zotero plugin log fetcher ${pkg.version}`,\n Accept: '*/*',\n },\n })\n if (!response.ok) oops(`Failed to download: ${response.statusText}`)\n\n const readable = Readable.fromWeb(response.body as any)\n const download = fs.createWriteStream(options.zip)\n await finished(readable.pipe(download))\n\n let privateKey\n if (options.encrypted) {\n const passphrase = await getPassphrase(`${pkg.name} Zotero plugin`, 'debug-log')\n privateKey = decrypt(JSON.parse(fs.readFileSync(options.private, 'utf-8')), passphrase)\n }\n\n const zipfile = new StreamZip.async({ file: options.zip })\n let decryptionKey: Buffer\n const fileEntries: Record<string, { filename: string; contents?: string; iv?: string; encrypted?: boolean }> = {}\n for (const entry of Object.values(await zipfile.entries())) {\n if (entry.isDirectory) continue\n\n const m = entry.name.match(/(?<filename>.+)\\.(?<type>key|enc|iv)$/i)\n let filename = m?.groups!.filename || entry.name\n const type = (m?.groups!.type || '').toLowerCase()\n\n if (type && !options.encrypted) oops('unexpected', type, 'file in non-encrypted log')\n\n if (type === 'key') {\n decryptionKey = crypto.privateDecrypt({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,\n oaepHash: 'sha256',\n }, await zipfile.entryData(entry.name))\n }\n else {\n const key = filename.toLowerCase()\n const f = fileEntries[key] = fileEntries[key] || { filename }\n f[type === 'iv' ? 'iv' : 'contents'] = entry.name\n if (type) f.encrypted = true\n }\n }\n\n if (options.encrypted && !decryptionKey) oops('no key file found')\n\n for (const entry of Object.values(fileEntries)) {\n if (!entry.contents) oops('no contents for', entry.filename)\n if (entry.encrypted && !entry.iv) oops('no iv for', entry.filename)\n\n const data = await zipfile.entryData(entry.contents)\n const target = path.join('logs', entry.filename)\n\n if (entry.iv) {\n const iv = await zipfile.entryData(entry.iv)\n const tag = data.slice(-16)\n const ciphertext = data.slice(0, -16)\n const decipher = crypto.createDecipheriv('aes-256-gcm', decryptionKey, iv)\n decipher.setAuthTag(tag)\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()])\n fs.writeFileSync(target, decrypted)\n }\n else {\n fs.writeFileSync(target, data)\n }\n }\n }\n finally {\n if (fs.existsSync(options.zip)) fs.unlinkSync(options.zip)\n }\n}\n\nmain().catch(err => {\n oops(err.message)\n})\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","import crypto from 'crypto'\n\nexport type Encrypted = {\n ciphertext: string\n iv: string\n tag: string\n salt: string\n iterations: number\n keyLength: number\n algorithm: 'aes-256-gcm'\n}\n\nexport function encrypt(plaintext: string, passphrase: string): Encrypted {\n const salt = crypto.randomBytes(16)\n const iterations = 100000\n const keyLength = 32\n const algorithm = 'aes-256-gcm'\n\n const key = crypto.pbkdf2Sync(passphrase, salt, iterations, keyLength, 'sha256')\n const iv = crypto.randomBytes(12)\n\n const cipher = crypto.createCipheriv(algorithm, key, iv)\n\n let ciphertext = cipher.update(plaintext, 'utf8', 'base64')\n ciphertext += cipher.final('base64')\n\n const tag = cipher.getAuthTag()\n\n return {\n ciphertext,\n iv: iv.toString('base64'),\n tag: tag.toString('base64'),\n salt: salt.toString('base64'),\n iterations,\n keyLength,\n algorithm,\n }\n}\n\nexport function decrypt({ ciphertext, iv, tag, salt, iterations, keyLength, algorithm }: Encrypted, passphrase: string): string {\n const key = crypto.pbkdf2Sync(passphrase, Buffer.from(salt, 'base64'), iterations, keyLength, 'sha256')\n const decipher = crypto.createDecipheriv(algorithm, key, Buffer.from(iv, 'base64'))\n decipher.setAuthTag(Buffer.from(tag, 'base64'))\n let decrypted = decipher.update(ciphertext, 'base64', 'utf8')\n decrypted += decipher.final('utf8')\n return decrypted\n}\n"],"mappings":"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","names":["import_crypto","import_fs","import_path","path","fs","crypto","KeyRingEntry","prompts","args","path","fs","StreamZip","m","crypto"]}
|
|
1
|
+
{"version":3,"sources":["../../../bin/fetch-log.ts","../../../bin/find-root.ts","../../../bin/crypto.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport crypto from 'crypto'\nimport fs from 'fs'\nimport StreamZip from 'node-stream-zip'\nimport { Readable } from 'node:stream'\nimport { finished } from 'node:stream/promises'\nimport path from 'path'\n\nimport { Entry as KeyRingEntry } from '@napi-rs/keyring'\nimport prompts from 'prompts'\n\n// @ts-expect-error TS2835\nimport { pkg } from './find-root'\n// @ts-expect-error TS2835\nimport { decrypt } from './crypto'\n\nasync function getPassphrase(service, account): Promise<string> {\n const entry = new KeyRingEntry(service, account)\n let passphrase = entry.getPassword()\n if (!passphrase) {\n const response = await prompts({\n type: 'password',\n name: 'passphrase',\n message: `Enter a passphrase to decrypt your private key for ${service} ${account}:`,\n })\n entry.setPassword(passphrase = response.passphrase)\n }\n return passphrase\n}\n\nconst oops = (...args) => {\n console.error(...args)\n process.exit(1)\n}\n\nconst program = new Command()\nprogram\n .description('A script to generate and store an RSA key pair in an encrypted file.')\n .option('-p, --private <path>', 'Path for the encrypted private key .pem.json file', 'private.pem.json')\n .argument('<debug log id>', 'debug log ID to fetch')\n .parse(process.argv)\nconst options = program.opts()\nconst args = program.args\n\nif (!args.length) oops('No log ID')\n\nlet m = args[0].match(/^(?<key>[a-z0-9]+)-(?<host>[^-]+)-(?<remote>[^.]+)(?<tags>.*)$/i)\nif (!m) oops(args[0], 'is not a valid log ID')\n\nif (m.groups.host !== '0x0') oops('Unexpected debug log host', m.groups.host)\n\noptions.encrypted = m.groups.tags.split('.').includes('enc')\noptions.zip = path.join('logs', `${m.groups.key}.zip`)\noptions.url = `https://0x0.st/${m.groups.remote}.zip`\n\nif (options.encrypted) {\n if (!options.private) oops('No private key provided')\n if (!fs.existsSync(options.private)) oops('Private key', options.private, 'does not exist')\n if (!fs.existsSync('package.json')) oops('package.json does not exist in the current directory')\n}\n\nconst logs = path.join('logs', m.groups!.key)\nconsole.log(options.url, '=>', logs)\nif (!fs.existsSync(logs)) {\n fs.mkdirSync(logs, { recursive: true })\n}\n\nasync function main() {\n try {\n const response = await fetch(options.url, {\n method: 'GET',\n headers: {\n 'User-Agent': `Zotero plugin log fetcher ${pkg.version}`,\n Accept: '*/*',\n },\n })\n if (!response.ok) oops(`Failed to download: ${response.statusText}`)\n\n const readable = Readable.fromWeb(response.body as any)\n const download = fs.createWriteStream(options.zip)\n await finished(readable.pipe(download))\n\n let privateKey\n if (options.encrypted) {\n const passphrase = await getPassphrase(`${pkg.name} Zotero plugin`, 'debug-log')\n privateKey = decrypt(JSON.parse(fs.readFileSync(options.private, 'utf-8')), passphrase)\n }\n\n const zipfile = new StreamZip.async({ file: options.zip })\n let decryptionKey: Buffer\n const fileEntries: Record<string, { filename: string; contents?: string; iv?: string; encrypted?: boolean }> = {}\n for (const entry of Object.values(await zipfile.entries())) {\n if (entry.isDirectory) continue\n\n const m = entry.name.match(/(?<filename>.+)\\.(?<type>key|enc|iv)$/i)\n let filename = m?.groups!.filename || entry.name\n const type = (m?.groups!.type || '').toLowerCase()\n\n if (type && !options.encrypted) oops('unexpected', type, 'file in non-encrypted log')\n\n if (type === 'key') {\n decryptionKey = crypto.privateDecrypt({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,\n oaepHash: 'sha256',\n }, await zipfile.entryData(entry.name))\n }\n else {\n const key = filename.toLowerCase()\n const f = fileEntries[key] = fileEntries[key] || { filename }\n f[type === 'iv' ? 'iv' : 'contents'] = entry.name\n if (type) f.encrypted = true\n }\n }\n\n if (options.encrypted && !decryptionKey) oops('no key file found')\n\n for (const entry of Object.values(fileEntries)) {\n if (!entry.contents) oops('no contents for', entry.filename)\n if (entry.encrypted && !entry.iv) oops('no iv for', entry.filename)\n\n const data = await zipfile.entryData(entry.contents)\n const target = path.join('logs', entry.filename)\n\n if (entry.iv) {\n const iv = await zipfile.entryData(entry.iv)\n const tag = data.slice(-16)\n const ciphertext = data.slice(0, -16)\n const decipher = crypto.createDecipheriv('aes-256-gcm', decryptionKey, iv)\n decipher.setAuthTag(tag)\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()])\n fs.writeFileSync(target, decrypted)\n }\n else {\n fs.writeFileSync(target, data)\n }\n }\n }\n finally {\n if (fs.existsSync(options.zip)) fs.unlinkSync(options.zip)\n }\n}\n\nmain().catch(err => {\n oops(err.message)\n})\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","import crypto from 'crypto'\n\nexport type Encrypted = {\n ciphertext: string\n iv: string\n tag: string\n salt: string\n iterations: number\n keyLength: number\n algorithm: 'aes-256-gcm'\n}\n\nexport function encrypt(plaintext: string, passphrase: string): Encrypted {\n const salt = crypto.randomBytes(16)\n const iterations = 100000\n const keyLength = 32\n const algorithm = 'aes-256-gcm'\n\n const key = crypto.pbkdf2Sync(passphrase, salt, iterations, keyLength, 'sha256')\n const iv = crypto.randomBytes(12)\n\n const cipher = crypto.createCipheriv(algorithm, key, iv)\n\n let ciphertext = cipher.update(plaintext, 'utf8', 'base64')\n ciphertext += cipher.final('base64')\n\n const tag = cipher.getAuthTag()\n\n return {\n ciphertext,\n iv: iv.toString('base64'),\n tag: tag.toString('base64'),\n salt: salt.toString('base64'),\n iterations,\n keyLength,\n algorithm,\n }\n}\n\nexport function decrypt({ ciphertext, iv, tag, salt, iterations, keyLength, algorithm }: Encrypted, passphrase: string): string {\n const key = crypto.pbkdf2Sync(passphrase, Buffer.from(salt, 'base64'), iterations, keyLength, 'sha256')\n const decipher = crypto.createDecipheriv(algorithm, key, Buffer.from(iv, 'base64'))\n decipher.setAuthTag(Buffer.from(tag, 'base64'))\n let decrypted = decipher.update(ciphertext, 'base64', 'utf8')\n decrypted += decipher.final('utf8')\n return decrypted\n}\n"],"mappings":"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","names":["import_crypto","import_fs","import_path","path","fs","crypto","KeyRingEntry","prompts","args","path","fs","StreamZip","m","crypto"]}
|
|
@@ -38,6 +38,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
38
38
|
var folders = process.cwd().split(import_path.default.sep);
|
|
39
39
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
40
40
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
41
|
+
console.log("project directory:", root);
|
|
41
42
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
42
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
43
44
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/find-root.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAA,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/find-root.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAA,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;AAC7F,QAAQ,IAAI,sBAAsB,IAAI;AAE/B,IAAM,MAAM,KAAK,MAAM,UAAAC,QAAG,aAAa,YAAAD,QAAK,KAAK,MAAM,cAAc,GAAG,OAAO,CAAC;","names":["path","fs"]}
|
package/dist/cjs/bin/link.cjs
CHANGED
|
@@ -32,6 +32,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
32
32
|
var folders = process.cwd().split(import_path.default.sep);
|
|
33
33
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
34
34
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
35
|
+
console.log("project directory:", root);
|
|
35
36
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
36
37
|
|
|
37
38
|
// bin/link.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/link.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nif (!pkg.id) pkg.id = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\nconst build = path.join(root, 'build')\n\nconst zotero = process.argv[2]\n\nif (!zotero) {\n console.log('No directory specified') // eslint-disable-line no-console\n process.exit(1)\n}\n\nconst extensions = path.join(zotero, 'extensions')\nif (!fs.existsSync(extensions)) {\n console.log(`${extensions} does not exist`) // eslint-disable-line no-console\n process.exit(1)\n}\n\nconst extension = path.join(extensions, pkg.id)\n\nfs.writeFileSync(extension, build)\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,MAAoB;AACpB,IAAAC,QAAsB;;;ACLtB,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/link.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nif (!pkg.id) pkg.id = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\nconst build = path.join(root, 'build')\n\nconst zotero = process.argv[2]\n\nif (!zotero) {\n console.log('No directory specified') // eslint-disable-line no-console\n process.exit(1)\n}\n\nconst extensions = path.join(zotero, 'extensions')\nif (!fs.existsSync(extensions)) {\n console.log(`${extensions} does not exist`) // eslint-disable-line no-console\n process.exit(1)\n}\n\nconst extension = path.join(extensions, pkg.id)\n\nfs.writeFileSync(extension, build)\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,MAAoB;AACpB,IAAAC,QAAsB;;;ACLtB,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;AAC7F,QAAQ,IAAI,sBAAsB,IAAI;AAE/B,IAAM,MAAM,KAAK,MAAM,UAAAC,QAAG,aAAa,YAAAD,QAAK,KAAK,MAAM,cAAc,GAAG,OAAO,CAAC;;;ADEvF,IAAI,CAAC,IAAI,GAAI,KAAI,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,OAAO,MAAM,QAAQ,OAAO,EAAE,CAAC,GAAG,YAAY;AACvF,IAAI,IAAI,IAAK,QAAO,OAAO,KAAK,IAAI,GAAG;AAEvC,IAAM,QAAa,WAAK,MAAM,OAAO;AAErC,IAAM,SAAS,QAAQ,KAAK,CAAC;AAE7B,IAAI,CAAC,QAAQ;AACX,UAAQ,IAAI,wBAAwB;AACpC,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,aAAkB,WAAK,QAAQ,YAAY;AACjD,IAAI,CAAI,eAAW,UAAU,GAAG;AAC9B,UAAQ,IAAI,GAAG,UAAU,iBAAiB;AAC1C,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,YAAiB,WAAK,YAAY,IAAI,EAAE;AAE3C,kBAAc,WAAW,KAAK;","names":["fs","path","path","fs"]}
|
|
@@ -32,6 +32,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
32
32
|
var folders = process.cwd().split(import_path.default.sep);
|
|
33
33
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
34
34
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
35
|
+
console.log("project directory:", root);
|
|
35
36
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
36
37
|
|
|
37
38
|
// bin/make-dirs.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/make-dirs.ts","../../../bin/find-root.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { rimrafSync } from 'rimraf'\n\n// @ts-expect-error TS2835\nimport { root } from './find-root'\n\nconsole.log('make build dirs')\nfor (const dir of [path.join(root, 'build'), path.join(root, 'gen'), path.join(root, 'xpi')]) {\n rimrafSync(dir)\n fs.mkdirSync(dir)\n}\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,MAAoB;AACpB,IAAAC,QAAsB;AACtB,oBAA2B;;;ACJ3B,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/make-dirs.ts","../../../bin/find-root.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { rimrafSync } from 'rimraf'\n\n// @ts-expect-error TS2835\nimport { root } from './find-root'\n\nconsole.log('make build dirs')\nfor (const dir of [path.join(root, 'build'), path.join(root, 'gen'), path.join(root, 'xpi')]) {\n rimrafSync(dir)\n fs.mkdirSync(dir)\n}\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,MAAoB;AACpB,IAAAC,QAAsB;AACtB,oBAA2B;;;ACJ3B,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;AAC7F,QAAQ,IAAI,sBAAsB,IAAI;AAE/B,IAAM,MAAM,KAAK,MAAM,UAAAC,QAAG,aAAa,YAAAD,QAAK,KAAK,MAAM,cAAc,GAAG,OAAO,CAAC;;;ADCvF,QAAQ,IAAI,iBAAiB;AAC7B,WAAW,OAAO,CAAM,WAAK,MAAM,OAAO,GAAQ,WAAK,MAAM,KAAK,GAAQ,WAAK,MAAM,KAAK,CAAC,GAAG;AAC5F,gCAAW,GAAG;AACd,EAAG,cAAU,GAAG;AAClB;","names":["fs","path","path","fs"]}
|
|
@@ -34,6 +34,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
34
34
|
var folders = process.cwd().split(import_path.default.sep);
|
|
35
35
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
36
36
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
37
|
+
console.log("project directory:", root);
|
|
37
38
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
38
39
|
|
|
39
40
|
// bin/version.ts
|
|
@@ -96,17 +97,18 @@ var ContinuousIntegration = new ContinuousIntegrationSingleton();
|
|
|
96
97
|
|
|
97
98
|
// bin/version.ts
|
|
98
99
|
function version() {
|
|
99
|
-
let
|
|
100
|
+
let $version = pkg.version;
|
|
100
101
|
if (ContinuousIntegration.service && !ContinuousIntegration.tag) {
|
|
101
102
|
const issue = ContinuousIntegration.issue && process.env.VERSION_WITH_ISSUE !== "false" ? `.${ContinuousIntegration.issue}` : "";
|
|
102
|
-
|
|
103
|
+
$version = `${$version}${issue}.${ContinuousIntegration.build_number}`;
|
|
103
104
|
} else if (!ContinuousIntegration.service) {
|
|
104
|
-
|
|
105
|
+
$version = `${$version}.${import_os.default.userInfo().username}.${import_os.default.hostname()}`;
|
|
105
106
|
}
|
|
106
107
|
const version_module = import_path2.default.join(root, "gen", "version.cjs");
|
|
107
108
|
if (!import_fs2.default.existsSync(import_path2.default.dirname(version_module))) import_fs2.default.mkdirSync(import_path2.default.dirname(version_module));
|
|
108
|
-
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(
|
|
109
|
-
|
|
109
|
+
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`);
|
|
110
|
+
console.log("written version", $version, "to", version_module);
|
|
111
|
+
return $version;
|
|
110
112
|
}
|
|
111
113
|
version();
|
|
112
114
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.0', maxVersion: '8.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n trict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n version = `${version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n version = `${version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(version)} }`)\n return version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","path","fs","import_fs","import_path","version","os","path","fs","glob","msg","attr","basename"]}
|
|
1
|
+
{"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.0', maxVersion: '8.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n trict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n $version = `${$version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","path","fs","import_fs","import_path","os","path","fs","glob","msg","attr","basename"]}
|
package/dist/cjs/bin/release.cjs
CHANGED
|
@@ -90,6 +90,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
90
90
|
var folders = process.cwd().split(import_path.default.sep);
|
|
91
91
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
92
92
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
93
|
+
console.log("project directory:", root);
|
|
93
94
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
94
95
|
|
|
95
96
|
// bin/version.ts
|
|
@@ -97,17 +98,18 @@ var import_fs2 = __toESM(require("fs"), 1);
|
|
|
97
98
|
var import_os = __toESM(require("os"), 1);
|
|
98
99
|
var import_path2 = __toESM(require("path"), 1);
|
|
99
100
|
function version() {
|
|
100
|
-
let
|
|
101
|
+
let $version = pkg.version;
|
|
101
102
|
if (ContinuousIntegration.service && !ContinuousIntegration.tag) {
|
|
102
103
|
const issue = ContinuousIntegration.issue && process.env.VERSION_WITH_ISSUE !== "false" ? `.${ContinuousIntegration.issue}` : "";
|
|
103
|
-
|
|
104
|
+
$version = `${$version}${issue}.${ContinuousIntegration.build_number}`;
|
|
104
105
|
} else if (!ContinuousIntegration.service) {
|
|
105
|
-
|
|
106
|
+
$version = `${$version}.${import_os.default.userInfo().username}.${import_os.default.hostname()}`;
|
|
106
107
|
}
|
|
107
108
|
const version_module = import_path2.default.join(root, "gen", "version.cjs");
|
|
108
109
|
if (!import_fs2.default.existsSync(import_path2.default.dirname(version_module))) import_fs2.default.mkdirSync(import_path2.default.dirname(version_module));
|
|
109
|
-
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(
|
|
110
|
-
|
|
110
|
+
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`);
|
|
111
|
+
console.log("written version", $version, "to", version_module);
|
|
112
|
+
return $version;
|
|
111
113
|
}
|
|
112
114
|
version();
|
|
113
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/release.ts","../../../bin/continuous-integration.ts","../../../bin/find-root.ts","../../../bin/version.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument, no-console, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/restrict-template-expressions */\n\nprocess.on('unhandledRejection', up => {\n throw up\n})\n\nimport 'dotenv/config'\nimport { execSync } from 'child_process'\nimport { program } from 'commander'\nimport * as fs from 'fs'\nimport moment from 'moment'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nprogram\n .option('-r, --release-message <value>', 'add message to github release')\n .option('-x, --xpi <value>', 'xpi filename template', '{name}-{version()}.xpi')\n .option('-d, --dry-run', 'dry run', !CI.service)\n .option('-p, --pre-release', 'release is a pre-release')\n .option('-t, --tag <value>', 'tag for release', CI.tag)\n .parse(process.argv)\nconst options = program.opts()\n\nif (options.tag && options.tag !== CI.tag) {\n console.log('dry-run: tag specified manually, switching to dry-run mode')\n options.dryRun = true\n}\n\nif (options.releaseMessage?.startsWith('@')) options.releaseMessage = fs.readFileSync(options.releaseMessage.substring(1), 'utf-8')\n\nimport { Octokit } from '@octokit/rest'\nconst octokit = new Octokit({ auth: `token ${process.env.GITHUB_TOKEN}` })\n\nconst [, owner, repo] = pkg.repository.url.match(/:\\/\\/github.com\\/([^/]+)\\/([^.]+)\\.git$/)\n\nconst xpi = parseTemplate(options.xpi).expand({ ...pkg, version: version() })\n\n// eslint-disable-next-line no-magic-numbers\nconst EXPIRE_BUILDS = moment().subtract(7, 'days').toDate().toISOString()\n\nfunction bail(msg, status = 1) {\n console.log(msg) // eslint-disable-line no-console\n process.exit(status)\n}\n\nif (options.dryRun) {\n console.log('Not running on CI service, switching to dry-run mode') // eslint-disable-line no-console\n CI.branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim()\n}\n\nfunction report(msg) {\n console.log(`${options.dryRun ? 'dry-run: ' : ''}${msg}`) // eslint-disable-line no-console\n}\n\nif (CI.pull_request) bail('Not releasing pull requests', 0)\n\nif (options.tag) {\n if (`v${pkg.version}` !== options.tag) bail(`Building tag ${options.tag}, but package version is ${pkg.version}`)\n\n const releaseBranches = ['main', 'master'].concat(pkg.xpi.releaseBranches || [])\n if (CI.branch && !releaseBranches.includes(CI.branch)) bail(`Building tag ${options.tag}, but branch is ${CI.branch}`)\n}\n\nconst tags = new Set()\nfor (let regex = /(?:^|\\s)(?:#)([a-zA-Z\\d]+)/gm, tag; tag = regex.exec(CI.commit_message);) {\n tags.add(tag[1])\n}\n\nif (tags.has('norelease')) bail(`Not releasing on ${CI.branch || 'default branch'} because of 'norelease' tag`, 0)\n\nconst issues: Set<number> = new Set(Array.from(tags).map(parseInt).filter(tag => !isNaN(tag)))\nif ((/^((issue|gh)-)?[0-9]+(-[a-z]+)?$/i).exec(CI.branch)) {\n issues.add(parseInt(CI.branch.replace(/[^0-9]/g, '')))\n}\n\nasync function announce(issue_number, release) {\n if (tags.has('noannounce')) return\n\n const issue = (await octokit.issues.get({ owner, repo, issue_number })).data\n if (issue.locked || issue.state !== 'open') return\n\n let build\n let reason = ''\n\n if (options.tag) {\n build = `${options.preRelease ? 'pre-' : ''}release ${CI.tag}`\n }\n else {\n build = `test build ${version()}`\n }\n const link = `[${build}](https://github.com/${owner}/${repo}/releases/download/${release.data.tag_name}/${pkg.name}-${version()}.xpi)`\n\n if (!options.tag) {\n reason = ` (${JSON.stringify(CI.commit_message)})`\n reason += [\n '',\n `Install in Zotero by downloading ${link}, opening the Zotero \"Tools\" menu, selecting \"Add-ons\", open the gear menu in the top right, and select \"Install Add-on From File...\".`,\n 'Please test this build and report back whether it fixes the issue, and if not, what the remaining problem is. In the latter case, please also send a new log.',\n ].join('\\n\\n')\n }\n\n const body = `:robot: this is your friendly neighborhood build bot announcing ${link}${reason}`\n\n report(body)\n if (options.dryRun) return\n\n try {\n await octokit.issues.createComment({ owner, repo, issue_number, body })\n }\n catch (error) {\n report(`Failed to announce '${build}: ${reason}' on ${issue_number}`)\n }\n\n if (process.env.GITHUB_ENV) fs.appendFileSync(process.env.GITHUB_ENV, `XPI_RELEASED=${issue_number}\\n`)\n}\n\nasync function uploadAsset(release, asset, contentType) {\n report(`uploading ${path.basename(asset)} to ${release.data.tag_name}`)\n if (options.dryRun) return\n\n const name = path.basename(asset)\n const exists = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data.find(a => a.name === name)\n if (exists) {\n if (release.data.tag_name === 'builds') {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: exists.id })\n }\n else {\n bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: asset exists`)\n }\n }\n\n try {\n await octokit.repos.uploadReleaseAsset({\n owner,\n repo,\n url: release.data.upload_url,\n release_id: release.data.id,\n data: (fs.readFileSync(asset) as unknown as string), // TODO: what is going on here octokit?!\n headers: {\n 'content-type': contentType,\n 'content-length': fs.statSync(asset).size,\n },\n name,\n })\n }\n catch (err) {\n bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: ${err}`)\n }\n}\n\nasync function getRelease(tag, prerelease) {\n try {\n return await octokit.repos.getReleaseByTag({ owner, repo, tag })\n }\n catch {\n try {\n return await octokit.repos.createRelease({ owner, repo, tag_name: tag, prerelease })\n }\n catch (err) {\n bail(`Could not get release ${tag}: ${err}`)\n return null\n }\n }\n}\n\nasync function update_rdf(releases_tag: string) {\n const release = await getRelease(releases_tag, false)\n\n const assets = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data\n\n const updates = {\n 'updates.json': 'application/json',\n }\n\n for (const asset of assets) {\n if (asset.name in updates && updates[asset.name]) {\n report(`removing ${asset.name} from ${release.data.tag_name}`)\n // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n if (options.dryRun) {\n report(`update ${asset.name}`)\n }\n else {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n }\n }\n }\n for (const [pointer, mimetype] of Object.entries(updates)) {\n if (mimetype) await uploadAsset(release, path.join(root, `gen/${pointer}`), mimetype)\n }\n}\n\nasync function main(): Promise<void> {\n if (process.env.NIGHTLY === 'true') return\n\n if (CI.branch === 'l10n_master') {\n for (const issue of (await octokit.issues.listForRepo({ owner, repo, state: 'open', labels: 'translation' })).data) {\n issues.add(issue.number)\n }\n }\n\n let release\n if (options.tag) {\n // upload XPI\n\n try {\n await octokit.repos.getReleaseByTag({ owner, repo, tag: options.tag })\n if (!options.dryRun) bail(`release ${options.tag} exists, bailing`)\n }\n catch (err) { // eslint-disable-line @typescript-eslint/no-unused-vars\n // actually OK\n }\n\n if (options.dryRun) {\n report(`create release ${options.tag}`)\n report(`upload asset ${xpi}`)\n }\n else {\n report(`uploading ${xpi} to new release ${CI.tag}`)\n release = await octokit.repos.createRelease({ owner, repo, tag_name: CI.tag, prerelease: !!options.preRelease, body: options.releaseMessage || '' })\n await uploadAsset(release, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n }\n\n // RDF update pointer(s)\n await update_rdf(pkg.xpi.releaseURL.split('/').filter((name: string) => name).reverse()[0])\n }\n else if (issues.size) { // only release builds tied to issues\n release = await getRelease('builds', true)\n\n for (const asset of release.data.assets || []) {\n if (asset.name.endsWith('.xpi') && asset.created_at < EXPIRE_BUILDS) {\n report(`deleting ${asset.name}`)\n // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n if (options.dryRun) {\n report(`delete asset ${asset.name}`)\n }\n else {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n }\n }\n }\n await uploadAsset(release, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n }\n\n if (process.env.VERBOSE) console.log({ tag: CI.tag, issues, release, tags })\n\n for (const issue of Array.from(issues)) {\n await announce(issue, release)\n }\n}\n\nmain().catch(err => console.log(err))\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n version = `${version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n version = `${version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(version)} }`)\n return version\n}\n\nversion()\n"],"mappings":"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","names":["fs","path","path","fs","import_fs","import_path","version","os","path","fs","moment"]}
|
|
1
|
+
{"version":3,"sources":["../../../bin/release.ts","../../../bin/continuous-integration.ts","../../../bin/find-root.ts","../../../bin/version.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument, no-console, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/restrict-template-expressions */\n\nprocess.on('unhandledRejection', up => {\n throw up\n})\n\nimport 'dotenv/config'\nimport { execSync } from 'child_process'\nimport { program } from 'commander'\nimport * as fs from 'fs'\nimport moment from 'moment'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nprogram\n .option('-r, --release-message <value>', 'add message to github release')\n .option('-x, --xpi <value>', 'xpi filename template', '{name}-{version()}.xpi')\n .option('-d, --dry-run', 'dry run', !CI.service)\n .option('-p, --pre-release', 'release is a pre-release')\n .option('-t, --tag <value>', 'tag for release', CI.tag)\n .parse(process.argv)\nconst options = program.opts()\n\nif (options.tag && options.tag !== CI.tag) {\n console.log('dry-run: tag specified manually, switching to dry-run mode')\n options.dryRun = true\n}\n\nif (options.releaseMessage?.startsWith('@')) options.releaseMessage = fs.readFileSync(options.releaseMessage.substring(1), 'utf-8')\n\nimport { Octokit } from '@octokit/rest'\nconst octokit = new Octokit({ auth: `token ${process.env.GITHUB_TOKEN}` })\n\nconst [, owner, repo] = pkg.repository.url.match(/:\\/\\/github.com\\/([^/]+)\\/([^.]+)\\.git$/)\n\nconst xpi = parseTemplate(options.xpi).expand({ ...pkg, version: version() })\n\n// eslint-disable-next-line no-magic-numbers\nconst EXPIRE_BUILDS = moment().subtract(7, 'days').toDate().toISOString()\n\nfunction bail(msg, status = 1) {\n console.log(msg) // eslint-disable-line no-console\n process.exit(status)\n}\n\nif (options.dryRun) {\n console.log('Not running on CI service, switching to dry-run mode') // eslint-disable-line no-console\n CI.branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim()\n}\n\nfunction report(msg) {\n console.log(`${options.dryRun ? 'dry-run: ' : ''}${msg}`) // eslint-disable-line no-console\n}\n\nif (CI.pull_request) bail('Not releasing pull requests', 0)\n\nif (options.tag) {\n if (`v${pkg.version}` !== options.tag) bail(`Building tag ${options.tag}, but package version is ${pkg.version}`)\n\n const releaseBranches = ['main', 'master'].concat(pkg.xpi.releaseBranches || [])\n if (CI.branch && !releaseBranches.includes(CI.branch)) bail(`Building tag ${options.tag}, but branch is ${CI.branch}`)\n}\n\nconst tags = new Set()\nfor (let regex = /(?:^|\\s)(?:#)([a-zA-Z\\d]+)/gm, tag; tag = regex.exec(CI.commit_message);) {\n tags.add(tag[1])\n}\n\nif (tags.has('norelease')) bail(`Not releasing on ${CI.branch || 'default branch'} because of 'norelease' tag`, 0)\n\nconst issues: Set<number> = new Set(Array.from(tags).map(parseInt).filter(tag => !isNaN(tag)))\nif ((/^((issue|gh)-)?[0-9]+(-[a-z]+)?$/i).exec(CI.branch)) {\n issues.add(parseInt(CI.branch.replace(/[^0-9]/g, '')))\n}\n\nasync function announce(issue_number, release) {\n if (tags.has('noannounce')) return\n\n const issue = (await octokit.issues.get({ owner, repo, issue_number })).data\n if (issue.locked || issue.state !== 'open') return\n\n let build\n let reason = ''\n\n if (options.tag) {\n build = `${options.preRelease ? 'pre-' : ''}release ${CI.tag}`\n }\n else {\n build = `test build ${version()}`\n }\n const link = `[${build}](https://github.com/${owner}/${repo}/releases/download/${release.data.tag_name}/${pkg.name}-${version()}.xpi)`\n\n if (!options.tag) {\n reason = ` (${JSON.stringify(CI.commit_message)})`\n reason += [\n '',\n `Install in Zotero by downloading ${link}, opening the Zotero \"Tools\" menu, selecting \"Add-ons\", open the gear menu in the top right, and select \"Install Add-on From File...\".`,\n 'Please test this build and report back whether it fixes the issue, and if not, what the remaining problem is. In the latter case, please also send a new log.',\n ].join('\\n\\n')\n }\n\n const body = `:robot: this is your friendly neighborhood build bot announcing ${link}${reason}`\n\n report(body)\n if (options.dryRun) return\n\n try {\n await octokit.issues.createComment({ owner, repo, issue_number, body })\n }\n catch (error) {\n report(`Failed to announce '${build}: ${reason}' on ${issue_number}`)\n }\n\n if (process.env.GITHUB_ENV) fs.appendFileSync(process.env.GITHUB_ENV, `XPI_RELEASED=${issue_number}\\n`)\n}\n\nasync function uploadAsset(release, asset, contentType) {\n report(`uploading ${path.basename(asset)} to ${release.data.tag_name}`)\n if (options.dryRun) return\n\n const name = path.basename(asset)\n const exists = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data.find(a => a.name === name)\n if (exists) {\n if (release.data.tag_name === 'builds') {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: exists.id })\n }\n else {\n bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: asset exists`)\n }\n }\n\n try {\n await octokit.repos.uploadReleaseAsset({\n owner,\n repo,\n url: release.data.upload_url,\n release_id: release.data.id,\n data: (fs.readFileSync(asset) as unknown as string), // TODO: what is going on here octokit?!\n headers: {\n 'content-type': contentType,\n 'content-length': fs.statSync(asset).size,\n },\n name,\n })\n }\n catch (err) {\n bail(`failed to upload ${path.basename(asset)} to ${release.data.html_url}: ${err}`)\n }\n}\n\nasync function getRelease(tag, prerelease) {\n try {\n return await octokit.repos.getReleaseByTag({ owner, repo, tag })\n }\n catch {\n try {\n return await octokit.repos.createRelease({ owner, repo, tag_name: tag, prerelease })\n }\n catch (err) {\n bail(`Could not get release ${tag}: ${err}`)\n return null\n }\n }\n}\n\nasync function update_rdf(releases_tag: string) {\n const release = await getRelease(releases_tag, false)\n\n const assets = (await octokit.repos.listReleaseAssets({ owner, repo, release_id: release.data.id })).data\n\n const updates = {\n 'updates.json': 'application/json',\n }\n\n for (const asset of assets) {\n if (asset.name in updates && updates[asset.name]) {\n report(`removing ${asset.name} from ${release.data.tag_name}`)\n // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n if (options.dryRun) {\n report(`update ${asset.name}`)\n }\n else {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n }\n }\n }\n for (const [pointer, mimetype] of Object.entries(updates)) {\n if (mimetype) await uploadAsset(release, path.join(root, `gen/${pointer}`), mimetype)\n }\n}\n\nasync function main(): Promise<void> {\n if (process.env.NIGHTLY === 'true') return\n\n if (CI.branch === 'l10n_master') {\n for (const issue of (await octokit.issues.listForRepo({ owner, repo, state: 'open', labels: 'translation' })).data) {\n issues.add(issue.number)\n }\n }\n\n let release\n if (options.tag) {\n // upload XPI\n\n try {\n await octokit.repos.getReleaseByTag({ owner, repo, tag: options.tag })\n if (!options.dryRun) bail(`release ${options.tag} exists, bailing`)\n }\n catch (err) { // eslint-disable-line @typescript-eslint/no-unused-vars\n // actually OK\n }\n\n if (options.dryRun) {\n report(`create release ${options.tag}`)\n report(`upload asset ${xpi}`)\n }\n else {\n report(`uploading ${xpi} to new release ${CI.tag}`)\n release = await octokit.repos.createRelease({ owner, repo, tag_name: CI.tag, prerelease: !!options.preRelease, body: options.releaseMessage || '' })\n await uploadAsset(release, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n }\n\n // RDF update pointer(s)\n await update_rdf(pkg.xpi.releaseURL.split('/').filter((name: string) => name).reverse()[0])\n }\n else if (issues.size) { // only release builds tied to issues\n release = await getRelease('builds', true)\n\n for (const asset of release.data.assets || []) {\n if (asset.name.endsWith('.xpi') && asset.created_at < EXPIRE_BUILDS) {\n report(`deleting ${asset.name}`)\n // TODO: double asset.id until https://github.com/octokit/rest.js/issues/933 is fixed\n if (options.dryRun) {\n report(`delete asset ${asset.name}`)\n }\n else {\n await octokit.repos.deleteReleaseAsset({ owner, repo, asset_id: asset.id })\n }\n }\n }\n await uploadAsset(release, path.join(root, `xpi/${xpi}`), 'application/vnd.zotero.plugin')\n }\n\n if (process.env.VERBOSE) console.log({ tag: CI.tag, issues, release, tags })\n\n for (const issue of Array.from(issues)) {\n await announce(issue, release)\n }\n}\n\nmain().catch(err => console.log(err))\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n $version = `${$version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n"],"mappings":"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","names":["fs","path","path","fs","import_fs","import_path","os","path","fs","moment"]}
|
package/dist/cjs/bin/version.cjs
CHANGED
|
@@ -96,21 +96,23 @@ var import_path = __toESM(require("path"), 1);
|
|
|
96
96
|
var folders = process.cwd().split(import_path.default.sep);
|
|
97
97
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
98
98
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
99
|
+
console.log("project directory:", root);
|
|
99
100
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
100
101
|
|
|
101
102
|
// bin/version.ts
|
|
102
103
|
function version() {
|
|
103
|
-
let
|
|
104
|
+
let $version = pkg.version;
|
|
104
105
|
if (ContinuousIntegration.service && !ContinuousIntegration.tag) {
|
|
105
106
|
const issue = ContinuousIntegration.issue && process.env.VERSION_WITH_ISSUE !== "false" ? `.${ContinuousIntegration.issue}` : "";
|
|
106
|
-
|
|
107
|
+
$version = `${$version}${issue}.${ContinuousIntegration.build_number}`;
|
|
107
108
|
} else if (!ContinuousIntegration.service) {
|
|
108
|
-
|
|
109
|
+
$version = `${$version}.${import_os.default.userInfo().username}.${import_os.default.hostname()}`;
|
|
109
110
|
}
|
|
110
111
|
const version_module = import_path2.default.join(root, "gen", "version.cjs");
|
|
111
112
|
if (!import_fs2.default.existsSync(import_path2.default.dirname(version_module))) import_fs2.default.mkdirSync(import_path2.default.dirname(version_module));
|
|
112
|
-
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(
|
|
113
|
-
|
|
113
|
+
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`);
|
|
114
|
+
console.log("written version", $version, "to", version_module);
|
|
115
|
+
return $version;
|
|
114
116
|
}
|
|
115
117
|
version();
|
|
116
118
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/version.ts","../../../bin/continuous-integration.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n version = `${version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n version = `${version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(version)} }`)\n return version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAAA,aAAe;AACf,gBAAe;AACf,IAAAC,eAAiB;;;ACJjB,oBAA+B;AAE/B,IAAM,iCAAN,MAAqC;AAAA,EAC5B,UAAU;AAAA,EACV;AAAA,EACA,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,QAAQ;AAAA,EAEf,cAAc;AACZ,eAAW,CAAC,IAAI,IAAI,KAAK,OAAO,QAAQ,EAAE,UAAU,UAAU,QAAQ,UAAU,WAAW,aAAa,gBAAgB,SAAS,CAAC,GAAG;AACnI,UAAI,QAAQ,IAAI,EAAE,MAAM,OAAQ,MAAK,UAAU;AAAA,IACjD;AAEA,YAAQ,KAAK,SAAS;AAAA,MACpB,KAAK;AACH,aAAK,eAAe,KAAK,SAAS,QAAQ,IAAI,gBAAgB;AAC9D,YAAI;AACF,eAAK,MAAoB,uBAAS,8BAA8B,QAAQ,IAAI,WAAW,IAAI,EAAE,OAAO,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK;AAAA,QAChI,SACO,KAAK;AACV,eAAK,MAAM;AAAA,QACb;AACA,aAAK,iBAA+B,uBAAS,4BAA4B,QAAQ,IAAI,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK;AACpH,aAAK,SAAS,QAAQ,IAAI;AAC1B,aAAK,eAAe,CAAC,CAAC,QAAQ,IAAI;AAClC;AAAA,MAEF,KAAK;AACH,aAAK,eAAe,KAAK,SAAS,QAAQ,IAAI,iBAAiB;AAC/D,aAAK,iBAA+B,uBAAS,4BAA4B,QAAQ,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK;AACnH,aAAK,eAAe,QAAQ,IAAI,kBAAkB,WAAW,cAAc;AAE3E,YAAI,QAAQ,IAAI,iBAAiB;AAC/B,eAAK,SAAS,QAAQ,IAAI,gBAAgB,MAAM,GAAG,EAAE,IAAI;AAAA,QAC3D,WACS,QAAQ,IAAI,WAAW,WAAW,YAAY,GAAG;AAExD,eAAK,MAAM,QAAQ,IAAI,WAAW,MAAM,GAAG,EAAE,IAAI;AAAA,QACnD,WACS,QAAQ,IAAI,WAAW,WAAW,aAAa,GAAG;AACzD,eAAK,SAAS,QAAQ,IAAI,WAAW,MAAM,GAAG,EAAE,IAAI;AAAA,QACtD;AACA,aAAK,SAAS,KAAK,UAAU;AAC7B,aAAK,QAAQ,KAAK,OAAO,MAAM,eAAe,IAAI,CAAC,KAAK;AACxD;AAAA,MAEF;AACE,YAAI,QAAQ,IAAI,OAAO,OAAQ,OAAM,IAAI,MAAM,yBAAyB,KAAK,OAAO,EAAE;AAAA,IAC1F;AAAA,EACF;AAAA,EAEQ,SAAS,GAA4B;AAC3C,QAAI,OAAO,MAAM,SAAU,QAAO;AAClC,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,MAAM,GAAG,EAAG,OAAM,IAAI,MAAM,GAAG,CAAC,oBAAoB;AACxD,WAAO;AAAA,EACT;AACF;AAEO,IAAM,wBAAwB,IAAI,+BAA+B;;;AC9DxE,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/version.ts","../../../bin/continuous-integration.ts","../../../bin/find-root.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n $version = `${$version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n"],"mappings":"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","names":["import_fs","import_path","path","fs","os","path","fs"]}
|
package/dist/cjs/bin/zipup.cjs
CHANGED
|
@@ -33,6 +33,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
33
33
|
var folders = process.cwd().split(import_path.default.sep);
|
|
34
34
|
var rootIndex = folders.findIndex((folder, i) => import_fs.default.existsSync(import_path.default.join(folders.slice(0, i + 1).join(import_path.default.sep), "package.json")));
|
|
35
35
|
var root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(import_path.default.sep);
|
|
36
|
+
console.log("project directory:", root);
|
|
36
37
|
var pkg = JSON.parse(import_fs.default.readFileSync(import_path.default.join(root, "package.json"), "utf-8"));
|
|
37
38
|
|
|
38
39
|
// bin/version.ts
|
|
@@ -95,17 +96,18 @@ var ContinuousIntegration = new ContinuousIntegrationSingleton();
|
|
|
95
96
|
|
|
96
97
|
// bin/version.ts
|
|
97
98
|
function version() {
|
|
98
|
-
let
|
|
99
|
+
let $version = pkg.version;
|
|
99
100
|
if (ContinuousIntegration.service && !ContinuousIntegration.tag) {
|
|
100
101
|
const issue = ContinuousIntegration.issue && process.env.VERSION_WITH_ISSUE !== "false" ? `.${ContinuousIntegration.issue}` : "";
|
|
101
|
-
|
|
102
|
+
$version = `${$version}${issue}.${ContinuousIntegration.build_number}`;
|
|
102
103
|
} else if (!ContinuousIntegration.service) {
|
|
103
|
-
|
|
104
|
+
$version = `${$version}.${import_os.default.userInfo().username}.${import_os.default.hostname()}`;
|
|
104
105
|
}
|
|
105
106
|
const version_module = import_path2.default.join(root, "gen", "version.cjs");
|
|
106
107
|
if (!import_fs2.default.existsSync(import_path2.default.dirname(version_module))) import_fs2.default.mkdirSync(import_path2.default.dirname(version_module));
|
|
107
|
-
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(
|
|
108
|
-
|
|
108
|
+
import_fs2.default.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`);
|
|
109
|
+
console.log("written version", $version, "to", version_module);
|
|
110
|
+
return $version;
|
|
109
111
|
}
|
|
110
112
|
version();
|
|
111
113
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bin/zipup.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nimport archiver from 'archiver'\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n// @ts-expect-error TS2835\nimport { root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nconst [, , source, target] = process.argv\n\nconst xpi = path.join(root, 'xpi', `${target}-${version()}.xpi`)\nconsole.log(`creating ${xpi}`) // eslint-disable-line no-console\nif (fs.existsSync(xpi)) fs.unlinkSync(xpi)\nif (!fs.existsSync(path.dirname(xpi))) fs.mkdirSync(path.dirname(xpi))\n\nasync function main() {\n await new Promise<void>((resolve, reject) => {\n const xpi = path.join(root, 'xpi', `${target}-${version()}.xpi`)\n const output = fs.createWriteStream(xpi)\n const archive = archiver('zip', { zlib: { level: 9 } })\n\n output.on('close', () => {\n console.log(archive.pointer() + ' total bytes')\n console.log('Archiver has been finalized and the output file descriptor has closed.')\n resolve()\n })\n\n archive.on('warning', err => {\n if (err.code === 'ENOENT') {\n console.warn(err.message)\n }\n else {\n console.error(err)\n }\n })\n\n archive.on('error', err => {\n reject(err)\n })\n\n archive.pipe(output)\n\n // Add files to the archive\n archive.directory(`${root}/${source}`, false)\n\n archive.finalize()\n })\n}\n\nmain().catch(err => {\n console.log(err)\n process.exit(1)\n})\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n version = `${version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n version = `${version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify(version)} }`)\n return version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,sBAAqB;AACrB,IAAAA,MAAoB;AACpB,IAAAC,QAAsB;;;ACNtB,gBAAe;AACf,kBAAiB;AAEjB,IAAM,UAAU,QAAQ,IAAI,EAAE,MAAM,YAAAC,QAAK,GAAG;AAC5C,IAAM,YAAY,QAAQ,UAAU,CAAC,QAAgB,MAAc,UAAAC,QAAG,WAAW,YAAAD,QAAK,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,YAAAA,QAAK,GAAG,GAAG,cAAc,CAAC,CAAC;AAC5I,IAAM,QAAQ,YAAY,IAAI,QAAQ,MAAM,GAAG,YAAY,CAAC,IAAI,SAAS,KAAK,YAAAA,QAAK,GAAG;
|
|
1
|
+
{"version":3,"sources":["../../../bin/zipup.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nimport archiver from 'archiver'\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n// @ts-expect-error TS2835\nimport { root } from './find-root'\n// @ts-expect-error TS2835\nimport { version } from './version'\n\nconst [, , source, target] = process.argv\n\nconst xpi = path.join(root, 'xpi', `${target}-${version()}.xpi`)\nconsole.log(`creating ${xpi}`) // eslint-disable-line no-console\nif (fs.existsSync(xpi)) fs.unlinkSync(xpi)\nif (!fs.existsSync(path.dirname(xpi))) fs.mkdirSync(path.dirname(xpi))\n\nasync function main() {\n await new Promise<void>((resolve, reject) => {\n const xpi = path.join(root, 'xpi', `${target}-${version()}.xpi`)\n const output = fs.createWriteStream(xpi)\n const archive = archiver('zip', { zlib: { level: 9 } })\n\n output.on('close', () => {\n console.log(archive.pointer() + ' total bytes')\n console.log('Archiver has been finalized and the output file descriptor has closed.')\n resolve()\n })\n\n archive.on('warning', err => {\n if (err.code === 'ENOENT') {\n console.warn(err.message)\n }\n else {\n console.error(err)\n }\n })\n\n archive.on('error', err => {\n reject(err)\n })\n\n archive.pipe(output)\n\n // Add files to the archive\n archive.directory(`${root}/${source}`, false)\n\n archive.finalize()\n })\n}\n\nmain().catch(err => {\n console.log(err)\n process.exit(1)\n})\n","import fs from 'fs'\nimport path from 'path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\n// @ts-expect-error TS2835\nimport { ContinuousIntegration as CI } from './continuous-integration'\n// @ts-expect-error TS2835\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n const issue = CI.issue && process.env.VERSION_WITH_ISSUE !== 'false' ? `.${CI.issue}` : ''\n $version = `${$version}${issue}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","path","fs","import_fs","import_path","os","path","fs","xpi","archiver"]}
|
package/dist/cjs/debug-log.cjs
CHANGED
|
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(debug_log_exports);
|
|
|
37
37
|
// package.json
|
|
38
38
|
var package_default = {
|
|
39
39
|
"name": "zotero-plugin",
|
|
40
|
-
"version": "7.0.
|
|
40
|
+
"version": "7.0.8",
|
|
41
41
|
"description": "Zotero plugin builder",
|
|
42
42
|
"homepage": "https://github.com/retorquere/zotero-plugin/wiki",
|
|
43
43
|
"type": "module",
|