@hubspot/local-dev-lib 0.7.2-experimental.0 → 0.7.4-experimental.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/defaultAccountOverride.d.ts +1 -0
- package/config/defaultAccountOverride.js +15 -0
- package/config/hsSettings.d.ts +4 -0
- package/config/hsSettings.js +57 -0
- package/config/index.d.ts +1 -1
- package/config/index.js +13 -2
- package/constants/config.d.ts +3 -0
- package/constants/config.js +3 -0
- package/constants/projects.d.ts +0 -1
- package/constants/projects.js +0 -1
- package/lib/gitignore.d.ts +1 -0
- package/lib/gitignore.js +22 -1
- package/package.json +3 -2
- package/types/Files.d.ts +0 -1
- package/types/HsSettings.d.ts +4 -0
- package/types/HsSettings.js +1 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { HubSpotConfigAccount } from '../types/Accounts.js';
|
|
2
2
|
export declare function getDefaultAccountOverrideAccountId(accounts: Array<HubSpotConfigAccount>): number | null;
|
|
3
|
+
export declare function removeDefaultAccountOverrideFile(): void;
|
|
3
4
|
export declare function getDefaultAccountOverrideFilePath(): string | null;
|
|
@@ -40,6 +40,21 @@ export function getDefaultAccountOverrideAccountId(accounts) {
|
|
|
40
40
|
}
|
|
41
41
|
return account.accountId;
|
|
42
42
|
}
|
|
43
|
+
export function removeDefaultAccountOverrideFile() {
|
|
44
|
+
const filePath = getDefaultAccountOverrideFilePath();
|
|
45
|
+
if (!filePath) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
fs.unlinkSync(filePath);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new FileSystemError({ cause: e }, {
|
|
53
|
+
filepath: filePath,
|
|
54
|
+
operation: 'write',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
43
58
|
export function getDefaultAccountOverrideFilePath() {
|
|
44
59
|
return findup([DEFAULT_ACCOUNT_OVERRIDE_FILE_NAME], {
|
|
45
60
|
cwd: getCwd(),
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { HsSettingsFile } from '../types/HsSettings.js';
|
|
2
|
+
export declare function getHsSettingsFilePath(): string | null;
|
|
3
|
+
export declare function getHsSettingsFile(): HsSettingsFile | null;
|
|
4
|
+
export declare function writeHsSettingsFile(settingsFile: HsSettingsFile): void;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import findupSync from 'findup-sync';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { HS_FOLDER, HS_README_FILENAME, HS_SETTINGS_FILENAME, } from '../constants/config.js';
|
|
5
|
+
import { getCwd } from '../lib/path.js';
|
|
6
|
+
import { FileSystemError } from '../models/FileSystemError.js';
|
|
7
|
+
const HS_README_CONTENTS = `Why do I have a folder named ".hs" in my project?
|
|
8
|
+
The ".hs" folder is created when you link a directory to a HubSpot project.
|
|
9
|
+
|
|
10
|
+
What does the "settings.json" file contain?
|
|
11
|
+
The "settings.json" file contains:
|
|
12
|
+
- The ID(s) of the HubSpot account(s) that you linked ("accounts")
|
|
13
|
+
- The ID of the HubSpot account that you set as the default for this directory ("linkedDefaultAccount")
|
|
14
|
+
|
|
15
|
+
Should I commit the ".hs" folder?
|
|
16
|
+
No, the ".hs" folder should not be committed to version control. It is automatically added to your .gitignore file when the directory is linked.
|
|
17
|
+
`;
|
|
18
|
+
export function getHsSettingsFilePath() {
|
|
19
|
+
return findupSync([`${HS_FOLDER}/${HS_SETTINGS_FILENAME}`], {
|
|
20
|
+
cwd: getCwd(),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function getHsSettingsFile() {
|
|
24
|
+
const hsSettingsFilePath = getHsSettingsFilePath();
|
|
25
|
+
if (!hsSettingsFilePath) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
let hsSettingsFile;
|
|
29
|
+
try {
|
|
30
|
+
hsSettingsFile = JSON.parse(fs.readFileSync(hsSettingsFilePath, 'utf-8'));
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
throw new FileSystemError({ cause: e }, {
|
|
34
|
+
filepath: hsSettingsFilePath,
|
|
35
|
+
operation: 'read',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return hsSettingsFile;
|
|
39
|
+
}
|
|
40
|
+
export function writeHsSettingsFile(settingsFile) {
|
|
41
|
+
const dir = getCwd();
|
|
42
|
+
const hsFolderPath = path.join(dir, HS_FOLDER);
|
|
43
|
+
const isFirstScaffold = !fs.existsSync(hsFolderPath);
|
|
44
|
+
try {
|
|
45
|
+
fs.mkdirSync(hsFolderPath, { recursive: true });
|
|
46
|
+
fs.writeFileSync(path.join(dir, HS_FOLDER, HS_SETTINGS_FILENAME), JSON.stringify(settingsFile, null, 2), 'utf8');
|
|
47
|
+
if (isFirstScaffold) {
|
|
48
|
+
fs.writeFileSync(path.join(hsFolderPath, HS_README_FILENAME), HS_README_CONTENTS, 'utf8');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
throw new FileSystemError({ cause: err }, {
|
|
53
|
+
filepath: dir,
|
|
54
|
+
operation: 'write',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
package/config/index.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare function getConfigAccountByName(accountName: string): HubSpotConf
|
|
|
17
17
|
export declare function getConfigAccountIfExists(identifier: number | string): HubSpotConfigAccount | undefined;
|
|
18
18
|
export declare function getConfigDefaultAccount(): HubSpotConfigAccount;
|
|
19
19
|
export declare function getConfigDefaultAccountIfExists(): HubSpotConfigAccount | undefined;
|
|
20
|
-
export declare function getAllConfigAccounts(): HubSpotConfigAccount[];
|
|
20
|
+
export declare function getAllConfigAccounts(showAll?: boolean): HubSpotConfigAccount[];
|
|
21
21
|
export declare function getConfigAccountEnvironment(identifier: number | string): Environment;
|
|
22
22
|
export declare function addConfigAccount(accountToAdd: HubSpotConfigAccount): void;
|
|
23
23
|
export declare function updateConfigAccount(updatedAccount: HubSpotConfigAccount): void;
|
package/config/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { HubSpotConfigError } from '../models/HubSpotConfigError.js';
|
|
|
11
11
|
import { HUBSPOT_CONFIG_ERROR_TYPES } from '../constants/config.js';
|
|
12
12
|
import { isDeepEqual } from '../lib/isDeepEqual.js';
|
|
13
13
|
import { getCwd } from '../lib/path.js';
|
|
14
|
+
import { getHsSettingsFile } from './hsSettings.js';
|
|
14
15
|
const EMPTY_CONFIG = { accounts: [] };
|
|
15
16
|
export function getGlobalConfigFilePath() {
|
|
16
17
|
return GLOBAL_CONFIG_PATH;
|
|
@@ -179,14 +180,24 @@ export function getConfigDefaultAccountIfExists() {
|
|
|
179
180
|
const defaultAccountOverrideAccountId = getDefaultAccountOverrideAccountId(accounts);
|
|
180
181
|
defaultAccountToUse = defaultAccountOverrideAccountId || defaultAccount;
|
|
181
182
|
}
|
|
183
|
+
// Use the default account if .hs/settings.json is present
|
|
184
|
+
const hsSettingsFile = getHsSettingsFile();
|
|
185
|
+
if (hsSettingsFile && hsSettingsFile.localDefaultAccount) {
|
|
186
|
+
defaultAccountToUse = hsSettingsFile.localDefaultAccount;
|
|
187
|
+
}
|
|
182
188
|
if (!defaultAccountToUse) {
|
|
183
189
|
return;
|
|
184
190
|
}
|
|
185
191
|
const account = getConfigAccountByInferredIdentifier(accounts, defaultAccountToUse);
|
|
186
192
|
return account;
|
|
187
193
|
}
|
|
188
|
-
export function getAllConfigAccounts() {
|
|
189
|
-
|
|
194
|
+
export function getAllConfigAccounts(showAll) {
|
|
195
|
+
let { accounts } = getConfig();
|
|
196
|
+
// Show only accounts in the .hs/settings.json file
|
|
197
|
+
if (!showAll) {
|
|
198
|
+
const hsSettingsFile = getHsSettingsFile();
|
|
199
|
+
accounts = accounts.filter(a => hsSettingsFile ? hsSettingsFile.accounts.includes(a.accountId) : true);
|
|
200
|
+
}
|
|
190
201
|
return accounts;
|
|
191
202
|
}
|
|
192
203
|
export function getConfigAccountEnvironment(identifier) {
|
package/constants/config.d.ts
CHANGED
|
@@ -102,3 +102,6 @@ export declare const HUBSPOT_CONFIG_OPERATIONS: {
|
|
|
102
102
|
readonly WRITE: "WRITE";
|
|
103
103
|
readonly DELETE: "DELETE";
|
|
104
104
|
};
|
|
105
|
+
export declare const HS_FOLDER = ".hs";
|
|
106
|
+
export declare const HS_SETTINGS_FILENAME = "settings.json";
|
|
107
|
+
export declare const HS_README_FILENAME = "README.txt";
|
package/constants/config.js
CHANGED
package/constants/projects.d.ts
CHANGED
package/constants/projects.js
CHANGED
package/lib/gitignore.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { GitInclusionResult } from '../types/Config.js';
|
|
2
2
|
export declare function checkAndAddConfigToGitignore(configPath: string): void;
|
|
3
|
+
export declare function checkAndAddSettingsToGitignore(settingsPath: string): void;
|
|
3
4
|
export declare function checkGitInclusion(configPath: string): GitInclusionResult;
|
package/lib/gitignore.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { isConfigPathInGitRepo, getGitignoreFiles, configFilenameIsIgnoredByGitignore, } from '../utils/git.js';
|
|
4
|
-
import { DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME } from '../constants/config.js';
|
|
4
|
+
import { DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME, HS_FOLDER, } from '../constants/config.js';
|
|
5
5
|
import { i18n } from '../utils/lang.js';
|
|
6
6
|
const i18nKey = 'lib.gitignore';
|
|
7
7
|
const GITIGNORE_FILE = '.gitignore';
|
|
@@ -23,6 +23,27 @@ export function checkAndAddConfigToGitignore(configPath) {
|
|
|
23
23
|
throw new Error(i18n(`${i18nKey}.errors.configIgnore`), { cause: e });
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
export function checkAndAddSettingsToGitignore(settingsPath) {
|
|
27
|
+
try {
|
|
28
|
+
const hsDirPath = path.resolve(path.dirname(settingsPath));
|
|
29
|
+
const { configIgnored, gitignoreFiles } = checkGitInclusion(hsDirPath);
|
|
30
|
+
if (configIgnored)
|
|
31
|
+
return;
|
|
32
|
+
let gitignoreFilePath = gitignoreFiles && gitignoreFiles.length ? gitignoreFiles[0] : null;
|
|
33
|
+
if (!gitignoreFilePath) {
|
|
34
|
+
gitignoreFilePath = path.join(path.dirname(hsDirPath), GITIGNORE_FILE);
|
|
35
|
+
fs.writeFileSync(gitignoreFilePath, '');
|
|
36
|
+
}
|
|
37
|
+
const gitignoreContents = fs.readFileSync(gitignoreFilePath).toString();
|
|
38
|
+
if (gitignoreContents.includes(HS_FOLDER))
|
|
39
|
+
return;
|
|
40
|
+
const updatedContents = `${gitignoreContents.trim()}\n\n# HubSpot link folder\n${HS_FOLDER}\n`;
|
|
41
|
+
fs.writeFileSync(gitignoreFilePath, updatedContents);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
throw new Error(i18n(`${i18nKey}.errors.configIgnore`), { cause: e });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
26
47
|
export function checkGitInclusion(configPath) {
|
|
27
48
|
const result = {
|
|
28
49
|
inGit: false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hubspot/local-dev-lib",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4-experimental.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Provides library functionality for HubSpot local development tooling, including the HubSpot CLI",
|
|
6
6
|
"repository": {
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"./config/defaultAccountOverride": "./config/defaultAccountOverride.js",
|
|
56
56
|
"./config/migrate": "./config/migrate.js",
|
|
57
57
|
"./config/state": "./config/state.js",
|
|
58
|
+
"./config/hsSettings": "./config/hsSettings.js",
|
|
58
59
|
"./config": "./config/index.js",
|
|
59
60
|
"./constants/*": "./constants/*.js",
|
|
60
61
|
"./enums/*": "./enums/*.js",
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
"http-proxy-agent": "7.0.2",
|
|
81
82
|
"https-proxy-agent": "7.0.6",
|
|
82
83
|
"ignore": "^7.0.0",
|
|
83
|
-
"js-yaml": "4.1.
|
|
84
|
+
"js-yaml": "4.1.0",
|
|
84
85
|
"moment": "2.30.1",
|
|
85
86
|
"p-queue": "^7.0.0",
|
|
86
87
|
"prettier": "^3.6.2",
|
package/types/Files.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|