@researchdatabox/redbox-dev-tools 0.0.1-beta.9018 → 0.0.1-beta.9020

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.
@@ -86,15 +86,58 @@ function toOutputRelativePath(templateRoot, filePath) {
86
86
  function shouldMarkExecutable(relativePath) {
87
87
  return relativePath.endsWith('.sh');
88
88
  }
89
- function readPackageVersion(packageRoot, packageName) {
90
- const packageJsonPath = path.join(packageRoot, '..', packageName, 'package.json');
91
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
92
- if (!packageJson.version) {
93
- throw new Error(`Could not determine version for ${packageName}`);
89
+ function readPackageJson(packageJsonPath) {
90
+ return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
91
+ }
92
+ function tryReadPackageJson(packageJsonPath) {
93
+ return fs.existsSync(packageJsonPath)
94
+ ? readPackageJson(packageJsonPath)
95
+ : undefined;
96
+ }
97
+ function getScopedPackageName(packageName) {
98
+ return `@researchdatabox/${packageName}`;
99
+ }
100
+ function readOwnPackageVersion(packageRoot) {
101
+ const packageJson = tryReadPackageJson(path.join(packageRoot, 'package.json'));
102
+ if (!packageJson?.version) {
103
+ throw new Error('Could not determine version for @researchdatabox/redbox-dev-tools');
94
104
  }
95
105
  return packageJson.version;
96
106
  }
107
+ function tryReadInstalledPackageVersion(packageRoot, packageName) {
108
+ const packageJsonPath = path.join(packageRoot, 'node_modules', ...getScopedPackageName(packageName).split('/'), 'package.json');
109
+ return tryReadPackageJson(packageJsonPath)?.version;
110
+ }
111
+ function isReusableDependencySpecifier(versionSpecifier) {
112
+ return !/^(file:|workspace:|link:|portal:)/.test(versionSpecifier);
113
+ }
114
+ function readDeclaredDependencyVersion(packageRoot, packageName) {
115
+ const packageJson = tryReadPackageJson(path.join(packageRoot, 'package.json'));
116
+ const dependencyName = getScopedPackageName(packageName);
117
+ const versionSpecifier = packageJson?.dependencies?.[dependencyName]
118
+ ?? packageJson?.peerDependencies?.[dependencyName]
119
+ ?? packageJson?.devDependencies?.[dependencyName];
120
+ return versionSpecifier && isReusableDependencySpecifier(versionSpecifier)
121
+ ? versionSpecifier
122
+ : undefined;
123
+ }
124
+ function readDependencyPackageVersion(packageRoot, packageName) {
125
+ const installedVersion = tryReadInstalledPackageVersion(packageRoot, packageName);
126
+ if (installedVersion) {
127
+ return installedVersion;
128
+ }
129
+ const siblingPackageJson = tryReadPackageJson(path.join(packageRoot, '..', packageName, 'package.json'));
130
+ if (siblingPackageJson?.version) {
131
+ return siblingPackageJson.version;
132
+ }
133
+ const declaredVersion = readDeclaredDependencyVersion(packageRoot, packageName);
134
+ if (declaredVersion) {
135
+ return declaredVersion;
136
+ }
137
+ throw new Error(`Could not determine version for ${getScopedPackageName(packageName)}`);
138
+ }
97
139
  function buildTemplateContext(options) {
140
+ const packageRoot = getPackageRoot();
98
141
  const packageName = normalizePackageName(options.packageName);
99
142
  const hookShortName = packageName.replace(/^redbox-hook-/, '');
100
143
  const hookPascalName = toPascalCase(hookShortName);
@@ -104,8 +147,8 @@ function buildTemplateContext(options) {
104
147
  hookPascalName,
105
148
  description: options.description ?? `ReDBox hook for ${hookPascalName}`,
106
149
  integrationDirName: hookShortName,
107
- redboxCoreVersion: readPackageVersion(getPackageRoot(), 'redbox-core'),
108
- redboxDevToolsVersion: readPackageVersion(getPackageRoot(), 'redbox-dev-tools'),
150
+ redboxCoreVersion: readDependencyPackageVersion(packageRoot, 'redbox-core'),
151
+ redboxDevToolsVersion: readOwnPackageVersion(packageRoot),
109
152
  };
110
153
  }
111
154
  function generateHookArchetype(options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@researchdatabox/redbox-dev-tools",
3
- "version": "0.0.1-beta.9018",
3
+ "version": "0.0.1-beta.9020",
4
4
  "description": "ReDBox customisation dev tools - shared configuration, generators, and migration tooling",
5
5
  "type": "commonjs",
6
6
  "main": "index.js",
@@ -44,8 +44,8 @@
44
44
  },
45
45
  "homepage": "https://github.com/redbox-mint/redbox-portal/tree/v4.5.1#readme",
46
46
  "dependencies": {
47
- "@researchdatabox/redbox-core": "0.0.1-beta.9018",
48
- "@researchdatabox/sails-ng-common": "0.0.1-beta.9018",
47
+ "@researchdatabox/redbox-core": "0.0.1-beta.9020",
48
+ "@researchdatabox/sails-ng-common": "0.0.1-beta.9020",
49
49
  "@tsconfig/node24": "24.0.1",
50
50
  "@types/chai": "5.2.3",
51
51
  "@types/lodash": "4.17.24",
@@ -64,8 +64,8 @@
64
64
  "zod": "3.25.28"
65
65
  },
66
66
  "devDependencies": {
67
- "@types/sinon": "17.0.3",
68
- "sinon": "17.0.1"
67
+ "@types/sinon": "21.0.1",
68
+ "sinon": "21.1.2"
69
69
  },
70
70
  "peerDependenciesMeta": {
71
71
  "@researchdatabox/redbox-core": {