@t4h.framework/core 0.18.0 → 0.20.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/.ai/skills/framework-core/SKILL.md +19 -19
- package/.ai/skills/framework-workflow-creation/SKILL.md +18 -17
- package/.ai/skills/framework-workflow-testing/SKILL.md +2 -4
- package/CHANGELOG.md +33 -0
- package/README.md +59 -7
- package/dist/activities/StartWorkflowActivity.d.ts +13 -13
- package/dist/activities/StartWorkflowActivity.d.ts.map +1 -1
- package/dist/activities/StartWorkflowActivity.js +1 -3
- package/dist/activities/StartWorkflowActivity.js.map +1 -1
- package/dist/activities/WorkflowBatchSizeActivity.d.ts +2 -2
- package/dist/activities/WorkflowBatchSizeActivity.d.ts.map +1 -1
- package/dist/activities/WorkflowBatchSizeActivity.js.map +1 -1
- package/dist/activities/WorkflowBatchTakeActivity.d.ts +2 -2
- package/dist/activities/WorkflowBatchTakeActivity.d.ts.map +1 -1
- package/dist/activities/WorkflowBatchTakeActivity.js +1 -1
- package/dist/activities/WorkflowBatchTakeActivity.js.map +1 -1
- package/dist/activities/WorkflowBatchToArrayActivity.d.ts +2 -2
- package/dist/activities/WorkflowBatchToArrayActivity.d.ts.map +1 -1
- package/dist/activities/WorkflowBatchToArrayActivity.js.map +1 -1
- package/dist/eslint/index.d.ts +16 -0
- package/dist/eslint/index.d.ts.map +1 -0
- package/dist/eslint/index.js +69 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/rules/env-from-env-design.d.ts +3 -0
- package/dist/eslint/rules/env-from-env-design.d.ts.map +1 -0
- package/dist/eslint/rules/env-from-env-design.js +85 -0
- package/dist/eslint/rules/env-from-env-design.js.map +1 -0
- package/dist/eslint/rules/no-binary-stream-outside-activity.d.ts +3 -0
- package/dist/eslint/rules/no-binary-stream-outside-activity.d.ts.map +1 -0
- package/dist/eslint/rules/no-binary-stream-outside-activity.js +51 -0
- package/dist/eslint/rules/no-binary-stream-outside-activity.js.map +1 -0
- package/dist/eslint/rules/no-binary-subclass.d.ts +3 -0
- package/dist/eslint/rules/no-binary-subclass.d.ts.map +1 -0
- package/dist/eslint/rules/no-binary-subclass.js +31 -0
- package/dist/eslint/rules/no-binary-subclass.js.map +1 -0
- package/dist/eslint/rules/no-framework-activity-in-app.d.ts +3 -0
- package/dist/eslint/rules/no-framework-activity-in-app.d.ts.map +1 -0
- package/dist/eslint/rules/no-framework-activity-in-app.js +41 -0
- package/dist/eslint/rules/no-framework-activity-in-app.js.map +1 -0
- package/dist/eslint/rules/no-io-in-workflow.d.ts +3 -0
- package/dist/eslint/rules/no-io-in-workflow.d.ts.map +1 -0
- package/dist/eslint/rules/no-io-in-workflow.js +92 -0
- package/dist/eslint/rules/no-io-in-workflow.js.map +1 -0
- package/dist/eslint/rules/no-literal-secret-in-authorization.d.ts +3 -0
- package/dist/eslint/rules/no-literal-secret-in-authorization.d.ts.map +1 -0
- package/dist/eslint/rules/no-literal-secret-in-authorization.js +56 -0
- package/dist/eslint/rules/no-literal-secret-in-authorization.js.map +1 -0
- package/dist/eslint/rules/no-nondeterministic-in-workflow.d.ts +3 -0
- package/dist/eslint/rules/no-nondeterministic-in-workflow.d.ts.map +1 -0
- package/dist/eslint/rules/no-nondeterministic-in-workflow.js +102 -0
- package/dist/eslint/rules/no-nondeterministic-in-workflow.js.map +1 -0
- package/dist/eslint/rules/no-secret-to-string.d.ts +3 -0
- package/dist/eslint/rules/no-secret-to-string.d.ts.map +1 -0
- package/dist/eslint/rules/no-secret-to-string.js +97 -0
- package/dist/eslint/rules/no-secret-to-string.js.map +1 -0
- package/dist/eslint/rules/no-testing-import-in-source.d.ts +3 -0
- package/dist/eslint/rules/no-testing-import-in-source.d.ts.map +1 -0
- package/dist/eslint/rules/no-testing-import-in-source.js +34 -0
- package/dist/eslint/rules/no-testing-import-in-source.js.map +1 -0
- package/dist/eslint/rules/require-workflow-id.d.ts +3 -0
- package/dist/eslint/rules/require-workflow-id.d.ts.map +1 -0
- package/dist/eslint/rules/require-workflow-id.js +38 -0
- package/dist/eslint/rules/require-workflow-id.js.map +1 -0
- package/dist/eslint/tools/bindings.d.ts +16 -0
- package/dist/eslint/tools/bindings.d.ts.map +1 -0
- package/dist/eslint/tools/bindings.js +38 -0
- package/dist/eslint/tools/bindings.js.map +1 -0
- package/dist/eslint/tools/coreTypes.d.ts +9 -0
- package/dist/eslint/tools/coreTypes.d.ts.map +1 -0
- package/dist/eslint/tools/coreTypes.js +115 -0
- package/dist/eslint/tools/coreTypes.js.map +1 -0
- package/dist/eslint/tools/workflowSides.d.ts +15 -0
- package/dist/eslint/tools/workflowSides.d.ts.map +1 -0
- package/dist/eslint/tools/workflowSides.js +61 -0
- package/dist/eslint/tools/workflowSides.js.map +1 -0
- package/dist/models/Activity.d.ts +5 -5
- package/dist/models/Activity.d.ts.map +1 -1
- package/dist/models/App.d.ts +8 -8
- package/dist/models/App.d.ts.map +1 -1
- package/dist/models/App.js.map +1 -1
- package/dist/models/AsyncActivity.d.ts +5 -5
- package/dist/models/AsyncActivity.d.ts.map +1 -1
- package/dist/models/AsyncActivity.js +1 -1
- package/dist/models/AsyncActivity.js.map +1 -1
- package/dist/models/AsyncActivityAdvanceResult.d.ts +4 -4
- package/dist/models/AsyncActivityAdvanceResult.d.ts.map +1 -1
- package/dist/models/AsyncActivityAdvanceResult.js.map +1 -1
- package/dist/models/AsyncActivityAwaitable.d.ts +1 -1
- package/dist/models/AsyncActivityAwaitable.d.ts.map +1 -1
- package/dist/models/AsyncActivityAwaitable.js +4 -1
- package/dist/models/AsyncActivityAwaitable.js.map +1 -1
- package/dist/models/Authorization.d.ts +2 -2
- package/dist/models/Authorization.d.ts.map +1 -1
- package/dist/models/Claim.d.ts +5 -4
- package/dist/models/Claim.d.ts.map +1 -1
- package/dist/models/Claim.js.map +1 -1
- package/dist/models/Env.d.ts.map +1 -1
- package/dist/models/Env.js +4 -1
- package/dist/models/Env.js.map +1 -1
- package/dist/models/EnvDesign.d.ts +2 -2
- package/dist/models/EnvDesign.d.ts.map +1 -1
- package/dist/models/EnvDesign.js +15 -14
- package/dist/models/EnvDesign.js.map +1 -1
- package/dist/models/History.d.ts +1 -1
- package/dist/models/History.d.ts.map +1 -1
- package/dist/models/History.js +2 -1
- package/dist/models/History.js.map +1 -1
- package/dist/models/Logger.d.ts.map +1 -1
- package/dist/models/Logger.js +7 -3
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/SerializableHelper.d.ts +1 -1
- package/dist/models/SerializableHelper.d.ts.map +1 -1
- package/dist/models/SyncActivity.d.ts +2 -2
- package/dist/models/SyncActivity.d.ts.map +1 -1
- package/dist/models/SyncActivity.js.map +1 -1
- package/dist/models/Workflow.d.ts +6 -4
- package/dist/models/Workflow.d.ts.map +1 -1
- package/dist/models/Workflow.js +5 -5
- package/dist/models/Workflow.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +1 -0
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestWorkflowEnvironment.d.ts +3 -3
- package/dist/testing/TestWorkflowEnvironment.d.ts.map +1 -1
- package/dist/testing/TestWorkflowEnvironment.js +2 -1
- package/dist/testing/TestWorkflowEnvironment.js.map +1 -1
- package/dist/testing/tools/clone.d.ts +1 -1
- package/dist/testing/tools/clone.d.ts.map +1 -1
- package/dist/testing/tools/clone.js +30 -20
- package/dist/testing/tools/clone.js.map +1 -1
- package/dist/testing/tools/create-mock-claim.d.ts.map +1 -1
- package/dist/testing/tools/create-mock-claim.js +4 -1
- package/dist/testing/tools/create-mock-claim.js.map +1 -1
- package/dist/testing/tools/create-mock-claims.d.ts +4 -1
- package/dist/testing/tools/create-mock-claims.d.ts.map +1 -1
- package/dist/testing/tools/create-mock-claims.js.map +1 -1
- package/dist/testing/tools/mock-async.d.ts +3 -1
- package/dist/testing/tools/mock-async.d.ts.map +1 -1
- package/dist/testing/tools/mock-async.js +8 -6
- package/dist/testing/tools/mock-async.js.map +1 -1
- package/dist/testing/tools/resolve-async-activity.d.ts.map +1 -1
- package/dist/testing/tools/resolve-async-activity.js +33 -19
- package/dist/testing/tools/resolve-async-activity.js.map +1 -1
- package/dist/testing/tools/run-workflow-ticks.d.ts +2 -2
- package/dist/testing/tools/run-workflow-ticks.d.ts.map +1 -1
- package/dist/testing/tools/run-workflow-ticks.js +15 -7
- package/dist/testing/tools/run-workflow-ticks.js.map +1 -1
- package/dist/testing/tools/run-workflow.d.ts +3 -3
- package/dist/testing/tools/run-workflow.d.ts.map +1 -1
- package/dist/testing/typings/ClaimConstructor.d.ts +2 -1
- package/dist/testing/typings/ClaimConstructor.d.ts.map +1 -1
- package/dist/tools/AsyncActivityCallback.d.ts.map +1 -1
- package/dist/tools/AsyncActivityCallback.js +3 -1
- package/dist/tools/AsyncActivityCallback.js.map +1 -1
- package/dist/tools/Internals.d.ts +5 -5
- package/dist/tools/Internals.d.ts.map +1 -1
- package/dist/tools/Internals.js.map +1 -1
- package/dist/tools/WorkflowBatchQuery.d.ts +1 -1
- package/dist/tools/WorkflowBatchQuery.d.ts.map +1 -1
- package/dist/tools/WorkflowBatchQuery.js +7 -4
- package/dist/tools/WorkflowBatchQuery.js.map +1 -1
- package/dist/typings/Serializable.d.ts +2 -1
- package/dist/typings/Serializable.d.ts.map +1 -1
- package/package.json +17 -2
- package/dist/tools/isActivity.d.ts +0 -4
- package/dist/tools/isActivity.d.ts.map +0 -1
- package/dist/tools/isActivity.js +0 -13
- package/dist/tools/isActivity.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ESLint, Linter } from 'eslint';
|
|
2
|
+
/**
|
|
3
|
+
* An ESLint plugin with a `recommended` config that turns on its rules.
|
|
4
|
+
*/
|
|
5
|
+
export interface FrameworkEslintPlugin extends ESLint.Plugin {
|
|
6
|
+
configs: {
|
|
7
|
+
recommended: Linter.Config[];
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
declare const core: FrameworkEslintPlugin;
|
|
11
|
+
/**
|
|
12
|
+
* The ESLint plugin of `@t4h.framework/core`, with the rules for code that
|
|
13
|
+
* uses the core.
|
|
14
|
+
*/
|
|
15
|
+
export default core;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAyE5C;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM;IAC1D,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;KAAE,CAAA;CAC1C;AAED,QAAA,MAAM,IAAI,EAAE,qBAA+D,CAAA;AAE3E;;;GAGG;AACH,eAAe,IAAI,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { envFromEnvDesign } from './rules/env-from-env-design.js';
|
|
2
|
+
import { noBinaryStreamOutsideActivity } from './rules/no-binary-stream-outside-activity.js';
|
|
3
|
+
import { noBinarySubclass } from './rules/no-binary-subclass.js';
|
|
4
|
+
import { noFrameworkActivityInApp } from './rules/no-framework-activity-in-app.js';
|
|
5
|
+
import { noIoInWorkflow } from './rules/no-io-in-workflow.js';
|
|
6
|
+
import { noLiteralSecretInAuthorization } from './rules/no-literal-secret-in-authorization.js';
|
|
7
|
+
import { noNondeterministicInWorkflow } from './rules/no-nondeterministic-in-workflow.js';
|
|
8
|
+
import { noSecretToString } from './rules/no-secret-to-string.js';
|
|
9
|
+
import { noTestingImportInSource } from './rules/no-testing-import-in-source.js';
|
|
10
|
+
import { requireWorkflowId } from './rules/require-workflow-id.js';
|
|
11
|
+
const NAME = '@t4h.framework/core';
|
|
12
|
+
const ALL_FILES = ['**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}'];
|
|
13
|
+
const TYPED_FILES = ['**/*.{ts,tsx,mts,cts}'];
|
|
14
|
+
const SOURCE_FILES = ['src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}'];
|
|
15
|
+
const TEST_FILES = [
|
|
16
|
+
'**/__tests__/**',
|
|
17
|
+
'**/*.{spec,test}.{js,mjs,cjs,jsx,ts,tsx,mts,cts}',
|
|
18
|
+
];
|
|
19
|
+
const rules = {
|
|
20
|
+
'env-from-env-design': envFromEnvDesign,
|
|
21
|
+
'no-binary-stream-outside-activity': noBinaryStreamOutsideActivity,
|
|
22
|
+
'no-binary-subclass': noBinarySubclass,
|
|
23
|
+
'no-framework-activity-in-app': noFrameworkActivityInApp,
|
|
24
|
+
'no-io-in-workflow': noIoInWorkflow,
|
|
25
|
+
'no-literal-secret-in-authorization': noLiteralSecretInAuthorization,
|
|
26
|
+
'no-nondeterministic-in-workflow': noNondeterministicInWorkflow,
|
|
27
|
+
'no-secret-to-string': noSecretToString,
|
|
28
|
+
'no-testing-import-in-source': noTestingImportInSource,
|
|
29
|
+
'require-workflow-id': requireWorkflowId,
|
|
30
|
+
};
|
|
31
|
+
const plugin = { meta: { name: NAME }, rules };
|
|
32
|
+
const recommended = [
|
|
33
|
+
{ plugins: { [NAME]: plugin } },
|
|
34
|
+
{
|
|
35
|
+
files: TYPED_FILES,
|
|
36
|
+
rules: {
|
|
37
|
+
[`${NAME}/no-binary-stream-outside-activity`]: 'error',
|
|
38
|
+
[`${NAME}/no-io-in-workflow`]: 'error',
|
|
39
|
+
[`${NAME}/no-nondeterministic-in-workflow`]: 'error',
|
|
40
|
+
[`${NAME}/no-secret-to-string`]: 'error',
|
|
41
|
+
[`${NAME}/require-workflow-id`]: 'error',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
files: TYPED_FILES,
|
|
46
|
+
ignores: TEST_FILES,
|
|
47
|
+
rules: {
|
|
48
|
+
[`${NAME}/no-binary-subclass`]: 'error',
|
|
49
|
+
[`${NAME}/no-framework-activity-in-app`]: 'error',
|
|
50
|
+
[`${NAME}/no-literal-secret-in-authorization`]: 'error',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
files: ALL_FILES,
|
|
55
|
+
ignores: TEST_FILES,
|
|
56
|
+
rules: { [`${NAME}/no-testing-import-in-source`]: 'error' },
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
files: SOURCE_FILES,
|
|
60
|
+
rules: { [`${NAME}/env-from-env-design`]: 'error' },
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
const core = { ...plugin, configs: { recommended } };
|
|
64
|
+
/**
|
|
65
|
+
* The ESLint plugin of `@t4h.framework/core`, with the rules for code that
|
|
66
|
+
* uses the core.
|
|
67
|
+
*/
|
|
68
|
+
export default core;
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAA;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAA;AAC9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,MAAM,IAAI,GAAG,qBAAqB,CAAA;AAElC,MAAM,SAAS,GAAG,CAAC,sCAAsC,CAAC,CAAA;AAE1D,MAAM,WAAW,GAAG,CAAC,uBAAuB,CAAC,CAAA;AAE7C,MAAM,YAAY,GAAG,CAAC,0CAA0C,CAAC,CAAA;AAEjE,MAAM,UAAU,GAAG;IACjB,iBAAiB;IACjB,kDAAkD;CACnD,CAAA;AAED,MAAM,KAAK,GAAG;IACZ,qBAAqB,EAAE,gBAAgB;IACvC,mCAAmC,EAAE,6BAA6B;IAClE,oBAAoB,EAAE,gBAAgB;IACtC,8BAA8B,EAAE,wBAAwB;IACxD,mBAAmB,EAAE,cAAc;IACnC,oCAAoC,EAAE,8BAA8B;IACpE,iCAAiC,EAAE,4BAA4B;IAC/D,qBAAqB,EAAE,gBAAgB;IACvC,6BAA6B,EAAE,uBAAuB;IACtD,qBAAqB,EAAE,iBAAiB;CACzC,CAAA;AAED,MAAM,MAAM,GAAkB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAA;AAE7D,MAAM,WAAW,GAAoB;IACnC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE;IAC/B;QACE,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE;YACL,CAAC,GAAG,IAAI,oCAAoC,CAAC,EAAE,OAAO;YACtD,CAAC,GAAG,IAAI,oBAAoB,CAAC,EAAE,OAAO;YACtC,CAAC,GAAG,IAAI,kCAAkC,CAAC,EAAE,OAAO;YACpD,CAAC,GAAG,IAAI,sBAAsB,CAAC,EAAE,OAAO;YACxC,CAAC,GAAG,IAAI,sBAAsB,CAAC,EAAE,OAAO;SACzC;KACF;IACD;QACE,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE;YACL,CAAC,GAAG,IAAI,qBAAqB,CAAC,EAAE,OAAO;YACvC,CAAC,GAAG,IAAI,+BAA+B,CAAC,EAAE,OAAO;YACjD,CAAC,GAAG,IAAI,qCAAqC,CAAC,EAAE,OAAO;SACxD;KACF;IACD;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,8BAA8B,CAAC,EAAE,OAAO,EAAE;KAC5D;IACD;QACE,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,sBAAsB,CAAC,EAAE,OAAO,EAAE;KACpD;CACF,CAAA;AASD,MAAM,IAAI,GAA0B,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAA;AAE3E;;;GAGG;AACH,eAAe,IAAI,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-from-env-design.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/env-from-env-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAyClC,eAAO,MAAM,gBAAgB,EAAE,IAAI,CAAC,UA+DnC,CAAA"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const CORE = '@t4h.framework/core';
|
|
2
|
+
const PROCESS_MODULES = new Set(['process', 'node:process']);
|
|
3
|
+
function messageIdOf(source) {
|
|
4
|
+
if (source === CORE)
|
|
5
|
+
return 'coreEnv';
|
|
6
|
+
if (PROCESS_MODULES.has(String(source)))
|
|
7
|
+
return 'processEnv';
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
function isEnvKey(node, computed) {
|
|
11
|
+
if (!computed)
|
|
12
|
+
return node.type === 'Identifier' && node.name === 'env';
|
|
13
|
+
return node.type === 'Literal' && node.value === 'env';
|
|
14
|
+
}
|
|
15
|
+
function identifierName(node) {
|
|
16
|
+
return node.type === 'Identifier' ? node.name : undefined;
|
|
17
|
+
}
|
|
18
|
+
function specifierName(specifier) {
|
|
19
|
+
if (specifier.type === 'ExportSpecifier')
|
|
20
|
+
return identifierName(specifier.local);
|
|
21
|
+
if (specifier.type === 'ImportSpecifier')
|
|
22
|
+
return identifierName(specifier.imported);
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
function isWholeModule(specifier) {
|
|
26
|
+
return (specifier.type === 'ImportNamespaceSpecifier' ||
|
|
27
|
+
specifier.type === 'ImportDefaultSpecifier');
|
|
28
|
+
}
|
|
29
|
+
export const envFromEnvDesign = {
|
|
30
|
+
meta: {
|
|
31
|
+
type: 'problem',
|
|
32
|
+
docs: {
|
|
33
|
+
description: 'Requires env to come from EnvDesign, not from @t4h.framework/core or process.env',
|
|
34
|
+
},
|
|
35
|
+
messages: {
|
|
36
|
+
coreEnv: 'Do not import env from @t4h.framework/core. Create env with EnvDesign and import it from that module.',
|
|
37
|
+
processEnv: 'Do not read process.env. Declare the variable with EnvDesign and read it from the env that EnvDesign creates.',
|
|
38
|
+
},
|
|
39
|
+
schema: [],
|
|
40
|
+
},
|
|
41
|
+
create(context) {
|
|
42
|
+
const modules = new Map([['process', 'processEnv']]);
|
|
43
|
+
function checkSpecifiers(specifiers, messageId) {
|
|
44
|
+
for (const specifier of specifiers) {
|
|
45
|
+
if (isWholeModule(specifier))
|
|
46
|
+
modules.set(specifier.local.name, messageId);
|
|
47
|
+
if (specifierName(specifier) === 'env')
|
|
48
|
+
context.report({ node: specifier, messageId });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
ImportDeclaration(node) {
|
|
53
|
+
const messageId = messageIdOf(node.source.value);
|
|
54
|
+
if (messageId)
|
|
55
|
+
checkSpecifiers(node.specifiers, messageId);
|
|
56
|
+
},
|
|
57
|
+
ExportNamedDeclaration(node) {
|
|
58
|
+
const messageId = messageIdOf(node.source?.value);
|
|
59
|
+
if (messageId)
|
|
60
|
+
checkSpecifiers(node.specifiers, messageId);
|
|
61
|
+
},
|
|
62
|
+
MemberExpression(node) {
|
|
63
|
+
if (node.object.type !== 'Identifier')
|
|
64
|
+
return;
|
|
65
|
+
if (!isEnvKey(node.property, node.computed))
|
|
66
|
+
return;
|
|
67
|
+
const messageId = modules.get(node.object.name);
|
|
68
|
+
if (messageId)
|
|
69
|
+
context.report({ node, messageId });
|
|
70
|
+
},
|
|
71
|
+
VariableDeclarator(node) {
|
|
72
|
+
if (node.init?.type !== 'Identifier' ||
|
|
73
|
+
node.id.type !== 'ObjectPattern')
|
|
74
|
+
return;
|
|
75
|
+
if (modules.get(node.init.name) !== 'processEnv')
|
|
76
|
+
return;
|
|
77
|
+
const readsEnv = node.id.properties.some(property => property.type === 'Property' &&
|
|
78
|
+
isEnvKey(property.key, property.computed));
|
|
79
|
+
if (readsEnv)
|
|
80
|
+
context.report({ node, messageId: 'processEnv' });
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=env-from-env-design.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-from-env-design.js","sourceRoot":"","sources":["../../../src/eslint/rules/env-from-env-design.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-binary-stream-outside-activity.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-binary-stream-outside-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AA+BlC,eAAO,MAAM,6BAA6B,EAAE,IAAI,CAAC,UA8BhD,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createCoreTypes } from '../tools/coreTypes.js';
|
|
2
|
+
import { findClassMember, isActivityClass, isFrontMethodName, } from '../tools/workflowSides.js';
|
|
3
|
+
const BINARY_CLASSES = new Set(['Binary']);
|
|
4
|
+
function isBackMethod(types, member) {
|
|
5
|
+
if (isFrontMethodName(member.name))
|
|
6
|
+
return false;
|
|
7
|
+
return isActivityClass(types, member.classNode);
|
|
8
|
+
}
|
|
9
|
+
function isBinaryStreamMethod(types, member) {
|
|
10
|
+
if (member.name !== 'stream')
|
|
11
|
+
return false;
|
|
12
|
+
return types.extendsCoreClass(member.classNode, BINARY_CLASSES);
|
|
13
|
+
}
|
|
14
|
+
function isAllowedPlace(types, node) {
|
|
15
|
+
const member = findClassMember(node);
|
|
16
|
+
if (!member)
|
|
17
|
+
return false;
|
|
18
|
+
return isBackMethod(types, member) || isBinaryStreamMethod(types, member);
|
|
19
|
+
}
|
|
20
|
+
export const noBinaryStreamOutsideActivity = {
|
|
21
|
+
meta: {
|
|
22
|
+
type: 'problem',
|
|
23
|
+
docs: {
|
|
24
|
+
description: 'Allows Binary.stream() only in the methods of an activity, other than toInput and toOutput',
|
|
25
|
+
},
|
|
26
|
+
messages: {
|
|
27
|
+
stream: 'Call stream() of a Binary only in a method of an activity, such as run, bootstrap or advance. The workflow, toInput and toOutput run again on each replay, so they must not read the content of a Binary. A function out of the activity class must not read it either. Give the Binary to an activity.',
|
|
28
|
+
},
|
|
29
|
+
schema: [],
|
|
30
|
+
},
|
|
31
|
+
create(context) {
|
|
32
|
+
const types = createCoreTypes(context);
|
|
33
|
+
return {
|
|
34
|
+
CallExpression(node) {
|
|
35
|
+
const { callee } = node;
|
|
36
|
+
if (callee.type !== 'MemberExpression' || callee.computed)
|
|
37
|
+
return;
|
|
38
|
+
if (callee.property.type !== 'Identifier')
|
|
39
|
+
return;
|
|
40
|
+
if (callee.property.name !== 'stream')
|
|
41
|
+
return;
|
|
42
|
+
if (!types.extendsCoreClass(callee.object, BINARY_CLASSES))
|
|
43
|
+
return;
|
|
44
|
+
if (isAllowedPlace(types, node))
|
|
45
|
+
return;
|
|
46
|
+
context.report({ node, messageId: 'stream' });
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=no-binary-stream-outside-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-binary-stream-outside-activity.js","sourceRoot":"","sources":["../../../src/eslint/rules/no-binary-stream-outside-activity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAkB,MAAM,uBAAuB,CAAA;AACvE,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,GAElB,MAAM,2BAA2B,CAAA;AAElC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE1C,SAAS,YAAY,CAAC,KAAgB,EAAE,MAAmB;IACzD,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAEhD,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgB,EAAE,MAAmB;IACjE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE1C,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB,EAAE,IAAe;IACvD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzB,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAoB;IAC5D,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,4FAA4F;SAC/F;QACD,QAAQ,EAAE;YACR,MAAM,EACJ,ySAAyS;SAC5S;QACD,MAAM,EAAE,EAAE;KACX;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEtC,OAAO;YACL,cAAc,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;gBACvB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ;oBAAE,OAAM;gBACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAAE,OAAM;gBACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAM;gBAC7C,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAmB,EAAE,cAAc,CAAC;oBACrE,OAAM;gBACR,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC;oBAAE,OAAM;gBAEvC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC/C,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-binary-subclass.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-binary-subclass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAUlC,eAAO,MAAM,gBAAgB,EAAE,IAAI,CAAC,UA0BnC,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createCoreTypes } from '../tools/coreTypes.js';
|
|
2
|
+
const BINARY_CLASSES = new Set(['Binary']);
|
|
3
|
+
function isAmbient(node) {
|
|
4
|
+
return node.declare === true;
|
|
5
|
+
}
|
|
6
|
+
export const noBinarySubclass = {
|
|
7
|
+
meta: {
|
|
8
|
+
type: 'problem',
|
|
9
|
+
docs: {
|
|
10
|
+
description: 'Disallows a class that extends Binary in app code',
|
|
11
|
+
},
|
|
12
|
+
messages: {
|
|
13
|
+
subclass: 'Do not extend Binary. A Binary that app code makes fails in dev and in the runtime, because only the framework can read and store its content. Use write from @t4h.framework/fs to turn a string or a Buffer into a Binary.',
|
|
14
|
+
},
|
|
15
|
+
schema: [],
|
|
16
|
+
},
|
|
17
|
+
create(context) {
|
|
18
|
+
const types = createCoreTypes(context);
|
|
19
|
+
function check(node) {
|
|
20
|
+
if (node.type !== 'ClassDeclaration' && node.type !== 'ClassExpression')
|
|
21
|
+
return;
|
|
22
|
+
if (!node.superClass || isAmbient(node))
|
|
23
|
+
return;
|
|
24
|
+
if (!types.extendsCoreClass(node, BINARY_CLASSES))
|
|
25
|
+
return;
|
|
26
|
+
context.report({ node, messageId: 'subclass' });
|
|
27
|
+
}
|
|
28
|
+
return { ClassDeclaration: check, ClassExpression: check };
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=no-binary-subclass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-binary-subclass.js","sourceRoot":"","sources":["../../../src/eslint/rules/no-binary-subclass.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE1C,SAAS,SAAS,CAAC,IAAe;IAChC,OAAQ,IAA8B,CAAC,OAAO,KAAK,IAAI,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,mDAAmD;SACjE;QACD,QAAQ,EAAE;YACR,QAAQ,EACN,6NAA6N;SAChO;QACD,MAAM,EAAE,EAAE;KACX;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEtC,SAAS,KAAK,CAAC,IAAe;YAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;gBACrE,OAAM;YACR,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAM;YAC/C,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC;gBAAE,OAAM;YAEzD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAA;QACjD,CAAC;QAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAA;IAC5D,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-framework-activity-in-app.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-framework-activity-in-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAelC,eAAO,MAAM,wBAAwB,EAAE,IAAI,CAAC,UAsC3C,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createCoreTypes } from '../tools/coreTypes.js';
|
|
2
|
+
import { isActivityClass } from '../tools/workflowSides.js';
|
|
3
|
+
function isFrameworkActivity(types, node, declaration) {
|
|
4
|
+
if (!types.isDeclaredInOtherFrameworkPackage(declaration))
|
|
5
|
+
return false;
|
|
6
|
+
return isActivityClass(types, node);
|
|
7
|
+
}
|
|
8
|
+
export const noFrameworkActivityInApp = {
|
|
9
|
+
meta: {
|
|
10
|
+
type: 'problem',
|
|
11
|
+
docs: {
|
|
12
|
+
description: 'Disallows constructing or extending an activity of a framework package other than the core',
|
|
13
|
+
},
|
|
14
|
+
messages: {
|
|
15
|
+
construct: 'Do not construct the activity of a framework package. Call the function of the package in the workflow, for example http.get, render, unzip or write.',
|
|
16
|
+
extend: 'Do not extend the activity of a framework package. Call the function of the package in the workflow, for example http.get, render, unzip or write.',
|
|
17
|
+
},
|
|
18
|
+
schema: [],
|
|
19
|
+
},
|
|
20
|
+
create(context) {
|
|
21
|
+
const types = createCoreTypes(context);
|
|
22
|
+
function checkClass(node) {
|
|
23
|
+
if (node.type !== 'ClassDeclaration' && node.type !== 'ClassExpression')
|
|
24
|
+
return;
|
|
25
|
+
const superClass = node.superClass;
|
|
26
|
+
if (!superClass || !isFrameworkActivity(types, node, superClass))
|
|
27
|
+
return;
|
|
28
|
+
context.report({ node: superClass, messageId: 'extend' });
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
NewExpression(node) {
|
|
32
|
+
if (!isFrameworkActivity(types, node, node))
|
|
33
|
+
return;
|
|
34
|
+
context.report({ node, messageId: 'construct' });
|
|
35
|
+
},
|
|
36
|
+
ClassDeclaration: checkClass,
|
|
37
|
+
ClassExpression: checkClass,
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=no-framework-activity-in-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-framework-activity-in-app.js","sourceRoot":"","sources":["../../../src/eslint/rules/no-framework-activity-in-app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAkB,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,SAAS,mBAAmB,CAC1B,KAAgB,EAChB,IAAe,EACf,WAAsB;IAEtB,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IAEvE,OAAO,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,4FAA4F;SAC/F;QACD,QAAQ,EAAE;YACR,SAAS,EACP,uJAAuJ;YACzJ,MAAM,EACJ,oJAAoJ;SACvJ;QACD,MAAM,EAAE,EAAE;KACX;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEtC,SAAS,UAAU,CAAC,IAAe;YACjC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;gBACrE,OAAM;YAER,MAAM,UAAU,GAAG,IAAI,CAAC,UAA0C,CAAA;YAClE,IAAI,CAAC,UAAU,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,OAAM;YAExE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,OAAO;YACL,aAAa,CAAC,IAAI;gBAChB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;oBAAE,OAAM;gBAEnD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAA;YAClD,CAAC;YACD,gBAAgB,EAAE,UAAU;YAC5B,eAAe,EAAE,UAAU;SAC5B,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-io-in-workflow.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-io-in-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAS,MAAM,QAAQ,CAAA;AA+EzC,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,UAiCjC,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { resolveBinding } from '../tools/bindings.js';
|
|
2
|
+
import { createCoreTypes } from '../tools/coreTypes.js';
|
|
3
|
+
import { isInWorkflowFront } from '../tools/workflowSides.js';
|
|
4
|
+
const NODE_IO_MODULES = [
|
|
5
|
+
'http',
|
|
6
|
+
'https',
|
|
7
|
+
'http2',
|
|
8
|
+
'net',
|
|
9
|
+
'tls',
|
|
10
|
+
'dgram',
|
|
11
|
+
'dns',
|
|
12
|
+
'fs',
|
|
13
|
+
'fs/promises',
|
|
14
|
+
'child_process',
|
|
15
|
+
'worker_threads',
|
|
16
|
+
];
|
|
17
|
+
const NODE_MEMORY_MODULES = ['zlib', 'stream', 'stream/promises'];
|
|
18
|
+
const PACKAGE_IO_MODULES = [
|
|
19
|
+
'axios',
|
|
20
|
+
'undici',
|
|
21
|
+
'got',
|
|
22
|
+
'node-fetch',
|
|
23
|
+
'ky',
|
|
24
|
+
'pg',
|
|
25
|
+
'mysql',
|
|
26
|
+
'mysql2',
|
|
27
|
+
'knex',
|
|
28
|
+
'typeorm',
|
|
29
|
+
'sequelize',
|
|
30
|
+
'mongodb',
|
|
31
|
+
'mongoose',
|
|
32
|
+
'ioredis',
|
|
33
|
+
'redis',
|
|
34
|
+
'ssh2',
|
|
35
|
+
'ssh2-sftp-client',
|
|
36
|
+
'basic-ftp',
|
|
37
|
+
'nodemailer',
|
|
38
|
+
];
|
|
39
|
+
function withNodePrefix(names) {
|
|
40
|
+
return [...names, ...names.map(name => `node:${name}`)];
|
|
41
|
+
}
|
|
42
|
+
const MODULE_MESSAGES = new Map([
|
|
43
|
+
...withNodePrefix(NODE_IO_MODULES).map(name => [name, 'io']),
|
|
44
|
+
...PACKAGE_IO_MODULES.map(name => [name, 'io']),
|
|
45
|
+
...withNodePrefix(NODE_MEMORY_MODULES).map(name => [name, 'memory']),
|
|
46
|
+
]);
|
|
47
|
+
function baseIdentifier(node) {
|
|
48
|
+
let current = node;
|
|
49
|
+
while (current.type === 'MemberExpression')
|
|
50
|
+
current = current.object;
|
|
51
|
+
return current.type === 'Identifier' ? current : undefined;
|
|
52
|
+
}
|
|
53
|
+
function messageIdOf(scope, callee) {
|
|
54
|
+
const base = baseIdentifier(callee);
|
|
55
|
+
if (!base)
|
|
56
|
+
return undefined;
|
|
57
|
+
const binding = resolveBinding(scope, base.name);
|
|
58
|
+
if (binding.kind === 'import')
|
|
59
|
+
return MODULE_MESSAGES.get(binding.source);
|
|
60
|
+
const isFetch = callee === base && base.name === 'fetch';
|
|
61
|
+
return binding.kind === 'global' && isFetch ? 'io' : undefined;
|
|
62
|
+
}
|
|
63
|
+
export const noIoInWorkflow = {
|
|
64
|
+
meta: {
|
|
65
|
+
type: 'problem',
|
|
66
|
+
docs: {
|
|
67
|
+
description: 'Disallows I/O and in-memory compression or streams in a workflow and in the constructor, toInput and toOutput of an activity',
|
|
68
|
+
},
|
|
69
|
+
messages: {
|
|
70
|
+
io: '{{label}} does I/O. The workflow and the constructor, toInput and toOutput of an activity run again on each replay. So the I/O runs again, and its result can change. Call a function of a framework package, such as @t4h.framework/http, orm, sftp, smtp, fs or zip. Or do the I/O in the run method of an activity.',
|
|
71
|
+
memory: '{{label}} works on the content in memory. The workflow and the constructor, toInput and toOutput of an activity run again on each replay. So a large buffer costs memory and time again on each replay. Do this work in an activity, or use @t4h.framework/zip or @t4h.framework/fs.',
|
|
72
|
+
},
|
|
73
|
+
schema: [],
|
|
74
|
+
},
|
|
75
|
+
create(context) {
|
|
76
|
+
const types = createCoreTypes(context);
|
|
77
|
+
function check(node) {
|
|
78
|
+
if (node.type !== 'CallExpression' && node.type !== 'NewExpression')
|
|
79
|
+
return;
|
|
80
|
+
const callee = node.callee;
|
|
81
|
+
const scope = context.sourceCode.getScope(node);
|
|
82
|
+
const messageId = messageIdOf(scope, callee);
|
|
83
|
+
if (!messageId || !isInWorkflowFront(types, node))
|
|
84
|
+
return;
|
|
85
|
+
const prefix = node.type === 'NewExpression' ? 'new ' : '';
|
|
86
|
+
const label = `${prefix}${context.sourceCode.getText(callee)}()`;
|
|
87
|
+
context.report({ node, messageId, data: { label } });
|
|
88
|
+
}
|
|
89
|
+
return { CallExpression: check, NewExpression: check };
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=no-io-in-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-io-in-workflow.js","sourceRoot":"","sources":["../../../src/eslint/rules/no-io-in-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-literal-secret-in-authorization.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-literal-secret-in-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AA6ClC,eAAO,MAAM,8BAA8B,EAAE,IAAI,CAAC,UA6BjD,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createCoreTypes } from '../tools/coreTypes.js';
|
|
2
|
+
const AUTHORIZATION_CLASSES = new Set(['Authorization']);
|
|
3
|
+
const SECRET_KEYS = new Set(['secret', 'clientSecret']);
|
|
4
|
+
function keyName(node) {
|
|
5
|
+
if (node.type === 'Identifier')
|
|
6
|
+
return node.name;
|
|
7
|
+
if (node.type === 'Literal' && typeof node.value === 'string')
|
|
8
|
+
return node.value;
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
function isLiteralString(node) {
|
|
12
|
+
if (node.type === 'Literal')
|
|
13
|
+
return typeof node.value === 'string';
|
|
14
|
+
return node.type === 'TemplateLiteral' && node.expressions.length === 0;
|
|
15
|
+
}
|
|
16
|
+
function toLiteralSecret(property) {
|
|
17
|
+
if (property.type !== 'Property' || property.computed)
|
|
18
|
+
return [];
|
|
19
|
+
const key = keyName(property.key);
|
|
20
|
+
const value = property.value;
|
|
21
|
+
if (!key || !SECRET_KEYS.has(key) || !isLiteralString(value))
|
|
22
|
+
return [];
|
|
23
|
+
return [{ key, value }];
|
|
24
|
+
}
|
|
25
|
+
function literalSecrets(argument) {
|
|
26
|
+
if (argument.type !== 'ObjectExpression')
|
|
27
|
+
return [];
|
|
28
|
+
return argument.properties.flatMap(property => toLiteralSecret(property));
|
|
29
|
+
}
|
|
30
|
+
export const noLiteralSecretInAuthorization = {
|
|
31
|
+
meta: {
|
|
32
|
+
type: 'problem',
|
|
33
|
+
docs: {
|
|
34
|
+
description: 'Disallows a literal secret in the options of an Authorization',
|
|
35
|
+
},
|
|
36
|
+
messages: {
|
|
37
|
+
literal: 'Do not write the value of {{key}} in code. A secret in code goes into the repository and into the manifest. Read the value from the env that EnvDesign creates in src/constants/environments.ts.',
|
|
38
|
+
},
|
|
39
|
+
schema: [],
|
|
40
|
+
},
|
|
41
|
+
create(context) {
|
|
42
|
+
const types = createCoreTypes(context);
|
|
43
|
+
return {
|
|
44
|
+
NewExpression(node) {
|
|
45
|
+
const secrets = node.arguments.flatMap(argument => literalSecrets(argument));
|
|
46
|
+
if (secrets.length === 0)
|
|
47
|
+
return;
|
|
48
|
+
if (!types.extendsCoreClass(node, AUTHORIZATION_CLASSES))
|
|
49
|
+
return;
|
|
50
|
+
for (const { key, value } of secrets)
|
|
51
|
+
context.report({ node: value, messageId: 'literal', data: { key } });
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=no-literal-secret-in-authorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-literal-secret-in-authorization.js","sourceRoot":"","sources":["../../../src/eslint/rules/no-literal-secret-in-authorization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;AAExD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;AAEvD,SAAS,OAAO,CAAC,IAAe;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAA;IAEnB,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,IAAe;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAA;IAElE,OAAO,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAA;AACzE,CAAC;AAOD,SAAS,eAAe,CAAC,QAAmB;IAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IAEhE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAgB,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAkB,CAAA;IACzC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEvE,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,QAAmB;IACzC,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,EAAE,CAAA;IAEnD,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAC5C,eAAe,CAAC,QAAqB,CAAC,CACvC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAoB;IAC7D,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,+DAA+D;SAClE;QACD,QAAQ,EAAE;YACR,OAAO,EACL,kMAAkM;SACrM;QACD,MAAM,EAAE,EAAE;KACX;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEtC,OAAO;YACL,aAAa,CAAC,IAAI;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAChD,cAAc,CAAC,QAAqB,CAAC,CACtC,CAAA;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAM;gBAChC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,CAAC;oBAAE,OAAM;gBAEhE,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,OAAO;oBAClC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;YACxE,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-nondeterministic-in-workflow.d.ts","sourceRoot":"","sources":["../../../src/eslint/rules/no-nondeterministic-in-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAS,MAAM,QAAQ,CAAA;AAwGzC,eAAO,MAAM,4BAA4B,EAAE,IAAI,CAAC,UA6B/C,CAAA"}
|