moku6 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +131 -0
- data/exe/moku6 +6 -0
- data/lib/moku6/catalog.rb +23 -0
- data/lib/moku6/cli.rb +118 -0
- data/lib/moku6/config.rb +61 -0
- data/lib/moku6/differ.rb +74 -0
- data/lib/moku6/envelope_schema.rb +56 -0
- data/lib/moku6/event.rb +54 -0
- data/lib/moku6/generate.rb +95 -0
- data/lib/moku6/generators/base_generator.rb +31 -0
- data/lib/moku6/generators/bigquery_generator.rb +29 -0
- data/lib/moku6/generators/cloud_events_generator.rb +47 -0
- data/lib/moku6/generators/docs_generator.rb +49 -0
- data/lib/moku6/generators/event_catalog_generator.rb +57 -0
- data/lib/moku6/generators/example_generator.rb +66 -0
- data/lib/moku6/generators/json_schema_generator.rb +23 -0
- data/lib/moku6/generators/open_api_generator.rb +60 -0
- data/lib/moku6/generators/outbox_generator.rb +96 -0
- data/lib/moku6/generators/rails_generator.rb +84 -0
- data/lib/moku6/generators/ruby_generator.rb +27 -0
- data/lib/moku6/generators/typescript_generator.rb +59 -0
- data/lib/moku6/generators.rb +29 -0
- data/lib/moku6/initializer.rb +44 -0
- data/lib/moku6/linter.rb +60 -0
- data/lib/moku6/loader.rb +31 -0
- data/lib/moku6/offense.rb +13 -0
- data/lib/moku6/reporter.rb +71 -0
- data/lib/moku6/result.rb +23 -0
- data/lib/moku6/rules/action_naming_rule.rb +18 -0
- data/lib/moku6/rules/base_rule.rb +37 -0
- data/lib/moku6/rules/example_consistency_rule.rb +53 -0
- data/lib/moku6/rules/label_description_rule.rb +21 -0
- data/lib/moku6/rules/pii_field_name_heuristic_rule.rb +45 -0
- data/lib/moku6/rules/privacy_masking_rule.rb +21 -0
- data/lib/moku6/rules/retention_rule.rb +19 -0
- data/lib/moku6/rules/schema_rule.rb +31 -0
- data/lib/moku6/rules/uniqueness_rule.rb +22 -0
- data/lib/moku6/rules/visibility_rule.rb +27 -0
- data/lib/moku6/version.rb +6 -0
- data/lib/moku6.rb +55 -0
- data/schemas/audit-event.schema.json +85 -0
- data/sig/generated/moku6/catalog.rbs +22 -0
- data/sig/generated/moku6/config.rbs +43 -0
- data/sig/generated/moku6/differ.rbs +28 -0
- data/sig/generated/moku6/envelope_schema.rbs +19 -0
- data/sig/generated/moku6/event.rbs +51 -0
- data/sig/generated/moku6/generators/base_generator.rbs +22 -0
- data/sig/generated/moku6/generators/bigquery_generator.rbs +12 -0
- data/sig/generated/moku6/generators/cloud_events_generator.rbs +19 -0
- data/sig/generated/moku6/generators/docs_generator.rbs +18 -0
- data/sig/generated/moku6/generators/event_catalog_generator.rbs +16 -0
- data/sig/generated/moku6/generators/example_generator.rbs +23 -0
- data/sig/generated/moku6/generators/json_schema_generator.rbs +12 -0
- data/sig/generated/moku6/generators/open_api_generator.rbs +20 -0
- data/sig/generated/moku6/generators/outbox_generator.rbs +23 -0
- data/sig/generated/moku6/generators/rails_generator.rbs +23 -0
- data/sig/generated/moku6/generators/ruby_generator.rbs +15 -0
- data/sig/generated/moku6/generators/typescript_generator.rbs +20 -0
- data/sig/generated/moku6/generators.rbs +13 -0
- data/sig/generated/moku6/initializer.rbs +23 -0
- data/sig/generated/moku6/linter.rbs +31 -0
- data/sig/generated/moku6/loader.rbs +15 -0
- data/sig/generated/moku6/reporter.rbs +30 -0
- data/sig/generated/moku6/result.rbs +22 -0
- data/sig/generated/moku6/rules/action_naming_rule.rbs +10 -0
- data/sig/generated/moku6/rules/base_rule.rbs +23 -0
- data/sig/generated/moku6/rules/example_consistency_rule.rbs +18 -0
- data/sig/generated/moku6/rules/label_description_rule.rbs +15 -0
- data/sig/generated/moku6/rules/pii_field_name_heuristic_rule.rbs +21 -0
- data/sig/generated/moku6/rules/privacy_masking_rule.rbs +10 -0
- data/sig/generated/moku6/rules/retention_rule.rbs +10 -0
- data/sig/generated/moku6/rules/schema_rule.rbs +15 -0
- data/sig/generated/moku6/rules/uniqueness_rule.rbs +11 -0
- data/sig/generated/moku6/rules/visibility_rule.rbs +10 -0
- data/sig/generated/moku6/version.rbs +5 -0
- data/sig/generated/moku6.rbs +9 -0
- data/sig/manual/dependencies.rbs +13 -0
- data/sig/manual/offense.rbs +13 -0
- data/templates/init/.moku6.yml +18 -0
- data/templates/init/catalog/employee.updated.yaml +36 -0
- metadata +141 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Generated from lib/moku6/config.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
class Config
|
|
5
|
+
DEFAULTS: Hash[String, untyped]
|
|
6
|
+
|
|
7
|
+
DEFAULT_CONFIG_PATH: String
|
|
8
|
+
|
|
9
|
+
# : (?Hash[Symbol, untyped] options) -> Config
|
|
10
|
+
def self.load: (?Hash[Symbol, untyped] options) -> Config
|
|
11
|
+
|
|
12
|
+
# : (Hash[String, untyped] base, Hash[String, untyped] override) -> Hash[String, untyped]
|
|
13
|
+
def self.deep_merge: (Hash[String, untyped] base, Hash[String, untyped] override) -> Hash[String, untyped]
|
|
14
|
+
|
|
15
|
+
attr_reader data: Hash[String, untyped]
|
|
16
|
+
|
|
17
|
+
attr_reader options: Hash[Symbol, untyped]
|
|
18
|
+
|
|
19
|
+
# : (Hash[String, untyped] data, ?Hash[Symbol, untyped] options) -> void
|
|
20
|
+
def initialize: (Hash[String, untyped] data, ?Hash[Symbol, untyped] options) -> void
|
|
21
|
+
|
|
22
|
+
# : () -> String?
|
|
23
|
+
def catalog_dir: () -> String?
|
|
24
|
+
|
|
25
|
+
# : () -> String?
|
|
26
|
+
def output_dir: () -> String?
|
|
27
|
+
|
|
28
|
+
# : () -> String?
|
|
29
|
+
def naming_pattern: () -> String?
|
|
30
|
+
|
|
31
|
+
# : () -> bool
|
|
32
|
+
def strict?: () -> bool
|
|
33
|
+
|
|
34
|
+
# : () -> bool
|
|
35
|
+
def warn_pii_field_names?: () -> bool
|
|
36
|
+
|
|
37
|
+
# : () -> String
|
|
38
|
+
def examples_dir: () -> String
|
|
39
|
+
|
|
40
|
+
# : (String | Symbol name) -> String?
|
|
41
|
+
def generator_out: (String | Symbol name) -> String?
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated from lib/moku6/differ.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
# Detects breaking changes between two catalogs (design sections 13 / 16).
|
|
5
|
+
# Breaking changes (error): action removed, required field added, field type changed.
|
|
6
|
+
class Differ
|
|
7
|
+
@old: Catalog
|
|
8
|
+
|
|
9
|
+
@new: Catalog
|
|
10
|
+
|
|
11
|
+
# : (Catalog old_catalog, Catalog new_catalog) -> void
|
|
12
|
+
def initialize: (Catalog old_catalog, Catalog new_catalog) -> void
|
|
13
|
+
|
|
14
|
+
# : () -> Result
|
|
15
|
+
def run: () -> Result
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# : () -> Array[Offense]
|
|
20
|
+
def removed_actions: () -> Array[Offense]
|
|
21
|
+
|
|
22
|
+
# : (Event old_event, Event new_event) -> Array[Offense]
|
|
23
|
+
def field_changes: (Event old_event, Event new_event) -> Array[Offense]
|
|
24
|
+
|
|
25
|
+
# : (Event event, String message, String rule) -> Offense
|
|
26
|
+
def breaking: (Event event, String message, String rule) -> Offense
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/moku6/envelope_schema.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
# Builds the runtime event (envelope) validation JSON Schema from a definition.
|
|
5
|
+
# Shared by JsonSchemaGenerator and ExampleConsistencyRule (see design sections 8 / 12.2).
|
|
6
|
+
module EnvelopeSchema
|
|
7
|
+
TYPE_MAP: Hash[String, Hash[String, String]]
|
|
8
|
+
|
|
9
|
+
# : (Event event) -> Hash[String, untyped]
|
|
10
|
+
def self?.for: (Event event) -> Hash[String, untyped]
|
|
11
|
+
|
|
12
|
+
# The schema for the `metadata` object (the definition's fields).
|
|
13
|
+
# : (Event event) -> Hash[String, untyped]
|
|
14
|
+
def self?.metadata_schema: (Event event) -> Hash[String, untyped]
|
|
15
|
+
|
|
16
|
+
# : (Hash[String, untyped] f) -> Hash[String, untyped]
|
|
17
|
+
def self?.field_type: (Hash[String, untyped] f) -> Hash[String, untyped]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Generated from lib/moku6/event.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
class Event
|
|
5
|
+
attr_reader data: Hash[String, untyped]
|
|
6
|
+
|
|
7
|
+
attr_reader source_path: String
|
|
8
|
+
|
|
9
|
+
# : (Hash[String, untyped]? data, source_path: String) -> void
|
|
10
|
+
def initialize: (Hash[String, untyped]? data, source_path: String) -> void
|
|
11
|
+
|
|
12
|
+
# : () -> String?
|
|
13
|
+
def action: () -> String?
|
|
14
|
+
|
|
15
|
+
# : () -> String?
|
|
16
|
+
def label: () -> String?
|
|
17
|
+
|
|
18
|
+
# : () -> String?
|
|
19
|
+
def description: () -> String?
|
|
20
|
+
|
|
21
|
+
# : () -> String?
|
|
22
|
+
def category: () -> String?
|
|
23
|
+
|
|
24
|
+
# : () -> bool
|
|
25
|
+
def required?: () -> bool
|
|
26
|
+
|
|
27
|
+
# : () -> untyped
|
|
28
|
+
def actor: () -> untyped
|
|
29
|
+
|
|
30
|
+
# : () -> untyped
|
|
31
|
+
def target: () -> untyped
|
|
32
|
+
|
|
33
|
+
# : () -> Hash[String, untyped]
|
|
34
|
+
def fields: () -> Hash[String, untyped]
|
|
35
|
+
|
|
36
|
+
# : () -> untyped
|
|
37
|
+
def privacy: () -> untyped
|
|
38
|
+
|
|
39
|
+
# : () -> untyped
|
|
40
|
+
def visibility: () -> untyped
|
|
41
|
+
|
|
42
|
+
# : () -> untyped
|
|
43
|
+
def retention: () -> untyped
|
|
44
|
+
|
|
45
|
+
# : () -> Array[untyped]
|
|
46
|
+
def examples: () -> Array[untyped]
|
|
47
|
+
|
|
48
|
+
# : () -> Hash[String, untyped]
|
|
49
|
+
def to_h: () -> Hash[String, untyped]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/base_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
class BaseGenerator
|
|
6
|
+
AUTOGEN_NOTE: String
|
|
7
|
+
|
|
8
|
+
@catalog: Catalog
|
|
9
|
+
|
|
10
|
+
@config: Config
|
|
11
|
+
|
|
12
|
+
# : (Catalog catalog, Config config) -> void
|
|
13
|
+
def initialize: (Catalog catalog, Config config) -> void
|
|
14
|
+
|
|
15
|
+
# : () -> String
|
|
16
|
+
def render: () -> String
|
|
17
|
+
|
|
18
|
+
# : (String path) -> String
|
|
19
|
+
def write: (String path) -> String
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/bigquery_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits BigQuery DDL for the shared envelope (design section 12.5).
|
|
6
|
+
# Fields live in the `metadata JSON` column, consistent with section 8.
|
|
7
|
+
class BigQueryGenerator < BaseGenerator
|
|
8
|
+
# : () -> String
|
|
9
|
+
def render: () -> String
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/cloud_events_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits a CloudEvents (v1.0, structured JSON mode) validation JSON Schema per
|
|
6
|
+
# action. The CloudEvents `type` maps to the action and `data` carries the
|
|
7
|
+
# definition's metadata (design section 13: CloudEvents conversion).
|
|
8
|
+
class CloudEventsGenerator < BaseGenerator
|
|
9
|
+
SPEC_VERSION: String
|
|
10
|
+
|
|
11
|
+
# : (String dir) -> String
|
|
12
|
+
def write: (String dir) -> String
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def schema_for: (untyped e) -> untyped
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/docs_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
class DocsGenerator < BaseGenerator
|
|
6
|
+
# : () -> String
|
|
7
|
+
def render: () -> String
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def summary_table: () -> untyped
|
|
12
|
+
|
|
13
|
+
def detail: (untyped e) -> untyped
|
|
14
|
+
|
|
15
|
+
def yn: (untyped v) -> untyped
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/event_catalog_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits EventCatalog (eventcatalog.dev) compatible event documents, one per
|
|
6
|
+
# action at <action>/index.md (design section 13: EventCatalog integration).
|
|
7
|
+
class EventCatalogGenerator < BaseGenerator
|
|
8
|
+
# : (String dir) -> String
|
|
9
|
+
def write: (String dir) -> String
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def document: (untyped e) -> untyped
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/example_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Generates a minimal sample event (envelope) satisfying required fields per definition.
|
|
6
|
+
class ExampleGenerator < BaseGenerator
|
|
7
|
+
# : (String dir) -> String
|
|
8
|
+
def write: (String dir) -> String
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def example_for: (untyped e) -> untyped
|
|
13
|
+
|
|
14
|
+
def actor_sample: (untyped e) -> untyped
|
|
15
|
+
|
|
16
|
+
def target_sample: (untyped e) -> untyped
|
|
17
|
+
|
|
18
|
+
def metadata_sample: (untyped e) -> untyped
|
|
19
|
+
|
|
20
|
+
def sample_value: (untyped type) -> untyped
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/json_schema_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits a runtime event (envelope) validation JSON Schema per action.
|
|
6
|
+
# write(dir) takes a directory and writes multiple files.
|
|
7
|
+
class JsonSchemaGenerator < BaseGenerator
|
|
8
|
+
# : (String dir) -> String
|
|
9
|
+
def write: (String dir) -> String
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/open_api_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits a single OpenAPI 3.1 document describing audit events as webhooks,
|
|
6
|
+
# with one component schema per action (design section 13: OpenAPI output).
|
|
7
|
+
class OpenApiGenerator < BaseGenerator
|
|
8
|
+
# : () -> String
|
|
9
|
+
def render: () -> String
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def document: () -> untyped
|
|
14
|
+
|
|
15
|
+
def webhooks: () -> untyped
|
|
16
|
+
|
|
17
|
+
def schemas: () -> untyped
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/outbox_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits a sample Rails transactional outbox for audit events: a migration,
|
|
6
|
+
# an ActiveRecord model, and a dispatcher (design section 13: Outbox sample).
|
|
7
|
+
# The files are a starting point and are meant to be edited.
|
|
8
|
+
class OutboxGenerator < BaseGenerator
|
|
9
|
+
FILES: Hash[String, Symbol]
|
|
10
|
+
|
|
11
|
+
# : (String dir) -> String
|
|
12
|
+
def write: (String dir) -> String
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def migration: () -> untyped
|
|
17
|
+
|
|
18
|
+
def model: () -> untyped
|
|
19
|
+
|
|
20
|
+
def dispatcher: () -> untyped
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/rails_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits a Ruby SDK with one typed emitter method per action. Each method
|
|
6
|
+
# builds the canonical envelope and hands it to a configurable sink, so a
|
|
7
|
+
# Rails app can wire it to an outbox (design section 13: Rails SDK).
|
|
8
|
+
class RailsGenerator < BaseGenerator
|
|
9
|
+
# : () -> String
|
|
10
|
+
def render: () -> String
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def sink_block: () -> untyped
|
|
15
|
+
|
|
16
|
+
def emitter_method: (untyped e) -> untyped
|
|
17
|
+
|
|
18
|
+
def method_name: (untyped e) -> untyped
|
|
19
|
+
|
|
20
|
+
def masked_fields: (untyped e) -> untyped
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/ruby_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
# Emits Ruby constants for every action (design section 12.4).
|
|
6
|
+
class RubyGenerator < BaseGenerator
|
|
7
|
+
# : () -> String
|
|
8
|
+
def render: () -> String
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def const_name: (untyped e) -> untyped
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators/typescript_generator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
class TypeScriptGenerator < BaseGenerator
|
|
6
|
+
# : () -> String
|
|
7
|
+
def render: () -> String
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def union_type: (untyped events) -> untyped
|
|
12
|
+
|
|
13
|
+
def interface: (untyped e) -> untyped
|
|
14
|
+
|
|
15
|
+
def iface_name: (untyped e) -> untyped
|
|
16
|
+
|
|
17
|
+
def ts: (untyped f) -> untyped
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Generated from lib/moku6/generators.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Generators
|
|
5
|
+
REGISTRY: Hash[Symbol, untyped]
|
|
6
|
+
|
|
7
|
+
# : (String | Symbol name, untyped klass) -> untyped
|
|
8
|
+
def self.register: (String | Symbol name, untyped klass) -> untyped
|
|
9
|
+
|
|
10
|
+
# : (String | Symbol name, Catalog catalog, Config config) -> untyped
|
|
11
|
+
def self.build: (String | Symbol name, Catalog catalog, Config config) -> untyped
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/moku6/initializer.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
# Backs `moku6 init`. Copies templates/init into ./ (never overwrites existing files).
|
|
5
|
+
class Initializer
|
|
6
|
+
TEMPLATE_DIR: String
|
|
7
|
+
|
|
8
|
+
@options: Hash[Symbol, untyped]
|
|
9
|
+
|
|
10
|
+
@dest_root: String
|
|
11
|
+
|
|
12
|
+
# : (?Hash[Symbol, untyped] options) -> void
|
|
13
|
+
def initialize: (?Hash[Symbol, untyped] options) -> void
|
|
14
|
+
|
|
15
|
+
# : () -> void
|
|
16
|
+
def run: () -> void
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# : () -> Array[String]
|
|
21
|
+
def entries: () -> Array[String]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Generated from lib/moku6/linter.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
class Linter
|
|
5
|
+
EVENT_RULES: Array[singleton(Rules::BaseRule)]
|
|
6
|
+
|
|
7
|
+
CATALOG_RULES: Array[singleton(Rules::BaseRule)]
|
|
8
|
+
|
|
9
|
+
@catalog: Catalog
|
|
10
|
+
|
|
11
|
+
@config: Config
|
|
12
|
+
|
|
13
|
+
# : (singleton(Rules::BaseRule) klass) -> Array[singleton(Rules::BaseRule)]
|
|
14
|
+
def self.register_event_rule: (singleton(Rules::BaseRule) klass) -> Array[singleton(Rules::BaseRule)]
|
|
15
|
+
|
|
16
|
+
# : (singleton(Rules::BaseRule) klass) -> Array[singleton(Rules::BaseRule)]
|
|
17
|
+
def self.register_catalog_rule: (singleton(Rules::BaseRule) klass) -> Array[singleton(Rules::BaseRule)]
|
|
18
|
+
|
|
19
|
+
# : () -> Array[singleton(Rules::BaseRule)]
|
|
20
|
+
def self.custom_event_rules: () -> Array[singleton(Rules::BaseRule)]
|
|
21
|
+
|
|
22
|
+
# : () -> Array[singleton(Rules::BaseRule)]
|
|
23
|
+
def self.custom_catalog_rules: () -> Array[singleton(Rules::BaseRule)]
|
|
24
|
+
|
|
25
|
+
# : (Catalog catalog, Config config) -> void
|
|
26
|
+
def initialize: (Catalog catalog, Config config) -> void
|
|
27
|
+
|
|
28
|
+
# : () -> Result
|
|
29
|
+
def run: () -> Result
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/moku6/loader.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
class Loader
|
|
5
|
+
PERMITTED_CLASSES: Array[Class]
|
|
6
|
+
|
|
7
|
+
@catalog_dir: String
|
|
8
|
+
|
|
9
|
+
# : (String catalog_dir) -> void
|
|
10
|
+
def initialize: (String catalog_dir) -> void
|
|
11
|
+
|
|
12
|
+
# : () -> Catalog
|
|
13
|
+
def load: () -> Catalog
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Generated from lib/moku6/reporter.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Reporter
|
|
5
|
+
# : (String? format) -> untyped
|
|
6
|
+
def self.for: (String? format) -> untyped
|
|
7
|
+
|
|
8
|
+
module Text
|
|
9
|
+
# : (Result result) -> void
|
|
10
|
+
def self.report: (Result result) -> void
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module Json
|
|
14
|
+
# : (Result result) -> void
|
|
15
|
+
def self.report: (Result result) -> void
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Review-friendly Markdown report (e.g. for posting as a PR comment).
|
|
19
|
+
module Markdown
|
|
20
|
+
# : (Result result) -> void
|
|
21
|
+
def self.report: (Result result) -> void
|
|
22
|
+
|
|
23
|
+
# : (Result result) -> String
|
|
24
|
+
def self.render: (Result result) -> String
|
|
25
|
+
|
|
26
|
+
# : (String title, Array[Offense] offenses) -> Array[String]
|
|
27
|
+
def self.section: (String title, Array[Offense] offenses) -> Array[String]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated from lib/moku6/result.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
class Result
|
|
5
|
+
attr_reader offenses: Array[Offense]
|
|
6
|
+
|
|
7
|
+
# : (Array[Offense] offenses) -> void
|
|
8
|
+
def initialize: (Array[Offense] offenses) -> void
|
|
9
|
+
|
|
10
|
+
# : () -> Array[Offense]
|
|
11
|
+
def errors: () -> Array[Offense]
|
|
12
|
+
|
|
13
|
+
# : () -> Array[Offense]
|
|
14
|
+
def warnings: () -> Array[Offense]
|
|
15
|
+
|
|
16
|
+
# : () -> bool
|
|
17
|
+
def errors?: () -> bool
|
|
18
|
+
|
|
19
|
+
# : () -> bool
|
|
20
|
+
def empty?: () -> bool
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/base_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
class BaseRule
|
|
6
|
+
@config: Config
|
|
7
|
+
|
|
8
|
+
# : (Config config) -> void
|
|
9
|
+
def initialize: (Config config) -> void
|
|
10
|
+
|
|
11
|
+
# : (Event event) -> Array[Offense]
|
|
12
|
+
def check: (Event event) -> Array[Offense]
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
# : (Event event, Symbol severity, String message, ?rule: String) -> Offense
|
|
17
|
+
def offense: (Event event, Symbol severity, String message, ?rule: String) -> Offense
|
|
18
|
+
|
|
19
|
+
# : () -> String
|
|
20
|
+
def rule_id: () -> String
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/example_consistency_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
class ExampleConsistencyRule < BaseRule
|
|
6
|
+
# : (Event event) -> Array[Offense]
|
|
7
|
+
def check: (Event event) -> Array[Offense]
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
# : (Event event) -> Array[untyped]
|
|
12
|
+
def collect_examples: (Event event) -> Array[untyped]
|
|
13
|
+
|
|
14
|
+
# : (Event event) -> String?
|
|
15
|
+
def external_path: (Event event) -> String?
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/label_description_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
class LabelDescriptionRule < BaseRule
|
|
6
|
+
# : (Event event) -> Array[Offense]
|
|
7
|
+
def check: (Event event) -> Array[Offense]
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
# : (untyped value) -> bool
|
|
12
|
+
def blank?: (untyped value) -> bool
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/pii_field_name_heuristic_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
# Warns when a field name looks like PII (email/phone/ssn, ...) but is not
|
|
6
|
+
# covered by privacy.masked_fields (design section 10.1, v0.2).
|
|
7
|
+
class PiiFieldNameHeuristicRule < BaseRule
|
|
8
|
+
PII_PATTERN: Regexp
|
|
9
|
+
|
|
10
|
+
# : (Event event) -> Array[Offense]
|
|
11
|
+
def check: (Event event) -> Array[Offense]
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
# Tokens that count a field as masked: the full masked path and each of its
|
|
16
|
+
# dot-separated segments (e.g. "before.email" covers "email").
|
|
17
|
+
# : (Event event) -> Array[String]
|
|
18
|
+
def masked_field_tokens: (Event event) -> Array[String]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/schema_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
class SchemaRule < BaseRule
|
|
6
|
+
SCHEMA_PATH: String
|
|
7
|
+
|
|
8
|
+
# : () -> untyped
|
|
9
|
+
def self.schemer: () -> untyped
|
|
10
|
+
|
|
11
|
+
# : (Event event) -> Array[Offense]
|
|
12
|
+
def check: (Event event) -> Array[Offense]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from lib/moku6/rules/uniqueness_rule.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Moku6
|
|
4
|
+
module Rules
|
|
5
|
+
class UniquenessRule < BaseRule
|
|
6
|
+
# catalog-level rule
|
|
7
|
+
# : (Catalog catalog) -> Array[Offense]
|
|
8
|
+
def check_catalog: (Catalog catalog) -> Array[Offense]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|