@hubspot/project-parsing-lib 0.9.0 → 0.10.0-beta.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/package.json +1 -1
- package/src/lang/copy.d.ts +1 -0
- package/src/lang/copy.js +1 -0
- package/src/lib/constants.d.ts +3 -0
- package/src/lib/constants.js +15 -1
- package/src/lib/files.js +11 -0
package/package.json
CHANGED
package/src/lang/copy.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare const errorMessages: {
|
|
|
31
31
|
unsupportedType: (type: string) => string;
|
|
32
32
|
errorWithField: (field: string, error: string | undefined) => string;
|
|
33
33
|
invalidJson: string;
|
|
34
|
+
unexpectedToplevelFields: (unexpectedFields: string) => string;
|
|
34
35
|
wrongDirectoryForComponent: (directory: string, componentType: string, componentMetadata: ComponentMetadata, correctDir: string) => string;
|
|
35
36
|
};
|
|
36
37
|
migrateThemes: {
|
package/src/lang/copy.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.errorMessages = {
|
|
|
42
42
|
unsupportedType: (type) => `Unsupported type: ${(0, transform_1.mapToUserFacingType)(type)}`,
|
|
43
43
|
errorWithField: (field, error) => `${field}: ${error || 'Unknown error'}`,
|
|
44
44
|
invalidJson: 'Invalid JSON',
|
|
45
|
+
unexpectedToplevelFields: (unexpectedFields) => `Unexpected top-level properties found: ${unexpectedFields}`,
|
|
45
46
|
wrongDirectoryForComponent: (directory, componentType, componentMetadata, correctDir) => `The directory '${directory}' is incorrect for type '${componentType}'. ${componentMetadata.userFriendlyName} ${componentMetadata.userFriendlyTypePlural} should only be placed in the '${correctDir}' directory`,
|
|
46
47
|
},
|
|
47
48
|
migrateThemes: {
|
package/src/lib/constants.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Components as ComponentsTopLevel } from './types';
|
|
1
2
|
export declare const AppKey = "app";
|
|
2
3
|
export declare const ThemeKey = "theme";
|
|
3
4
|
export declare const CmsAssetsKey = "cms-assets";
|
|
@@ -16,6 +17,7 @@ export declare const SettingsKey = "settings";
|
|
|
16
17
|
export declare const TelemetryKey = "telemetry";
|
|
17
18
|
export declare const VideoConferencingKey = "video-conferencing";
|
|
18
19
|
export declare const WebhooksKey = "webhooks";
|
|
20
|
+
export declare const WebhooksJournalKey = "webhooks-journal";
|
|
19
21
|
export declare const WorkflowActionsKey = "workflow-action";
|
|
20
22
|
export declare const AppFunctionsPackageKey = "serverless-package";
|
|
21
23
|
export declare const AutoGeneratedComponentTypes: string[];
|
|
@@ -52,3 +54,4 @@ export declare const ProfileVariableTypes: {
|
|
|
52
54
|
readonly PROFILE_STRING: "PROFILE_STRING";
|
|
53
55
|
readonly PROFILE_BOOLEAN: "PROFILE_BOOLEAN";
|
|
54
56
|
};
|
|
57
|
+
export declare const allowedTopLevelFields: Set<keyof ComponentsTopLevel>;
|
package/src/lib/constants.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ProfileVariableTypes = exports.allowedSubComponentDirectories = exports.allowedComponentDirectories = exports.ProjectStructure = exports.allowedCmsAssetSubComponentDirs = exports.allowedThemeSubComponentsDirs = exports.allowedAppSubComponentsDirs = exports.packageLockJson = exports.packageJson = exports.hsProjectJsonFilename = exports.profileFilePrefix = exports.metafileExtension = exports.internalTypeToUserFacing = exports.userFacingToInternalType = exports.Components = exports.AutoGeneratedComponentTypes = exports.AppFunctionsPackageKey = exports.WorkflowActionsKey = exports.WebhooksKey = exports.VideoConferencingKey = exports.TelemetryKey = exports.SettingsKey = exports.MediaBridgeKey = exports.MCPRegistryKey = exports.MarketingEventsKey = exports.SCIMKey = exports.CardsKey = exports.CallingKey = exports.AppObjectAssociationKey = exports.AppObjectKey = exports.PagesKey = exports.AppFunctionsKey = exports.AppEventsKey = exports.CmsAssetsKey = exports.ThemeKey = exports.AppKey = void 0;
|
|
36
|
+
exports.allowedTopLevelFields = exports.ProfileVariableTypes = exports.allowedSubComponentDirectories = exports.allowedComponentDirectories = exports.ProjectStructure = exports.allowedCmsAssetSubComponentDirs = exports.allowedThemeSubComponentsDirs = exports.allowedAppSubComponentsDirs = exports.packageLockJson = exports.packageJson = exports.hsProjectJsonFilename = exports.profileFilePrefix = exports.metafileExtension = exports.internalTypeToUserFacing = exports.userFacingToInternalType = exports.Components = exports.AutoGeneratedComponentTypes = exports.AppFunctionsPackageKey = exports.WorkflowActionsKey = exports.WebhooksJournalKey = exports.WebhooksKey = exports.VideoConferencingKey = exports.TelemetryKey = exports.SettingsKey = exports.MediaBridgeKey = exports.MCPRegistryKey = exports.MarketingEventsKey = exports.SCIMKey = exports.CardsKey = exports.CallingKey = exports.AppObjectAssociationKey = exports.AppObjectKey = exports.PagesKey = exports.AppFunctionsKey = exports.AppEventsKey = exports.CmsAssetsKey = exports.ThemeKey = exports.AppKey = void 0;
|
|
37
37
|
// Top Level Component types
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
// Component types
|
|
@@ -56,6 +56,7 @@ exports.SettingsKey = 'settings';
|
|
|
56
56
|
exports.TelemetryKey = 'telemetry';
|
|
57
57
|
exports.VideoConferencingKey = 'video-conferencing';
|
|
58
58
|
exports.WebhooksKey = 'webhooks';
|
|
59
|
+
exports.WebhooksJournalKey = 'webhooks-journal';
|
|
59
60
|
exports.WorkflowActionsKey = 'workflow-action';
|
|
60
61
|
// Auto-generated component types
|
|
61
62
|
exports.AppFunctionsPackageKey = 'serverless-package';
|
|
@@ -170,6 +171,13 @@ exports.Components = {
|
|
|
170
171
|
...SubComponentFields,
|
|
171
172
|
singularComponent: true,
|
|
172
173
|
},
|
|
174
|
+
[exports.WebhooksJournalKey]: {
|
|
175
|
+
dir: exports.WebhooksJournalKey,
|
|
176
|
+
parentComponent: exports.AppKey,
|
|
177
|
+
userFriendlyName: 'Webhooks Journal',
|
|
178
|
+
...SubComponentFields,
|
|
179
|
+
singularComponent: true,
|
|
180
|
+
},
|
|
173
181
|
[exports.WorkflowActionsKey]: {
|
|
174
182
|
dir: 'workflow-actions',
|
|
175
183
|
parentComponent: exports.AppKey,
|
|
@@ -230,3 +238,9 @@ exports.ProfileVariableTypes = {
|
|
|
230
238
|
PROFILE_STRING: 'PROFILE_STRING',
|
|
231
239
|
PROFILE_BOOLEAN: 'PROFILE_BOOLEAN',
|
|
232
240
|
};
|
|
241
|
+
exports.allowedTopLevelFields = new Set([
|
|
242
|
+
'uid',
|
|
243
|
+
'type',
|
|
244
|
+
'config',
|
|
245
|
+
'dependencies',
|
|
246
|
+
]);
|
package/src/lib/files.js
CHANGED
|
@@ -107,6 +107,17 @@ function parseFile(fileLoadResult) {
|
|
|
107
107
|
catch (_e) {
|
|
108
108
|
fileLoadResult.errors?.push(copy_1.errorMessages.validation.invalidJson);
|
|
109
109
|
}
|
|
110
|
+
// Validate top-level fields (only uid, type, and config are expected)
|
|
111
|
+
if (parsedFileContents &&
|
|
112
|
+
typeof parsedFileContents === 'object' &&
|
|
113
|
+
!Array.isArray(parsedFileContents)) {
|
|
114
|
+
const actualFields = Object.keys(parsedFileContents);
|
|
115
|
+
const unexpectedFields = actualFields.filter(field => !constants_1.allowedTopLevelFields.has(field));
|
|
116
|
+
if (unexpectedFields.length > 0) {
|
|
117
|
+
const unexpectedFieldsList = unexpectedFields.join(', ');
|
|
118
|
+
fileLoadResult.errors?.push(copy_1.errorMessages.validation.unexpectedToplevelFields(unexpectedFieldsList));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
110
121
|
return { ...fileLoadResult, content: parsedFileContents };
|
|
111
122
|
}
|
|
112
123
|
async function projectContainsHsMetaFiles(projectSourceDir) {
|