@thegetty/quire-cli 1.0.0-rc.45 → 1.0.0-rc.47
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/CHANGELOG.md +0 -36
- package/README.md +0 -9
- package/bin/cli.js +1 -46
- package/package.json +10 -27
- package/src/Command.js +6 -26
- package/src/commands/README.md +122 -213
- package/src/commands/build.js +37 -45
- package/src/commands/clean.js +19 -33
- package/src/commands/conf.js +43 -0
- package/src/commands/create.js +14 -42
- package/src/commands/epub.js +31 -67
- package/src/commands/index.js +2 -9
- package/src/commands/info.js +86 -88
- package/src/commands/pdf.js +82 -63
- package/src/commands/preview.js +31 -32
- package/src/commands/validate.js +20 -64
- package/src/commands/version.js +43 -0
- package/src/errors/validation/validation-error.js +11 -20
- package/src/helpers/clean.js +1 -1
- package/src/helpers/is-quire.js +31 -0
- package/src/helpers/test-cwd.js +6 -5
- package/src/helpers/which.js +4 -10
- package/src/lib/11ty/README.md +19 -135
- package/src/lib/11ty/api.js +93 -235
- package/src/lib/11ty/cli.js +37 -112
- package/src/lib/11ty/index.js +5 -64
- package/src/lib/11ty/paths.js +103 -0
- package/src/lib/README.md +0 -330
- package/src/lib/conf/README.md +69 -86
- package/src/lib/conf/config.js +3 -5
- package/src/lib/conf/defaults.js +0 -65
- package/src/lib/conf/schema.js +9 -103
- package/src/lib/epub/README.md +2 -133
- package/src/lib/epub/epub.js +11 -36
- package/src/lib/epub/index.js +21 -111
- package/src/lib/epub/pandoc.js +4 -33
- package/src/lib/git/README.md +2 -151
- package/src/lib/git/index.js +13 -217
- package/src/lib/i18n/README.md +3 -0
- package/src/lib/i18n/config.js +53 -0
- package/src/lib/i18n/index.js +43 -0
- package/src/lib/i18n/localeService.js +58 -0
- package/src/lib/pdf/README.md +0 -131
- package/src/lib/pdf/index.js +21 -124
- package/src/lib/pdf/paged.js +52 -100
- package/src/lib/pdf/prince.js +37 -115
- package/src/lib/pdf/split.js +33 -61
- package/src/lib/quire/README.md +19 -0
- package/src/lib/quire/index.js +353 -0
- package/src/lib/reporter/README.md +2 -211
- package/src/lib/reporter/index.js +0 -607
- package/src/main.js +48 -221
- package/src/packageConfig.js +0 -17
- package/src/validators/utils.js +1 -2
- package/man/quire.1 +0 -341
- package/man/quire.1.md +0 -232
- package/schemas/config.schema.json +0 -194
- package/schemas/figures.schema.json +0 -56
- package/schemas/layout.schema.json +0 -5
- package/schemas/objects.schema.json +0 -62
- package/schemas/publication.schema.json +0 -140
- package/schemas/references.schema.json +0 -29
- package/src/Command.spec.js +0 -99
- package/src/commands/build.spec.js +0 -113
- package/src/commands/build.test.js +0 -397
- package/src/commands/clean.spec.js +0 -118
- package/src/commands/clean.test.js +0 -382
- package/src/commands/config.js +0 -238
- package/src/commands/config.spec.js +0 -107
- package/src/commands/config.test.js +0 -845
- package/src/commands/create.spec.js +0 -112
- package/src/commands/create.test.js +0 -415
- package/src/commands/doctor.js +0 -251
- package/src/commands/doctor.spec.js +0 -115
- package/src/commands/doctor.test.js +0 -1409
- package/src/commands/epub.spec.js +0 -114
- package/src/commands/epub.test.js +0 -503
- package/src/commands/help.js +0 -60
- package/src/commands/help.test.js +0 -132
- package/src/commands/info.spec.js +0 -72
- package/src/commands/info.test.js +0 -512
- package/src/commands/pdf.spec.js +0 -114
- package/src/commands/pdf.test.js +0 -464
- package/src/commands/preview.spec.js +0 -97
- package/src/commands/preview.test.js +0 -250
- package/src/commands/use.js +0 -56
- package/src/commands/use.spec.js +0 -61
- package/src/commands/use.test.js +0 -280
- package/src/commands/validate.spec.js +0 -90
- package/src/commands/validate.test.js +0 -378
- package/src/commands/workflows.js +0 -70
- package/src/errors/build/build-failed-error.js +0 -19
- package/src/errors/build/config-field-missing-error.js +0 -20
- package/src/errors/build/config-file-not-found-error.js +0 -20
- package/src/errors/build/index.js +0 -11
- package/src/errors/help/help-topic-not-found-error.js +0 -30
- package/src/errors/help/index.js +0 -8
- package/src/errors/index.js +0 -58
- package/src/errors/input/index.js +0 -8
- package/src/errors/input/invalid-input-error.js +0 -21
- package/src/errors/install/dependency-install-error.js +0 -19
- package/src/errors/install/directory-not-empty-error.js +0 -25
- package/src/errors/install/index.js +0 -12
- package/src/errors/install/invalid-path-error.js +0 -31
- package/src/errors/install/invalid-starter-error.js +0 -27
- package/src/errors/install/version-not-found-error.js +0 -35
- package/src/errors/output/epub-generation-error.js +0 -19
- package/src/errors/output/index.js +0 -14
- package/src/errors/output/invalid-epub-library-error.js +0 -20
- package/src/errors/output/invalid-pdf-library-error.js +0 -20
- package/src/errors/output/missing-build-output-error.js +0 -21
- package/src/errors/output/pdf-generation-error.js +0 -24
- package/src/errors/output/tool-not-found-error.js +0 -37
- package/src/errors/project/index.js +0 -10
- package/src/errors/project/not-in-project-error.js +0 -20
- package/src/errors/project/project-create-error.js +0 -21
- package/src/errors/quire-error.js +0 -27
- package/src/errors/validation/index.js +0 -3
- package/src/errors/validation/unknown-config-key-error.js +0 -27
- package/src/errors/validation/unknown-config-operation-error.js +0 -24
- package/src/helpers/docs-url.js +0 -32
- package/src/helpers/pager.js +0 -59
- package/src/helpers/pager.test.js +0 -85
- package/src/helpers/suggest-similar.js +0 -124
- package/src/helpers/suggest-similar.test.js +0 -108
- package/src/helpers/test-cwd.test.js +0 -192
- package/src/lib/11ty/index.test.js +0 -655
- package/src/lib/commander/index.js +0 -103
- package/src/lib/commander/index.test.js +0 -86
- package/src/lib/commander/options.js +0 -237
- package/src/lib/commander/options.test.js +0 -205
- package/src/lib/conf/build-status.js +0 -103
- package/src/lib/conf/build-status.test.js +0 -247
- package/src/lib/conf/config.test.js +0 -281
- package/src/lib/conf/format.js +0 -60
- package/src/lib/conf/format.test.js +0 -106
- package/src/lib/conf/helpers.js +0 -91
- package/src/lib/conf/helpers.test.js +0 -136
- package/src/lib/conf/index.js +0 -22
- package/src/lib/constants.js +0 -28
- package/src/lib/doctor/README.md +0 -667
- package/src/lib/doctor/checks/environment/cli-version.js +0 -62
- package/src/lib/doctor/checks/environment/cli-version.test.js +0 -132
- package/src/lib/doctor/checks/environment/git-available.js +0 -77
- package/src/lib/doctor/checks/environment/git-available.test.js +0 -52
- package/src/lib/doctor/checks/environment/index.js +0 -13
- package/src/lib/doctor/checks/environment/node-version.js +0 -66
- package/src/lib/doctor/checks/environment/node-version.test.js +0 -17
- package/src/lib/doctor/checks/environment/npm-available.js +0 -66
- package/src/lib/doctor/checks/environment/npm-available.test.js +0 -52
- package/src/lib/doctor/checks/environment/os-info.js +0 -48
- package/src/lib/doctor/checks/environment/os-info.test.js +0 -81
- package/src/lib/doctor/checks/environment/runtime-info.js +0 -51
- package/src/lib/doctor/checks/environment/runtime-info.test.js +0 -132
- package/src/lib/doctor/checks/outputs/epub-output.js +0 -119
- package/src/lib/doctor/checks/outputs/epub-output.test.js +0 -277
- package/src/lib/doctor/checks/outputs/index.js +0 -10
- package/src/lib/doctor/checks/outputs/pdf-output.js +0 -144
- package/src/lib/doctor/checks/outputs/pdf-output.test.js +0 -377
- package/src/lib/doctor/checks/outputs/stale-build.js +0 -122
- package/src/lib/doctor/checks/outputs/stale-build.test.js +0 -282
- package/src/lib/doctor/checks/project/data-files.js +0 -56
- package/src/lib/doctor/checks/project/data-files.test.js +0 -125
- package/src/lib/doctor/checks/project/dependencies.js +0 -53
- package/src/lib/doctor/checks/project/dependencies.test.js +0 -71
- package/src/lib/doctor/checks/project/index.js +0 -11
- package/src/lib/doctor/checks/project/quire-11ty.js +0 -98
- package/src/lib/doctor/checks/project/quire-11ty.test.js +0 -170
- package/src/lib/doctor/checks/project/quire-project.js +0 -38
- package/src/lib/doctor/checks/project/quire-project.test.js +0 -47
- package/src/lib/doctor/checks/tools/index.js +0 -10
- package/src/lib/doctor/checks/tools/pandoc-available.js +0 -82
- package/src/lib/doctor/checks/tools/pandoc-available.test.js +0 -73
- package/src/lib/doctor/checks/tools/prince-available.js +0 -81
- package/src/lib/doctor/checks/tools/prince-available.test.js +0 -73
- package/src/lib/doctor/constants.js +0 -39
- package/src/lib/doctor/formatDuration.js +0 -108
- package/src/lib/doctor/formatDuration.test.js +0 -76
- package/src/lib/doctor/formatters/human.js +0 -257
- package/src/lib/doctor/formatters/human.test.js +0 -463
- package/src/lib/doctor/formatters/index.js +0 -8
- package/src/lib/doctor/formatters/json.js +0 -78
- package/src/lib/doctor/formatters/json.test.js +0 -174
- package/src/lib/doctor/formatters/shared.js +0 -129
- package/src/lib/doctor/formatters/shared.test.js +0 -194
- package/src/lib/doctor/index.js +0 -271
- package/src/lib/doctor/index.test.js +0 -797
- package/src/lib/epub/engines.js +0 -46
- package/src/lib/epub/index.test.js +0 -518
- package/src/lib/epub/pandoc.test.js +0 -122
- package/src/lib/epub/schema.js +0 -21
- package/src/lib/error/README.md +0 -170
- package/src/lib/error/handler.js +0 -107
- package/src/lib/git/index.spec.js +0 -80
- package/src/lib/git/index.test.js +0 -453
- package/src/lib/help/frontmatter.js +0 -77
- package/src/lib/help/frontmatter.test.js +0 -139
- package/src/lib/help/index.js +0 -146
- package/src/lib/help/index.test.js +0 -188
- package/src/lib/help/topics/configuration.md +0 -77
- package/src/lib/help/topics/debugging.md +0 -69
- package/src/lib/help/topics/epub.md +0 -74
- package/src/lib/help/topics/pdf.md +0 -74
- package/src/lib/help/topics/publishing.md +0 -80
- package/src/lib/help/topics/workflows.md +0 -50
- package/src/lib/installer/index.js +0 -309
- package/src/lib/installer/index.spec.js +0 -83
- package/src/lib/installer/index.test.js +0 -545
- package/src/lib/logger/README.md +0 -424
- package/src/lib/logger/debug.js +0 -132
- package/src/lib/logger/debug.spec.js +0 -130
- package/src/lib/logger/debug.test.js +0 -128
- package/src/lib/logger/index.js +0 -228
- package/src/lib/logger/index.spec.js +0 -131
- package/src/lib/logger/index.test.js +0 -578
- package/src/lib/npm/README.md +0 -127
- package/src/lib/npm/index.js +0 -198
- package/src/lib/npm/index.spec.js +0 -60
- package/src/lib/npm/index.test.js +0 -355
- package/src/lib/pdf/engines.js +0 -46
- package/src/lib/pdf/index.test.js +0 -708
- package/src/lib/pdf/paged.test.js +0 -366
- package/src/lib/pdf/prince.test.js +0 -202
- package/src/lib/pdf/schema.js +0 -21
- package/src/lib/pdf/split.test.js +0 -445
- package/src/lib/platform.js +0 -95
- package/src/lib/process/manager.js +0 -110
- package/src/lib/process/manager.test.js +0 -55
- package/src/lib/project/build.js +0 -162
- package/src/lib/project/build.test.js +0 -275
- package/src/lib/project/config.js +0 -48
- package/src/lib/project/config.test.js +0 -134
- package/src/lib/project/detect.js +0 -47
- package/src/lib/project/detect.test.js +0 -157
- package/src/lib/project/index.js +0 -56
- package/src/lib/project/output-paths.js +0 -87
- package/src/lib/project/output-paths.test.js +0 -66
- package/src/lib/project/paths.js +0 -272
- package/src/lib/project/version.js +0 -110
- package/src/lib/project/version.test.js +0 -350
- package/src/lib/reporter/index.test.js +0 -862
- package/src/main.spec.js +0 -61
- package/src/main.test.js +0 -347
- package/src/validators/validate-data-files.js +0 -154
- package/src/validators/validate-data-files.test.js +0 -217
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project version module
|
|
3
|
-
*
|
|
4
|
-
* Manages quire-11ty version files in Quire projects.
|
|
5
|
-
*
|
|
6
|
-
* @module lib/project/version
|
|
7
|
-
*/
|
|
8
|
-
import fs from 'fs-extra'
|
|
9
|
-
import path from 'node:path'
|
|
10
|
-
import config from '#lib/conf/config.js'
|
|
11
|
-
import paths from './paths.js'
|
|
12
|
-
|
|
13
|
-
const PACKAGE_NAME = '@thegetty/quire-11ty'
|
|
14
|
-
const VERSION_FILE = config.get('versionFile')
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Read the required quire-11ty version from the project version file
|
|
18
|
-
*
|
|
19
|
-
* @param {string} [projectPath] - Absolute system path to the project root
|
|
20
|
-
* @returns {string} Quire-11ty semantic version
|
|
21
|
-
*/
|
|
22
|
-
export function getVersion(projectPath) {
|
|
23
|
-
projectPath = projectPath || paths.getProjectRoot()
|
|
24
|
-
const version = fs.readFileSync(path.join(projectPath, VERSION_FILE), { encoding: 'utf8' })
|
|
25
|
-
const projectName = path.basename(projectPath)
|
|
26
|
-
console.debug(`${projectName} set to use quire-11ty@${version}`)
|
|
27
|
-
return version
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Sets the quire-11ty version for a project
|
|
32
|
-
*
|
|
33
|
-
* Updates the version file with the new quire-11ty version while
|
|
34
|
-
* preserving other metadata (cli version, starter info).
|
|
35
|
-
*
|
|
36
|
-
* @param {string} version - A version identifier or distribution tag
|
|
37
|
-
* @param {string} [projectPath] - Absolute path to project root (defaults to cwd)
|
|
38
|
-
*/
|
|
39
|
-
export function setVersion(version, projectPath) {
|
|
40
|
-
projectPath = projectPath || paths.getProjectRoot()
|
|
41
|
-
const projectName = path.basename(projectPath)
|
|
42
|
-
const versionFilePath = path.join(projectPath, VERSION_FILE)
|
|
43
|
-
|
|
44
|
-
// Read existing version info or create new
|
|
45
|
-
let versionInfo = {}
|
|
46
|
-
if (fs.existsSync(versionFilePath)) {
|
|
47
|
-
const content = fs.readFileSync(versionFilePath, { encoding: 'utf8' })
|
|
48
|
-
try {
|
|
49
|
-
versionInfo = JSON.parse(content)
|
|
50
|
-
} catch {
|
|
51
|
-
// Legacy format or invalid JSON, start fresh
|
|
52
|
-
versionInfo = {}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Update the quire-11ty version
|
|
57
|
-
versionInfo.quire11ty = version
|
|
58
|
-
|
|
59
|
-
// Write updated version info
|
|
60
|
-
fs.writeFileSync(versionFilePath, JSON.stringify(versionInfo, null, 2))
|
|
61
|
-
console.info(`${projectName} set to use quire-11ty@${version}`)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Read required quire-11ty and starter versions from starter peerDependencies
|
|
66
|
-
*
|
|
67
|
-
* @param {string} projectPath - Absolute system path to the project root
|
|
68
|
-
* @returns {Promise<Object>}
|
|
69
|
-
* @property {string} quire11tyVersion - Latest compatible Quire-11ty semantic version
|
|
70
|
-
* @property {string} starterVersion - Starter project version from package.json
|
|
71
|
-
*/
|
|
72
|
-
export async function getVersionsFromStarter(projectPath) {
|
|
73
|
-
const projectPackageConfig = fs.readFileSync(
|
|
74
|
-
path.join(projectPath, 'package.json'),
|
|
75
|
-
{ encoding: 'utf8' }
|
|
76
|
-
)
|
|
77
|
-
const { peerDependencies, version: starterVersion } = JSON.parse(projectPackageConfig)
|
|
78
|
-
const quire11tyVersion = peerDependencies[PACKAGE_NAME]
|
|
79
|
-
return { quire11tyVersion, starterVersion }
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Write version info to the project version file
|
|
84
|
-
*
|
|
85
|
-
* @param {string} projectPath - Absolute system path to the project root
|
|
86
|
-
* @param {Object} versionInfo - Version information to write
|
|
87
|
-
*/
|
|
88
|
-
export function writeVersionFile(projectPath, versionInfo) {
|
|
89
|
-
fs.writeFileSync(path.join(projectPath, VERSION_FILE), JSON.stringify(versionInfo))
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Read version info from the project version file
|
|
94
|
-
*
|
|
95
|
-
* @param {string} projectPath - Absolute system path to the project root
|
|
96
|
-
* @returns {Object|null} Parsed version info or null if file doesn't exist
|
|
97
|
-
*/
|
|
98
|
-
export function readVersionFile(projectPath) {
|
|
99
|
-
const versionFilePath = path.join(projectPath, VERSION_FILE)
|
|
100
|
-
if (!fs.existsSync(versionFilePath)) {
|
|
101
|
-
return null
|
|
102
|
-
}
|
|
103
|
-
const content = fs.readFileSync(versionFilePath, { encoding: 'utf8' })
|
|
104
|
-
try {
|
|
105
|
-
return JSON.parse(content)
|
|
106
|
-
} catch {
|
|
107
|
-
// Legacy format: plain version string
|
|
108
|
-
return { version: content.trim() }
|
|
109
|
-
}
|
|
110
|
-
}
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
import test from 'ava'
|
|
2
|
-
import { Volume, createFsFromVolume } from 'memfs'
|
|
3
|
-
import esmock from 'esmock'
|
|
4
|
-
|
|
5
|
-
test.beforeEach((t) => {
|
|
6
|
-
// Create in-memory file system
|
|
7
|
-
t.context.vol = new Volume()
|
|
8
|
-
t.context.fs = createFsFromVolume(t.context.vol)
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
test.afterEach.always((t) => {
|
|
12
|
-
// Clear in-memory file system
|
|
13
|
-
t.context.vol.reset()
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
-
// getVersion tests
|
|
18
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
-
|
|
20
|
-
test('getVersion should read version from project version file', async (t) => {
|
|
21
|
-
const { fs, vol } = t.context
|
|
22
|
-
|
|
23
|
-
vol.fromJSON({
|
|
24
|
-
'/project/.quire': '1.0.0'
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
const { getVersion } = await esmock('./version.js', {
|
|
28
|
-
'fs-extra': {
|
|
29
|
-
existsSync: (p) => fs.existsSync(p),
|
|
30
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
31
|
-
},
|
|
32
|
-
'./paths.js': {
|
|
33
|
-
default: { getProjectRoot: () => '/project' }
|
|
34
|
-
},
|
|
35
|
-
'#lib/conf/config.js': {
|
|
36
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
const result = getVersion('/project')
|
|
41
|
-
|
|
42
|
-
t.is(result, '1.0.0', 'should return version string')
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
test('getVersion should use default project root when not provided', async (t) => {
|
|
46
|
-
const { fs, vol } = t.context
|
|
47
|
-
|
|
48
|
-
vol.fromJSON({
|
|
49
|
-
'/default/project/.quire': '2.0.0'
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
const { getVersion } = await esmock('./version.js', {
|
|
53
|
-
'fs-extra': {
|
|
54
|
-
existsSync: (p) => fs.existsSync(p),
|
|
55
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
56
|
-
},
|
|
57
|
-
'./paths.js': {
|
|
58
|
-
default: { getProjectRoot: () => '/default/project' }
|
|
59
|
-
},
|
|
60
|
-
'#lib/conf/config.js': {
|
|
61
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
const result = getVersion()
|
|
66
|
-
|
|
67
|
-
t.is(result, '2.0.0', 'should use default project root')
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
71
|
-
// setVersion tests
|
|
72
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
73
|
-
|
|
74
|
-
test('setVersion should create version file with quire11ty field', async (t) => {
|
|
75
|
-
const { fs, vol } = t.context
|
|
76
|
-
|
|
77
|
-
vol.fromJSON({
|
|
78
|
-
'/project/.gitkeep': ''
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
const { setVersion } = await esmock('./version.js', {
|
|
82
|
-
'fs-extra': {
|
|
83
|
-
existsSync: (p) => fs.existsSync(p),
|
|
84
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts),
|
|
85
|
-
writeFileSync: (p, data) => fs.writeFileSync(p, data)
|
|
86
|
-
},
|
|
87
|
-
'./paths.js': {
|
|
88
|
-
default: { getProjectRoot: () => '/project' }
|
|
89
|
-
},
|
|
90
|
-
'#lib/conf/config.js': {
|
|
91
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
setVersion('1.5.0', '/project')
|
|
96
|
-
|
|
97
|
-
const written = fs.readFileSync('/project/.quire', 'utf8')
|
|
98
|
-
const parsed = JSON.parse(written)
|
|
99
|
-
|
|
100
|
-
t.is(parsed.quire11ty, '1.5.0', 'should write version to quire11ty field')
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
test('setVersion should preserve existing version file metadata', async (t) => {
|
|
104
|
-
const { fs, vol } = t.context
|
|
105
|
-
|
|
106
|
-
const existingData = JSON.stringify({
|
|
107
|
-
cli: '1.0.0',
|
|
108
|
-
starter: 'https://example.com/starter@1.0.0',
|
|
109
|
-
quire11ty: '1.0.0'
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
vol.fromJSON({
|
|
113
|
-
'/project/.quire': existingData
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
const { setVersion } = await esmock('./version.js', {
|
|
117
|
-
'fs-extra': {
|
|
118
|
-
existsSync: (p) => fs.existsSync(p),
|
|
119
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts),
|
|
120
|
-
writeFileSync: (p, data) => fs.writeFileSync(p, data)
|
|
121
|
-
},
|
|
122
|
-
'./paths.js': {
|
|
123
|
-
default: { getProjectRoot: () => '/project' }
|
|
124
|
-
},
|
|
125
|
-
'#lib/conf/config.js': {
|
|
126
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
127
|
-
}
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
setVersion('2.0.0', '/project')
|
|
131
|
-
|
|
132
|
-
const written = fs.readFileSync('/project/.quire', 'utf8')
|
|
133
|
-
const parsed = JSON.parse(written)
|
|
134
|
-
|
|
135
|
-
t.is(parsed.quire11ty, '2.0.0', 'should update quire11ty version')
|
|
136
|
-
t.is(parsed.cli, '1.0.0', 'should preserve cli version')
|
|
137
|
-
t.is(parsed.starter, 'https://example.com/starter@1.0.0', 'should preserve starter info')
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
test('setVersion should handle legacy plain text version file', async (t) => {
|
|
141
|
-
const { fs, vol } = t.context
|
|
142
|
-
|
|
143
|
-
// Legacy format: just a version string, not JSON
|
|
144
|
-
vol.fromJSON({
|
|
145
|
-
'/project/.quire': '1.0.0-legacy'
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
const { setVersion } = await esmock('./version.js', {
|
|
149
|
-
'fs-extra': {
|
|
150
|
-
existsSync: (p) => fs.existsSync(p),
|
|
151
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts),
|
|
152
|
-
writeFileSync: (p, data) => fs.writeFileSync(p, data)
|
|
153
|
-
},
|
|
154
|
-
'./paths.js': {
|
|
155
|
-
default: { getProjectRoot: () => '/project' }
|
|
156
|
-
},
|
|
157
|
-
'#lib/conf/config.js': {
|
|
158
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
setVersion('2.0.0', '/project')
|
|
163
|
-
|
|
164
|
-
const written = fs.readFileSync('/project/.quire', 'utf8')
|
|
165
|
-
const parsed = JSON.parse(written)
|
|
166
|
-
|
|
167
|
-
t.is(parsed.quire11ty, '2.0.0', 'should migrate to new JSON format')
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
test('setVersion should use default project root when not provided', async (t) => {
|
|
171
|
-
const { fs, vol } = t.context
|
|
172
|
-
|
|
173
|
-
vol.fromJSON({
|
|
174
|
-
'/default/project/.gitkeep': ''
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
const { setVersion } = await esmock('./version.js', {
|
|
178
|
-
'fs-extra': {
|
|
179
|
-
existsSync: (p) => fs.existsSync(p),
|
|
180
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts),
|
|
181
|
-
writeFileSync: (p, data) => fs.writeFileSync(p, data)
|
|
182
|
-
},
|
|
183
|
-
'./paths.js': {
|
|
184
|
-
default: { getProjectRoot: () => '/default/project' }
|
|
185
|
-
},
|
|
186
|
-
'#lib/conf/config.js': {
|
|
187
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
188
|
-
}
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
setVersion('3.0.0')
|
|
192
|
-
|
|
193
|
-
const written = fs.readFileSync('/default/project/.quire', 'utf8')
|
|
194
|
-
const parsed = JSON.parse(written)
|
|
195
|
-
|
|
196
|
-
t.is(parsed.quire11ty, '3.0.0', 'should use default project root')
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
200
|
-
// getVersionsFromStarter tests
|
|
201
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
202
|
-
|
|
203
|
-
test('getVersionsFromStarter should read versions from package.json', async (t) => {
|
|
204
|
-
const { fs, vol } = t.context
|
|
205
|
-
|
|
206
|
-
const packageJson = JSON.stringify({
|
|
207
|
-
name: 'quire-starter-default',
|
|
208
|
-
version: '1.2.3',
|
|
209
|
-
peerDependencies: {
|
|
210
|
-
'@thegetty/quire-11ty': '^1.0.0'
|
|
211
|
-
}
|
|
212
|
-
})
|
|
213
|
-
|
|
214
|
-
vol.fromJSON({
|
|
215
|
-
'/project/package.json': packageJson
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
const { getVersionsFromStarter } = await esmock('./version.js', {
|
|
219
|
-
'fs-extra': {
|
|
220
|
-
existsSync: (p) => fs.existsSync(p),
|
|
221
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
222
|
-
},
|
|
223
|
-
'./paths.js': {
|
|
224
|
-
default: { getProjectRoot: () => '/project' }
|
|
225
|
-
},
|
|
226
|
-
'#lib/conf/config.js': {
|
|
227
|
-
default: { get: () => '.quire' }
|
|
228
|
-
}
|
|
229
|
-
})
|
|
230
|
-
|
|
231
|
-
const result = await getVersionsFromStarter('/project')
|
|
232
|
-
|
|
233
|
-
t.is(result.quire11tyVersion, '^1.0.0', 'should return quire-11ty version range')
|
|
234
|
-
t.is(result.starterVersion, '1.2.3', 'should return starter version')
|
|
235
|
-
})
|
|
236
|
-
|
|
237
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
238
|
-
// writeVersionFile tests
|
|
239
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
240
|
-
|
|
241
|
-
test('writeVersionFile should write JSON to version file', async (t) => {
|
|
242
|
-
const { fs, vol } = t.context
|
|
243
|
-
|
|
244
|
-
vol.fromJSON({
|
|
245
|
-
'/project/.gitkeep': ''
|
|
246
|
-
})
|
|
247
|
-
|
|
248
|
-
const { writeVersionFile } = await esmock('./version.js', {
|
|
249
|
-
'fs-extra': {
|
|
250
|
-
existsSync: (p) => fs.existsSync(p),
|
|
251
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts),
|
|
252
|
-
writeFileSync: (p, data) => fs.writeFileSync(p, data)
|
|
253
|
-
},
|
|
254
|
-
'./paths.js': {
|
|
255
|
-
default: { getProjectRoot: () => '/project' }
|
|
256
|
-
},
|
|
257
|
-
'#lib/conf/config.js': {
|
|
258
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
259
|
-
}
|
|
260
|
-
})
|
|
261
|
-
|
|
262
|
-
const versionInfo = { cli: '1.0.0', starter: 'test@1.0.0' }
|
|
263
|
-
writeVersionFile('/project', versionInfo)
|
|
264
|
-
|
|
265
|
-
const written = fs.readFileSync('/project/.quire', 'utf8')
|
|
266
|
-
const parsed = JSON.parse(written)
|
|
267
|
-
|
|
268
|
-
t.deepEqual(parsed, versionInfo, 'should write version info as JSON')
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
272
|
-
// readVersionFile tests
|
|
273
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
274
|
-
|
|
275
|
-
test('readVersionFile should return null when file does not exist', async (t) => {
|
|
276
|
-
const { fs, vol } = t.context
|
|
277
|
-
|
|
278
|
-
vol.fromJSON({
|
|
279
|
-
'/project/.gitkeep': ''
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
const { readVersionFile } = await esmock('./version.js', {
|
|
283
|
-
'fs-extra': {
|
|
284
|
-
existsSync: (p) => fs.existsSync(p),
|
|
285
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
286
|
-
},
|
|
287
|
-
'./paths.js': {
|
|
288
|
-
default: { getProjectRoot: () => '/project' }
|
|
289
|
-
},
|
|
290
|
-
'#lib/conf/config.js': {
|
|
291
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
292
|
-
}
|
|
293
|
-
})
|
|
294
|
-
|
|
295
|
-
const result = readVersionFile('/project')
|
|
296
|
-
|
|
297
|
-
t.is(result, null, 'should return null when file does not exist')
|
|
298
|
-
})
|
|
299
|
-
|
|
300
|
-
test('readVersionFile should parse JSON version file', async (t) => {
|
|
301
|
-
const { fs, vol } = t.context
|
|
302
|
-
|
|
303
|
-
const versionInfo = { cli: '1.0.0', quire11ty: '1.5.0' }
|
|
304
|
-
vol.fromJSON({
|
|
305
|
-
'/project/.quire': JSON.stringify(versionInfo)
|
|
306
|
-
})
|
|
307
|
-
|
|
308
|
-
const { readVersionFile } = await esmock('./version.js', {
|
|
309
|
-
'fs-extra': {
|
|
310
|
-
existsSync: (p) => fs.existsSync(p),
|
|
311
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
312
|
-
},
|
|
313
|
-
'./paths.js': {
|
|
314
|
-
default: { getProjectRoot: () => '/project' }
|
|
315
|
-
},
|
|
316
|
-
'#lib/conf/config.js': {
|
|
317
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
318
|
-
}
|
|
319
|
-
})
|
|
320
|
-
|
|
321
|
-
const result = readVersionFile('/project')
|
|
322
|
-
|
|
323
|
-
t.deepEqual(result, versionInfo, 'should parse and return version info')
|
|
324
|
-
})
|
|
325
|
-
|
|
326
|
-
test('readVersionFile should handle legacy plain text format', async (t) => {
|
|
327
|
-
const { fs, vol } = t.context
|
|
328
|
-
|
|
329
|
-
// Legacy format: plain version string
|
|
330
|
-
vol.fromJSON({
|
|
331
|
-
'/project/.quire': '1.0.0-legacy'
|
|
332
|
-
})
|
|
333
|
-
|
|
334
|
-
const { readVersionFile } = await esmock('./version.js', {
|
|
335
|
-
'fs-extra': {
|
|
336
|
-
existsSync: (p) => fs.existsSync(p),
|
|
337
|
-
readFileSync: (p, opts) => fs.readFileSync(p, opts)
|
|
338
|
-
},
|
|
339
|
-
'./paths.js': {
|
|
340
|
-
default: { getProjectRoot: () => '/project' }
|
|
341
|
-
},
|
|
342
|
-
'#lib/conf/config.js': {
|
|
343
|
-
default: { get: (key) => key === 'versionFile' ? '.quire' : null }
|
|
344
|
-
}
|
|
345
|
-
})
|
|
346
|
-
|
|
347
|
-
const result = readVersionFile('/project')
|
|
348
|
-
|
|
349
|
-
t.deepEqual(result, { version: '1.0.0-legacy' }, 'should return legacy format as object')
|
|
350
|
-
})
|