auth0-deploy-cli 8.0.0 → 8.2.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/.nyc_output/22a18025-9f7a-437a-8a03-9b2d634bd0a0.json +1 -0
- package/.nyc_output/processinfo/22a18025-9f7a-437a-8a03-9b2d634bd0a0.json +1 -0
- package/.nyc_output/processinfo/43514efa-958a-42dc-98b7-6a094257d3c1.json +1 -0
- package/.nyc_output/processinfo/97d5e38d-7d72-4b1a-b747-5dd4b539b6f0.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +22 -1
- package/coverage/lcov-report/index.html +46 -46
- package/coverage/lcov.info +2381 -1389
- package/docs/configuring-the-deploy-cli.md +8 -0
- package/lib/context/directory/handlers/flowVaultConnections.d.ts +6 -0
- package/lib/context/directory/handlers/flowVaultConnections.js +81 -0
- package/lib/context/directory/handlers/flowVaultConnections.js.map +1 -0
- package/lib/context/directory/handlers/flows.d.ts +6 -0
- package/lib/context/directory/handlers/flows.js +80 -0
- package/lib/context/directory/handlers/flows.js.map +1 -0
- package/lib/context/directory/handlers/forms.d.ts +6 -0
- package/lib/context/directory/handlers/forms.js +80 -0
- package/lib/context/directory/handlers/forms.js.map +1 -0
- package/lib/context/directory/handlers/index.js +6 -0
- package/lib/context/directory/handlers/index.js.map +1 -1
- package/lib/context/yaml/handlers/flowVaultConnections.d.ts +6 -0
- package/lib/context/yaml/handlers/flowVaultConnections.js +66 -0
- package/lib/context/yaml/handlers/flowVaultConnections.js.map +1 -0
- package/lib/context/yaml/handlers/flows.d.ts +6 -0
- package/lib/context/yaml/handlers/flows.js +92 -0
- package/lib/context/yaml/handlers/flows.js.map +1 -0
- package/lib/context/yaml/handlers/forms.d.ts +6 -0
- package/lib/context/yaml/handlers/forms.js +92 -0
- package/lib/context/yaml/handlers/forms.js.map +1 -0
- package/lib/context/yaml/handlers/index.js +6 -0
- package/lib/context/yaml/handlers/index.js.map +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/tools/auth0/handlers/flowVaultConnections.d.ts +53 -0
- package/lib/tools/auth0/handlers/flowVaultConnections.js +188 -0
- package/lib/tools/auth0/handlers/flowVaultConnections.js.map +1 -0
- package/lib/tools/auth0/handlers/flows.d.ts +32 -0
- package/lib/tools/auth0/handlers/flows.js +156 -0
- package/lib/tools/auth0/handlers/flows.js.map +1 -0
- package/lib/tools/auth0/handlers/forms.d.ts +32 -0
- package/lib/tools/auth0/handlers/forms.js +137 -0
- package/lib/tools/auth0/handlers/forms.js.map +1 -0
- package/lib/tools/auth0/handlers/index.js +6 -0
- package/lib/tools/auth0/handlers/index.js.map +1 -1
- package/lib/tools/auth0/handlers/organizations.d.ts +24 -0
- package/lib/tools/auth0/handlers/organizations.js +125 -7
- package/lib/tools/auth0/handlers/organizations.js.map +1 -1
- package/lib/tools/constants.d.ts +4 -0
- package/lib/tools/constants.js +26 -0
- package/lib/tools/constants.js.map +1 -1
- package/lib/tools/index.d.ts +4 -0
- package/lib/types.d.ts +7 -1
- package/lib/types.js.map +1 -1
- package/lib/utils.d.ts +7 -0
- package/lib/utils.js +25 -0
- package/lib/utils.js.map +1 -1
- package/package.json +7 -7
- package/.nyc_output/21e10bd2-0a3e-4ba1-bd1d-f10aec1ae717.json +0 -1
- package/.nyc_output/processinfo/21e10bd2-0a3e-4ba1-bd1d-f10aec1ae717.json +0 -1
- package/.nyc_output/processinfo/5682adea-ce69-4464-a15f-6e98b29ca5cf.json +0 -1
- package/.nyc_output/processinfo/cb634365-204c-4c03-9f35-74638d381757.json +0 -1
- /package/.nyc_output/{5682adea-ce69-4464-a15f-6e98b29ca5cf.json → 43514efa-958a-42dc-98b7-6a094257d3c1.json} +0 -0
- /package/.nyc_output/{cb634365-204c-4c03-9f35-74638d381757.json → 97d5e38d-7d72-4b1a-b747-5dd4b539b6f0.json} +0 -0
|
@@ -48,6 +48,14 @@ export AUTH0_KEYWORD_REPLACE_MAPPINGS='{"ENVIRONMENT":"dev"}'
|
|
|
48
48
|
a0deploy export -c=config.json --format=yaml --output_folder=local
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
### Free Tier
|
|
52
|
+
|
|
53
|
+
Certain Auth0 resources require a paid plan with a verified credit card on file to manage. On free tier tenants, logStreams need to be excluded in `config.json`. You can also exclude customDomains, if you don't want to add credit card information.
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
"AUTH0_EXCLUDED": ["logStreams", "customDomains"]
|
|
57
|
+
```
|
|
58
|
+
|
|
51
59
|
## Available Configuration Properties
|
|
52
60
|
|
|
53
61
|
### `AUTH0_DOMAIN`
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DirectoryHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { FlowVaultConnection } from '../../../tools/auth0/handlers/flowVaultConnections';
|
|
4
|
+
type ParsedFlowVaults = ParsedAsset<'flowVaultConnections', FlowVaultConnection[]>;
|
|
5
|
+
declare const flowVaultsHandler: DirectoryHandler<ParsedFlowVaults>;
|
|
6
|
+
export default flowVaultsHandler;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const lodash_1 = require("lodash");
|
|
18
|
+
const tools_1 = require("../../../tools");
|
|
19
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
20
|
+
const utils_1 = require("../../../utils");
|
|
21
|
+
function parse(context) {
|
|
22
|
+
const flowVaultsFolder = path_1.default.join(context.filePath, tools_1.constants.FLOWS_VAULT_DIRECTORY);
|
|
23
|
+
if (!(0, utils_1.existsMustBeDir)(flowVaultsFolder))
|
|
24
|
+
return { flowVaultConnections: null }; // Skip
|
|
25
|
+
const files = (0, utils_1.getFiles)(flowVaultsFolder, ['.json']);
|
|
26
|
+
const flowVaultConnections = files.map((f) => {
|
|
27
|
+
const connection = Object.assign({}, (0, utils_1.loadJSON)(f, {
|
|
28
|
+
mappings: context.mappings,
|
|
29
|
+
disableKeywordReplacement: context.disableKeywordReplacement,
|
|
30
|
+
}));
|
|
31
|
+
return connection;
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
flowVaultConnections,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function dump(context) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const { flowVaultConnections } = context.assets;
|
|
40
|
+
if (!flowVaultConnections || (0, lodash_1.isEmpty)(flowVaultConnections))
|
|
41
|
+
return; // Skip, nothing to dump
|
|
42
|
+
// Check if there is any duplicate form name
|
|
43
|
+
const vaultConnectionsNamesSet = new Set();
|
|
44
|
+
const duplicateVaultConnectionsNames = new Set();
|
|
45
|
+
flowVaultConnections.forEach((form) => {
|
|
46
|
+
if (vaultConnectionsNamesSet.has(form.name)) {
|
|
47
|
+
duplicateVaultConnectionsNames.add(form.name);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
vaultConnectionsNamesSet.add(form.name);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
if (duplicateVaultConnectionsNames.size > 0) {
|
|
54
|
+
const duplicatesArray = Array.from(duplicateVaultConnectionsNames);
|
|
55
|
+
logger_1.default.error(`Duplicate flow vault connections names found: [${duplicatesArray}] , make sure to rename them to avoid conflicts`);
|
|
56
|
+
throw new Error(`Duplicate flow vault connections names found: ${duplicatesArray}`);
|
|
57
|
+
}
|
|
58
|
+
const flowVaultsFolder = path_1.default.join(context.filePath, tools_1.constants.FLOWS_VAULT_DIRECTORY);
|
|
59
|
+
fs_extra_1.default.ensureDirSync(flowVaultsFolder);
|
|
60
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at', 'refreshed_at', 'fingerprint'];
|
|
61
|
+
flowVaultConnections.forEach((connection) => {
|
|
62
|
+
removeKeysFromOutput.forEach((key) => {
|
|
63
|
+
if (key in connection) {
|
|
64
|
+
delete connection[key];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
console.warn('WARNING! Flow vault connections `setup` key does not support keyword preservation, `export` or `dump` commmand will not preserve `setup` key in local configuration file.');
|
|
69
|
+
flowVaultConnections.forEach((connection) => {
|
|
70
|
+
const connectionFile = path_1.default.join(flowVaultsFolder, (0, utils_1.sanitize)(`${connection.name}.json`));
|
|
71
|
+
logger_1.default.info(`Writing ${connectionFile}`);
|
|
72
|
+
(0, utils_1.dumpJSON)(connectionFile, connection);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const flowVaultsHandler = {
|
|
77
|
+
parse,
|
|
78
|
+
dump,
|
|
79
|
+
};
|
|
80
|
+
exports.default = flowVaultsHandler;
|
|
81
|
+
//# sourceMappingURL=flowVaultConnections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowVaultConnections.js","sourceRoot":"","sources":["../../../../src/context/directory/handlers/flowVaultConnections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DirectoryHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { Flow } from '../../../tools/auth0/handlers/flows';
|
|
4
|
+
type ParsedFlows = ParsedAsset<'flows', Flow[]>;
|
|
5
|
+
declare const flowsHandler: DirectoryHandler<ParsedFlows>;
|
|
6
|
+
export default flowsHandler;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const tools_1 = require("../../../tools");
|
|
18
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
19
|
+
const utils_1 = require("../../../utils");
|
|
20
|
+
function parse(context) {
|
|
21
|
+
const flowsFolder = path_1.default.join(context.filePath, tools_1.constants.FLOWS_DIRECTORY);
|
|
22
|
+
if (!(0, utils_1.existsMustBeDir)(flowsFolder))
|
|
23
|
+
return { flows: null }; // Skip
|
|
24
|
+
const files = (0, utils_1.getFiles)(flowsFolder, ['.json']);
|
|
25
|
+
const flows = files.map((f) => {
|
|
26
|
+
const flow = Object.assign({}, (0, utils_1.loadJSON)(f, {
|
|
27
|
+
mappings: context.mappings,
|
|
28
|
+
disableKeywordReplacement: context.disableKeywordReplacement,
|
|
29
|
+
}));
|
|
30
|
+
return flow;
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
flows,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function dump(context) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const { flows } = context.assets;
|
|
39
|
+
if (!flows)
|
|
40
|
+
return; // Skip, nothing to dump
|
|
41
|
+
const flowsFolder = path_1.default.join(context.filePath, tools_1.constants.FLOWS_DIRECTORY);
|
|
42
|
+
fs_extra_1.default.ensureDirSync(flowsFolder);
|
|
43
|
+
// Check if there is any duplicate flow name
|
|
44
|
+
const flowNameSet = new Set();
|
|
45
|
+
const duplicateFlowNames = new Set();
|
|
46
|
+
flows.forEach((flow) => {
|
|
47
|
+
if (flowNameSet.has(flow.name)) {
|
|
48
|
+
duplicateFlowNames.add(flow.name);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
flowNameSet.add(flow.name);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (duplicateFlowNames.size > 0) {
|
|
55
|
+
const duplicateNamesArray = Array.from(duplicateFlowNames).join(', ');
|
|
56
|
+
logger_1.default.error(`Duplicate flow names found: [${duplicateNamesArray}] , make sure to rename them to avoid conflicts`);
|
|
57
|
+
throw new Error(`Duplicate flow names found: ${duplicateNamesArray}`);
|
|
58
|
+
}
|
|
59
|
+
flows.forEach((flow) => {
|
|
60
|
+
if (flow.name === undefined) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const flowFile = path_1.default.join(flowsFolder, (0, utils_1.sanitize)(`${flow.name}.json`));
|
|
64
|
+
logger_1.default.info(`Writing ${flowFile}`);
|
|
65
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at', 'submitted_at', 'embedded_at'];
|
|
66
|
+
removeKeysFromOutput.forEach((key) => {
|
|
67
|
+
if (key in flow) {
|
|
68
|
+
delete flow[key];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
(0, utils_1.dumpJSON)(flowFile, flow);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const flowsHandler = {
|
|
76
|
+
parse,
|
|
77
|
+
dump,
|
|
78
|
+
};
|
|
79
|
+
exports.default = flowsHandler;
|
|
80
|
+
//# sourceMappingURL=flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flows.js","sourceRoot":"","sources":["../../../../src/context/directory/handlers/flows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DirectoryHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { Form } from '../../../tools/auth0/handlers/forms';
|
|
4
|
+
type ParsedFroms = ParsedAsset<'forms', Form[]>;
|
|
5
|
+
declare const formsHandler: DirectoryHandler<ParsedFroms>;
|
|
6
|
+
export default formsHandler;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const tools_1 = require("../../../tools");
|
|
18
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
19
|
+
const utils_1 = require("../../../utils");
|
|
20
|
+
function parse(context) {
|
|
21
|
+
const formsFolder = path_1.default.join(context.filePath, tools_1.constants.FORMS_DIRECTORY);
|
|
22
|
+
if (!(0, utils_1.existsMustBeDir)(formsFolder))
|
|
23
|
+
return { forms: null }; // Skip
|
|
24
|
+
const files = (0, utils_1.getFiles)(formsFolder, ['.json']);
|
|
25
|
+
const forms = files.map((f) => {
|
|
26
|
+
const form = Object.assign({}, (0, utils_1.loadJSON)(f, {
|
|
27
|
+
mappings: context.mappings,
|
|
28
|
+
disableKeywordReplacement: context.disableKeywordReplacement,
|
|
29
|
+
}));
|
|
30
|
+
return form;
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
forms,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function dump(context) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const { forms } = context.assets;
|
|
39
|
+
if (!forms)
|
|
40
|
+
return; // Skip, nothing to dump
|
|
41
|
+
const formsFolder = path_1.default.join(context.filePath, tools_1.constants.FORMS_DIRECTORY);
|
|
42
|
+
fs_extra_1.default.ensureDirSync(formsFolder);
|
|
43
|
+
// Check if there is any duplicate form name
|
|
44
|
+
const formNameSet = new Set();
|
|
45
|
+
const duplicateFormNames = new Set();
|
|
46
|
+
forms.forEach((form) => {
|
|
47
|
+
if (formNameSet.has(form.name)) {
|
|
48
|
+
duplicateFormNames.add(form.name);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
formNameSet.add(form.name);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (duplicateFormNames.size > 0) {
|
|
55
|
+
const duplicateNamesArray = Array.from(duplicateFormNames).join(', ');
|
|
56
|
+
logger_1.default.error(`Duplicate form names found: [${duplicateNamesArray}] , make sure to rename them to avoid conflicts`);
|
|
57
|
+
throw new Error(`Duplicate form names found: ${duplicateNamesArray}`);
|
|
58
|
+
}
|
|
59
|
+
forms.forEach((form) => {
|
|
60
|
+
if (form.name === undefined) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const formFile = path_1.default.join(formsFolder, (0, utils_1.sanitize)(`${form.name}.json`));
|
|
64
|
+
logger_1.default.info(`Writing ${formFile}`);
|
|
65
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at'];
|
|
66
|
+
removeKeysFromOutput.forEach((key) => {
|
|
67
|
+
if (key in form) {
|
|
68
|
+
delete form[key];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
(0, utils_1.dumpJSON)(formFile, form);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const formsHandler = {
|
|
76
|
+
parse,
|
|
77
|
+
dump,
|
|
78
|
+
};
|
|
79
|
+
exports.default = formsHandler;
|
|
80
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../src/context/directory/handlers/forms.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,9 @@ const themes_1 = __importDefault(require("./themes"));
|
|
|
31
31
|
const rules_1 = __importDefault(require("./rules"));
|
|
32
32
|
const hooks_1 = __importDefault(require("./hooks"));
|
|
33
33
|
const rulesConfigs_1 = __importDefault(require("./rulesConfigs"));
|
|
34
|
+
const forms_1 = __importDefault(require("./forms"));
|
|
35
|
+
const flows_1 = __importDefault(require("./flows"));
|
|
36
|
+
const flowVaultConnections_1 = __importDefault(require("./flowVaultConnections"));
|
|
34
37
|
const directoryHandlers = {
|
|
35
38
|
rules: rules_1.default,
|
|
36
39
|
rulesConfigs: rulesConfigs_1.default,
|
|
@@ -60,6 +63,9 @@ const directoryHandlers = {
|
|
|
60
63
|
prompts: prompts_1.default,
|
|
61
64
|
customDomains: customDomains_1.default,
|
|
62
65
|
themes: themes_1.default,
|
|
66
|
+
forms: forms_1.default,
|
|
67
|
+
flows: flows_1.default,
|
|
68
|
+
flowVaultConnections: flowVaultConnections_1.default,
|
|
63
69
|
};
|
|
64
70
|
exports.default = directoryHandlers;
|
|
65
71
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/context/directory/handlers/index.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,wDAAgC;AAChC,sDAA8B;AAC9B,oEAA4C;AAC5C,gEAAwC;AACxC,4DAAoC;AACpC,sEAA8C;AAC9C,kEAA0C;AAC1C,wEAAgD;AAChD,wEAAgD;AAChD,wFAAgE;AAChE,wFAAgE;AAChE,wGAAgF;AAChF,gHAAwF;AACxF,0EAAkD;AAClD,oDAA4B;AAC5B,wDAAgC;AAChC,oEAA4C;AAC5C,0DAAkC;AAClC,0EAAkD;AAClD,0DAAkC;AAClC,8DAAsC;AACtC,wDAAgC;AAChC,oEAA4C;AAC5C,sDAA8B;AAC9B,oDAA4B;AAC5B,oDAA4B;AAC5B,kEAA0C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/context/directory/handlers/index.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,wDAAgC;AAChC,sDAA8B;AAC9B,oEAA4C;AAC5C,gEAAwC;AACxC,4DAAoC;AACpC,sEAA8C;AAC9C,kEAA0C;AAC1C,wEAAgD;AAChD,wEAAgD;AAChD,wFAAgE;AAChE,wFAAgE;AAChE,wGAAgF;AAChF,gHAAwF;AACxF,0EAAkD;AAClD,oDAA4B;AAC5B,wDAAgC;AAChC,oEAA4C;AAC5C,0DAAkC;AAClC,0EAAkD;AAClD,0DAAkC;AAClC,8DAAsC;AACtC,wDAAgC;AAChC,oEAA4C;AAC5C,sDAA8B;AAC9B,oDAA4B;AAC5B,oDAA4B;AAC5B,kEAA0C;AAC1C,oDAA4B;AAC5B,oDAA4B;AAC5B,kFAA0D;AAU1D,MAAM,iBAAiB,GAEnB;IACF,KAAK,EAAL,eAAK;IACL,YAAY,EAAZ,sBAAY;IACZ,KAAK,EAAL,eAAK;IACL,KAAK,EAAL,eAAK;IACL,SAAS,EAAT,mBAAS;IACT,YAAY,EAAZ,sBAAY;IACZ,eAAe,EAAf,yBAAe;IACf,OAAO,EAAP,iBAAO;IACP,WAAW,EAAX,qBAAW;IACX,MAAM,EAAN,gBAAM;IACN,aAAa,EAAb,uBAAa;IACb,cAAc,EAAd,wBAAc;IACd,eAAe,EAAf,yBAAe;IACf,uBAAuB,EAAvB,iCAAuB;IACvB,uBAAuB,EAAvB,iCAAuB;IACvB,+BAA+B,EAA/B,yCAA+B;IAC/B,mCAAmC,EAAnC,6CAAmC;IACnC,gBAAgB,EAAhB,0BAAgB;IAChB,KAAK,EAAL,eAAK;IACL,OAAO,EAAP,iBAAO;IACP,aAAa,EAAb,uBAAa;IACb,QAAQ,EAAR,kBAAQ;IACR,gBAAgB,EAAhB,0BAAgB;IAChB,QAAQ,EAAR,kBAAQ;IACR,UAAU,EAAV,oBAAU;IACV,OAAO,EAAP,iBAAO;IACP,aAAa,EAAb,uBAAa;IACb,MAAM,EAAN,gBAAM;IACN,KAAK,EAAL,eAAK;IACL,KAAK,EAAL,eAAK;IACL,oBAAoB,EAApB,8BAAoB;CACrB,CAAC;AAEF,kBAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { YAMLHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { FlowVaultConnection } from '../../../tools/auth0/handlers/flowVaultConnections';
|
|
4
|
+
type ParsedParsedFlowVaults = ParsedAsset<'flowVaultConnections', FlowVaultConnection[]>;
|
|
5
|
+
declare const pagesHandler: YAMLHandler<ParsedParsedFlowVaults>;
|
|
6
|
+
export default pagesHandler;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
16
|
+
function dump(context) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const { flowVaultConnections } = context.assets;
|
|
19
|
+
if (!flowVaultConnections)
|
|
20
|
+
return { flowVaultConnections: null };
|
|
21
|
+
// Check if there is any duplicate form name
|
|
22
|
+
const vaultConnectionsNames = new Set();
|
|
23
|
+
const duplicateVaultConnectionsNames = new Set();
|
|
24
|
+
flowVaultConnections.forEach((form) => {
|
|
25
|
+
if (vaultConnectionsNames.has(form.name)) {
|
|
26
|
+
duplicateVaultConnectionsNames.add(form.name);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
vaultConnectionsNames.add(form.name);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
if (duplicateVaultConnectionsNames.size > 0) {
|
|
33
|
+
const duplicatesArray = Array.from(duplicateVaultConnectionsNames).join(', ');
|
|
34
|
+
logger_1.default.error(`Duplicate flow vault connections names found: [${duplicatesArray}] , make sure to rename them to avoid conflicts`);
|
|
35
|
+
throw new Error(`Duplicate flow vault connections names found: ${duplicatesArray}`);
|
|
36
|
+
}
|
|
37
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at', 'refreshed_at', 'fingerprint'];
|
|
38
|
+
flowVaultConnections.forEach((connection) => {
|
|
39
|
+
removeKeysFromOutput.forEach((key) => {
|
|
40
|
+
if (key in connection) {
|
|
41
|
+
delete connection[key];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
console.warn('WARNING! Flow vault connections `setup` key does not support keyword preservation, `export` or `dump` commmand will not preserve `setup` key in local configuration file.');
|
|
46
|
+
return {
|
|
47
|
+
flowVaultConnections,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function parse(context) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const { flowVaultConnections } = context.assets;
|
|
54
|
+
if (!flowVaultConnections)
|
|
55
|
+
return { flowVaultConnections: null };
|
|
56
|
+
return {
|
|
57
|
+
flowVaultConnections,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const pagesHandler = {
|
|
62
|
+
parse,
|
|
63
|
+
dump,
|
|
64
|
+
};
|
|
65
|
+
exports.default = pagesHandler;
|
|
66
|
+
//# sourceMappingURL=flowVaultConnections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowVaultConnections.js","sourceRoot":"","sources":["../../../../src/context/yaml/handlers/flowVaultConnections.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,6DAAkC;AAIlC,SAAe,IAAI,CAAC,OAAoB;;QACtC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEhD,IAAI,CAAC,oBAAoB;YAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;QAEjE,4CAA4C;QAC5C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;QACxC,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAAE,CAAC;QAEjD,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,8BAA8B,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,gBAAG,CAAC,KAAK,CACP,kDAAkD,eAAe,iDAAiD,CACnH,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,iDAAiD,eAAe,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QAC/F,oBAAoB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1C,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnC,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;oBACtB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CACV,2KAA2K,CAC5K,CAAC;QAEF,OAAO;YACL,oBAAoB;SACrB,CAAC;IACJ,CAAC;CAAA;AAED,SAAe,KAAK,CAAC,OAAoB;;QACvC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEhD,IAAI,CAAC,oBAAoB;YAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;QAEjE,OAAO;YACL,oBAAoB;SACrB,CAAC;IACJ,CAAC;CAAA;AAED,MAAM,YAAY,GAAwC;IACxD,KAAK;IACL,IAAI;CACL,CAAC;AAEF,kBAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { YAMLHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { Flow } from '../../../tools/auth0/handlers/flows';
|
|
4
|
+
type ParsedFlows = ParsedAsset<'flows', Flow[]>;
|
|
5
|
+
declare const pagesHandler: YAMLHandler<ParsedFlows>;
|
|
6
|
+
export default pagesHandler;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
18
|
+
const utils_1 = require("../../../utils");
|
|
19
|
+
const tools_1 = require("../../../tools");
|
|
20
|
+
function parse(context) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const { flows } = context.assets;
|
|
23
|
+
if (!flows)
|
|
24
|
+
return { flows: null };
|
|
25
|
+
const parsedFlows = flows.map((flow) => {
|
|
26
|
+
const flowFile = path_1.default.join(context.basePath, flow.body);
|
|
27
|
+
const parsedFlowBody = (0, utils_1.loadJSON)(flowFile, {
|
|
28
|
+
mappings: context.mappings,
|
|
29
|
+
disableKeywordReplacement: context.disableKeywordReplacement,
|
|
30
|
+
});
|
|
31
|
+
// Remove the body from the form object
|
|
32
|
+
delete parsedFlowBody.body;
|
|
33
|
+
return Object.assign({ name: flow.name }, parsedFlowBody);
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
flows: [...parsedFlows],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function dump(context) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
let { flows } = context.assets;
|
|
43
|
+
if (!flows) {
|
|
44
|
+
return { flows: null };
|
|
45
|
+
}
|
|
46
|
+
const pagesFolder = path_1.default.join(context.basePath, tools_1.constants.FLOWS_DIRECTORY);
|
|
47
|
+
fs_extra_1.default.ensureDirSync(pagesFolder);
|
|
48
|
+
// Check if there is any duplicate flow name
|
|
49
|
+
const flowNameSet = new Set();
|
|
50
|
+
const duplicateFlowNames = new Set();
|
|
51
|
+
flows.forEach((flow) => {
|
|
52
|
+
if (flowNameSet.has(flow.name)) {
|
|
53
|
+
duplicateFlowNames.add(flow.name);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
flowNameSet.add(flow.name);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
if (duplicateFlowNames.size > 0) {
|
|
60
|
+
const duplicateNamesArray = Array.from(duplicateFlowNames).join(', ');
|
|
61
|
+
logger_1.default.error(`Duplicate flow names found: [${duplicateNamesArray}] , make sure to rename them to avoid conflicts`);
|
|
62
|
+
throw new Error(`Duplicate flow names found: ${duplicateNamesArray}`);
|
|
63
|
+
}
|
|
64
|
+
flows = flows.map((flow) => {
|
|
65
|
+
if (flow.name === undefined) {
|
|
66
|
+
return flow;
|
|
67
|
+
}
|
|
68
|
+
const flowName = (0, utils_1.sanitize)(flow.name);
|
|
69
|
+
const jsonFile = path_1.default.join(pagesFolder, `${flowName}.json`);
|
|
70
|
+
logger_1.default.info(`Writing ${jsonFile}`);
|
|
71
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at', 'submitted_at', 'embedded_at'];
|
|
72
|
+
removeKeysFromOutput.forEach((key) => {
|
|
73
|
+
if (key in flow) {
|
|
74
|
+
delete flow[key];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const jsonBody = JSON.stringify(flow, null, 2);
|
|
78
|
+
fs_extra_1.default.writeFileSync(jsonFile, jsonBody);
|
|
79
|
+
return {
|
|
80
|
+
name: flow.name,
|
|
81
|
+
body: `./flows/${flowName}.json`,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
return { flows };
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const pagesHandler = {
|
|
88
|
+
parse,
|
|
89
|
+
dump,
|
|
90
|
+
};
|
|
91
|
+
exports.default = pagesHandler;
|
|
92
|
+
//# sourceMappingURL=flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flows.js","sourceRoot":"","sources":["../../../../src/context/yaml/handlers/flows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { YAMLHandler } from '.';
|
|
2
|
+
import { ParsedAsset } from '../../../types';
|
|
3
|
+
import { Form } from '../../../tools/auth0/handlers/forms';
|
|
4
|
+
type ParsedForms = ParsedAsset<'forms', Partial<Form>[]>;
|
|
5
|
+
declare const pagesHandler: YAMLHandler<ParsedForms>;
|
|
6
|
+
export default pagesHandler;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const logger_1 = __importDefault(require("../../../logger"));
|
|
18
|
+
const utils_1 = require("../../../utils");
|
|
19
|
+
const constants_1 = __importDefault(require("../../../tools/constants"));
|
|
20
|
+
function parse(context) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const { forms } = context.assets;
|
|
23
|
+
if (!forms)
|
|
24
|
+
return { forms: null };
|
|
25
|
+
const parsedForms = forms.map((form) => {
|
|
26
|
+
const formFile = path_1.default.join(context.basePath, form.body);
|
|
27
|
+
const parsedFormBody = (0, utils_1.loadJSON)(formFile, {
|
|
28
|
+
mappings: context.mappings,
|
|
29
|
+
disableKeywordReplacement: context.disableKeywordReplacement,
|
|
30
|
+
});
|
|
31
|
+
// Remove the body from the form object
|
|
32
|
+
delete parsedFormBody.body;
|
|
33
|
+
return Object.assign({ name: form.name }, parsedFormBody);
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
forms: [...parsedForms],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function dump(context) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
let { forms } = context.assets;
|
|
43
|
+
if (!forms) {
|
|
44
|
+
return { forms: null };
|
|
45
|
+
}
|
|
46
|
+
const pagesFolder = path_1.default.join(context.basePath, constants_1.default.FORMS_DIRECTORY);
|
|
47
|
+
fs_extra_1.default.ensureDirSync(pagesFolder);
|
|
48
|
+
// Check if there is any duplicate form name
|
|
49
|
+
const formNameSet = new Set();
|
|
50
|
+
const duplicateFormNames = new Set();
|
|
51
|
+
forms.forEach((form) => {
|
|
52
|
+
if (formNameSet.has(form.name)) {
|
|
53
|
+
duplicateFormNames.add(form.name);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
formNameSet.add(form.name);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
if (duplicateFormNames.size > 0) {
|
|
60
|
+
const duplicateNamesArray = Array.from(duplicateFormNames).join(', ');
|
|
61
|
+
logger_1.default.error(`Duplicate form names found: [${duplicateNamesArray}] , make sure to rename them to avoid conflicts`);
|
|
62
|
+
throw new Error(`Duplicate form names found: ${duplicateNamesArray}`);
|
|
63
|
+
}
|
|
64
|
+
forms = forms.map((form) => {
|
|
65
|
+
if (form.name === undefined) {
|
|
66
|
+
return form;
|
|
67
|
+
}
|
|
68
|
+
const formName = (0, utils_1.sanitize)(form.name);
|
|
69
|
+
const jsonFile = path_1.default.join(pagesFolder, `${formName}.json`);
|
|
70
|
+
logger_1.default.info(`Writing ${jsonFile}`);
|
|
71
|
+
const removeKeysFromOutput = ['id', 'created_at', 'updated_at'];
|
|
72
|
+
removeKeysFromOutput.forEach((key) => {
|
|
73
|
+
if (key in form) {
|
|
74
|
+
delete form[key];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const jsonBody = JSON.stringify(form, null, 2);
|
|
78
|
+
fs_extra_1.default.writeFileSync(jsonFile, jsonBody);
|
|
79
|
+
return {
|
|
80
|
+
name: form.name,
|
|
81
|
+
body: `./forms/${formName}.json`,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
return { forms };
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const pagesHandler = {
|
|
88
|
+
parse,
|
|
89
|
+
dump,
|
|
90
|
+
};
|
|
91
|
+
exports.default = pagesHandler;
|
|
92
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../src/context/yaml/handlers/forms.ts"],"names":[],"mappings":"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"}
|